{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/sigma/utils/index.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/graphology-utils/is-graph.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/file-saver/dist/FileSaver.min.js","webpack:///./node_modules/sigma/index.js","webpack:///./node_modules/sigma/rendering/webgl/programs/common/edge.js","webpack:///./app/javascript/packs/saveGraph.js","webpack:///./node_modules/graphology/dist/graphology.umd.min.js","webpack:///./node_modules/graphology-layout-forceatlas2/worker.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/sigma/types.js","webpack:///./node_modules/mnemonist/utils/typed-arrays.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/sigma/core/camera.js","webpack:///./node_modules/sigma/utils/matrices.js","webpack:///./node_modules/sigma/utils/easings.js","webpack:///./node_modules/sigma/core/captors/mouse.js","webpack:///./node_modules/sigma/core/captors/captor.js","webpack:///./node_modules/sigma/core/quadtree.js","webpack:///./node_modules/sigma/rendering/canvas/label.js","webpack:///./node_modules/sigma/rendering/webgl/programs/common/program.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/edge.frag.glsl.js","webpack:///./node_modules/graphology-layout-forceatlas2/helpers.js","webpack:///./node_modules/graphology-layout-forceatlas2/defaults.js","webpack:///./node_modules/graphology-utils/defaults.js","webpack:///./node_modules/obliterator/iterator.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/graphology-communities-louvain/index.js","webpack:///./node_modules/sigma/sigma.js","webpack:///./node_modules/sigma/utils/animate.js","webpack:///./node_modules/sigma/utils/data.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/@yomguithereal/helpers/extend.js","webpack:///./node_modules/sigma/core/labels.js","webpack:///./node_modules/sigma/settings.js","webpack:///./node_modules/sigma/rendering/canvas/hover.js","webpack:///./node_modules/sigma/rendering/canvas/edge-label.js","webpack:///./node_modules/sigma/rendering/webgl/programs/node.fast.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/node.fast.vert.glsl.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/node.fast.frag.glsl.js","webpack:///./node_modules/sigma/rendering/webgl/programs/common/node.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/utils.js","webpack:///./node_modules/sigma/rendering/webgl/programs/edge.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/edge.vert.glsl.js","webpack:///./node_modules/sigma/rendering/webgl/programs/edge.arrow.js","webpack:///./node_modules/sigma/rendering/webgl/programs/edge.arrowHead.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/edge.arrowHead.vert.glsl.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/edge.arrowHead.frag.glsl.js","webpack:///./node_modules/sigma/rendering/webgl/programs/edge.clamped.js","webpack:///./node_modules/sigma/rendering/webgl/shaders/edge.clamped.vert.glsl.js","webpack:///./node_modules/sigma/core/captors/touch.js","webpack:///./node_modules/sigma/utils/edge-collisions.js","webpack:///./node_modules/graphology-layout-noverlap/worker.js","webpack:///./node_modules/graphology-layout-noverlap/webworker.js","webpack:///./node_modules/graphology-layout-noverlap/helpers.js","webpack:///./node_modules/graphology-layout-noverlap/defaults.js","webpack:///./node_modules/graphology-layout-forceatlas2/webworker.js","webpack:///./node_modules/graphology-layout-forceatlas2/index.js","webpack:///./node_modules/graphology-layout-forceatlas2/iterate.js","webpack:///./node_modules/graphology-utils/infer-type.js","webpack:///./node_modules/mnemonist/sparse-map.js","webpack:///./node_modules/mnemonist/sparse-queue-set.js","webpack:///./node_modules/graphology-communities-louvain/node_modules/pandemonium/random-index.js","webpack:///./node_modules/graphology-indices/louvain.js","webpack:///./node_modules/graphology-utils/getters.js","webpack:///./node_modules/graphology-generators/random/clusters.js","webpack:///./node_modules/graphology-utils/is-graph-constructor.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js","webpack:///./app/javascript/packs/application.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","__read","this","e","ar","next","done","push","error","__importDefault","mod","validateGraph","canUse32BitsIndices","extractPixel","getMatrixImpact","matrixFromCamera","getCorrectionRatio","floatColor","floatArrayColor","parseColor","zIndexOrdering","createNormalizationFunction","graphExtent","getPixelRatio","createElement","cancelFrame","requestFrame","assignDeep","assign","isPlainObject","is_graph_1","matrices_1","data_1","target","objects","_i","arguments","length","k","requestAnimationFrame","callback","setTimeout","cancelAnimationFrame","requestID","clearTimeout","tag","style","attributes","element","document","setAttribute","window","devicePixelRatio","graph","xMin","Infinity","xMax","yMin","yMax","forEachNode","_","attr","x","y","extent","_a","minX","maxX","_b","minY","maxY","ratio","Math","max","dX","dY","fn","data","applyTo","inverse","elements","sort","a","b","zA","zB","INT8","Int8Array","INT32","Int32Array","buffer","FLOAT32","Float32Array","RGBA_TEST_REGEX","RGBA_EXTRACT_REGEX","val","g","parseInt","charAt","test","match","FLOAT_COLOR_CACHE","htmlColor","HTML_COLORS","parsed","color","viewportDimensions","graphDimensions","viewportRatio","height","width","graphRatio","min","state","padding","angle","matrix","identity","smallestDimension","correctionRatio","multiply","translate","scale","rotate","cameraState","multiplyVec2","cos","sin","sqrt","pow","gl","array","Uint8Array","readPixels","RGBA","UNSIGNED_BYTE","WebGL2RenderingContext","getExtension","default","Error","Number","isFinite","concat","addUndirectedEdgeWithKey","dropNode","multi","Function","autoBom","console","warn","type","Blob","XMLHttpRequest","open","responseType","onload","response","onerror","send","status","dispatchEvent","MouseEvent","createEvent","initMouseEvent","f","self","global","navigator","userAgent","saveAs","HTMLAnchorElement","h","URL","webkitURL","j","download","rel","href","origin","location","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","title","body","innerText","HTMLElement","safari","FileReader","onloadend","result","replace","readAsDataURL","Sigma","MouseCaptor","QuadTree","Camera","sigma_1","camera_1","quadtree_1","mouse_1","_extendStatics","__extends","setPrototypeOf","__proto__","Array","TypeError","String","__","createEdgeCompoundProgram","AbstractEdgeProgram","_super","vertexShaderSource","fragmentShaderSource","points","AbstractProgram","programClasses","EdgeCompoundProgram","renderer","programs","map","ProgramClass","bufferData","forEach","program","allocate","capacity","computeIndices","render","params","process","sourceData","targetData","hidden","offset","saveAsPNG","inputLayers","getDimensions","pixelRatio","tmpRoot","position","right","bottom","appendChild","tmpRenderer","getGraph","getSettings","getCamera","setState","getState","refresh","canvas","ctx","getContext","canvases","getCanvases","filter","id","keys","drawImage","toBlob","blob","FileSaver","kill","remove","getPrototypeOf","Reflect","construct","sham","Proxy","Boolean","valueOf","apply","Map","toString","indexOf","has","set","writable","configurable","u","ReferenceError","_nodes","out","undirected","isArray","w","v","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","isNaN","init","once","Promise","removeListener","slice","N","on","EventEmitter","_events","_eventsCount","_maxListeners","G","defaultMaxListeners","E","newListener","emit","listener","unshift","warned","emitter","count","A","fired","wrapFn","S","D","U","L","addEventListener","removeEventListener","RangeError","setMaxListeners","getMaxListeners","message","context","addListener","prependListener","prependOnceListener","shift","pop","off","removeAllListeners","listeners","rawListeners","listenerCount","eventNames","of","empty","fromSequence","is","O","C","ARRAY_BUFFER_SUPPORT","ArrayBuffer","SYMBOL_SUPPORT","z","M","W","P","R","isView","K","T","B","F","captureStackTrace","I","Y","q","clear","J","V","H","source","Q","_edges","inDegree","outDegree","undirectedDegree","in","attach","attachMulti","previous","detach","detachMulti","X","attacher","Z","$","tt","et","nt","direction","rt","it","ot","edge","sourceAttributes","targetAttributes","at","ut","ct","st","size","from","undirectedSize","directedSize","values","dt","ht","pt","ft","lt","gt","yt","wt","vt","bt","mt","kt","wrap","_t","neighbor","Et","At","St","Dt","Lt","floor","random","Ut","Set","Nt","jt","allowSelfLoops","Ot","NodeDataClass","Ct","_edgeKeyGenerator","_undirectedSelfLoopCount","_directedSelfLoopCount","_undirectedSize","_directedSize","zt","Mt","delete","Wt","_options","_resetInstanceCounters","hasNode","hasDirectedEdge","hasUndirectedEdge","hasEdge","directedEdge","undirectedEdge","areDirectedNeighbors","areOutNeighbors","areInNeighbors","areUndirectedNeighbors","areNeighbors","areInboundNeighbors","areOutboundNeighbors","directedDegree","inboundDegree","outboundDegree","degree","inDegreeWithoutSelfLoops","outDegreeWithoutSelfLoops","directedDegreeWithoutSelfLoops","undirectedDegreeWithoutSelfLoops","inboundDegreeWithoutSelfLoops","outboundDegreeWithoutSelfLoops","degreeWithoutSelfLoops","extremities","opposite","hasExtremity","isUndirected","isDirected","isSelfLoop","addNode","mergeNode","updateNode","dropEdge","dropDirectedEdge","dropUndirectedEdge","clearEdges","getAttribute","_attributes","getAttributes","hasAttribute","updateAttribute","removeAttribute","replaceAttributes","mergeAttributes","updateAttributes","updateEachNodeAttributes","hints","updateEachEdgeAttributes","forEachAdjacencyEntry","forEachAdjacencyEntryWithOrphans","forEachAssymetricAdjacencyEntry","forEachAssymetricAdjacencyEntryWithOrphans","nodes","findNode","mapNodes","order","someNode","everyNode","filterNodes","reduceNodes","nodeEntries","node","export","options","edges","import","forEachEdge","mergeUndirectedEdgeWithKey","mergeDirectedEdgeWithKey","addDirectedEdgeWithKey","mergeUndirectedEdge","mergeDirectedEdge","addUndirectedEdge","addDirectedEdge","nullCopy","emptyCopy","copy","toJSON","inspect","startsWith","for","generateKey","toUpperCase","Gt","xt","Pt","Rt","Kt","Tt","Bt","Ft","Graph","DirectedGraph","UndirectedGraph","MultiGraph","MultiDirectedGraph","MultiUndirectedGraph","InvalidArgumentsGraphError","NotFoundGraphError","UsageGraphError","workerFunction","isGraph","helpers","DEFAULT_SETTINGS","FA2LayoutSupervisor","weightAttribute","weighted","weight","settings","validationError","validateSettings","worker","matrices","running","killed","outputReducer","handleMessage","respawnFrame","undefined","handleGraphUpdate","terminate","spawnWorker","isRunning","createWorker","start","event","assignLayoutChanges","readGraphPositions","askForIterations","withEdges","payload","buffers","postMessage","graphToByteArrays","stop","webpackPolyfill","deprecate","paths","children","TypedEventEmitter","_this","rawEmitter","MAX_8BIT_INTEGER","MAX_16BIT_INTEGER","MAX_32BIT_INTEGER","MAX_SIGNED_8BIT_INTEGER","MAX_SIGNED_16BIT_INTEGER","MAX_SIGNED_32BIT_INTEGER","getPointerArray","maxIndex","Uint16Array","Uint32Array","getSignedPointerArray","Int16Array","Float64Array","getNumberType","sign","TYPE_PRIORITY","getMinimalRepresentation","maxType","maxPriority","isTypedArray","indices","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","err","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","method","arg","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","resolve","reject","__await","then","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","reverse","skipTempReset","prev","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","animate_1","easings_1","utils_1","types_1","DEFAULT_ZOOMING_RATIO","minRatio","maxRatio","nextFrame","previousState","enabled","enable","disable","hasState","getPreviousState","getBoundedRatio","validateState","validatedState","isAnimated","validState","animate","opts","ANIMATE_DEFAULTS","easing","Date","now","initialState","duration","animationCallback","coefficient","newState","animatedZoom","factorOrOptions","factor","animatedUnzoom","animatedReset","a00","a01","a02","a10","a11","a12","a20","a21","a22","b00","b01","b02","b10","b11","b12","b20","b21","b22","b0","b1","cubicInOut","cubicOut","cubicIn","quadraticInOut","quadraticOut","quadraticIn","linear","easings","__createBinding","k2","__setModuleDefault","__importStar","captor_1","container","draggedEvents","downStartTime","lastMouseX","lastMouseY","isMouseDown","isMoving","movingTimeout","startCameraState","clicks","doubleClickTimeout","currentWheelDirection","handleClick","handleRightClick","handleDown","handleUp","handleMove","handleWheel","handleOut","handleDoubleClick","getMouseCoords","preventDefault","stopPropagation","mouseCoords","sigmaDefaultPrevented","camera","newRatio","getViewportZoomedState","getPosition","previousCameraState","eX","eY","lastMouse","viewportToFramedGraph","mouse","offsetX","offsetY","delta","getWheelDelta","wheelCoords","getWheelCoords","ratioDiff","wheelDirection","lastWheelTriggerTime","MOUSE_ZOOM_DURATION","__assign","getTouchCoords","getTouchesArray","dom","bbox","getBoundingClientRect","clientX","left","clientY","top","preventSigmaDefault","original","touches","arr","deltaY","detail","touch","Captor","__spreadArray","to","pack","rectangleCollidesWithQuad","squareCollidesWithQuad","getCircumscribedAlignedRectangle","isRectangleAligned","extend_1","hasWarnedTooMuchOutside","rect","x1","x2","y1","y2","heightVector","tl","tr","bl","br","xL","xR","yT","qx","qy","qw","qh","pointIsInQuad","containers","cache","lastRectangle","boundaries","resize","add","maxLevel","level","block","topLeftBlock","topRightBlock","bottomLeftBlock","bottomRightBlock","collidingWithTopLeft","collidingWithTopRight","collidingWithBottomLeft","collidingWithBottomRight","collisions","reduce","acc","current","insertNode","stack","hw","hh","buildQuadrants","point","rectangle","lr","collectedNodes","getNodesInAxisAlignedRectangleArea","abs","label","labelSize","font","labelFont","labelWeight","labelColor","attribute","fillStyle","fillText","createBuffer","bindBuffer","ARRAY_BUFFER","vertexShader","loadVertexShader","fragmentShader","loadFragmentShader","loadProgram","DYNAMIC_DRAW","hasNothingToRender","linLogMode","outboundAttractionDistribution","adjustSizes","edgeWeightInfluence","scalingRatio","strongGravityMode","gravity","slowDown","barnesHutOptimize","barnesHutTheta","index","NodeMatrix","EdgeMatrix","fixed","weightGetter","collectLayoutChanges","positions","newAttr","getNodeAttributes","xURL","code","objectUrl","Worker","resolveDefaults","defaults","output","existing","def","RegExp","Iterator","args","sequence","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","querySelector","content","cspNonce","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","getData","setData","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","input","CustomEvent","fire","evt","initCustomEvent","bubbles","cancelable","Event","defaultPrevented","stopEverything","stopImmediatePropagation","eventType","handler","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","text","html","xml","json","script","ajax","responseText","getResponseHeader","success","statusText","beforeSend","readyState","OPENED","url","dataType","accept","crossDomain","withCredentials","onreadystatechange","DONE","parser","JSON","parse","head","removeChild","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","disabled","option","selected","checked","encodeURIComponent","join","formElements","form","el","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","handleMethod","formContent","link","action","display","click","isRemote","handleRemote","button","enctype","FormData","append","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","inferType","SparseMap","SparseQueueSet","createRandomIndex","UndirectedLouvainIndex","DirectedLouvainIndex","DEFAULTS","nodeCommunityAttribute","getEdgeWeight","fastLocalMoves","randomWalk","resolution","rng","addWeightToCommunity","community","currentWeight","tieBreaker","bestCommunity","currentCommunity","targetCommunity","bestDelta","undirectedLouvain","detailed","queue","end","ci","ri","targetCommunityDegree","localMoves","currentMoves","keepDendrogram","randomIndex","moveWasMade","localMoveWasMade","communities","deltaComputations","nodesVisited","moves","enqueue","dequeue","belongings","starts","neighborhood","weights","fastDeltaWithOwnCommunity","dense","vals","fastDelta","isolate","move","zoomOut","directedLouvain","offsets","deltaWithOwnCommunity","louvain","setNodeAttribute","dendrogram","modularity","NaN","results","collect","__values","labels_1","settings_1","touch_1","edge_collisions_1","PIXEL_RATIO","applyNodeDefaults","defaultNodeColor","highlighted","forceLabel","defaultNodeType","zIndex","applyEdgeDefaults","defaultEdgeColor","defaultEdgeType","canvasContexts","webGLContexts","activeListeners","quadtree","labelGrid","LabelGrid","nodeDataCache","edgeDataCache","nodesWithForcedLabels","edgesWithForcedLabels","nodeExtent","invMatrix","customBBox","normalizationFunction","cameraSizeRatio","displayedLabels","highlightedNodes","hoveredNode","hoveredEdge","renderFrame","renderHighlightedNodesFrame","needToProcess","needToSoftProcess","checkEdgesEventsFrame","nodePrograms","hoverNodePrograms","edgePrograms","createWebGLContext","preserveDrawingBuffer","createCanvasContext","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","BLEND","nodeProgramClasses","NodeProgramClass","hoverNodes","edgeProgramClasses","EdgeProgramClass","bindCameraHandlers","mouseCaptor","touchCaptor","bindEventHandlers","bindGraphHandlers","handleSettingsUpdate","createCanvas","class","antialias","contextOptions","_scheduleRefresh","handleResize","mouseIsOnNode","mouseX","mouseY","nodeX","nodeY","mouseGraphPosition","quadNodes","baseEvent","minDistance","nodeToHover","pos","framedGraphToViewport","scaleSize","distance","scheduleHighlightedNodesRender","enableEdgeHoverEvents","checkEdgeHoverEvents","createMouseListener","enableEdgeWheelEvents","enableEdgeClickEvents","getEdgeAtPoint","graphUpdate","softGraphUpdate","dropNodeGraphUpdate","dropEdgeGraphUpdate","clearEdgesGraphUpdate","clearGraphUpdate","edgeToHover","e_1","isPixelColored","_c","viewportToGraph","graphX","graphY","transformationRatio","someEdge","sourceId","targetId","xs","ys","graphLength","graphToViewport","vp_xs","vp_ys","_d","vp_xt","vp_yt","viewportLength","filterEdges","edgeAttributes","sourcePosition","targetPosition","doEdgeCollideWithPoint","selectedEdge","highestZIndex","edges_1","edges_1_1","getEdgeAttribute","e_1_1","return","keepArrays","dimensions","nodeZExtent","edgeZExtent","resizeAndClear","labelGridCellSize","nullCamera","nullCameraMatrix","getGraphDimensions","getSetting","nodesPerPrograms","nodeReducer","organize","edgesPerPrograms","getEdgeAttributes","edgeReducer","minCameraRatio","maxCameraRatio","_refresh","renderLabels","visibleNodes","viewRectangle","labelsToDisplay","getLabelsToDisplay","labelDensity","labels","labelRenderedSizeThreshold","labelRenderer","renderEdgeLabels","edgeLabels","clearRect","edgeLabelsToDisplay","edgeLabelsToDisplayFromNodes","displayedNodeLabels","edgeData","edgeLabelRenderer","renderHighlightedNodes","hovers","nodesToRender","hoverRenderer","handleEscape","updateCachedValues","moving","hideEdgesOnMove","hideLabelsOnMove","getMouseCaptor","getTouchCaptor","getNodeDisplayData","getEdgeDisplayData","setSetting","updateSetting","updater","previousWidth","previousHeight","offsetWidth","offsetHeight","allowInvalidContainer","viewport","COLOR_BUFFER_BIT","scheduleRefresh","viewportTarget","center","graphMousePosition","graphCenterPosition","marginX","marginY","p1","p2","coordinates","override","recomputeMatrix","viewportPos","viewportPoint","graphPoint","getBBox","getCustomBBox","setCustomBBox","firstChild","animateNodes","index_1","targets","startPositions","attrs","getNodeAttribute","frame","step","black","silver","gray","grey","white","maroon","red","purple","fuchsia","green","lime","olive","yellow","navy","blue","teal","aqua","darkblue","mediumblue","darkgreen","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","springgreen","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","darkslategrey","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","rebeccapurple","mediumaquamarine","dimgray","dimgrey","slateblue","olivedrab","slategray","slategrey","lightslategray","lightslategrey","mediumslateblue","lawngreen","chartreuse","aquamarine","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","darkgrey","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","mediumvioletred","indianred","peru","chocolate","tan","lightgray","lightgrey","thistle","orchid","goldenrod","palevioletred","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","lightyellow","ivory","ReflectOwnKeys","ReflectApply","receiver","NumberIsNaN","errorListener","resolver","eventTargetAgnosticAddListener","flags","addErrorHandlerIfEventEmitter","checkListener","_getMaxListeners","that","_addListener","prepend","events","warning","onceWrapper","_onceWrap","wrapped","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","wrapListener","doError","er","len","list","originalListener","spliceOne","l2","l1","LabelCandidate","compare","first","second","cellSize","columns","rows","cells","ceil","getIndex","xIndex","candidate","cell","density","cellArea","scaledDensity","labelsToDisplayPerCell","worthyEdges","label_1","hover_1","edge_label_1","node_fast_1","edge_1","edge_arrow_1","edgeLabelFont","edgeLabelSize","edgeLabelWeight","edgeLabelColor","stagePadding","circle","arrow","line","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","textWidth","measureText","boxWidth","round","boxHeight","radius","angleRadian","asin","xDeltaCoord","beginPath","moveTo","lineTo","arc","closePath","fill","PI","cx","cy","sSize","tSize","sx","sy","tx","ty","dx","dy","textLength","acos","save","restore","node_fast_vert_glsl_1","node_fast_frag_glsl_1","node_1","NodeFastProgram","useProgram","uniform1f","ratioLocation","scaleLocation","uniformMatrix3fv","matrixLocation","drawArrays","POINTS","AbstractNodeProgram","_o","createNodeCompoundProgram","positionLocation","getAttribLocation","sizeLocation","colorLocation","getUniformLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","BYTES_PER_ELEMENT","NodeCompoundProgram","loadShader","glType","VERTEX_SHADER","FRAGMENT_SHADER","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","infoLog","getShaderInfoLog","deleteShader","shaders","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","deleteProgram","edge_vert_glsl_1","edge_frag_glsl_1","EdgeProgram","indicesBuffer","normalLocation","correctionRatioLocation","sqrtZoomRatioLocation","IndicesArray","indicesArray","indicesType","UNSIGNED_INT","UNSIGNED_SHORT","ELEMENT_ARRAY_BUFFER","STATIC_DRAW","i_1","thickness","n1","n2","drawElements","TRIANGLES","edge_arrowHead_1","edge_clamped_1","EdgeArrowProgram","edge_arrowHead_vert_glsl_1","edge_arrowHead_frag_glsl_1","EdgeArrowHeadProgram","radiusLocation","barycentricLocation","edge_clamped_vert_glsl_1","EdgeClampedProgram","TouchCaptor","touchMode","handleStart","handleLeave","dispatchRelatedMouseEvent","mousePosition","mouseEvent","altKey","startTouchesPositions","lastTouchesPositions","x0","y0","startTouchesAngle","atan2","startTouchesDistance","touchesPositions","xStart","yStart","newCameraState","_e","angleDiff","hypot","touchGraphPosition","pixels","drawingBufferHeight","xS","yS","xT","NoverlapLayoutSupervisor","inputReducer","callbacks","onConverged","alreadyRespawning","handleAddition","converged","graphToByteArray","NODES","moduleShim","jitter","margin","expansion","gridSize","speed","deltaX","xCenter","yCenter","nxMin","nxMax","nyMin","nyMax","xMinBox","xMaxBox","yMinBox","yMaxBox","col","row","grid","gridLength","s1","s2","xDist","yDist","dist","iterate","reducer","mergeNodeAttributes","EDGES","PPN","rn","outboundAttCompensation","ewc","force","swinging","traction","nodespeed","newX","newY","thetaSquared","RegionMatrix","q2","subdivisionAttempts","PPR","log","abstractSynchronousLayout","iterations","synchronousLayout","inferSettings","declaredType","Values","ByteArray","sparse","member","scope","item","entries","proxy","typed","createEdgeWeightGetter","INSPECT","fromEntry","selfLoopCount","NeighborhoodPointerArray","NodesPointerArray","WeightsArray","loops","mapping","counts","unused","totalWeights","ids","sa","ta","startSource","startTarget","totalInWeights","totalOutWeights","newCommunity","nowEmpty","computeNodeDegree","expensiveIsolate","expensiveMove","cj","adj","currentLevel","nextLevel","inducedGraph","newLabels","internalWeights","M2","targetCommunityTotalWeight","bounds","project","projection","prop","inBounds","outBounds","projectIn","projectOut","computeNodeInDegree","computeNodeOutDegree","inAdj","outAdj","targetCommunityTotalInWeight","targetCommunityTotalOutWeight","coerceWeight","createEdgeValueGetter","nameOrFunction","defaultValue","coerceToDefault","returnDefault","fromAttributes","fromGraph","fromPartialEntry","fromMinimalEntry","createNodeValueGetter","isGraphConstructor","GraphClass","clusterDensity","clusters","cluster","addEdge","mergeEdge","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","sparkMd5","undefined$1","hex_chr","md5cycle","md5blk","md5blks","charCodeAt","md5blk_array","md51","tail","tmp","lo","hi","substring","md51_array","subarray","rhex","hex","toUtf8","str","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","fromCharCode","concatenateArrayBuffers","byteLength","hexToBinaryString","bytes","substr","SparkMD5","clamp","num","targetArray","sourceArray","begin","appendBinary","contents","_buff","_length","_hash","raw","_finish","hash","destroy","hashBinary","factory","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","chunkIndex","md5Buffer","fileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","_start","readAsArrayBuffer","findElement","root","eventInit","initEvent","BlobRecord","checksum","_this2","filename","content_type","byte_size","getMetaValue","requestDidLoad","requestDidError","_this$xhr","stringify","direct_upload","directUploadData","BlobUpload","_this3","_blob$directUploadDat","headers","_this$xhr2","DirectUpload","_this4","notify","upload","methodName","_len","messages","_key","DirectUploadController","directUpload","dispatch","_this5","hiddenInput","insertAdjacentElement","dispatchError","signed_id","progress","loaded","total","alert","_this6","uploadRequestDidProgress","DirectUploadsController","files","_this7","controllers","createDirectUploadControllers","startNextController","controller","processingAttribute","submitButtonsByForm","WeakMap","started","didClick","didSubmitForm","didSubmitRemoteElement","tagName","handleFormSubmissionEvent","focus","submitForm","ActiveStorage","getElementById","data2","sizes","minNodeSize","maxNodeSize","layout","FA2Layout","setHoveredNode","hoveredNeighbors","neighbors","getElementsByTagName","background","button4","searchQuery","res","selectedNode","suggestions","hide","show","_paq","graphJSON","zoomInBtn","zoomOutBtn","zoomResetBtn","cameraRatio","change","css","nodeColours","nodeColor1","nodeColor2","nodeColor3","nodeColor4","nodeColor5","edgeColours","edgeColor1","edgeColor2","edgeColor3","edgeColor4","edgeColor5","submit","closest","checkValidity","serialize","MicroModal","fail","jqXHR","textStatus","errorThrown","responseJSON","errors","errorHtml","each","Switchery","div","isFlipped","transform"],"mappings":"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","file":"js/application-fa14579411d189627700.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 77);\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.validateGraph = exports.canUse32BitsIndices = exports.extractPixel = exports.getMatrixImpact = exports.matrixFromCamera = exports.getCorrectionRatio = exports.floatColor = exports.floatArrayColor = exports.parseColor = exports.zIndexOrdering = exports.createNormalizationFunction = exports.graphExtent = exports.getPixelRatio = exports.createElement = exports.cancelFrame = exports.requestFrame = exports.assignDeep = exports.assign = exports.isPlainObject = void 0;\n\nvar is_graph_1 = __importDefault(require(\"graphology-utils/is-graph\"));\n\nvar matrices_1 = require(\"./matrices\");\n\nvar data_1 = require(\"./data\");\n/**\n * Checks whether the given value is a plain object.\n *\n * @param {mixed} value - Target value.\n * @return {boolean}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\nfunction isPlainObject(value) {\n return _typeof(value) === \"object\" && value !== null && value.constructor === Object;\n}\n\nexports.isPlainObject = isPlainObject;\n/**\n * Helper to use Object.assign with more than two objects.\n *\n * @param {object} target - First object.\n * @param {object} [...objects] - Objects to merge.\n * @return {object}\n */\n\nfunction assign(target) {\n var objects = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n objects[_i - 1] = arguments[_i];\n }\n\n target = target || {};\n\n for (var i = 0, l = objects.length; i < l; i++) {\n var o = objects[i];\n if (!o) continue;\n Object.assign(target, o);\n }\n\n return target;\n}\n\nexports.assign = assign;\n/**\n * Very simple recursive Object.assign-like function.\n *\n * @param {object} target - First object.\n * @param {object} [...objects] - Objects to merge.\n * @return {object}\n */\n\nfunction assignDeep(target) {\n var objects = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n objects[_i - 1] = arguments[_i];\n }\n\n target = target || {};\n\n for (var i = 0, l = objects.length; i < l; i++) {\n var o = objects[i];\n if (!o) continue;\n\n for (var k in o) {\n if (isPlainObject(o[k])) {\n target[k] = assignDeep(target[k], o[k]);\n } else {\n target[k] = o[k];\n }\n }\n }\n\n return target;\n}\n\nexports.assignDeep = assignDeep;\n/**\n * Just some dirty trick to make requestAnimationFrame and cancelAnimationFrame \"work\" in Node.js, for unit tests:\n */\n\nexports.requestFrame = typeof requestAnimationFrame !== \"undefined\" ? function (callback) {\n return requestAnimationFrame(callback);\n} : function (callback) {\n return setTimeout(callback, 0);\n};\nexports.cancelFrame = typeof cancelAnimationFrame !== \"undefined\" ? function (requestID) {\n return cancelAnimationFrame(requestID);\n} : function (requestID) {\n return clearTimeout(requestID);\n};\n/**\n * Function used to create DOM elements easily.\n *\n * @param {string} tag - Tag name of the element to create.\n * @param {object} style - Styles map.\n * @param {object} attributes - Attributes map.\n * @return {HTMLElement}\n */\n\nfunction createElement(tag, style, attributes) {\n var element = document.createElement(tag);\n\n if (style) {\n for (var k in style) {\n element.style[k] = style[k];\n }\n }\n\n if (attributes) {\n for (var k in attributes) {\n element.setAttribute(k, attributes[k]);\n }\n }\n\n return element;\n}\n\nexports.createElement = createElement;\n/**\n * Function returning the browser's pixel ratio.\n *\n * @return {number}\n */\n\nfunction getPixelRatio() {\n if (typeof window.devicePixelRatio !== \"undefined\") return window.devicePixelRatio;\n return 1;\n}\n\nexports.getPixelRatio = getPixelRatio;\n/**\n * Function returning the graph's node extent in x & y.\n *\n * @param {Graph}\n * @return {object}\n */\n\nfunction graphExtent(graph) {\n var xMin = Infinity;\n var xMax = -Infinity;\n var yMin = Infinity;\n var yMax = -Infinity;\n graph.forEachNode(function (_, attr) {\n var x = attr.x,\n y = attr.y;\n if (x < xMin) xMin = x;\n if (x > xMax) xMax = x;\n if (y < yMin) yMin = y;\n if (y > yMax) yMax = y;\n });\n return {\n x: [xMin, xMax],\n y: [yMin, yMax]\n };\n}\n\nexports.graphExtent = graphExtent;\n\nfunction createNormalizationFunction(extent) {\n var _a = __read(extent.x, 2),\n minX = _a[0],\n maxX = _a[1],\n _b = __read(extent.y, 2),\n minY = _b[0],\n maxY = _b[1];\n\n var ratio = Math.max(maxX - minX, maxY - minY);\n if (ratio === 0) ratio = 1;\n var dX = (maxX + minX) / 2,\n dY = (maxY + minY) / 2;\n\n var fn = function fn(data) {\n return {\n x: 0.5 + (data.x - dX) / ratio,\n y: 0.5 + (data.y - dY) / ratio\n };\n }; // TODO: possibility to apply this in batch over array of indices\n\n\n fn.applyTo = function (data) {\n data.x = 0.5 + (data.x - dX) / ratio;\n data.y = 0.5 + (data.y - dY) / ratio;\n };\n\n fn.inverse = function (data) {\n return {\n x: dX + ratio * (data.x - 0.5),\n y: dY + ratio * (data.y - 0.5)\n };\n };\n\n fn.ratio = ratio;\n return fn;\n}\n\nexports.createNormalizationFunction = createNormalizationFunction;\n/**\n * Function ordering the given elements in reverse z-order so they drawn\n * the correct way.\n *\n * @param {number} extent - [min, max] z values.\n * @param {function} getter - Z attribute getter function.\n * @param {array} elements - The array to sort.\n * @return {array} - The sorted array.\n */\n\nfunction zIndexOrdering(extent, getter, elements) {\n // If k is > n, we'll use a standard sort\n return elements.sort(function (a, b) {\n var zA = getter(a) || 0,\n zB = getter(b) || 0;\n if (zA < zB) return -1;\n if (zA > zB) return 1;\n return 0;\n }); // TODO: counting sort optimization\n}\n\nexports.zIndexOrdering = zIndexOrdering;\n/**\n * WebGL utils\n * ===========\n */\n\n/**\n * Memoized function returning a float-encoded color from various string\n * formats describing colors.\n */\n\nvar INT8 = new Int8Array(4);\nvar INT32 = new Int32Array(INT8.buffer, 0, 1);\nvar FLOAT32 = new Float32Array(INT8.buffer, 0, 1);\nvar RGBA_TEST_REGEX = /^\\s*rgba?\\s*\\(/;\nvar RGBA_EXTRACT_REGEX = /^\\s*rgba?\\s*\\(\\s*([0-9]*)\\s*,\\s*([0-9]*)\\s*,\\s*([0-9]*)(?:\\s*,\\s*(.*)?)?\\)\\s*$/;\n\nfunction parseColor(val) {\n var r = 0; // byte\n\n var g = 0; // byte\n\n var b = 0; // byte\n\n var a = 1; // float\n // Handling hexadecimal notation\n\n if (val[0] === \"#\") {\n if (val.length === 4) {\n r = parseInt(val.charAt(1) + val.charAt(1), 16);\n g = parseInt(val.charAt(2) + val.charAt(2), 16);\n b = parseInt(val.charAt(3) + val.charAt(3), 16);\n } else {\n r = parseInt(val.charAt(1) + val.charAt(2), 16);\n g = parseInt(val.charAt(3) + val.charAt(4), 16);\n b = parseInt(val.charAt(5) + val.charAt(6), 16);\n } // TODO: parse hex with alpha?\n\n } // Handling rgb notation\n else if (RGBA_TEST_REGEX.test(val)) {\n var match = val.match(RGBA_EXTRACT_REGEX);\n\n if (match) {\n r = +match[1];\n g = +match[2];\n b = +match[3];\n if (match[4]) a = +match[4];\n }\n }\n\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\n\nexports.parseColor = parseColor;\nvar FLOAT_COLOR_CACHE = {};\n\nfor (var htmlColor in data_1.HTML_COLORS) {\n FLOAT_COLOR_CACHE[htmlColor] = floatColor(data_1.HTML_COLORS[htmlColor]); // Replicating cache for hex values for free\n\n FLOAT_COLOR_CACHE[data_1.HTML_COLORS[htmlColor]] = FLOAT_COLOR_CACHE[htmlColor];\n}\n\nfunction floatArrayColor(val) {\n val = data_1.HTML_COLORS[val] || val; // NOTE: this variant is not cached because it is mostly used for uniforms\n\n var _a = parseColor(val),\n r = _a.r,\n g = _a.g,\n b = _a.b,\n a = _a.a;\n\n return new Float32Array([r / 255, g / 255, b / 255, a]);\n}\n\nexports.floatArrayColor = floatArrayColor;\n\nfunction floatColor(val) {\n // If the color is already computed, we yield it\n if (typeof FLOAT_COLOR_CACHE[val] !== \"undefined\") return FLOAT_COLOR_CACHE[val];\n var parsed = parseColor(val);\n var r = parsed.r,\n g = parsed.g,\n b = parsed.b;\n var a = parsed.a;\n a = a * 255 | 0;\n INT32[0] = (a << 24 | b << 16 | g << 8 | r) & 0xfeffffff;\n var color = FLOAT32[0];\n FLOAT_COLOR_CACHE[val] = color;\n return color;\n}\n\nexports.floatColor = floatColor;\n/**\n * In sigma, the graph is normalized into a [0, 1], [0, 1] square, before being given to the various renderers. This\n * helps dealing with quadtree in particular.\n * But at some point, we need to rescale it so that it takes the best place in the screen, ie. we always want to see two\n * nodes \"touching\" opposite sides of the graph, with the camera being at its default state.\n *\n * This function determines this ratio.\n */\n\nfunction getCorrectionRatio(viewportDimensions, graphDimensions) {\n var viewportRatio = viewportDimensions.height / viewportDimensions.width;\n var graphRatio = graphDimensions.height / graphDimensions.width; // If the stage and the graphs are in different directions (such as the graph being wider that tall while the stage\n // is taller than wide), we can stop here to have indeed nodes touching opposite sides:\n\n if (viewportRatio < 1 && graphRatio > 1 || viewportRatio > 1 && graphRatio < 1) {\n return 1;\n } // Else, we need to fit the graph inside the stage:\n // 1. If the graph is \"squarer\" (ie. with a ratio closer to 1), we need to make the largest sides touch;\n // 2. If the stage is \"squarer\", we need to make the smallest sides touch.\n\n\n return Math.min(Math.max(graphRatio, 1 / graphRatio), Math.max(1 / viewportRatio, viewportRatio));\n}\n\nexports.getCorrectionRatio = getCorrectionRatio;\n/**\n * Function returning a matrix from the current state of the camera.\n */\n// TODO: it's possible to optimize this drastically!\n\nfunction matrixFromCamera(state, viewportDimensions, graphDimensions, padding, inverse) {\n var angle = state.angle,\n ratio = state.ratio,\n x = state.x,\n y = state.y;\n var width = viewportDimensions.width,\n height = viewportDimensions.height;\n var matrix = (0, matrices_1.identity)();\n var smallestDimension = Math.min(width, height) - 2 * padding;\n var correctionRatio = getCorrectionRatio(viewportDimensions, graphDimensions);\n\n if (!inverse) {\n (0, matrices_1.multiply)(matrix, (0, matrices_1.scale)((0, matrices_1.identity)(), 2 * (smallestDimension / width) * correctionRatio, 2 * (smallestDimension / height) * correctionRatio));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.rotate)((0, matrices_1.identity)(), -angle));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.scale)((0, matrices_1.identity)(), 1 / ratio));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.translate)((0, matrices_1.identity)(), -x, -y));\n } else {\n (0, matrices_1.multiply)(matrix, (0, matrices_1.translate)((0, matrices_1.identity)(), x, y));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.scale)((0, matrices_1.identity)(), ratio));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.rotate)((0, matrices_1.identity)(), angle));\n (0, matrices_1.multiply)(matrix, (0, matrices_1.scale)((0, matrices_1.identity)(), width / smallestDimension / 2 / correctionRatio, height / smallestDimension / 2 / correctionRatio));\n }\n\n return matrix;\n}\n\nexports.matrixFromCamera = matrixFromCamera;\n/**\n * All these transformations we apply on the matrix to get it rescale the graph\n * as we want make it very hard to get pixel-perfect distances in WebGL. This\n * function returns a factor that properly cancels the matrix effect on lengths.\n *\n * [jacomyal]\n * To be fully honest, I can't really explain happens here... I notice that the\n * following ratio works (ie. it correctly compensates the matrix impact on all\n * camera states I could try):\n * > `R = size(V) / size(M * V) / W`\n * as long as `M * V` is in the direction of W (ie. parallel to (Ox)). It works\n * as well with H and a vector that transforms into something parallel to (Oy).\n *\n * Also, note that we use `angle` and not `-angle` (that would seem logical,\n * since we want to anticipate the rotation), because of the fact that in WebGL,\n * the image is vertically swapped.\n */\n\nfunction getMatrixImpact(matrix, cameraState, viewportDimensions) {\n var _a = (0, matrices_1.multiplyVec2)(matrix, {\n x: Math.cos(cameraState.angle),\n y: Math.sin(cameraState.angle)\n }, 0),\n x = _a.x,\n y = _a.y;\n\n return 1 / Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) / viewportDimensions.width;\n}\n\nexports.getMatrixImpact = getMatrixImpact;\n/**\n * Function extracting the color at the given pixel.\n */\n\nfunction extractPixel(gl, x, y, array) {\n var data = array || new Uint8Array(4);\n gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, data);\n return data;\n}\n\nexports.extractPixel = extractPixel;\n/**\n * Function used to know whether given webgl context can use 32 bits indices.\n */\n\nfunction canUse32BitsIndices(gl) {\n var webgl2 = typeof WebGL2RenderingContext !== \"undefined\" && gl instanceof WebGL2RenderingContext;\n return webgl2 || !!gl.getExtension(\"OES_element_index_uint\");\n}\n\nexports.canUse32BitsIndices = canUse32BitsIndices;\n/**\n * Check if the graph variable is a valid graph, and if sigma can render it.\n */\n\nfunction validateGraph(graph) {\n // check if it's a valid graphology instance\n if (!(0, is_graph_1.default)(graph)) throw new Error(\"Sigma: invalid graph instance.\"); // check if nodes have x/y attributes\n\n graph.forEachNode(function (key, attributes) {\n if (!Number.isFinite(attributes.x) || !Number.isFinite(attributes.y)) {\n throw new Error(\"Sigma: Coordinates of node \".concat(key, \" are invalid. A node must have a numeric 'x' and 'y' attribute.\"));\n }\n });\n}\n\nexports.validateGraph = validateGraph;","module.exports = require(\"regenerator-runtime\");\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Graphology isGraph\n * ===================\n *\n * Very simple function aiming at ensuring the given variable is a\n * graphology instance.\n */\n\n/**\n * Checking the value is a graphology instance.\n *\n * @param {any} value - Target value.\n * @return {boolean}\n */\nmodule.exports = function isGraph(value) {\n return value !== null && _typeof(value) === 'object' && typeof value.addUndirectedEdgeWithKey === 'function' && typeof value.dropNode === 'function' && typeof value.multi === 'boolean';\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n(function (a, b) {\n if (\"function\" == typeof define && define.amd) define([], b);else if (\"undefined\" != typeof exports) b();else {\n b(), a.FileSaver = {\n exports: {}\n }.exports;\n }\n})(this, function () {\n \"use strict\";\n\n function b(a, b) {\n return \"undefined\" == typeof b ? b = {\n autoBom: !1\n } : \"object\" != _typeof(b) && (console.warn(\"Deprecated: Expected third argument to be a object\"), b = {\n autoBom: !b\n }), b.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type) ? new Blob([\"\\uFEFF\", a], {\n type: a.type\n }) : a;\n }\n\n function c(a, b, c) {\n var d = new XMLHttpRequest();\n d.open(\"GET\", a), d.responseType = \"blob\", d.onload = function () {\n g(d.response, b, c);\n }, d.onerror = function () {\n console.error(\"could not download file\");\n }, d.send();\n }\n\n function d(a) {\n var b = new XMLHttpRequest();\n b.open(\"HEAD\", a, !1);\n\n try {\n b.send();\n } catch (a) {}\n\n return 200 <= b.status && 299 >= b.status;\n }\n\n function e(a) {\n try {\n a.dispatchEvent(new MouseEvent(\"click\"));\n } catch (c) {\n var b = document.createEvent(\"MouseEvents\");\n b.initMouseEvent(\"click\", !0, !0, window, 0, 0, 0, 80, 20, !1, !1, !1, !1, 0, null), a.dispatchEvent(b);\n }\n }\n\n var f = \"object\" == (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) && window.window === window ? window : \"object\" == (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) && self.self === self ? self : \"object\" == (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) && global.global === global ? global : void 0,\n a = f.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent),\n g = f.saveAs || (\"object\" != (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) || window !== f ? function () {} : \"download\" in HTMLAnchorElement.prototype && !a ? function (b, g, h) {\n var i = f.URL || f.webkitURL,\n j = document.createElement(\"a\");\n g = g || b.name || \"download\", j.download = g, j.rel = \"noopener\", \"string\" == typeof b ? (j.href = b, j.origin === location.origin ? e(j) : d(j.href) ? c(b, g, h) : e(j, j.target = \"_blank\")) : (j.href = i.createObjectURL(b), setTimeout(function () {\n i.revokeObjectURL(j.href);\n }, 4E4), setTimeout(function () {\n e(j);\n }, 0));\n } : \"msSaveOrOpenBlob\" in navigator ? function (f, g, h) {\n if (g = g || f.name || \"download\", \"string\" != typeof f) navigator.msSaveOrOpenBlob(b(f, h), g);else if (d(f)) c(f, g, h);else {\n var i = document.createElement(\"a\");\n i.href = f, i.target = \"_blank\", setTimeout(function () {\n e(i);\n });\n }\n } : function (b, d, e, g) {\n if (g = g || open(\"\", \"_blank\"), g && (g.document.title = g.document.body.innerText = \"downloading...\"), \"string\" == typeof b) return c(b, d, e);\n var h = \"application/octet-stream\" === b.type,\n i = /constructor/i.test(f.HTMLElement) || f.safari,\n j = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n if ((j || h && i || a) && \"undefined\" != typeof FileReader) {\n var k = new FileReader();\n k.onloadend = function () {\n var a = k.result;\n a = j ? a : a.replace(/^data:[^;]*;/, \"data:attachment/file;\"), g ? g.location.href = a : location = a, g = null;\n }, k.readAsDataURL(b);\n } else {\n var l = f.URL || f.webkitURL,\n m = l.createObjectURL(b);\n g ? g.location = m : location.href = m, g = null, setTimeout(function () {\n l.revokeObjectURL(m);\n }, 4E4);\n }\n });\n f.saveAs = g.saveAs = g, \"undefined\" != typeof module && (module.exports = g);\n});","\"use strict\";\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Sigma = exports.MouseCaptor = exports.QuadTree = exports.Camera = void 0;\n/**\n * Sigma.js Library Endpoint\n * =========================\n *\n * The library endpoint.\n * @module\n */\n\nvar sigma_1 = __importDefault(require(\"./sigma\"));\n\nexports.Sigma = sigma_1.default;\n\nvar camera_1 = __importDefault(require(\"./core/camera\"));\n\nexports.Camera = camera_1.default;\n\nvar quadtree_1 = __importDefault(require(\"./core/quadtree\"));\n\nexports.QuadTree = quadtree_1.default;\n\nvar mouse_1 = __importDefault(require(\"./core/captors/mouse\"));\n\nexports.MouseCaptor = mouse_1.default;\nexports.default = sigma_1.default;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createEdgeCompoundProgram = exports.AbstractEdgeProgram = void 0;\n/**\n * Sigma.js WebGL Abstract Edge Program\n * =====================================\n *\n * @module\n */\n\nvar program_1 = require(\"./program\");\n/**\n * Edge Program class.\n *\n * @constructor\n */\n\n\nvar AbstractEdgeProgram =\n/** @class */\nfunction (_super) {\n __extends(AbstractEdgeProgram, _super);\n\n function AbstractEdgeProgram(gl, vertexShaderSource, fragmentShaderSource, points, attributes) {\n return _super.call(this, gl, vertexShaderSource, fragmentShaderSource, points, attributes) || this;\n }\n\n return AbstractEdgeProgram;\n}(program_1.AbstractProgram);\n\nexports.AbstractEdgeProgram = AbstractEdgeProgram;\n\nfunction createEdgeCompoundProgram(programClasses) {\n return (\n /** @class */\n function () {\n function EdgeCompoundProgram(gl, renderer) {\n this.programs = programClasses.map(function (ProgramClass) {\n return new ProgramClass(gl, renderer);\n });\n }\n\n EdgeCompoundProgram.prototype.bufferData = function () {\n this.programs.forEach(function (program) {\n return program.bufferData();\n });\n };\n\n EdgeCompoundProgram.prototype.allocate = function (capacity) {\n this.programs.forEach(function (program) {\n return program.allocate(capacity);\n });\n };\n\n EdgeCompoundProgram.prototype.bind = function () {// nothing todo, it's already done in each program constructor\n };\n\n EdgeCompoundProgram.prototype.computeIndices = function () {\n this.programs.forEach(function (program) {\n return program.computeIndices();\n });\n };\n\n EdgeCompoundProgram.prototype.render = function (params) {\n this.programs.forEach(function (program) {\n program.bind();\n program.bufferData();\n program.render(params);\n });\n };\n\n EdgeCompoundProgram.prototype.process = function (sourceData, targetData, data, hidden, offset) {\n this.programs.forEach(function (program) {\n return program.process(sourceData, targetData, data, hidden, offset);\n });\n };\n\n return EdgeCompoundProgram;\n }()\n );\n}\n\nexports.createEdgeCompoundProgram = createEdgeCompoundProgram;","import FileSaver from 'file-saver'\n\nexport async function saveAsPNG(renderer, inputLayers, Sigma) {\n const { width, height } = renderer.getDimensions()\n\n // This pixel ratio is here to deal with retina displays.\n // Indeed, for dimensions W and H, on a retina display, the canvases\n // dimensions actually are 2 * W and 2 * H. Sigma properly deals with it, but\n // we need to readapt here:\n const pixelRatio = window.devicePixelRatio || 1\n\n const tmpRoot = document.createElement('div')\n tmpRoot.style.width = `${width}px`\n tmpRoot.style.height = `${height}px`\n tmpRoot.style.position = \"absolute\"\n tmpRoot.style.right = \"101%\"\n tmpRoot.style.bottom = \"101%\"\n document.body.appendChild(tmpRoot)\n\n // Instantiate sigma:\n const tmpRenderer = new Sigma(renderer.getGraph(), tmpRoot, renderer.getSettings())\n\n // Copy camera and force to render now, to avoid having to wait the schedule /\n // debounce frame:\n tmpRenderer.getCamera().setState(renderer.getCamera().getState())\n tmpRenderer.refresh()\n\n // Create a new canvas, on which the different layers will be drawn:\n const canvas = document.createElement('canvas')\n canvas.setAttribute('width', width * pixelRatio + '')\n canvas.setAttribute('height', height * pixelRatio + '')\n const ctx = canvas.getContext('2d')\n\n // For each layer, draw it on our canvas:\n const canvases = tmpRenderer.getCanvases()\n const layers = inputLayers ? inputLayers.filter((id) => !!canvases[id]) : Object.keys(canvases);\n layers.forEach((id) => {\n ctx.drawImage(\n canvases[id],\n 0,\n 0,\n width * pixelRatio,\n height * pixelRatio,\n 0,\n 0,\n width * pixelRatio,\n height * pixelRatio,\n )\n })\n\n // Save the canvas as a PNG image:\n canvas.toBlob((blob) => {\n if (blob) FileSaver.saveAs(blob, 'NetzderWoche.png')\n\n // Cleanup:\n tmpRenderer.kill()\n tmpRoot.remove()\n }, 'image/png')\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n!function (t, e) {\n \"object\" == (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) && \"undefined\" != typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define(e) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).graphology = e();\n}(this, function () {\n \"use strict\";\n\n function t(e) {\n return t = \"function\" == typeof Symbol && \"symbol\" == _typeof(Symbol.iterator) ? function (t) {\n return _typeof(t);\n } : function (t) {\n return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : _typeof(t);\n }, t(e);\n }\n\n function e(t, e) {\n t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e);\n }\n\n function n(t) {\n return n = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, n(t);\n }\n\n function r(t, e) {\n return r = Object.setPrototypeOf || function (t, e) {\n return t.__proto__ = e, t;\n }, r(t, e);\n }\n\n function i() {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;\n } catch (t) {\n return !1;\n }\n }\n\n function o(t, e, n) {\n return o = i() ? Reflect.construct : function (t, e, n) {\n var i = [null];\n i.push.apply(i, e);\n var o = new (Function.bind.apply(t, i))();\n return n && r(o, n.prototype), o;\n }, o.apply(null, arguments);\n }\n\n function a(t) {\n var e = \"function\" == typeof Map ? new Map() : void 0;\n return a = function a(t) {\n if (null === t || (i = t, -1 === Function.toString.call(i).indexOf(\"[native code]\"))) return t;\n var i;\n if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n\n if (void 0 !== e) {\n if (e.has(t)) return e.get(t);\n e.set(t, a);\n }\n\n function a() {\n return o(t, arguments, n(this).constructor);\n }\n\n return a.prototype = Object.create(t.prototype, {\n constructor: {\n value: a,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), r(a, t);\n }, a(t);\n }\n\n function u(t) {\n if (void 0 === t) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return t;\n }\n\n var c = function c() {\n for (var t = arguments[0], e = 1, n = arguments.length; e < n; e++) {\n if (arguments[e]) for (var r in arguments[e]) {\n t[r] = arguments[e][r];\n }\n }\n\n return t;\n };\n\n function s(t, e, n, r) {\n var i = t._nodes.get(e),\n o = null;\n\n return i ? o = \"mixed\" === r ? i.out && i.out[n] || i.undirected && i.undirected[n] : \"directed\" === r ? i.out && i.out[n] : i.undirected && i.undirected[n] : o;\n }\n\n function d(e) {\n return null !== e && \"object\" === t(e) && \"function\" == typeof e.addUndirectedEdgeWithKey && \"function\" == typeof e.dropNode;\n }\n\n function h(e) {\n return \"object\" === t(e) && null !== e && e.constructor === Object;\n }\n\n function p(t) {\n var e;\n\n for (e in t) {\n return !1;\n }\n\n return !0;\n }\n\n function f(t, e, n) {\n Object.defineProperty(t, e, {\n enumerable: !1,\n configurable: !1,\n writable: !0,\n value: n\n });\n }\n\n function l(t, e, n) {\n var r = {\n enumerable: !0,\n configurable: !0\n };\n \"function\" == typeof n ? r.get = n : (r.value = n, r.writable = !1), Object.defineProperty(t, e, r);\n }\n\n function g(t) {\n return !!h(t) && !(t.attributes && !Array.isArray(t.attributes));\n }\n\n \"function\" == typeof Object.assign && (c = Object.assign);\n var y,\n w = {\n exports: {}\n },\n v = \"object\" == (typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) ? Reflect : null,\n b = v && \"function\" == typeof v.apply ? v.apply : function (t, e, n) {\n return Function.prototype.apply.call(t, e, n);\n };\n y = v && \"function\" == typeof v.ownKeys ? v.ownKeys : Object.getOwnPropertySymbols ? function (t) {\n return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t));\n } : function (t) {\n return Object.getOwnPropertyNames(t);\n };\n\n var m = Number.isNaN || function (t) {\n return t != t;\n };\n\n function k() {\n k.init.call(this);\n }\n\n w.exports = k, w.exports.once = function (t, e) {\n return new Promise(function (n, r) {\n function i(n) {\n t.removeListener(e, o), r(n);\n }\n\n function o() {\n \"function\" == typeof t.removeListener && t.removeListener(\"error\", i), n([].slice.call(arguments));\n }\n\n N(t, e, o, {\n once: !0\n }), \"error\" !== e && function (t, e, n) {\n \"function\" == typeof t.on && N(t, \"error\", e, n);\n }(t, i, {\n once: !0\n });\n });\n }, k.EventEmitter = k, k.prototype._events = void 0, k.prototype._eventsCount = 0, k.prototype._maxListeners = void 0;\n var _ = 10;\n\n function G(t) {\n if (\"function\" != typeof t) throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(t));\n }\n\n function x(t) {\n return void 0 === t._maxListeners ? k.defaultMaxListeners : t._maxListeners;\n }\n\n function E(t, e, n, r) {\n var i, o, a, u;\n if (G(n), void 0 === (o = t._events) ? (o = t._events = Object.create(null), t._eventsCount = 0) : (void 0 !== o.newListener && (t.emit(\"newListener\", e, n.listener ? n.listener : n), o = t._events), a = o[e]), void 0 === a) a = o[e] = n, ++t._eventsCount;else if (\"function\" == typeof a ? a = o[e] = r ? [n, a] : [a, n] : r ? a.unshift(n) : a.push(n), (i = x(t)) > 0 && a.length > i && !a.warned) {\n a.warned = !0;\n var c = new Error(\"Possible EventEmitter memory leak detected. \" + a.length + \" \" + String(e) + \" listeners added. Use emitter.setMaxListeners() to increase limit\");\n c.name = \"MaxListenersExceededWarning\", c.emitter = t, c.type = e, c.count = a.length, u = c, console && console.warn && console.warn(u);\n }\n return t;\n }\n\n function A() {\n if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, 0 === arguments.length ? this.listener.call(this.target) : this.listener.apply(this.target, arguments);\n }\n\n function S(t, e, n) {\n var r = {\n fired: !1,\n wrapFn: void 0,\n target: t,\n type: e,\n listener: n\n },\n i = A.bind(r);\n return i.listener = n, r.wrapFn = i, i;\n }\n\n function D(t, e, n) {\n var r = t._events;\n if (void 0 === r) return [];\n var i = r[e];\n return void 0 === i ? [] : \"function\" == typeof i ? n ? [i.listener || i] : [i] : n ? function (t) {\n for (var e = new Array(t.length), n = 0; n < e.length; ++n) {\n e[n] = t[n].listener || t[n];\n }\n\n return e;\n }(i) : U(i, i.length);\n }\n\n function L(t) {\n var e = this._events;\n\n if (void 0 !== e) {\n var n = e[t];\n if (\"function\" == typeof n) return 1;\n if (void 0 !== n) return n.length;\n }\n\n return 0;\n }\n\n function U(t, e) {\n for (var n = new Array(e), r = 0; r < e; ++r) {\n n[r] = t[r];\n }\n\n return n;\n }\n\n function N(t, e, n, r) {\n if (\"function\" == typeof t.on) r.once ? t.once(e, n) : t.on(e, n);else {\n if (\"function\" != typeof t.addEventListener) throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + _typeof(t));\n t.addEventListener(e, function i(o) {\n r.once && t.removeEventListener(e, i), n(o);\n });\n }\n }\n\n function j(t) {\n if (\"function\" != typeof t) throw new Error(\"obliterator/iterator: expecting a function!\");\n this.next = t;\n }\n\n Object.defineProperty(k, \"defaultMaxListeners\", {\n enumerable: !0,\n get: function get() {\n return _;\n },\n set: function set(t) {\n if (\"number\" != typeof t || t < 0 || m(t)) throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + t + \".\");\n _ = t;\n }\n }), k.init = function () {\n void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n }, k.prototype.setMaxListeners = function (t) {\n if (\"number\" != typeof t || t < 0 || m(t)) throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + t + \".\");\n return this._maxListeners = t, this;\n }, k.prototype.getMaxListeners = function () {\n return x(this);\n }, k.prototype.emit = function (t) {\n for (var e = [], n = 1; n < arguments.length; n++) {\n e.push(arguments[n]);\n }\n\n var r = \"error\" === t,\n i = this._events;\n if (void 0 !== i) r = r && void 0 === i.error;else if (!r) return !1;\n\n if (r) {\n var o;\n if (e.length > 0 && (o = e[0]), o instanceof Error) throw o;\n var a = new Error(\"Unhandled error.\" + (o ? \" (\" + o.message + \")\" : \"\"));\n throw a.context = o, a;\n }\n\n var u = i[t];\n if (void 0 === u) return !1;\n if (\"function\" == typeof u) b(u, this, e);else {\n var c = u.length,\n s = U(u, c);\n\n for (n = 0; n < c; ++n) {\n b(s[n], this, e);\n }\n }\n return !0;\n }, k.prototype.addListener = function (t, e) {\n return E(this, t, e, !1);\n }, k.prototype.on = k.prototype.addListener, k.prototype.prependListener = function (t, e) {\n return E(this, t, e, !0);\n }, k.prototype.once = function (t, e) {\n return G(e), this.on(t, S(this, t, e)), this;\n }, k.prototype.prependOnceListener = function (t, e) {\n return G(e), this.prependListener(t, S(this, t, e)), this;\n }, k.prototype.removeListener = function (t, e) {\n var n, r, i, o, a;\n if (G(e), void 0 === (r = this._events)) return this;\n if (void 0 === (n = r[t])) return this;\n if (n === e || n.listener === e) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete r[t], r.removeListener && this.emit(\"removeListener\", t, n.listener || e));else if (\"function\" != typeof n) {\n for (i = -1, o = n.length - 1; o >= 0; o--) {\n if (n[o] === e || n[o].listener === e) {\n a = n[o].listener, i = o;\n break;\n }\n }\n\n if (i < 0) return this;\n 0 === i ? n.shift() : function (t, e) {\n for (; e + 1 < t.length; e++) {\n t[e] = t[e + 1];\n }\n\n t.pop();\n }(n, i), 1 === n.length && (r[t] = n[0]), void 0 !== r.removeListener && this.emit(\"removeListener\", t, a || e);\n }\n return this;\n }, k.prototype.off = k.prototype.removeListener, k.prototype.removeAllListeners = function (t) {\n var e, n, r;\n if (void 0 === (n = this._events)) return this;\n if (void 0 === n.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), this._eventsCount = 0) : void 0 !== n[t] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete n[t]), this;\n\n if (0 === arguments.length) {\n var i,\n o = Object.keys(n);\n\n for (r = 0; r < o.length; ++r) {\n \"removeListener\" !== (i = o[r]) && this.removeAllListeners(i);\n }\n\n return this.removeAllListeners(\"removeListener\"), this._events = Object.create(null), this._eventsCount = 0, this;\n }\n\n if (\"function\" == typeof (e = n[t])) this.removeListener(t, e);else if (void 0 !== e) for (r = e.length - 1; r >= 0; r--) {\n this.removeListener(t, e[r]);\n }\n return this;\n }, k.prototype.listeners = function (t) {\n return D(this, t, !0);\n }, k.prototype.rawListeners = function (t) {\n return D(this, t, !1);\n }, k.listenerCount = function (t, e) {\n return \"function\" == typeof t.listenerCount ? t.listenerCount(e) : L.call(t, e);\n }, k.prototype.listenerCount = L, k.prototype.eventNames = function () {\n return this._eventsCount > 0 ? y(this._events) : [];\n }, \"undefined\" != typeof Symbol && (j.prototype[Symbol.iterator] = function () {\n return this;\n }), j.of = function () {\n var t = arguments,\n e = t.length,\n n = 0;\n return new j(function () {\n return n >= e ? {\n done: !0\n } : {\n done: !1,\n value: t[n++]\n };\n });\n }, j.empty = function () {\n return new j(function () {\n return {\n done: !0\n };\n });\n }, j.fromSequence = function (t) {\n var e = 0,\n n = t.length;\n return new j(function () {\n return e >= n ? {\n done: !0\n } : {\n done: !1,\n value: t[e++]\n };\n });\n }, j.is = function (t) {\n return t instanceof j || \"object\" == _typeof(t) && null !== t && \"function\" == typeof t.next;\n };\n var O = j,\n C = {};\n C.ARRAY_BUFFER_SUPPORT = \"undefined\" != typeof ArrayBuffer, C.SYMBOL_SUPPORT = \"undefined\" != typeof Symbol;\n var z = O,\n M = C,\n W = M.ARRAY_BUFFER_SUPPORT,\n P = M.SYMBOL_SUPPORT;\n\n var R = function R(t) {\n var e = function (t) {\n return \"string\" == typeof t || Array.isArray(t) || W && ArrayBuffer.isView(t) ? z.fromSequence(t) : \"object\" != _typeof(t) || null === t ? null : P && \"function\" == typeof t[Symbol.iterator] ? t[Symbol.iterator]() : \"function\" == typeof t.next ? t : null;\n }(t);\n\n if (!e) throw new Error(\"obliterator: target is not iterable nor a valid iterator.\");\n return e;\n },\n K = R,\n T = function T(t, e) {\n for (var n, r = arguments.length > 1 ? e : 1 / 0, i = r !== 1 / 0 ? new Array(r) : [], o = 0, a = K(t);;) {\n if (o === r) return i;\n if ((n = a.next()).done) return o !== e && (i.length = o), i;\n i[o++] = n.value;\n }\n },\n B = function (t) {\n function n(e) {\n var n;\n return (n = t.call(this) || this).name = \"GraphError\", n.message = e, n;\n }\n\n return e(n, t), n;\n }(a(Error)),\n F = function (t) {\n function n(e) {\n var r;\n return (r = t.call(this, e) || this).name = \"InvalidArgumentsGraphError\", \"function\" == typeof Error.captureStackTrace && Error.captureStackTrace(u(r), n.prototype.constructor), r;\n }\n\n return e(n, t), n;\n }(B),\n I = function (t) {\n function n(e) {\n var r;\n return (r = t.call(this, e) || this).name = \"NotFoundGraphError\", \"function\" == typeof Error.captureStackTrace && Error.captureStackTrace(u(r), n.prototype.constructor), r;\n }\n\n return e(n, t), n;\n }(B),\n Y = function (t) {\n function n(e) {\n var r;\n return (r = t.call(this, e) || this).name = \"UsageGraphError\", \"function\" == typeof Error.captureStackTrace && Error.captureStackTrace(u(r), n.prototype.constructor), r;\n }\n\n return e(n, t), n;\n }(B);\n\n function q(t, e) {\n this.key = t, this.attributes = e, this.clear();\n }\n\n function J(t, e) {\n this.key = t, this.attributes = e, this.clear();\n }\n\n function V(t, e) {\n this.key = t, this.attributes = e, this.clear();\n }\n\n function H(t, e, n, r, i) {\n this.key = e, this.attributes = i, this.undirected = t, this.source = n, this.target = r;\n }\n\n q.prototype.clear = function () {\n this.inDegree = 0, this.outDegree = 0, this.undirectedDegree = 0, this.in = {}, this.out = {}, this.undirected = {};\n }, J.prototype.clear = function () {\n this.inDegree = 0, this.outDegree = 0, this.in = {}, this.out = {};\n }, V.prototype.clear = function () {\n this.undirectedDegree = 0, this.undirected = {};\n }, H.prototype.attach = function () {\n var t = \"out\",\n e = \"in\";\n this.undirected && (t = e = \"undirected\");\n var n = this.source.key,\n r = this.target.key;\n this.source[t][r] = this, this.undirected && n === r || (this.target[e][n] = this);\n }, H.prototype.attachMulti = function () {\n var t = \"out\",\n e = \"in\",\n n = this.source.key,\n r = this.target.key;\n this.undirected && (t = e = \"undirected\");\n var i = this.source[t],\n o = i[r];\n if (void 0 === o) return i[r] = this, void (this.undirected && n === r || (this.target[e][n] = this));\n o.previous = this, this.next = o, i[r] = this, this.target[e][n] = this;\n }, H.prototype.detach = function () {\n var t = this.source.key,\n e = this.target.key,\n n = \"out\",\n r = \"in\";\n this.undirected && (n = r = \"undirected\"), delete this.source[n][e], delete this.target[r][t];\n }, H.prototype.detachMulti = function () {\n var t = this.source.key,\n e = this.target.key,\n n = \"out\",\n r = \"in\";\n this.undirected && (n = r = \"undirected\"), void 0 === this.previous ? void 0 === this.next ? (delete this.source[n][e], delete this.target[r][t]) : (this.next.previous = void 0, this.source[n][e] = this.next, this.target[r][t] = this.next) : (this.previous.next = this.next, void 0 !== this.next && (this.next.previous = this.previous));\n };\n\n function Q(t, e, n, r, i, o, a) {\n var u, c, s, d;\n\n if (r = \"\" + r, 0 === n) {\n if (!(u = t._nodes.get(r))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(r, '\" node in the graph.'));\n s = i, d = o;\n } else if (3 === n) {\n if (i = \"\" + i, !(c = t._edges.get(i))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(i, '\" edge in the graph.'));\n var h = c.source.key,\n p = c.target.key;\n if (r === h) u = c.target;else {\n if (r !== p) throw new I(\"Graph.\".concat(e, ': the \"').concat(r, '\" node is not attached to the \"').concat(i, '\" edge (').concat(h, \", \").concat(p, \").\"));\n u = c.source;\n }\n s = o, d = a;\n } else {\n if (!(c = t._edges.get(r))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(r, '\" edge in the graph.'));\n u = 1 === n ? c.source : c.target, s = i, d = o;\n }\n\n return [u, s, d];\n }\n\n var X = [{\n name: function name(t) {\n return \"get\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n return a.attributes[u];\n };\n }\n }, {\n name: function name(t) {\n return \"get\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n return Q(this, e, n, t, r)[0].attributes;\n };\n }\n }, {\n name: function name(t) {\n return \"has\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n return a.attributes.hasOwnProperty(u);\n };\n }\n }, {\n name: function name(t) {\n return \"set\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i, o) {\n var a = Q(this, e, n, t, r, i, o),\n u = a[0],\n c = a[1],\n s = a[2];\n return u.attributes[c] = s, this.emit(\"nodeAttributesUpdated\", {\n key: u.key,\n type: \"set\",\n attributes: u.attributes,\n name: c\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"update\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i, o) {\n var a = Q(this, e, n, t, r, i, o),\n u = a[0],\n c = a[1],\n s = a[2];\n if (\"function\" != typeof s) throw new F(\"Graph.\".concat(e, \": updater should be a function.\"));\n var d = u.attributes,\n h = s(d[c]);\n return d[c] = h, this.emit(\"nodeAttributesUpdated\", {\n key: u.key,\n type: \"set\",\n attributes: u.attributes,\n name: c\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"remove\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n return delete a.attributes[u], this.emit(\"nodeAttributesUpdated\", {\n key: a.key,\n type: \"remove\",\n attributes: a.attributes,\n name: u\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"replace\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n if (!h(u)) throw new F(\"Graph.\".concat(e, \": provided attributes are not a plain object.\"));\n return a.attributes = u, this.emit(\"nodeAttributesUpdated\", {\n key: a.key,\n type: \"replace\",\n attributes: a.attributes\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"merge\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n if (!h(u)) throw new F(\"Graph.\".concat(e, \": provided attributes are not a plain object.\"));\n return c(a.attributes, u), this.emit(\"nodeAttributesUpdated\", {\n key: a.key,\n type: \"merge\",\n attributes: a.attributes,\n data: u\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"update\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o = Q(this, e, n, t, r, i),\n a = o[0],\n u = o[1];\n if (\"function\" != typeof u) throw new F(\"Graph.\".concat(e, \": provided updater is not a function.\"));\n return a.attributes = u(a.attributes), this.emit(\"nodeAttributesUpdated\", {\n key: a.key,\n type: \"update\",\n attributes: a.attributes\n }), this;\n };\n }\n }];\n var Z = [{\n name: function name(t) {\n return \"get\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n return i.attributes[r];\n };\n }\n }, {\n name: function name(t) {\n return \"get\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t) {\n var r;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 1) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var i = \"\" + t,\n o = \"\" + arguments[1];\n if (!(r = s(this, i, o, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(i, '\" - \"').concat(o, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(r = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n return r.attributes;\n };\n }\n }, {\n name: function name(t) {\n return \"has\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n return i.attributes.hasOwnProperty(r);\n };\n }\n }, {\n name: function name(t) {\n return \"set\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 3) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var a = \"\" + t,\n u = \"\" + r;\n if (r = arguments[2], i = arguments[3], !(o = s(this, a, u, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(a, '\" - \"').concat(u, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(o = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n return o.attributes[r] = i, this.emit(\"edgeAttributesUpdated\", {\n key: o.key,\n type: \"set\",\n attributes: o.attributes,\n name: r\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"update\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r, i) {\n var o;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 3) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var a = \"\" + t,\n u = \"\" + r;\n if (r = arguments[2], i = arguments[3], !(o = s(this, a, u, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(a, '\" - \"').concat(u, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(o = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n if (\"function\" != typeof i) throw new F(\"Graph.\".concat(e, \": updater should be a function.\"));\n return o.attributes[r] = i(o.attributes[r]), this.emit(\"edgeAttributesUpdated\", {\n key: o.key,\n type: \"set\",\n attributes: o.attributes,\n name: r\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"remove\".concat(t, \"Attribute\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n return delete i.attributes[r], this.emit(\"edgeAttributesUpdated\", {\n key: i.key,\n type: \"remove\",\n attributes: i.attributes,\n name: r\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"replace\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n if (!h(r)) throw new F(\"Graph.\".concat(e, \": provided attributes are not a plain object.\"));\n return i.attributes = r, this.emit(\"edgeAttributesUpdated\", {\n key: i.key,\n type: \"replace\",\n attributes: i.attributes\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"merge\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n if (!h(r)) throw new F(\"Graph.\".concat(e, \": provided attributes are not a plain object.\"));\n return c(i.attributes, r), this.emit(\"edgeAttributesUpdated\", {\n key: i.key,\n type: \"merge\",\n attributes: i.attributes,\n data: r\n }), this;\n };\n }\n }, {\n name: function name(t) {\n return \"update\".concat(t, \"Attributes\");\n },\n attacher: function attacher(t, e, n) {\n t.prototype[e] = function (t, r) {\n var i;\n if (\"mixed\" !== this.type && \"mixed\" !== n && n !== this.type) throw new Y(\"Graph.\".concat(e, \": cannot find this type of edges in your \").concat(this.type, \" graph.\"));\n\n if (arguments.length > 2) {\n if (this.multi) throw new Y(\"Graph.\".concat(e, \": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.\"));\n var o = \"\" + t,\n a = \"\" + r;\n if (r = arguments[2], !(i = s(this, o, a, n))) throw new I(\"Graph.\".concat(e, ': could not find an edge for the given path (\"').concat(o, '\" - \"').concat(a, '\").'));\n } else {\n if (\"mixed\" !== n) throw new Y(\"Graph.\".concat(e, \": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.\"));\n if (t = \"\" + t, !(i = this._edges.get(t))) throw new I(\"Graph.\".concat(e, ': could not find the \"').concat(t, '\" edge in the graph.'));\n }\n\n if (\"function\" != typeof r) throw new F(\"Graph.\".concat(e, \": provided updater is not a function.\"));\n return i.attributes = r(i.attributes), this.emit(\"edgeAttributesUpdated\", {\n key: i.key,\n type: \"update\",\n attributes: i.attributes\n }), this;\n };\n }\n }];\n\n var $ = O,\n tt = R,\n et = function et() {\n var t = arguments,\n e = null,\n n = -1;\n return new $(function () {\n for (var r = null;;) {\n if (null === e) {\n if (++n >= t.length) return {\n done: !0\n };\n e = tt(t[n]);\n }\n\n if (!0 !== (r = e.next()).done) break;\n e = null;\n }\n\n return r;\n });\n },\n nt = [{\n name: \"edges\",\n type: \"mixed\"\n }, {\n name: \"inEdges\",\n type: \"directed\",\n direction: \"in\"\n }, {\n name: \"outEdges\",\n type: \"directed\",\n direction: \"out\"\n }, {\n name: \"inboundEdges\",\n type: \"mixed\",\n direction: \"in\"\n }, {\n name: \"outboundEdges\",\n type: \"mixed\",\n direction: \"out\"\n }, {\n name: \"directedEdges\",\n type: \"directed\"\n }, {\n name: \"undirectedEdges\",\n type: \"undirected\"\n }];\n\n function rt(t, e, n, r) {\n var i = !1;\n\n for (var o in e) {\n if (o !== r) {\n var a = e[o];\n if (i = n(a.key, a.attributes, a.source.key, a.target.key, a.source.attributes, a.target.attributes, a.undirected), t && i) return a.key;\n }\n }\n }\n\n function it(t, e, n, r) {\n var i,\n o,\n a,\n u = !1;\n\n for (var c in e) {\n if (c !== r) {\n i = e[c];\n\n do {\n if (o = i.source, a = i.target, u = n(i.key, i.attributes, o.key, a.key, o.attributes, a.attributes, i.undirected), t && u) return i.key;\n i = i.next;\n } while (void 0 !== i);\n }\n }\n }\n\n function ot(t, e) {\n var n,\n r = Object.keys(t),\n i = r.length,\n o = 0;\n return new O(function () {\n do {\n if (n) n = n.next;else {\n if (o >= i) return {\n done: !0\n };\n var a = r[o++];\n\n if (a === e) {\n n = void 0;\n continue;\n }\n\n n = t[a];\n }\n } while (!n);\n\n return {\n done: !1,\n value: {\n edge: n.key,\n attributes: n.attributes,\n source: n.source.key,\n target: n.target.key,\n sourceAttributes: n.source.attributes,\n targetAttributes: n.target.attributes,\n undirected: n.undirected\n }\n };\n });\n }\n\n function at(t, e, n, r) {\n var i = e[n];\n\n if (i) {\n var o = i.source,\n a = i.target;\n return r(i.key, i.attributes, o.key, a.key, o.attributes, a.attributes, i.undirected) && t ? i.key : void 0;\n }\n }\n\n function ut(t, e, n, r) {\n var i = e[n];\n\n if (i) {\n var o = !1;\n\n do {\n if (o = r(i.key, i.attributes, i.source.key, i.target.key, i.source.attributes, i.target.attributes, i.undirected), t && o) return i.key;\n i = i.next;\n } while (void 0 !== i);\n }\n }\n\n function ct(t, e) {\n var n = t[e];\n return void 0 !== n.next ? new O(function () {\n if (!n) return {\n done: !0\n };\n var t = {\n edge: n.key,\n attributes: n.attributes,\n source: n.source.key,\n target: n.target.key,\n sourceAttributes: n.source.attributes,\n targetAttributes: n.target.attributes,\n undirected: n.undirected\n };\n return n = n.next, {\n done: !1,\n value: t\n };\n }) : O.of({\n edge: n.key,\n attributes: n.attributes,\n source: n.source.key,\n target: n.target.key,\n sourceAttributes: n.source.attributes,\n targetAttributes: n.target.attributes,\n undirected: n.undirected\n });\n }\n\n function st(t, e) {\n if (0 === t.size) return [];\n if (\"mixed\" === e || e === t.type) return \"function\" == typeof Array.from ? Array.from(t._edges.keys()) : T(t._edges.keys(), t._edges.size);\n\n for (var n, r, i = \"undirected\" === e ? t.undirectedSize : t.directedSize, o = new Array(i), a = \"undirected\" === e, u = t._edges.values(), c = 0; !0 !== (n = u.next()).done;) {\n (r = n.value).undirected === a && (o[c++] = r.key);\n }\n\n return o;\n }\n\n function dt(t, e, n, r) {\n if (0 !== e.size) for (var i, o, a = \"mixed\" !== n && n !== e.type, u = \"undirected\" === n, c = !1, s = e._edges.values(); !0 !== (i = s.next()).done;) {\n if (o = i.value, !a || o.undirected === u) {\n var d = o,\n h = d.key,\n p = d.attributes,\n f = d.source,\n l = d.target;\n if (c = r(h, p, f.key, l.key, f.attributes, l.attributes, o.undirected), t && c) return h;\n }\n }\n }\n\n function ht(t, e) {\n if (0 === t.size) return O.empty();\n\n var n = \"mixed\" !== e && e !== t.type,\n r = \"undirected\" === e,\n i = t._edges.values();\n\n return new O(function () {\n for (var t, e;;) {\n if ((t = i.next()).done) return t;\n if (e = t.value, !n || e.undirected === r) break;\n }\n\n return {\n value: {\n edge: e.key,\n attributes: e.attributes,\n source: e.source.key,\n target: e.target.key,\n sourceAttributes: e.source.attributes,\n targetAttributes: e.target.attributes,\n undirected: e.undirected\n },\n done: !1\n };\n });\n }\n\n function pt(t, e, n, r, i, o) {\n var a,\n u = e ? it : rt;\n\n if (\"undirected\" !== n) {\n if (\"out\" !== r && (a = u(t, i.in, o), t && a)) return a;\n if (\"in\" !== r && (a = u(t, i.out, o, r ? void 0 : i.key), t && a)) return a;\n }\n\n if (\"directed\" !== n && (a = u(t, i.undirected, o), t && a)) return a;\n }\n\n function ft(t, e, n, r) {\n var i = [];\n return pt(!1, t, e, n, r, function (t) {\n i.push(t);\n }), i;\n }\n\n function lt(t, e, n) {\n var r = O.empty();\n return \"undirected\" !== t && (\"out\" !== e && void 0 !== n.in && (r = et(r, ot(n.in))), \"in\" !== e && void 0 !== n.out && (r = et(r, ot(n.out, e ? void 0 : n.key)))), \"directed\" !== t && void 0 !== n.undirected && (r = et(r, ot(n.undirected))), r;\n }\n\n function gt(t, e, n, r, i, o, a) {\n var u,\n c = n ? ut : at;\n\n if (\"undirected\" !== e) {\n if (void 0 !== i.in && \"out\" !== r && (u = c(t, i.in, o, a), t && u)) return u;\n if (void 0 !== i.out && \"in\" !== r && (r || i.key !== o) && (u = c(t, i.out, o, a), t && u)) return u;\n }\n\n if (\"directed\" !== e && void 0 !== i.undirected && (u = c(t, i.undirected, o, a), t && u)) return u;\n }\n\n function yt(t, e, n, r, i) {\n var o = [];\n return gt(!1, t, e, n, r, i, function (t) {\n o.push(t);\n }), o;\n }\n\n function wt(t, e, n, r) {\n var i = O.empty();\n return \"undirected\" !== t && (void 0 !== n.in && \"out\" !== e && r in n.in && (i = et(i, ct(n.in, r))), void 0 !== n.out && \"in\" !== e && r in n.out && (e || n.key !== r) && (i = et(i, ct(n.out, r)))), \"directed\" !== t && void 0 !== n.undirected && r in n.undirected && (i = et(i, ct(n.undirected, r))), i;\n }\n\n var vt = [{\n name: \"neighbors\",\n type: \"mixed\"\n }, {\n name: \"inNeighbors\",\n type: \"directed\",\n direction: \"in\"\n }, {\n name: \"outNeighbors\",\n type: \"directed\",\n direction: \"out\"\n }, {\n name: \"inboundNeighbors\",\n type: \"mixed\",\n direction: \"in\"\n }, {\n name: \"outboundNeighbors\",\n type: \"mixed\",\n direction: \"out\"\n }, {\n name: \"directedNeighbors\",\n type: \"directed\"\n }, {\n name: \"undirectedNeighbors\",\n type: \"undirected\"\n }];\n\n function bt() {\n this.A = null, this.B = null;\n }\n\n function mt(t, e, n, r, i) {\n for (var o in r) {\n var a = r[o],\n u = a.source,\n c = a.target,\n s = u === n ? c : u;\n\n if (!e || !e.has(s.key)) {\n var d = i(s.key, s.attributes);\n if (t && d) return s.key;\n }\n }\n }\n\n function kt(t, e, n, r, i) {\n if (\"mixed\" !== e) {\n if (\"undirected\" === e) return mt(t, null, r, r.undirected, i);\n if (\"string\" == typeof n) return mt(t, null, r, r[n], i);\n }\n\n var o,\n a = new bt();\n\n if (\"undirected\" !== e) {\n if (\"out\" !== n) {\n if (o = mt(t, null, r, r.in, i), t && o) return o;\n a.wrap(r.in);\n }\n\n if (\"in\" !== n) {\n if (o = mt(t, a, r, r.out, i), t && o) return o;\n a.wrap(r.out);\n }\n }\n\n if (\"directed\" !== e && (o = mt(t, a, r, r.undirected, i), t && o)) return o;\n }\n\n function _t(t, e, n) {\n var r = Object.keys(n),\n i = r.length,\n o = 0;\n return new O(function () {\n var a = null;\n\n do {\n if (o >= i) return t && t.wrap(n), {\n done: !0\n };\n var u = n[r[o++]],\n c = u.source,\n s = u.target;\n a = c === e ? s : c, t && t.has(a.key) && (a = null);\n } while (null === a);\n\n return {\n done: !1,\n value: {\n neighbor: a.key,\n attributes: a.attributes\n }\n };\n });\n }\n\n function Gt(t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction;\n\n t.prototype[n] = function (t) {\n if (\"mixed\" !== r && \"mixed\" !== this.type && r !== this.type) return [];\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (void 0 === e) throw new I(\"Graph.\".concat(n, ': could not find the \"').concat(t, '\" node in the graph.'));\n return function (t, e, n) {\n if (\"mixed\" !== t) {\n if (\"undirected\" === t) return Object.keys(n.undirected);\n if (\"string\" == typeof e) return Object.keys(n[e]);\n }\n\n var r = [];\n return kt(!1, t, e, n, function (t) {\n r.push(t);\n }), r;\n }(\"mixed\" === r ? this.type : r, i, e);\n };\n }\n\n function xt(t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = n.slice(0, -1) + \"Entries\";\n\n t.prototype[o] = function (t) {\n if (\"mixed\" !== r && \"mixed\" !== this.type && r !== this.type) return O.empty();\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (void 0 === e) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" node in the graph.'));\n return function (t, e, n) {\n if (\"mixed\" !== t) {\n if (\"undirected\" === t) return _t(null, n, n.undirected);\n if (\"string\" == typeof e) return _t(null, n, n[e]);\n }\n\n var r = O.empty(),\n i = new bt();\n return \"undirected\" !== t && (\"out\" !== e && (r = et(r, _t(i, n, n.in))), \"in\" !== e && (r = et(r, _t(i, n, n.out)))), \"directed\" !== t && (r = et(r, _t(i, n, n.undirected))), r;\n }(\"mixed\" === r ? this.type : r, i, e);\n };\n }\n\n function Et(t, e, n, r, i) {\n for (var o, a, u, c, s, d, h, p = r._nodes.values(), f = r.type; !0 !== (o = p.next()).done;) {\n var l = !1;\n if (a = o.value, \"undirected\" !== f) for (u in c = a.out) {\n s = c[u];\n\n do {\n if (d = s.target, l = !0, h = i(a.key, d.key, a.attributes, d.attributes, s.key, s.attributes, s.undirected), t && h) return s;\n s = s.next;\n } while (s);\n }\n if (\"directed\" !== f) for (u in c = a.undirected) {\n if (!(e && a.key > u)) {\n s = c[u];\n\n do {\n if ((d = s.target).key !== u && (d = s.source), l = !0, h = i(a.key, d.key, a.attributes, d.attributes, s.key, s.attributes, s.undirected), t && h) return s;\n s = s.next;\n } while (s);\n }\n }\n if (n && !l && (h = i(a.key, null, a.attributes, null, null, null, null), t && h)) return null;\n }\n }\n\n function At(t) {\n if (!h(t)) throw new F('Graph.import: invalid serialized node. A serialized node should be a plain object with at least a \"key\" property.');\n if (!(\"key\" in t)) throw new F(\"Graph.import: serialized node is missing its key.\");\n if (\"attributes\" in t && (!h(t.attributes) || null === t.attributes)) throw new F(\"Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.\");\n }\n\n function St(t) {\n if (!h(t)) throw new F('Graph.import: invalid serialized edge. A serialized edge should be a plain object with at least a \"source\" & \"target\" property.');\n if (!(\"source\" in t)) throw new F(\"Graph.import: serialized edge is missing its source.\");\n if (!(\"target\" in t)) throw new F(\"Graph.import: serialized edge is missing its target.\");\n if (\"attributes\" in t && (!h(t.attributes) || null === t.attributes)) throw new F(\"Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.\");\n if (\"undirected\" in t && \"boolean\" != typeof t.undirected) throw new F(\"Graph.import: invalid undirectedness information. Undirected should be boolean or omitted.\");\n }\n\n bt.prototype.wrap = function (t) {\n null === this.A ? this.A = t : null === this.B && (this.B = t);\n }, bt.prototype.has = function (t) {\n return null !== this.A && t in this.A || null !== this.B && t in this.B;\n };\n var Dt,\n Lt = (Dt = 255 & Math.floor(256 * Math.random()), function () {\n return Dt++;\n }),\n Ut = new Set([\"directed\", \"undirected\", \"mixed\"]),\n Nt = new Set([\"domain\", \"_events\", \"_eventsCount\", \"_maxListeners\"]),\n jt = {\n allowSelfLoops: !0,\n multi: !1,\n type: \"mixed\"\n };\n\n function Ot(t, e, n) {\n var r = new t.NodeDataClass(e, n);\n return t._nodes.set(e, r), t.emit(\"nodeAdded\", {\n key: e,\n attributes: n\n }), r;\n }\n\n function Ct(t, e, n, r, i, o, a, u) {\n if (!r && \"undirected\" === t.type) throw new Y(\"Graph.\".concat(e, \": you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead.\"));\n if (r && \"directed\" === t.type) throw new Y(\"Graph.\".concat(e, \": you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead.\"));\n if (u && !h(u)) throw new F(\"Graph.\".concat(e, ': invalid attributes. Expecting an object but got \"').concat(u, '\"'));\n if (o = \"\" + o, a = \"\" + a, u = u || {}, !t.allowSelfLoops && o === a) throw new Y(\"Graph.\".concat(e, ': source & target are the same (\"').concat(o, \"\\\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.\"));\n\n var c = t._nodes.get(o),\n s = t._nodes.get(a);\n\n if (!c) throw new I(\"Graph.\".concat(e, ': source node \"').concat(o, '\" not found.'));\n if (!s) throw new I(\"Graph.\".concat(e, ': target node \"').concat(a, '\" not found.'));\n var d = {\n key: null,\n undirected: r,\n source: o,\n target: a,\n attributes: u\n };\n if (n) i = t._edgeKeyGenerator();else if (i = \"\" + i, t._edges.has(i)) throw new Y(\"Graph.\".concat(e, ': the \"').concat(i, '\" edge already exists in the graph.'));\n if (!t.multi && (r ? void 0 !== c.undirected[a] : void 0 !== c.out[a])) throw new Y(\"Graph.\".concat(e, ': an edge linking \"').concat(o, '\" to \"').concat(a, \"\\\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option.\"));\n var p = new H(r, i, c, s, u);\n\n t._edges.set(i, p);\n\n var f = o === a;\n return r ? (c.undirectedDegree++, s.undirectedDegree++, f && t._undirectedSelfLoopCount++) : (c.outDegree++, s.inDegree++, f && t._directedSelfLoopCount++), t.multi ? p.attachMulti() : p.attach(), r ? t._undirectedSize++ : t._directedSize++, d.key = i, t.emit(\"edgeAdded\", d), i;\n }\n\n function zt(t, e, n, r, i, o, a, u, s) {\n if (!r && \"undirected\" === t.type) throw new Y(\"Graph.\".concat(e, \": you cannot merge/update a directed edge to an undirected graph. Use the #.mergeEdge/#.updateEdge or #.addUndirectedEdge instead.\"));\n if (r && \"directed\" === t.type) throw new Y(\"Graph.\".concat(e, \": you cannot merge/update an undirected edge to a directed graph. Use the #.mergeEdge/#.updateEdge or #.addDirectedEdge instead.\"));\n if (u) if (s) {\n if (\"function\" != typeof u) throw new F(\"Graph.\".concat(e, ': invalid updater function. Expecting a function but got \"').concat(u, '\"'));\n } else if (!h(u)) throw new F(\"Graph.\".concat(e, ': invalid attributes. Expecting an object but got \"').concat(u, '\"'));\n var d;\n if (o = \"\" + o, a = \"\" + a, s && (d = u, u = void 0), !t.allowSelfLoops && o === a) throw new Y(\"Graph.\".concat(e, ': source & target are the same (\"').concat(o, \"\\\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.\"));\n\n var p,\n f,\n l = t._nodes.get(o),\n g = t._nodes.get(a);\n\n if (!n && (p = t._edges.get(i))) {\n if (!(p.source.key === o && p.target.key === a || r && p.source.key === a && p.target.key === o)) throw new Y(\"Graph.\".concat(e, ': inconsistency detected when attempting to merge the \"').concat(i, '\" edge with \"').concat(o, '\" source & \"').concat(a, '\" target vs. (\"').concat(p.source.key, '\", \"').concat(p.target.key, '\").'));\n f = p;\n }\n\n if (f || t.multi || !l || (f = r ? l.undirected[a] : l.out[a]), f) {\n var y = [f.key, !1, !1, !1];\n if (s ? !d : !u) return y;\n\n if (s) {\n var w = f.attributes;\n f.attributes = d(w), t.emit(\"edgeAttributesUpdated\", {\n type: \"replace\",\n key: f.key,\n attributes: f.attributes\n });\n } else c(f.attributes, u), t.emit(\"edgeAttributesUpdated\", {\n type: \"merge\",\n key: f.key,\n attributes: f.attributes,\n data: u\n });\n\n return y;\n }\n\n u = u || {}, s && d && (u = d(u));\n var v = {\n key: null,\n undirected: r,\n source: o,\n target: a,\n attributes: u\n };\n if (n) i = t._edgeKeyGenerator();else if (i = \"\" + i, t._edges.has(i)) throw new Y(\"Graph.\".concat(e, ': the \"').concat(i, '\" edge already exists in the graph.'));\n var b = !1,\n m = !1;\n l || (l = Ot(t, o, {}), b = !0, o === a && (g = l, m = !0)), g || (g = Ot(t, a, {}), m = !0), p = new H(r, i, l, g, u), t._edges.set(i, p);\n var k = o === a;\n return r ? (l.undirectedDegree++, g.undirectedDegree++, k && t._undirectedSelfLoopCount++) : (l.outDegree++, g.inDegree++, k && t._directedSelfLoopCount++), t.multi ? p.attachMulti() : p.attach(), r ? t._undirectedSize++ : t._directedSize++, v.key = i, t.emit(\"edgeAdded\", v), [i, !0, b, m];\n }\n\n function Mt(t, e) {\n t._edges.delete(e.key);\n\n var n = e.source,\n r = e.target,\n i = e.attributes,\n o = e.undirected,\n a = n === r;\n o ? (n.undirectedDegree--, r.undirectedDegree--, a && t._undirectedSelfLoopCount--) : (n.outDegree--, r.inDegree--, a && t._directedSelfLoopCount--), t.multi ? e.detachMulti() : e.detach(), o ? t._undirectedSize-- : t._directedSize--, t.emit(\"edgeDropped\", {\n key: e.key,\n attributes: i,\n source: n.key,\n target: r.key,\n undirected: o\n });\n }\n\n var Wt = function (n) {\n function r(t) {\n var e;\n if (e = n.call(this) || this, \"boolean\" != typeof (t = c({}, jt, t)).multi) throw new F(\"Graph.constructor: invalid 'multi' option. Expecting a boolean but got \\\"\".concat(t.multi, '\".'));\n if (!Ut.has(t.type)) throw new F('Graph.constructor: invalid \\'type\\' option. Should be one of \"mixed\", \"directed\" or \"undirected\" but got \"'.concat(t.type, '\".'));\n if (\"boolean\" != typeof t.allowSelfLoops) throw new F(\"Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \\\"\".concat(t.allowSelfLoops, '\".'));\n var r = \"mixed\" === t.type ? q : \"directed\" === t.type ? J : V;\n f(u(e), \"NodeDataClass\", r);\n var i = \"geid_\" + Lt() + \"_\",\n o = 0;\n return f(u(e), \"_attributes\", {}), f(u(e), \"_nodes\", new Map()), f(u(e), \"_edges\", new Map()), f(u(e), \"_directedSize\", 0), f(u(e), \"_undirectedSize\", 0), f(u(e), \"_directedSelfLoopCount\", 0), f(u(e), \"_undirectedSelfLoopCount\", 0), f(u(e), \"_edgeKeyGenerator\", function () {\n var t;\n\n do {\n t = i + o++;\n } while (e._edges.has(t));\n\n return t;\n }), f(u(e), \"_options\", t), Nt.forEach(function (t) {\n return f(u(e), t, e[t]);\n }), l(u(e), \"order\", function () {\n return e._nodes.size;\n }), l(u(e), \"size\", function () {\n return e._edges.size;\n }), l(u(e), \"directedSize\", function () {\n return e._directedSize;\n }), l(u(e), \"undirectedSize\", function () {\n return e._undirectedSize;\n }), l(u(e), \"selfLoopCount\", function () {\n return e._directedSelfLoopCount + e._undirectedSelfLoopCount;\n }), l(u(e), \"directedSelfLoopCount\", function () {\n return e._directedSelfLoopCount;\n }), l(u(e), \"undirectedSelfLoopCount\", function () {\n return e._undirectedSelfLoopCount;\n }), l(u(e), \"multi\", e._options.multi), l(u(e), \"type\", e._options.type), l(u(e), \"allowSelfLoops\", e._options.allowSelfLoops), l(u(e), \"implementation\", function () {\n return \"graphology\";\n }), e;\n }\n\n e(r, n);\n var i = r.prototype;\n return i._resetInstanceCounters = function () {\n this._directedSize = 0, this._undirectedSize = 0, this._directedSelfLoopCount = 0, this._undirectedSelfLoopCount = 0;\n }, i.hasNode = function (t) {\n return this._nodes.has(\"\" + t);\n }, i.hasDirectedEdge = function (t, e) {\n if (\"undirected\" === this.type) return !1;\n\n if (1 === arguments.length) {\n var n = \"\" + t,\n r = this._edges.get(n);\n\n return !!r && !r.undirected;\n }\n\n if (2 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var i = this._nodes.get(t);\n\n if (!i) return !1;\n var o = i.out[e];\n return !!o && (!this.multi || !!o.size);\n }\n\n throw new F(\"Graph.hasDirectedEdge: invalid arity (\".concat(arguments.length, \", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.\"));\n }, i.hasUndirectedEdge = function (t, e) {\n if (\"directed\" === this.type) return !1;\n\n if (1 === arguments.length) {\n var n = \"\" + t,\n r = this._edges.get(n);\n\n return !!r && r.undirected;\n }\n\n if (2 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var i = this._nodes.get(t);\n\n if (!i) return !1;\n var o = i.undirected[e];\n return !!o && (!this.multi || !!o.size);\n }\n\n throw new F(\"Graph.hasDirectedEdge: invalid arity (\".concat(arguments.length, \", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.\"));\n }, i.hasEdge = function (t, e) {\n if (1 === arguments.length) {\n var n = \"\" + t;\n return this._edges.has(n);\n }\n\n if (2 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var r = this._nodes.get(t);\n\n if (!r) return !1;\n var i = void 0 !== r.out && r.out[e];\n return i || (i = void 0 !== r.undirected && r.undirected[e]), !!i && (!this.multi || !!i.size);\n }\n\n throw new F(\"Graph.hasEdge: invalid arity (\".concat(arguments.length, \", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.\"));\n }, i.directedEdge = function (t, e) {\n if (\"undirected\" !== this.type) {\n if (t = \"\" + t, e = \"\" + e, this.multi) throw new Y(\"Graph.directedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.directedEdges instead.\");\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.directedEdge: could not find the \"'.concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I('Graph.directedEdge: could not find the \"'.concat(e, '\" target node in the graph.'));\n var r = n.out && n.out[e] || void 0;\n return r ? r.key : void 0;\n }\n }, i.undirectedEdge = function (t, e) {\n if (\"directed\" !== this.type) {\n if (t = \"\" + t, e = \"\" + e, this.multi) throw new Y(\"Graph.undirectedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.undirectedEdges instead.\");\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.undirectedEdge: could not find the \"'.concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I('Graph.undirectedEdge: could not find the \"'.concat(e, '\" target node in the graph.'));\n var r = n.undirected && n.undirected[e] || void 0;\n return r ? r.key : void 0;\n }\n }, i.edge = function (t, e) {\n if (this.multi) throw new Y(\"Graph.edge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.edges instead.\");\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.edge: could not find the \"'.concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I('Graph.edge: could not find the \"'.concat(e, '\" target node in the graph.'));\n var r = n.out && n.out[e] || n.undirected && n.undirected[e] || void 0;\n if (r) return r.key;\n }, i.areDirectedNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areDirectedNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && (e in n.in || e in n.out);\n }, i.areOutNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areOutNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && e in n.out;\n }, i.areInNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areInNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && e in n.in;\n }, i.areUndirectedNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areUndirectedNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"directed\" !== this.type && e in n.undirected;\n }, i.areNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && (e in n.in || e in n.out) || \"directed\" !== this.type && e in n.undirected;\n }, i.areInboundNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areInboundNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && e in n.in || \"directed\" !== this.type && e in n.undirected;\n }, i.areOutboundNeighbors = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.areOutboundNeighbors: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" !== this.type && e in n.out || \"directed\" !== this.type && e in n.undirected;\n }, i.inDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.inDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" === this.type ? 0 : e.inDegree;\n }, i.outDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.outDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" === this.type ? 0 : e.outDegree;\n }, i.directedDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.directedDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"undirected\" === this.type ? 0 : e.inDegree + e.outDegree;\n }, i.undirectedDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.undirectedDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n return \"directed\" === this.type ? 0 : e.undirectedDegree;\n }, i.inboundDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.inboundDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n var n = 0;\n return \"directed\" !== this.type && (n += e.undirectedDegree), \"undirected\" !== this.type && (n += e.inDegree), n;\n }, i.outboundDegree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.outboundDegree: could not find the \"'.concat(t, '\" node in the graph.'));\n var n = 0;\n return \"directed\" !== this.type && (n += e.undirectedDegree), \"undirected\" !== this.type && (n += e.outDegree), n;\n }, i.degree = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.degree: could not find the \"'.concat(t, '\" node in the graph.'));\n var n = 0;\n return \"directed\" !== this.type && (n += e.undirectedDegree), \"undirected\" !== this.type && (n += e.inDegree + e.outDegree), n;\n }, i.inDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.inDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n if (\"undirected\" === this.type) return 0;\n var n = e.in[t],\n r = n ? this.multi ? n.size : 1 : 0;\n return e.inDegree - r;\n }, i.outDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.outDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n if (\"undirected\" === this.type) return 0;\n var n = e.out[t],\n r = n ? this.multi ? n.size : 1 : 0;\n return e.outDegree - r;\n }, i.directedDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.directedDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n if (\"undirected\" === this.type) return 0;\n var n = e.out[t],\n r = n ? this.multi ? n.size : 1 : 0;\n return e.inDegree + e.outDegree - 2 * r;\n }, i.undirectedDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e = this._nodes.get(t);\n\n if (!e) throw new I('Graph.undirectedDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n if (\"directed\" === this.type) return 0;\n var n = e.undirected[t],\n r = n ? this.multi ? n.size : 1 : 0;\n return e.undirectedDegree - 2 * r;\n }, i.inboundDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e,\n n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.inboundDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n var r = 0,\n i = 0;\n return \"directed\" !== this.type && (r += n.undirectedDegree, i += 2 * ((e = n.undirected[t]) ? this.multi ? e.size : 1 : 0)), \"undirected\" !== this.type && (r += n.inDegree, i += (e = n.out[t]) ? this.multi ? e.size : 1 : 0), r - i;\n }, i.outboundDegreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e,\n n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.outboundDegreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n var r = 0,\n i = 0;\n return \"directed\" !== this.type && (r += n.undirectedDegree, i += 2 * ((e = n.undirected[t]) ? this.multi ? e.size : 1 : 0)), \"undirected\" !== this.type && (r += n.outDegree, i += (e = n.in[t]) ? this.multi ? e.size : 1 : 0), r - i;\n }, i.degreeWithoutSelfLoops = function (t) {\n t = \"\" + t;\n\n var e,\n n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.degreeWithoutSelfLoops: could not find the \"'.concat(t, '\" node in the graph.'));\n var r = 0,\n i = 0;\n return \"directed\" !== this.type && (r += n.undirectedDegree, i += 2 * ((e = n.undirected[t]) ? this.multi ? e.size : 1 : 0)), \"undirected\" !== this.type && (r += n.inDegree + n.outDegree, i += 2 * ((e = n.out[t]) ? this.multi ? e.size : 1 : 0)), r - i;\n }, i.source = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.source: could not find the \"'.concat(t, '\" edge in the graph.'));\n return e.source.key;\n }, i.target = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.target: could not find the \"'.concat(t, '\" edge in the graph.'));\n return e.target.key;\n }, i.extremities = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.extremities: could not find the \"'.concat(t, '\" edge in the graph.'));\n return [e.source.key, e.target.key];\n }, i.opposite = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._edges.get(e);\n\n if (!n) throw new I('Graph.opposite: could not find the \"'.concat(e, '\" edge in the graph.'));\n var r = n.source.key,\n i = n.target.key;\n if (t === r) return i;\n if (t === i) return r;\n throw new I('Graph.opposite: the \"'.concat(t, '\" node is not attached to the \"').concat(e, '\" edge (').concat(r, \", \").concat(i, \").\"));\n }, i.hasExtremity = function (t, e) {\n t = \"\" + t, e = \"\" + e;\n\n var n = this._edges.get(t);\n\n if (!n) throw new I('Graph.hasExtremity: could not find the \"'.concat(t, '\" edge in the graph.'));\n return n.source.key === e || n.target.key === e;\n }, i.isUndirected = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.isUndirected: could not find the \"'.concat(t, '\" edge in the graph.'));\n return e.undirected;\n }, i.isDirected = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.isDirected: could not find the \"'.concat(t, '\" edge in the graph.'));\n return !e.undirected;\n }, i.isSelfLoop = function (t) {\n t = \"\" + t;\n\n var e = this._edges.get(t);\n\n if (!e) throw new I('Graph.isSelfLoop: could not find the \"'.concat(t, '\" edge in the graph.'));\n return e.source === e.target;\n }, i.addNode = function (t, e) {\n var n = function (t, e, n) {\n if (n && !h(n)) throw new F('Graph.addNode: invalid attributes. Expecting an object but got \"'.concat(n, '\"'));\n if (e = \"\" + e, n = n || {}, t._nodes.has(e)) throw new Y('Graph.addNode: the \"'.concat(e, '\" node already exist in the graph.'));\n var r = new t.NodeDataClass(e, n);\n return t._nodes.set(e, r), t.emit(\"nodeAdded\", {\n key: e,\n attributes: n\n }), r;\n }(this, t, e);\n\n return n.key;\n }, i.mergeNode = function (t, e) {\n if (e && !h(e)) throw new F('Graph.mergeNode: invalid attributes. Expecting an object but got \"'.concat(e, '\"'));\n t = \"\" + t, e = e || {};\n\n var n = this._nodes.get(t);\n\n return n ? (e && (c(n.attributes, e), this.emit(\"nodeAttributesUpdated\", {\n type: \"merge\",\n key: t,\n attributes: n.attributes,\n data: e\n })), [t, !1]) : (n = new this.NodeDataClass(t, e), this._nodes.set(t, n), this.emit(\"nodeAdded\", {\n key: t,\n attributes: e\n }), [t, !0]);\n }, i.updateNode = function (t, e) {\n if (e && \"function\" != typeof e) throw new F('Graph.updateNode: invalid updater function. Expecting a function but got \"'.concat(e, '\"'));\n t = \"\" + t;\n\n var n = this._nodes.get(t);\n\n if (n) {\n if (e) {\n var r = n.attributes;\n n.attributes = e(r), this.emit(\"nodeAttributesUpdated\", {\n type: \"replace\",\n key: t,\n attributes: n.attributes\n });\n }\n\n return [t, !1];\n }\n\n var i = e ? e({}) : {};\n return n = new this.NodeDataClass(t, i), this._nodes.set(t, n), this.emit(\"nodeAdded\", {\n key: t,\n attributes: i\n }), [t, !0];\n }, i.dropNode = function (t) {\n t = \"\" + t;\n\n var e,\n n = this._nodes.get(t);\n\n if (!n) throw new I('Graph.dropNode: could not find the \"'.concat(t, '\" node in the graph.'));\n\n if (\"undirected\" !== this.type) {\n for (var r in n.out) {\n e = n.out[r];\n\n do {\n Mt(this, e), e = e.next;\n } while (e);\n }\n\n for (var i in n.in) {\n e = n.in[i];\n\n do {\n Mt(this, e), e = e.next;\n } while (e);\n }\n }\n\n if (\"directed\" !== this.type) for (var o in n.undirected) {\n e = n.undirected[o];\n\n do {\n Mt(this, e), e = e.next;\n } while (e);\n }\n this._nodes.delete(t), this.emit(\"nodeDropped\", {\n key: t,\n attributes: n.attributes\n });\n }, i.dropEdge = function (t) {\n var e;\n\n if (arguments.length > 1) {\n var n = \"\" + arguments[0],\n r = \"\" + arguments[1];\n if (!(e = s(this, n, r, this.type))) throw new I('Graph.dropEdge: could not find the \"'.concat(n, '\" -> \"').concat(r, '\" edge in the graph.'));\n } else if (t = \"\" + t, !(e = this._edges.get(t))) throw new I('Graph.dropEdge: could not find the \"'.concat(t, '\" edge in the graph.'));\n\n return Mt(this, e), this;\n }, i.dropDirectedEdge = function (t, e) {\n if (arguments.length < 2) throw new Y(\"Graph.dropDirectedEdge: it does not make sense to try and drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.\");\n if (this.multi) throw new Y(\"Graph.dropDirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.\");\n var n = s(this, t = \"\" + t, e = \"\" + e, \"directed\");\n if (!n) throw new I('Graph.dropDirectedEdge: could not find a \"'.concat(t, '\" -> \"').concat(e, '\" edge in the graph.'));\n return Mt(this, n), this;\n }, i.dropUndirectedEdge = function (t, e) {\n if (arguments.length < 2) throw new Y(\"Graph.dropUndirectedEdge: it does not make sense to drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.\");\n if (this.multi) throw new Y(\"Graph.dropUndirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.\");\n var n = s(this, t, e, \"undirected\");\n if (!n) throw new I('Graph.dropUndirectedEdge: could not find a \"'.concat(t, '\" -> \"').concat(e, '\" edge in the graph.'));\n return Mt(this, n), this;\n }, i.clear = function () {\n this._edges.clear(), this._nodes.clear(), this._resetInstanceCounters(), this.emit(\"cleared\");\n }, i.clearEdges = function () {\n for (var t, e = this._nodes.values(); !0 !== (t = e.next()).done;) {\n t.value.clear();\n }\n\n this._edges.clear(), this._resetInstanceCounters(), this.emit(\"edgesCleared\");\n }, i.getAttribute = function (t) {\n return this._attributes[t];\n }, i.getAttributes = function () {\n return this._attributes;\n }, i.hasAttribute = function (t) {\n return this._attributes.hasOwnProperty(t);\n }, i.setAttribute = function (t, e) {\n return this._attributes[t] = e, this.emit(\"attributesUpdated\", {\n type: \"set\",\n attributes: this._attributes,\n name: t\n }), this;\n }, i.updateAttribute = function (t, e) {\n if (\"function\" != typeof e) throw new F(\"Graph.updateAttribute: updater should be a function.\");\n var n = this._attributes[t];\n return this._attributes[t] = e(n), this.emit(\"attributesUpdated\", {\n type: \"set\",\n attributes: this._attributes,\n name: t\n }), this;\n }, i.removeAttribute = function (t) {\n return delete this._attributes[t], this.emit(\"attributesUpdated\", {\n type: \"remove\",\n attributes: this._attributes,\n name: t\n }), this;\n }, i.replaceAttributes = function (t) {\n if (!h(t)) throw new F(\"Graph.replaceAttributes: provided attributes are not a plain object.\");\n return this._attributes = t, this.emit(\"attributesUpdated\", {\n type: \"replace\",\n attributes: this._attributes\n }), this;\n }, i.mergeAttributes = function (t) {\n if (!h(t)) throw new F(\"Graph.mergeAttributes: provided attributes are not a plain object.\");\n return c(this._attributes, t), this.emit(\"attributesUpdated\", {\n type: \"merge\",\n attributes: this._attributes,\n data: t\n }), this;\n }, i.updateAttributes = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.updateAttributes: provided updater is not a function.\");\n return this._attributes = t(this._attributes), this.emit(\"attributesUpdated\", {\n type: \"update\",\n attributes: this._attributes\n }), this;\n }, i.updateEachNodeAttributes = function (t, e) {\n if (\"function\" != typeof t) throw new F(\"Graph.updateEachNodeAttributes: expecting an updater function.\");\n if (e && !g(e)) throw new F(\"Graph.updateEachNodeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}\");\n\n for (var n, r, i = this._nodes.values(); !0 !== (n = i.next()).done;) {\n (r = n.value).attributes = t(r.key, r.attributes);\n }\n\n this.emit(\"eachNodeAttributesUpdated\", {\n hints: e || null\n });\n }, i.updateEachEdgeAttributes = function (t, e) {\n if (\"function\" != typeof t) throw new F(\"Graph.updateEachEdgeAttributes: expecting an updater function.\");\n if (e && !g(e)) throw new F(\"Graph.updateEachEdgeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}\");\n\n for (var n, r, i, o, a = this._edges.values(); !0 !== (n = a.next()).done;) {\n i = (r = n.value).source, o = r.target, r.attributes = t(r.key, r.attributes, i.key, o.key, i.attributes, o.attributes, r.undirected);\n }\n\n this.emit(\"eachEdgeAttributesUpdated\", {\n hints: e || null\n });\n }, i.forEachAdjacencyEntry = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.forEachAdjacencyEntry: expecting a callback.\");\n Et(!1, !1, !1, this, t);\n }, i.forEachAdjacencyEntryWithOrphans = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.forEachAdjacencyEntryWithOrphans: expecting a callback.\");\n Et(!1, !1, !0, this, t);\n }, i.forEachAssymetricAdjacencyEntry = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.forEachAssymetricAdjacencyEntry: expecting a callback.\");\n Et(!1, !0, !1, this, t);\n }, i.forEachAssymetricAdjacencyEntryWithOrphans = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.forEachAssymetricAdjacencyEntryWithOrphans: expecting a callback.\");\n Et(!1, !0, !0, this, t);\n }, i.nodes = function () {\n return \"function\" == typeof Array.from ? Array.from(this._nodes.keys()) : T(this._nodes.keys(), this._nodes.size);\n }, i.forEachNode = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.forEachNode: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(); !0 !== (e = r.next()).done;) {\n t((n = e.value).key, n.attributes);\n }\n }, i.findNode = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.findNode: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(); !0 !== (e = r.next()).done;) {\n if (t((n = e.value).key, n.attributes)) return n.key;\n }\n }, i.mapNodes = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.mapNode: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(), i = new Array(this.order), o = 0; !0 !== (e = r.next()).done;) {\n n = e.value, i[o++] = t(n.key, n.attributes);\n }\n\n return i;\n }, i.someNode = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.someNode: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(); !0 !== (e = r.next()).done;) {\n if (t((n = e.value).key, n.attributes)) return !0;\n }\n\n return !1;\n }, i.everyNode = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.everyNode: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(); !0 !== (e = r.next()).done;) {\n if (!t((n = e.value).key, n.attributes)) return !1;\n }\n\n return !0;\n }, i.filterNodes = function (t) {\n if (\"function\" != typeof t) throw new F(\"Graph.filterNodes: expecting a callback.\");\n\n for (var e, n, r = this._nodes.values(), i = []; !0 !== (e = r.next()).done;) {\n t((n = e.value).key, n.attributes) && i.push(n.key);\n }\n\n return i;\n }, i.reduceNodes = function (t, e) {\n if (\"function\" != typeof t) throw new F(\"Graph.reduceNodes: expecting a callback.\");\n if (arguments.length < 2) throw new F(\"Graph.reduceNodes: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.\");\n\n for (var n, r, i = e, o = this._nodes.values(); !0 !== (n = o.next()).done;) {\n i = t(i, (r = n.value).key, r.attributes);\n }\n\n return i;\n }, i.nodeEntries = function () {\n var t = this._nodes.values();\n\n return new O(function () {\n var e = t.next();\n if (e.done) return e;\n var n = e.value;\n return {\n value: {\n node: n.key,\n attributes: n.attributes\n },\n done: !1\n };\n });\n }, i.export = function () {\n var t = new Array(this._nodes.size),\n e = 0;\n\n this._nodes.forEach(function (n, r) {\n t[e++] = function (t, e) {\n var n = {\n key: t\n };\n return p(e.attributes) || (n.attributes = c({}, e.attributes)), n;\n }(r, n);\n });\n\n var n = new Array(this._edges.size);\n return e = 0, this._edges.forEach(function (t, r) {\n n[e++] = function (t, e) {\n var n = {\n key: t,\n source: e.source.key,\n target: e.target.key\n };\n return p(e.attributes) || (n.attributes = c({}, e.attributes)), e.undirected && (n.undirected = !0), n;\n }(r, t);\n }), {\n options: {\n type: this.type,\n multi: this.multi,\n allowSelfLoops: this.allowSelfLoops\n },\n attributes: this.getAttributes(),\n nodes: t,\n edges: n\n };\n }, i.import = function (t) {\n var e,\n n,\n r,\n i,\n o,\n a = this,\n u = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n if (d(t)) return t.forEachNode(function (t, e) {\n u ? a.mergeNode(t, e) : a.addNode(t, e);\n }), t.forEachEdge(function (t, e, n, r, i, o, c) {\n u ? c ? a.mergeUndirectedEdgeWithKey(t, n, r, e) : a.mergeDirectedEdgeWithKey(t, n, r, e) : c ? a.addUndirectedEdgeWithKey(t, n, r, e) : a.addDirectedEdgeWithKey(t, n, r, e);\n }), this;\n if (!h(t)) throw new F(\"Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.\");\n\n if (t.attributes) {\n if (!h(t.attributes)) throw new F(\"Graph.import: invalid attributes. Expecting a plain object.\");\n u ? this.mergeAttributes(t.attributes) : this.replaceAttributes(t.attributes);\n }\n\n if (t.nodes) {\n if (r = t.nodes, !Array.isArray(r)) throw new F(\"Graph.import: invalid nodes. Expecting an array.\");\n\n for (e = 0, n = r.length; e < n; e++) {\n At(i = r[e]);\n var c = i,\n s = c.key,\n p = c.attributes;\n u ? this.mergeNode(s, p) : this.addNode(s, p);\n }\n }\n\n if (t.edges) {\n if (r = t.edges, !Array.isArray(r)) throw new F(\"Graph.import: invalid edges. Expecting an array.\");\n\n for (e = 0, n = r.length; e < n; e++) {\n St(o = r[e]);\n var f = o,\n l = f.source,\n g = f.target,\n y = f.attributes,\n w = f.undirected,\n v = void 0 !== w && w;\n \"key\" in o ? (u ? v ? this.mergeUndirectedEdgeWithKey : this.mergeDirectedEdgeWithKey : v ? this.addUndirectedEdgeWithKey : this.addDirectedEdgeWithKey).call(this, o.key, l, g, y) : (u ? v ? this.mergeUndirectedEdge : this.mergeDirectedEdge : v ? this.addUndirectedEdge : this.addDirectedEdge).call(this, l, g, y);\n }\n }\n\n return this;\n }, i.nullCopy = function (t) {\n var e = new r(c({}, this._options, t));\n return e.replaceAttributes(c({}, this.getAttributes())), e;\n }, i.emptyCopy = function (t) {\n var e = this.nullCopy(t);\n return this._nodes.forEach(function (t, n) {\n var r = c({}, t.attributes);\n t = new e.NodeDataClass(n, r), e._nodes.set(n, t);\n }), e;\n }, i.copy = function (t) {\n if (\"string\" == typeof (t = t || {}).type && t.type !== this.type && \"mixed\" !== t.type) throw new Y('Graph.copy: cannot create an incompatible copy from \"'.concat(this.type, '\" type to \"').concat(t.type, '\" because this would mean losing information about the current graph.'));\n if (\"boolean\" == typeof t.multi && t.multi !== this.multi && !0 !== t.multi) throw new Y(\"Graph.copy: cannot create an incompatible copy by downgrading a multi graph to a simple one because this would mean losing information about the current graph.\");\n if (\"boolean\" == typeof t.allowSelfLoops && t.allowSelfLoops !== this.allowSelfLoops && !0 !== t.allowSelfLoops) throw new Y(\"Graph.copy: cannot create an incompatible copy from a graph allowing self loops to one that does not because this would mean losing information about the current graph.\");\n\n for (var e, n, r = this.emptyCopy(t), i = this._edges.values(); !0 !== (e = i.next()).done;) {\n Ct(r, \"copy\", !1, (n = e.value).undirected, n.key, n.source.key, n.target.key, c({}, n.attributes));\n }\n\n return r;\n }, i.toJSON = function () {\n return this.export();\n }, i.toString = function () {\n return \"[object Graph]\";\n }, i.inspect = function () {\n var e = this,\n n = {};\n\n this._nodes.forEach(function (t, e) {\n n[e] = t.attributes;\n });\n\n var r = {},\n i = {};\n\n this._edges.forEach(function (t, n) {\n var o,\n a = t.undirected ? \"--\" : \"->\",\n u = \"\",\n c = t.source.key,\n s = t.target.key;\n t.undirected && c > s && (o = c, c = s, s = o);\n var d = \"(\".concat(c, \")\").concat(a, \"(\").concat(s, \")\");\n n.startsWith(\"geid_\") ? e.multi && (void 0 === i[d] ? i[d] = 0 : i[d]++, u += \"\".concat(i[d], \". \")) : u += \"[\".concat(n, \"]: \"), r[u += d] = t.attributes;\n });\n\n var o = {};\n\n for (var a in this) {\n this.hasOwnProperty(a) && !Nt.has(a) && \"function\" != typeof this[a] && \"symbol\" !== t(a) && (o[a] = this[a]);\n }\n\n return o.attributes = this._attributes, o.nodes = n, o.edges = r, f(o, \"constructor\", this.constructor), o;\n }, r;\n }(w.exports.EventEmitter);\n\n \"undefined\" != typeof Symbol && (Wt.prototype[Symbol.for(\"nodejs.util.inspect.custom\")] = Wt.prototype.inspect), [{\n name: function name(t) {\n return \"\".concat(t, \"Edge\");\n },\n generateKey: !0\n }, {\n name: function name(t) {\n return \"\".concat(t, \"DirectedEdge\");\n },\n generateKey: !0,\n type: \"directed\"\n }, {\n name: function name(t) {\n return \"\".concat(t, \"UndirectedEdge\");\n },\n generateKey: !0,\n type: \"undirected\"\n }, {\n name: function name(t) {\n return \"\".concat(t, \"EdgeWithKey\");\n }\n }, {\n name: function name(t) {\n return \"\".concat(t, \"DirectedEdgeWithKey\");\n },\n type: \"directed\"\n }, {\n name: function name(t) {\n return \"\".concat(t, \"UndirectedEdgeWithKey\");\n },\n type: \"undirected\"\n }].forEach(function (t) {\n [\"add\", \"merge\", \"update\"].forEach(function (e) {\n var n = t.name(e),\n r = \"add\" === e ? Ct : zt;\n t.generateKey ? Wt.prototype[n] = function (i, o, a) {\n return r(this, n, !0, \"undirected\" === (t.type || this.type), null, i, o, a, \"update\" === e);\n } : Wt.prototype[n] = function (i, o, a, u) {\n return r(this, n, !1, \"undirected\" === (t.type || this.type), i, o, a, u, \"update\" === e);\n };\n });\n }), function (t) {\n X.forEach(function (e) {\n var n = e.name,\n r = e.attacher;\n r(t, n(\"Node\"), 0), r(t, n(\"Source\"), 1), r(t, n(\"Target\"), 2), r(t, n(\"Opposite\"), 3);\n });\n }(Wt), function (t) {\n Z.forEach(function (e) {\n var n = e.name,\n r = e.attacher;\n r(t, n(\"Edge\"), \"mixed\"), r(t, n(\"DirectedEdge\"), \"directed\"), r(t, n(\"UndirectedEdge\"), \"undirected\");\n });\n }(Wt), function (t) {\n nt.forEach(function (e) {\n !function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction;\n\n t.prototype[n] = function (t, e) {\n if (\"mixed\" !== r && \"mixed\" !== this.type && r !== this.type) return [];\n if (!arguments.length) return st(this, r);\n\n if (1 === arguments.length) {\n t = \"\" + t;\n\n var o = this._nodes.get(t);\n\n if (void 0 === o) throw new I(\"Graph.\".concat(n, ': could not find the \"').concat(t, '\" node in the graph.'));\n return ft(this.multi, \"mixed\" === r ? this.type : r, i, o);\n }\n\n if (2 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var a = this._nodes.get(t);\n\n if (!a) throw new I(\"Graph.\".concat(n, ': could not find the \"').concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I(\"Graph.\".concat(n, ': could not find the \"').concat(e, '\" target node in the graph.'));\n return yt(r, this.multi, i, a, e);\n }\n\n throw new F(\"Graph.\".concat(n, \": too many arguments (expecting 0, 1 or 2 and got \").concat(arguments.length, \").\"));\n };\n }(t, e), function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = \"forEach\" + n[0].toUpperCase() + n.slice(1, -1);\n\n t.prototype[o] = function (t, e, n) {\n if (\"mixed\" === r || \"mixed\" === this.type || r === this.type) {\n if (1 === arguments.length) return dt(!1, this, r, n = t);\n\n if (2 === arguments.length) {\n t = \"\" + t, n = e;\n\n var a = this._nodes.get(t);\n\n if (void 0 === a) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" node in the graph.'));\n return pt(!1, this.multi, \"mixed\" === r ? this.type : r, i, a, n);\n }\n\n if (3 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var u = this._nodes.get(t);\n\n if (!u) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(e, '\" target node in the graph.'));\n return gt(!1, r, this.multi, i, u, e, n);\n }\n\n throw new F(\"Graph.\".concat(o, \": too many arguments (expecting 1, 2 or 3 and got \").concat(arguments.length, \").\"));\n }\n };\n\n var a = \"map\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[a] = function () {\n var t,\n e = Array.prototype.slice.call(arguments),\n n = e.pop();\n\n if (0 === e.length) {\n var i = 0;\n \"directed\" !== r && (i += this.undirectedSize), \"undirected\" !== r && (i += this.directedSize), t = new Array(i);\n var a = 0;\n e.push(function (e, r, i, o, u, c, s) {\n t[a++] = n(e, r, i, o, u, c, s);\n });\n } else t = [], e.push(function (e, r, i, o, a, u, c) {\n t.push(n(e, r, i, o, a, u, c));\n });\n\n return this[o].apply(this, e), t;\n };\n\n var u = \"filter\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[u] = function () {\n var t = Array.prototype.slice.call(arguments),\n e = t.pop(),\n n = [];\n return t.push(function (t, r, i, o, a, u, c) {\n e(t, r, i, o, a, u, c) && n.push(t);\n }), this[o].apply(this, t), n;\n };\n\n var c = \"reduce\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[c] = function () {\n var t,\n e,\n n = Array.prototype.slice.call(arguments);\n if (n.length < 2 || n.length > 4) throw new F(\"Graph.\".concat(c, \": invalid number of arguments (expecting 2, 3 or 4 and got \").concat(n.length, \").\"));\n if (\"function\" == typeof n[n.length - 1] && \"function\" != typeof n[n.length - 2]) throw new F(\"Graph.\".concat(c, \": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.\"));\n 2 === n.length ? (t = n[0], e = n[1], n = []) : 3 === n.length ? (t = n[1], e = n[2], n = [n[0]]) : 4 === n.length && (t = n[2], e = n[3], n = [n[0], n[1]]);\n var r = e;\n return n.push(function (e, n, i, o, a, u, c) {\n r = t(r, e, n, i, o, a, u, c);\n }), this[o].apply(this, n), r;\n };\n }(t, e), function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = \"find\" + n[0].toUpperCase() + n.slice(1, -1);\n\n t.prototype[o] = function (t, e, n) {\n if (\"mixed\" !== r && \"mixed\" !== this.type && r !== this.type) return !1;\n if (1 === arguments.length) return dt(!0, this, r, n = t);\n\n if (2 === arguments.length) {\n t = \"\" + t, n = e;\n\n var a = this._nodes.get(t);\n\n if (void 0 === a) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" node in the graph.'));\n return pt(!0, this.multi, \"mixed\" === r ? this.type : r, i, a, n);\n }\n\n if (3 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var u = this._nodes.get(t);\n\n if (!u) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(e, '\" target node in the graph.'));\n return gt(!0, r, this.multi, i, u, e, n);\n }\n\n throw new F(\"Graph.\".concat(o, \": too many arguments (expecting 1, 2 or 3 and got \").concat(arguments.length, \").\"));\n };\n\n var a = \"some\" + n[0].toUpperCase() + n.slice(1, -1);\n\n t.prototype[a] = function () {\n var t = Array.prototype.slice.call(arguments),\n e = t.pop();\n return t.push(function (t, n, r, i, o, a, u) {\n return e(t, n, r, i, o, a, u);\n }), !!this[o].apply(this, t);\n };\n\n var u = \"every\" + n[0].toUpperCase() + n.slice(1, -1);\n\n t.prototype[u] = function () {\n var t = Array.prototype.slice.call(arguments),\n e = t.pop();\n return t.push(function (t, n, r, i, o, a, u) {\n return !e(t, n, r, i, o, a, u);\n }), !this[o].apply(this, t);\n };\n }(t, e), function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = n.slice(0, -1) + \"Entries\";\n\n t.prototype[o] = function (t, e) {\n if (\"mixed\" !== r && \"mixed\" !== this.type && r !== this.type) return O.empty();\n if (!arguments.length) return ht(this, r);\n\n if (1 === arguments.length) {\n t = \"\" + t;\n\n var n = this._nodes.get(t);\n\n if (!n) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" node in the graph.'));\n return lt(r, i, n);\n }\n\n if (2 === arguments.length) {\n t = \"\" + t, e = \"\" + e;\n\n var a = this._nodes.get(t);\n\n if (!a) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" source node in the graph.'));\n if (!this._nodes.has(e)) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(e, '\" target node in the graph.'));\n return wt(r, i, a, e);\n }\n\n throw new F(\"Graph.\".concat(o, \": too many arguments (expecting 0, 1 or 2 and got \").concat(arguments.length, \").\"));\n };\n }(t, e);\n });\n }(Wt), function (t) {\n vt.forEach(function (e) {\n Gt(t, e), function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = \"forEach\" + n[0].toUpperCase() + n.slice(1, -1);\n\n t.prototype[o] = function (t, e) {\n if (\"mixed\" === r || \"mixed\" === this.type || r === this.type) {\n t = \"\" + t;\n\n var n = this._nodes.get(t);\n\n if (void 0 === n) throw new I(\"Graph.\".concat(o, ': could not find the \"').concat(t, '\" node in the graph.'));\n kt(!1, \"mixed\" === r ? this.type : r, i, n, e);\n }\n };\n\n var a = \"map\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[a] = function (t, e) {\n var n = [];\n return this[o](t, function (t, r) {\n n.push(e(t, r));\n }), n;\n };\n\n var u = \"filter\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[u] = function (t, e) {\n var n = [];\n return this[o](t, function (t, r) {\n e(t, r) && n.push(t);\n }), n;\n };\n\n var c = \"reduce\" + n[0].toUpperCase() + n.slice(1);\n\n t.prototype[c] = function (t, e, n) {\n if (arguments.length < 3) throw new F(\"Graph.\".concat(c, \": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.\"));\n var r = n;\n return this[o](t, function (t, n) {\n r = e(r, t, n);\n }), r;\n };\n }(t, e), function (t, e) {\n var n = e.name,\n r = e.type,\n i = e.direction,\n o = n[0].toUpperCase() + n.slice(1, -1),\n a = \"find\" + o;\n\n t.prototype[a] = function (t, e) {\n if (\"mixed\" === r || \"mixed\" === this.type || r === this.type) {\n t = \"\" + t;\n\n var n = this._nodes.get(t);\n\n if (void 0 === n) throw new I(\"Graph.\".concat(a, ': could not find the \"').concat(t, '\" node in the graph.'));\n return kt(!0, \"mixed\" === r ? this.type : r, i, n, e);\n }\n };\n\n var u = \"some\" + o;\n\n t.prototype[u] = function (t, e) {\n return !!this[a](t, e);\n };\n\n var c = \"every\" + o;\n\n t.prototype[c] = function (t, e) {\n return !this[a](t, function (t, n) {\n return !e(t, n);\n });\n };\n }(t, e), xt(t, e);\n });\n }(Wt);\n\n var Pt = function (t) {\n function n(e) {\n var n = c({\n type: \"directed\"\n }, e);\n if (\"multi\" in n && !1 !== n.multi) throw new F(\"DirectedGraph.from: inconsistent indication that the graph should be multi in given options!\");\n if (\"directed\" !== n.type) throw new F('DirectedGraph.from: inconsistent \"' + n.type + '\" type in given options!');\n return t.call(this, n) || this;\n }\n\n return e(n, t), n;\n }(Wt),\n Rt = function (t) {\n function n(e) {\n var n = c({\n type: \"undirected\"\n }, e);\n if (\"multi\" in n && !1 !== n.multi) throw new F(\"UndirectedGraph.from: inconsistent indication that the graph should be multi in given options!\");\n if (\"undirected\" !== n.type) throw new F('UndirectedGraph.from: inconsistent \"' + n.type + '\" type in given options!');\n return t.call(this, n) || this;\n }\n\n return e(n, t), n;\n }(Wt),\n Kt = function (t) {\n function n(e) {\n var n = c({\n multi: !0\n }, e);\n if (\"multi\" in n && !0 !== n.multi) throw new F(\"MultiGraph.from: inconsistent indication that the graph should be simple in given options!\");\n return t.call(this, n) || this;\n }\n\n return e(n, t), n;\n }(Wt),\n Tt = function (t) {\n function n(e) {\n var n = c({\n type: \"directed\",\n multi: !0\n }, e);\n if (\"multi\" in n && !0 !== n.multi) throw new F(\"MultiDirectedGraph.from: inconsistent indication that the graph should be simple in given options!\");\n if (\"directed\" !== n.type) throw new F('MultiDirectedGraph.from: inconsistent \"' + n.type + '\" type in given options!');\n return t.call(this, n) || this;\n }\n\n return e(n, t), n;\n }(Wt),\n Bt = function (t) {\n function n(e) {\n var n = c({\n type: \"undirected\",\n multi: !0\n }, e);\n if (\"multi\" in n && !0 !== n.multi) throw new F(\"MultiUndirectedGraph.from: inconsistent indication that the graph should be simple in given options!\");\n if (\"undirected\" !== n.type) throw new F('MultiUndirectedGraph.from: inconsistent \"' + n.type + '\" type in given options!');\n return t.call(this, n) || this;\n }\n\n return e(n, t), n;\n }(Wt);\n\n function Ft(t) {\n t.from = function (e, n) {\n var r = c({}, e.options, n),\n i = new t(r);\n return i.import(e), i;\n };\n }\n\n return Ft(Wt), Ft(Pt), Ft(Rt), Ft(Kt), Ft(Tt), Ft(Bt), Wt.Graph = Wt, Wt.DirectedGraph = Pt, Wt.UndirectedGraph = Rt, Wt.MultiGraph = Kt, Wt.MultiDirectedGraph = Tt, Wt.MultiUndirectedGraph = Bt, Wt.InvalidArgumentsGraphError = F, Wt.NotFoundGraphError = I, Wt.UsageGraphError = Y, Wt;\n});","/**\n * Graphology ForceAtlas2 Layout Supervisor\n * =========================================\n *\n * Supervisor class able to spawn a web worker to run the FA2 layout in a\n * separate thread not to block UI with heavy synchronous computations.\n */\nvar workerFunction = require('./webworker.js'),\n isGraph = require('graphology-utils/is-graph'),\n helpers = require('./helpers.js');\n\nvar DEFAULT_SETTINGS = require('./defaults.js');\n/**\n * Class representing a FA2 layout run by a webworker.\n *\n * @constructor\n * @param {Graph} graph - Target graph.\n * @param {object|number} params - Parameters:\n * @param {object} [settings] - Settings.\n */\n\n\nfunction FA2LayoutSupervisor(graph, params) {\n params = params || {}; // Validation\n\n if (!isGraph(graph)) throw new Error('graphology-layout-forceatlas2/worker: the given graph is not a valid graphology instance.');\n var attributes = params.attributes || {};\n var weightAttribute = params.weighted ? attributes.weight || 'weight' : null; // Validating settings\n\n var settings = helpers.assign({}, DEFAULT_SETTINGS, params.settings);\n var validationError = helpers.validateSettings(settings);\n if (validationError) throw new Error('graphology-layout-forceatlas2/worker: ' + validationError.message); // Properties\n\n this.worker = null;\n this.graph = graph;\n this.settings = settings;\n this.weightAttribute = weightAttribute;\n this.matrices = null;\n this.running = false;\n this.killed = false;\n this.outputReducer = typeof params.outputReducer === 'function' ? params.outputReducer : null; // Binding listeners\n\n this.handleMessage = this.handleMessage.bind(this);\n var respawnFrame = undefined;\n var self = this;\n\n this.handleGraphUpdate = function () {\n if (self.worker) self.worker.terminate();\n if (respawnFrame) clearTimeout(respawnFrame);\n respawnFrame = setTimeout(function () {\n respawnFrame = undefined;\n self.spawnWorker();\n }, 0);\n };\n\n graph.on('nodeAdded', this.handleGraphUpdate);\n graph.on('edgeAdded', this.handleGraphUpdate);\n graph.on('nodeDropped', this.handleGraphUpdate);\n graph.on('edgeDropped', this.handleGraphUpdate); // Spawning worker\n\n this.spawnWorker();\n}\n\nFA2LayoutSupervisor.prototype.isRunning = function () {\n return this.running;\n};\n/**\n * Internal method used to spawn the web worker.\n */\n\n\nFA2LayoutSupervisor.prototype.spawnWorker = function () {\n if (this.worker) this.worker.terminate();\n this.worker = helpers.createWorker(workerFunction);\n this.worker.addEventListener('message', this.handleMessage);\n\n if (this.running) {\n this.running = false;\n this.start();\n }\n};\n/**\n * Internal method used to handle the worker's messages.\n *\n * @param {object} event - Event to handle.\n */\n\n\nFA2LayoutSupervisor.prototype.handleMessage = function (event) {\n if (!this.running) return;\n var matrix = new Float32Array(event.data.nodes);\n helpers.assignLayoutChanges(this.graph, matrix, this.outputReducer);\n if (this.outputReducer) helpers.readGraphPositions(this.graph, matrix);\n this.matrices.nodes = matrix; // Looping\n\n this.askForIterations();\n};\n/**\n * Internal method used to ask for iterations from the worker.\n *\n * @param {boolean} withEdges - Should we send edges along?\n * @return {FA2LayoutSupervisor}\n */\n\n\nFA2LayoutSupervisor.prototype.askForIterations = function (withEdges) {\n var matrices = this.matrices;\n var payload = {\n settings: this.settings,\n nodes: matrices.nodes.buffer\n };\n var buffers = [matrices.nodes.buffer];\n\n if (withEdges) {\n payload.edges = matrices.edges.buffer;\n buffers.push(matrices.edges.buffer);\n }\n\n this.worker.postMessage(payload, buffers);\n return this;\n};\n/**\n * Method used to start the layout.\n *\n * @return {FA2LayoutSupervisor}\n */\n\n\nFA2LayoutSupervisor.prototype.start = function () {\n if (this.killed) throw new Error('graphology-layout-forceatlas2/worker.start: layout was killed.');\n if (this.running) return this; // Building matrices\n\n this.matrices = helpers.graphToByteArrays(this.graph, this.weightAttribute);\n this.running = true;\n this.askForIterations(true);\n return this;\n};\n/**\n * Method used to stop the layout.\n *\n * @return {FA2LayoutSupervisor}\n */\n\n\nFA2LayoutSupervisor.prototype.stop = function () {\n this.running = false;\n return this;\n};\n/**\n * Method used to kill the layout.\n *\n * @return {FA2LayoutSupervisor}\n */\n\n\nFA2LayoutSupervisor.prototype.kill = function () {\n if (this.killed) return this;\n this.running = false;\n this.killed = true; // Clearing memory\n\n this.matrices = null; // Terminating worker\n\n this.worker.terminate(); // Unbinding listeners\n\n this.graph.removeListener('nodeAdded', this.handleGraphUpdate);\n this.graph.removeListener('edgeAdded', this.handleGraphUpdate);\n this.graph.removeListener('nodeDropped', this.handleGraphUpdate);\n this.graph.removeListener('edgeDropped', this.handleGraphUpdate);\n};\n/**\n * Exporting.\n */\n\n\nmodule.exports = FA2LayoutSupervisor;","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TypedEventEmitter = void 0;\n/**\n * Sigma.js Types\n * ===============\n *\n * Various type declarations used throughout the library.\n * @module\n */\n\nvar events_1 = require(\"events\");\n\nvar TypedEventEmitter =\n/** @class */\nfunction (_super) {\n __extends(TypedEventEmitter, _super);\n\n function TypedEventEmitter() {\n var _this = _super.call(this) || this;\n\n _this.rawEmitter = _this;\n return _this;\n }\n\n return TypedEventEmitter;\n}(events_1.EventEmitter);\n\nexports.TypedEventEmitter = TypedEventEmitter;","/**\n * Mnemonist Typed Array Helpers\n * ==============================\n *\n * Miscellaneous helpers related to typed arrays.\n */\n\n/**\n * When using an unsigned integer array to store pointers, one might want to\n * choose the optimal word size in regards to the actual numbers of pointers\n * to store.\n *\n * This helpers does just that.\n *\n * @param {number} size - Expected size of the array to map.\n * @return {TypedArray}\n */\nvar MAX_8BIT_INTEGER = Math.pow(2, 8) - 1,\n MAX_16BIT_INTEGER = Math.pow(2, 16) - 1,\n MAX_32BIT_INTEGER = Math.pow(2, 32) - 1;\nvar MAX_SIGNED_8BIT_INTEGER = Math.pow(2, 7) - 1,\n MAX_SIGNED_16BIT_INTEGER = Math.pow(2, 15) - 1,\n MAX_SIGNED_32BIT_INTEGER = Math.pow(2, 31) - 1;\n\nexports.getPointerArray = function (size) {\n var maxIndex = size - 1;\n if (maxIndex <= MAX_8BIT_INTEGER) return Uint8Array;\n if (maxIndex <= MAX_16BIT_INTEGER) return Uint16Array;\n if (maxIndex <= MAX_32BIT_INTEGER) return Uint32Array;\n throw new Error('mnemonist: Pointer Array of size > 4294967295 is not supported.');\n};\n\nexports.getSignedPointerArray = function (size) {\n var maxIndex = size - 1;\n if (maxIndex <= MAX_SIGNED_8BIT_INTEGER) return Int8Array;\n if (maxIndex <= MAX_SIGNED_16BIT_INTEGER) return Int16Array;\n if (maxIndex <= MAX_SIGNED_32BIT_INTEGER) return Int32Array;\n return Float64Array;\n};\n/**\n * Function returning the minimal type able to represent the given number.\n *\n * @param {number} value - Value to test.\n * @return {TypedArrayClass}\n */\n\n\nexports.getNumberType = function (value) {\n // <= 32 bits itnteger?\n if (value === (value | 0)) {\n // Negative\n if (Math.sign(value) === -1) {\n if (value <= 127 && value >= -128) return Int8Array;\n if (value <= 32767 && value >= -32768) return Int16Array;\n return Int32Array;\n } else {\n if (value <= 255) return Uint8Array;\n if (value <= 65535) return Uint16Array;\n return Uint32Array;\n }\n } // 53 bits integer & floats\n // NOTE: it's kinda hard to tell whether we could use 32bits or not...\n\n\n return Float64Array;\n};\n/**\n * Function returning the minimal type able to represent the given array\n * of JavaScript numbers.\n *\n * @param {array} array - Array to represent.\n * @param {function} getter - Optional getter.\n * @return {TypedArrayClass}\n */\n\n\nvar TYPE_PRIORITY = {\n Uint8Array: 1,\n Int8Array: 2,\n Uint16Array: 3,\n Int16Array: 4,\n Uint32Array: 5,\n Int32Array: 6,\n Float32Array: 7,\n Float64Array: 8\n}; // TODO: make this a one-shot for one value\n\nexports.getMinimalRepresentation = function (array, getter) {\n var maxType = null,\n maxPriority = 0,\n p,\n t,\n v,\n i,\n l;\n\n for (i = 0, l = array.length; i < l; i++) {\n v = getter ? getter(array[i]) : array[i];\n t = exports.getNumberType(v);\n p = TYPE_PRIORITY[t.name];\n\n if (p > maxPriority) {\n maxPriority = p;\n maxType = t;\n }\n }\n\n return maxType;\n};\n/**\n * Function returning whether the given value is a typed array.\n *\n * @param {any} value - Value to test.\n * @return {boolean}\n */\n\n\nexports.isTypedArray = function (value) {\n return typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(value);\n};\n/**\n * Function used to concat byte arrays.\n *\n * @param {...ByteArray}\n * @return {ByteArray}\n */\n\n\nexports.concat = function () {\n var length = 0,\n i,\n o,\n l;\n\n for (i = 0, l = arguments.length; i < l; i++) {\n length += arguments[i].length;\n }\n\n var array = new arguments[0].constructor(length);\n\n for (i = 0, o = 0; i < l; i++) {\n array.set(arguments[i], o);\n o += arguments[i].length;\n }\n\n return array;\n};\n/**\n * Function used to initialize a byte array of indices.\n *\n * @param {number} length - Length of target.\n * @return {ByteArray}\n */\n\n\nexports.indices = function (length) {\n var PointerArray = exports.getPointerArray(length);\n var array = new PointerArray(length);\n\n for (var i = 0; i < length; i++) {\n array[i] = i;\n }\n\n return array;\n};","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Sigma.js Camera Class\n * ======================\n *\n * Class designed to store camera information & used to update it.\n * @module\n */\n\nvar animate_1 = require(\"../utils/animate\");\n\nvar easings_1 = __importDefault(require(\"../utils/easings\"));\n\nvar utils_1 = require(\"../utils\");\n\nvar types_1 = require(\"../types\");\n/**\n * Defaults.\n */\n\n\nvar DEFAULT_ZOOMING_RATIO = 1.5;\n/**\n * Camera class\n *\n * @constructor\n */\n\nvar Camera =\n/** @class */\nfunction (_super) {\n __extends(Camera, _super);\n\n function Camera() {\n var _this = _super.call(this) || this;\n\n _this.x = 0.5;\n _this.y = 0.5;\n _this.angle = 0;\n _this.ratio = 1;\n _this.minRatio = null;\n _this.maxRatio = null;\n _this.nextFrame = null;\n _this.previousState = null;\n _this.enabled = true; // State\n\n _this.previousState = _this.getState();\n return _this;\n }\n /**\n * Static method used to create a Camera object with a given state.\n *\n * @param state\n * @return {Camera}\n */\n\n\n Camera.from = function (state) {\n var camera = new Camera();\n return camera.setState(state);\n };\n /**\n * Method used to enable the camera.\n *\n * @return {Camera}\n */\n\n\n Camera.prototype.enable = function () {\n this.enabled = true;\n return this;\n };\n /**\n * Method used to disable the camera.\n *\n * @return {Camera}\n */\n\n\n Camera.prototype.disable = function () {\n this.enabled = false;\n return this;\n };\n /**\n * Method used to retrieve the camera's current state.\n *\n * @return {object}\n */\n\n\n Camera.prototype.getState = function () {\n return {\n x: this.x,\n y: this.y,\n angle: this.angle,\n ratio: this.ratio\n };\n };\n /**\n * Method used to check whether the camera has the given state.\n *\n * @return {object}\n */\n\n\n Camera.prototype.hasState = function (state) {\n return this.x === state.x && this.y === state.y && this.ratio === state.ratio && this.angle === state.angle;\n };\n /**\n * Method used to retrieve the camera's previous state.\n *\n * @return {object}\n */\n\n\n Camera.prototype.getPreviousState = function () {\n var state = this.previousState;\n if (!state) return null;\n return {\n x: state.x,\n y: state.y,\n angle: state.angle,\n ratio: state.ratio\n };\n };\n /**\n * Method used to check minRatio and maxRatio values.\n *\n * @param ratio\n * @return {number}\n */\n\n\n Camera.prototype.getBoundedRatio = function (ratio) {\n var r = ratio;\n if (typeof this.minRatio === \"number\") r = Math.max(r, this.minRatio);\n if (typeof this.maxRatio === \"number\") r = Math.min(r, this.maxRatio);\n return r;\n };\n /**\n * Method used to check various things to return a legit state candidate.\n *\n * @param state\n * @return {object}\n */\n\n\n Camera.prototype.validateState = function (state) {\n var validatedState = {};\n if (typeof state.x === \"number\") validatedState.x = state.x;\n if (typeof state.y === \"number\") validatedState.y = state.y;\n if (typeof state.angle === \"number\") validatedState.angle = state.angle;\n if (typeof state.ratio === \"number\") validatedState.ratio = this.getBoundedRatio(state.ratio);\n return validatedState;\n };\n /**\n * Method used to check whether the camera is currently being animated.\n *\n * @return {boolean}\n */\n\n\n Camera.prototype.isAnimated = function () {\n return !!this.nextFrame;\n };\n /**\n * Method used to set the camera's state.\n *\n * @param {object} state - New state.\n * @return {Camera}\n */\n\n\n Camera.prototype.setState = function (state) {\n if (!this.enabled) return this; // TODO: update by function\n // Keeping track of last state\n\n this.previousState = this.getState();\n var validState = this.validateState(state);\n if (typeof validState.x === \"number\") this.x = validState.x;\n if (typeof validState.y === \"number\") this.y = validState.y;\n if (typeof validState.angle === \"number\") this.angle = validState.angle;\n if (typeof validState.ratio === \"number\") this.ratio = validState.ratio; // Emitting\n\n if (!this.hasState(this.previousState)) this.emit(\"updated\", this.getState());\n return this;\n };\n /**\n * Method used to animate the camera.\n *\n * @param {object} state - State to reach eventually.\n * @param {object} opts - Options:\n * @param {number} duration - Duration of the animation.\n * @param {string | number => number} easing - Easing function or name of an existing one\n * @param {function} callback - Callback\n */\n\n\n Camera.prototype.animate = function (state, opts, callback) {\n var _this = this;\n\n if (!this.enabled) return;\n var options = Object.assign({}, animate_1.ANIMATE_DEFAULTS, opts);\n var validState = this.validateState(state);\n var easing = typeof options.easing === \"function\" ? options.easing : easings_1.default[options.easing]; // State\n\n var start = Date.now(),\n initialState = this.getState(); // Function performing the animation\n\n var fn = function fn() {\n var t = (Date.now() - start) / options.duration; // The animation is over:\n\n if (t >= 1) {\n _this.nextFrame = null;\n\n _this.setState(validState);\n\n if (_this.animationCallback) {\n _this.animationCallback.call(null);\n\n _this.animationCallback = undefined;\n }\n\n return;\n }\n\n var coefficient = easing(t);\n var newState = {};\n if (typeof validState.x === \"number\") newState.x = initialState.x + (validState.x - initialState.x) * coefficient;\n if (typeof validState.y === \"number\") newState.y = initialState.y + (validState.y - initialState.y) * coefficient;\n if (typeof validState.angle === \"number\") newState.angle = initialState.angle + (validState.angle - initialState.angle) * coefficient;\n if (typeof validState.ratio === \"number\") newState.ratio = initialState.ratio + (validState.ratio - initialState.ratio) * coefficient;\n\n _this.setState(newState);\n\n _this.nextFrame = (0, utils_1.requestFrame)(fn);\n };\n\n if (this.nextFrame) {\n (0, utils_1.cancelFrame)(this.nextFrame);\n if (this.animationCallback) this.animationCallback.call(null);\n this.nextFrame = (0, utils_1.requestFrame)(fn);\n } else {\n fn();\n }\n\n this.animationCallback = callback;\n };\n /**\n * Method used to zoom the camera.\n *\n * @param {number|object} factorOrOptions - Factor or options.\n * @return {function}\n */\n\n\n Camera.prototype.animatedZoom = function (factorOrOptions) {\n if (!factorOrOptions) {\n this.animate({\n ratio: this.ratio / DEFAULT_ZOOMING_RATIO\n });\n } else {\n if (typeof factorOrOptions === \"number\") return this.animate({\n ratio: this.ratio / factorOrOptions\n });else this.animate({\n ratio: this.ratio / (factorOrOptions.factor || DEFAULT_ZOOMING_RATIO)\n }, factorOrOptions);\n }\n };\n /**\n * Method used to unzoom the camera.\n *\n * @param {number|object} factorOrOptions - Factor or options.\n */\n\n\n Camera.prototype.animatedUnzoom = function (factorOrOptions) {\n if (!factorOrOptions) {\n this.animate({\n ratio: this.ratio * DEFAULT_ZOOMING_RATIO\n });\n } else {\n if (typeof factorOrOptions === \"number\") return this.animate({\n ratio: this.ratio * factorOrOptions\n });else this.animate({\n ratio: this.ratio * (factorOrOptions.factor || DEFAULT_ZOOMING_RATIO)\n }, factorOrOptions);\n }\n };\n /**\n * Method used to reset the camera.\n *\n * @param {object} options - Options.\n */\n\n\n Camera.prototype.animatedReset = function (options) {\n this.animate({\n x: 0.5,\n y: 0.5,\n ratio: 1,\n angle: 0\n }, options);\n };\n /**\n * Returns a new Camera instance, with the same state as the current camera.\n *\n * @return {Camera}\n */\n\n\n Camera.prototype.copy = function () {\n return Camera.from(this.getState());\n };\n\n return Camera;\n}(types_1.TypedEventEmitter);\n\nexports.default = Camera;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.multiplyVec2 = exports.multiply = exports.translate = exports.rotate = exports.scale = exports.identity = void 0;\n\nfunction identity() {\n return Float32Array.of(1, 0, 0, 0, 1, 0, 0, 0, 1);\n}\n\nexports.identity = identity; // TODO: optimize\n\nfunction scale(m, x, y) {\n m[0] = x;\n m[4] = typeof y === \"number\" ? y : x;\n return m;\n}\n\nexports.scale = scale;\n\nfunction rotate(m, r) {\n var s = Math.sin(r),\n c = Math.cos(r);\n m[0] = c;\n m[1] = s;\n m[3] = -s;\n m[4] = c;\n return m;\n}\n\nexports.rotate = rotate;\n\nfunction translate(m, x, y) {\n m[6] = x;\n m[7] = y;\n return m;\n}\n\nexports.translate = translate;\n\nfunction multiply(a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n a[0] = b00 * a00 + b01 * a10 + b02 * a20;\n a[1] = b00 * a01 + b01 * a11 + b02 * a21;\n a[2] = b00 * a02 + b01 * a12 + b02 * a22;\n a[3] = b10 * a00 + b11 * a10 + b12 * a20;\n a[4] = b10 * a01 + b11 * a11 + b12 * a21;\n a[5] = b10 * a02 + b11 * a12 + b12 * a22;\n a[6] = b20 * a00 + b21 * a10 + b22 * a20;\n a[7] = b20 * a01 + b21 * a11 + b22 * a21;\n a[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return a;\n}\n\nexports.multiply = multiply;\n\nfunction multiplyVec2(a, b, z) {\n if (z === void 0) {\n z = 1;\n }\n\n var a00 = a[0];\n var a01 = a[1];\n var a10 = a[3];\n var a11 = a[4];\n var a20 = a[6];\n var a21 = a[7];\n var b0 = b.x;\n var b1 = b.y;\n return {\n x: b0 * a00 + b1 * a10 + a20 * z,\n y: b0 * a01 + b1 * a11 + a21 * z\n };\n}\n\nexports.multiplyVec2 = multiplyVec2;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cubicInOut = exports.cubicOut = exports.cubicIn = exports.quadraticInOut = exports.quadraticOut = exports.quadraticIn = exports.linear = void 0;\n/**\n * Sigma.js Easings\n * =================\n *\n * Handy collection of easing functions.\n * @module\n */\n\nvar linear = function linear(k) {\n return k;\n};\n\nexports.linear = linear;\n\nvar quadraticIn = function quadraticIn(k) {\n return k * k;\n};\n\nexports.quadraticIn = quadraticIn;\n\nvar quadraticOut = function quadraticOut(k) {\n return k * (2 - k);\n};\n\nexports.quadraticOut = quadraticOut;\n\nvar quadraticInOut = function quadraticInOut(k) {\n if ((k *= 2) < 1) return 0.5 * k * k;\n return -0.5 * (--k * (k - 2) - 1);\n};\n\nexports.quadraticInOut = quadraticInOut;\n\nvar cubicIn = function cubicIn(k) {\n return k * k * k;\n};\n\nexports.cubicIn = cubicIn;\n\nvar cubicOut = function cubicOut(k) {\n return --k * k * k + 1;\n};\n\nexports.cubicOut = cubicOut;\n\nvar cubicInOut = function cubicInOut(k) {\n if ((k *= 2) < 1) return 0.5 * k * k * k;\n return 0.5 * ((k -= 2) * k * k + 2);\n};\n\nexports.cubicInOut = cubicInOut;\nvar easings = {\n linear: exports.linear,\n quadraticIn: exports.quadraticIn,\n quadraticOut: exports.quadraticOut,\n quadraticInOut: exports.quadraticInOut,\n cubicIn: exports.cubicIn,\n cubicOut: exports.cubicOut,\n cubicInOut: exports.cubicInOut\n};\nexports.default = easings;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\n\nvar __importStar = this && this.__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar captor_1 = __importStar(require(\"./captor\"));\n/**\n * Constants.\n */\n\n\nvar DRAG_TIMEOUT = 100;\nvar DRAGGED_EVENTS_TOLERANCE = 3;\nvar MOUSE_INERTIA_DURATION = 200;\nvar MOUSE_INERTIA_RATIO = 3;\nvar MOUSE_ZOOM_DURATION = 250;\nvar ZOOMING_RATIO = 1.7;\nvar DOUBLE_CLICK_TIMEOUT = 300;\nvar DOUBLE_CLICK_ZOOMING_RATIO = 2.2;\nvar DOUBLE_CLICK_ZOOMING_DURATION = 200;\n/**\n * Mouse captor class.\n *\n * @constructor\n */\n\nvar MouseCaptor =\n/** @class */\nfunction (_super) {\n __extends(MouseCaptor, _super);\n\n function MouseCaptor(container, renderer) {\n var _this = _super.call(this, container, renderer) || this; // State\n\n\n _this.enabled = true;\n _this.draggedEvents = 0;\n _this.downStartTime = null;\n _this.lastMouseX = null;\n _this.lastMouseY = null;\n _this.isMouseDown = false;\n _this.isMoving = false;\n _this.movingTimeout = null;\n _this.startCameraState = null;\n _this.clicks = 0;\n _this.doubleClickTimeout = null;\n _this.currentWheelDirection = 0; // Binding methods\n\n _this.handleClick = _this.handleClick.bind(_this);\n _this.handleRightClick = _this.handleRightClick.bind(_this);\n _this.handleDown = _this.handleDown.bind(_this);\n _this.handleUp = _this.handleUp.bind(_this);\n _this.handleMove = _this.handleMove.bind(_this);\n _this.handleWheel = _this.handleWheel.bind(_this);\n _this.handleOut = _this.handleOut.bind(_this); // Binding events\n\n container.addEventListener(\"click\", _this.handleClick, false);\n container.addEventListener(\"contextmenu\", _this.handleRightClick, false);\n container.addEventListener(\"mousedown\", _this.handleDown, false);\n container.addEventListener(\"wheel\", _this.handleWheel, false);\n container.addEventListener(\"mouseout\", _this.handleOut, false);\n document.addEventListener(\"mousemove\", _this.handleMove, false);\n document.addEventListener(\"mouseup\", _this.handleUp, false);\n return _this;\n }\n\n MouseCaptor.prototype.kill = function () {\n var container = this.container;\n container.removeEventListener(\"click\", this.handleClick);\n container.removeEventListener(\"contextmenu\", this.handleRightClick);\n container.removeEventListener(\"mousedown\", this.handleDown);\n container.removeEventListener(\"wheel\", this.handleWheel);\n container.removeEventListener(\"mouseout\", this.handleOut);\n document.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleUp);\n };\n\n MouseCaptor.prototype.handleClick = function (e) {\n var _this = this;\n\n if (!this.enabled) return;\n this.clicks++;\n\n if (this.clicks === 2) {\n this.clicks = 0;\n\n if (typeof this.doubleClickTimeout === \"number\") {\n clearTimeout(this.doubleClickTimeout);\n this.doubleClickTimeout = null;\n }\n\n return this.handleDoubleClick(e);\n }\n\n setTimeout(function () {\n _this.clicks = 0;\n _this.doubleClickTimeout = null;\n }, DOUBLE_CLICK_TIMEOUT); // NOTE: this is here to prevent click events on drag\n\n if (this.draggedEvents < DRAGGED_EVENTS_TOLERANCE) this.emit(\"click\", (0, captor_1.getMouseCoords)(e, this.container));\n };\n\n MouseCaptor.prototype.handleRightClick = function (e) {\n if (!this.enabled) return;\n this.emit(\"rightClick\", (0, captor_1.getMouseCoords)(e, this.container));\n };\n\n MouseCaptor.prototype.handleDoubleClick = function (e) {\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n var mouseCoords = (0, captor_1.getMouseCoords)(e, this.container);\n this.emit(\"doubleClick\", mouseCoords);\n if (mouseCoords.sigmaDefaultPrevented) return; // default behavior\n\n var camera = this.renderer.getCamera();\n var newRatio = camera.getBoundedRatio(camera.getState().ratio / DOUBLE_CLICK_ZOOMING_RATIO);\n camera.animate(this.renderer.getViewportZoomedState((0, captor_1.getPosition)(e, this.container), newRatio), {\n easing: \"quadraticInOut\",\n duration: DOUBLE_CLICK_ZOOMING_DURATION\n });\n };\n\n MouseCaptor.prototype.handleDown = function (e) {\n if (!this.enabled) return;\n this.startCameraState = this.renderer.getCamera().getState();\n\n var _a = (0, captor_1.getPosition)(e, this.container),\n x = _a.x,\n y = _a.y;\n\n this.lastMouseX = x;\n this.lastMouseY = y;\n this.draggedEvents = 0;\n this.downStartTime = Date.now(); // TODO: dispatch events\n // Left button pressed\n\n this.isMouseDown = true;\n this.emit(\"mousedown\", (0, captor_1.getMouseCoords)(e, this.container));\n };\n\n MouseCaptor.prototype.handleUp = function (e) {\n var _this = this;\n\n if (!this.enabled || !this.isMouseDown) return;\n var camera = this.renderer.getCamera();\n this.isMouseDown = false;\n\n if (typeof this.movingTimeout === \"number\") {\n clearTimeout(this.movingTimeout);\n this.movingTimeout = null;\n }\n\n var _a = (0, captor_1.getPosition)(e, this.container),\n x = _a.x,\n y = _a.y;\n\n var cameraState = camera.getState(),\n previousCameraState = camera.getPreviousState() || {\n x: 0,\n y: 0\n };\n\n if (this.isMoving) {\n camera.animate({\n x: cameraState.x + MOUSE_INERTIA_RATIO * (cameraState.x - previousCameraState.x),\n y: cameraState.y + MOUSE_INERTIA_RATIO * (cameraState.y - previousCameraState.y)\n }, {\n duration: MOUSE_INERTIA_DURATION,\n easing: \"quadraticOut\"\n });\n } else if (this.lastMouseX !== x || this.lastMouseY !== y) {\n camera.setState({\n x: cameraState.x,\n y: cameraState.y\n });\n }\n\n this.isMoving = false;\n setTimeout(function () {\n _this.draggedEvents = 0;\n\n _this.renderer.refresh();\n }, 0);\n this.emit(\"mouseup\", (0, captor_1.getMouseCoords)(e, this.container));\n };\n\n MouseCaptor.prototype.handleMove = function (e) {\n var _this = this;\n\n if (!this.enabled) return;\n var mouseCoords = (0, captor_1.getMouseCoords)(e, this.container); // Always trigger a \"mousemovebody\" event, so that it is possible to develop\n // a drag-and-drop effect that works even when the mouse is out of the\n // container:\n\n this.emit(\"mousemovebody\", mouseCoords); // Only trigger the \"mousemove\" event when the mouse is actually hovering\n // the container, to avoid weirdly hovering nodes and/or edges when the\n // mouse is not hover the container:\n\n if (e.target === this.container) {\n this.emit(\"mousemove\", mouseCoords);\n }\n\n if (mouseCoords.sigmaDefaultPrevented) return; // Handle the case when \"isMouseDown\" all the time, to allow dragging the\n // stage while the mouse is not hover the container:\n\n if (this.isMouseDown) {\n this.isMoving = true;\n this.draggedEvents++;\n\n if (typeof this.movingTimeout === \"number\") {\n clearTimeout(this.movingTimeout);\n }\n\n this.movingTimeout = window.setTimeout(function () {\n _this.movingTimeout = null;\n _this.isMoving = false;\n }, DRAG_TIMEOUT);\n var camera = this.renderer.getCamera();\n\n var _a = (0, captor_1.getPosition)(e, this.container),\n eX = _a.x,\n eY = _a.y;\n\n var lastMouse = this.renderer.viewportToFramedGraph({\n x: this.lastMouseX,\n y: this.lastMouseY\n });\n var mouse = this.renderer.viewportToFramedGraph({\n x: eX,\n y: eY\n });\n var offsetX = lastMouse.x - mouse.x,\n offsetY = lastMouse.y - mouse.y;\n var cameraState = camera.getState();\n var x = cameraState.x + offsetX,\n y = cameraState.y + offsetY;\n camera.setState({\n x: x,\n y: y\n });\n this.lastMouseX = eX;\n this.lastMouseY = eY;\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n MouseCaptor.prototype.handleWheel = function (e) {\n var _this = this;\n\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n var delta = (0, captor_1.getWheelDelta)(e);\n if (!delta) return;\n var wheelCoords = (0, captor_1.getWheelCoords)(e, this.container);\n this.emit(\"wheel\", wheelCoords);\n if (wheelCoords.sigmaDefaultPrevented) return; // Default behavior\n\n var ratioDiff = delta > 0 ? 1 / ZOOMING_RATIO : ZOOMING_RATIO;\n var camera = this.renderer.getCamera();\n var newRatio = camera.getBoundedRatio(camera.getState().ratio * ratioDiff);\n var wheelDirection = delta > 0 ? 1 : -1;\n var now = Date.now(); // Cancel events that are too close too each other and in the same direction:\n\n if (this.currentWheelDirection === wheelDirection && this.lastWheelTriggerTime && now - this.lastWheelTriggerTime < MOUSE_ZOOM_DURATION / 5) {\n return;\n }\n\n camera.animate(this.renderer.getViewportZoomedState((0, captor_1.getPosition)(e, this.container), newRatio), {\n easing: \"quadraticOut\",\n duration: MOUSE_ZOOM_DURATION\n }, function () {\n _this.currentWheelDirection = 0;\n });\n this.currentWheelDirection = wheelDirection;\n this.lastWheelTriggerTime = now;\n };\n\n MouseCaptor.prototype.handleOut = function () {// TODO: dispatch event\n };\n\n return MouseCaptor;\n}(captor_1.default);\n\nexports.default = MouseCaptor;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getWheelDelta = exports.getTouchCoords = exports.getTouchesArray = exports.getWheelCoords = exports.getMouseCoords = exports.getPosition = void 0;\n/**\n * Sigma.js Captor Class\n * ======================\n * @module\n */\n\nvar types_1 = require(\"../../types\");\n/**\n * Captor utils functions\n * ======================\n */\n\n/**\n * Extract the local X and Y coordinates from a mouse event or touch object. If\n * a DOM element is given, it uses this element's offset to compute the position\n * (this allows using events that are not bound to the container itself and\n * still have a proper position).\n *\n * @param {event} e - A mouse event or touch object.\n * @param {HTMLElement} dom - A DOM element to compute offset relatively to.\n * @return {number} The local Y value of the mouse.\n */\n\n\nfunction getPosition(e, dom) {\n var bbox = dom.getBoundingClientRect();\n return {\n x: e.clientX - bbox.left,\n y: e.clientY - bbox.top\n };\n}\n\nexports.getPosition = getPosition;\n/**\n * Convert mouse coords to sigma coords.\n *\n * @param {event} e - A mouse event or touch object.\n * @param {HTMLElement} dom - A DOM element to compute offset relatively to.\n * @return {object}\n */\n\nfunction getMouseCoords(e, dom) {\n return __assign(__assign({}, getPosition(e, dom)), {\n sigmaDefaultPrevented: false,\n preventSigmaDefault: function preventSigmaDefault() {\n this.sigmaDefaultPrevented = true;\n },\n original: e\n });\n}\n\nexports.getMouseCoords = getMouseCoords;\n/**\n * Convert mouse wheel event coords to sigma coords.\n *\n * @param {event} e - A wheel mouse event.\n * @param {HTMLElement} dom - A DOM element to compute offset relatively to.\n * @return {object}\n */\n\nfunction getWheelCoords(e, dom) {\n return __assign(__assign({}, getMouseCoords(e, dom)), {\n delta: getWheelDelta(e)\n });\n}\n\nexports.getWheelCoords = getWheelCoords;\nvar MAX_TOUCHES = 2;\n\nfunction getTouchesArray(touches) {\n var arr = [];\n\n for (var i = 0, l = Math.min(touches.length, MAX_TOUCHES); i < l; i++) {\n arr.push(touches[i]);\n }\n\n return arr;\n}\n\nexports.getTouchesArray = getTouchesArray;\n/**\n * Convert touch coords to sigma coords.\n *\n * @param {event} e - A touch event.\n * @param {HTMLElement} dom - A DOM element to compute offset relatively to.\n * @return {object}\n */\n\nfunction getTouchCoords(e, dom) {\n return {\n touches: getTouchesArray(e.touches).map(function (touch) {\n return getPosition(touch, dom);\n }),\n original: e\n };\n}\n\nexports.getTouchCoords = getTouchCoords;\n/**\n * Extract the wheel delta from a mouse event or touch object.\n *\n * @param {event} e - A mouse event or touch object.\n * @return {number} The wheel delta of the mouse.\n */\n\nfunction getWheelDelta(e) {\n // TODO: check those ratios again to ensure a clean Chrome/Firefox compat\n if (typeof e.deltaY !== \"undefined\") return e.deltaY * -3 / 360;\n if (typeof e.detail !== \"undefined\") return e.detail / -9;\n throw new Error(\"Captor: could not extract delta from event.\");\n}\n\nexports.getWheelDelta = getWheelDelta;\n/**\n * Abstract class representing a captor like the user's mouse or touch controls.\n */\n\nvar Captor =\n/** @class */\nfunction (_super) {\n __extends(Captor, _super);\n\n function Captor(container, renderer) {\n var _this = _super.call(this) || this; // Properties\n\n\n _this.container = container;\n _this.renderer = renderer;\n return _this;\n }\n\n return Captor;\n}(types_1.TypedEventEmitter);\n\nexports.default = Captor;","\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.rectangleCollidesWithQuad = exports.squareCollidesWithQuad = exports.getCircumscribedAlignedRectangle = exports.isRectangleAligned = void 0;\n/**\n * Sigma.js Quad Tree Class\n * =========================\n *\n * Class implementing the quad tree data structure used to solve hovers and\n * determine which elements are currently in the scope of the camera so that\n * we don't waste time rendering things the user cannot see anyway.\n * @module\n */\n\n/* eslint no-nested-ternary: 0 */\n\n/* eslint no-constant-condition: 0 */\n\nvar extend_1 = __importDefault(require(\"@yomguithereal/helpers/extend\")); // TODO: should not ask the quadtree when the camera has the whole graph in\n// sight.\n// TODO: a square can be represented as topleft + width, saying for the quad blocks (reduce mem)\n// TODO: jsdoc\n// TODO: be sure we can handle cases overcoming boundaries (because of size) or use a maxed size\n// TODO: filtering unwanted labels beforehand through the filter function\n// NOTE: this is basically a MX-CIF Quadtree at this point\n// NOTE: need to explore R-Trees for edges\n// NOTE: need to explore 2d segment tree for edges\n// NOTE: probably can do faster using spatial hashing\n\n/**\n * Constants.\n *\n * Note that since we are representing a static 4-ary tree, the indices of the\n * quadrants are the following:\n * - TOP_LEFT: 4i + b\n * - TOP_RIGHT: 4i + 2b\n * - BOTTOM_LEFT: 4i + 3b\n * - BOTTOM_RIGHT: 4i + 4b\n */\n\n\nvar BLOCKS = 4,\n MAX_LEVEL = 5;\nvar OUTSIDE_BLOCK = \"outside\";\nvar X_OFFSET = 0,\n Y_OFFSET = 1,\n WIDTH_OFFSET = 2,\n HEIGHT_OFFSET = 3;\nvar TOP_LEFT = 1,\n TOP_RIGHT = 2,\n BOTTOM_LEFT = 3,\n BOTTOM_RIGHT = 4;\nvar hasWarnedTooMuchOutside = false;\n/**\n * Geometry helpers.\n */\n\n/**\n * Function returning whether the given rectangle is axis-aligned.\n *\n * @param {Rectangle} rect\n * @return {boolean}\n */\n\nfunction isRectangleAligned(rect) {\n return rect.x1 === rect.x2 || rect.y1 === rect.y2;\n}\n\nexports.isRectangleAligned = isRectangleAligned;\n/**\n * Function returning the smallest rectangle that contains the given rectangle, and that is aligned with the axis.\n *\n * @param {Rectangle} rect\n * @return {Rectangle}\n */\n\nfunction getCircumscribedAlignedRectangle(rect) {\n var width = Math.sqrt(Math.pow(rect.x2 - rect.x1, 2) + Math.pow(rect.y2 - rect.y1, 2));\n var heightVector = {\n x: (rect.y1 - rect.y2) * rect.height / width,\n y: (rect.x2 - rect.x1) * rect.height / width\n }; // Compute all corners:\n\n var tl = {\n x: rect.x1,\n y: rect.y1\n };\n var tr = {\n x: rect.x2,\n y: rect.y2\n };\n var bl = {\n x: rect.x1 + heightVector.x,\n y: rect.y1 + heightVector.y\n };\n var br = {\n x: rect.x2 + heightVector.x,\n y: rect.y2 + heightVector.y\n };\n var xL = Math.min(tl.x, tr.x, bl.x, br.x);\n var xR = Math.max(tl.x, tr.x, bl.x, br.x);\n var yT = Math.min(tl.y, tr.y, bl.y, br.y);\n var yB = Math.max(tl.y, tr.y, bl.y, br.y);\n return {\n x1: xL,\n y1: yT,\n x2: xR,\n y2: yT,\n height: yB - yT\n };\n}\n\nexports.getCircumscribedAlignedRectangle = getCircumscribedAlignedRectangle;\n/**\n *\n * @param x1\n * @param y1\n * @param w\n * @param qx\n * @param qy\n * @param qw\n * @param qh\n */\n\nfunction squareCollidesWithQuad(x1, y1, w, qx, qy, qw, qh) {\n return x1 < qx + qw && x1 + w > qx && y1 < qy + qh && y1 + w > qy;\n}\n\nexports.squareCollidesWithQuad = squareCollidesWithQuad;\n\nfunction rectangleCollidesWithQuad(x1, y1, w, h, qx, qy, qw, qh) {\n return x1 < qx + qw && x1 + w > qx && y1 < qy + qh && y1 + h > qy;\n}\n\nexports.rectangleCollidesWithQuad = rectangleCollidesWithQuad;\n\nfunction pointIsInQuad(x, y, qx, qy, qw, qh) {\n var xmp = qx + qw / 2,\n ymp = qy + qh / 2,\n top = y < ymp,\n left = x < xmp;\n return top ? left ? TOP_LEFT : TOP_RIGHT : left ? BOTTOM_LEFT : BOTTOM_RIGHT;\n}\n/**\n * Helper functions that are not bound to the class so an external user\n * cannot mess with them.\n */\n\n\nfunction buildQuadrants(maxLevel, data) {\n // [block, level]\n var stack = [0, 0];\n\n while (stack.length) {\n var level = stack.pop(),\n block = stack.pop();\n var topLeftBlock = 4 * block + BLOCKS,\n topRightBlock = 4 * block + 2 * BLOCKS,\n bottomLeftBlock = 4 * block + 3 * BLOCKS,\n bottomRightBlock = 4 * block + 4 * BLOCKS;\n var x = data[block + X_OFFSET],\n y = data[block + Y_OFFSET],\n width = data[block + WIDTH_OFFSET],\n height = data[block + HEIGHT_OFFSET],\n hw = width / 2,\n hh = height / 2;\n data[topLeftBlock + X_OFFSET] = x;\n data[topLeftBlock + Y_OFFSET] = y;\n data[topLeftBlock + WIDTH_OFFSET] = hw;\n data[topLeftBlock + HEIGHT_OFFSET] = hh;\n data[topRightBlock + X_OFFSET] = x + hw;\n data[topRightBlock + Y_OFFSET] = y;\n data[topRightBlock + WIDTH_OFFSET] = hw;\n data[topRightBlock + HEIGHT_OFFSET] = hh;\n data[bottomLeftBlock + X_OFFSET] = x;\n data[bottomLeftBlock + Y_OFFSET] = y + hh;\n data[bottomLeftBlock + WIDTH_OFFSET] = hw;\n data[bottomLeftBlock + HEIGHT_OFFSET] = hh;\n data[bottomRightBlock + X_OFFSET] = x + hw;\n data[bottomRightBlock + Y_OFFSET] = y + hh;\n data[bottomRightBlock + WIDTH_OFFSET] = hw;\n data[bottomRightBlock + HEIGHT_OFFSET] = hh;\n\n if (level < maxLevel - 1) {\n stack.push(bottomRightBlock, level + 1);\n stack.push(bottomLeftBlock, level + 1);\n stack.push(topRightBlock, level + 1);\n stack.push(topLeftBlock, level + 1);\n }\n }\n}\n\nfunction insertNode(maxLevel, data, containers, key, x, y, size) {\n var x1 = x - size,\n y1 = y - size,\n w = size * 2;\n var level = 0,\n block = 0;\n\n while (true) {\n // If we reached max level\n if (level >= maxLevel) {\n containers[block] = containers[block] || [];\n containers[block].push(key);\n return;\n }\n\n var topLeftBlock = 4 * block + BLOCKS,\n topRightBlock = 4 * block + 2 * BLOCKS,\n bottomLeftBlock = 4 * block + 3 * BLOCKS,\n bottomRightBlock = 4 * block + 4 * BLOCKS;\n var collidingWithTopLeft = squareCollidesWithQuad(x1, y1, w, data[topLeftBlock + X_OFFSET], data[topLeftBlock + Y_OFFSET], data[topLeftBlock + WIDTH_OFFSET], data[topLeftBlock + HEIGHT_OFFSET]);\n var collidingWithTopRight = squareCollidesWithQuad(x1, y1, w, data[topRightBlock + X_OFFSET], data[topRightBlock + Y_OFFSET], data[topRightBlock + WIDTH_OFFSET], data[topRightBlock + HEIGHT_OFFSET]);\n var collidingWithBottomLeft = squareCollidesWithQuad(x1, y1, w, data[bottomLeftBlock + X_OFFSET], data[bottomLeftBlock + Y_OFFSET], data[bottomLeftBlock + WIDTH_OFFSET], data[bottomLeftBlock + HEIGHT_OFFSET]);\n var collidingWithBottomRight = squareCollidesWithQuad(x1, y1, w, data[bottomRightBlock + X_OFFSET], data[bottomRightBlock + Y_OFFSET], data[bottomRightBlock + WIDTH_OFFSET], data[bottomRightBlock + HEIGHT_OFFSET]);\n var collisions = [collidingWithTopLeft, collidingWithTopRight, collidingWithBottomLeft, collidingWithBottomRight].reduce(function (acc, current) {\n if (current) return acc + 1;else return acc;\n }, 0); // If we have no collision at root level, inject node in the outside block\n\n if (collisions === 0 && level === 0) {\n containers[OUTSIDE_BLOCK].push(key);\n\n if (!hasWarnedTooMuchOutside && containers[OUTSIDE_BLOCK].length >= 5) {\n hasWarnedTooMuchOutside = true;\n console.warn(\"sigma/quadtree.insertNode: At least 5 nodes are outside the global quadtree zone. \" + \"You might have a problem with the normalization function or the custom bounding box.\");\n }\n\n return;\n } // If we don't have at least a collision but deeper, there is an issue\n\n\n if (collisions === 0) throw new Error(\"sigma/quadtree.insertNode: no collision (level: \".concat(level, \", key: \").concat(key, \", x: \").concat(x, \", y: \").concat(y, \", size: \").concat(size, \").\")); // If we have 3 collisions, we have a geometry problem obviously\n\n if (collisions === 3) throw new Error(\"sigma/quadtree.insertNode: 3 impossible collisions (level: \".concat(level, \", key: \").concat(key, \", x: \").concat(x, \", y: \").concat(y, \", size: \").concat(size, \").\")); // If we have more that one collision, we stop here and store the node\n // in the relevant containers\n\n if (collisions > 1) {\n containers[block] = containers[block] || [];\n containers[block].push(key);\n return;\n } else {\n level++;\n } // Else we recurse into the correct quads\n\n\n if (collidingWithTopLeft) block = topLeftBlock;\n if (collidingWithTopRight) block = topRightBlock;\n if (collidingWithBottomLeft) block = bottomLeftBlock;\n if (collidingWithBottomRight) block = bottomRightBlock;\n }\n}\n\nfunction getNodesInAxisAlignedRectangleArea(maxLevel, data, containers, x1, y1, w, h) {\n // [block, level]\n var stack = [0, 0];\n var collectedNodes = [];\n var container;\n\n while (stack.length) {\n var level = stack.pop(),\n block = stack.pop(); // Collecting nodes\n\n container = containers[block];\n if (container) (0, extend_1.default)(collectedNodes, container); // If we reached max level\n\n if (level >= maxLevel) continue;\n var topLeftBlock = 4 * block + BLOCKS,\n topRightBlock = 4 * block + 2 * BLOCKS,\n bottomLeftBlock = 4 * block + 3 * BLOCKS,\n bottomRightBlock = 4 * block + 4 * BLOCKS;\n var collidingWithTopLeft = rectangleCollidesWithQuad(x1, y1, w, h, data[topLeftBlock + X_OFFSET], data[topLeftBlock + Y_OFFSET], data[topLeftBlock + WIDTH_OFFSET], data[topLeftBlock + HEIGHT_OFFSET]);\n var collidingWithTopRight = rectangleCollidesWithQuad(x1, y1, w, h, data[topRightBlock + X_OFFSET], data[topRightBlock + Y_OFFSET], data[topRightBlock + WIDTH_OFFSET], data[topRightBlock + HEIGHT_OFFSET]);\n var collidingWithBottomLeft = rectangleCollidesWithQuad(x1, y1, w, h, data[bottomLeftBlock + X_OFFSET], data[bottomLeftBlock + Y_OFFSET], data[bottomLeftBlock + WIDTH_OFFSET], data[bottomLeftBlock + HEIGHT_OFFSET]);\n var collidingWithBottomRight = rectangleCollidesWithQuad(x1, y1, w, h, data[bottomRightBlock + X_OFFSET], data[bottomRightBlock + Y_OFFSET], data[bottomRightBlock + WIDTH_OFFSET], data[bottomRightBlock + HEIGHT_OFFSET]);\n if (collidingWithTopLeft) stack.push(topLeftBlock, level + 1);\n if (collidingWithTopRight) stack.push(topRightBlock, level + 1);\n if (collidingWithBottomLeft) stack.push(bottomLeftBlock, level + 1);\n if (collidingWithBottomRight) stack.push(bottomRightBlock, level + 1);\n }\n\n return collectedNodes;\n}\n/**\n * QuadTree class.\n *\n * @constructor\n * @param {object} boundaries - The graph boundaries.\n */\n\n\nvar QuadTree =\n/** @class */\nfunction () {\n function QuadTree(params) {\n var _a;\n\n if (params === void 0) {\n params = {};\n }\n\n this.containers = (_a = {}, _a[OUTSIDE_BLOCK] = [], _a);\n this.cache = null;\n this.lastRectangle = null; // Allocating the underlying byte array\n\n var L = Math.pow(4, MAX_LEVEL);\n this.data = new Float32Array(BLOCKS * ((4 * L - 1) / 3));\n if (params.boundaries) this.resize(params.boundaries);else this.resize({\n x: 0,\n y: 0,\n width: 1,\n height: 1\n });\n }\n\n QuadTree.prototype.add = function (key, x, y, size) {\n insertNode(MAX_LEVEL, this.data, this.containers, key, x, y, size);\n return this;\n };\n\n QuadTree.prototype.resize = function (boundaries) {\n this.clear(); // Building the quadrants\n\n this.data[X_OFFSET] = boundaries.x;\n this.data[Y_OFFSET] = boundaries.y;\n this.data[WIDTH_OFFSET] = boundaries.width;\n this.data[HEIGHT_OFFSET] = boundaries.height;\n buildQuadrants(MAX_LEVEL, this.data);\n };\n\n QuadTree.prototype.clear = function () {\n var _a;\n\n this.containers = (_a = {}, _a[OUTSIDE_BLOCK] = [], _a);\n return this;\n };\n\n QuadTree.prototype.point = function (x, y) {\n var nodes = this.containers[OUTSIDE_BLOCK];\n var block = 0,\n level = 0;\n\n do {\n if (this.containers[block]) nodes.push.apply(nodes, __spreadArray([], __read(this.containers[block]), false));\n var quad = pointIsInQuad(x, y, this.data[block + X_OFFSET], this.data[block + Y_OFFSET], this.data[block + WIDTH_OFFSET], this.data[block + HEIGHT_OFFSET]);\n block = 4 * block + quad * BLOCKS;\n level++;\n } while (level <= MAX_LEVEL);\n\n return nodes;\n };\n\n QuadTree.prototype.rectangle = function (x1, y1, x2, y2, height) {\n var _a;\n\n var lr = this.lastRectangle;\n\n if (lr && x1 === lr.x1 && x2 === lr.x2 && y1 === lr.y1 && y2 === lr.y2 && height === lr.height) {\n return this.cache;\n }\n\n this.lastRectangle = {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n height: height\n }; // If the rectangle is shifted, we use the smallest aligned rectangle that contains the shifted one:\n\n if (!isRectangleAligned(this.lastRectangle)) this.lastRectangle = getCircumscribedAlignedRectangle(this.lastRectangle);\n this.cache = getNodesInAxisAlignedRectangleArea(MAX_LEVEL, this.data, this.containers, x1, y1, Math.abs(x1 - x2) || Math.abs(y1 - y2), height); // Add all the nodes in the outside block, since they might be relevant, and since they should be very few:\n\n (_a = this.cache).push.apply(_a, __spreadArray([], __read(this.containers[OUTSIDE_BLOCK]), false));\n\n return this.cache;\n };\n\n return QuadTree;\n}();\n\nexports.default = QuadTree;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction drawLabel(context, data, settings) {\n if (!data.label) return;\n var size = settings.labelSize,\n font = settings.labelFont,\n weight = settings.labelWeight,\n color = settings.labelColor.attribute ? data[settings.labelColor.attribute] || settings.labelColor.color || \"#000\" : settings.labelColor.color;\n context.fillStyle = color;\n context.font = \"\".concat(weight, \" \").concat(size, \"px \").concat(font);\n context.fillText(data.label, data.x + data.size + 3, data.y + size / 3);\n}\n\nexports.default = drawLabel;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AbstractProgram = void 0;\n/**\n * Sigma.js WebGL Renderer Program\n * ================================\n *\n * Class representing a single WebGL program used by sigma's WebGL renderer.\n * @module\n */\n\nvar utils_1 = require(\"../../shaders/utils\");\n/**\n * Abstract Program class.\n *\n * @constructor\n */\n\n\nvar AbstractProgram =\n/** @class */\nfunction () {\n function AbstractProgram(gl, vertexShaderSource, fragmentShaderSource, points, attributes) {\n this.array = new Float32Array();\n this.points = points;\n this.attributes = attributes;\n this.gl = gl;\n this.vertexShaderSource = vertexShaderSource;\n this.fragmentShaderSource = fragmentShaderSource;\n var buffer = gl.createBuffer();\n if (buffer === null) throw new Error(\"AbstractProgram: error while creating the buffer\");\n this.buffer = buffer;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\n this.vertexShader = (0, utils_1.loadVertexShader)(gl, this.vertexShaderSource);\n this.fragmentShader = (0, utils_1.loadFragmentShader)(gl, this.fragmentShaderSource);\n this.program = (0, utils_1.loadProgram)(gl, [this.vertexShader, this.fragmentShader]);\n }\n\n AbstractProgram.prototype.bufferData = function () {\n var gl = this.gl;\n gl.bufferData(gl.ARRAY_BUFFER, this.array, gl.DYNAMIC_DRAW);\n };\n\n AbstractProgram.prototype.allocate = function (capacity) {\n this.array = new Float32Array(this.points * this.attributes * capacity);\n };\n\n AbstractProgram.prototype.hasNothingToRender = function () {\n return this.array.length === 0;\n };\n\n return AbstractProgram;\n}();\n\nexports.AbstractProgram = AbstractProgram;","(function () {\n \"use strict\";\n\n var e = {\n d: function d(n, t) {\n for (var o in t) {\n e.o(t, o) && !e.o(n, o) && Object.defineProperty(n, o, {\n enumerable: !0,\n get: t[o]\n });\n }\n },\n o: function o(e, n) {\n return Object.prototype.hasOwnProperty.call(e, n);\n },\n r: function r(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }\n },\n n = {};\n e.r(n), e.d(n, {\n default: function _default() {\n return t;\n }\n });\n var t = \"precision mediump float;\\n\\nvarying vec4 v_color;\\nvarying vec2 v_normal;\\nvarying float v_thickness;\\n\\nconst float feather = 0.001;\\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\\n\\nvoid main(void) {\\n float dist = length(v_normal) * v_thickness;\\n\\n float t = smoothstep(\\n v_thickness - feather,\\n v_thickness,\\n dist\\n );\\n\\n gl_FragColor = mix(v_color, transparent, t);\\n}\\n\";\n module.exports = n;\n})();","/**\n * Graphology ForceAtlas2 Helpers\n * ===============================\n *\n * Miscellaneous helper functions.\n */\n\n/**\n * Constants.\n */\nvar PPN = 10;\nvar PPE = 3;\n/**\n * Very simple Object.assign-like function.\n *\n * @param {object} target - First object.\n * @param {object} [...objects] - Objects to merge.\n * @return {object}\n */\n\nexports.assign = function (target) {\n target = target || {};\n var objects = Array.prototype.slice.call(arguments).slice(1),\n i,\n k,\n l;\n\n for (i = 0, l = objects.length; i < l; i++) {\n if (!objects[i]) continue;\n\n for (k in objects[i]) {\n target[k] = objects[i][k];\n }\n }\n\n return target;\n};\n/**\n * Function used to validate the given settings.\n *\n * @param {object} settings - Settings to validate.\n * @return {object|null}\n */\n\n\nexports.validateSettings = function (settings) {\n if ('linLogMode' in settings && typeof settings.linLogMode !== 'boolean') return {\n message: 'the `linLogMode` setting should be a boolean.'\n };\n if ('outboundAttractionDistribution' in settings && typeof settings.outboundAttractionDistribution !== 'boolean') return {\n message: 'the `outboundAttractionDistribution` setting should be a boolean.'\n };\n if ('adjustSizes' in settings && typeof settings.adjustSizes !== 'boolean') return {\n message: 'the `adjustSizes` setting should be a boolean.'\n };\n if ('edgeWeightInfluence' in settings && typeof settings.edgeWeightInfluence !== 'number') return {\n message: 'the `edgeWeightInfluence` setting should be a number.'\n };\n if ('scalingRatio' in settings && !(typeof settings.scalingRatio === 'number' && settings.scalingRatio >= 0)) return {\n message: 'the `scalingRatio` setting should be a number >= 0.'\n };\n if ('strongGravityMode' in settings && typeof settings.strongGravityMode !== 'boolean') return {\n message: 'the `strongGravityMode` setting should be a boolean.'\n };\n if ('gravity' in settings && !(typeof settings.gravity === 'number' && settings.gravity >= 0)) return {\n message: 'the `gravity` setting should be a number >= 0.'\n };\n if ('slowDown' in settings && !(typeof settings.slowDown === 'number' || settings.slowDown >= 0)) return {\n message: 'the `slowDown` setting should be a number >= 0.'\n };\n if ('barnesHutOptimize' in settings && typeof settings.barnesHutOptimize !== 'boolean') return {\n message: 'the `barnesHutOptimize` setting should be a boolean.'\n };\n if ('barnesHutTheta' in settings && !(typeof settings.barnesHutTheta === 'number' && settings.barnesHutTheta >= 0)) return {\n message: 'the `barnesHutTheta` setting should be a number >= 0.'\n };\n return null;\n};\n/**\n * Function generating a flat matrix for both nodes & edges of the given graph.\n *\n * @param {Graph} graph - Target graph.\n * @param {string|null} weightAttribute - Name of the edge weight attribute.\n * @return {object} - Both matrices.\n */\n\n\nexports.graphToByteArrays = function (graph, weightAttribute) {\n var order = graph.order;\n var size = graph.size;\n var index = {};\n var j;\n var NodeMatrix = new Float32Array(order * PPN);\n var EdgeMatrix = new Float32Array(size * PPE); // Iterate through nodes\n\n j = 0;\n graph.forEachNode(function (node, attr) {\n // Node index\n index[node] = j; // Populating byte array\n\n NodeMatrix[j] = attr.x;\n NodeMatrix[j + 1] = attr.y;\n NodeMatrix[j + 2] = 0;\n NodeMatrix[j + 3] = 0;\n NodeMatrix[j + 4] = 0;\n NodeMatrix[j + 5] = 0;\n NodeMatrix[j + 6] = 1 + graph.degree(node);\n NodeMatrix[j + 7] = 1;\n NodeMatrix[j + 8] = attr.size || 1;\n NodeMatrix[j + 9] = attr.fixed ? 1 : 0;\n j += PPN;\n }); // Iterate through edges\n\n var weightGetter = function weightGetter(attr) {\n if (!weightAttribute) return 1;\n var w = attr[weightAttribute];\n if (typeof w !== 'number' || isNaN(w)) w = 1;\n return w;\n };\n\n j = 0;\n graph.forEachEdge(function (_, attr, source, target) {\n // Populating byte array\n EdgeMatrix[j] = index[source];\n EdgeMatrix[j + 1] = index[target];\n EdgeMatrix[j + 2] = weightGetter(attr);\n j += PPE;\n });\n return {\n nodes: NodeMatrix,\n edges: EdgeMatrix\n };\n};\n/**\n * Function applying the layout back to the graph.\n *\n * @param {Graph} graph - Target graph.\n * @param {Float32Array} NodeMatrix - Node matrix.\n * @param {function|null} outputReducer - A node reducer.\n */\n\n\nexports.assignLayoutChanges = function (graph, NodeMatrix, outputReducer) {\n var i = 0;\n graph.updateEachNodeAttributes(function (node, attr) {\n attr.x = NodeMatrix[i];\n attr.y = NodeMatrix[i + 1];\n i += PPN;\n return outputReducer ? outputReducer(node, attr) : attr;\n });\n};\n/**\n * Function reading the positions (only) from the graph, to write them in the matrix.\n *\n * @param {Graph} graph - Target graph.\n * @param {Float32Array} NodeMatrix - Node matrix.\n */\n\n\nexports.readGraphPositions = function (graph, NodeMatrix) {\n var i = 0;\n graph.forEachNode(function (node, attr) {\n NodeMatrix[i] = attr.x;\n NodeMatrix[i + 1] = attr.y;\n i += PPN;\n });\n};\n/**\n * Function collecting the layout positions.\n *\n * @param {Graph} graph - Target graph.\n * @param {Float32Array} NodeMatrix - Node matrix.\n * @param {function|null} outputReducer - A nodes reducer.\n * @return {object} - Map to node positions.\n */\n\n\nexports.collectLayoutChanges = function (graph, NodeMatrix, outputReducer) {\n var nodes = graph.nodes(),\n positions = {};\n\n for (var i = 0, j = 0, l = NodeMatrix.length; i < l; i += PPN) {\n if (outputReducer) {\n var newAttr = Object.assign({}, graph.getNodeAttributes(nodes[j]));\n newAttr.x = NodeMatrix[i];\n newAttr.y = NodeMatrix[i + 1];\n newAttr = outputReducer(nodes[j], newAttr);\n positions[nodes[j]] = {\n x: newAttr.x,\n y: newAttr.y\n };\n } else {\n positions[nodes[j]] = {\n x: NodeMatrix[i],\n y: NodeMatrix[i + 1]\n };\n }\n\n j++;\n }\n\n return positions;\n};\n/**\n * Function returning a web worker from the given function.\n *\n * @param {function} fn - Function for the worker.\n * @return {DOMString}\n */\n\n\nexports.createWorker = function createWorker(fn) {\n var xURL = window.URL || window.webkitURL;\n var code = fn.toString();\n var objectUrl = xURL.createObjectURL(new Blob(['(' + code + ').call(this);'], {\n type: 'text/javascript'\n }));\n var worker = new Worker(objectUrl);\n xURL.revokeObjectURL(objectUrl);\n return worker;\n};","/**\n * Graphology ForceAtlas2 Layout Default Settings\n * ===============================================\n */\nmodule.exports = {\n linLogMode: false,\n outboundAttractionDistribution: false,\n adjustSizes: false,\n edgeWeightInfluence: 1,\n scalingRatio: 1,\n strongGravityMode: false,\n gravity: 1,\n slowDown: 1,\n barnesHutOptimize: false,\n barnesHutTheta: 0.5\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Graphology Defaults\n * ====================\n *\n * Helper function used throughout the standard lib to resolve defaults.\n */\nfunction isLeaf(o) {\n return !o || _typeof(o) !== 'object' || typeof o === 'function' || Array.isArray(o) || o instanceof Set || o instanceof Map || o instanceof RegExp || o instanceof Date;\n}\n\nfunction resolveDefaults(target, defaults) {\n target = target || {};\n var output = {};\n\n for (var k in defaults) {\n var existing = target[k];\n var def = defaults[k]; // Recursion\n\n if (!isLeaf(def)) {\n output[k] = resolveDefaults(existing, def);\n continue;\n } // Leaf\n\n\n if (existing === undefined) {\n output[k] = def;\n } else {\n output[k] = existing;\n }\n }\n\n return output;\n}\n\nmodule.exports = resolveDefaults;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Obliterator Iterator Class\n * ===========================\n *\n * Simple class representing the library's iterators.\n */\n\n/**\n * Iterator class.\n *\n * @constructor\n * @param {function} next - Next function.\n */\nfunction Iterator(next) {\n if (typeof next !== 'function') throw new Error('obliterator/iterator: expecting a function!');\n this.next = next;\n}\n/**\n * If symbols are supported, we add `next` to `Symbol.iterator`.\n */\n\n\nif (typeof Symbol !== 'undefined') Iterator.prototype[Symbol.iterator] = function () {\n return this;\n};\n/**\n * Returning an iterator of the given values.\n *\n * @param {any...} values - Values.\n * @return {Iterator}\n */\n\nIterator.of = function () {\n var args = arguments,\n l = args.length,\n i = 0;\n return new Iterator(function () {\n if (i >= l) return {\n done: true\n };\n return {\n done: false,\n value: args[i++]\n };\n });\n};\n/**\n * Returning an empty iterator.\n *\n * @return {Iterator}\n */\n\n\nIterator.empty = function () {\n var iterator = new Iterator(function () {\n return {\n done: true\n };\n });\n return iterator;\n};\n/**\n * Returning an iterator over the given indexed sequence.\n *\n * @param {string|Array} sequence - Target sequence.\n * @return {Iterator}\n */\n\n\nIterator.fromSequence = function (sequence) {\n var i = 0,\n l = sequence.length;\n return new Iterator(function () {\n if (i >= l) return {\n done: true\n };\n return {\n done: false,\n value: sequence[i++]\n };\n });\n};\n/**\n * Returning whether the given value is an iterator.\n *\n * @param {any} value - Value.\n * @return {boolean}\n */\n\n\nIterator.is = function (value) {\n if (value instanceof Iterator) return true;\n return _typeof(value) === 'object' && value !== null && typeof value.next === 'function';\n};\n/**\n * Exporting.\n */\n\n\nmodule.exports = Iterator;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form:not([data-turbo=true])',\n formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","/**\n * Graphology Louvain Algorithm\n * =============================\n *\n * JavaScript implementation of the famous Louvain community detection\n * algorithm for graphology.\n *\n * [Articles]\n * M. E. J. Newman, « Modularity and community structure in networks »,\n * Proc. Natl. Acad. Sci. USA, vol. 103, no 23, 2006, p. 8577–8582\n * https://dx.doi.org/10.1073%2Fpnas.0601602103\n *\n * Newman, M. E. J. « Community detection in networks: Modularity optimization\n * and maximum likelihood are equivalent ». Physical Review E, vol. 94, no 5,\n * novembre 2016, p. 052315. arXiv.org, doi:10.1103/PhysRevE.94.052315.\n * https://arxiv.org/pdf/1606.02319.pdf\n *\n * Blondel, Vincent D., et al. « Fast unfolding of communities in large\n * networks ». Journal of Statistical Mechanics: Theory and Experiment,\n * vol. 2008, no 10, octobre 2008, p. P10008. DOI.org (Crossref),\n * doi:10.1088/1742-5468/2008/10/P10008.\n * https://arxiv.org/pdf/0803.0476.pdf\n *\n * Nicolas Dugué, Anthony Perez. Directed Louvain: maximizing modularity in\n * directed networks. [Research Report] Université d’Orléans. 2015. hal-01231784\n * https://hal.archives-ouvertes.fr/hal-01231784\n *\n * R. Lambiotte, J.-C. Delvenne and M. Barahona. Laplacian Dynamics and\n * Multiscale Modular Structure in Networks,\n * doi:10.1109/TNSE.2015.2391998.\n * https://arxiv.org/abs/0812.1770\n *\n * Traag, V. A., et al. « From Louvain to Leiden: Guaranteeing Well-Connected\n * Communities ». Scientific Reports, vol. 9, no 1, décembre 2019, p. 5233.\n * DOI.org (Crossref), doi:10.1038/s41598-019-41695-z.\n * https://arxiv.org/abs/1810.08473\n */\nvar resolveDefaults = require('graphology-utils/defaults');\n\nvar isGraph = require('graphology-utils/is-graph');\n\nvar inferType = require('graphology-utils/infer-type');\n\nvar SparseMap = require('mnemonist/sparse-map');\n\nvar SparseQueueSet = require('mnemonist/sparse-queue-set');\n\nvar createRandomIndex = require('pandemonium/random-index').createRandomIndex;\n\nvar indices = require('graphology-indices/louvain');\n\nvar UndirectedLouvainIndex = indices.UndirectedLouvainIndex;\nvar DirectedLouvainIndex = indices.DirectedLouvainIndex;\nvar DEFAULTS = {\n nodeCommunityAttribute: 'community',\n getEdgeWeight: 'weight',\n fastLocalMoves: true,\n randomWalk: true,\n resolution: 1,\n rng: Math.random\n};\n\nfunction addWeightToCommunity(map, community, weight) {\n var currentWeight = map.get(community);\n if (typeof currentWeight === 'undefined') currentWeight = 0;\n currentWeight += weight;\n map.set(community, currentWeight);\n}\n\nvar EPSILON = 1e-10;\n\nfunction tieBreaker(bestCommunity, currentCommunity, targetCommunity, delta, bestDelta) {\n if (Math.abs(delta - bestDelta) < EPSILON) {\n if (bestCommunity === currentCommunity) {\n return false;\n } else {\n return targetCommunity > bestCommunity;\n }\n } else if (delta > bestDelta) {\n return true;\n }\n\n return false;\n}\n\nfunction undirectedLouvain(detailed, graph, options) {\n var index = new UndirectedLouvainIndex(graph, {\n getEdgeWeight: options.getEdgeWeight,\n keepDendrogram: detailed,\n resolution: options.resolution\n });\n var randomIndex = createRandomIndex(options.rng); // State variables\n\n var moveWasMade = true,\n localMoveWasMade = true; // Communities\n\n var currentCommunity, targetCommunity;\n var communities = new SparseMap(Float64Array, index.C); // Traversal\n\n var queue, start, end, weight, ci, ri, s, i, j, l; // Metrics\n\n var degree, targetCommunityDegree; // Moves\n\n var bestCommunity, bestDelta, deltaIsBetter, delta; // Details\n\n var deltaComputations = 0,\n nodesVisited = 0,\n moves = [],\n localMoves,\n currentMoves;\n if (options.fastLocalMoves) queue = new SparseQueueSet(index.C);\n\n while (moveWasMade) {\n l = index.C;\n moveWasMade = false;\n localMoveWasMade = true;\n\n if (options.fastLocalMoves) {\n currentMoves = 0; // Traversal of the graph\n\n ri = options.randomWalk ? randomIndex(l) : 0;\n\n for (s = 0; s < l; s++, ri++) {\n i = ri % l;\n queue.enqueue(i);\n }\n\n while (queue.size !== 0) {\n i = queue.dequeue();\n nodesVisited++;\n degree = 0;\n communities.clear();\n currentCommunity = index.belongings[i];\n start = index.starts[i];\n end = index.starts[i + 1]; // Traversing neighbors\n\n for (; start < end; start++) {\n j = index.neighborhood[start];\n weight = index.weights[start];\n targetCommunity = index.belongings[j]; // Incrementing metrics\n\n degree += weight;\n addWeightToCommunity(communities, targetCommunity, weight);\n } // Finding best community to move to\n\n\n bestDelta = index.fastDeltaWithOwnCommunity(i, degree, communities.get(currentCommunity) || 0, currentCommunity);\n bestCommunity = currentCommunity;\n\n for (ci = 0; ci < communities.size; ci++) {\n targetCommunity = communities.dense[ci];\n if (targetCommunity === currentCommunity) continue;\n targetCommunityDegree = communities.vals[ci];\n deltaComputations++;\n delta = index.fastDelta(i, degree, targetCommunityDegree, targetCommunity);\n deltaIsBetter = tieBreaker(bestCommunity, currentCommunity, targetCommunity, delta, bestDelta);\n\n if (deltaIsBetter) {\n bestDelta = delta;\n bestCommunity = targetCommunity;\n }\n } // Should we move the node?\n\n\n if (bestDelta < 0) {\n // NOTE: this is to allow nodes to move back to their own singleton\n // This code however only deals with modularity (e.g. the condition\n // about bestDelta < 0, which is the delta for moving back to\n // singleton wrt. modularity). Indeed, rarely, the Louvain\n // algorithm can produce such cases when a node would be better in\n // a singleton that in its own community when considering self loops\n // or a resolution != 1. In this case, delta with your own community\n // is indeed less than 0. To handle different metrics, one should\n // consider computing the delta for going back to singleton because\n // it might not be 0.\n bestCommunity = index.isolate(i, degree); // If the node was already in a singleton community, we don't consider\n // a move was made\n\n if (bestCommunity === currentCommunity) continue;\n } else {\n // If no move was made, we continue to next node\n if (bestCommunity === currentCommunity) {\n continue;\n } else {\n // Actually moving the node to a new community\n index.move(i, degree, bestCommunity);\n }\n }\n\n moveWasMade = true;\n currentMoves++; // Adding neighbors from other communities to the queue\n\n start = index.starts[i];\n end = index.starts[i + 1];\n\n for (; start < end; start++) {\n j = index.neighborhood[start];\n targetCommunity = index.belongings[j];\n if (targetCommunity !== bestCommunity) queue.enqueue(j);\n }\n }\n\n moves.push(currentMoves);\n } else {\n localMoves = [];\n moves.push(localMoves); // Traditional Louvain iterative traversal of the graph\n\n while (localMoveWasMade) {\n localMoveWasMade = false;\n currentMoves = 0;\n ri = options.randomWalk ? randomIndex(l) : 0;\n\n for (s = 0; s < l; s++, ri++) {\n i = ri % l;\n nodesVisited++;\n degree = 0;\n communities.clear();\n currentCommunity = index.belongings[i];\n start = index.starts[i];\n end = index.starts[i + 1]; // Traversing neighbors\n\n for (; start < end; start++) {\n j = index.neighborhood[start];\n weight = index.weights[start];\n targetCommunity = index.belongings[j]; // Incrementing metrics\n\n degree += weight;\n addWeightToCommunity(communities, targetCommunity, weight);\n } // Finding best community to move to\n\n\n bestDelta = index.fastDeltaWithOwnCommunity(i, degree, communities.get(currentCommunity) || 0, currentCommunity);\n bestCommunity = currentCommunity;\n\n for (ci = 0; ci < communities.size; ci++) {\n targetCommunity = communities.dense[ci];\n if (targetCommunity === currentCommunity) continue;\n targetCommunityDegree = communities.vals[ci];\n deltaComputations++;\n delta = index.fastDelta(i, degree, targetCommunityDegree, targetCommunity);\n deltaIsBetter = tieBreaker(bestCommunity, currentCommunity, targetCommunity, delta, bestDelta);\n\n if (deltaIsBetter) {\n bestDelta = delta;\n bestCommunity = targetCommunity;\n }\n } // Should we move the node?\n\n\n if (bestDelta < 0) {\n // NOTE: this is to allow nodes to move back to their own singleton\n // This code however only deals with modularity (e.g. the condition\n // about bestDelta < 0, which is the delta for moving back to\n // singleton wrt. modularity). Indeed, rarely, the Louvain\n // algorithm can produce such cases when a node would be better in\n // a singleton that in its own community when considering self loops\n // or a resolution != 1. In this case, delta with your own community\n // is indeed less than 0. To handle different metrics, one should\n // consider computing the delta for going back to singleton because\n // it might not be 0.\n bestCommunity = index.isolate(i, degree); // If the node was already in a singleton community, we don't consider\n // a move was made\n\n if (bestCommunity === currentCommunity) continue;\n } else {\n // If no move was made, we continue to next node\n if (bestCommunity === currentCommunity) {\n continue;\n } else {\n // Actually moving the node to a new community\n index.move(i, degree, bestCommunity);\n }\n }\n\n localMoveWasMade = true;\n currentMoves++;\n }\n\n localMoves.push(currentMoves);\n moveWasMade = localMoveWasMade || moveWasMade;\n }\n } // We continue working on the induced graph\n\n\n if (moveWasMade) index.zoomOut();\n }\n\n var results = {\n index: index,\n deltaComputations: deltaComputations,\n nodesVisited: nodesVisited,\n moves: moves\n };\n return results;\n}\n\nfunction directedLouvain(detailed, graph, options) {\n var index = new DirectedLouvainIndex(graph, {\n getEdgeWeight: options.getEdgeWeight,\n keepDendrogram: detailed,\n resolution: options.resolution\n });\n var randomIndex = createRandomIndex(options.rng); // State variables\n\n var moveWasMade = true,\n localMoveWasMade = true; // Communities\n\n var currentCommunity, targetCommunity;\n var communities = new SparseMap(Float64Array, index.C); // Traversal\n\n var queue, start, end, offset, out, weight, ci, ri, s, i, j, l; // Metrics\n\n var inDegree, outDegree, targetCommunityDegree; // Moves\n\n var bestCommunity, bestDelta, deltaIsBetter, delta; // Details\n\n var deltaComputations = 0,\n nodesVisited = 0,\n moves = [],\n localMoves,\n currentMoves;\n if (options.fastLocalMoves) queue = new SparseQueueSet(index.C);\n\n while (moveWasMade) {\n l = index.C;\n moveWasMade = false;\n localMoveWasMade = true;\n\n if (options.fastLocalMoves) {\n currentMoves = 0; // Traversal of the graph\n\n ri = options.randomWalk ? randomIndex(l) : 0;\n\n for (s = 0; s < l; s++, ri++) {\n i = ri % l;\n queue.enqueue(i);\n }\n\n while (queue.size !== 0) {\n i = queue.dequeue();\n nodesVisited++;\n inDegree = 0;\n outDegree = 0;\n communities.clear();\n currentCommunity = index.belongings[i];\n start = index.starts[i];\n end = index.starts[i + 1];\n offset = index.offsets[i]; // Traversing neighbors\n\n for (; start < end; start++) {\n out = start < offset;\n j = index.neighborhood[start];\n weight = index.weights[start];\n targetCommunity = index.belongings[j]; // Incrementing metrics\n\n if (out) outDegree += weight;else inDegree += weight;\n addWeightToCommunity(communities, targetCommunity, weight);\n } // Finding best community to move to\n\n\n bestDelta = index.deltaWithOwnCommunity(i, inDegree, outDegree, communities.get(currentCommunity) || 0, currentCommunity);\n bestCommunity = currentCommunity;\n\n for (ci = 0; ci < communities.size; ci++) {\n targetCommunity = communities.dense[ci];\n if (targetCommunity === currentCommunity) continue;\n targetCommunityDegree = communities.vals[ci];\n deltaComputations++;\n delta = index.delta(i, inDegree, outDegree, targetCommunityDegree, targetCommunity);\n deltaIsBetter = tieBreaker(bestCommunity, currentCommunity, targetCommunity, delta, bestDelta);\n\n if (deltaIsBetter) {\n bestDelta = delta;\n bestCommunity = targetCommunity;\n }\n } // Should we move the node?\n\n\n if (bestDelta < 0) {\n // NOTE: this is to allow nodes to move back to their own singleton\n // This code however only deals with modularity (e.g. the condition\n // about bestDelta < 0, which is the delta for moving back to\n // singleton wrt. modularity). Indeed, rarely, the Louvain\n // algorithm can produce such cases when a node would be better in\n // a singleton that in its own community when considering self loops\n // or a resolution != 1. In this case, delta with your own community\n // is indeed less than 0. To handle different metrics, one should\n // consider computing the delta for going back to singleton because\n // it might not be 0.\n bestCommunity = index.isolate(i, inDegree, outDegree); // If the node was already in a singleton community, we don't consider\n // a move was made\n\n if (bestCommunity === currentCommunity) continue;\n } else {\n // If no move was made, we continue to next node\n if (bestCommunity === currentCommunity) {\n continue;\n } else {\n // Actually moving the node to a new community\n index.move(i, inDegree, outDegree, bestCommunity);\n }\n }\n\n moveWasMade = true;\n currentMoves++; // Adding neighbors from other communities to the queue\n\n start = index.starts[i];\n end = index.starts[i + 1];\n\n for (; start < end; start++) {\n j = index.neighborhood[start];\n targetCommunity = index.belongings[j];\n if (targetCommunity !== bestCommunity) queue.enqueue(j);\n }\n }\n\n moves.push(currentMoves);\n } else {\n localMoves = [];\n moves.push(localMoves); // Traditional Louvain iterative traversal of the graph\n\n while (localMoveWasMade) {\n localMoveWasMade = false;\n currentMoves = 0;\n ri = options.randomWalk ? randomIndex(l) : 0;\n\n for (s = 0; s < l; s++, ri++) {\n i = ri % l;\n nodesVisited++;\n inDegree = 0;\n outDegree = 0;\n communities.clear();\n currentCommunity = index.belongings[i];\n start = index.starts[i];\n end = index.starts[i + 1];\n offset = index.offsets[i]; // Traversing neighbors\n\n for (; start < end; start++) {\n out = start < offset;\n j = index.neighborhood[start];\n weight = index.weights[start];\n targetCommunity = index.belongings[j]; // Incrementing metrics\n\n if (out) outDegree += weight;else inDegree += weight;\n addWeightToCommunity(communities, targetCommunity, weight);\n } // Finding best community to move to\n\n\n bestDelta = index.deltaWithOwnCommunity(i, inDegree, outDegree, communities.get(currentCommunity) || 0, currentCommunity);\n bestCommunity = currentCommunity;\n\n for (ci = 0; ci < communities.size; ci++) {\n targetCommunity = communities.dense[ci];\n if (targetCommunity === currentCommunity) continue;\n targetCommunityDegree = communities.vals[ci];\n deltaComputations++;\n delta = index.delta(i, inDegree, outDegree, targetCommunityDegree, targetCommunity);\n deltaIsBetter = tieBreaker(bestCommunity, currentCommunity, targetCommunity, delta, bestDelta);\n\n if (deltaIsBetter) {\n bestDelta = delta;\n bestCommunity = targetCommunity;\n }\n } // Should we move the node?\n\n\n if (bestDelta < 0) {\n // NOTE: this is to allow nodes to move back to their own singleton\n // This code however only deals with modularity (e.g. the condition\n // about bestDelta < 0, which is the delta for moving back to\n // singleton wrt. modularity). Indeed, rarely, the Louvain\n // algorithm can produce such cases when a node would be better in\n // a singleton that in its own community when considering self loops\n // or a resolution != 1. In this case, delta with your own community\n // is indeed less than 0. To handle different metrics, one should\n // consider computing the delta for going back to singleton because\n // it might not be 0.\n bestCommunity = index.isolate(i, inDegree, outDegree); // If the node was already in a singleton community, we don't consider\n // a move was made\n\n if (bestCommunity === currentCommunity) continue;\n } else {\n // If no move was made, we continue to next node\n if (bestCommunity === currentCommunity) {\n continue;\n } else {\n // Actually moving the node to a new community\n index.move(i, inDegree, outDegree, bestCommunity);\n }\n }\n\n localMoveWasMade = true;\n currentMoves++;\n }\n\n localMoves.push(currentMoves);\n moveWasMade = localMoveWasMade || moveWasMade;\n }\n } // We continue working on the induced graph\n\n\n if (moveWasMade) index.zoomOut();\n }\n\n var results = {\n index: index,\n deltaComputations: deltaComputations,\n nodesVisited: nodesVisited,\n moves: moves\n };\n return results;\n}\n/**\n * Function returning the communities mapping of the graph.\n *\n * @param {boolean} assign - Assign communities to nodes attributes?\n * @param {boolean} detailed - Whether to return detailed information.\n * @param {Graph} graph - Target graph.\n * @param {object} options - Options:\n * @param {string} nodeCommunityAttribute - Community node attribute name.\n * @param {string} getEdgeWeight - Weight edge attribute name or getter function.\n * @param {string} deltaComputation - Method to use to compute delta computations.\n * @param {boolean} fastLocalMoves - Whether to use the fast local move optimization.\n * @param {boolean} randomWalk - Whether to traverse the graph in random order.\n * @param {number} resolution - Resolution parameter.\n * @param {function} rng - RNG function to use.\n * @return {object}\n */\n\n\nfunction louvain(assign, detailed, graph, options) {\n if (!isGraph(graph)) throw new Error('graphology-communities-louvain: the given graph is not a valid graphology instance.');\n var type = inferType(graph);\n if (type === 'mixed') throw new Error('graphology-communities-louvain: cannot run the algorithm on a true mixed graph.'); // Attributes name\n\n options = resolveDefaults(options, DEFAULTS); // Empty graph case\n\n var c = 0;\n\n if (graph.size === 0) {\n if (assign) {\n graph.forEachNode(function (node) {\n graph.setNodeAttribute(node, options.nodeCommunityAttribute, c++);\n });\n return;\n }\n\n var communities = {};\n graph.forEachNode(function (node) {\n communities[node] = c++;\n });\n if (!detailed) return communities;\n return {\n communities: communities,\n count: graph.order,\n deltaComputations: 0,\n dendrogram: null,\n level: 0,\n modularity: NaN,\n moves: null,\n nodesVisited: 0,\n resolution: options.resolution\n };\n }\n\n var fn = type === 'undirected' ? undirectedLouvain : directedLouvain;\n var results = fn(detailed, graph, options);\n var index = results.index; // Standard output\n\n if (!detailed) {\n if (assign) {\n index.assign(options.nodeCommunityAttribute);\n return;\n }\n\n return index.collect();\n } // Detailed output\n\n\n var output = {\n count: index.C,\n deltaComputations: results.deltaComputations,\n dendrogram: index.dendrogram,\n level: index.level,\n modularity: index.modularity(),\n moves: results.moves,\n nodesVisited: results.nodesVisited,\n resolution: options.resolution\n };\n\n if (assign) {\n index.assign(options.nodeCommunityAttribute);\n return output;\n }\n\n output.communities = index.collect();\n return output;\n}\n/**\n * Exporting.\n */\n\n\nvar fn = louvain.bind(null, false, false);\nfn.assign = louvain.bind(null, true, false);\nfn.detailed = louvain.bind(null, false, true);\nfn.defaults = DEFAULTS;\nmodule.exports = fn;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __values = this && this.__values || function (o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar camera_1 = __importDefault(require(\"./core/camera\"));\n\nvar mouse_1 = __importDefault(require(\"./core/captors/mouse\"));\n\nvar quadtree_1 = __importDefault(require(\"./core/quadtree\"));\n\nvar types_1 = require(\"./types\");\n\nvar utils_1 = require(\"./utils\");\n\nvar labels_1 = require(\"./core/labels\");\n\nvar settings_1 = require(\"./settings\");\n\nvar touch_1 = __importDefault(require(\"./core/captors/touch\"));\n\nvar matrices_1 = require(\"./utils/matrices\");\n\nvar edge_collisions_1 = require(\"./utils/edge-collisions\");\n/**\n * Constants.\n */\n\n\nvar PIXEL_RATIO = (0, utils_1.getPixelRatio)();\n/**\n * Important functions.\n */\n\nfunction applyNodeDefaults(settings, key, data) {\n if (!data.hasOwnProperty(\"x\") || !data.hasOwnProperty(\"y\")) throw new Error(\"Sigma: could not find a valid position (x, y) for node \\\"\".concat(key, \"\\\". All your nodes must have a number \\\"x\\\" and \\\"y\\\". Maybe your forgot to apply a layout or your \\\"nodeReducer\\\" is not returning the correct data?\"));\n if (!data.color) data.color = settings.defaultNodeColor;\n if (!data.label && data.label !== \"\") data.label = null;\n if (data.label !== undefined && data.label !== null) data.label = \"\" + data.label;else data.label = null;\n if (!data.size) data.size = 2;\n if (!data.hasOwnProperty(\"hidden\")) data.hidden = false;\n if (!data.hasOwnProperty(\"highlighted\")) data.highlighted = false;\n if (!data.hasOwnProperty(\"forceLabel\")) data.forceLabel = false;\n if (!data.type || data.type === \"\") data.type = settings.defaultNodeType;\n if (!data.zIndex) data.zIndex = 0;\n return data;\n}\n\nfunction applyEdgeDefaults(settings, key, data) {\n if (!data.color) data.color = settings.defaultEdgeColor;\n if (!data.label) data.label = \"\";\n if (!data.size) data.size = 0.5;\n if (!data.hasOwnProperty(\"hidden\")) data.hidden = false;\n if (!data.hasOwnProperty(\"forceLabel\")) data.forceLabel = false;\n if (!data.type || data.type === \"\") data.type = settings.defaultEdgeType;\n if (!data.zIndex) data.zIndex = 0;\n return data;\n}\n/**\n * Main class.\n *\n * @constructor\n * @param {Graph} graph - Graph to render.\n * @param {HTMLElement} container - DOM container in which to render.\n * @param {object} settings - Optional settings.\n */\n\n\nvar Sigma =\n/** @class */\nfunction (_super) {\n __extends(Sigma, _super);\n\n function Sigma(graph, container, settings) {\n if (settings === void 0) {\n settings = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.elements = {};\n _this.canvasContexts = {};\n _this.webGLContexts = {};\n _this.activeListeners = {};\n _this.quadtree = new quadtree_1.default();\n _this.labelGrid = new labels_1.LabelGrid();\n _this.nodeDataCache = {};\n _this.edgeDataCache = {};\n _this.nodesWithForcedLabels = [];\n _this.edgesWithForcedLabels = [];\n _this.nodeExtent = {\n x: [0, 1],\n y: [0, 1]\n };\n _this.matrix = (0, matrices_1.identity)();\n _this.invMatrix = (0, matrices_1.identity)();\n _this.correctionRatio = 1;\n _this.customBBox = null;\n _this.normalizationFunction = (0, utils_1.createNormalizationFunction)({\n x: [-Infinity, Infinity],\n y: [-Infinity, Infinity]\n }); // Cache:\n\n _this.cameraSizeRatio = 1; // Starting dimensions\n\n _this.width = 0;\n _this.height = 0; // State\n\n _this.displayedLabels = new Set();\n _this.highlightedNodes = new Set();\n _this.hoveredNode = null;\n _this.hoveredEdge = null;\n _this.renderFrame = null;\n _this.renderHighlightedNodesFrame = null;\n _this.needToProcess = false;\n _this.needToSoftProcess = false;\n _this.checkEdgesEventsFrame = null; // Programs\n\n _this.nodePrograms = {};\n _this.hoverNodePrograms = {};\n _this.edgePrograms = {};\n _this.settings = (0, utils_1.assign)({}, settings_1.DEFAULT_SETTINGS, settings); // Validating\n\n (0, settings_1.validateSettings)(_this.settings);\n (0, utils_1.validateGraph)(graph);\n if (!(container instanceof HTMLElement)) throw new Error(\"Sigma: container should be an html element.\"); // Properties\n\n _this.graph = graph;\n _this.container = container; // Initializing contexts\n\n _this.createWebGLContext(\"edges\", {\n preserveDrawingBuffer: true\n });\n\n _this.createCanvasContext(\"edgeLabels\");\n\n _this.createWebGLContext(\"nodes\");\n\n _this.createCanvasContext(\"labels\");\n\n _this.createCanvasContext(\"hovers\");\n\n _this.createWebGLContext(\"hoverNodes\");\n\n _this.createCanvasContext(\"mouse\"); // Blending\n\n\n for (var key in _this.webGLContexts) {\n var gl = _this.webGLContexts[key];\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.BLEND);\n } // Loading programs\n\n\n for (var type in _this.settings.nodeProgramClasses) {\n var NodeProgramClass = _this.settings.nodeProgramClasses[type];\n _this.nodePrograms[type] = new NodeProgramClass(_this.webGLContexts.nodes, _this);\n _this.hoverNodePrograms[type] = new NodeProgramClass(_this.webGLContexts.hoverNodes, _this);\n }\n\n for (var type in _this.settings.edgeProgramClasses) {\n var EdgeProgramClass = _this.settings.edgeProgramClasses[type];\n _this.edgePrograms[type] = new EdgeProgramClass(_this.webGLContexts.edges, _this);\n } // Initial resize\n\n\n _this.resize(); // Initializing the camera\n\n\n _this.camera = new camera_1.default(); // Binding camera events\n\n _this.bindCameraHandlers(); // Initializing captors\n\n\n _this.mouseCaptor = new mouse_1.default(_this.elements.mouse, _this);\n _this.touchCaptor = new touch_1.default(_this.elements.mouse, _this); // Binding event handlers\n\n _this.bindEventHandlers(); // Binding graph handlers\n\n\n _this.bindGraphHandlers(); // Trigger eventual settings-related things\n\n\n _this.handleSettingsUpdate(); // Processing data for the first time & render\n\n\n _this.process();\n\n _this.render();\n\n return _this;\n }\n /**---------------------------------------------------------------------------\n * Internal methods.\n **---------------------------------------------------------------------------\n */\n\n /**\n * Internal function used to create a canvas element.\n * @param {string} id - Context's id.\n * @return {Sigma}\n */\n\n\n Sigma.prototype.createCanvas = function (id) {\n var canvas = (0, utils_1.createElement)(\"canvas\", {\n position: \"absolute\"\n }, {\n class: \"sigma-\".concat(id)\n });\n this.elements[id] = canvas;\n this.container.appendChild(canvas);\n return canvas;\n };\n /**\n * Internal function used to create a canvas context and add the relevant\n * DOM elements.\n *\n * @param {string} id - Context's id.\n * @return {Sigma}\n */\n\n\n Sigma.prototype.createCanvasContext = function (id) {\n var canvas = this.createCanvas(id);\n var contextOptions = {\n preserveDrawingBuffer: false,\n antialias: false\n };\n this.canvasContexts[id] = canvas.getContext(\"2d\", contextOptions);\n return this;\n };\n /**\n * Internal function used to create a canvas context and add the relevant\n * DOM elements.\n *\n * @param {string} id - Context's id.\n * @param {object?} options - #getContext params to override (optional)\n * @return {Sigma}\n */\n\n\n Sigma.prototype.createWebGLContext = function (id, options) {\n var canvas = this.createCanvas(id);\n\n var contextOptions = __assign({\n preserveDrawingBuffer: false,\n antialias: false\n }, options || {});\n\n var context; // First we try webgl2 for an easy performance boost\n\n context = canvas.getContext(\"webgl2\", contextOptions); // Else we fall back to webgl\n\n if (!context) context = canvas.getContext(\"webgl\", contextOptions); // Edge, I am looking right at you...\n\n if (!context) context = canvas.getContext(\"experimental-webgl\", contextOptions);\n this.webGLContexts[id] = context;\n return this;\n };\n /**\n * Method binding camera handlers.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.bindCameraHandlers = function () {\n var _this = this;\n\n this.activeListeners.camera = function () {\n _this._scheduleRefresh();\n };\n\n this.camera.on(\"updated\", this.activeListeners.camera);\n return this;\n };\n /**\n * Method binding event handlers.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.bindEventHandlers = function () {\n var _this = this; // Handling window resize\n\n\n this.activeListeners.handleResize = function () {\n _this.needToSoftProcess = true;\n\n _this._scheduleRefresh();\n };\n\n window.addEventListener(\"resize\", this.activeListeners.handleResize); // Function checking if the mouse is on the given node\n\n var mouseIsOnNode = function mouseIsOnNode(mouseX, mouseY, nodeX, nodeY, size) {\n return mouseX > nodeX - size && mouseX < nodeX + size && mouseY > nodeY - size && mouseY < nodeY + size && Math.sqrt(Math.pow(mouseX - nodeX, 2) + Math.pow(mouseY - nodeY, 2)) < size;\n }; // Function returning the nodes in the mouse's quad\n\n\n var getQuadNodes = function getQuadNodes(mouseX, mouseY) {\n var mouseGraphPosition = _this.viewportToFramedGraph({\n x: mouseX,\n y: mouseY\n }); // TODO: minus 1? lol\n\n\n return _this.quadtree.point(mouseGraphPosition.x, 1 - mouseGraphPosition.y);\n }; // Handling mouse move\n\n\n this.activeListeners.handleMove = function (e) {\n // NOTE: for the canvas renderer, testing the pixel's alpha should\n // give some boost but this slows things down for WebGL empirically.\n var quadNodes = getQuadNodes(e.x, e.y);\n var baseEvent = {\n event: e,\n preventSigmaDefault: function preventSigmaDefault() {\n this.event.preventSigmaDefault();\n }\n }; // We will hover the node whose center is closest to mouse\n\n var minDistance = Infinity,\n nodeToHover = null;\n\n for (var i = 0, l = quadNodes.length; i < l; i++) {\n var node = quadNodes[i];\n var data = _this.nodeDataCache[node];\n\n var pos = _this.framedGraphToViewport(data);\n\n var size = _this.scaleSize(data.size);\n\n if (!data.hidden && mouseIsOnNode(e.x, e.y, pos.x, pos.y, size)) {\n var distance = Math.sqrt(Math.pow(e.x - pos.x, 2) + Math.pow(e.y - pos.y, 2)); // TODO: sort by min size also for cases where center is the same\n\n if (distance < minDistance) {\n minDistance = distance;\n nodeToHover = node;\n }\n }\n }\n\n if (nodeToHover && _this.hoveredNode !== nodeToHover && !_this.nodeDataCache[nodeToHover].hidden) {\n // Handling passing from one node to the other directly\n if (_this.hoveredNode) _this.emit(\"leaveNode\", __assign(__assign({}, baseEvent), {\n node: _this.hoveredNode\n }));\n _this.hoveredNode = nodeToHover;\n\n _this.emit(\"enterNode\", __assign(__assign({}, baseEvent), {\n node: nodeToHover\n }));\n\n _this.scheduleHighlightedNodesRender();\n\n return;\n } // Checking if the hovered node is still hovered\n\n\n if (_this.hoveredNode) {\n var data = _this.nodeDataCache[_this.hoveredNode];\n\n var pos = _this.framedGraphToViewport(data);\n\n var size = _this.scaleSize(data.size);\n\n if (!mouseIsOnNode(e.x, e.y, pos.x, pos.y, size)) {\n var node = _this.hoveredNode;\n _this.hoveredNode = null;\n\n _this.emit(\"leaveNode\", __assign(__assign({}, baseEvent), {\n node: node\n }));\n\n return _this.scheduleHighlightedNodesRender();\n }\n }\n\n if (_this.settings.enableEdgeHoverEvents === true) {\n _this.checkEdgeHoverEvents(baseEvent);\n } else if (_this.settings.enableEdgeHoverEvents === \"debounce\") {\n if (!_this.checkEdgesEventsFrame) _this.checkEdgesEventsFrame = (0, utils_1.requestFrame)(function () {\n _this.checkEdgeHoverEvents(baseEvent);\n\n _this.checkEdgesEventsFrame = null;\n });\n }\n }; // Handling click\n\n\n var createMouseListener = function createMouseListener(eventType) {\n return function (e) {\n var baseEvent = {\n event: e,\n preventSigmaDefault: function preventSigmaDefault() {\n this.event.preventSigmaDefault();\n }\n };\n if (_this.hoveredNode) return _this.emit(\"\".concat(eventType, \"Node\"), __assign(__assign({}, baseEvent), {\n node: _this.hoveredNode\n }));\n\n if (eventType === \"wheel\" ? _this.settings.enableEdgeWheelEvents : _this.settings.enableEdgeClickEvents) {\n var edge = _this.getEdgeAtPoint(e.x, e.y);\n\n if (edge) return _this.emit(\"\".concat(eventType, \"Edge\"), __assign(__assign({}, baseEvent), {\n edge: edge\n }));\n }\n\n return _this.emit(\"\".concat(eventType, \"Stage\"), baseEvent);\n };\n };\n\n this.activeListeners.handleClick = createMouseListener(\"click\");\n this.activeListeners.handleRightClick = createMouseListener(\"rightClick\");\n this.activeListeners.handleDoubleClick = createMouseListener(\"doubleClick\");\n this.activeListeners.handleWheel = createMouseListener(\"wheel\");\n this.activeListeners.handleDown = createMouseListener(\"down\");\n this.mouseCaptor.on(\"mousemove\", this.activeListeners.handleMove);\n this.mouseCaptor.on(\"click\", this.activeListeners.handleClick);\n this.mouseCaptor.on(\"rightClick\", this.activeListeners.handleRightClick);\n this.mouseCaptor.on(\"doubleClick\", this.activeListeners.handleDoubleClick);\n this.mouseCaptor.on(\"wheel\", this.activeListeners.handleWheel);\n this.mouseCaptor.on(\"mousedown\", this.activeListeners.handleDown); // TODO\n // Deal with Touch captor events\n\n return this;\n };\n /**\n * Method binding graph handlers\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.bindGraphHandlers = function () {\n var _this = this;\n\n var graph = this.graph;\n\n this.activeListeners.graphUpdate = function () {\n _this.needToProcess = true;\n\n _this._scheduleRefresh();\n };\n\n this.activeListeners.softGraphUpdate = function () {\n _this.needToSoftProcess = true;\n\n _this._scheduleRefresh();\n };\n\n this.activeListeners.dropNodeGraphUpdate = function (e) {\n delete _this.nodeDataCache[e.key];\n if (_this.hoveredNode === e.key) _this.hoveredNode = null;\n\n _this.activeListeners.graphUpdate();\n };\n\n this.activeListeners.dropEdgeGraphUpdate = function (e) {\n delete _this.edgeDataCache[e.key];\n if (_this.hoveredEdge === e.key) _this.hoveredEdge = null;\n\n _this.activeListeners.graphUpdate();\n };\n\n this.activeListeners.clearEdgesGraphUpdate = function () {\n _this.edgeDataCache = {};\n _this.hoveredEdge = null;\n\n _this.activeListeners.graphUpdate();\n };\n\n this.activeListeners.clearGraphUpdate = function () {\n _this.nodeDataCache = {};\n _this.hoveredNode = null;\n\n _this.activeListeners.clearEdgesGraphUpdate();\n };\n\n graph.on(\"nodeAdded\", this.activeListeners.graphUpdate);\n graph.on(\"nodeDropped\", this.activeListeners.dropNodeGraphUpdate);\n graph.on(\"nodeAttributesUpdated\", this.activeListeners.softGraphUpdate);\n graph.on(\"eachNodeAttributesUpdated\", this.activeListeners.graphUpdate);\n graph.on(\"edgeAdded\", this.activeListeners.graphUpdate);\n graph.on(\"edgeDropped\", this.activeListeners.dropEdgeGraphUpdate);\n graph.on(\"edgeAttributesUpdated\", this.activeListeners.softGraphUpdate);\n graph.on(\"eachEdgeAttributesUpdated\", this.activeListeners.graphUpdate);\n graph.on(\"edgesCleared\", this.activeListeners.clearEdgesGraphUpdate);\n graph.on(\"cleared\", this.activeListeners.clearGraphUpdate);\n return this;\n };\n /**\n * Method dealing with \"leaveEdge\" and \"enterEdge\" events.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.checkEdgeHoverEvents = function (payload) {\n var edgeToHover = this.hoveredNode ? null : this.getEdgeAtPoint(payload.event.x, payload.event.y);\n\n if (edgeToHover !== this.hoveredEdge) {\n if (this.hoveredEdge) this.emit(\"leaveEdge\", __assign(__assign({}, payload), {\n edge: this.hoveredEdge\n }));\n if (edgeToHover) this.emit(\"enterEdge\", __assign(__assign({}, payload), {\n edge: edgeToHover\n }));\n this.hoveredEdge = edgeToHover;\n }\n\n return this;\n };\n /**\n * Method looking for an edge colliding with a given point at (x, y). Returns\n * the key of the edge if any, or null else.\n */\n\n\n Sigma.prototype.getEdgeAtPoint = function (x, y) {\n var e_1, _a;\n\n var _this = this;\n\n var _b = this,\n edgeDataCache = _b.edgeDataCache,\n nodeDataCache = _b.nodeDataCache; // Check first that pixel is colored:\n // Note that mouse positions must be corrected by pixel ratio to correctly\n // index the drawing buffer.\n\n\n if (!(0, edge_collisions_1.isPixelColored)(this.webGLContexts.edges, x * PIXEL_RATIO, y * PIXEL_RATIO)) return null; // Check for each edge if it collides with the point:\n\n var _c = this.viewportToGraph({\n x: x,\n y: y\n }),\n graphX = _c.x,\n graphY = _c.y; // To translate edge thicknesses to the graph system, we observe by how much\n // the length of a non-null edge is transformed to between the graph system\n // and the viewport system:\n\n\n var transformationRatio = 0;\n this.graph.someEdge(function (key, _, sourceId, targetId, _a, _b) {\n var xs = _a.x,\n ys = _a.y;\n var xt = _b.x,\n yt = _b.y;\n if (edgeDataCache[key].hidden || nodeDataCache[sourceId].hidden || nodeDataCache[targetId].hidden) return false;\n\n if (xs !== xt || ys !== yt) {\n var graphLength = Math.sqrt(Math.pow(xt - xs, 2) + Math.pow(yt - ys, 2));\n\n var _c = _this.graphToViewport({\n x: xs,\n y: ys\n }),\n vp_xs = _c.x,\n vp_ys = _c.y;\n\n var _d = _this.graphToViewport({\n x: xt,\n y: yt\n }),\n vp_xt = _d.x,\n vp_yt = _d.y;\n\n var viewportLength = Math.sqrt(Math.pow(vp_xt - vp_xs, 2) + Math.pow(vp_yt - vp_ys, 2));\n transformationRatio = graphLength / viewportLength;\n return true;\n }\n }); // If no non-null edge has been found, return null:\n\n if (!transformationRatio) return null; // Now we can look for matching edges:\n\n var edges = this.graph.filterEdges(function (key, edgeAttributes, sourceId, targetId, sourcePosition, targetPosition) {\n if (edgeDataCache[key].hidden || nodeDataCache[sourceId].hidden || nodeDataCache[targetId].hidden) return false;\n\n if ((0, edge_collisions_1.doEdgeCollideWithPoint)(graphX, graphY, sourcePosition.x, sourcePosition.y, targetPosition.x, targetPosition.y, // Adapt the edge size to the zoom ratio:\n edgeDataCache[key].size * transformationRatio / _this.cameraSizeRatio)) {\n return true;\n }\n });\n if (edges.length === 0) return null; // no edges found\n // if none of the edges have a zIndex, selected the most recently created one to match the rendering order\n\n var selectedEdge = edges[edges.length - 1]; // otherwise select edge with highest zIndex\n\n var highestZIndex = -Infinity;\n\n try {\n for (var edges_1 = __values(edges), edges_1_1 = edges_1.next(); !edges_1_1.done; edges_1_1 = edges_1.next()) {\n var edge = edges_1_1.value;\n var zIndex = this.graph.getEdgeAttribute(edge, \"zIndex\");\n\n if (zIndex >= highestZIndex) {\n selectedEdge = edge;\n highestZIndex = zIndex;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (edges_1_1 && !edges_1_1.done && (_a = edges_1.return)) _a.call(edges_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return selectedEdge;\n };\n /**\n * Method used to process the whole graph's data.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.process = function (keepArrays) {\n var _this = this;\n\n if (keepArrays === void 0) {\n keepArrays = false;\n }\n\n var graph = this.graph;\n var settings = this.settings;\n var dimensions = this.getDimensions();\n var nodeZExtent = [Infinity, -Infinity];\n var edgeZExtent = [Infinity, -Infinity]; // Clearing the quad\n\n this.quadtree.clear(); // Resetting the label grid\n // TODO: it's probably better to do this explicitly or on resizes for layout and anims\n\n this.labelGrid.resizeAndClear(dimensions, settings.labelGridCellSize); // Clear the highlightedNodes\n\n this.highlightedNodes = new Set(); // Computing extents\n\n this.nodeExtent = (0, utils_1.graphExtent)(graph); // Resetting `forceLabel` indices\n\n this.nodesWithForcedLabels = [];\n this.edgesWithForcedLabels = []; // NOTE: it is important to compute this matrix after computing the node's extent\n // because #.getGraphDimensions relies on it\n\n var nullCamera = new camera_1.default();\n var nullCameraMatrix = (0, utils_1.matrixFromCamera)(nullCamera.getState(), this.getDimensions(), this.getGraphDimensions(), this.getSetting(\"stagePadding\") || 0); // Rescaling function\n\n this.normalizationFunction = (0, utils_1.createNormalizationFunction)(this.customBBox || this.nodeExtent);\n var nodesPerPrograms = {};\n var nodes = graph.nodes();\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i]; // Node display data resolution:\n // 1. First we get the node's attributes\n // 2. We optionally reduce them using the function provided by the user\n // Note that this function must return a total object and won't be merged\n // 3. We apply our defaults, while running some vital checks\n // 4. We apply the normalization function\n // We shallow copy node data to avoid dangerous behaviors from reducers\n\n var attr = Object.assign({}, graph.getNodeAttributes(node));\n if (settings.nodeReducer) attr = settings.nodeReducer(node, attr);\n var data = applyNodeDefaults(this.settings, node, attr);\n nodesPerPrograms[data.type] = (nodesPerPrograms[data.type] || 0) + 1;\n this.nodeDataCache[node] = data;\n this.normalizationFunction.applyTo(data);\n if (data.forceLabel) this.nodesWithForcedLabels.push(node);\n\n if (this.settings.zIndex) {\n if (data.zIndex < nodeZExtent[0]) nodeZExtent[0] = data.zIndex;\n if (data.zIndex > nodeZExtent[1]) nodeZExtent[1] = data.zIndex;\n }\n }\n\n for (var type in this.nodePrograms) {\n if (!this.nodePrograms.hasOwnProperty(type)) {\n throw new Error(\"Sigma: could not find a suitable program for node type \\\"\".concat(type, \"\\\"!\"));\n }\n\n if (!keepArrays) this.nodePrograms[type].allocate(nodesPerPrograms[type] || 0); // We reset that count here, so that we can reuse it while calling the Program#process methods:\n\n nodesPerPrograms[type] = 0;\n } // Handling node z-index\n // TODO: z-index needs us to compute display data before hand\n\n\n if (this.settings.zIndex && nodeZExtent[0] !== nodeZExtent[1]) nodes = (0, utils_1.zIndexOrdering)(nodeZExtent, function (node) {\n return _this.nodeDataCache[node].zIndex;\n }, nodes);\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i];\n var data = this.nodeDataCache[node];\n this.quadtree.add(node, data.x, 1 - data.y, data.size / this.width);\n if (typeof data.label === \"string\" && !data.hidden) this.labelGrid.add(node, data.size, this.framedGraphToViewport(data, {\n matrix: nullCameraMatrix\n }));\n this.nodePrograms[data.type].process(data, data.hidden, nodesPerPrograms[data.type]++); // Save the node in the highlighted set if needed\n\n if (data.highlighted && !data.hidden) this.highlightedNodes.add(node);\n }\n\n this.labelGrid.organize();\n var edgesPerPrograms = {};\n var edges = graph.edges();\n\n for (var i = 0, l = edges.length; i < l; i++) {\n var edge = edges[i]; // Edge display data resolution:\n // 1. First we get the edge's attributes\n // 2. We optionally reduce them using the function provided by the user\n // Note that this function must return a total object and won't be merged\n // 3. We apply our defaults, while running some vital checks\n // We shallow copy edge data to avoid dangerous behaviors from reducers\n\n var attr = Object.assign({}, graph.getEdgeAttributes(edge));\n if (settings.edgeReducer) attr = settings.edgeReducer(edge, attr);\n var data = applyEdgeDefaults(this.settings, edge, attr);\n edgesPerPrograms[data.type] = (edgesPerPrograms[data.type] || 0) + 1;\n this.edgeDataCache[edge] = data;\n if (data.forceLabel && !data.hidden) this.edgesWithForcedLabels.push(edge);\n\n if (this.settings.zIndex) {\n if (data.zIndex < edgeZExtent[0]) edgeZExtent[0] = data.zIndex;\n if (data.zIndex > edgeZExtent[1]) edgeZExtent[1] = data.zIndex;\n }\n }\n\n for (var type in this.edgePrograms) {\n if (!this.edgePrograms.hasOwnProperty(type)) {\n throw new Error(\"Sigma: could not find a suitable program for edge type \\\"\".concat(type, \"\\\"!\"));\n }\n\n if (!keepArrays) this.edgePrograms[type].allocate(edgesPerPrograms[type] || 0); // We reset that count here, so that we can reuse it while calling the Program#process methods:\n\n edgesPerPrograms[type] = 0;\n } // Handling edge z-index\n\n\n if (this.settings.zIndex && edgeZExtent[0] !== edgeZExtent[1]) edges = (0, utils_1.zIndexOrdering)(edgeZExtent, function (edge) {\n return _this.edgeDataCache[edge].zIndex;\n }, edges);\n\n for (var i = 0, l = edges.length; i < l; i++) {\n var edge = edges[i];\n var data = this.edgeDataCache[edge];\n var extremities = graph.extremities(edge),\n sourceData = this.nodeDataCache[extremities[0]],\n targetData = this.nodeDataCache[extremities[1]];\n var hidden = data.hidden || sourceData.hidden || targetData.hidden;\n this.edgePrograms[data.type].process(sourceData, targetData, data, hidden, edgesPerPrograms[data.type]++);\n }\n\n for (var type in this.edgePrograms) {\n var program = this.edgePrograms[type];\n if (!keepArrays && typeof program.computeIndices === \"function\") program.computeIndices();\n }\n\n return this;\n };\n /**\n * Method that backports potential settings updates where it's needed.\n * @private\n */\n\n\n Sigma.prototype.handleSettingsUpdate = function () {\n this.camera.minRatio = this.settings.minCameraRatio;\n this.camera.maxRatio = this.settings.maxCameraRatio;\n this.camera.setState(this.camera.validateState(this.camera.getState()));\n return this;\n };\n /**\n * Method that decides whether to reprocess graph or not, and then render the\n * graph.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype._refresh = function () {\n // Do we need to process data?\n if (this.needToProcess) {\n this.process();\n } else if (this.needToSoftProcess) {\n this.process(true);\n } // Resetting state\n\n\n this.needToProcess = false;\n this.needToSoftProcess = false; // Rendering\n\n this.render();\n return this;\n };\n /**\n * Method that schedules a `_refresh` call if none has been scheduled yet. It\n * will then be processed next available frame.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype._scheduleRefresh = function () {\n var _this = this;\n\n if (!this.renderFrame) {\n this.renderFrame = (0, utils_1.requestFrame)(function () {\n _this._refresh();\n\n _this.renderFrame = null;\n });\n }\n\n return this;\n };\n /**\n * Method used to render labels.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.renderLabels = function () {\n if (!this.settings.renderLabels) return this;\n var cameraState = this.camera.getState(); // Finding visible nodes to display their labels\n\n var visibleNodes;\n\n if (cameraState.ratio >= 1) {\n // Camera is unzoomed so no need to ask the quadtree for visible nodes\n visibleNodes = new Set(this.graph.nodes());\n } else {\n // Let's ask the quadtree\n var viewRectangle = this.viewRectangle();\n visibleNodes = new Set(this.quadtree.rectangle(viewRectangle.x1, 1 - viewRectangle.y1, viewRectangle.x2, 1 - viewRectangle.y2, viewRectangle.height));\n } // Selecting labels to draw\n // TODO: drop gridsettings likewise\n // TODO: optimize through visible nodes\n\n\n var labelsToDisplay = this.labelGrid.getLabelsToDisplay(cameraState.ratio, this.settings.labelDensity).concat(this.nodesWithForcedLabels);\n this.displayedLabels = new Set(); // Drawing labels\n\n var context = this.canvasContexts.labels;\n\n for (var i = 0, l = labelsToDisplay.length; i < l; i++) {\n var node = labelsToDisplay[i];\n var data = this.nodeDataCache[node]; // If the node was already drawn (like if it is eligible AND has\n // `forceLabel`), we don't want to draw it again\n\n if (this.displayedLabels.has(node)) continue; // If the node is hidden, we don't need to display its label obviously\n\n if (data.hidden) continue;\n\n var _a = this.framedGraphToViewport(data),\n x = _a.x,\n y = _a.y; // TODO: we can cache the labels we need to render until the camera's ratio changes\n // TODO: this should be computed in the canvas components?\n\n\n var size = this.scaleSize(data.size);\n if (!data.forceLabel && size < this.settings.labelRenderedSizeThreshold) continue;\n if (!visibleNodes.has(node)) continue; // TODO:\n // Because displayed edge labels depend directly on actually rendered node\n // labels, we need to only add to this.displayedLabels nodes whose label\n // is rendered.\n // This makes this.displayedLabels depend on viewport, which might become\n // an issue once we start memoizing getLabelsToDisplay.\n\n this.displayedLabels.add(node);\n this.settings.labelRenderer(context, __assign(__assign({\n key: node\n }, data), {\n size: size,\n x: x,\n y: y\n }), this.settings);\n }\n\n return this;\n };\n /**\n * Method used to render edge labels, based on which node labels were\n * rendered.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.renderEdgeLabels = function () {\n if (!this.settings.renderEdgeLabels) return this;\n var context = this.canvasContexts.edgeLabels; // Clearing\n\n context.clearRect(0, 0, this.width, this.height);\n var edgeLabelsToDisplay = (0, labels_1.edgeLabelsToDisplayFromNodes)({\n graph: this.graph,\n hoveredNode: this.hoveredNode,\n displayedNodeLabels: this.displayedLabels,\n highlightedNodes: this.highlightedNodes\n }).concat(this.edgesWithForcedLabels);\n var displayedLabels = new Set();\n\n for (var i = 0, l = edgeLabelsToDisplay.length; i < l; i++) {\n var edge = edgeLabelsToDisplay[i],\n extremities = this.graph.extremities(edge),\n sourceData = this.nodeDataCache[extremities[0]],\n targetData = this.nodeDataCache[extremities[1]],\n edgeData = this.edgeDataCache[edge]; // If the edge was already drawn (like if it is eligible AND has\n // `forceLabel`), we don't want to draw it again\n\n if (displayedLabels.has(edge)) continue; // If the edge is hidden we don't need to display its label\n // NOTE: the test on sourceData & targetData is probably paranoid at this point?\n\n if (edgeData.hidden || sourceData.hidden || targetData.hidden) {\n continue;\n }\n\n this.settings.edgeLabelRenderer(context, __assign(__assign({\n key: edge\n }, edgeData), {\n size: this.scaleSize(edgeData.size)\n }), __assign(__assign(__assign({\n key: extremities[0]\n }, sourceData), this.framedGraphToViewport(sourceData)), {\n size: this.scaleSize(sourceData.size)\n }), __assign(__assign(__assign({\n key: extremities[1]\n }, targetData), this.framedGraphToViewport(targetData)), {\n size: this.scaleSize(targetData.size)\n }), this.settings);\n displayedLabels.add(edge);\n }\n\n return this;\n };\n /**\n * Method used to render the highlighted nodes.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.renderHighlightedNodes = function () {\n var _this = this;\n\n var context = this.canvasContexts.hovers; // Clearing\n\n context.clearRect(0, 0, this.width, this.height); // Rendering\n\n var render = function render(node) {\n var data = _this.nodeDataCache[node];\n\n var _a = _this.framedGraphToViewport(data),\n x = _a.x,\n y = _a.y;\n\n var size = _this.scaleSize(data.size);\n\n _this.settings.hoverRenderer(context, __assign(__assign({\n key: node\n }, data), {\n size: size,\n x: x,\n y: y\n }), _this.settings);\n };\n\n var nodesToRender = [];\n\n if (this.hoveredNode && !this.nodeDataCache[this.hoveredNode].hidden) {\n nodesToRender.push(this.hoveredNode);\n }\n\n this.highlightedNodes.forEach(function (node) {\n // The hovered node has already been highlighted\n if (node !== _this.hoveredNode) nodesToRender.push(node);\n }); // Draw labels:\n\n nodesToRender.forEach(function (node) {\n return render(node);\n }); // Draw WebGL nodes on top of the labels:\n\n var nodesPerPrograms = {}; // 1. Count nodes per type:\n\n nodesToRender.forEach(function (node) {\n var type = _this.nodeDataCache[node].type;\n nodesPerPrograms[type] = (nodesPerPrograms[type] || 0) + 1;\n }); // 2. Allocate for each type for the proper number of nodes\n\n for (var type in this.hoverNodePrograms) {\n this.hoverNodePrograms[type].allocate(nodesPerPrograms[type] || 0); // Also reset count, to use when rendering:\n\n nodesPerPrograms[type] = 0;\n } // 3. Process all nodes to render:\n\n\n nodesToRender.forEach(function (node) {\n var data = _this.nodeDataCache[node];\n\n _this.hoverNodePrograms[data.type].process(data, data.hidden, nodesPerPrograms[data.type]++);\n }); // 4. Render:\n\n for (var type in this.hoverNodePrograms) {\n var program = this.hoverNodePrograms[type];\n program.bind();\n program.bufferData();\n program.render({\n matrix: this.matrix,\n width: this.width,\n height: this.height,\n ratio: this.camera.ratio,\n correctionRatio: this.correctionRatio / this.camera.ratio,\n scalingRatio: PIXEL_RATIO\n });\n }\n };\n /**\n * Method used to schedule a hover render.\n *\n */\n\n\n Sigma.prototype.scheduleHighlightedNodesRender = function () {\n var _this = this;\n\n if (this.renderHighlightedNodesFrame || this.renderFrame) return;\n this.renderHighlightedNodesFrame = (0, utils_1.requestFrame)(function () {\n // Resetting state\n _this.renderHighlightedNodesFrame = null; // Rendering\n\n _this.renderHighlightedNodes();\n\n _this.renderEdgeLabels();\n });\n };\n /**\n * Method used to render.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.render = function () {\n var _this = this;\n\n this.emit(\"beforeRender\");\n\n var handleEscape = function handleEscape() {\n _this.emit(\"afterRender\");\n\n return _this;\n }; // If a render was scheduled, we cancel it\n\n\n if (this.renderFrame) {\n (0, utils_1.cancelFrame)(this.renderFrame);\n this.renderFrame = null;\n this.needToProcess = false;\n this.needToSoftProcess = false;\n } // First we need to resize\n\n\n this.resize(); // Clearing the canvases\n\n this.clear(); // Recomputing useful camera-related values:\n\n this.updateCachedValues(); // If we have no nodes we can stop right there\n\n if (!this.graph.order) return handleEscape(); // TODO: improve this heuristic or move to the captor itself?\n // TODO: deal with the touch captor here as well\n\n var mouseCaptor = this.mouseCaptor;\n var moving = this.camera.isAnimated() || mouseCaptor.isMoving || mouseCaptor.draggedEvents || mouseCaptor.currentWheelDirection; // Then we need to extract a matrix from the camera\n\n var cameraState = this.camera.getState();\n var viewportDimensions = this.getDimensions();\n var graphDimensions = this.getGraphDimensions();\n var padding = this.getSetting(\"stagePadding\") || 0;\n this.matrix = (0, utils_1.matrixFromCamera)(cameraState, viewportDimensions, graphDimensions, padding);\n this.invMatrix = (0, utils_1.matrixFromCamera)(cameraState, viewportDimensions, graphDimensions, padding, true);\n this.correctionRatio = (0, utils_1.getMatrixImpact)(this.matrix, cameraState, viewportDimensions); // Drawing nodes\n\n for (var type in this.nodePrograms) {\n var program = this.nodePrograms[type];\n program.bind();\n program.bufferData();\n program.render({\n matrix: this.matrix,\n width: this.width,\n height: this.height,\n ratio: cameraState.ratio,\n correctionRatio: this.correctionRatio / cameraState.ratio,\n scalingRatio: PIXEL_RATIO\n });\n } // Drawing edges\n\n\n if (!this.settings.hideEdgesOnMove || !moving) {\n for (var type in this.edgePrograms) {\n var program = this.edgePrograms[type];\n program.bind();\n program.bufferData();\n program.render({\n matrix: this.matrix,\n width: this.width,\n height: this.height,\n ratio: cameraState.ratio,\n correctionRatio: this.correctionRatio / cameraState.ratio,\n scalingRatio: PIXEL_RATIO\n });\n }\n } // Do not display labels on move per setting\n\n\n if (this.settings.hideLabelsOnMove && moving) return handleEscape();\n this.renderLabels();\n this.renderEdgeLabels();\n this.renderHighlightedNodes();\n return handleEscape();\n };\n /**\n * Internal method used to update expensive and therefore cached values\n * each time the camera state is updated.\n */\n\n\n Sigma.prototype.updateCachedValues = function () {\n var ratio = this.camera.getState().ratio;\n this.cameraSizeRatio = Math.sqrt(ratio);\n };\n /**---------------------------------------------------------------------------\n * Public API.\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method returning the renderer's camera.\n *\n * @return {Camera}\n */\n\n\n Sigma.prototype.getCamera = function () {\n return this.camera;\n };\n /**\n * Method returning the renderer's graph.\n *\n * @return {Graph}\n */\n\n\n Sigma.prototype.getGraph = function () {\n return this.graph;\n };\n /**\n * Method returning the mouse captor.\n *\n * @return {MouseCaptor}\n */\n\n\n Sigma.prototype.getMouseCaptor = function () {\n return this.mouseCaptor;\n };\n /**\n * Method returning the touch captor.\n *\n * @return {TouchCaptor}\n */\n\n\n Sigma.prototype.getTouchCaptor = function () {\n return this.touchCaptor;\n };\n /**\n * Method returning the current renderer's dimensions.\n *\n * @return {Dimensions}\n */\n\n\n Sigma.prototype.getDimensions = function () {\n return {\n width: this.width,\n height: this.height\n };\n };\n /**\n * Method returning the current graph's dimensions.\n *\n * @return {Dimensions}\n */\n\n\n Sigma.prototype.getGraphDimensions = function () {\n var extent = this.customBBox || this.nodeExtent;\n return {\n width: extent.x[1] - extent.x[0] || 1,\n height: extent.y[1] - extent.y[0] || 1\n };\n };\n /**\n * Method used to get all the sigma node attributes.\n * It's usefull for example to get the position of a node\n * and to get values that are set by the nodeReducer\n *\n * @param {string} key - The node's key.\n * @return {NodeDisplayData | undefined} A copy of the desired node's attribute or undefined if not found\n */\n\n\n Sigma.prototype.getNodeDisplayData = function (key) {\n var node = this.nodeDataCache[key];\n return node ? Object.assign({}, node) : undefined;\n };\n /**\n * Method used to get all the sigma edge attributes.\n * It's usefull for example to get values that are set by the edgeReducer.\n *\n * @param {string} key - The edge's key.\n * @return {EdgeDisplayData | undefined} A copy of the desired edge's attribute or undefined if not found\n */\n\n\n Sigma.prototype.getEdgeDisplayData = function (key) {\n var edge = this.edgeDataCache[key];\n return edge ? Object.assign({}, edge) : undefined;\n };\n /**\n * Method returning a copy of the settings collection.\n *\n * @return {Settings} A copy of the settings collection.\n */\n\n\n Sigma.prototype.getSettings = function () {\n return __assign({}, this.settings);\n };\n /**\n * Method returning the current value for a given setting key.\n *\n * @param {string} key - The setting key to get.\n * @return {any} The value attached to this setting key or undefined if not found\n */\n\n\n Sigma.prototype.getSetting = function (key) {\n return this.settings[key];\n };\n /**\n * Method setting the value of a given setting key. Note that this will schedule\n * a new render next frame.\n *\n * @param {string} key - The setting key to set.\n * @param {any} value - The value to set.\n * @return {Sigma}\n */\n\n\n Sigma.prototype.setSetting = function (key, value) {\n this.settings[key] = value;\n (0, settings_1.validateSettings)(this.settings);\n this.handleSettingsUpdate();\n this.needToProcess = true; // TODO: some keys may work with only needToSoftProcess or even nothing\n\n this._scheduleRefresh();\n\n return this;\n };\n /**\n * Method updating the value of a given setting key using the provided function.\n * Note that this will schedule a new render next frame.\n *\n * @param {string} key - The setting key to set.\n * @param {function} updater - The update function.\n * @return {Sigma}\n */\n\n\n Sigma.prototype.updateSetting = function (key, updater) {\n this.settings[key] = updater(this.settings[key]);\n (0, settings_1.validateSettings)(this.settings);\n this.handleSettingsUpdate();\n this.needToProcess = true; // TODO: some keys may work with only needToSoftProcess or even nothing\n\n this._scheduleRefresh();\n\n return this;\n };\n /**\n * Method used to resize the renderer.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.resize = function () {\n var previousWidth = this.width,\n previousHeight = this.height;\n this.width = this.container.offsetWidth;\n this.height = this.container.offsetHeight;\n\n if (this.width === 0) {\n if (this.settings.allowInvalidContainer) this.width = 1;else throw new Error(\"Sigma: Container has no width. You can set the allowInvalidContainer setting to true to stop seing this error.\");\n }\n\n if (this.height === 0) {\n if (this.settings.allowInvalidContainer) this.height = 1;else throw new Error(\"Sigma: Container has no height. You can set the allowInvalidContainer setting to true to stop seing this error.\");\n } // If nothing has changed, we can stop right here\n\n\n if (previousWidth === this.width && previousHeight === this.height) return this;\n this.emit(\"resize\"); // Sizing dom elements\n\n for (var id in this.elements) {\n var element = this.elements[id];\n element.style.width = this.width + \"px\";\n element.style.height = this.height + \"px\";\n } // Sizing canvas contexts\n\n\n for (var id in this.canvasContexts) {\n this.elements[id].setAttribute(\"width\", this.width * PIXEL_RATIO + \"px\");\n this.elements[id].setAttribute(\"height\", this.height * PIXEL_RATIO + \"px\");\n if (PIXEL_RATIO !== 1) this.canvasContexts[id].scale(PIXEL_RATIO, PIXEL_RATIO);\n } // Sizing WebGL contexts\n\n\n for (var id in this.webGLContexts) {\n this.elements[id].setAttribute(\"width\", this.width * PIXEL_RATIO + \"px\");\n this.elements[id].setAttribute(\"height\", this.height * PIXEL_RATIO + \"px\");\n this.webGLContexts[id].viewport(0, 0, this.width * PIXEL_RATIO, this.height * PIXEL_RATIO);\n }\n\n return this;\n };\n /**\n * Method used to clear all the canvases.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.clear = function () {\n this.webGLContexts.nodes.clear(this.webGLContexts.nodes.COLOR_BUFFER_BIT);\n this.webGLContexts.edges.clear(this.webGLContexts.edges.COLOR_BUFFER_BIT);\n this.webGLContexts.hoverNodes.clear(this.webGLContexts.nodes.COLOR_BUFFER_BIT);\n this.canvasContexts.labels.clearRect(0, 0, this.width, this.height);\n this.canvasContexts.hovers.clearRect(0, 0, this.width, this.height);\n this.canvasContexts.edgeLabels.clearRect(0, 0, this.width, this.height);\n return this;\n };\n /**\n * Method used to refresh all computed data.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.refresh = function () {\n this.needToProcess = true;\n\n this._refresh();\n\n return this;\n };\n /**\n * Method used to refresh all computed data, at the next available frame.\n * If this method has already been called this frame, then it will only render once at the next available frame.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.scheduleRefresh = function () {\n this.needToProcess = true;\n\n this._scheduleRefresh();\n\n return this;\n };\n /**\n * Method used to (un)zoom, while preserving the position of a viewport point.\n * Used for instance to zoom \"on the mouse cursor\".\n *\n * @param viewportTarget\n * @param newRatio\n * @return {CameraState}\n */\n\n\n Sigma.prototype.getViewportZoomedState = function (viewportTarget, newRatio) {\n var _a = this.camera.getState(),\n ratio = _a.ratio,\n angle = _a.angle,\n x = _a.x,\n y = _a.y; // TODO: handle max zoom\n\n\n var ratioDiff = newRatio / ratio;\n var center = {\n x: this.width / 2,\n y: this.height / 2\n };\n var graphMousePosition = this.viewportToFramedGraph(viewportTarget);\n var graphCenterPosition = this.viewportToFramedGraph(center);\n return {\n angle: angle,\n x: (graphMousePosition.x - graphCenterPosition.x) * (1 - ratioDiff) + x,\n y: (graphMousePosition.y - graphCenterPosition.y) * (1 - ratioDiff) + y,\n ratio: newRatio\n };\n };\n /**\n * Method returning the abstract rectangle containing the graph according\n * to the camera's state.\n *\n * @return {object} - The view's rectangle.\n */\n\n\n Sigma.prototype.viewRectangle = function () {\n // TODO: reduce relative margin?\n var marginX = 0 * this.width / 8,\n marginY = 0 * this.height / 8;\n var p1 = this.viewportToFramedGraph({\n x: 0 - marginX,\n y: 0 - marginY\n }),\n p2 = this.viewportToFramedGraph({\n x: this.width + marginX,\n y: 0 - marginY\n }),\n h = this.viewportToFramedGraph({\n x: 0,\n y: this.height + marginY\n });\n return {\n x1: p1.x,\n y1: p1.y,\n x2: p2.x,\n y2: p2.y,\n height: p2.y - h.y\n };\n };\n /**\n * Method returning the coordinates of a point from the framed graph system to the viewport system. It allows\n * overriding anything that is used to get the translation matrix, or even the matrix itself.\n *\n * Be careful if overriding dimensions, padding or cameraState, as the computation of the matrix is not the lightest\n * of computations.\n */\n\n\n Sigma.prototype.framedGraphToViewport = function (coordinates, override) {\n if (override === void 0) {\n override = {};\n }\n\n var recomputeMatrix = !!override.cameraState || !!override.viewportDimensions || !!override.graphDimensions;\n var matrix = override.matrix ? override.matrix : recomputeMatrix ? (0, utils_1.matrixFromCamera)(override.cameraState || this.camera.getState(), override.viewportDimensions || this.getDimensions(), override.graphDimensions || this.getGraphDimensions(), override.padding || this.getSetting(\"stagePadding\") || 0) : this.matrix;\n var viewportPos = (0, matrices_1.multiplyVec2)(matrix, coordinates);\n return {\n x: (1 + viewportPos.x) * this.width / 2,\n y: (1 - viewportPos.y) * this.height / 2\n };\n };\n /**\n * Method returning the coordinates of a point from the viewport system to the framed graph system. It allows\n * overriding anything that is used to get the translation matrix, or even the matrix itself.\n *\n * Be careful if overriding dimensions, padding or cameraState, as the computation of the matrix is not the lightest\n * of computations.\n */\n\n\n Sigma.prototype.viewportToFramedGraph = function (coordinates, override) {\n if (override === void 0) {\n override = {};\n }\n\n var recomputeMatrix = !!override.cameraState || !!override.viewportDimensions || !override.graphDimensions;\n var invMatrix = override.matrix ? override.matrix : recomputeMatrix ? (0, utils_1.matrixFromCamera)(override.cameraState || this.camera.getState(), override.viewportDimensions || this.getDimensions(), override.graphDimensions || this.getGraphDimensions(), override.padding || this.getSetting(\"stagePadding\") || 0, true) : this.invMatrix;\n return (0, matrices_1.multiplyVec2)(invMatrix, {\n x: coordinates.x / this.width * 2 - 1,\n y: 1 - coordinates.y / this.height * 2\n });\n };\n /**\n * Method used to translate a point's coordinates from the viewport system (pixel distance from the top-left of the\n * stage) to the graph system (the reference system of data as they are in the given graph instance).\n *\n * This method accepts an optional camera which can be useful if you need to translate coordinates\n * based on a different view than the one being currently being displayed on screen.\n *\n * @param {Coordinates} viewportPoint\n * @param {CoordinateConversionOverride} override\n */\n\n\n Sigma.prototype.viewportToGraph = function (viewportPoint, override) {\n if (override === void 0) {\n override = {};\n }\n\n return this.normalizationFunction.inverse(this.viewportToFramedGraph(viewportPoint, override));\n };\n /**\n * Method used to translate a point's coordinates from the graph system (the reference system of data as they are in\n * the given graph instance) to the viewport system (pixel distance from the top-left of the stage).\n *\n * This method accepts an optional camera which can be useful if you need to translate coordinates\n * based on a different view than the one being currently being displayed on screen.\n *\n * @param {Coordinates} graphPoint\n * @param {CoordinateConversionOverride} override\n */\n\n\n Sigma.prototype.graphToViewport = function (graphPoint, override) {\n if (override === void 0) {\n override = {};\n }\n\n return this.framedGraphToViewport(this.normalizationFunction(graphPoint), override);\n };\n /**\n * Method returning the graph's bounding box.\n *\n * @return {{ x: Extent, y: Extent }}\n */\n\n\n Sigma.prototype.getBBox = function () {\n return (0, utils_1.graphExtent)(this.graph);\n };\n /**\n * Method returning the graph's custom bounding box, if any.\n *\n * @return {{ x: Extent, y: Extent } | null}\n */\n\n\n Sigma.prototype.getCustomBBox = function () {\n return this.customBBox;\n };\n /**\n * Method used to override the graph's bounding box with a custom one. Give `null` as the argument to stop overriding.\n *\n * @return {Sigma}\n */\n\n\n Sigma.prototype.setCustomBBox = function (customBBox) {\n this.customBBox = customBBox;\n\n this._scheduleRefresh();\n\n return this;\n };\n /**\n * Method used to shut the container & release event listeners.\n *\n * @return {undefined}\n */\n\n\n Sigma.prototype.kill = function () {\n var graph = this.graph; // Emitting \"kill\" events so that plugins and such can cleanup\n\n this.emit(\"kill\"); // Releasing events\n\n this.removeAllListeners(); // Releasing camera handlers\n\n this.camera.removeListener(\"updated\", this.activeListeners.camera); // Releasing DOM events & captors\n\n window.removeEventListener(\"resize\", this.activeListeners.handleResize);\n this.mouseCaptor.kill();\n this.touchCaptor.kill(); // Releasing graph handlers\n\n graph.removeListener(\"nodeAdded\", this.activeListeners.dropNodeGraphUpdate);\n graph.removeListener(\"nodeDropped\", this.activeListeners.graphUpdate);\n graph.removeListener(\"nodeAttributesUpdated\", this.activeListeners.softGraphUpdate);\n graph.removeListener(\"eachNodeAttributesUpdated\", this.activeListeners.graphUpdate);\n graph.removeListener(\"edgeAdded\", this.activeListeners.graphUpdate);\n graph.removeListener(\"edgeDropped\", this.activeListeners.dropEdgeGraphUpdate);\n graph.removeListener(\"edgeAttributesUpdated\", this.activeListeners.softGraphUpdate);\n graph.removeListener(\"eachEdgeAttributesUpdated\", this.activeListeners.graphUpdate);\n graph.removeListener(\"edgesCleared\", this.activeListeners.clearEdgesGraphUpdate);\n graph.removeListener(\"cleared\", this.activeListeners.clearGraphUpdate); // Releasing cache & state\n\n this.quadtree = new quadtree_1.default();\n this.nodeDataCache = {};\n this.edgeDataCache = {};\n this.nodesWithForcedLabels = [];\n this.edgesWithForcedLabels = [];\n this.highlightedNodes.clear(); // Clearing frames\n\n if (this.renderFrame) {\n (0, utils_1.cancelFrame)(this.renderFrame);\n this.renderFrame = null;\n }\n\n if (this.renderHighlightedNodesFrame) {\n (0, utils_1.cancelFrame)(this.renderHighlightedNodesFrame);\n this.renderHighlightedNodesFrame = null;\n } // Destroying canvases\n\n\n var container = this.container;\n\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n };\n /**\n * Method used to scale the given size according to the camera's ratio, i.e.\n * zooming state.\n *\n * @param {number} size - The size to scale (node size, edge thickness etc.).\n * @return {number} - The scaled size.\n */\n\n\n Sigma.prototype.scaleSize = function (size) {\n return size / this.cameraSizeRatio;\n };\n /**\n * Method that returns the collection of all used canvases.\n * At the moment, the instantiated canvases are the following, and in the\n * following order in the DOM:\n * - `edges`\n * - `nodes`\n * - `edgeLabels`\n * - `labels`\n * - `hovers`\n * - `hoverNodes`\n * - `mouse`\n *\n * @return {PlainObject} - The collection of canvases.\n */\n\n\n Sigma.prototype.getCanvases = function () {\n return __assign({}, this.elements);\n };\n\n return Sigma;\n}(types_1.TypedEventEmitter);\n\nexports.default = Sigma;","\"use strict\";\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.animateNodes = exports.ANIMATE_DEFAULTS = void 0;\n\nvar index_1 = require(\"./index\");\n\nvar easings_1 = __importDefault(require(\"./easings\"));\n\nexports.ANIMATE_DEFAULTS = {\n easing: \"quadraticInOut\",\n duration: 150\n};\n/**\n * Function used to animate the nodes.\n */\n\nfunction animateNodes(graph, targets, opts, callback) {\n var options = Object.assign({}, exports.ANIMATE_DEFAULTS, opts);\n var easing = typeof options.easing === \"function\" ? options.easing : easings_1.default[options.easing];\n var start = Date.now();\n var startPositions = {};\n\n for (var node in targets) {\n var attrs = targets[node];\n startPositions[node] = {};\n\n for (var k in attrs) {\n startPositions[node][k] = graph.getNodeAttribute(node, k);\n }\n }\n\n var frame = null;\n\n var step = function step() {\n frame = null;\n var p = (Date.now() - start) / options.duration;\n\n if (p >= 1) {\n // Animation is done\n for (var node in targets) {\n var attrs = targets[node]; // We use given values to avoid precision issues and for convenience\n\n for (var k in attrs) {\n graph.setNodeAttribute(node, k, attrs[k]);\n }\n }\n\n if (typeof callback === \"function\") callback();\n return;\n }\n\n p = easing(p);\n\n for (var node in targets) {\n var attrs = targets[node];\n var s = startPositions[node];\n\n for (var k in attrs) {\n graph.setNodeAttribute(node, k, attrs[k] * p + s[k] * (1 - p));\n }\n }\n\n frame = (0, index_1.requestFrame)(step);\n };\n\n step();\n return function () {\n if (frame) (0, index_1.cancelFrame)(frame);\n };\n}\n\nexports.animateNodes = animateNodes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HTML_COLORS = void 0;\nexports.HTML_COLORS = {\n black: \"#000000\",\n silver: \"#C0C0C0\",\n gray: \"#808080\",\n grey: \"#808080\",\n white: \"#FFFFFF\",\n maroon: \"#800000\",\n red: \"#FF0000\",\n purple: \"#800080\",\n fuchsia: \"#FF00FF\",\n green: \"#008000\",\n lime: \"#00FF00\",\n olive: \"#808000\",\n yellow: \"#FFFF00\",\n navy: \"#000080\",\n blue: \"#0000FF\",\n teal: \"#008080\",\n aqua: \"#00FFFF\",\n darkblue: \"#00008B\",\n mediumblue: \"#0000CD\",\n darkgreen: \"#006400\",\n darkcyan: \"#008B8B\",\n deepskyblue: \"#00BFFF\",\n darkturquoise: \"#00CED1\",\n mediumspringgreen: \"#00FA9A\",\n springgreen: \"#00FF7F\",\n cyan: \"#00FFFF\",\n midnightblue: \"#191970\",\n dodgerblue: \"#1E90FF\",\n lightseagreen: \"#20B2AA\",\n forestgreen: \"#228B22\",\n seagreen: \"#2E8B57\",\n darkslategray: \"#2F4F4F\",\n darkslategrey: \"#2F4F4F\",\n limegreen: \"#32CD32\",\n mediumseagreen: \"#3CB371\",\n turquoise: \"#40E0D0\",\n royalblue: \"#4169E1\",\n steelblue: \"#4682B4\",\n darkslateblue: \"#483D8B\",\n mediumturquoise: \"#48D1CC\",\n indigo: \"#4B0082\",\n darkolivegreen: \"#556B2F\",\n cadetblue: \"#5F9EA0\",\n cornflowerblue: \"#6495ED\",\n rebeccapurple: \"#663399\",\n mediumaquamarine: \"#66CDAA\",\n dimgray: \"#696969\",\n dimgrey: \"#696969\",\n slateblue: \"#6A5ACD\",\n olivedrab: \"#6B8E23\",\n slategray: \"#708090\",\n slategrey: \"#708090\",\n lightslategray: \"#778899\",\n lightslategrey: \"#778899\",\n mediumslateblue: \"#7B68EE\",\n lawngreen: \"#7CFC00\",\n chartreuse: \"#7FFF00\",\n aquamarine: \"#7FFFD4\",\n skyblue: \"#87CEEB\",\n lightskyblue: \"#87CEFA\",\n blueviolet: \"#8A2BE2\",\n darkred: \"#8B0000\",\n darkmagenta: \"#8B008B\",\n saddlebrown: \"#8B4513\",\n darkseagreen: \"#8FBC8F\",\n lightgreen: \"#90EE90\",\n mediumpurple: \"#9370DB\",\n darkviolet: \"#9400D3\",\n palegreen: \"#98FB98\",\n darkorchid: \"#9932CC\",\n yellowgreen: \"#9ACD32\",\n sienna: \"#A0522D\",\n brown: \"#A52A2A\",\n darkgray: \"#A9A9A9\",\n darkgrey: \"#A9A9A9\",\n lightblue: \"#ADD8E6\",\n greenyellow: \"#ADFF2F\",\n paleturquoise: \"#AFEEEE\",\n lightsteelblue: \"#B0C4DE\",\n powderblue: \"#B0E0E6\",\n firebrick: \"#B22222\",\n darkgoldenrod: \"#B8860B\",\n mediumorchid: \"#BA55D3\",\n rosybrown: \"#BC8F8F\",\n darkkhaki: \"#BDB76B\",\n mediumvioletred: \"#C71585\",\n indianred: \"#CD5C5C\",\n peru: \"#CD853F\",\n chocolate: \"#D2691E\",\n tan: \"#D2B48C\",\n lightgray: \"#D3D3D3\",\n lightgrey: \"#D3D3D3\",\n thistle: \"#D8BFD8\",\n orchid: \"#DA70D6\",\n goldenrod: \"#DAA520\",\n palevioletred: \"#DB7093\",\n crimson: \"#DC143C\",\n gainsboro: \"#DCDCDC\",\n plum: \"#DDA0DD\",\n burlywood: \"#DEB887\",\n lightcyan: \"#E0FFFF\",\n lavender: \"#E6E6FA\",\n darksalmon: \"#E9967A\",\n violet: \"#EE82EE\",\n palegoldenrod: \"#EEE8AA\",\n lightcoral: \"#F08080\",\n khaki: \"#F0E68C\",\n aliceblue: \"#F0F8FF\",\n honeydew: \"#F0FFF0\",\n azure: \"#F0FFFF\",\n sandybrown: \"#F4A460\",\n wheat: \"#F5DEB3\",\n beige: \"#F5F5DC\",\n whitesmoke: \"#F5F5F5\",\n mintcream: \"#F5FFFA\",\n ghostwhite: \"#F8F8FF\",\n salmon: \"#FA8072\",\n antiquewhite: \"#FAEBD7\",\n linen: \"#FAF0E6\",\n lightgoldenrodyellow: \"#FAFAD2\",\n oldlace: \"#FDF5E6\",\n magenta: \"#FF00FF\",\n deeppink: \"#FF1493\",\n orangered: \"#FF4500\",\n tomato: \"#FF6347\",\n hotpink: \"#FF69B4\",\n coral: \"#FF7F50\",\n darkorange: \"#FF8C00\",\n lightsalmon: \"#FFA07A\",\n orange: \"#FFA500\",\n lightpink: \"#FFB6C1\",\n pink: \"#FFC0CB\",\n gold: \"#FFD700\",\n peachpuff: \"#FFDAB9\",\n navajowhite: \"#FFDEAD\",\n moccasin: \"#FFE4B5\",\n bisque: \"#FFE4C4\",\n mistyrose: \"#FFE4E1\",\n blanchedalmond: \"#FFEBCD\",\n papayawhip: \"#FFEFD5\",\n lavenderblush: \"#FFF0F5\",\n seashell: \"#FFF5EE\",\n cornsilk: \"#FFF8DC\",\n lemonchiffon: \"#FFFACD\",\n floralwhite: \"#FFFAF0\",\n snow: \"#FFFAFA\",\n lightyellow: \"#FFFFE0\",\n ivory: \"#FFFFF0\"\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar R = (typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n};\nvar ReflectOwnKeys;\n\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\nmodule.exports = EventEmitter;\nmodule.exports.once = once; // Backwards-compat with node 0.10.x\n\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\n\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function get() {\n return defaultMaxListeners;\n },\n set: function set(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function () {\n if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}; // Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\n\n\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n\n for (var i = 1; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var doError = type === 'error';\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.\n\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n } // At least give some kind of context to the user\n\n\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n if (handler === undefined) return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n\n for (var i = 0; i < len; ++i) {\n ReflectApply(listeners[i], this, args);\n }\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n checkListener(listener);\n events = target._events;\n\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n\n events = target._events;\n }\n\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n } // Check for listener leak\n\n\n m = _getMaxListeners(target);\n\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true; // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n\n var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n}; // Emits a 'removeListener' event if and only if the listener was removed.\n\n\nEventEmitter.prototype.removeListener = function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n checkListener(listener);\n events = this._events;\n if (events === undefined) return this;\n list = events[type];\n if (list === undefined) return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else {\n delete events[type];\n if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0) return this;\n if (position === 0) list.shift();else {\n spliceOne(list, position);\n }\n if (list.length === 1) events[type] = list[0];\n if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n events = this._events;\n if (events === undefined) return this; // not listening for removeListener, no need to emit\n\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n }\n\n return this;\n } // emit removeListener for all listeners on all events\n\n\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n if (events === undefined) return [];\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\n\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n copy[i] = arr[i];\n }\n\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) {\n list[index] = list[index + 1];\n }\n\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n\n resolve([].slice.call(arguments));\n }\n\n ;\n eventTargetAgnosticAddListener(emitter, name, resolver, {\n once: true\n });\n\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, {\n once: true\n });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + _typeof(emitter));\n }\n}","/**\n * Extend function\n * ================\n *\n * Function used to push a bunch of values into an array at once.\n *\n * Its strategy is to mutate target array's length then setting the new indices\n * to be the values to add.\n *\n * A benchmark proved that it is faster than the following strategies:\n * 1) `array.push.apply(array, values)`.\n * 2) A loop of pushes.\n * 3) `array = array.concat(values)`, obviously.\n *\n * Intuitively, this is correct because when adding a lot of elements, the\n * chosen strategies does not need to handle the `arguments` object to\n * execute #.apply's variadicity and because the array know its final length\n * at the beginning, avoiding potential multiple reallocations of the underlying\n * contiguous array. Some engines may be able to optimize the loop of push\n * operations but empirically they don't seem to do so.\n */\n\n/**\n * Extends the target array with the given values.\n *\n * @param {array} array - Target array.\n * @param {array} values - Values to add.\n */\nmodule.exports = function extend(array, values) {\n var l2 = values.length;\n if (l2 === 0) return;\n var l1 = array.length;\n array.length += l2;\n\n for (var i = 0; i < l2; i++) {\n array[l1 + i] = values[i];\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.edgeLabelsToDisplayFromNodes = exports.LabelGrid = void 0;\n/**\n * Class representing a single candidate for the label grid selection.\n *\n * It also describes a deterministic way to compare two candidates to assess\n * which one is better.\n */\n\nvar LabelCandidate =\n/** @class */\nfunction () {\n function LabelCandidate(key, size) {\n this.key = key;\n this.size = size;\n }\n\n LabelCandidate.compare = function (first, second) {\n // First we compare by size\n if (first.size > second.size) return -1;\n if (first.size < second.size) return 1; // Then since no two nodes can have the same key, we use it to\n // deterministically tie-break by key\n\n if (first.key > second.key) return 1; // NOTE: this comparator cannot return 0\n\n return -1;\n };\n\n return LabelCandidate;\n}();\n/**\n * Class representing a 2D spatial grid divided into constant-size cells.\n */\n\n\nvar LabelGrid =\n/** @class */\nfunction () {\n function LabelGrid() {\n this.width = 0;\n this.height = 0;\n this.cellSize = 0;\n this.columns = 0;\n this.rows = 0;\n this.cells = {};\n }\n\n LabelGrid.prototype.resizeAndClear = function (dimensions, cellSize) {\n this.width = dimensions.width;\n this.height = dimensions.height;\n this.cellSize = cellSize;\n this.columns = Math.ceil(dimensions.width / cellSize);\n this.rows = Math.ceil(dimensions.height / cellSize);\n this.cells = {};\n };\n\n LabelGrid.prototype.getIndex = function (pos) {\n var xIndex = Math.floor(pos.x / this.cellSize);\n var yIndex = Math.floor(pos.y / this.cellSize);\n return yIndex * this.columns + xIndex;\n };\n\n LabelGrid.prototype.add = function (key, size, pos) {\n var candidate = new LabelCandidate(key, size);\n var index = this.getIndex(pos);\n var cell = this.cells[index];\n\n if (!cell) {\n cell = [];\n this.cells[index] = cell;\n }\n\n cell.push(candidate);\n };\n\n LabelGrid.prototype.organize = function () {\n for (var k in this.cells) {\n var cell = this.cells[k];\n cell.sort(LabelCandidate.compare);\n }\n };\n\n LabelGrid.prototype.getLabelsToDisplay = function (ratio, density) {\n // TODO: work on visible nodes to optimize? ^ -> threshold outside so that memoization works?\n // TODO: adjust threshold lower, but increase cells a bit?\n // TODO: hunt for geom issue in disguise\n // TODO: memoize while ratio does not move. method to force recompute\n var cellArea = this.cellSize * this.cellSize;\n var scaledCellArea = cellArea / ratio / ratio;\n var scaledDensity = scaledCellArea * density / cellArea;\n var labelsToDisplayPerCell = Math.ceil(scaledDensity);\n var labels = [];\n\n for (var k in this.cells) {\n var cell = this.cells[k];\n\n for (var i = 0; i < Math.min(labelsToDisplayPerCell, cell.length); i++) {\n labels.push(cell[i].key);\n }\n }\n\n return labels;\n };\n\n return LabelGrid;\n}();\n\nexports.LabelGrid = LabelGrid;\n/**\n * Label heuristic selecting edge labels to display, based on displayed node\n * labels\n *\n * @param {object} params - Parameters:\n * @param {Set} displayedNodeLabels - Currently displayed node labels.\n * @param {Set} highlightedNodes - Highlighted nodes.\n * @param {Graph} graph - The rendered graph.\n * @param {string} hoveredNode - Hovered node (optional)\n * @return {Array} - The selected labels.\n */\n\nfunction edgeLabelsToDisplayFromNodes(params) {\n var graph = params.graph,\n hoveredNode = params.hoveredNode,\n highlightedNodes = params.highlightedNodes,\n displayedNodeLabels = params.displayedNodeLabels;\n var worthyEdges = []; // TODO: the code below can be optimized using #.forEach and batching the code per adj\n // We should display an edge's label if:\n // - Any of its extremities is highlighted or hovered\n // - Both of its extremities has its label shown\n\n graph.forEachEdge(function (edge, _, source, target) {\n if (source === hoveredNode || target === hoveredNode || highlightedNodes.has(source) || highlightedNodes.has(target) || displayedNodeLabels.has(source) && displayedNodeLabels.has(target)) {\n worthyEdges.push(edge);\n }\n });\n return worthyEdges;\n}\n\nexports.edgeLabelsToDisplayFromNodes = edgeLabelsToDisplayFromNodes;","\"use strict\";\n/**\n * Sigma.js Settings\n * =================================\n *\n * The list of settings and some handy functions.\n * @module\n */\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DEFAULT_SETTINGS = exports.validateSettings = void 0;\n\nvar label_1 = __importDefault(require(\"./rendering/canvas/label\"));\n\nvar hover_1 = __importDefault(require(\"./rendering/canvas/hover\"));\n\nvar edge_label_1 = __importDefault(require(\"./rendering/canvas/edge-label\"));\n\nvar node_fast_1 = __importDefault(require(\"./rendering/webgl/programs/node.fast\"));\n\nvar edge_1 = __importDefault(require(\"./rendering/webgl/programs/edge\"));\n\nvar edge_arrow_1 = __importDefault(require(\"./rendering/webgl/programs/edge.arrow\"));\n\nfunction validateSettings(settings) {\n if (typeof settings.labelDensity !== \"number\" || settings.labelDensity < 0) {\n throw new Error(\"Settings: invalid `labelDensity`. Expecting a positive number.\");\n }\n\n var minCameraRatio = settings.minCameraRatio,\n maxCameraRatio = settings.maxCameraRatio;\n\n if (typeof minCameraRatio === \"number\" && typeof maxCameraRatio === \"number\" && maxCameraRatio < minCameraRatio) {\n throw new Error(\"Settings: invalid camera ratio boundaries. Expecting `maxCameraRatio` to be greater than `minCameraRatio`.\");\n }\n}\n\nexports.validateSettings = validateSettings;\nexports.DEFAULT_SETTINGS = {\n // Performance\n hideEdgesOnMove: false,\n hideLabelsOnMove: false,\n renderLabels: true,\n renderEdgeLabels: false,\n enableEdgeClickEvents: false,\n enableEdgeWheelEvents: false,\n enableEdgeHoverEvents: false,\n // Component rendering\n defaultNodeColor: \"#999\",\n defaultNodeType: \"circle\",\n defaultEdgeColor: \"#ccc\",\n defaultEdgeType: \"line\",\n labelFont: \"Arial\",\n labelSize: 14,\n labelWeight: \"normal\",\n labelColor: {\n color: \"#000\"\n },\n edgeLabelFont: \"Arial\",\n edgeLabelSize: 14,\n edgeLabelWeight: \"normal\",\n edgeLabelColor: {\n attribute: \"color\"\n },\n stagePadding: 30,\n // Labels\n labelDensity: 1,\n labelGridCellSize: 100,\n labelRenderedSizeThreshold: 6,\n // Reducers\n nodeReducer: null,\n edgeReducer: null,\n // Features\n zIndex: false,\n minCameraRatio: null,\n maxCameraRatio: null,\n // Renderers\n labelRenderer: label_1.default,\n hoverRenderer: hover_1.default,\n edgeLabelRenderer: edge_label_1.default,\n // Lifecycle\n allowInvalidContainer: false,\n // Program classes\n nodeProgramClasses: {\n circle: node_fast_1.default\n },\n edgeProgramClasses: {\n arrow: edge_arrow_1.default,\n line: edge_1.default\n }\n};","\"use strict\";\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar label_1 = __importDefault(require(\"./label\"));\n/**\n * Draw an hovered node.\n * - if there is no label => display a shadow on the node\n * - if the label box is bigger than node size => display a label box that contains the node with a shadow\n * - else node with shadow and the label box\n */\n\n\nfunction drawHover(context, data, settings) {\n var size = settings.labelSize,\n font = settings.labelFont,\n weight = settings.labelWeight;\n context.font = \"\".concat(weight, \" \").concat(size, \"px \").concat(font); // Then we draw the label background\n\n context.fillStyle = \"#FFF\";\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n context.shadowBlur = 8;\n context.shadowColor = \"#000\";\n var PADDING = 2;\n\n if (typeof data.label === \"string\") {\n var textWidth = context.measureText(data.label).width,\n boxWidth = Math.round(textWidth + 5),\n boxHeight = Math.round(size + 2 * PADDING),\n radius = Math.max(data.size, size / 2) + PADDING;\n var angleRadian = Math.asin(boxHeight / 2 / radius);\n var xDeltaCoord = Math.sqrt(Math.abs(Math.pow(radius, 2) - Math.pow(boxHeight / 2, 2)));\n context.beginPath();\n context.moveTo(data.x + xDeltaCoord, data.y + boxHeight / 2);\n context.lineTo(data.x + radius + boxWidth, data.y + boxHeight / 2);\n context.lineTo(data.x + radius + boxWidth, data.y - boxHeight / 2);\n context.lineTo(data.x + xDeltaCoord, data.y - boxHeight / 2);\n context.arc(data.x, data.y, radius, angleRadian, -angleRadian);\n context.closePath();\n context.fill();\n } else {\n context.beginPath();\n context.arc(data.x, data.y, data.size + PADDING, 0, Math.PI * 2);\n context.closePath();\n context.fill();\n }\n\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n context.shadowBlur = 0; // And finally we draw the label\n\n (0, label_1.default)(context, data, settings);\n}\n\nexports.default = drawHover;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction drawEdgeLabel(context, edgeData, sourceData, targetData, settings) {\n var size = settings.edgeLabelSize,\n font = settings.edgeLabelFont,\n weight = settings.edgeLabelWeight,\n color = settings.edgeLabelColor.attribute ? edgeData[settings.edgeLabelColor.attribute] || settings.edgeLabelColor.color || \"#000\" : settings.edgeLabelColor.color;\n var label = edgeData.label;\n if (!label) return;\n context.fillStyle = color;\n context.font = \"\".concat(weight, \" \").concat(size, \"px \").concat(font); // Computing positions without considering nodes sizes:\n\n var sSize = sourceData.size;\n var tSize = targetData.size;\n var sx = sourceData.x;\n var sy = sourceData.y;\n var tx = targetData.x;\n var ty = targetData.y;\n var cx = (sx + tx) / 2;\n var cy = (sy + ty) / 2;\n var dx = tx - sx;\n var dy = ty - sy;\n var d = Math.sqrt(dx * dx + dy * dy);\n if (d < sSize + tSize) return; // Adding nodes sizes:\n\n sx += dx * sSize / d;\n sy += dy * sSize / d;\n tx -= dx * tSize / d;\n ty -= dy * tSize / d;\n cx = (sx + tx) / 2;\n cy = (sy + ty) / 2;\n dx = tx - sx;\n dy = ty - sy;\n d = Math.sqrt(dx * dx + dy * dy); // Handling ellipsis\n\n var textLength = context.measureText(label).width;\n\n if (textLength > d) {\n var ellipsis = \"…\";\n label = label + ellipsis;\n textLength = context.measureText(label).width;\n\n while (textLength > d && label.length > 1) {\n label = label.slice(0, -2) + ellipsis;\n textLength = context.measureText(label).width;\n }\n\n if (label.length < 4) return;\n }\n\n var angle;\n\n if (dx > 0) {\n if (dy > 0) angle = Math.acos(dx / d);else angle = Math.asin(dy / d);\n } else {\n if (dy > 0) angle = Math.acos(dx / d) + Math.PI;else angle = Math.asin(dx / d) + Math.PI / 2;\n }\n\n context.save();\n context.translate(cx, cy);\n context.rotate(angle);\n context.fillText(label, -textLength / 2, edgeData.size / 2 + size);\n context.restore();\n}\n\nexports.default = drawEdgeLabel;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar utils_1 = require(\"../../../utils\");\n\nvar node_fast_vert_glsl_1 = __importDefault(require(\"../shaders/node.fast.vert.glsl.js\"));\n\nvar node_fast_frag_glsl_1 = __importDefault(require(\"../shaders/node.fast.frag.glsl.js\"));\n\nvar node_1 = require(\"./common/node\");\n\nvar POINTS = 1,\n ATTRIBUTES = 4;\n\nvar NodeFastProgram =\n/** @class */\nfunction (_super) {\n __extends(NodeFastProgram, _super);\n\n function NodeFastProgram(gl) {\n var _this = _super.call(this, gl, node_fast_vert_glsl_1.default, node_fast_frag_glsl_1.default, POINTS, ATTRIBUTES) || this;\n\n _this.bind();\n\n return _this;\n }\n\n NodeFastProgram.prototype.process = function (data, hidden, offset) {\n var array = this.array;\n var i = offset * POINTS * ATTRIBUTES;\n\n if (hidden) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n return;\n }\n\n var color = (0, utils_1.floatColor)(data.color);\n array[i++] = data.x;\n array[i++] = data.y;\n array[i++] = data.size;\n array[i] = color;\n };\n\n NodeFastProgram.prototype.render = function (params) {\n if (this.hasNothingToRender()) return;\n var gl = this.gl;\n var program = this.program;\n gl.useProgram(program);\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n };\n\n return NodeFastProgram;\n}(node_1.AbstractNodeProgram);\n\nexports.default = NodeFastProgram;","(function () {\n \"use strict\";\n\n var o = {\n d: function d(t, e) {\n for (var n in e) {\n o.o(e, n) && !o.o(t, n) && Object.defineProperty(t, n, {\n enumerable: !0,\n get: e[n]\n });\n }\n },\n o: function o(_o, t) {\n return Object.prototype.hasOwnProperty.call(_o, t);\n },\n r: function r(o) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(o, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(o, \"__esModule\", {\n value: !0\n });\n }\n },\n t = {};\n o.r(t), o.d(t, {\n default: function _default() {\n return e;\n }\n });\n var e = \"attribute vec2 a_position;\\nattribute float a_size;\\nattribute vec4 a_color;\\n\\nuniform float u_ratio;\\nuniform float u_scale;\\nuniform mat3 u_matrix;\\n\\nvarying vec4 v_color;\\nvarying float v_border;\\n\\nconst float bias = 255.0 / 254.0;\\n\\nvoid main() {\\n gl_Position = vec4(\\n (u_matrix * vec3(a_position, 1)).xy,\\n 0,\\n 1\\n );\\n\\n // Multiply the point size twice:\\n // - x SCALING_RATIO to correct the canvas scaling\\n // - x 2 to correct the formulae\\n gl_PointSize = a_size * u_ratio * u_scale * 2.0;\\n\\n v_border = (1.0 / u_ratio) * (0.5 / a_size);\\n\\n // Extract the color:\\n v_color = a_color;\\n v_color.a *= bias;\\n}\\n\";\n module.exports = t;\n})();","(function () {\n \"use strict\";\n\n var e = {\n d: function d(n, o) {\n for (var t in o) {\n e.o(o, t) && !e.o(n, t) && Object.defineProperty(n, t, {\n enumerable: !0,\n get: o[t]\n });\n }\n },\n o: function o(e, n) {\n return Object.prototype.hasOwnProperty.call(e, n);\n },\n r: function r(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }\n },\n n = {};\n e.r(n), e.d(n, {\n default: function _default() {\n return o;\n }\n });\n var o = \"precision mediump float;\\n\\nvarying vec4 v_color;\\nvarying float v_border;\\n\\nconst float radius = 0.5;\\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\\n\\nvoid main(void) {\\n vec2 m = gl_PointCoord - vec2(0.5, 0.5);\\n float dist = radius - length(m);\\n\\n float t = 0.0;\\n if (dist > v_border)\\n t = 1.0;\\n else if (dist > 0.0)\\n t = dist / v_border;\\n\\n gl_FragColor = mix(transparent, v_color, t);\\n}\\n\";\n module.exports = n;\n})();","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createNodeCompoundProgram = exports.AbstractNodeProgram = void 0;\n/**\n * Sigma.js WebGL Abstract Node Program\n * =====================================\n *\n * @module\n */\n\nvar program_1 = require(\"./program\");\n/**\n * Node Program class.\n *\n * @constructor\n */\n\n\nvar AbstractNodeProgram =\n/** @class */\nfunction (_super) {\n __extends(AbstractNodeProgram, _super);\n\n function AbstractNodeProgram(gl, vertexShaderSource, fragmentShaderSource, points, attributes) {\n var _this = _super.call(this, gl, vertexShaderSource, fragmentShaderSource, points, attributes) || this; // Locations\n\n\n _this.positionLocation = gl.getAttribLocation(_this.program, \"a_position\");\n _this.sizeLocation = gl.getAttribLocation(_this.program, \"a_size\");\n _this.colorLocation = gl.getAttribLocation(_this.program, \"a_color\"); // Uniform Location\n\n var matrixLocation = gl.getUniformLocation(_this.program, \"u_matrix\");\n if (matrixLocation === null) throw new Error(\"AbstractNodeProgram: error while getting matrixLocation\");\n _this.matrixLocation = matrixLocation;\n var ratioLocation = gl.getUniformLocation(_this.program, \"u_ratio\");\n if (ratioLocation === null) throw new Error(\"AbstractNodeProgram: error while getting ratioLocation\");\n _this.ratioLocation = ratioLocation;\n var scaleLocation = gl.getUniformLocation(_this.program, \"u_scale\");\n if (scaleLocation === null) throw new Error(\"AbstractNodeProgram: error while getting scaleLocation\");\n _this.scaleLocation = scaleLocation;\n return _this;\n }\n\n AbstractNodeProgram.prototype.bind = function () {\n var gl = this.gl;\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.sizeLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 0);\n gl.vertexAttribPointer(this.sizeLocation, 1, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(this.colorLocation, 4, gl.UNSIGNED_BYTE, true, this.attributes * Float32Array.BYTES_PER_ELEMENT, 12);\n };\n\n return AbstractNodeProgram;\n}(program_1.AbstractProgram);\n\nexports.AbstractNodeProgram = AbstractNodeProgram;\n/**\n * Helper function combining two or more programs into a single compound one.\n * Note that this is more a quick & easy way to combine program than a really\n * performant option. More performant programs can be written entirely.\n *\n * @param {array} programClasses - Program classes to combine.\n * @return {function}\n */\n\nfunction createNodeCompoundProgram(programClasses) {\n return (\n /** @class */\n function () {\n function NodeCompoundProgram(gl, renderer) {\n this.programs = programClasses.map(function (ProgramClass) {\n return new ProgramClass(gl, renderer);\n });\n }\n\n NodeCompoundProgram.prototype.bufferData = function () {\n this.programs.forEach(function (program) {\n return program.bufferData();\n });\n };\n\n NodeCompoundProgram.prototype.allocate = function (capacity) {\n this.programs.forEach(function (program) {\n return program.allocate(capacity);\n });\n };\n\n NodeCompoundProgram.prototype.bind = function () {// nothing todo, it's already done in each program constructor\n };\n\n NodeCompoundProgram.prototype.render = function (params) {\n this.programs.forEach(function (program) {\n program.bind();\n program.bufferData();\n program.render(params);\n });\n };\n\n NodeCompoundProgram.prototype.process = function (data, hidden, offset) {\n this.programs.forEach(function (program) {\n return program.process(data, hidden, offset);\n });\n };\n\n return NodeCompoundProgram;\n }()\n );\n}\n\nexports.createNodeCompoundProgram = createNodeCompoundProgram;","\"use strict\";\n/**\n * Sigma.js Shader Utils\n * ======================\n *\n * Code used to load sigma's shaders.\n * @module\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.loadProgram = exports.loadFragmentShader = exports.loadVertexShader = void 0;\n/**\n * Function used to load a shader.\n */\n\nfunction loadShader(type, gl, source) {\n var glType = type === \"VERTEX\" ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER; // Creating the shader\n\n var shader = gl.createShader(glType);\n\n if (shader === null) {\n throw new Error(\"loadShader: error while creating the shader\");\n } // Loading source\n\n\n gl.shaderSource(shader, source); // Compiling the shader\n\n gl.compileShader(shader); // Retrieving compilation status\n\n var successfullyCompiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); // Throwing if something went awry\n\n if (!successfullyCompiled) {\n var infoLog = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Error(\"loadShader: error while compiling the shader:\\n\".concat(infoLog, \"\\n\").concat(source));\n }\n\n return shader;\n}\n\nfunction loadVertexShader(gl, source) {\n return loadShader(\"VERTEX\", gl, source);\n}\n\nexports.loadVertexShader = loadVertexShader;\n\nfunction loadFragmentShader(gl, source) {\n return loadShader(\"FRAGMENT\", gl, source);\n}\n\nexports.loadFragmentShader = loadFragmentShader;\n/**\n * Function used to load a program.\n */\n\nfunction loadProgram(gl, shaders) {\n var program = gl.createProgram();\n\n if (program === null) {\n throw new Error(\"loadProgram: error while creating the program.\");\n }\n\n var i, l; // Attaching the shaders\n\n for (i = 0, l = shaders.length; i < l; i++) {\n gl.attachShader(program, shaders[i]);\n }\n\n gl.linkProgram(program); // Checking status\n\n var successfullyLinked = gl.getProgramParameter(program, gl.LINK_STATUS);\n\n if (!successfullyLinked) {\n gl.deleteProgram(program);\n throw new Error(\"loadProgram: error while linking the program.\");\n }\n\n return program;\n}\n\nexports.loadProgram = loadProgram;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Sigma.js WebGL Renderer Edge Program\n * =====================================\n *\n * Program rendering edges as thick lines using four points translated\n * orthogonally from the source & target's centers by half thickness.\n *\n * Rendering two triangles by using only four points is made possible through\n * the use of indices.\n *\n * This method should be faster than the 6 points / 2 triangles approach and\n * should handle thickness better than with gl.LINES.\n *\n * This version of the shader balances geometry computation evenly between\n * the CPU & GPU (normals are computed on the CPU side).\n * @module\n */\n\nvar utils_1 = require(\"../../../utils\");\n\nvar edge_vert_glsl_1 = __importDefault(require(\"../shaders/edge.vert.glsl.js\"));\n\nvar edge_frag_glsl_1 = __importDefault(require(\"../shaders/edge.frag.glsl.js\"));\n\nvar edge_1 = require(\"./common/edge\");\n\nvar POINTS = 4,\n ATTRIBUTES = 5,\n STRIDE = POINTS * ATTRIBUTES;\n\nvar EdgeProgram =\n/** @class */\nfunction (_super) {\n __extends(EdgeProgram, _super);\n\n function EdgeProgram(gl) {\n var _this = _super.call(this, gl, edge_vert_glsl_1.default, edge_frag_glsl_1.default, POINTS, ATTRIBUTES) || this; // Initializing indices buffer\n\n\n var indicesBuffer = gl.createBuffer();\n if (indicesBuffer === null) throw new Error(\"EdgeProgram: error while creating indicesBuffer\");\n _this.indicesBuffer = indicesBuffer; // Locations\n\n _this.positionLocation = gl.getAttribLocation(_this.program, \"a_position\");\n _this.colorLocation = gl.getAttribLocation(_this.program, \"a_color\");\n _this.normalLocation = gl.getAttribLocation(_this.program, \"a_normal\");\n var matrixLocation = gl.getUniformLocation(_this.program, \"u_matrix\");\n if (matrixLocation === null) throw new Error(\"EdgeProgram: error while getting matrixLocation\");\n _this.matrixLocation = matrixLocation;\n var correctionRatioLocation = gl.getUniformLocation(_this.program, \"u_correctionRatio\");\n if (correctionRatioLocation === null) throw new Error(\"EdgeProgram: error while getting correctionRatioLocation\");\n _this.correctionRatioLocation = correctionRatioLocation;\n var sqrtZoomRatioLocation = gl.getUniformLocation(_this.program, \"u_sqrtZoomRatio\");\n if (sqrtZoomRatioLocation === null) throw new Error(\"EdgeProgram: error while getting sqrtZoomRatioLocation\");\n _this.sqrtZoomRatioLocation = sqrtZoomRatioLocation; // Enabling the OES_element_index_uint extension\n // NOTE: on older GPUs, this means that really large graphs won't\n // have all their edges rendered. But it seems that the\n // `OES_element_index_uint` is quite everywhere so we'll handle\n // the potential issue if it really arises.\n // NOTE: when using webgl2, the extension is enabled by default\n\n _this.canUse32BitsIndices = (0, utils_1.canUse32BitsIndices)(gl);\n _this.IndicesArray = _this.canUse32BitsIndices ? Uint32Array : Uint16Array;\n _this.indicesArray = new _this.IndicesArray();\n _this.indicesType = _this.canUse32BitsIndices ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;\n\n _this.bind();\n\n return _this;\n }\n\n EdgeProgram.prototype.bind = function () {\n var gl = this.gl;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); // Bindings\n\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.normalLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 0);\n gl.vertexAttribPointer(this.normalLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(this.colorLocation, 4, gl.UNSIGNED_BYTE, true, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 16);\n };\n\n EdgeProgram.prototype.computeIndices = function () {\n var l = this.array.length / ATTRIBUTES;\n var size = l + l / 2;\n var indices = new this.IndicesArray(size);\n\n for (var i = 0, c = 0; i < l; i += 4) {\n indices[c++] = i;\n indices[c++] = i + 1;\n indices[c++] = i + 2;\n indices[c++] = i + 2;\n indices[c++] = i + 1;\n indices[c++] = i + 3;\n }\n\n this.indicesArray = indices;\n };\n\n EdgeProgram.prototype.bufferData = function () {\n _super.prototype.bufferData.call(this); // Indices data\n\n\n var gl = this.gl;\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indicesArray, gl.STATIC_DRAW);\n };\n\n EdgeProgram.prototype.process = function (sourceData, targetData, data, hidden, offset) {\n if (hidden) {\n for (var i_1 = offset * STRIDE, l = i_1 + STRIDE; i_1 < l; i_1++) {\n this.array[i_1] = 0;\n }\n\n return;\n }\n\n var thickness = data.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n color = (0, utils_1.floatColor)(data.color); // Computing normals\n\n var dx = x2 - x1,\n dy = y2 - y1;\n var len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n var i = POINTS * ATTRIBUTES * offset;\n var array = this.array; // First point\n\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color; // First point flipped\n\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color; // Second point\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color; // Second point flipped\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i] = color;\n };\n\n EdgeProgram.prototype.render = function (params) {\n if (this.hasNothingToRender()) return;\n var gl = this.gl;\n var program = this.program;\n gl.useProgram(program);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio); // Drawing:\n\n gl.drawElements(gl.TRIANGLES, this.indicesArray.length, this.indicesType, 0);\n };\n\n return EdgeProgram;\n}(edge_1.AbstractEdgeProgram);\n\nexports.default = EdgeProgram;","(function () {\n \"use strict\";\n\n var e = {\n d: function d(n, o) {\n for (var t in o) {\n e.o(o, t) && !e.o(n, t) && Object.defineProperty(n, t, {\n enumerable: !0,\n get: o[t]\n });\n }\n },\n o: function o(e, n) {\n return Object.prototype.hasOwnProperty.call(e, n);\n },\n r: function r(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }\n },\n n = {};\n e.r(n), e.d(n, {\n default: function _default() {\n return o;\n }\n });\n var o = 'attribute vec4 a_color;\\nattribute vec2 a_normal;\\nattribute vec2 a_position;\\n\\nuniform mat3 u_matrix;\\nuniform float u_sqrtZoomRatio;\\nuniform float u_correctionRatio;\\n\\nvarying vec4 v_color;\\nvarying vec2 v_normal;\\nvarying float v_thickness;\\n\\nconst float minThickness = 1.7;\\nconst float bias = 255.0 / 254.0;\\n\\nvoid main() {\\n float normalLength = length(a_normal);\\n vec2 unitNormal = a_normal / normalLength;\\n\\n // We require edges to be at least `minThickness` pixels thick *on screen*\\n // (so we need to compensate the SQRT zoom ratio):\\n float pixelsThickness = max(normalLength, minThickness * u_sqrtZoomRatio);\\n\\n // Then, we need to retrieve the normalized thickness of the edge in the WebGL\\n // referential (in a ([0, 1], [0, 1]) space), using our \"magic\" correction\\n // ratio:\\n float webGLThickness = pixelsThickness * u_correctionRatio;\\n\\n // Finally, we adapt the edge thickness to the \"SQRT rule\" in sigma (so that\\n // items are not too big when zoomed in, and not too small when zoomed out).\\n // The exact computation should be `adapted = value * zoom / sqrt(zoom)`, but\\n // it\\'s simpler like this:\\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\\n\\n // Here is the proper position of the vertex\\n gl_Position = vec4((u_matrix * vec3(a_position + unitNormal * adaptedWebGLThickness, 1)).xy, 0, 1);\\n\\n // For the fragment shader though, we need a thickness that takes the \"magic\"\\n // correction ratio into account (as in webGLThickness), but so that the\\n // antialiasint effect does not depend on the zoom level. So here\\'s yet\\n // another thickness version:\\n v_thickness = webGLThickness / u_sqrtZoomRatio;\\n\\n v_normal = unitNormal;\\n v_color = a_color;\\n v_color.a *= bias;\\n}\\n';\n module.exports = n;\n})();","\"use strict\";\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Sigma.js WebGL Renderer Edge Arrow Program\n * ===========================================\n *\n * Compound program rendering edges as an arrow from the source to the target.\n * @module\n */\n\nvar edge_1 = require(\"./common/edge\");\n\nvar edge_arrowHead_1 = __importDefault(require(\"./edge.arrowHead\"));\n\nvar edge_clamped_1 = __importDefault(require(\"./edge.clamped\"));\n\nvar EdgeArrowProgram = (0, edge_1.createEdgeCompoundProgram)([edge_clamped_1.default, edge_arrowHead_1.default]);\nexports.default = EdgeArrowProgram;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar utils_1 = require(\"../../../utils\");\n\nvar edge_arrowHead_vert_glsl_1 = __importDefault(require(\"../shaders/edge.arrowHead.vert.glsl.js\"));\n\nvar edge_arrowHead_frag_glsl_1 = __importDefault(require(\"../shaders/edge.arrowHead.frag.glsl.js\"));\n\nvar edge_1 = require(\"./common/edge\");\n\nvar POINTS = 3,\n ATTRIBUTES = 9,\n STRIDE = POINTS * ATTRIBUTES;\n\nvar EdgeArrowHeadProgram =\n/** @class */\nfunction (_super) {\n __extends(EdgeArrowHeadProgram, _super);\n\n function EdgeArrowHeadProgram(gl) {\n var _this = _super.call(this, gl, edge_arrowHead_vert_glsl_1.default, edge_arrowHead_frag_glsl_1.default, POINTS, ATTRIBUTES) || this; // Locations\n\n\n _this.positionLocation = gl.getAttribLocation(_this.program, \"a_position\");\n _this.colorLocation = gl.getAttribLocation(_this.program, \"a_color\");\n _this.normalLocation = gl.getAttribLocation(_this.program, \"a_normal\");\n _this.radiusLocation = gl.getAttribLocation(_this.program, \"a_radius\");\n _this.barycentricLocation = gl.getAttribLocation(_this.program, \"a_barycentric\"); // Uniform locations\n\n var matrixLocation = gl.getUniformLocation(_this.program, \"u_matrix\");\n if (matrixLocation === null) throw new Error(\"EdgeArrowHeadProgram: error while getting matrixLocation\");\n _this.matrixLocation = matrixLocation;\n var sqrtZoomRatioLocation = gl.getUniformLocation(_this.program, \"u_sqrtZoomRatio\");\n if (sqrtZoomRatioLocation === null) throw new Error(\"EdgeArrowHeadProgram: error while getting sqrtZoomRatioLocation\");\n _this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n var correctionRatioLocation = gl.getUniformLocation(_this.program, \"u_correctionRatio\");\n if (correctionRatioLocation === null) throw new Error(\"EdgeArrowHeadProgram: error while getting correctionRatioLocation\");\n _this.correctionRatioLocation = correctionRatioLocation;\n\n _this.bind();\n\n return _this;\n }\n\n EdgeArrowHeadProgram.prototype.bind = function () {\n var gl = this.gl; // Bindings\n\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.normalLocation);\n gl.enableVertexAttribArray(this.radiusLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.enableVertexAttribArray(this.barycentricLocation);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 0);\n gl.vertexAttribPointer(this.normalLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(this.radiusLocation, 1, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 16);\n gl.vertexAttribPointer(this.colorLocation, 4, gl.UNSIGNED_BYTE, true, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 20); // TODO: maybe we can optimize here by packing this in a bit mask\n\n gl.vertexAttribPointer(this.barycentricLocation, 3, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 24);\n };\n\n EdgeArrowHeadProgram.prototype.computeIndices = function () {// nothing to do\n };\n\n EdgeArrowHeadProgram.prototype.process = function (sourceData, targetData, data, hidden, offset) {\n if (hidden) {\n for (var i_1 = offset * STRIDE, l = i_1 + STRIDE; i_1 < l; i_1++) {\n this.array[i_1] = 0;\n }\n\n return;\n }\n\n var thickness = data.size || 1,\n radius = targetData.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n color = (0, utils_1.floatColor)(data.color); // Computing normals\n\n var dx = x2 - x1,\n dy = y2 - y1;\n var len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n var i = POINTS * ATTRIBUTES * offset;\n var array = this.array; // First point\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 1;\n array[i++] = 0;\n array[i++] = 0; // Second point\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 1;\n array[i++] = 0; // Third point\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 0;\n array[i] = 1;\n };\n\n EdgeArrowHeadProgram.prototype.render = function (params) {\n if (this.hasNothingToRender()) return;\n var gl = this.gl;\n var program = this.program;\n gl.useProgram(program); // Binding uniforms\n\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio); // Drawing:\n\n gl.drawArrays(gl.TRIANGLES, 0, this.array.length / ATTRIBUTES);\n };\n\n return EdgeArrowHeadProgram;\n}(edge_1.AbstractEdgeProgram);\n\nexports.default = EdgeArrowHeadProgram;","(function () {\n \"use strict\";\n\n var a = {\n d: function d(e, t) {\n for (var o in t) {\n a.o(t, o) && !a.o(e, o) && Object.defineProperty(e, o, {\n enumerable: !0,\n get: t[o]\n });\n }\n },\n o: function o(a, e) {\n return Object.prototype.hasOwnProperty.call(a, e);\n },\n r: function r(a) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(a, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(a, \"__esModule\", {\n value: !0\n });\n }\n },\n e = {};\n a.r(e), a.d(e, {\n default: function _default() {\n return t;\n }\n });\n var t = \"attribute vec2 a_position;\\nattribute vec2 a_normal;\\nattribute float a_radius;\\nattribute vec4 a_color;\\nattribute vec3 a_barycentric;\\n\\nuniform mat3 u_matrix;\\nuniform float u_sqrtZoomRatio;\\nuniform float u_correctionRatio;\\n\\nvarying vec4 v_color;\\n\\nconst float minThickness = 1.7;\\nconst float bias = 255.0 / 254.0;\\nconst float arrowHeadWidthLengthRatio = 0.66;\\nconst float arrowHeadLengthThicknessRatio = 2.5;\\n\\nvoid main() {\\n float normalLength = length(a_normal);\\n vec2 unitNormal = a_normal / normalLength;\\n\\n // These first computations are taken from edge.vert.glsl and\\n // edge.clamped.vert.glsl. Please read it to get better comments on what's\\n // happening:\\n float pixelsThickness = max(normalLength, minThickness * u_sqrtZoomRatio);\\n float webGLThickness = pixelsThickness * u_correctionRatio;\\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\\n float adaptedWebGLNodeRadius = a_radius * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\\n float adaptedWebGLArrowHeadLength = adaptedWebGLThickness * 2.0 * arrowHeadLengthThicknessRatio;\\n float adaptedWebGLArrowHeadHalfWidth = adaptedWebGLArrowHeadLength * arrowHeadWidthLengthRatio / 2.0;\\n\\n float da = a_barycentric.x;\\n float db = a_barycentric.y;\\n float dc = a_barycentric.z;\\n\\n vec2 delta = vec2(\\n da * (adaptedWebGLNodeRadius * unitNormal.y)\\n + db * ((adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength) * unitNormal.y + adaptedWebGLArrowHeadHalfWidth * unitNormal.x)\\n + dc * ((adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength) * unitNormal.y - adaptedWebGLArrowHeadHalfWidth * unitNormal.x),\\n\\n da * (-adaptedWebGLNodeRadius * unitNormal.x)\\n + db * (-(adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength) * unitNormal.x + adaptedWebGLArrowHeadHalfWidth * unitNormal.y)\\n + dc * (-(adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength) * unitNormal.x - adaptedWebGLArrowHeadHalfWidth * unitNormal.y)\\n );\\n\\n vec2 position = (u_matrix * vec3(a_position + delta, 1)).xy;\\n\\n gl_Position = vec4(position, 0, 1);\\n\\n // Extract the color:\\n v_color = a_color;\\n v_color.a *= bias;\\n}\\n\";\n module.exports = e;\n})();","(function () {\n \"use strict\";\n\n var e = {\n d: function d(o, r) {\n for (var t in r) {\n e.o(r, t) && !e.o(o, t) && Object.defineProperty(o, t, {\n enumerable: !0,\n get: r[t]\n });\n }\n },\n o: function o(e, _o) {\n return Object.prototype.hasOwnProperty.call(e, _o);\n },\n r: function r(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }\n },\n o = {};\n e.r(o), e.d(o, {\n default: function _default() {\n return r;\n }\n });\n var r = \"precision mediump float;\\n\\nvarying vec4 v_color;\\n\\nvoid main(void) {\\n gl_FragColor = v_color;\\n}\\n\";\n module.exports = o;\n})();","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar edge_1 = require(\"./common/edge\");\n\nvar utils_1 = require(\"../../../utils\");\n\nvar edge_clamped_vert_glsl_1 = __importDefault(require(\"../shaders/edge.clamped.vert.glsl.js\"));\n\nvar edge_frag_glsl_1 = __importDefault(require(\"../shaders/edge.frag.glsl.js\"));\n\nvar POINTS = 4,\n ATTRIBUTES = 6,\n STRIDE = POINTS * ATTRIBUTES;\n\nvar EdgeClampedProgram =\n/** @class */\nfunction (_super) {\n __extends(EdgeClampedProgram, _super);\n\n function EdgeClampedProgram(gl) {\n var _this = _super.call(this, gl, edge_clamped_vert_glsl_1.default, edge_frag_glsl_1.default, POINTS, ATTRIBUTES) || this; // Initializing indices buffer\n\n\n var indicesBuffer = gl.createBuffer();\n if (indicesBuffer === null) throw new Error(\"EdgeClampedProgram: error while getting resolutionLocation\");\n _this.indicesBuffer = indicesBuffer; // Locations:\n\n _this.positionLocation = gl.getAttribLocation(_this.program, \"a_position\");\n _this.colorLocation = gl.getAttribLocation(_this.program, \"a_color\");\n _this.normalLocation = gl.getAttribLocation(_this.program, \"a_normal\");\n _this.radiusLocation = gl.getAttribLocation(_this.program, \"a_radius\"); // Uniform locations\n\n var matrixLocation = gl.getUniformLocation(_this.program, \"u_matrix\");\n if (matrixLocation === null) throw new Error(\"EdgeClampedProgram: error while getting matrixLocation\");\n _this.matrixLocation = matrixLocation;\n var sqrtZoomRatioLocation = gl.getUniformLocation(_this.program, \"u_sqrtZoomRatio\");\n if (sqrtZoomRatioLocation === null) throw new Error(\"EdgeClampedProgram: error while getting cameraRatioLocation\");\n _this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n var correctionRatioLocation = gl.getUniformLocation(_this.program, \"u_correctionRatio\");\n if (correctionRatioLocation === null) throw new Error(\"EdgeClampedProgram: error while getting viewportRatioLocation\");\n _this.correctionRatioLocation = correctionRatioLocation; // Enabling the OES_element_index_uint extension\n // NOTE: on older GPUs, this means that really large graphs won't\n // have all their edges rendered. But it seems that the\n // `OES_element_index_uint` is quite everywhere so we'll handle\n // the potential issue if it really arises.\n // NOTE: when using webgl2, the extension is enabled by default\n\n _this.canUse32BitsIndices = (0, utils_1.canUse32BitsIndices)(gl);\n _this.IndicesArray = _this.canUse32BitsIndices ? Uint32Array : Uint16Array;\n _this.indicesArray = new _this.IndicesArray();\n _this.indicesType = _this.canUse32BitsIndices ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;\n\n _this.bind();\n\n return _this;\n }\n\n EdgeClampedProgram.prototype.bind = function () {\n var gl = this.gl;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); // Bindings\n\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.normalLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.enableVertexAttribArray(this.radiusLocation);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 0);\n gl.vertexAttribPointer(this.normalLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(this.colorLocation, 4, gl.UNSIGNED_BYTE, true, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 16);\n gl.vertexAttribPointer(this.radiusLocation, 1, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 20);\n };\n\n EdgeClampedProgram.prototype.process = function (sourceData, targetData, data, hidden, offset) {\n if (hidden) {\n for (var i_1 = offset * STRIDE, l = i_1 + STRIDE; i_1 < l; i_1++) {\n this.array[i_1] = 0;\n }\n\n return;\n }\n\n var thickness = data.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n radius = targetData.size || 1,\n color = (0, utils_1.floatColor)(data.color); // Computing normals\n\n var dx = x2 - x1,\n dy = y2 - y1;\n var len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n var i = POINTS * ATTRIBUTES * offset;\n var array = this.array; // First point\n\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = 0; // First point flipped\n\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i++] = 0; // Second point\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = radius; // Second point flipped\n\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i] = -radius;\n };\n\n EdgeClampedProgram.prototype.computeIndices = function () {\n var l = this.array.length / ATTRIBUTES;\n var size = l + l / 2;\n var indices = new this.IndicesArray(size);\n\n for (var i = 0, c = 0; i < l; i += 4) {\n indices[c++] = i;\n indices[c++] = i + 1;\n indices[c++] = i + 2;\n indices[c++] = i + 2;\n indices[c++] = i + 1;\n indices[c++] = i + 3;\n }\n\n this.indicesArray = indices;\n };\n\n EdgeClampedProgram.prototype.bufferData = function () {\n _super.prototype.bufferData.call(this); // Indices data\n\n\n var gl = this.gl;\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indicesArray, gl.STATIC_DRAW);\n };\n\n EdgeClampedProgram.prototype.render = function (params) {\n if (this.hasNothingToRender()) return;\n var gl = this.gl;\n var program = this.program;\n gl.useProgram(program); // Binding uniforms\n\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio); // Drawing:\n\n gl.drawElements(gl.TRIANGLES, this.indicesArray.length, this.indicesType, 0);\n };\n\n return EdgeClampedProgram;\n}(edge_1.AbstractEdgeProgram);\n\nexports.default = EdgeClampedProgram;","(function () {\n \"use strict\";\n\n var e = {\n d: function d(o, n) {\n for (var t in n) {\n e.o(n, t) && !e.o(o, t) && Object.defineProperty(o, t, {\n enumerable: !0,\n get: n[t]\n });\n }\n },\n o: function o(e, _o) {\n return Object.prototype.hasOwnProperty.call(e, _o);\n },\n r: function r(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }\n },\n o = {};\n e.r(o), e.d(o, {\n default: function _default() {\n return n;\n }\n });\n var n = \"attribute vec4 a_color;\\nattribute vec2 a_normal;\\nattribute vec2 a_position;\\nattribute float a_radius;\\n\\nuniform mat3 u_matrix;\\nuniform float u_sqrtZoomRatio;\\nuniform float u_correctionRatio;\\n\\nvarying vec4 v_color;\\nvarying vec2 v_normal;\\nvarying float v_thickness;\\n\\nconst float minThickness = 1.7;\\nconst float bias = 255.0 / 254.0;\\nconst float arrowHeadLengthThicknessRatio = 2.5;\\n\\nvoid main() {\\n float normalLength = length(a_normal);\\n vec2 unitNormal = a_normal / normalLength;\\n\\n // These first computations are taken from edge.vert.glsl. Please read it to\\n // get better comments on what's happening:\\n float pixelsThickness = max(normalLength, minThickness * u_sqrtZoomRatio);\\n float webGLThickness = pixelsThickness * u_correctionRatio;\\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\\n\\n // Here, we move the point to leave space for the arrow head:\\n float direction = sign(a_radius);\\n float adaptedWebGLNodeRadius = direction * a_radius * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\\n float adaptedWebGLArrowHeadLength = adaptedWebGLThickness * 2.0 * arrowHeadLengthThicknessRatio;\\n\\n vec2 compensationVector = vec2(-direction * unitNormal.y, direction * unitNormal.x) * (adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength);\\n\\n // Here is the proper position of the vertex\\n gl_Position = vec4((u_matrix * vec3(a_position + unitNormal * adaptedWebGLThickness + compensationVector, 1)).xy, 0, 1);\\n\\n v_thickness = webGLThickness / u_sqrtZoomRatio;\\n\\n v_normal = unitNormal;\\n v_color = a_color;\\n v_color.a *= bias;\\n}\\n\";\n module.exports = o;\n})();","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\n\nvar __importStar = this && this.__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n};\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar captor_1 = __importStar(require(\"./captor\"));\n\nvar DRAG_TIMEOUT = 200;\nvar TOUCH_INERTIA_RATIO = 3;\nvar TOUCH_INERTIA_DURATION = 200;\n/**\n * Touch captor class.\n *\n * @constructor\n */\n\nvar TouchCaptor =\n/** @class */\nfunction (_super) {\n __extends(TouchCaptor, _super);\n\n function TouchCaptor(container, renderer) {\n var _this = _super.call(this, container, renderer) || this;\n\n _this.enabled = true;\n _this.isMoving = false;\n _this.touchMode = 0; // number of touches down\n // Binding methods:\n\n _this.handleStart = _this.handleStart.bind(_this);\n _this.handleLeave = _this.handleLeave.bind(_this);\n _this.handleMove = _this.handleMove.bind(_this); // Binding events\n\n container.addEventListener(\"touchstart\", _this.handleStart, false);\n container.addEventListener(\"touchend\", _this.handleLeave, false);\n container.addEventListener(\"touchcancel\", _this.handleLeave, false);\n container.addEventListener(\"touchmove\", _this.handleMove, false);\n return _this;\n }\n\n TouchCaptor.prototype.kill = function () {\n var container = this.container;\n container.removeEventListener(\"touchstart\", this.handleStart);\n container.removeEventListener(\"touchend\", this.handleLeave);\n container.removeEventListener(\"touchcancel\", this.handleLeave);\n container.removeEventListener(\"touchmove\", this.handleMove);\n };\n\n TouchCaptor.prototype.getDimensions = function () {\n return {\n width: this.container.offsetWidth,\n height: this.container.offsetHeight\n };\n };\n\n TouchCaptor.prototype.dispatchRelatedMouseEvent = function (type, e, position, emitter) {\n var mousePosition = position || (0, captor_1.getPosition)(e.touches[0], this.container);\n var mouseEvent = new MouseEvent(type, {\n clientX: mousePosition.x,\n clientY: mousePosition.y,\n altKey: e.altKey,\n ctrlKey: e.ctrlKey\n });\n (emitter || this.container).dispatchEvent(mouseEvent);\n };\n\n TouchCaptor.prototype.handleStart = function (e) {\n var _this = this;\n\n if (!this.enabled) return; // Prevent default to avoid default browser behaviors...\n\n e.preventDefault(); // ...but simulate mouse behavior anyway, to get the MouseCaptor working as well:\n\n if (e.touches.length === 1) this.dispatchRelatedMouseEvent(\"mousedown\", e);\n var touches = (0, captor_1.getTouchesArray)(e.touches);\n this.isMoving = true;\n this.touchMode = touches.length;\n this.startCameraState = this.renderer.getCamera().getState();\n this.startTouchesPositions = touches.map(function (touch) {\n return (0, captor_1.getPosition)(touch, _this.container);\n });\n this.lastTouchesPositions = this.startTouchesPositions; // When there are two touches down, let's record distance and angle as well:\n\n if (this.touchMode === 2) {\n var _a = __read(this.startTouchesPositions, 2),\n _b = _a[0],\n x0 = _b.x,\n y0 = _b.y,\n _c = _a[1],\n x1 = _c.x,\n y1 = _c.y;\n\n this.startTouchesAngle = Math.atan2(y1 - y0, x1 - x0);\n this.startTouchesDistance = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));\n }\n\n this.emit(\"touchdown\", (0, captor_1.getTouchCoords)(e, this.container));\n };\n\n TouchCaptor.prototype.handleLeave = function (e) {\n if (!this.enabled) return; // Prevent default to avoid default browser behaviors...\n\n e.preventDefault(); // ...but simulate mouse behavior anyway, to get the MouseCaptor working as well:\n\n if (e.touches.length === 0 && this.lastTouchesPositions && this.lastTouchesPositions.length) {\n this.dispatchRelatedMouseEvent(\"mouseup\", e, this.lastTouchesPositions[0], document);\n this.dispatchRelatedMouseEvent(\"click\", e, this.lastTouchesPositions[0]);\n }\n\n if (this.movingTimeout) {\n this.isMoving = false;\n clearTimeout(this.movingTimeout);\n }\n\n switch (this.touchMode) {\n case 2:\n if (e.touches.length === 1) {\n this.handleStart(e);\n e.preventDefault();\n break;\n }\n\n /* falls through */\n\n case 1:\n // TODO\n // Dispatch event\n if (this.isMoving) {\n var camera = this.renderer.getCamera();\n var cameraState = camera.getState(),\n previousCameraState = camera.getPreviousState() || {\n x: 0,\n y: 0\n };\n camera.animate({\n x: cameraState.x + TOUCH_INERTIA_RATIO * (cameraState.x - previousCameraState.x),\n y: cameraState.y + TOUCH_INERTIA_RATIO * (cameraState.y - previousCameraState.y)\n }, {\n duration: TOUCH_INERTIA_DURATION,\n easing: \"quadraticOut\"\n });\n }\n\n this.isMoving = false;\n this.touchMode = 0;\n break;\n }\n\n this.emit(\"touchup\", (0, captor_1.getTouchCoords)(e, this.container));\n };\n\n TouchCaptor.prototype.handleMove = function (e) {\n var _a;\n\n var _this = this;\n\n if (!this.enabled) return; // Prevent default to avoid default browser behaviors...\n\n e.preventDefault(); // ...but simulate mouse behavior anyway, to get the MouseCaptor working as well:\n\n if (e.touches.length === 1) this.dispatchRelatedMouseEvent(\"mousemove\", e);\n var camera = this.renderer.getCamera();\n var startCameraState = this.startCameraState;\n var touches = (0, captor_1.getTouchesArray)(e.touches);\n var touchesPositions = touches.map(function (touch) {\n return (0, captor_1.getPosition)(touch, _this.container);\n });\n this.lastTouchesPositions = touchesPositions;\n this.isMoving = true;\n if (this.movingTimeout) clearTimeout(this.movingTimeout);\n this.movingTimeout = window.setTimeout(function () {\n _this.isMoving = false;\n }, DRAG_TIMEOUT);\n\n switch (this.touchMode) {\n case 1:\n {\n var _b = this.renderer.viewportToFramedGraph((this.startTouchesPositions || [])[0]),\n xStart = _b.x,\n yStart = _b.y;\n\n var _c = this.renderer.viewportToFramedGraph(touchesPositions[0]),\n x = _c.x,\n y = _c.y;\n\n camera.setState({\n x: startCameraState.x + xStart - x,\n y: startCameraState.y + yStart - y\n });\n break;\n }\n\n case 2:\n {\n /**\n * Here is the thinking here:\n *\n * 1. We can find the new angle and ratio, by comparing the vector from \"touch one\" to \"touch two\" at the start\n * of the d'n'd and now\n *\n * 2. We can use `Camera#viewportToGraph` inside formula to retrieve the new camera position, using the graph\n * position of a touch at the beginning of the d'n'd (using `startCamera.viewportToGraph`) and the viewport\n * position of this same touch now\n */\n var newCameraState = {};\n var _d = touchesPositions[0],\n x0 = _d.x,\n y0 = _d.y;\n var _e = touchesPositions[1],\n x1 = _e.x,\n y1 = _e.y;\n var angleDiff = Math.atan2(y1 - y0, x1 - x0) - this.startTouchesAngle;\n var ratioDiff = Math.hypot(y1 - y0, x1 - x0) / this.startTouchesDistance; // 1.\n\n var newRatio = camera.getBoundedRatio(startCameraState.ratio / ratioDiff);\n newCameraState.ratio = newRatio;\n newCameraState.angle = startCameraState.angle + angleDiff; // 2.\n\n var dimensions = this.getDimensions();\n var touchGraphPosition = this.renderer.viewportToFramedGraph((this.startTouchesPositions || [])[0], {\n cameraState: startCameraState\n });\n var smallestDimension = Math.min(dimensions.width, dimensions.height);\n var dx = smallestDimension / dimensions.width;\n var dy = smallestDimension / dimensions.height;\n var ratio = newRatio / smallestDimension; // Align with center of the graph:\n\n var x = x0 - smallestDimension / 2 / dx;\n var y = y0 - smallestDimension / 2 / dy; // Rotate:\n\n _a = __read([x * Math.cos(-newCameraState.angle) - y * Math.sin(-newCameraState.angle), y * Math.cos(-newCameraState.angle) + x * Math.sin(-newCameraState.angle)], 2), x = _a[0], y = _a[1];\n newCameraState.x = touchGraphPosition.x - x * ratio;\n newCameraState.y = touchGraphPosition.y + y * ratio;\n camera.setState(newCameraState);\n break;\n }\n }\n\n this.emit(\"touchmove\", (0, captor_1.getTouchCoords)(e, this.container));\n };\n\n return TouchCaptor;\n}(captor_1.default);\n\nexports.default = TouchCaptor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.doEdgeCollideWithPoint = exports.isPixelColored = void 0;\n/**\n * This helper returns true is the pixel at (x,y) in the given WebGL context is\n * colored, and false else.\n */\n\nfunction isPixelColored(gl, x, y) {\n var pixels = new Uint8Array(4);\n gl.readPixels(x, gl.drawingBufferHeight - y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n return pixels[3] > 0;\n}\n\nexports.isPixelColored = isPixelColored;\n/**\n * This helper checks whether or not a point (x, y) collides with an\n * edge, connecting a source (xS, yS) to a target (xT, yT) with a thickness in\n * pixels.\n */\n\nfunction doEdgeCollideWithPoint(x, y, xS, yS, xT, yT, thickness) {\n // Check first if point is out of the rectangle which opposite corners are the\n // source and the target, rectangle we expand by `thickness` in every\n // directions:\n if (x < xS - thickness && x < xT - thickness) return false;\n if (y < yS - thickness && y < yT - thickness) return false;\n if (x > xS + thickness && x > xT + thickness) return false;\n if (y > yS + thickness && y > yT + thickness) return false; // Check actual collision now: Since we now the point is in this big rectangle\n // we \"just\" need to check that the distance between the point and the line\n // connecting the source and the target is less than `thickness`:\n // https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\n\n var distance = Math.abs((xT - xS) * (yS - y) - (xS - x) * (yT - yS)) / Math.sqrt(Math.pow(xT - xS, 2) + Math.pow(yT - yS, 2));\n return distance < thickness / 2;\n}\n\nexports.doEdgeCollideWithPoint = doEdgeCollideWithPoint;","/**\n * Graphology Noverlap Layout Supervisor\n * ======================================\n *\n * Supervisor class able to spawn a web worker to run the Noverlap layout in a\n * separate thread not to block UI with heavy synchronous computations.\n */\nvar workerFunction = require('./webworker.js'),\n isGraph = require('graphology-utils/is-graph'),\n helpers = require('./helpers.js');\n\nvar DEFAULT_SETTINGS = require('./defaults.js');\n/**\n * Class representing a Noverlap layout run by a webworker.\n *\n * @constructor\n * @param {Graph} graph - Target graph.\n * @param {object|number} params - Parameters:\n * @param {object} [settings] - Settings.\n */\n\n\nfunction NoverlapLayoutSupervisor(graph, params) {\n params = params || {}; // Validation\n\n if (!isGraph(graph)) throw new Error('graphology-layout-noverlap/worker: the given graph is not a valid graphology instance.'); // Validating settings\n\n var settings = Object.assign({}, DEFAULT_SETTINGS, params.settings),\n validationError = helpers.validateSettings(settings);\n if (validationError) throw new Error('graphology-layout-noverlap/worker: ' + validationError.message); // Properties\n\n this.worker = null;\n this.graph = graph;\n this.settings = settings;\n this.matrices = null;\n this.running = false;\n this.killed = false;\n this.inputReducer = params.inputReducer;\n this.outputReducer = params.outputReducer;\n this.callbacks = {\n onConverged: typeof params.onConverged === 'function' ? params.onConverged : null\n }; // Binding listeners\n\n this.handleMessage = this.handleMessage.bind(this);\n var alreadyRespawning = false;\n var self = this;\n\n this.handleAddition = function () {\n if (alreadyRespawning) return;\n alreadyRespawning = true;\n self.spawnWorker();\n setTimeout(function () {\n alreadyRespawning = false;\n }, 0);\n };\n\n graph.on('nodeAdded', this.handleAddition);\n graph.on('edgeAdded', this.handleAddition); // Spawning worker\n\n this.spawnWorker();\n}\n\nNoverlapLayoutSupervisor.prototype.isRunning = function () {\n return this.running;\n};\n/**\n * Internal method used to spawn the web worker.\n */\n\n\nNoverlapLayoutSupervisor.prototype.spawnWorker = function () {\n if (this.worker) this.worker.terminate();\n this.worker = helpers.createWorker(workerFunction);\n this.worker.addEventListener('message', this.handleMessage);\n\n if (this.running) {\n this.running = false;\n this.start();\n }\n};\n/**\n * Internal method used to handle the worker's messages.\n *\n * @param {object} event - Event to handle.\n */\n\n\nNoverlapLayoutSupervisor.prototype.handleMessage = function (event) {\n if (!this.running) return;\n var matrix = new Float32Array(event.data.nodes);\n helpers.assignLayoutChanges(this.graph, matrix, this.outputReducer);\n this.matrices.nodes = matrix;\n\n if (event.data.result.converged) {\n if (this.callbacks.onConverged) this.callbacks.onConverged();\n this.stop();\n return;\n } // Looping\n\n\n this.askForIterations();\n};\n/**\n * Internal method used to ask for iterations from the worker.\n *\n * @return {NoverlapLayoutSupervisor}\n */\n\n\nNoverlapLayoutSupervisor.prototype.askForIterations = function () {\n var matrices = this.matrices;\n var payload = {\n settings: this.settings,\n nodes: matrices.nodes.buffer\n };\n var buffers = [matrices.nodes.buffer];\n this.worker.postMessage(payload, buffers);\n return this;\n};\n/**\n * Method used to start the layout.\n *\n * @return {NoverlapLayoutSupervisor}\n */\n\n\nNoverlapLayoutSupervisor.prototype.start = function () {\n if (this.killed) throw new Error('graphology-layout-noverlap/worker.start: layout was killed.');\n if (this.running) return this; // Building matrices\n\n this.matrices = {\n nodes: helpers.graphToByteArray(this.graph, this.inputReducer)\n };\n this.running = true;\n this.askForIterations();\n return this;\n};\n/**\n * Method used to stop the layout.\n *\n * @return {NoverlapLayoutSupervisor}\n */\n\n\nNoverlapLayoutSupervisor.prototype.stop = function () {\n this.running = false;\n return this;\n};\n/**\n * Method used to kill the layout.\n *\n * @return {NoverlapLayoutSupervisor}\n */\n\n\nNoverlapLayoutSupervisor.prototype.kill = function () {\n if (this.killed) return this;\n this.running = false;\n this.killed = true; // Clearing memory\n\n this.matrices = null; // Terminating worker\n\n this.worker.terminate(); // Unbinding listeners\n\n this.graph.removeListener('nodeAdded', this.handleAddition);\n this.graph.removeListener('edgeAdded', this.handleAddition);\n};\n/**\n * Exporting.\n */\n\n\nmodule.exports = NoverlapLayoutSupervisor;","/**\n * Graphology Noverlap Layout Webworker\n * =====================================\n *\n * Web worker able to run the layout in a separate thread.\n */\nmodule.exports = function worker() {\n var NODES;\n var moduleShim = {};\n\n (function () {\n /**\n * Graphology Noverlap Iteration\n * ==============================\n *\n * Function used to perform a single iteration of the algorithm.\n */\n\n /**\n * Matrices properties accessors.\n */\n var NODE_X = 0,\n NODE_Y = 1,\n NODE_SIZE = 2;\n /**\n * Constants.\n */\n\n var PPN = 3;\n /**\n * Helpers.\n */\n\n function hashPair(a, b) {\n return a + '§' + b;\n }\n\n function jitter() {\n return 0.01 * (0.5 - Math.random());\n }\n /**\n * Function used to perform a single interation of the algorithm.\n *\n * @param {object} options - Layout options.\n * @param {Float32Array} NodeMatrix - Node data.\n * @return {object} - Some metadata.\n */\n\n\n moduleShim.exports = function iterate(options, NodeMatrix) {\n // Caching options\n var margin = options.margin;\n var ratio = options.ratio;\n var expansion = options.expansion;\n var gridSize = options.gridSize; // TODO: decrease grid size when few nodes?\n\n var speed = options.speed; // Generic iteration variables\n\n var i, j, x, y, l, size;\n var converged = true;\n var length = NodeMatrix.length;\n var order = length / PPN | 0;\n var deltaX = new Float32Array(order);\n var deltaY = new Float32Array(order); // Finding the extents of our space\n\n var xMin = Infinity;\n var yMin = Infinity;\n var xMax = -Infinity;\n var yMax = -Infinity;\n\n for (i = 0; i < length; i += PPN) {\n x = NodeMatrix[i + NODE_X];\n y = NodeMatrix[i + NODE_Y];\n size = NodeMatrix[i + NODE_SIZE] * ratio + margin;\n xMin = Math.min(xMin, x - size);\n xMax = Math.max(xMax, x + size);\n yMin = Math.min(yMin, y - size);\n yMax = Math.max(yMax, y + size);\n }\n\n var width = xMax - xMin;\n var height = yMax - yMin;\n var xCenter = (xMin + xMax) / 2;\n var yCenter = (yMin + yMax) / 2;\n xMin = xCenter - expansion * width / 2;\n xMax = xCenter + expansion * width / 2;\n yMin = yCenter - expansion * height / 2;\n yMax = yCenter + expansion * height / 2; // Building grid\n\n var grid = new Array(gridSize * gridSize),\n gridLength = grid.length,\n c;\n\n for (c = 0; c < gridLength; c++) {\n grid[c] = [];\n }\n\n var nxMin, nxMax, nyMin, nyMax;\n var xMinBox, xMaxBox, yMinBox, yMaxBox;\n var col, row;\n\n for (i = 0; i < length; i += PPN) {\n x = NodeMatrix[i + NODE_X];\n y = NodeMatrix[i + NODE_Y];\n size = NodeMatrix[i + NODE_SIZE] * ratio + margin;\n nxMin = x - size;\n nxMax = x + size;\n nyMin = y - size;\n nyMax = y + size;\n xMinBox = Math.floor(gridSize * (nxMin - xMin) / (xMax - xMin));\n xMaxBox = Math.floor(gridSize * (nxMax - xMin) / (xMax - xMin));\n yMinBox = Math.floor(gridSize * (nyMin - yMin) / (yMax - yMin));\n yMaxBox = Math.floor(gridSize * (nyMax - yMin) / (yMax - yMin));\n\n for (col = xMinBox; col <= xMaxBox; col++) {\n for (row = yMinBox; row <= yMaxBox; row++) {\n grid[col * gridSize + row].push(i);\n }\n }\n } // Computing collisions\n\n\n var cell;\n var collisions = new Set();\n var n1, n2, x1, x2, y1, y2, s1, s2, h;\n var xDist, yDist, dist, collision;\n\n for (c = 0; c < gridLength; c++) {\n cell = grid[c];\n\n for (i = 0, l = cell.length; i < l; i++) {\n n1 = cell[i];\n x1 = NodeMatrix[n1 + NODE_X];\n y1 = NodeMatrix[n1 + NODE_Y];\n s1 = NodeMatrix[n1 + NODE_SIZE];\n\n for (j = i + 1; j < l; j++) {\n n2 = cell[j];\n h = hashPair(n1, n2);\n if (gridLength > 1 && collisions.has(h)) continue;\n if (gridLength > 1) collisions.add(h);\n x2 = NodeMatrix[n2 + NODE_X];\n y2 = NodeMatrix[n2 + NODE_Y];\n s2 = NodeMatrix[n2 + NODE_SIZE];\n xDist = x2 - x1;\n yDist = y2 - y1;\n dist = Math.sqrt(xDist * xDist + yDist * yDist);\n collision = dist < s1 * ratio + margin + (s2 * ratio + margin);\n\n if (collision) {\n converged = false;\n n2 = n2 / PPN | 0;\n\n if (dist > 0) {\n deltaX[n2] += xDist / dist * (1 + s1);\n deltaY[n2] += yDist / dist * (1 + s1);\n } else {\n // Nodes are on the exact same spot, we need to jitter a bit\n deltaX[n2] += width * jitter();\n deltaY[n2] += height * jitter();\n }\n }\n }\n }\n }\n\n for (i = 0, j = 0; i < length; i += PPN, j++) {\n NodeMatrix[i + NODE_X] += deltaX[j] * 0.1 * speed;\n NodeMatrix[i + NODE_Y] += deltaY[j] * 0.1 * speed;\n }\n\n return {\n converged: converged\n };\n };\n })();\n\n var iterate = moduleShim.exports;\n self.addEventListener('message', function (event) {\n var data = event.data;\n NODES = new Float32Array(data.nodes); // Running the iteration\n\n var result = iterate(data.settings, NODES); // Sending result to supervisor\n\n self.postMessage({\n result: result,\n nodes: NODES.buffer\n }, [NODES.buffer]);\n });\n};","/**\n * Graphology Noverlap Helpers\n * ============================\n *\n * Miscellaneous helper functions.\n */\n\n/**\n * Constants.\n */\nvar PPN = 3;\n/**\n * Function used to validate the given settings.\n *\n * @param {object} settings - Settings to validate.\n * @return {object|null}\n */\n\nexports.validateSettings = function (settings) {\n if ('gridSize' in settings && typeof settings.gridSize !== 'number' || settings.gridSize <= 0) return {\n message: 'the `gridSize` setting should be a positive number.'\n };\n if ('margin' in settings && typeof settings.margin !== 'number' || settings.margin < 0) return {\n message: 'the `margin` setting should be 0 or a positive number.'\n };\n if ('expansion' in settings && typeof settings.expansion !== 'number' || settings.expansion <= 0) return {\n message: 'the `expansion` setting should be a positive number.'\n };\n if ('ratio' in settings && typeof settings.ratio !== 'number' || settings.ratio <= 0) return {\n message: 'the `ratio` setting should be a positive number.'\n };\n if ('speed' in settings && typeof settings.speed !== 'number' || settings.speed <= 0) return {\n message: 'the `speed` setting should be a positive number.'\n };\n return null;\n};\n/**\n * Function generating a flat matrix for the given graph's nodes.\n *\n * @param {Graph} graph - Target graph.\n * @param {function} reducer - Node reducer function.\n * @return {Float32Array} - The node matrix.\n */\n\n\nexports.graphToByteArray = function (graph, reducer) {\n var order = graph.order;\n var matrix = new Float32Array(order * PPN);\n var j = 0;\n graph.forEachNode(function (node, attr) {\n if (typeof reducer === 'function') attr = reducer(node, attr);\n matrix[j] = attr.x;\n matrix[j + 1] = attr.y;\n matrix[j + 2] = attr.size || 1;\n j += PPN;\n });\n return matrix;\n};\n/**\n * Function applying the layout back to the graph.\n *\n * @param {Graph} graph - Target graph.\n * @param {Float32Array} NodeMatrix - Node matrix.\n * @param {function} reducer - Reducing function.\n */\n\n\nexports.assignLayoutChanges = function (graph, NodeMatrix, reducer) {\n var i = 0;\n graph.forEachNode(function (node) {\n var pos = {\n x: NodeMatrix[i],\n y: NodeMatrix[i + 1]\n };\n if (typeof reducer === 'function') pos = reducer(node, pos);\n graph.mergeNodeAttributes(node, pos);\n i += PPN;\n });\n};\n/**\n * Function collecting the layout positions.\n *\n * @param {Graph} graph - Target graph.\n * @param {Float32Array} NodeMatrix - Node matrix.\n * @param {function} reducer - Reducing function.\n * @return {object} - Map to node positions.\n */\n\n\nexports.collectLayoutChanges = function (graph, NodeMatrix, reducer) {\n var positions = {};\n var i = 0;\n graph.forEachNode(function (node) {\n var pos = {\n x: NodeMatrix[i],\n y: NodeMatrix[i + 1]\n };\n if (typeof reducer === 'function') pos = reducer(node, pos);\n positions[node] = pos;\n i += PPN;\n });\n return positions;\n};\n/**\n * Function returning a web worker from the given function.\n *\n * @param {function} fn - Function for the worker.\n * @return {DOMString}\n */\n\n\nexports.createWorker = function createWorker(fn) {\n var xURL = window.URL || window.webkitURL;\n var code = fn.toString();\n var objectUrl = xURL.createObjectURL(new Blob(['(' + code + ').call(this);'], {\n type: 'text/javascript'\n }));\n var worker = new Worker(objectUrl);\n xURL.revokeObjectURL(objectUrl);\n return worker;\n};","/**\n * Graphology Noverlap Layout Default Settings\n * ============================================\n */\nmodule.exports = {\n gridSize: 20,\n margin: 5,\n expansion: 1.1,\n ratio: 1.0,\n speed: 3\n};","/**\n * Graphology ForceAtlas2 Layout Webworker\n * ========================================\n *\n * Web worker able to run the layout in a separate thread.\n */\nmodule.exports = function worker() {\n var NODES, EDGES;\n var moduleShim = {};\n\n (function () {\n /* eslint no-constant-condition: 0 */\n\n /**\n * Graphology ForceAtlas2 Iteration\n * =================================\n *\n * Function used to perform a single iteration of the algorithm.\n */\n\n /**\n * Matrices properties accessors.\n */\n var NODE_X = 0;\n var NODE_Y = 1;\n var NODE_DX = 2;\n var NODE_DY = 3;\n var NODE_OLD_DX = 4;\n var NODE_OLD_DY = 5;\n var NODE_MASS = 6;\n var NODE_CONVERGENCE = 7;\n var NODE_SIZE = 8;\n var NODE_FIXED = 9;\n var EDGE_SOURCE = 0;\n var EDGE_TARGET = 1;\n var EDGE_WEIGHT = 2;\n var REGION_NODE = 0;\n var REGION_CENTER_X = 1;\n var REGION_CENTER_Y = 2;\n var REGION_SIZE = 3;\n var REGION_NEXT_SIBLING = 4;\n var REGION_FIRST_CHILD = 5;\n var REGION_MASS = 6;\n var REGION_MASS_CENTER_X = 7;\n var REGION_MASS_CENTER_Y = 8;\n var SUBDIVISION_ATTEMPTS = 3;\n /**\n * Constants.\n */\n\n var PPN = 10;\n var PPE = 3;\n var PPR = 9;\n var MAX_FORCE = 10;\n /**\n * Function used to perform a single interation of the algorithm.\n *\n * @param {object} options - Layout options.\n * @param {Float32Array} NodeMatrix - Node data.\n * @param {Float32Array} EdgeMatrix - Edge data.\n * @return {object} - Some metadata.\n */\n\n moduleShim.exports = function iterate(options, NodeMatrix, EdgeMatrix) {\n // Initializing variables\n var l, r, n, n1, n2, rn, e, w, g, s;\n var order = NodeMatrix.length,\n size = EdgeMatrix.length;\n var adjustSizes = options.adjustSizes;\n var thetaSquared = options.barnesHutTheta * options.barnesHutTheta;\n var outboundAttCompensation, coefficient, xDist, yDist, ewc, distance, factor;\n var RegionMatrix = []; // 1) Initializing layout data\n //-----------------------------\n // Resetting positions & computing max values\n\n for (n = 0; n < order; n += PPN) {\n NodeMatrix[n + NODE_OLD_DX] = NodeMatrix[n + NODE_DX];\n NodeMatrix[n + NODE_OLD_DY] = NodeMatrix[n + NODE_DY];\n NodeMatrix[n + NODE_DX] = 0;\n NodeMatrix[n + NODE_DY] = 0;\n } // If outbound attraction distribution, compensate\n\n\n if (options.outboundAttractionDistribution) {\n outboundAttCompensation = 0;\n\n for (n = 0; n < order; n += PPN) {\n outboundAttCompensation += NodeMatrix[n + NODE_MASS];\n }\n\n outboundAttCompensation /= order / PPN;\n } // 1.bis) Barnes-Hut computation\n //------------------------------\n\n\n if (options.barnesHutOptimize) {\n // Setting up\n var minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity,\n q,\n q2,\n subdivisionAttempts; // Computing min and max values\n\n for (n = 0; n < order; n += PPN) {\n minX = Math.min(minX, NodeMatrix[n + NODE_X]);\n maxX = Math.max(maxX, NodeMatrix[n + NODE_X]);\n minY = Math.min(minY, NodeMatrix[n + NODE_Y]);\n maxY = Math.max(maxY, NodeMatrix[n + NODE_Y]);\n } // squarify bounds, it's a quadtree\n\n\n var dx = maxX - minX,\n dy = maxY - minY;\n\n if (dx > dy) {\n minY -= (dx - dy) / 2;\n maxY = minY + dx;\n } else {\n minX -= (dy - dx) / 2;\n maxX = minX + dy;\n } // Build the Barnes Hut root region\n\n\n RegionMatrix[0 + REGION_NODE] = -1;\n RegionMatrix[0 + REGION_CENTER_X] = (minX + maxX) / 2;\n RegionMatrix[0 + REGION_CENTER_Y] = (minY + maxY) / 2;\n RegionMatrix[0 + REGION_SIZE] = Math.max(maxX - minX, maxY - minY);\n RegionMatrix[0 + REGION_NEXT_SIBLING] = -1;\n RegionMatrix[0 + REGION_FIRST_CHILD] = -1;\n RegionMatrix[0 + REGION_MASS] = 0;\n RegionMatrix[0 + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[0 + REGION_MASS_CENTER_Y] = 0; // Add each node in the tree\n\n l = 1;\n\n for (n = 0; n < order; n += PPN) {\n // Current region, starting with root\n r = 0;\n subdivisionAttempts = SUBDIVISION_ATTEMPTS;\n\n while (true) {\n // Are there sub-regions?\n // We look at first child index\n if (RegionMatrix[r + REGION_FIRST_CHILD] >= 0) {\n // There are sub-regions\n // We just iterate to find a \"leaf\" of the tree\n // that is an empty region or a region with a single node\n // (see next case)\n // Find the quadrant of n\n if (NodeMatrix[n + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n } // Update center of mass and mass (we only do it for non-leave regions)\n\n\n RegionMatrix[r + REGION_MASS_CENTER_X] = (RegionMatrix[r + REGION_MASS_CENTER_X] * RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_X] * NodeMatrix[n + NODE_MASS]) / (RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_MASS]);\n RegionMatrix[r + REGION_MASS_CENTER_Y] = (RegionMatrix[r + REGION_MASS_CENTER_Y] * RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_Y] * NodeMatrix[n + NODE_MASS]) / (RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_MASS]);\n RegionMatrix[r + REGION_MASS] += NodeMatrix[n + NODE_MASS]; // Iterate on the right quadrant\n\n r = q;\n continue;\n } else {\n // There are no sub-regions: we are in a \"leaf\"\n // Is there a node in this leave?\n if (RegionMatrix[r + REGION_NODE] < 0) {\n // There is no node in region:\n // we record node n and go on\n RegionMatrix[r + REGION_NODE] = n;\n break;\n } else {\n // There is a node in this region\n // We will need to create sub-regions, stick the two\n // nodes (the old one r[0] and the new one n) in two\n // subregions. If they fall in the same quadrant,\n // we will iterate.\n // Create sub-regions\n RegionMatrix[r + REGION_FIRST_CHILD] = l * PPR;\n w = RegionMatrix[r + REGION_SIZE] / 2; // new size (half)\n // NOTE: we use screen coordinates\n // from Top Left to Bottom Right\n // Top Left sub-region\n\n g = RegionMatrix[r + REGION_FIRST_CHILD];\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] - w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] - w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Bottom Left sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] - w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] + w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Top Right sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] + w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] - w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Bottom Right sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] + w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] + w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = RegionMatrix[r + REGION_NEXT_SIBLING];\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0;\n l += 4; // Now the goal is to find two different sub-regions\n // for the two nodes: the one previously recorded (r[0])\n // and the one we want to add (n)\n // Find the quadrant of the old node\n\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n } // We remove r[0] from the region r, add its mass to r and record it in q\n\n\n RegionMatrix[r + REGION_MASS] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_MASS];\n RegionMatrix[r + REGION_MASS_CENTER_X] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_X];\n RegionMatrix[r + REGION_MASS_CENTER_Y] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y];\n RegionMatrix[q + REGION_NODE] = RegionMatrix[r + REGION_NODE];\n RegionMatrix[r + REGION_NODE] = -1; // Find the quadrant of n\n\n if (NodeMatrix[n + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n }\n\n if (q === q2) {\n // If both nodes are in the same quadrant,\n // we have to try it again on this quadrant\n if (subdivisionAttempts--) {\n r = q;\n continue; // while\n } else {\n // we are out of precision here, and we cannot subdivide anymore\n // but we have to break the loop anyway\n subdivisionAttempts = SUBDIVISION_ATTEMPTS;\n break; // while\n }\n } // If both quadrants are different, we record n\n // in its quadrant\n\n\n RegionMatrix[q2 + REGION_NODE] = n;\n break;\n }\n }\n }\n }\n } // 2) Repulsion\n //--------------\n // NOTES: adjustSizes = antiCollision & scalingRatio = coefficient\n\n\n if (options.barnesHutOptimize) {\n coefficient = options.scalingRatio; // Applying repulsion through regions\n\n for (n = 0; n < order; n += PPN) {\n // Computing leaf quad nodes iteration\n r = 0; // Starting with root region\n\n while (true) {\n if (RegionMatrix[r + REGION_FIRST_CHILD] >= 0) {\n // The region has sub-regions\n // We run the Barnes Hut test to see if we are at the right distance\n distance = Math.pow(NodeMatrix[n + NODE_X] - RegionMatrix[r + REGION_MASS_CENTER_X], 2) + Math.pow(NodeMatrix[n + NODE_Y] - RegionMatrix[r + REGION_MASS_CENTER_Y], 2);\n s = RegionMatrix[r + REGION_SIZE];\n\n if (4 * s * s / distance < thetaSquared) {\n // We treat the region as a single body, and we repulse\n xDist = NodeMatrix[n + NODE_X] - RegionMatrix[r + REGION_MASS_CENTER_X];\n yDist = NodeMatrix[n + NODE_Y] - RegionMatrix[r + REGION_MASS_CENTER_Y];\n\n if (adjustSizes === true) {\n //-- Linear Anti-collision Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = -coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / Math.sqrt(distance);\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } // When this is done, we iterate. We have to look at the next sibling.\n\n\n r = RegionMatrix[r + REGION_NEXT_SIBLING];\n if (r < 0) break; // No next sibling: we have finished the tree\n\n continue;\n } else {\n // The region is too close and we have to look at sub-regions\n r = RegionMatrix[r + REGION_FIRST_CHILD];\n continue;\n }\n } else {\n // The region has no sub-region\n // If there is a node r[0] and it is not n, then repulse\n rn = RegionMatrix[r + REGION_NODE];\n\n if (rn >= 0 && rn !== n) {\n xDist = NodeMatrix[n + NODE_X] - NodeMatrix[rn + NODE_X];\n yDist = NodeMatrix[n + NODE_Y] - NodeMatrix[rn + NODE_Y];\n distance = xDist * xDist + yDist * yDist;\n\n if (adjustSizes === true) {\n //-- Linear Anti-collision Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = -coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / Math.sqrt(distance);\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n }\n } // When this is done, we iterate. We have to look at the next sibling.\n\n\n r = RegionMatrix[r + REGION_NEXT_SIBLING];\n if (r < 0) break; // No next sibling: we have finished the tree\n\n continue;\n }\n }\n }\n } else {\n coefficient = options.scalingRatio; // Square iteration\n\n for (n1 = 0; n1 < order; n1 += PPN) {\n for (n2 = 0; n2 < n1; n2 += PPN) {\n // Common to both methods\n xDist = NodeMatrix[n1 + NODE_X] - NodeMatrix[n2 + NODE_X];\n yDist = NodeMatrix[n1 + NODE_Y] - NodeMatrix[n2 + NODE_Y];\n\n if (adjustSizes === true) {\n //-- Anticollision Linear Repulsion\n distance = Math.sqrt(xDist * xDist + yDist * yDist) - NodeMatrix[n1 + NODE_SIZE] - NodeMatrix[n2 + NODE_SIZE];\n\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS] / distance / distance; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] += xDist * factor;\n NodeMatrix[n2 + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = 100 * coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS]; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n distance = Math.sqrt(xDist * xDist + yDist * yDist);\n\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS] / distance / distance; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n }\n }\n }\n } // 3) Gravity\n //------------\n\n\n g = options.gravity / options.scalingRatio;\n coefficient = options.scalingRatio;\n\n for (n = 0; n < order; n += PPN) {\n factor = 0; // Common to both methods\n\n xDist = NodeMatrix[n + NODE_X];\n yDist = NodeMatrix[n + NODE_Y];\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2));\n\n if (options.strongGravityMode) {\n //-- Strong gravity\n if (distance > 0) factor = coefficient * NodeMatrix[n + NODE_MASS] * g;\n } else {\n //-- Linear Anti-collision Repulsion n\n if (distance > 0) factor = coefficient * NodeMatrix[n + NODE_MASS] * g / distance;\n } // Updating node's dx and dy\n\n\n NodeMatrix[n + NODE_DX] -= xDist * factor;\n NodeMatrix[n + NODE_DY] -= yDist * factor;\n } // 4) Attraction\n //---------------\n\n\n coefficient = 1 * (options.outboundAttractionDistribution ? outboundAttCompensation : 1); // TODO: simplify distance\n // TODO: coefficient is always used as -c --> optimize?\n\n for (e = 0; e < size; e += PPE) {\n n1 = EdgeMatrix[e + EDGE_SOURCE];\n n2 = EdgeMatrix[e + EDGE_TARGET];\n w = EdgeMatrix[e + EDGE_WEIGHT]; // Edge weight influence\n\n ewc = Math.pow(w, options.edgeWeightInfluence); // Common measures\n\n xDist = NodeMatrix[n1 + NODE_X] - NodeMatrix[n2 + NODE_X];\n yDist = NodeMatrix[n1 + NODE_Y] - NodeMatrix[n2 + NODE_Y]; // Applying attraction to nodes\n\n if (adjustSizes === true) {\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2) - NodeMatrix[n1 + NODE_SIZE] - NodeMatrix[n2 + NODE_SIZE]);\n\n if (options.linLogMode) {\n if (options.outboundAttractionDistribution) {\n //-- LinLog Degree Distributed Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- LinLog Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance;\n }\n }\n } else {\n if (options.outboundAttractionDistribution) {\n //-- Linear Degree Distributed Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- Linear Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc;\n }\n }\n }\n } else {\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2));\n\n if (options.linLogMode) {\n if (options.outboundAttractionDistribution) {\n //-- LinLog Degree Distributed Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- LinLog Attraction\n if (distance > 0) factor = -coefficient * ewc * Math.log(1 + distance) / distance;\n }\n } else {\n if (options.outboundAttractionDistribution) {\n //-- Linear Attraction Mass Distributed\n // NOTE: Distance is set to 1 to override next condition\n distance = 1;\n factor = -coefficient * ewc / NodeMatrix[n1 + NODE_MASS];\n } else {\n //-- Linear Attraction\n // NOTE: Distance is set to 1 to override next condition\n distance = 1;\n factor = -coefficient * ewc;\n }\n }\n } // Updating nodes' dx and dy\n // TODO: if condition or factor = 1?\n\n\n if (distance > 0) {\n // Updating nodes' dx and dy\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n } // 5) Apply Forces\n //-----------------\n\n\n var force, swinging, traction, nodespeed, newX, newY; // MATH: sqrt and square distances\n\n if (adjustSizes === true) {\n for (n = 0; n < order; n += PPN) {\n if (NodeMatrix[n + NODE_FIXED] !== 1) {\n force = Math.sqrt(Math.pow(NodeMatrix[n + NODE_DX], 2) + Math.pow(NodeMatrix[n + NODE_DY], 2));\n\n if (force > MAX_FORCE) {\n NodeMatrix[n + NODE_DX] = NodeMatrix[n + NODE_DX] * MAX_FORCE / force;\n NodeMatrix[n + NODE_DY] = NodeMatrix[n + NODE_DY] * MAX_FORCE / force;\n }\n\n swinging = NodeMatrix[n + NODE_MASS] * Math.sqrt((NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]));\n traction = Math.sqrt((NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY])) / 2;\n nodespeed = 0.1 * Math.log(1 + traction) / (1 + Math.sqrt(swinging)); // Updating node's positon\n\n newX = NodeMatrix[n + NODE_X] + NodeMatrix[n + NODE_DX] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_X] = newX;\n newY = NodeMatrix[n + NODE_Y] + NodeMatrix[n + NODE_DY] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_Y] = newY;\n }\n }\n } else {\n for (n = 0; n < order; n += PPN) {\n if (NodeMatrix[n + NODE_FIXED] !== 1) {\n swinging = NodeMatrix[n + NODE_MASS] * Math.sqrt((NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]));\n traction = Math.sqrt((NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY])) / 2;\n nodespeed = NodeMatrix[n + NODE_CONVERGENCE] * Math.log(1 + traction) / (1 + Math.sqrt(swinging)); // Updating node convergence\n\n NodeMatrix[n + NODE_CONVERGENCE] = Math.min(1, Math.sqrt(nodespeed * (Math.pow(NodeMatrix[n + NODE_DX], 2) + Math.pow(NodeMatrix[n + NODE_DY], 2)) / (1 + Math.sqrt(swinging)))); // Updating node's positon\n\n newX = NodeMatrix[n + NODE_X] + NodeMatrix[n + NODE_DX] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_X] = newX;\n newY = NodeMatrix[n + NODE_Y] + NodeMatrix[n + NODE_DY] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_Y] = newY;\n }\n }\n } // We return the information about the layout (no need to return the matrices)\n\n\n return {};\n };\n })();\n\n var iterate = moduleShim.exports;\n self.addEventListener('message', function (event) {\n var data = event.data;\n NODES = new Float32Array(data.nodes);\n if (data.edges) EDGES = new Float32Array(data.edges); // Running the iteration\n\n iterate(data.settings, NODES, EDGES); // Sending result to supervisor\n\n self.postMessage({\n nodes: NODES.buffer\n }, [NODES.buffer]);\n });\n};","/**\n * Graphology ForceAtlas2 Layout\n * ==============================\n *\n * Library endpoint.\n */\nvar isGraph = require('graphology-utils/is-graph'),\n iterate = require('./iterate.js'),\n helpers = require('./helpers.js');\n\nvar DEFAULT_SETTINGS = require('./defaults.js');\n/**\n * Asbtract function used to run a certain number of iterations.\n *\n * @param {boolean} assign - Whether to assign positions.\n * @param {Graph} graph - Target graph.\n * @param {object|number} params - If number, params.iterations, else:\n * @param {object} attributes - Attribute names:\n * @param {string} weight - Name of the edge weight attribute.\n * @param {boolean} weighted - Whether to take edge weights into account.\n * @param {number} iterations - Number of iterations.\n * @param {function|null} outputReducer - A node reducer\n * @param {object} [settings] - Settings.\n * @return {object|undefined}\n */\n\n\nfunction abstractSynchronousLayout(assign, graph, params) {\n if (!isGraph(graph)) throw new Error('graphology-layout-forceatlas2: the given graph is not a valid graphology instance.');\n if (typeof params === 'number') params = {\n iterations: params\n };\n var iterations = params.iterations;\n if (typeof iterations !== 'number') throw new Error('graphology-layout-forceatlas2: invalid number of iterations.');\n if (iterations <= 0) throw new Error('graphology-layout-forceatlas2: you should provide a positive number of iterations.');\n var attributes = params.attributes || {};\n var weightAttribute = params.weighted ? attributes.weight || 'weight' : null;\n var outputReducer = typeof params.outputReducer === 'function' ? params.outputReducer : null; // Validating settings\n\n var settings = helpers.assign({}, DEFAULT_SETTINGS, params.settings);\n var validationError = helpers.validateSettings(settings);\n if (validationError) throw new Error('graphology-layout-forceatlas2: ' + validationError.message); // Building matrices\n\n var matrices = helpers.graphToByteArrays(graph, weightAttribute);\n var i; // Iterating\n\n for (i = 0; i < iterations; i++) {\n iterate(settings, matrices.nodes, matrices.edges);\n } // Applying\n\n\n if (assign) {\n helpers.assignLayoutChanges(graph, matrices.nodes, outputReducer);\n return;\n }\n\n return helpers.collectLayoutChanges(graph, matrices.nodes);\n}\n/**\n * Function returning sane layout settings for the given graph.\n *\n * @param {Graph|number} graph - Target graph or graph order.\n * @return {object}\n */\n\n\nfunction inferSettings(graph) {\n var order = typeof graph === 'number' ? graph : graph.order;\n return {\n barnesHutOptimize: order > 2000,\n strongGravityMode: true,\n gravity: 0.05,\n scalingRatio: 10,\n slowDown: 1 + Math.log(order)\n };\n}\n/**\n * Exporting.\n */\n\n\nvar synchronousLayout = abstractSynchronousLayout.bind(null, false);\nsynchronousLayout.assign = abstractSynchronousLayout.bind(null, true);\nsynchronousLayout.inferSettings = inferSettings;\nmodule.exports = synchronousLayout;","/* eslint no-constant-condition: 0 */\n\n/**\n * Graphology ForceAtlas2 Iteration\n * =================================\n *\n * Function used to perform a single iteration of the algorithm.\n */\n\n/**\n * Matrices properties accessors.\n */\nvar NODE_X = 0;\nvar NODE_Y = 1;\nvar NODE_DX = 2;\nvar NODE_DY = 3;\nvar NODE_OLD_DX = 4;\nvar NODE_OLD_DY = 5;\nvar NODE_MASS = 6;\nvar NODE_CONVERGENCE = 7;\nvar NODE_SIZE = 8;\nvar NODE_FIXED = 9;\nvar EDGE_SOURCE = 0;\nvar EDGE_TARGET = 1;\nvar EDGE_WEIGHT = 2;\nvar REGION_NODE = 0;\nvar REGION_CENTER_X = 1;\nvar REGION_CENTER_Y = 2;\nvar REGION_SIZE = 3;\nvar REGION_NEXT_SIBLING = 4;\nvar REGION_FIRST_CHILD = 5;\nvar REGION_MASS = 6;\nvar REGION_MASS_CENTER_X = 7;\nvar REGION_MASS_CENTER_Y = 8;\nvar SUBDIVISION_ATTEMPTS = 3;\n/**\n * Constants.\n */\n\nvar PPN = 10;\nvar PPE = 3;\nvar PPR = 9;\nvar MAX_FORCE = 10;\n/**\n * Function used to perform a single interation of the algorithm.\n *\n * @param {object} options - Layout options.\n * @param {Float32Array} NodeMatrix - Node data.\n * @param {Float32Array} EdgeMatrix - Edge data.\n * @return {object} - Some metadata.\n */\n\nmodule.exports = function iterate(options, NodeMatrix, EdgeMatrix) {\n // Initializing variables\n var l, r, n, n1, n2, rn, e, w, g, s;\n var order = NodeMatrix.length,\n size = EdgeMatrix.length;\n var adjustSizes = options.adjustSizes;\n var thetaSquared = options.barnesHutTheta * options.barnesHutTheta;\n var outboundAttCompensation, coefficient, xDist, yDist, ewc, distance, factor;\n var RegionMatrix = []; // 1) Initializing layout data\n //-----------------------------\n // Resetting positions & computing max values\n\n for (n = 0; n < order; n += PPN) {\n NodeMatrix[n + NODE_OLD_DX] = NodeMatrix[n + NODE_DX];\n NodeMatrix[n + NODE_OLD_DY] = NodeMatrix[n + NODE_DY];\n NodeMatrix[n + NODE_DX] = 0;\n NodeMatrix[n + NODE_DY] = 0;\n } // If outbound attraction distribution, compensate\n\n\n if (options.outboundAttractionDistribution) {\n outboundAttCompensation = 0;\n\n for (n = 0; n < order; n += PPN) {\n outboundAttCompensation += NodeMatrix[n + NODE_MASS];\n }\n\n outboundAttCompensation /= order / PPN;\n } // 1.bis) Barnes-Hut computation\n //------------------------------\n\n\n if (options.barnesHutOptimize) {\n // Setting up\n var minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity,\n q,\n q2,\n subdivisionAttempts; // Computing min and max values\n\n for (n = 0; n < order; n += PPN) {\n minX = Math.min(minX, NodeMatrix[n + NODE_X]);\n maxX = Math.max(maxX, NodeMatrix[n + NODE_X]);\n minY = Math.min(minY, NodeMatrix[n + NODE_Y]);\n maxY = Math.max(maxY, NodeMatrix[n + NODE_Y]);\n } // squarify bounds, it's a quadtree\n\n\n var dx = maxX - minX,\n dy = maxY - minY;\n\n if (dx > dy) {\n minY -= (dx - dy) / 2;\n maxY = minY + dx;\n } else {\n minX -= (dy - dx) / 2;\n maxX = minX + dy;\n } // Build the Barnes Hut root region\n\n\n RegionMatrix[0 + REGION_NODE] = -1;\n RegionMatrix[0 + REGION_CENTER_X] = (minX + maxX) / 2;\n RegionMatrix[0 + REGION_CENTER_Y] = (minY + maxY) / 2;\n RegionMatrix[0 + REGION_SIZE] = Math.max(maxX - minX, maxY - minY);\n RegionMatrix[0 + REGION_NEXT_SIBLING] = -1;\n RegionMatrix[0 + REGION_FIRST_CHILD] = -1;\n RegionMatrix[0 + REGION_MASS] = 0;\n RegionMatrix[0 + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[0 + REGION_MASS_CENTER_Y] = 0; // Add each node in the tree\n\n l = 1;\n\n for (n = 0; n < order; n += PPN) {\n // Current region, starting with root\n r = 0;\n subdivisionAttempts = SUBDIVISION_ATTEMPTS;\n\n while (true) {\n // Are there sub-regions?\n // We look at first child index\n if (RegionMatrix[r + REGION_FIRST_CHILD] >= 0) {\n // There are sub-regions\n // We just iterate to find a \"leaf\" of the tree\n // that is an empty region or a region with a single node\n // (see next case)\n // Find the quadrant of n\n if (NodeMatrix[n + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n } // Update center of mass and mass (we only do it for non-leave regions)\n\n\n RegionMatrix[r + REGION_MASS_CENTER_X] = (RegionMatrix[r + REGION_MASS_CENTER_X] * RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_X] * NodeMatrix[n + NODE_MASS]) / (RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_MASS]);\n RegionMatrix[r + REGION_MASS_CENTER_Y] = (RegionMatrix[r + REGION_MASS_CENTER_Y] * RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_Y] * NodeMatrix[n + NODE_MASS]) / (RegionMatrix[r + REGION_MASS] + NodeMatrix[n + NODE_MASS]);\n RegionMatrix[r + REGION_MASS] += NodeMatrix[n + NODE_MASS]; // Iterate on the right quadrant\n\n r = q;\n continue;\n } else {\n // There are no sub-regions: we are in a \"leaf\"\n // Is there a node in this leave?\n if (RegionMatrix[r + REGION_NODE] < 0) {\n // There is no node in region:\n // we record node n and go on\n RegionMatrix[r + REGION_NODE] = n;\n break;\n } else {\n // There is a node in this region\n // We will need to create sub-regions, stick the two\n // nodes (the old one r[0] and the new one n) in two\n // subregions. If they fall in the same quadrant,\n // we will iterate.\n // Create sub-regions\n RegionMatrix[r + REGION_FIRST_CHILD] = l * PPR;\n w = RegionMatrix[r + REGION_SIZE] / 2; // new size (half)\n // NOTE: we use screen coordinates\n // from Top Left to Bottom Right\n // Top Left sub-region\n\n g = RegionMatrix[r + REGION_FIRST_CHILD];\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] - w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] - w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Bottom Left sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] - w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] + w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Top Right sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] + w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] - w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = g + PPR;\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0; // Bottom Right sub-region\n\n g += PPR;\n RegionMatrix[g + REGION_NODE] = -1;\n RegionMatrix[g + REGION_CENTER_X] = RegionMatrix[r + REGION_CENTER_X] + w;\n RegionMatrix[g + REGION_CENTER_Y] = RegionMatrix[r + REGION_CENTER_Y] + w;\n RegionMatrix[g + REGION_SIZE] = w;\n RegionMatrix[g + REGION_NEXT_SIBLING] = RegionMatrix[r + REGION_NEXT_SIBLING];\n RegionMatrix[g + REGION_FIRST_CHILD] = -1;\n RegionMatrix[g + REGION_MASS] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_X] = 0;\n RegionMatrix[g + REGION_MASS_CENTER_Y] = 0;\n l += 4; // Now the goal is to find two different sub-regions\n // for the two nodes: the one previously recorded (r[0])\n // and the one we want to add (n)\n // Find the quadrant of the old node\n\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n } // We remove r[0] from the region r, add its mass to r and record it in q\n\n\n RegionMatrix[r + REGION_MASS] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_MASS];\n RegionMatrix[r + REGION_MASS_CENTER_X] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_X];\n RegionMatrix[r + REGION_MASS_CENTER_Y] = NodeMatrix[RegionMatrix[r + REGION_NODE] + NODE_Y];\n RegionMatrix[q + REGION_NODE] = RegionMatrix[r + REGION_NODE];\n RegionMatrix[r + REGION_NODE] = -1; // Find the quadrant of n\n\n if (NodeMatrix[n + NODE_X] < RegionMatrix[r + REGION_CENTER_X]) {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Left quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD];\n } else {\n // Bottom Left quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR;\n }\n } else {\n if (NodeMatrix[n + NODE_Y] < RegionMatrix[r + REGION_CENTER_Y]) {\n // Top Right quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 2;\n } else {\n // Bottom Right quarter\n q2 = RegionMatrix[r + REGION_FIRST_CHILD] + PPR * 3;\n }\n }\n\n if (q === q2) {\n // If both nodes are in the same quadrant,\n // we have to try it again on this quadrant\n if (subdivisionAttempts--) {\n r = q;\n continue; // while\n } else {\n // we are out of precision here, and we cannot subdivide anymore\n // but we have to break the loop anyway\n subdivisionAttempts = SUBDIVISION_ATTEMPTS;\n break; // while\n }\n } // If both quadrants are different, we record n\n // in its quadrant\n\n\n RegionMatrix[q2 + REGION_NODE] = n;\n break;\n }\n }\n }\n }\n } // 2) Repulsion\n //--------------\n // NOTES: adjustSizes = antiCollision & scalingRatio = coefficient\n\n\n if (options.barnesHutOptimize) {\n coefficient = options.scalingRatio; // Applying repulsion through regions\n\n for (n = 0; n < order; n += PPN) {\n // Computing leaf quad nodes iteration\n r = 0; // Starting with root region\n\n while (true) {\n if (RegionMatrix[r + REGION_FIRST_CHILD] >= 0) {\n // The region has sub-regions\n // We run the Barnes Hut test to see if we are at the right distance\n distance = Math.pow(NodeMatrix[n + NODE_X] - RegionMatrix[r + REGION_MASS_CENTER_X], 2) + Math.pow(NodeMatrix[n + NODE_Y] - RegionMatrix[r + REGION_MASS_CENTER_Y], 2);\n s = RegionMatrix[r + REGION_SIZE];\n\n if (4 * s * s / distance < thetaSquared) {\n // We treat the region as a single body, and we repulse\n xDist = NodeMatrix[n + NODE_X] - RegionMatrix[r + REGION_MASS_CENTER_X];\n yDist = NodeMatrix[n + NODE_Y] - RegionMatrix[r + REGION_MASS_CENTER_Y];\n\n if (adjustSizes === true) {\n //-- Linear Anti-collision Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = -coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / Math.sqrt(distance);\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * RegionMatrix[r + REGION_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } // When this is done, we iterate. We have to look at the next sibling.\n\n\n r = RegionMatrix[r + REGION_NEXT_SIBLING];\n if (r < 0) break; // No next sibling: we have finished the tree\n\n continue;\n } else {\n // The region is too close and we have to look at sub-regions\n r = RegionMatrix[r + REGION_FIRST_CHILD];\n continue;\n }\n } else {\n // The region has no sub-region\n // If there is a node r[0] and it is not n, then repulse\n rn = RegionMatrix[r + REGION_NODE];\n\n if (rn >= 0 && rn !== n) {\n xDist = NodeMatrix[n + NODE_X] - NodeMatrix[rn + NODE_X];\n yDist = NodeMatrix[n + NODE_Y] - NodeMatrix[rn + NODE_Y];\n distance = xDist * xDist + yDist * yDist;\n\n if (adjustSizes === true) {\n //-- Linear Anti-collision Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = -coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / Math.sqrt(distance);\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n + NODE_MASS] * NodeMatrix[rn + NODE_MASS] / distance;\n NodeMatrix[n + NODE_DX] += xDist * factor;\n NodeMatrix[n + NODE_DY] += yDist * factor;\n }\n }\n } // When this is done, we iterate. We have to look at the next sibling.\n\n\n r = RegionMatrix[r + REGION_NEXT_SIBLING];\n if (r < 0) break; // No next sibling: we have finished the tree\n\n continue;\n }\n }\n }\n } else {\n coefficient = options.scalingRatio; // Square iteration\n\n for (n1 = 0; n1 < order; n1 += PPN) {\n for (n2 = 0; n2 < n1; n2 += PPN) {\n // Common to both methods\n xDist = NodeMatrix[n1 + NODE_X] - NodeMatrix[n2 + NODE_X];\n yDist = NodeMatrix[n1 + NODE_Y] - NodeMatrix[n2 + NODE_Y];\n\n if (adjustSizes === true) {\n //-- Anticollision Linear Repulsion\n distance = Math.sqrt(xDist * xDist + yDist * yDist) - NodeMatrix[n1 + NODE_SIZE] - NodeMatrix[n2 + NODE_SIZE];\n\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS] / distance / distance; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] += xDist * factor;\n NodeMatrix[n2 + NODE_DY] += yDist * factor;\n } else if (distance < 0) {\n factor = 100 * coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS]; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n } else {\n //-- Linear Repulsion\n distance = Math.sqrt(xDist * xDist + yDist * yDist);\n\n if (distance > 0) {\n factor = coefficient * NodeMatrix[n1 + NODE_MASS] * NodeMatrix[n2 + NODE_MASS] / distance / distance; // Updating nodes' dx and dy\n\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n }\n }\n }\n } // 3) Gravity\n //------------\n\n\n g = options.gravity / options.scalingRatio;\n coefficient = options.scalingRatio;\n\n for (n = 0; n < order; n += PPN) {\n factor = 0; // Common to both methods\n\n xDist = NodeMatrix[n + NODE_X];\n yDist = NodeMatrix[n + NODE_Y];\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2));\n\n if (options.strongGravityMode) {\n //-- Strong gravity\n if (distance > 0) factor = coefficient * NodeMatrix[n + NODE_MASS] * g;\n } else {\n //-- Linear Anti-collision Repulsion n\n if (distance > 0) factor = coefficient * NodeMatrix[n + NODE_MASS] * g / distance;\n } // Updating node's dx and dy\n\n\n NodeMatrix[n + NODE_DX] -= xDist * factor;\n NodeMatrix[n + NODE_DY] -= yDist * factor;\n } // 4) Attraction\n //---------------\n\n\n coefficient = 1 * (options.outboundAttractionDistribution ? outboundAttCompensation : 1); // TODO: simplify distance\n // TODO: coefficient is always used as -c --> optimize?\n\n for (e = 0; e < size; e += PPE) {\n n1 = EdgeMatrix[e + EDGE_SOURCE];\n n2 = EdgeMatrix[e + EDGE_TARGET];\n w = EdgeMatrix[e + EDGE_WEIGHT]; // Edge weight influence\n\n ewc = Math.pow(w, options.edgeWeightInfluence); // Common measures\n\n xDist = NodeMatrix[n1 + NODE_X] - NodeMatrix[n2 + NODE_X];\n yDist = NodeMatrix[n1 + NODE_Y] - NodeMatrix[n2 + NODE_Y]; // Applying attraction to nodes\n\n if (adjustSizes === true) {\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2) - NodeMatrix[n1 + NODE_SIZE] - NodeMatrix[n2 + NODE_SIZE]);\n\n if (options.linLogMode) {\n if (options.outboundAttractionDistribution) {\n //-- LinLog Degree Distributed Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- LinLog Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance;\n }\n }\n } else {\n if (options.outboundAttractionDistribution) {\n //-- Linear Degree Distributed Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- Linear Anti-collision Attraction\n if (distance > 0) {\n factor = -coefficient * ewc;\n }\n }\n }\n } else {\n distance = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2));\n\n if (options.linLogMode) {\n if (options.outboundAttractionDistribution) {\n //-- LinLog Degree Distributed Attraction\n if (distance > 0) {\n factor = -coefficient * ewc * Math.log(1 + distance) / distance / NodeMatrix[n1 + NODE_MASS];\n }\n } else {\n //-- LinLog Attraction\n if (distance > 0) factor = -coefficient * ewc * Math.log(1 + distance) / distance;\n }\n } else {\n if (options.outboundAttractionDistribution) {\n //-- Linear Attraction Mass Distributed\n // NOTE: Distance is set to 1 to override next condition\n distance = 1;\n factor = -coefficient * ewc / NodeMatrix[n1 + NODE_MASS];\n } else {\n //-- Linear Attraction\n // NOTE: Distance is set to 1 to override next condition\n distance = 1;\n factor = -coefficient * ewc;\n }\n }\n } // Updating nodes' dx and dy\n // TODO: if condition or factor = 1?\n\n\n if (distance > 0) {\n // Updating nodes' dx and dy\n NodeMatrix[n1 + NODE_DX] += xDist * factor;\n NodeMatrix[n1 + NODE_DY] += yDist * factor;\n NodeMatrix[n2 + NODE_DX] -= xDist * factor;\n NodeMatrix[n2 + NODE_DY] -= yDist * factor;\n }\n } // 5) Apply Forces\n //-----------------\n\n\n var force, swinging, traction, nodespeed, newX, newY; // MATH: sqrt and square distances\n\n if (adjustSizes === true) {\n for (n = 0; n < order; n += PPN) {\n if (NodeMatrix[n + NODE_FIXED] !== 1) {\n force = Math.sqrt(Math.pow(NodeMatrix[n + NODE_DX], 2) + Math.pow(NodeMatrix[n + NODE_DY], 2));\n\n if (force > MAX_FORCE) {\n NodeMatrix[n + NODE_DX] = NodeMatrix[n + NODE_DX] * MAX_FORCE / force;\n NodeMatrix[n + NODE_DY] = NodeMatrix[n + NODE_DY] * MAX_FORCE / force;\n }\n\n swinging = NodeMatrix[n + NODE_MASS] * Math.sqrt((NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]));\n traction = Math.sqrt((NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY])) / 2;\n nodespeed = 0.1 * Math.log(1 + traction) / (1 + Math.sqrt(swinging)); // Updating node's positon\n\n newX = NodeMatrix[n + NODE_X] + NodeMatrix[n + NODE_DX] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_X] = newX;\n newY = NodeMatrix[n + NODE_Y] + NodeMatrix[n + NODE_DY] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_Y] = newY;\n }\n }\n } else {\n for (n = 0; n < order; n += PPN) {\n if (NodeMatrix[n + NODE_FIXED] !== 1) {\n swinging = NodeMatrix[n + NODE_MASS] * Math.sqrt((NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] - NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] - NodeMatrix[n + NODE_DY]));\n traction = Math.sqrt((NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) * (NodeMatrix[n + NODE_OLD_DX] + NodeMatrix[n + NODE_DX]) + (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY]) * (NodeMatrix[n + NODE_OLD_DY] + NodeMatrix[n + NODE_DY])) / 2;\n nodespeed = NodeMatrix[n + NODE_CONVERGENCE] * Math.log(1 + traction) / (1 + Math.sqrt(swinging)); // Updating node convergence\n\n NodeMatrix[n + NODE_CONVERGENCE] = Math.min(1, Math.sqrt(nodespeed * (Math.pow(NodeMatrix[n + NODE_DX], 2) + Math.pow(NodeMatrix[n + NODE_DY], 2)) / (1 + Math.sqrt(swinging)))); // Updating node's positon\n\n newX = NodeMatrix[n + NODE_X] + NodeMatrix[n + NODE_DX] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_X] = newX;\n newY = NodeMatrix[n + NODE_Y] + NodeMatrix[n + NODE_DY] * (nodespeed / options.slowDown);\n NodeMatrix[n + NODE_Y] = newY;\n }\n }\n } // We return the information about the layout (no need to return the matrices)\n\n\n return {};\n};","/**\n * Graphology inferType\n * =====================\n *\n * Useful function used to \"guess\" the real type of the given Graph using\n * introspection.\n */\nvar isGraph = require('./is-graph.js');\n/**\n * Returning the inferred type of the given graph.\n *\n * @param {Graph} graph - Target graph.\n * @return {boolean}\n */\n\n\nmodule.exports = function inferType(graph) {\n if (!isGraph(graph)) throw new Error('graphology-utils/infer-type: expecting a valid graphology instance.');\n var declaredType = graph.type;\n if (declaredType !== 'mixed') return declaredType;\n if (graph.directedSize === 0 && graph.undirectedSize === 0 || graph.directedSize > 0 && graph.undirectedSize > 0) return 'mixed';\n if (graph.directedSize > 0) return 'directed';\n return 'undirected';\n};","/**\n * Mnemonist SparseMap\n * ====================\n *\n * JavaScript sparse map implemented on top of byte arrays.\n *\n * [Reference]: https://research.swtch.com/sparse\n */\nvar Iterator = require('obliterator/iterator'),\n getPointerArray = require('./utils/typed-arrays.js').getPointerArray;\n/**\n * SparseMap.\n *\n * @constructor\n */\n\n\nfunction SparseMap(Values, length) {\n if (arguments.length < 2) {\n length = Values;\n Values = Array;\n }\n\n var ByteArray = getPointerArray(length); // Properties\n\n this.size = 0;\n this.length = length;\n this.dense = new ByteArray(length);\n this.sparse = new ByteArray(length);\n this.vals = new Values(length);\n}\n/**\n * Method used to clear the structure.\n *\n * @return {undefined}\n */\n\n\nSparseMap.prototype.clear = function () {\n this.size = 0;\n};\n/**\n * Method used to check the existence of a member in the set.\n *\n * @param {number} member - Member to test.\n * @return {SparseMap}\n */\n\n\nSparseMap.prototype.has = function (member) {\n var index = this.sparse[member];\n return index < this.size && this.dense[index] === member;\n};\n/**\n * Method used to get the value associated to a member in the set.\n *\n * @param {number} member - Member to test.\n * @return {any}\n */\n\n\nSparseMap.prototype.get = function (member) {\n var index = this.sparse[member];\n if (index < this.size && this.dense[index] === member) return this.vals[index];\n return;\n};\n/**\n * Method used to set a value into the map.\n *\n * @param {number} member - Member to set.\n * @param {any} value - Associated value.\n * @return {SparseMap}\n */\n\n\nSparseMap.prototype.set = function (member, value) {\n var index = this.sparse[member];\n\n if (index < this.size && this.dense[index] === member) {\n this.vals[index] = value;\n return this;\n }\n\n this.dense[this.size] = member;\n this.sparse[member] = this.size;\n this.vals[this.size] = value;\n this.size++;\n return this;\n};\n/**\n * Method used to remove a member from the set.\n *\n * @param {number} member - Member to delete.\n * @return {boolean}\n */\n\n\nSparseMap.prototype.delete = function (member) {\n var index = this.sparse[member];\n if (index >= this.size || this.dense[index] !== member) return false;\n index = this.dense[this.size - 1];\n this.dense[this.sparse[member]] = index;\n this.sparse[index] = this.sparse[member];\n this.size--;\n return true;\n};\n/**\n * Method used to iterate over the set's values.\n *\n * @param {function} callback - Function to call for each item.\n * @param {object} scope - Optional scope.\n * @return {undefined}\n */\n\n\nSparseMap.prototype.forEach = function (callback, scope) {\n scope = arguments.length > 1 ? scope : this;\n\n for (var i = 0; i < this.size; i++) {\n callback.call(scope, this.vals[i], this.dense[i]);\n }\n};\n/**\n * Method used to create an iterator over a set's members.\n *\n * @return {Iterator}\n */\n\n\nSparseMap.prototype.keys = function () {\n var size = this.size,\n dense = this.dense,\n i = 0;\n return new Iterator(function () {\n if (i < size) {\n var item = dense[i];\n i++;\n return {\n value: item\n };\n }\n\n return {\n done: true\n };\n });\n};\n/**\n * Method used to create an iterator over a set's values.\n *\n * @return {Iterator}\n */\n\n\nSparseMap.prototype.values = function () {\n var size = this.size,\n values = this.vals,\n i = 0;\n return new Iterator(function () {\n if (i < size) {\n var item = values[i];\n i++;\n return {\n value: item\n };\n }\n\n return {\n done: true\n };\n });\n};\n/**\n * Method used to create an iterator over a set's entries.\n *\n * @return {Iterator}\n */\n\n\nSparseMap.prototype.entries = function () {\n var size = this.size,\n dense = this.dense,\n values = this.vals,\n i = 0;\n return new Iterator(function () {\n if (i < size) {\n var item = [dense[i], values[i]];\n i++;\n return {\n value: item\n };\n }\n\n return {\n done: true\n };\n });\n};\n/**\n * Attaching the #.entries method to Symbol.iterator if possible.\n */\n\n\nif (typeof Symbol !== 'undefined') SparseMap.prototype[Symbol.iterator] = SparseMap.prototype.entries;\n/**\n * Convenience known methods.\n */\n\nSparseMap.prototype.inspect = function () {\n var proxy = new Map();\n\n for (var i = 0; i < this.size; i++) {\n proxy.set(this.dense[i], this.vals[i]);\n } // Trick so that node displays the name of the constructor\n\n\n Object.defineProperty(proxy, 'constructor', {\n value: SparseMap,\n enumerable: false\n });\n proxy.length = this.length;\n if (this.vals.constructor !== Array) proxy.type = this.vals.constructor.name;\n return proxy;\n};\n\nif (typeof Symbol !== 'undefined') SparseMap.prototype[Symbol.for('nodejs.util.inspect.custom')] = SparseMap.prototype.inspect;\n/**\n * Exporting.\n */\n\nmodule.exports = SparseMap;","/**\n * Mnemonist SparseQueueSet\n * =========================\n *\n * JavaScript sparse queue set implemented on top of byte arrays.\n *\n * [Reference]: https://research.swtch.com/sparse\n */\nvar Iterator = require('obliterator/iterator'),\n getPointerArray = require('./utils/typed-arrays.js').getPointerArray;\n/**\n * SparseQueueSet.\n *\n * @constructor\n */\n\n\nfunction SparseQueueSet(capacity) {\n var ByteArray = getPointerArray(capacity); // Properties\n\n this.start = 0;\n this.size = 0;\n this.capacity = capacity;\n this.dense = new ByteArray(capacity);\n this.sparse = new ByteArray(capacity);\n}\n/**\n * Method used to clear the structure.\n *\n * @return {undefined}\n */\n\n\nSparseQueueSet.prototype.clear = function () {\n this.start = 0;\n this.size = 0;\n};\n/**\n * Method used to check the existence of a member in the queue.\n *\n * @param {number} member - Member to test.\n * @return {SparseQueueSet}\n */\n\n\nSparseQueueSet.prototype.has = function (member) {\n if (this.size === 0) return false;\n var index = this.sparse[member];\n var inBounds = index < this.capacity && index >= this.start && index < this.start + this.size || index < (this.start + this.size) % this.capacity;\n return inBounds && this.dense[index] === member;\n};\n/**\n * Method used to add a member to the queue.\n *\n * @param {number} member - Member to add.\n * @return {SparseQueueSet}\n */\n\n\nSparseQueueSet.prototype.enqueue = function (member) {\n var index = this.sparse[member];\n\n if (this.size !== 0) {\n var inBounds = index < this.capacity && index >= this.start && index < this.start + this.size || index < (this.start + this.size) % this.capacity;\n if (inBounds && this.dense[index] === member) return this;\n }\n\n index = (this.start + this.size) % this.capacity;\n this.dense[index] = member;\n this.sparse[member] = index;\n this.size++;\n return this;\n};\n/**\n * Method used to remove the next member from the queue.\n *\n * @param {number} member - Member to delete.\n * @return {boolean}\n */\n\n\nSparseQueueSet.prototype.dequeue = function () {\n if (this.size === 0) return;\n var index = this.start;\n this.size--;\n this.start++;\n if (this.start === this.capacity) this.start = 0;\n var member = this.dense[index];\n this.sparse[member] = this.capacity;\n return member;\n};\n/**\n * Method used to iterate over the queue's values.\n *\n * @param {function} callback - Function to call for each item.\n * @param {object} scope - Optional scope.\n * @return {undefined}\n */\n\n\nSparseQueueSet.prototype.forEach = function (callback, scope) {\n scope = arguments.length > 1 ? scope : this;\n var c = this.capacity,\n l = this.size,\n i = this.start,\n j = 0;\n\n while (j < l) {\n callback.call(scope, this.dense[i], j, this);\n i++;\n j++;\n if (i === c) i = 0;\n }\n};\n/**\n * Method used to create an iterator over a set's values.\n *\n * @return {Iterator}\n */\n\n\nSparseQueueSet.prototype.values = function () {\n var dense = this.dense,\n c = this.capacity,\n l = this.size,\n i = this.start,\n j = 0;\n return new Iterator(function () {\n if (j >= l) return {\n done: true\n };\n var value = dense[i];\n i++;\n j++;\n if (i === c) i = 0;\n return {\n value: value,\n done: false\n };\n });\n};\n/**\n * Attaching the #.values method to Symbol.iterator if possible.\n */\n\n\nif (typeof Symbol !== 'undefined') SparseQueueSet.prototype[Symbol.iterator] = SparseQueueSet.prototype.values;\n/**\n * Convenience known methods.\n */\n\nSparseQueueSet.prototype.inspect = function () {\n var proxy = [];\n this.forEach(function (member) {\n proxy.push(member);\n }); // Trick so that node displays the name of the constructor\n\n Object.defineProperty(proxy, 'constructor', {\n value: SparseQueueSet,\n enumerable: false\n });\n proxy.capacity = this.capacity;\n return proxy;\n};\n\nif (typeof Symbol !== 'undefined') SparseQueueSet.prototype[Symbol.for('nodejs.util.inspect.custom')] = SparseQueueSet.prototype.inspect;\n/**\n * Exporting.\n */\n\nmodule.exports = SparseQueueSet;","/**\n * Pandemonium Random Index\n * =========================\n *\n * Random index function.\n */\n\n/**\n * Creating a function returning a random index from the given array.\n *\n * @param {function} rng - RNG function returning uniform random.\n * @return {function} - The created function.\n */\nfunction createRandomIndex(rng) {\n /**\n * Random function.\n *\n * @param {array|number} array - Target array or length of the array.\n * @return {number}\n */\n return function (length) {\n if (typeof length !== 'number') length = length.length;\n return Math.floor(rng() * length);\n };\n}\n/**\n * Default random index using `Math.random`.\n */\n\n\nvar randomIndex = createRandomIndex(Math.random);\n/**\n * Exporting.\n */\n\nrandomIndex.createRandomIndex = createRandomIndex;\nmodule.exports = randomIndex;","/**\n * Graphology Louvain Indices\n * ===========================\n *\n * Undirected & Directed Louvain Index structures used to compute the famous\n * Louvain community detection algorithm.\n *\n * Most of the rationale is explained in `graphology-metrics`.\n *\n * Note that this index shares a lot with the classic Union-Find data\n * structure. It also relies on a unused id stack to make sure we can\n * increase again the number of communites when isolating nodes.\n *\n * [Articles]\n * M. E. J. Newman, « Modularity and community structure in networks »,\n * Proc. Natl. Acad. Sci. USA, vol. 103, no 23, 2006, p. 8577–8582\n * https://dx.doi.org/10.1073%2Fpnas.0601602103\n *\n * Newman, M. E. J. « Community detection in networks: Modularity optimization\n * and maximum likelihood are equivalent ». Physical Review E, vol. 94, no 5,\n * novembre 2016, p. 052315. arXiv.org, doi:10.1103/PhysRevE.94.052315.\n * https://arxiv.org/pdf/1606.02319.pdf\n *\n * Blondel, Vincent D., et al. « Fast unfolding of communities in large\n * networks ». Journal of Statistical Mechanics: Theory and Experiment,\n * vol. 2008, no 10, octobre 2008, p. P10008. DOI.org (Crossref),\n * doi:10.1088/1742-5468/2008/10/P10008.\n * https://arxiv.org/pdf/0803.0476.pdf\n *\n * Nicolas Dugué, Anthony Perez. Directed Louvain: maximizing modularity in\n * directed networks. [Research Report] Université d’Orléans. 2015. hal-01231784\n * https://hal.archives-ouvertes.fr/hal-01231784\n *\n * R. Lambiotte, J.-C. Delvenne and M. Barahona. Laplacian Dynamics and\n * Multiscale Modular Structure in Networks,\n * doi:10.1109/TNSE.2015.2391998.\n * https://arxiv.org/abs/0812.1770\n *\n * [Latex]:\n *\n * Undirected Case:\n * ----------------\n *\n * \\Delta Q=\\bigg{[}\\frac{\\sum^{c}_{in}-(2d_{c}+l)}{2m}-\\bigg{(}\\frac{\\sum^{c}_{tot}-(d+l)}{2m}\\bigg{)}^{2}+\\frac{\\sum^{t}_{in}+(2d_{t}+l)}{2m}-\\bigg{(}\\frac{\\sum^{t}_{tot}+(d+l)}{2m}\\bigg{)}^{2}\\bigg{]}-\\bigg{[}\\frac{\\sum^{c}_{in}}{2m}-\\bigg{(}\\frac{\\sum^{c}_{tot}}{2m}\\bigg{)}^{2}+\\frac{\\sum^{t}_{in}}{2m}-\\bigg{(}\\frac{\\sum^{t}_{tot}}{2m}\\bigg{)}^{2}\\bigg{]}\n * \\Delta Q=\\frac{d_{t}-d_{c}}{m}+\\frac{l\\sum^{c}_{tot}+d\\sum^{c}_{tot}-d^{2}-l^{2}-2dl-l\\sum^{t}_{tot}-d\\sum^{t}_{tot}}{2m^{2}}\n * \\Delta Q=\\frac{d_{t}-d_{c}}{m}+\\frac{(l+d)\\sum^{c}_{tot}-d^{2}-l^{2}-2dl-(l+d)\\sum^{t}_{tot}}{2m^{2}}\n *\n * Directed Case:\n * --------------\n * \\Delta Q_d=\\bigg{[}\\frac{\\sum^{c}_{in}-(d_{c.in}+d_{c.out}+l)}{m}-\\frac{(\\sum^{c}_{tot.in}-(d_{in}+l))(\\sum^{c}_{tot.out}-(d_{out}+l))}{m^{2}}+\\frac{\\sum^{t}_{in}+(d_{t.in}+d_{t.out}+l)}{m}-\\frac{(\\sum^{t}_{tot.in}+(d_{in}+l))(\\sum^{t}_{tot.out}+(d_{out}+l))}{m^{2}}\\bigg{]}-\\bigg{[}\\frac{\\sum^{c}_{in}}{m}-\\frac{\\sum^{c}_{tot.in}\\sum^{c}_{tot.out}}{m^{2}}+\\frac{\\sum^{t}_{in}}{m}-\\frac{\\sum^{t}_{tot.in}\\sum^{t}_{tot.out}}{m^{2}}\\bigg{]}\n *\n * [Notes]:\n * Louvain is a bit unclear on this but delta computation are not derived from\n * Q1 - Q2 but rather between Q when considered node is isolated in its own\n * community versus Q with this node in target community. This is in fact\n * an optimization because the subtract part is constant in the formulae and\n * does not affect delta comparisons.\n */\nvar typed = require('mnemonist/utils/typed-arrays');\n\nvar resolveDefaults = require('graphology-utils/defaults');\n\nvar createEdgeWeightGetter = require('graphology-utils/getters').createEdgeWeightGetter;\n\nvar INSPECT = Symbol.for('nodejs.util.inspect.custom');\nvar DEFAULTS = {\n getEdgeWeight: 'weight',\n keepDendrogram: false,\n resolution: 1\n};\n\nfunction UndirectedLouvainIndex(graph, options) {\n // Solving options\n options = resolveDefaults(options, DEFAULTS);\n var resolution = options.resolution; // Weight getters\n\n var getEdgeWeight = createEdgeWeightGetter(options.getEdgeWeight).fromEntry; // Building the index\n\n var size = (graph.size - graph.selfLoopCount) * 2;\n var NeighborhoodPointerArray = typed.getPointerArray(size);\n var NodesPointerArray = typed.getPointerArray(graph.order + 1); // NOTE: this memory optimization can yield overflow deopt when computing deltas\n\n var WeightsArray = options.getEdgeWeight ? Float64Array : typed.getPointerArray(graph.size * 2); // Properties\n\n this.C = graph.order;\n this.M = 0;\n this.E = size;\n this.U = 0;\n this.resolution = resolution;\n this.level = 0;\n this.graph = graph;\n this.nodes = new Array(graph.order);\n this.keepDendrogram = options.keepDendrogram; // Edge-level\n\n this.neighborhood = new NodesPointerArray(size);\n this.weights = new WeightsArray(size); // Node-level\n\n this.loops = new WeightsArray(graph.order);\n this.starts = new NeighborhoodPointerArray(graph.order + 1);\n this.belongings = new NodesPointerArray(graph.order);\n this.dendrogram = [];\n this.mapping = null; // Community-level\n\n this.counts = new NodesPointerArray(graph.order);\n this.unused = new NodesPointerArray(graph.order);\n this.totalWeights = new WeightsArray(graph.order);\n var ids = {};\n var weight;\n var i = 0,\n n = 0;\n var self = this;\n graph.forEachNode(function (node) {\n self.nodes[i] = node; // Node map to index\n\n ids[node] = i; // Initializing starts\n\n n += graph.undirectedDegreeWithoutSelfLoops(node);\n self.starts[i] = n; // Belongings\n\n self.belongings[i] = i;\n self.counts[i] = 1;\n i++;\n }); // Single sweep over the edges\n\n graph.forEachEdge(function (edge, attr, source, target, sa, ta, u) {\n weight = getEdgeWeight(edge, attr, source, target, sa, ta, u);\n source = ids[source];\n target = ids[target];\n self.M += weight; // Self loop?\n\n if (source === target) {\n self.totalWeights[source] += weight * 2;\n self.loops[source] = weight * 2;\n } else {\n self.totalWeights[source] += weight;\n self.totalWeights[target] += weight;\n var startSource = --self.starts[source],\n startTarget = --self.starts[target];\n self.neighborhood[startSource] = target;\n self.neighborhood[startTarget] = source;\n self.weights[startSource] = weight;\n self.weights[startTarget] = weight;\n }\n });\n this.starts[i] = this.E;\n if (this.keepDendrogram) this.dendrogram.push(this.belongings.slice());else this.mapping = this.belongings.slice();\n}\n\nUndirectedLouvainIndex.prototype.isolate = function (i, degree) {\n var currentCommunity = this.belongings[i]; // The node is already isolated\n\n if (this.counts[currentCommunity] === 1) return currentCommunity;\n var newCommunity = this.unused[--this.U];\n var loops = this.loops[i];\n this.totalWeights[currentCommunity] -= degree + loops;\n this.totalWeights[newCommunity] += degree + loops;\n this.belongings[i] = newCommunity;\n this.counts[currentCommunity]--;\n this.counts[newCommunity]++;\n return newCommunity;\n};\n\nUndirectedLouvainIndex.prototype.move = function (i, degree, targetCommunity) {\n var currentCommunity = this.belongings[i],\n loops = this.loops[i];\n this.totalWeights[currentCommunity] -= degree + loops;\n this.totalWeights[targetCommunity] += degree + loops;\n this.belongings[i] = targetCommunity;\n var nowEmpty = this.counts[currentCommunity]-- === 1;\n this.counts[targetCommunity]++;\n if (nowEmpty) this.unused[this.U++] = currentCommunity;\n};\n\nUndirectedLouvainIndex.prototype.computeNodeDegree = function (i) {\n var o, l, weight;\n var degree = 0;\n\n for (o = this.starts[i], l = this.starts[i + 1]; o < l; o++) {\n weight = this.weights[o];\n degree += weight;\n }\n\n return degree;\n};\n\nUndirectedLouvainIndex.prototype.expensiveIsolate = function (i) {\n var degree = this.computeNodeDegree(i);\n return this.isolate(i, degree);\n};\n\nUndirectedLouvainIndex.prototype.expensiveMove = function (i, ci) {\n var degree = this.computeNodeDegree(i);\n this.move(i, degree, ci);\n};\n\nUndirectedLouvainIndex.prototype.zoomOut = function () {\n var inducedGraph = new Array(this.C - this.U),\n newLabels = {};\n var N = this.nodes.length;\n var C = 0,\n E = 0;\n var i, j, l, m, n, ci, cj, data, adj; // Renumbering communities\n\n for (i = 0, l = this.C; i < l; i++) {\n ci = this.belongings[i];\n\n if (!(ci in newLabels)) {\n newLabels[ci] = C;\n inducedGraph[C] = {\n adj: {},\n totalWeights: this.totalWeights[ci],\n internalWeights: 0\n };\n C++;\n } // We do this to otpimize the number of lookups in next loop\n\n\n this.belongings[i] = newLabels[ci];\n } // Actualizing dendrogram\n\n\n var currentLevel, nextLevel;\n\n if (this.keepDendrogram) {\n currentLevel = this.dendrogram[this.level];\n nextLevel = new (typed.getPointerArray(C))(N);\n\n for (i = 0; i < N; i++) {\n nextLevel[i] = this.belongings[currentLevel[i]];\n }\n\n this.dendrogram.push(nextLevel);\n } else {\n for (i = 0; i < N; i++) {\n this.mapping[i] = this.belongings[this.mapping[i]];\n }\n } // Building induced graph matrix\n\n\n for (i = 0, l = this.C; i < l; i++) {\n ci = this.belongings[i];\n data = inducedGraph[ci];\n adj = data.adj;\n data.internalWeights += this.loops[i];\n\n for (j = this.starts[i], m = this.starts[i + 1]; j < m; j++) {\n n = this.neighborhood[j];\n cj = this.belongings[n];\n\n if (ci === cj) {\n data.internalWeights += this.weights[j];\n continue;\n }\n\n if (!(cj in adj)) adj[cj] = 0;\n adj[cj] += this.weights[j];\n }\n } // Rewriting neighborhood\n\n\n this.C = C;\n n = 0;\n\n for (ci = 0; ci < C; ci++) {\n data = inducedGraph[ci];\n adj = data.adj;\n ci = +ci;\n this.totalWeights[ci] = data.totalWeights;\n this.loops[ci] = data.internalWeights;\n this.counts[ci] = 1;\n this.starts[ci] = n;\n this.belongings[ci] = ci;\n\n for (cj in adj) {\n this.neighborhood[n] = +cj;\n this.weights[n] = adj[cj];\n E++;\n n++;\n }\n }\n\n this.starts[C] = E;\n this.E = E;\n this.U = 0;\n this.level++;\n return newLabels;\n};\n\nUndirectedLouvainIndex.prototype.modularity = function () {\n var ci, cj, i, j, m;\n var Q = 0;\n var M2 = this.M * 2;\n var internalWeights = new Float64Array(this.C);\n\n for (i = 0; i < this.C; i++) {\n ci = this.belongings[i];\n internalWeights[ci] += this.loops[i];\n\n for (j = this.starts[i], m = this.starts[i + 1]; j < m; j++) {\n cj = this.belongings[this.neighborhood[j]];\n if (ci !== cj) continue;\n internalWeights[ci] += this.weights[j];\n }\n }\n\n for (i = 0; i < this.C; i++) {\n Q += internalWeights[i] / M2 - Math.pow(this.totalWeights[i] / M2, 2) * this.resolution;\n }\n\n return Q;\n};\n\nUndirectedLouvainIndex.prototype.delta = function (i, degree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalWeight = this.totalWeights[targetCommunity];\n degree += this.loops[i];\n return targetCommunityDegree / M - // NOTE: formula is a bit different here because targetCommunityDegree is passed without * 2\n targetCommunityTotalWeight * degree * this.resolution / (2 * M * M);\n};\n\nUndirectedLouvainIndex.prototype.deltaWithOwnCommunity = function (i, degree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalWeight = this.totalWeights[targetCommunity];\n degree += this.loops[i];\n return targetCommunityDegree / M - // NOTE: formula is a bit different here because targetCommunityDegree is passed without * 2\n (targetCommunityTotalWeight - degree) * degree * this.resolution / (2 * M * M);\n}; // NOTE: this is just a faster but equivalent version of #.delta\n// It is just off by a constant factor and is just faster to compute\n\n\nUndirectedLouvainIndex.prototype.fastDelta = function (i, degree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalWeight = this.totalWeights[targetCommunity];\n degree += this.loops[i];\n return targetCommunityDegree - degree * targetCommunityTotalWeight * this.resolution / (2 * M);\n};\n\nUndirectedLouvainIndex.prototype.fastDeltaWithOwnCommunity = function (i, degree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalWeight = this.totalWeights[targetCommunity];\n degree += this.loops[i];\n return targetCommunityDegree - degree * (targetCommunityTotalWeight - degree) * this.resolution / (2 * M);\n};\n\nUndirectedLouvainIndex.prototype.bounds = function (i) {\n return [this.starts[i], this.starts[i + 1]];\n};\n\nUndirectedLouvainIndex.prototype.project = function () {\n var self = this;\n var projection = {};\n self.nodes.slice(0, this.C).forEach(function (node, i) {\n projection[node] = Array.from(self.neighborhood.slice(self.starts[i], self.starts[i + 1])).map(function (j) {\n return self.nodes[j];\n });\n });\n return projection;\n};\n\nUndirectedLouvainIndex.prototype.collect = function (level) {\n if (arguments.length < 1) level = this.level;\n var o = {};\n var mapping = this.keepDendrogram ? this.dendrogram[level] : this.mapping;\n var i, l;\n\n for (i = 0, l = mapping.length; i < l; i++) {\n o[this.nodes[i]] = mapping[i];\n }\n\n return o;\n};\n\nUndirectedLouvainIndex.prototype.assign = function (prop, level) {\n if (arguments.length < 2) level = this.level;\n var mapping = this.keepDendrogram ? this.dendrogram[level] : this.mapping;\n var i, l;\n\n for (i = 0, l = mapping.length; i < l; i++) {\n this.graph.setNodeAttribute(this.nodes[i], prop, mapping[i]);\n }\n};\n\nUndirectedLouvainIndex.prototype[INSPECT] = function () {\n var proxy = {}; // Trick so that node displays the name of the constructor\n\n Object.defineProperty(proxy, 'constructor', {\n value: UndirectedLouvainIndex,\n enumerable: false\n });\n proxy.C = this.C;\n proxy.M = this.M;\n proxy.E = this.E;\n proxy.U = this.U;\n proxy.resolution = this.resolution;\n proxy.level = this.level;\n proxy.nodes = this.nodes;\n proxy.starts = this.starts.slice(0, proxy.C + 1);\n var eTruncated = ['neighborhood', 'weights'];\n var cTruncated = ['counts', 'loops', 'belongings', 'totalWeights'];\n var self = this;\n eTruncated.forEach(function (key) {\n proxy[key] = self[key].slice(0, proxy.E);\n });\n cTruncated.forEach(function (key) {\n proxy[key] = self[key].slice(0, proxy.C);\n });\n proxy.unused = this.unused.slice(0, this.U);\n if (this.keepDendrogram) proxy.dendrogram = this.dendrogram;else proxy.mapping = this.mapping;\n return proxy;\n};\n\nfunction DirectedLouvainIndex(graph, options) {\n // Solving options\n options = resolveDefaults(options, DEFAULTS);\n var resolution = options.resolution; // Weight getters\n\n var getEdgeWeight = createEdgeWeightGetter(options.getEdgeWeight).fromEntry; // Building the index\n\n var size = (graph.size - graph.selfLoopCount) * 2;\n var NeighborhoodPointerArray = typed.getPointerArray(size);\n var NodesPointerArray = typed.getPointerArray(graph.order + 1); // NOTE: this memory optimization can yield overflow deopt when computing deltas\n\n var WeightsArray = options.getEdgeWeight ? Float64Array : typed.getPointerArray(graph.size * 2); // Properties\n\n this.C = graph.order;\n this.M = 0;\n this.E = size;\n this.U = 0;\n this.resolution = resolution;\n this.level = 0;\n this.graph = graph;\n this.nodes = new Array(graph.order);\n this.keepDendrogram = options.keepDendrogram; // Edge-level\n // NOTE: edges are stored out then in, in this order\n\n this.neighborhood = new NodesPointerArray(size);\n this.weights = new WeightsArray(size); // Node-level\n\n this.loops = new WeightsArray(graph.order);\n this.starts = new NeighborhoodPointerArray(graph.order + 1);\n this.offsets = new NeighborhoodPointerArray(graph.order);\n this.belongings = new NodesPointerArray(graph.order);\n this.dendrogram = []; // Community-level\n\n this.counts = new NodesPointerArray(graph.order);\n this.unused = new NodesPointerArray(graph.order);\n this.totalInWeights = new WeightsArray(graph.order);\n this.totalOutWeights = new WeightsArray(graph.order);\n var ids = {};\n var weight;\n var i = 0,\n n = 0;\n var self = this;\n graph.forEachNode(function (node) {\n self.nodes[i] = node; // Node map to index\n\n ids[node] = i; // Initializing starts & offsets\n\n n += graph.outDegreeWithoutSelfLoops(node);\n self.starts[i] = n;\n n += graph.inDegreeWithoutSelfLoops(node);\n self.offsets[i] = n; // Belongings\n\n self.belongings[i] = i;\n self.counts[i] = 1;\n i++;\n }); // Single sweep over the edges\n\n graph.forEachEdge(function (edge, attr, source, target, sa, ta, u) {\n weight = getEdgeWeight(edge, attr, source, target, sa, ta, u);\n source = ids[source];\n target = ids[target];\n self.M += weight; // Self loop?\n\n if (source === target) {\n self.loops[source] += weight;\n self.totalInWeights[source] += weight;\n self.totalOutWeights[source] += weight;\n } else {\n self.totalOutWeights[source] += weight;\n self.totalInWeights[target] += weight;\n var startSource = --self.starts[source],\n startTarget = --self.offsets[target];\n self.neighborhood[startSource] = target;\n self.neighborhood[startTarget] = source;\n self.weights[startSource] = weight;\n self.weights[startTarget] = weight;\n }\n });\n this.starts[i] = this.E;\n if (this.keepDendrogram) this.dendrogram.push(this.belongings.slice());else this.mapping = this.belongings.slice();\n}\n\nDirectedLouvainIndex.prototype.bounds = UndirectedLouvainIndex.prototype.bounds;\n\nDirectedLouvainIndex.prototype.inBounds = function (i) {\n return [this.offsets[i], this.starts[i + 1]];\n};\n\nDirectedLouvainIndex.prototype.outBounds = function (i) {\n return [this.starts[i], this.offsets[i]];\n};\n\nDirectedLouvainIndex.prototype.project = UndirectedLouvainIndex.prototype.project;\n\nDirectedLouvainIndex.prototype.projectIn = function () {\n var self = this;\n var projection = {};\n self.nodes.slice(0, this.C).forEach(function (node, i) {\n projection[node] = Array.from(self.neighborhood.slice(self.offsets[i], self.starts[i + 1])).map(function (j) {\n return self.nodes[j];\n });\n });\n return projection;\n};\n\nDirectedLouvainIndex.prototype.projectOut = function () {\n var self = this;\n var projection = {};\n self.nodes.slice(0, this.C).forEach(function (node, i) {\n projection[node] = Array.from(self.neighborhood.slice(self.starts[i], self.offsets[i])).map(function (j) {\n return self.nodes[j];\n });\n });\n return projection;\n};\n\nDirectedLouvainIndex.prototype.isolate = function (i, inDegree, outDegree) {\n var currentCommunity = this.belongings[i]; // The node is already isolated\n\n if (this.counts[currentCommunity] === 1) return currentCommunity;\n var newCommunity = this.unused[--this.U];\n var loops = this.loops[i];\n this.totalInWeights[currentCommunity] -= inDegree + loops;\n this.totalInWeights[newCommunity] += inDegree + loops;\n this.totalOutWeights[currentCommunity] -= outDegree + loops;\n this.totalOutWeights[newCommunity] += outDegree + loops;\n this.belongings[i] = newCommunity;\n this.counts[currentCommunity]--;\n this.counts[newCommunity]++;\n return newCommunity;\n};\n\nDirectedLouvainIndex.prototype.move = function (i, inDegree, outDegree, targetCommunity) {\n var currentCommunity = this.belongings[i],\n loops = this.loops[i];\n this.totalInWeights[currentCommunity] -= inDegree + loops;\n this.totalInWeights[targetCommunity] += inDegree + loops;\n this.totalOutWeights[currentCommunity] -= outDegree + loops;\n this.totalOutWeights[targetCommunity] += outDegree + loops;\n this.belongings[i] = targetCommunity;\n var nowEmpty = this.counts[currentCommunity]-- === 1;\n this.counts[targetCommunity]++;\n if (nowEmpty) this.unused[this.U++] = currentCommunity;\n};\n\nDirectedLouvainIndex.prototype.computeNodeInDegree = function (i) {\n var o, l, weight;\n var inDegree = 0;\n\n for (o = this.offsets[i], l = this.starts[i + 1]; o < l; o++) {\n weight = this.weights[o];\n inDegree += weight;\n }\n\n return inDegree;\n};\n\nDirectedLouvainIndex.prototype.computeNodeOutDegree = function (i) {\n var o, l, weight;\n var outDegree = 0;\n\n for (o = this.starts[i], l = this.offsets[i]; o < l; o++) {\n weight = this.weights[o];\n outDegree += weight;\n }\n\n return outDegree;\n};\n\nDirectedLouvainIndex.prototype.expensiveMove = function (i, ci) {\n var inDegree = this.computeNodeInDegree(i),\n outDegree = this.computeNodeOutDegree(i);\n this.move(i, inDegree, outDegree, ci);\n};\n\nDirectedLouvainIndex.prototype.zoomOut = function () {\n var inducedGraph = new Array(this.C - this.U),\n newLabels = {};\n var N = this.nodes.length;\n var C = 0,\n E = 0;\n var i, j, l, m, n, ci, cj, data, offset, out, adj, inAdj, outAdj; // Renumbering communities\n\n for (i = 0, l = this.C; i < l; i++) {\n ci = this.belongings[i];\n\n if (!(ci in newLabels)) {\n newLabels[ci] = C;\n inducedGraph[C] = {\n inAdj: {},\n outAdj: {},\n totalInWeights: this.totalInWeights[ci],\n totalOutWeights: this.totalOutWeights[ci],\n internalWeights: 0\n };\n C++;\n } // We do this to otpimize the number of lookups in next loop\n\n\n this.belongings[i] = newLabels[ci];\n } // Actualizing dendrogram\n\n\n var currentLevel, nextLevel;\n\n if (this.keepDendrogram) {\n currentLevel = this.dendrogram[this.level];\n nextLevel = new (typed.getPointerArray(C))(N);\n\n for (i = 0; i < N; i++) {\n nextLevel[i] = this.belongings[currentLevel[i]];\n }\n\n this.dendrogram.push(nextLevel);\n } else {\n for (i = 0; i < N; i++) {\n this.mapping[i] = this.belongings[this.mapping[i]];\n }\n } // Building induced graph matrix\n\n\n for (i = 0, l = this.C; i < l; i++) {\n ci = this.belongings[i];\n offset = this.offsets[i];\n data = inducedGraph[ci];\n inAdj = data.inAdj;\n outAdj = data.outAdj;\n data.internalWeights += this.loops[i];\n\n for (j = this.starts[i], m = this.starts[i + 1]; j < m; j++) {\n n = this.neighborhood[j];\n cj = this.belongings[n];\n out = j < offset;\n adj = out ? outAdj : inAdj;\n\n if (ci === cj) {\n if (out) data.internalWeights += this.weights[j];\n continue;\n }\n\n if (!(cj in adj)) adj[cj] = 0;\n adj[cj] += this.weights[j];\n }\n } // Rewriting neighborhood\n\n\n this.C = C;\n n = 0;\n\n for (ci = 0; ci < C; ci++) {\n data = inducedGraph[ci];\n inAdj = data.inAdj;\n outAdj = data.outAdj;\n ci = +ci;\n this.totalInWeights[ci] = data.totalInWeights;\n this.totalOutWeights[ci] = data.totalOutWeights;\n this.loops[ci] = data.internalWeights;\n this.counts[ci] = 1;\n this.starts[ci] = n;\n this.belongings[ci] = ci;\n\n for (cj in outAdj) {\n this.neighborhood[n] = +cj;\n this.weights[n] = outAdj[cj];\n E++;\n n++;\n }\n\n this.offsets[ci] = n;\n\n for (cj in inAdj) {\n this.neighborhood[n] = +cj;\n this.weights[n] = inAdj[cj];\n E++;\n n++;\n }\n }\n\n this.starts[C] = E;\n this.E = E;\n this.U = 0;\n this.level++;\n return newLabels;\n};\n\nDirectedLouvainIndex.prototype.modularity = function () {\n var ci, cj, i, j, m;\n var Q = 0;\n var M = this.M;\n var internalWeights = new Float64Array(this.C);\n\n for (i = 0; i < this.C; i++) {\n ci = this.belongings[i];\n internalWeights[ci] += this.loops[i];\n\n for (j = this.starts[i], m = this.offsets[i]; j < m; j++) {\n cj = this.belongings[this.neighborhood[j]];\n if (ci !== cj) continue;\n internalWeights[ci] += this.weights[j];\n }\n }\n\n for (i = 0; i < this.C; i++) {\n Q += internalWeights[i] / M - this.totalInWeights[i] * this.totalOutWeights[i] / Math.pow(M, 2) * this.resolution;\n }\n\n return Q;\n};\n\nDirectedLouvainIndex.prototype.delta = function (i, inDegree, outDegree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalInWeight = this.totalInWeights[targetCommunity],\n targetCommunityTotalOutWeight = this.totalOutWeights[targetCommunity];\n var loops = this.loops[i];\n inDegree += loops;\n outDegree += loops;\n return targetCommunityDegree / M - (outDegree * targetCommunityTotalInWeight + inDegree * targetCommunityTotalOutWeight) * this.resolution / (M * M);\n};\n\nDirectedLouvainIndex.prototype.deltaWithOwnCommunity = function (i, inDegree, outDegree, targetCommunityDegree, targetCommunity) {\n var M = this.M;\n var targetCommunityTotalInWeight = this.totalInWeights[targetCommunity],\n targetCommunityTotalOutWeight = this.totalOutWeights[targetCommunity];\n var loops = this.loops[i];\n inDegree += loops;\n outDegree += loops;\n return targetCommunityDegree / M - (outDegree * (targetCommunityTotalInWeight - inDegree) + inDegree * (targetCommunityTotalOutWeight - outDegree)) * this.resolution / (M * M);\n};\n\nDirectedLouvainIndex.prototype.collect = UndirectedLouvainIndex.prototype.collect;\nDirectedLouvainIndex.prototype.assign = UndirectedLouvainIndex.prototype.assign;\n\nDirectedLouvainIndex.prototype[INSPECT] = function () {\n var proxy = {}; // Trick so that node displays the name of the constructor\n\n Object.defineProperty(proxy, 'constructor', {\n value: DirectedLouvainIndex,\n enumerable: false\n });\n proxy.C = this.C;\n proxy.M = this.M;\n proxy.E = this.E;\n proxy.U = this.U;\n proxy.resolution = this.resolution;\n proxy.level = this.level;\n proxy.nodes = this.nodes;\n proxy.starts = this.starts.slice(0, proxy.C + 1);\n var eTruncated = ['neighborhood', 'weights'];\n var cTruncated = ['counts', 'offsets', 'loops', 'belongings', 'totalInWeights', 'totalOutWeights'];\n var self = this;\n eTruncated.forEach(function (key) {\n proxy[key] = self[key].slice(0, proxy.E);\n });\n cTruncated.forEach(function (key) {\n proxy[key] = self[key].slice(0, proxy.C);\n });\n proxy.unused = this.unused.slice(0, this.U);\n if (this.keepDendrogram) proxy.dendrogram = this.dendrogram;else proxy.mapping = this.mapping;\n return proxy;\n};\n\nexports.UndirectedLouvainIndex = UndirectedLouvainIndex;\nexports.DirectedLouvainIndex = DirectedLouvainIndex;","/**\n * Graphology Weight Getter\n * =========================\n *\n * Function creating weight getters.\n */\nfunction coerceWeight(value) {\n // Ensuring target value is a correct number\n if (typeof value !== 'number' || isNaN(value)) return 1;\n return value;\n}\n\nfunction createNodeValueGetter(nameOrFunction, defaultValue) {\n var getter = {};\n\n var coerceToDefault = function coerceToDefault(v) {\n if (typeof v === 'undefined') return defaultValue;\n return v;\n };\n\n if (typeof defaultValue === 'function') coerceToDefault = defaultValue;\n\n var get = function get(attributes) {\n return coerceToDefault(attributes[nameOrFunction]);\n };\n\n var returnDefault = function returnDefault() {\n return coerceToDefault(undefined);\n };\n\n if (typeof nameOrFunction === 'string') {\n getter.fromAttributes = get;\n\n getter.fromGraph = function (graph, node) {\n return get(graph.getNodeAttributes(node));\n };\n\n getter.fromEntry = function (node, attributes) {\n return get(attributes);\n };\n } else if (typeof nameOrFunction === 'function') {\n getter.fromAttributes = function () {\n throw new Error('graphology-utils/getters/createNodeValueGetter: irrelevant usage.');\n };\n\n getter.fromGraph = function (graph, node) {\n return coerceToDefault(nameOrFunction(node, graph.getNodeAttributes(node)));\n };\n\n getter.fromEntry = function (node, attributes) {\n return coerceToDefault(nameOrFunction(node, attributes));\n };\n } else {\n getter.fromAttributes = returnDefault;\n getter.fromGraph = returnDefault;\n getter.fromEntry = returnDefault;\n }\n\n return getter;\n}\n\nfunction createEdgeValueGetter(nameOrFunction, defaultValue) {\n var getter = {};\n\n var coerceToDefault = function coerceToDefault(v) {\n if (typeof v === 'undefined') return defaultValue;\n return v;\n };\n\n if (typeof defaultValue === 'function') coerceToDefault = defaultValue;\n\n var get = function get(attributes) {\n return coerceToDefault(attributes[nameOrFunction]);\n };\n\n var returnDefault = function returnDefault() {\n return coerceToDefault(undefined);\n };\n\n if (typeof nameOrFunction === 'string') {\n getter.fromAttributes = get;\n\n getter.fromGraph = function (graph, edge) {\n return get(graph.getEdgeAttributes(edge));\n };\n\n getter.fromEntry = function (edge, attributes) {\n return get(attributes);\n };\n\n getter.fromPartialEntry = getter.fromEntry;\n getter.fromMinimalEntry = getter.fromEntry;\n } else if (typeof nameOrFunction === 'function') {\n getter.fromAttributes = function () {\n throw new Error('graphology-utils/getters/createEdgeValueGetter: irrelevant usage.');\n };\n\n getter.fromGraph = function (graph, edge) {\n // TODO: we can do better, check #310\n var extremities = graph.extremities(edge);\n return coerceToDefault(nameOrFunction(edge, graph.getEdgeAttributes(edge), extremities[0], extremities[1], graph.getNodeAttributes(extremities[0]), graph.getNodeAttributes(extremities[1]), graph.isUndirected(edge)));\n };\n\n getter.fromEntry = function (e, a, s, t, sa, ta, u) {\n return coerceToDefault(nameOrFunction(e, a, s, t, sa, ta, u));\n };\n\n getter.fromPartialEntry = function (e, a, s, t) {\n return coerceToDefault(nameOrFunction(e, a, s, t));\n };\n\n getter.fromMinimalEntry = function (e, a) {\n return coerceToDefault(nameOrFunction(e, a));\n };\n } else {\n getter.fromAttributes = returnDefault;\n getter.fromGraph = returnDefault;\n getter.fromEntry = returnDefault;\n getter.fromMinimalEntry = returnDefault;\n }\n\n return getter;\n}\n\nexports.createNodeValueGetter = createNodeValueGetter;\nexports.createEdgeValueGetter = createEdgeValueGetter;\n\nexports.createEdgeWeightGetter = function (name) {\n return createEdgeValueGetter(name, coerceWeight);\n};","/**\n * Graphology Random Clusters Graph Generator\n * ===========================================\n *\n * Function generating a graph containing the desired number of nodes & edges\n * and organized in the desired number of clusters.\n *\n * [Author]:\n * Alexis Jacomy\n */\nvar isGraphConstructor = require('graphology-utils/is-graph-constructor');\n/**\n * Generates a random graph with clusters.\n *\n * @param {Class} GraphClass - The Graph Class to instantiate.\n * @param {object} options - Options:\n * @param {number} clusterDensity - Probability that an edge will link two\n * nodes of the same cluster.\n * @param {number} order - Number of nodes.\n * @param {number} size - Number of edges.\n * @param {number} clusters - Number of clusters.\n * @param {function} rng - Custom RNG function.\n * @return {Graph}\n */\n\n\nmodule.exports = function (GraphClass, options) {\n if (!isGraphConstructor(GraphClass)) throw new Error('graphology-generators/random/clusters: invalid Graph constructor.');\n options = options || {};\n var clusterDensity = 'clusterDensity' in options ? options.clusterDensity : 0.5,\n rng = options.rng || Math.random,\n N = options.order,\n E = options.size,\n C = options.clusters;\n if (typeof clusterDensity !== 'number' || clusterDensity > 1 || clusterDensity < 0) throw new Error('graphology-generators/random/clusters: `clusterDensity` option should be a number between 0 and 1.');\n if (typeof rng !== 'function') throw new Error('graphology-generators/random/clusters: `rng` option should be a function.');\n if (typeof N !== 'number' || N <= 0) throw new Error('graphology-generators/random/clusters: `order` option should be a positive number.');\n if (typeof E !== 'number' || E <= 0) throw new Error('graphology-generators/random/clusters: `size` option should be a positive number.');\n if (typeof C !== 'number' || C <= 0) throw new Error('graphology-generators/random/clusters: `clusters` option should be a positive number.'); // Creating graph\n\n var graph = new GraphClass(); // Adding nodes\n\n if (!N) return graph; // Initializing clusters\n\n var clusters = new Array(C),\n cluster,\n nodes,\n i;\n\n for (i = 0; i < C; i++) {\n clusters[i] = [];\n }\n\n for (i = 0; i < N; i++) {\n cluster = rng() * C | 0;\n graph.addNode(i, {\n cluster: cluster\n });\n clusters[cluster].push(i);\n } // Adding edges\n\n\n if (!E) return graph;\n var source, target, l;\n\n for (i = 0; i < E; i++) {\n // Adding a link between two random nodes\n if (rng() < 1 - clusterDensity) {\n source = rng() * N | 0;\n\n do {\n target = rng() * N | 0;\n } while (source === target);\n } // Adding a link between two nodes from the same cluster\n else {\n cluster = rng() * C | 0;\n nodes = clusters[cluster];\n l = nodes.length;\n\n if (!l || l < 2) {\n // TODO: in those case we may have fewer edges than required\n // TODO: check where E is over full clusterDensity\n continue;\n }\n\n source = nodes[rng() * l | 0];\n\n do {\n target = nodes[rng() * l | 0];\n } while (source === target);\n }\n\n if (!graph.multi) graph.mergeEdge(source, target);else graph.addEdge(source, target);\n }\n\n return graph;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Graphology isGraphConstructor\n * ==============================\n *\n * Very simple function aiming at ensuring the given variable is a\n * graphology constructor.\n */\n\n/**\n * Checking the value is a graphology constructor.\n *\n * @param {any} value - Target value.\n * @return {boolean}\n */\nmodule.exports = function isGraphConstructor(value) {\n return value !== null && typeof value === 'function' && _typeof(value.prototype) === 'object' && typeof value.prototype.addUndirectedEdgeWithKey === 'function' && typeof value.prototype.dropNode === 'function';\n};","function _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); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar sparkMd5 = {\n exports: {}\n};\n\n(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined$1) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined$1) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\nvar fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nvar FileChecksum = /*#__PURE__*/function () {\n function FileChecksum(file) {\n _classCallCheck(this, FileChecksum);\n\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n _createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new SparkMD5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \".concat(this.file.name));\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var _start = this.chunkIndex * this.chunkSize;\n\n var end = Math.min(_start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, _start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }], [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n return FileChecksum;\n}();\n\nfunction getMetaValue(name) {\n var element = findElement(document.head, \"meta[name=\\\"\".concat(name, \"\\\"]\"));\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nfunction findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n}\n\nfunction toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nvar BlobRecord = /*#__PURE__*/function () {\n function BlobRecord(file, checksum, url) {\n var _this2 = this;\n\n _classCallCheck(this, BlobRecord);\n\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this2.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this2.requestDidError(event);\n });\n }\n\n _createClass(BlobRecord, [{\n key: \"status\",\n get: function get() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get() {\n var _this$xhr = this.xhr,\n responseType = _this$xhr.responseType,\n response = _this$xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }, {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback(\"Error creating Blob for \\\"\".concat(this.file.name, \"\\\". Status: \").concat(this.status));\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }]);\n\n return BlobRecord;\n}();\n\nvar BlobUpload = /*#__PURE__*/function () {\n function BlobUpload(blob) {\n var _this3 = this;\n\n _classCallCheck(this, BlobUpload);\n\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this3.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this3.requestDidError(event);\n });\n }\n\n _createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _this$xhr2 = this.xhr,\n status = _this$xhr2.status,\n response = _this$xhr2.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback(\"Error storing \\\"\".concat(this.file.name, \"\\\". Status: \").concat(this.xhr.status));\n }\n }]);\n\n return BlobUpload;\n}();\n\nvar id = 0;\n\nvar DirectUpload = /*#__PURE__*/function () {\n function DirectUpload(file, url, delegate) {\n _classCallCheck(this, DirectUpload);\n\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n _createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this4 = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this4.file, checksum, _this4.url);\n notify(_this4.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this4.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n\n return DirectUpload;\n}();\n\nfunction notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n}\n\nvar DirectUploadController = /*#__PURE__*/function () {\n function DirectUploadController(input, file) {\n _classCallCheck(this, DirectUploadController);\n\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n _createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this5 = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this5.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this5.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"url\",\n get: function get() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\".concat(name), {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this6 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this6.uploadRequestDidProgress(event);\n });\n }\n }]);\n\n return DirectUploadController;\n}();\n\nvar inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nvar DirectUploadsController = /*#__PURE__*/function () {\n function DirectUploadsController(form) {\n _classCallCheck(this, DirectUploadsController);\n\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n _createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this7 = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this7.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this7.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\".concat(name), {\n detail: detail\n });\n }\n }]);\n\n return DirectUploadsController;\n}();\n\nvar processingAttribute = \"data-direct-uploads-processing\";\nvar submitButtonsByForm = new WeakMap();\nvar started = false;\n\nfunction start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm, true);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n}\n\nfunction didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n}\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n}\n\nfunction submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n input.disabled = true;\n}\n\nfunction enable(input) {\n input.disabled = false;\n}\n\nfunction autostart() {\n if (window.ActiveStorage) {\n start();\n }\n}\n\nsetTimeout(autostart, 1);\nexport { DirectUpload, start };","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from \"@rails/ujs\"\nimport * as ActiveStorage from \"@rails/activestorage\"\n\nRails.start()\nActiveStorage.start()\n\n\nimport { Graph } from \"graphology\"\nimport { Sigma } from \"sigma\"\nimport NoverlapLayout from 'graphology-layout-noverlap/worker';\nimport FA2Layout from \"graphology-layout-forceatlas2/worker\";\nimport forceAtlas2 from \"graphology-layout-forceatlas2\";\nimport louvain from 'graphology-communities-louvain';\nimport clusters from \"graphology-generators/random/clusters\";\nimport data from \"../data.json\";\nimport data2 from \"../data2.json\";\nimport { saveAsPNG } from './saveGraph'\n\n\ndocument.addEventListener('DOMContentLoaded', function () {\n if (typeof $ != 'undefined' && $('#headergraph').length) {\n const container = document.getElementById(\"headergraph\");\n const graph = new Graph();\n graph.import(data2);\n\n // node sizes\n const sizes = graph.nodes().map(function (node) { return graph.getNodeAttribute(node, 'size') });\n const minNodeSize = Math.min.apply(Math, sizes);\n const maxNodeSize = Math.max.apply(Math, sizes);\n const minSize = 2, maxSize = 14;\n graph.updateEachNodeAttributes((node, attr) => {\n return {\n ...attr,\n size: minSize + ((attr.size - minNodeSize) / (maxNodeSize - minNodeSize)) * (maxSize - minSize)\n };\n });\n\n let renderer = new Sigma(graph, container, {\n minCameraRatio: 0.1,\n maxCameraRatio: 20\n });\n\n renderer.getMouseCaptor().kill();\n renderer.getTouchCaptor().kill();\n \n\n renderer.getMouseCaptor().on('doubleClick', (e) => {\n e.preventSigmaDefault();\n });\n renderer.setSetting(\"renderLabels\",false)\n const camera = renderer.getCamera();\n camera.setState({ ratio: 0.125 , x: 0.65, y: 0.55});\n\n const layout = new FA2Layout(graph, {\n settings: {\n linLogMode: false,\n outboundAttractionDistribution: true,\n adjustSizes: true,\n edgeWeightInfluence: 0,\n scalingRatio: 1,\n strongGravityMode: false,\n gravity: 0.05,\n slowDown: 500,\n barnesHutOptimize: true,\n barnesHutTheta: 0.6\n }\n });\n\n layout.start();\n\n setTimeout(() => {\n layout.stop();\n }, 180000);\n\n renderer.refresh();\n }\n \n\n\n if (!!document.getElementById(\"graph-container\")) {\n if (typeof color != 'undefined' && color == \"white\") {\n var body = document.getElementsByTagName('body')[0];\n body.style.background = '#FFF';\n }\n const button4 = document.getElementById(\"animation_4\")\n const container = document.getElementById(\"graph-container\")\n\n const graph = new Graph();\n\n graph.import(data)\n\n // node sizes\n const sizes = graph.nodes().map(function (node) { return graph.getNodeAttribute(node, 'size') })\n const minNodeSize = Math.min.apply(Math, sizes)\n const maxNodeSize = Math.max.apply(Math, sizes)\n const minSize = 2, maxSize = 20;\n graph.updateEachNodeAttributes((node, attr) => {\n //attr.size\n return {\n ...attr,\n size: minSize + ((attr.size - minNodeSize) / (maxNodeSize - minNodeSize)) * (maxSize - minSize)\n }\n })\n\n const layout = new FA2Layout(graph, {settings: {gravity: 1, barnesHutOptimize: true, adjustSizes: true, scalingRatio: 100, slowDown: 20}, weighted: true});\n\n let renderer = new Sigma(graph, container, {\n minCameraRatio: 0.1,\n maxCameraRatio: 10,\n\n });\n\n renderer.getMouseCaptor().on('doubleClick', (e) => {\n e.preventSigmaDefault();\n })\n\n \"use strict\";\n /**\n * This example showcases sigma's reducers, which aim to facilitate dynamically\n * changing the appearance of nodes and edges, without actually changing the\n * main graphology data.\n */\n var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n //Object.defineProperty(exports, \"__esModule\", { value: true });\n\n var state = { searchQuery: \"\" };\n function setHoveredNode(node) {\n if (node) {\n state.hoveredNode = node;\n state.hoveredNeighbors = new Set(graph.neighbors(node));\n }\n else {\n state.hoveredNode = undefined;\n state.hoveredNeighbors = undefined;\n }\n // Refresh rendering:\n renderer.refresh();\n }\n // Bind graph interactions:\n renderer.on(\"enterNode\", function (_a) {\n var node = _a.node;\n setHoveredNode(node);\n if (color === \"white\") {\n renderer.setSetting(\"labelColor\", {color:\"#333\"})\n }\n else {\n renderer.setSetting(\"labelColor\", {color:\"#778899\"})\n }\n });\n renderer.on(\"leaveNode\", function () {\n setHoveredNode(undefined);\n if (color === \"white\") {\n renderer.setSetting(\"labelColor\", {color:\"#333\"})\n }\n else {\n renderer.setSetting(\"labelColor\", {color:\"#fff\"})\n }\n });\n // Render nodes accordingly to the internal state:\n // 1. If a node is selected, it is highlighted\n // 2. If there is query, all non-matching nodes are greyed\n // 3. If there is a hovered node, all non-neighbor nodes are greyed\n renderer.setSetting(\"nodeReducer\", function (node, data) {\n const res = __assign({}, data)\n if (state.hoveredNeighbors && !state.hoveredNeighbors.has(node) && state.hoveredNode !== node) {\n res.hidden = true\n }\n if (state.selectedNode === node) {\n res.highlighted = true\n }\n else if (state.suggestions && !state.suggestions.has(node)) {\n res.hidden = true\n }\n return res;\n });\n // Render edges accordingly to the internal state:\n // 1. If a node is hovered, the edge is hidden if it is not connected to the\n // node\n // 2. If there is a query, the edge is only visible if it connects two\n // suggestions\n renderer.setSetting(\"edgeReducer\", function (edge, data) {\n var res = __assign({}, data);\n if (state.hoveredNode && !graph.hasExtremity(edge, state.hoveredNode)) {\n res.hidden = true;\n }\n if (state.suggestions && (!state.suggestions.has(graph.source(edge)) || !state.suggestions.has(graph.target(edge)))) {\n res.hidden = true;\n }\n return res;\n });\n\n renderer.setSetting(\"labelRenderedSizeThreshold\", 0);\n layout.start()\n button4.addEventListener('click', e => {\n animation_4()})\n\n function animation_4(){\n if (layout.isRunning() === true) {\n layout.stop()\n button4.innerHTML = \"Start\"\n }\n else {\n layout.start()\n button4.innerHTML = \"Stopp\"\n }\n }\n\n if (color === \"white\") {\n graph.forEachNode(function (node) {\n return graph.setNodeAttribute(node, \"color\", '#337ab7');\n });\n renderer.setSetting(\"labelColor\", {color:\"#333\"})\n renderer.setSetting(\"defaultEdgeColor\", '#a1c703')\n renderer.setSetting(\"labelDensity\", 10)\n renderer.setSetting(\"labelGridCellSize\", 150)\n }\n else {\n graph.forEachNode(function (node) {\n return graph.setNodeAttribute(node, \"color\", '#337ab7');\n });\n renderer.setSetting(\"labelColor\", {color:\"#fff\"})\n renderer.setSetting(\"defaultEdgeColor\", '#a1c703')\n renderer.setSetting(\"defaultNodeColor\", \"#fff\")\n renderer.setSetting(\"labelDensity\", 10)\n renderer.setSetting(\"labelGridCellSize\", 150)\n }\n }\n\n\n\n\n // Klappmenü-zeug\n $('#menuBtnUp').click(function() {\n $('#menuBtnUp').hide()\n $('#menuBtnDown').show()\n $('#GraphMenu').hide()\n })\n $('#menuBtnDown').click(function() {\n $('#menuBtnUp').show()\n $('#menuBtnDown').hide()\n $('#GraphMenu').show()\n })\n\n if (/Mobi/.test(navigator.userAgent)) {\n $('#menuBtnUp').hide()\n $('#menuBtnDown').show()\n $('#GraphMenu').hide()\n }\n\n\n\n $('#netz_der_woche').click(function(){\n _paq.push(['trackEvent', 'CTA - Button', 'CTA-oben']);\n });\n $('#netz_der_woche2').click(function(){\n _paq.push(['trackEvent', 'CTA - Button', 'CTA-unten']);\n });\n\n\n\n if ($('#ndw-container').length) {\n if (graphJSON.length < 1 || graphJSON.edges.length < 1) {\n $('#ndw-container').text('Es gibt keine Daten für diesen Graph.');\n return;\n }\n\n const container = document.getElementById(\"ndw-container\")\n\n const graph = new Graph();\n\n graph.import(graphJSON)\n\n // node sizes\n const sizes = graph.nodes().map(function (node) { return graph.getNodeAttribute(node, 'size') })\n const minNodeSize = Math.min.apply(Math, sizes)\n const maxNodeSize = Math.max.apply(Math, sizes)\n const minSize = 2, maxSize = 14;\n graph.updateEachNodeAttributes((node, attr) => {\n //attr.size\n return {\n ...attr,\n size: minSize + ((attr.size - minNodeSize) / (maxNodeSize - minNodeSize)) * (maxSize - minSize)\n }\n })\n\n const layout = new FA2Layout(graph, {settings: {gravity: 1, barnesHutOptimize: true, adjustSizes: true, scalingRatio: 100}, weighted: true});\n\n var zoomInBtn = document.getElementById(\"zoom-in\");\n var zoomOutBtn = document.getElementById(\"zoom-out\");\n var zoomResetBtn = document.getElementById(\"zoom-reset\");\n var renderer = new Sigma(graph, container, {\n minCameraRatio: 0.1,\n maxCameraRatio: 10,\n allowInvalidContainer: true\n });\n var camera = renderer.getCamera();\n // Bind zoom manipulation buttons\n zoomInBtn.addEventListener(\"click\", function () {\n camera.animatedZoom({ duration: 600 });\n });\n zoomOutBtn.addEventListener(\"click\", function () {\n camera.animatedUnzoom({ duration: 600 });\n });\n zoomResetBtn.addEventListener(\"click\", function () {\n camera.animatedReset({ duration: 600 });\n });\n\n camera.setState({ratio: cameraRatio});\n\n \"use strict\";\n /**\n * This example showcases sigma's reducers, which aim to facilitate dynamically\n * changing the appearance of nodes and edges, without actually changing the\n * main graphology data.\n */\n var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n //Object.defineProperty(exports, \"__esModule\", { value: true });\n\n var state = { searchQuery: \"\" };\n function setHoveredNode(node) {\n if (node) {\n state.hoveredNode = node;\n state.hoveredNeighbors = new Set(graph.neighbors(node));\n }\n else {\n state.hoveredNode = undefined;\n state.hoveredNeighbors = undefined;\n }\n // Refresh rendering:\n renderer.refresh();\n }\n // Bind graph interactions:\n renderer.on(\"enterNode\", function (_a) {\n var node = _a.node;\n setHoveredNode(node);\n });\n renderer.on(\"leaveNode\", function () {\n setHoveredNode(undefined);\n });\n // Render nodes accordingly to the internal state:\n // 1. If a node is selected, it is highlighted\n // 2. If there is query, all non-matching nodes are greyed\n // 3. If there is a hovered node, all non-neighbor nodes are greyed\n renderer.setSetting(\"nodeReducer\", function (node, data) {\n const res = __assign({}, data)\n if (state.hoveredNeighbors && !state.hoveredNeighbors.has(node) && state.hoveredNode !== node) {\n res.hidden = true\n }\n if (state.selectedNode === node) {\n res.highlighted = true\n }\n else if (state.suggestions && !state.suggestions.has(node)) {\n res.hidden = true\n }\n return res;\n });\n\n renderer.setSetting(\"labelDensity\", .5);\n renderer.setSetting(\"labelGridCellSize\", 10);\n renderer.setSetting(\"labelRenderedSizeThreshold\", labelRenderedSizeThreshold);\n // Render edges accordingly to the internal state:\n // 1. If a node is hovered, the edge is hidden if it is not connected to the\n // node\n // 2. If there is a query, the edge is only visible if it connects two\n // suggestions\n renderer.setSetting(\"edgeReducer\", function (edge, data) {\n var res = __assign({}, data);\n if (state.hoveredNode && !graph.hasExtremity(edge, state.hoveredNode)) {\n res.hidden = true;\n }\n if (state.suggestions && (!state.suggestions.has(graph.source(edge)) || !state.suggestions.has(graph.target(edge)))) {\n res.hidden = true;\n }\n return res;\n });\n\n $('#animationSwitch').change(function () {\n if($(this).is(\":checked\")){\n layout.start()\n }\n else {\n layout.stop()\n }\n });\n\n\n $('#backgroundSwitch').change(function () {\n if($(this).is(\":checked\")){\n $('footer').css('background-color','#1f1f1f');\n $('.block').css('background','rgb(30, 30, 30)');\n $('#hiddenContent').css('background','rgb(48, 48, 48)');\n $('.keywords').css('color','#fff');\n $('.sigma-edges').css('background-color','#383838')\n $('.first-block').css('background-color','rgb(30, 30, 30)');\n $('.second-block').css('background-color','rgb(30, 30, 30)');\n $('.previousNets').css('background-color','rgb(48, 48, 48)');\n $('.box-with-border').css('color','#fff');\n $('.cta-text').css('color','#fff');\n $('.headline').css('color','#fff');\n $('.headline-3').css('color','#fff');\n $('.P').css('color','#fff');\n $('blockquote-website').css('background-color','#000');\n $('.text-big').css('color','#fff');\n $('.white-text').css('color','#fff');\n $('.modal__container').css('background-color','#242424')\n $('.modal__content').css('color','#fff','important')\n $('.modal__footer').css('background-color','#242424')\n $(\"body\").css({\"background-color\":'rgb(30, 30, 30)'});\n renderer.setSetting(\"labelColor\", {color: \"#fff\"});\n }\n else {\n $('.sigma-edges').css('background-color','white')\n $('.block').css('background','#f6f6f6');\n $('#hiddenContent').css('background','rgb(232, 232, 232)');\n $('.keywords').css('color','#000');\n $('.first-block').css('background-color','rgba(255, 255, 255, 0.7)');\n $('.second-block').css('background-color','rgba(255, 255, 255, 0.7)');\n $('.previousNets').css('background-color','rgb(232, 232, 232)');\n $('.box-with-border').css('color','#000');\n $('.cta-text').css('color','#000');\n $('.headline').css('color','#000');\n $('.headline-3').css('color','#000');\n $('.P').css('color','#000');\n $('blockquote-website').css('background-color','#eee');\n $('.text-big').css('color','#000');\n $('.white-text').css('color','#000');\n $('.modal__container').css('background-color','#fff')\n $('.modal__content').css('color','#000','important')\n $('.modal__footer').css('background-color','#fff')\n $(\"body\").css({\"background-color\":'#fdfdfd'});\n renderer.setSetting(\"labelColor\", {color: \"#000\"});\n }\n });\n var defaultEdgeColor = graphJSON.edges[0].attributes.color\n var defaultNodeColor = graphJSON.nodes[0].attributes.color\n\n // edge and node colour change\n const communities = louvain(graph)\n const nodeColours = [\n nodeColor1,\n nodeColor2,\n nodeColor3,\n nodeColor4,\n nodeColor5\n ]\n const edgeColours = [\n edgeColor1,\n edgeColor2,\n edgeColor3,\n edgeColor4,\n edgeColor5\n ]\n\n graph.updateEachEdgeAttributes((edge, attr) => {\n return {\n ...attr,\n color: edgeColours[communities[graph.source(edge)]] || defaultEdgeColor\n }\n })\n graph.updateEachNodeAttributes((node, attr) => {\n return {\n ...attr,\n color: nodeColours[communities[node]] || defaultNodeColor\n }\n })\n\n\n var saveBtn = document.getElementById(\"btn-png\");\n saveBtn.addEventListener(\"click\", function () {\n var layers = [\"edges\", \"nodes\", \"labels\"]\n saveAsPNG(renderer, layers, Sigma)\n });\n\n\n }\n $('form[id^=netz_der_woche]').submit(function(e) {\n if($(this).closest('form')[0].checkValidity()){\n e.preventDefault();\n var data = $(this).serialize();\n $.ajax({\n url: '/contacts',\n type: 'post',\n data: data\n }).done(function() {\n MicroModal.show('success');\n $('.email-field').prop('disabled', true);\n $('.submit-button').prop('disabled', true);\n\n }).fail(function(jqXHR, textStatus, errorThrown) {\n if (jqXHR.responseJSON.errors[0] == 'Bitte mindestens ein Feld ausfüllen') {\n var errorHtml = '';\n $(jqXHR.responseJSON.errors).each(function(i, error) {\n errorHtml += '