{"version":3,"sources":["../node_modules/@dhi/react-components/node_modules/zrender/lib/core/util.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/config.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/PathProxy.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/bbox.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/Transformable.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/vector.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/canvas/graphic.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/transformPath.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/path.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/TSpan.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/animation/easing.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/animation/Clip.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/animation/Animator.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/windingLine.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/LRU.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Polygon.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/image.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/line.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/util.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/polygon.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/IncrementalDisplayable.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/subPixelOptimize.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Line.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/canvas/helper.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/mixin/Draggable.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/GestureMgr.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/Handler.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/Storage.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/animation/Animation.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/dom/HandlerProxy.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/zrender.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/BoundingRect.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Polyline.js","../node_modules/@dhi/react-components/node_modules/tslib/tslib.es6.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/LinearGradient.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/matrix.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Circle.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/cubic.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/arc.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/path.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Path.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/env.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/roundSector.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Sector.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/parseText.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/parseXML.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Ellipse.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/timsort.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/animation/requestAnimationFrame.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/OrientedBoundingRect.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/dashStyle.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/curve.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/fourPointsTransform.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/dom.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/text.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/convertPath.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/dividePath.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/morphPath.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/RadialGradient.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/Element.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/contain/quadratic.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Gradient.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/WeakMap.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Arc.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/smoothSpline.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/poly.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/smoothBezier.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/Point.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/color.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Ring.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/BezierCurve.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/CompoundPath.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/tool/parseSVG.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/event.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Group.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/core.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/arrayDiff.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/graphic.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/helper/Definable.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/helper/GradientManager.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/helper/PatternManager.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/helper/ClippathManager.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/helper/ShadowManager.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/svg/Painter.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/constants.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/canvas/Layer.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/canvas/Painter.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Image.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Displayable.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/core/Eventful.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/shape/Rect.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/helper/roundRect.js","../node_modules/@dhi/react-components/node_modules/zrender/lib/graphic/Text.js"],"names":["BUILTIN_OBJECT","TYPED_ARRAY","objToString","Object","prototype","toString","arrayProto","Array","nativeForEach","forEach","nativeFilter","filter","nativeSlice","slice","nativeMap","map","ctorFunction","constructor","protoFunction","methods","$override","name","fn","idStart","guid","logError","args","_i","arguments","length","console","error","apply","clone","source","result","typeStr","call","isPrimitive","i","len","Ctor","from","isDom","key","hasOwnProperty","merge","target","overwrite","isObject","targetProp","sourceProp","isArray","isBuiltInObject","mergeAll","targetAndSources","extend","assign","defaults","overlay","keysArr","keys","createCanvas","indexOf","array","value","inherits","clazz","baseClazz","clazzPrototype","F","prop","superClass","mixin","override","getOwnPropertyNames","keyList","isArrayLike","data","each","arr","cb","context","push","reduce","memo","find","obj","document","createElement","bind","isFunction","func","concat","curry","this","isString","isStringSafe","isNumber","type","isTypedArray","nodeType","ownerDocument","isGradientObject","colorStops","isImagePatternObject","image","isRegExp","eqNaN","retrieve","retrieve2","value0","value1","retrieve3","value2","normalizeCssArray","val","assert","condition","message","Error","trim","str","replace","primitiveKey","setAsPrimitive","HashMap","isArr","thisMap","visit","set","get","removeKey","createHashMap","concatArray","a","b","newArray","offset","createObject","proto","properties","create","StyleCtor","hasOwn","own","noop","dpr","window","Math","max","devicePixelRatio","screen","deviceXDPI","logicalXDPI","DARK_MODE_THRESHOLD","DARK_LABEL_COLOR","LIGHT_LABEL_COLOR","LIGHTER_LABEL_COLOR","CMD","M","L","C","Q","A","Z","R","tmpOutX","tmpOutY","min","min2","max2","mathMin","mathMax","mathCos","cos","mathSin","sin","mathSqrt","sqrt","mathAbs","abs","PI","PI2","hasTypedArray","Float32Array","tmpAngles","modPI2","radian","round","normalizeArcAngles","angles","anticlockwise","newStartAngle","delta","newEndAngle","PathProxy","notSaveData","_xi","_yi","_x0","_y0","_len","_saveData","increaseVersion","_version","getVersion","setScale","sx","sy","segmentIgnoreThreshold","_ux","_uy","setDPR","setContext","ctx","_ctx","getContext","beginPath","reset","_lineDash","_dashOffset","_pathSegLen","_pathLen","moveTo","x","y","_drawPendingPt","addData","lineTo","dx","dy","exceedUnit","_needsDash","_dashedLineTo","_pendingPtDist","d2","_pendingPtX","_pendingPtY","bezierCurveTo","x1","y1","x2","y2","x3","y3","_dashedBezierTo","quadraticCurveTo","_dashedQuadraticTo","arc","cx","cy","r","startAngle","endAngle","arcTo","radius","rect","w","h","closePath","x0","y0","fill","toStatic","stroke","setLineDash","lineDash","_dashIdx","lineDashSum","_dashSum","setLineDashOffset","setData","appendPath","path","appendSize","appendPathData","k","cmd","c","d","e","f","g","_expandData","newData","dash","idx","dashSum","dist","nDash","t","bezierLen","tmpLen","cubicAt","getBoundingRect","Number","MAX_VALUE","xi","yi","isFirst","fromLine","fromCubic","fromQuadratic","rx","ry","fromArc","width","height","vec2","BoundingRect","_calculateLength","ux","uy","pathSegLen","pathTotalLen","segCount","l","cubicLength","quadraticLength","rebuildPath","percent","displayedLength","pendingPtX","pendingPtY","drawPart","accumLength","pendingPtDist","lo","cubicSubdivide","quadraticSubdivide","psi","isEllipse","breakBuild","ellipse","d_1","newProxy","initDefaultProps","start","end","extremity","fromPoints","points","p","left","right","top","bottom","xDim","yDim","cubicExtrema","curve","n","Infinity","quadraticExtremum","quadraticAt","tx","ty","vec2Min","vec2Max","diff","tmp","angle","mIdentity","matrix","EPSILON","isNotAroundZero","scaleTmp","tmpTransform","originTransform","Transformable","getLocalTransform","m","setPosition","scaleX","scaleY","setSkew","skewX","skewY","setOrigin","originX","originY","needLocalTransform","rotation","updateTransform","parentTransform","parent","transform","_resolveGlobalScaleRatio","globalScaleRatio","getGlobalScale","relX","relY","invTransform","getComputedTransform","transformNode","ancestors","pop","setLocalTransform","atan2","shearX","decomposeTransform","ox","oy","out","transformCoordToLocal","v2","vector","transformCoordToGlobal","getLineScale","copyTransform","TRANSFORMABLE_PROPS","propName","tan","copy","v","add","v1","scaleAndAdd","sub","lenSquare","lengthSquare","mul","div","dot","scale","s","normalize","distance","distanceSquare","distSquare","negate","lerp","applyTransform","pathProxyForDraw","styleHasStroke","style","lineWidth","isValidStrokeFillStyle","strokeOrFill","styleHasFill","doFillPath","fillOpacity","originalGlobalAlpha","globalAlpha","opacity","doStrokePath","strokeOpacity","createCanvasPattern","pattern","el","createOrUpdateImage","__image","isImageReady","canvasPattern","createPattern","repeat","DOMMatrix","setTransform","rotateSelf","scaleSelf","translateSelf","SHADOW_NUMBER_PROPS","STROKE_PROPS","bindCommonProps","prevStyle","forceSetAll","scope","styleChanged","flushPathDrawn","isNaN","DEFAULT_COMMON_STYLE","blend","globalCompositeOperation","shadowColor","bindPathAndTextCommonStyle","prevEl","getStyle","inHover","fillStyle","strokeStyle","hasStroke","newLineWidth","strokeNoScale","setContextTransform","batchFill","batchStroke","__hoverStyle","brushSingle","brush","viewWidth","viewHeight","isLast","shouldBePainted","__dirty","REDARAW_BIT","__isRendered","clipPaths","__clipPaths","prevElClipPaths","forceSetTransform","forceSetStyle","isClipPathChanged","restore","allClipped","save","clipPath","isZeroArea","buildPath","shape","clip","updateClipStatus","beforeBrush","innerBeforeBrush","m0","m1","canBatchPath","Path","autoBatch","hasFill","strokePercent","canPathBatch","lastDrawType","inBatch","strokePart","firstDraw","silent","createPathProxy","hasFillGradient","hasStrokeGradient","hasFillPattern","hasStrokePattern","fillGradient","strokeGradient","fillPattern","strokePattern","getCanvasGradient","__canvasFillGradient","__canvasStrokeGradient","__canvasFillPattern","__canvasStrokePattern","normalizeLineDash","lineDashOffset","ctxLineDash","lineScale_1","rawVal","needsRebuild","SHAPE_CHANGED_BIT","pathUpdated","strokeFirst","brushPath","TSpan","text","font","DEFAULT_FONT","textAlign","textBaseline","hasLineDash","lineScale_2","strokeText","fillText","brushText","ZRImage","bindImageStyle","onload","getWidth","getHeight","aspect","sWidth","sHeight","drawImage","brushImage","IncrementalDisplayable","displayables","getDisplayables","temporalDisplayables","getTemporalDisplayables","innerScope","getCursor","displayable","innerAfterBrush","afterBrush","i_1","len_1","clearTemporalDisplayables","notClear","brushIncremental","mathAtan2","transformPath","nPoint","j","v2ApplyTransform","p_1","vMag","vRatio","u","vAngle","acos","processArc","fa","fs","psiDeg","xp","yp","lambda","cxp","cyp","theta","dTheta","commandReg","numberReg","SVGPath","_super","__extends","isPathProxy","createPathOptions","opts","pathProxy","prevCmd","cpx","cpy","subpathX","subpathY","cmdList","match","cmdText","cmdStr","charAt","pLen","parseFloat","off","ctlPtx","ctlPty","pathData","createPathProxyFromString","innerOpts","dirtyShape","createFromString","extendFromString","defaultOpts","Sub","_this","mergePath","pathEls","pathList","pathEl","getUpdatedPathProxy","pathBundle","clonePath","sourcePath","setShape","setStyle","bakeTransform","toLocal","z","z2","zlevel","DEFAULT_TSPAN_STYLE","miterLimit","DEFAULT_PATH_STYLE","createStyle","setBoundingRect","_rect","dirtyRectTolerance","Displayable","easing","linear","quadraticIn","quadraticOut","quadraticInOut","cubicIn","cubicOut","cubicInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","sinusoidalOut","sinusoidalInOut","exponentialIn","pow","exponentialOut","exponentialInOut","circularIn","circularOut","circularInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","Clip","_initialized","_startTime","_pausedTime","_paused","_life","life","_delay","delay","loop","gap","onframe","ondestroy","onrestart","step","globalTime","deltaTime","easingFunc","easingFuncs","schedule","_restart","remainder","pause","resume","arraySlice","interpolateNumber","p0","p1","interpolate1DArray","add1DArray","sign","add2DArray","len2","fillArray","val0","val1","arrDim","arr0","arr1","arr0Len","arr1Len","is1DArraySame","catmullRomInterpolate","p2","p3","t2","t3","v0","catmullRomInterpolate1DArray","cloneValue","ret","rgba2String","rgba","floor","join","tmpRgba","Track","keyframes","maxTime","interpolable","_needsSort","_isAllValueEqual","_lastFrame","_lastFramePercent","isFinished","_finished","setFinished","_additiveTrack","needsAnimate","getAdditiveTrack","addKeyframe","time","arrayDim","guessArrayDim","lastFrame","colorArray","color","isValueColor","kf","prepare","additiveTrack","kfs","sort","kfsLen","lastKf","startValue","additiveValue","frameIdx","isAdditive","valueKey","kfsNum","nextFrame","frame","range","targetArr","_additiveValue","useSpline","catmullRomInterpolate2DArray","interpolate2DArray","_addToTarget","Animator","additiveTo","_tracks","_trackKeys","_maxTime","_started","_clip","_target","_loop","_additiveAnimators","getTarget","changeTarget","when","props","whenWithKeys","propNames","tracks","track","initialValue","_getAdditiveTrack","lastFinalKf","isPaused","_doneCallback","_setTracksFinished","doneList","_doneCbs","_abortedCallback","animation","abortedList","_abortedCbs","removeClip","tracksKeys","trackName","additiveAnimators","getTrack","forceAnimate","self","stillHasAdditiveAnimator","onframeList","_onframeCbs","addClip","stop","forwardToLast","during","done","aborted","getClip","stopTracks","allAborted","saveFinalToTarget","trackKeys","__changeFinalValue","finalProps","windingLine","dir","x_","Entry","LinkedList","insert","entry","insertEntry","head","tail","next","prev","remove","clear","LRU","maxSize","_list","_maxSize","_map","put","list","removed","_lastRemovedEntry","leastUsedEntry","PolygonShape","smooth","smoothConstraint","Polygon","getDefaultShape","polyHelper","globalImageCache","findExistImage","newImageOrSrc","cachedImgObj","hostEl","cbPayload","__zrImageSrc","pendingWrap","pending","Image","onerror","imageOnLoad","__cachedImgObj","src","dirty","containStroke","_l","_a","normalizeRadian","isAroundEqual","contain","incremental","_displayables","_temporaryDisplayables","_cursor","traverse","useStyle","clearDisplaybles","markRedraw","addDisplayable","notPersistent","addDisplayables","eachPendingDisplayable","update","childRect","union","localPos","Displayble","subPixelOptimizeLine","outputShape","inputShape","subPixelOptimize","subPixelOptimizeRect","originWidth","originHeight","position","positiveOrNegative","doubledPosition","subPixelOptimizeOutputShape","LineShape","Line","getDefaultStyle","optimizedShape","pointAt","canvasGradient","global","createRadialGradient","createLinearGradient","addColorStop","prevClipPaths","Param","topTarget","Draggable","handler","on","_dragStart","_drag","_dragEnd","draggingTarget","draggable","_draggingTarget","dragging","_x","offsetX","_y","offsetY","dispatchToElement","event","drift","dropTarget","findHover","lastDropTarget","_dropTarget","GestureMgr","_track","recognize","root","_doTrack","_recognize","touches","trackItem","touch","pos","eventUtil","zrX","zrY","eventName","recognizers","gestureInfo","pointPair","pinch","trackLen","pinchEnd","pinchPre","pinchScale","isFinite","pinchCenter","pinchX","pinchY","SILENT","stopEvent","eventTool","EmptyProxy","dispose","setCursor","Eventful","HoveredResult","handlerNames","Handler","storage","painter","proxy","painterRoot","_hovered","setHandlerProxy","_draggingMgr","util","mousemove","isOutside","isOutsideBoundary","lastHovered","lastHoveredTarget","__zr","hovered","hoveredTarget","cursor","mouseout","eventControl","zrEventControl","trigger","resize","dispatch","eventArgs","setCursorStyle","cursorStyle","targetInfo","eventKey","eventPacket","eveType","cancelBubble","gestureEvent","wheelDelta","zrDelta","zrByTouch","which","makeEventPacket","__hostTarget","eachOtherLayer","layer","exclude","getDisplayList","hoverCheckResult","ignore","isHover","processGesture","stage","_gestureMgr","gestureMgr","dom","res","rectHover","isSilent","ignoreClip","getClipPath","handlerInstance","_downEl","_downPoint","_upEl","invalidZErrorLogged","logInvalidZError","warn","shapeCompareFunc","Storage","_roots","_displayList","_displayListLen","displayableSortFunc","includeIgnore","displayList","updateDisplayList","roots","_updateAndAddDisplayable","env","canvasSupported","timsort","beforeUpdate","afterUpdate","userSetClipPath","currentClipPath","parentClipPath","childrenRef","children","child","disp","decalEl","getDecalElement","textGuide","getTextGuideLine","textEl","getTextContent","addRoot","delRoot","splice","delAllRoots","getRoots","Animation","_running","_time","_pauseStart","_clipsHead","_clipsTail","addAnimator","animator","removeAnimator","notTriggerFrameAndStageUpdate","Date","getTime","nextClip","_startLoop","requestAnimationFrame","animate","options","globalEventSupported","domSupported","localNativeListenerNames","mouseHandlerNames","pointerEventNameMap","pointerdown","pointerup","pointermove","pointerout","mouse","pointer","zrUtil","nm","globalNativeListenerNames","wheelEventSupported","isPointerFromTouch","pointerType","markTouch","isLocalEl","instance","elTmp","isLocal","domBelongToZr","parentNode","FakeGlobalEvent","stopPropagation","stopImmediatePropagation","preventDefault","currentTarget","clientX","clientY","localDOMHandlers","mousedown","normalizeEvent","__mayPointerCapture","downPoint","__togglePointerCapture","mouseup","toElement","relatedTarget","__pointerCapturing","wheel","mousewheel","touchstart","__lastTouchMoment","touchmove","touchend","click","globalDOMHandlers","pointerCaptureReleasing","mountLocalDOMEventListeners","domHandlers","pointerEventsSupported","nativeEventName","mountSingleDOMEventListener","touchEventsSupported","touching","touchTimer","clearTimeout","setTimeout","setTouchTimer","getNativeEvent","mountGlobalDOMEventListeners","mount","normalizeGlobalEvent","capture","listener","opt","mounted","listenerOpts","addEventListener","domTarget","unmountDOMEventListeners","removeEventListener","DOMHandlerScope","HandlerDomProxy","_localHandlerScope","_globalHandlerScope","isPointerCapturing","globalHandlerScope","useVML","painterCtors","instances","ZRender","id","_sleepAfterStill","_stillFrameAccum","_needsRefresh","_needsRefreshHover","_darkMode","rendererType","renderer","useDirtyRect","handerProxy","node","worker","HandlerProxy","getViewportRoot","_flush","addSelfToZr","refresh","removeSelfFromZr","configLayer","zLevel","config","setBackgroundColor","backgroundColor","_backgroundColor","lum","totalLum","isDarkMode","getBackgroundColor","setDarkMode","darkMode","refreshImmediately","fromInside","flush","triggerRendered","refreshHoverImmediately","elapsedTime","setSleepAfterStill","stillFramesCount","wakeUp","addHover","removeHover","clearHover","refreshHover","getType","clearAnimation","pathToImage","eventHandler","Group","init","zr","disposeAll","getInstance","registerPainter","version","lt","Point","rb","lb","rt","minTv","maxTv","other","calculateTransform","intersect","mtv","ax0","ax1","ay0","ay1","bx0","bx1","by0","by1","overlap","dMin","dMax","d0","d1","d3","plain","isZero","maxX","maxY","PolylineShape","Polyline","extendStatics","setPrototypeOf","__proto__","TypeError","String","__","__assign","__spreadArray","to","pack","ar","LinearGradient","globalCoord","Gradient","identity","m2","out0","out1","out2","out3","out4","out5","translate","rotate","rad","aa","ac","atx","ab","ad","aty","st","ct","vx","vy","invert","det","CircleShape","Circle","inBundle","extrema","swapExtrema","windingCubic","nRoots","nExtrema","y0_","y1_","unit","windingQuadratic","y_","windingArc","tmp_1","containPath","isStroke","line","cubic","quadratic","lineCap","DEFAULT_PATH_ANIMATION_PROPS","DEFAULT_COMMON_ANIMATION_PROPS","pathCopyParams","decal","_decalEl","decalElStyle","_init","defaultStyle","attrKV","canBeInsideText","getInsideTextFill","pathFill","fillLum","getInsideTextStroke","textFill","shapeCfg","needsUpdateRect","firstInvoke","rectWithStroke","_rectWithStroke","lineScale","strokeContainThreshold","pathContain","dirtyStyle","animateShape","updateDuringAnimation","targetKey","keyOrObj","shapeChanged","_innerSaveToNormal","toState","normalState","_normalState","_applyStateObj","stateName","state","keepCurrentStates","transition","animationCfg","targetShape","needsRestoreToNormal","targetShapePrimaryProps","shapeKeys","_transitionState","_mergeStates","states","mergedShape","mergedState","_mergeStyle","getAnimationStyleProps","defaultProps","pathProto","STYLE_CHANGED_BIT","Browser","firefox","ie","edge","newEdge","weChat","browser","wxa","svgSupported","transformSupported","transform3dSupported","wx","getSystemInfoSync","navigator","ua","test","split","SVGRect","documentElement","WebKitCSSMatrix","detect","userAgent","mathACos","mathATan2","computeCornerTangents","cr","clockwise","x01","y01","x11","y11","x10","y10","x00","y00","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","innerRadius","r0","hasRadius","cornerRadius","innerCornerRadius","halfRd","icr","cr0","cr1","xrs","yrs","xire","yire","xre","yre","xirs","yirs","it_1","x32","y32","ct0","ct1","SectorShape","Sector","roundSectorHelper","STYLE_REG","truncateText","containerWidth","ellipsis","textLines","prepareTruncateOptions","truncateSingleLine","preparedOpts","maxIterations","minChar","cnCharWidth","ascCharWidth","placeholder","contentWidth","ellipsisWidth","textLine","subLength","estimateLength","substr","charCode","charCodeAt","parsePlainText","lines","overflow","padding","truncate","calculatedLineHeight","getLineHeight","lineHeight","truncateLineOverflow","lineOverflow","contentHeight","wrapText","lineCount","outerHeight","outerWidth","truncateMinChar","maxWidth","RichTextToken","RichTextLine","tokens","RichTextContentBlock","parseRichText","contentBlock","topWidth","topHeight","wrapInfo","accumWidth","breakAll","lastIndex","exec","matchedIndex","index","pushTokens","substring","pendingList","calculatedHeight","calculatedWidth","stlPadding","truncateLine","finishLine","outer","tokenStyle","token","styleName","rich","textPadding","paddingH","tokenHeight","innerHeight","align","verticalAlign","styleTokenWidth","tokenWidthNotSpecified","percentWidth","textBackgroundColor","bgImg","imageHelper","remainTruncWidth","parseInt","block","strLines","linesWidths","isEmptyStr","newLine","tokenPadding","tokenPaddingH","outerWidth_1","parsePercent","isLineHolder","tokensLen","breakCharMap","ch","isWordBreakChar","code","isLatin","isBreakAll","lastAccumWidth","currentWord","currentWordWidth","chWidth","inWord","parseXML","svg","DOMParser","parseFromString","svgNode","firstChild","nodeName","toLowerCase","nextSibling","EllipseShape","Ellipse","makeAscendingRun","hi","compare","runHi","reverseRun","binaryInsertionSort","mid","pivot","gallopLeft","hint","lastOffset","maxOffset","gallopRight","TimSort","runStart","runLength","minGallop","stackSize","mergeAt","start1","length1","start2","length2","cursor1","cursor2","dest","count1","count2","exit","_minGallop","mergeLow","customCursor","customDest","mergeHigh","mergeRuns","forceMergeRuns","pushRun","_runStart","_runLength","remaining","ts","minRun","minRunLength","force","msRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","extent","extent2","OrientedBoundingRect","_corners","_axes","_origin","fromBoundingRect","corners","axes","overlapped","noMtv","_intersectCheckOneSide","inverse","axis","_getProjMinMaxOnAxis","dist0","dist1","dim","origin","proj","proj_1","lineType","mathPow","EPSILON_NUMERIC","THREE_SQRT","ONE_THIRD","_v0","v2Create","_v1","_v2","isAroundZero","onet","cubicDerivativeAt","cubicRootAt","B","t1","disc","K","discSqrt","Y1","Y2","T","ASqrt","p01","p12","p23","p012","p123","p0123","cubicProjectPoint","interval","_t","v2DistSquare","iteration","px","py","quadraticDerivativeAt","quadraticRootAt","divider","quadraticProjectPoint","LN2","log","determinant","rows","rank","rowStart","rowMask","colMask","detCache","cacheKey","fullRank","colStart","subRowMask","subRowStart","sum","colLocalIdx","colTag","buildTransformer","mA","vh","srcPointX","srcPointY","pk","_calcOut","transformLocalCoord","elFrom","elTarget","inX","inY","transformCoordWithViewport","getBoundingClientRect","isCanvasEl","saved","markers","propLR","propTB","marker","idxLR","idxTB","cssText","appendChild","prepareCoordMarkers","transformer","transformerName","oldSrcCoords","srcCoords","destCoords","oldCoordTheSame","ii","offsetLeft","offsetTop","preparePointerTransformer","toUpperCase","_cachedFont","textWidthCache","measureText","cacheOfFont","innerGetBoundingRect","adjustTextX","adjustTextY","uniondRect","maxValue","lastIndexOf","calculateTextPosition","textPosition","halfHeight","textVerticalAlign","aroundEqual","pathToBezierCurves","currentSubpath","bezierArrayGroups","createNewSubpath","addLine","addArc","c1","s1","c2","s2","x4","y4","hx","hy","adpativeBezier","PIXEL_DISTANCE","PIXEL_DISTANCE_SQR","dx2","dy2","cp1LenSqr","cp2LenSqr","projLen1","projLen2","tmpSegX","tmpSegY","getDividingGrids","dimSize","rowDim","count","rowSize","columnSize","ratio","rowCount","ceil","columnCount","grids","remained","divideSector","sectorShape","outShapes","arcLen","deltaR","isAngleRow","row","column","newShape","crossProduct2d","lineLineIntersect","a1x","a1y","a2x","a2y","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","projPtOnLine","pt","lineA","lineB","dir2","addToPoly","poly","last","binaryDividePolygon","polygonShape","boundingRect","pt0","pt1","intersections","intersectionPt","projPt","splitPt0","splitPt1","splitPt0Arr","splitPt1Arr","newPolyA","newPolyB","splitPolygonByLine","binaryDivideRecursive","OutShapeCtor","rectShape","isHorizontalRow","rowSizeDim","columnSizeDim","columnDim","divideRect","Rect","polygons","beziers","polygon","pathToPolygons","polygonConvert","polygonCount","totalArea_1","items","area","item","selfCount","paths","subPath","alignSubpath","subpath1","subpath2","len1","shorterPath","shorterLen","shorterBezierCount","eachCurveSubDivCount","newSubpath","actualSubDivCount","createSubpath","lastSubpathSubpath","otherSubpath","lastX","lastY","centroid","signedArea","findBestRingOffset","fromSubBeziers","toSubBeziers","fromCp","toCp","bezierCount","bestScore","bestOffset","cursorOffset","score","reverse","newArr","isCombineMorphing","__isCombineMorphing","SAVED_METHOD_PREFIX","saveAndModifyMethod","methodName","modifiers","savedMethodName","originalMethod","after","before","restoreMethod","applyTransformOnBeziers","bezierCurves","mm","subBeziers","prepareMorphPath","fromPath","toPath","fromPathProxy","toPathProxy","array1","array2","lastSubpath1","lastSubpath2","newArray1","newArray2","newSubpath1","newSubpath2","alignBezierCurves","fromBezierCurves","toBezierCurves","fromPathTransform","toPathTransform","morphingData","fromArr","toArr","searchAngleIteration","searchAngleRange","fromNeedsReverse","fromSubpathBezier","toSubpathBezier","newFromSubpathBezier","newToSubpathBezier","bestAngle","tmpArr","sa","ca","newX1","newY1","findBestMorphingRotation","__morphT","newCp","x0_1","y0_1","morphPath","animationOpts","oldDone","oldDuring","animateTo","hilbert","minX","minY","sortPaths","xMin","yMin","xMax","yMax","cps","cp","defaultDividePath","param","combineMorph","fromList","fromPathList","addFromPath","separateCount","fromIndividuals","toIndividuals","toSubPathList","dividePath","individualDelay","identityTransform","addToSubPathListToZr","restoreToPath","toLen","animating_1","eachDone","indivdualAnimationOpts","separateMorph","toPathList","fromLen","RadialGradient","PRESERVED_NORMAL_STATE","PRIMARY_STATES_KEYS","DEFAULT_ANIMATABLE_MAP","tmpTextPosCalcRes","tmpBoundingRect","Element","animators","currentStates","attr","updateInnerText","forceUpdate","_textContent","textConfig","local","innerTransformable","textStyleChanged","innerOrigin","layoutRect","textOrigin","relOriginX","relOriginY","textOffset","isInside","inside","innerTextDefaultStyle","_innerTextDefaultStyle","textStroke","autoStroke","insideFill","insideStroke","outsideFill","outsideStroke","getOutsideFill","getOutsideStroke","setDefaultTextStyle","colorArr","parse","alpha","isDark","stringify","setTextConfig","setTextContent","setClipPath","extra","hide","show","saveCurrentToNormalState","fromStateTransition","__fromStateTransition","targetName","_savePrimaryToNormal","primaryKeys","hasState","getState","ensureState","clearStates","noAnimation","useState","forceUseHoverLayer","toNormalState","stateTransition","stateProxy","useHoverLayer","hoverLayer","_toggleHoverLayerFlag","__inHover","duration","textContent","_textGuide","_updateAnimationTargets","useStates","stateObjects","notChange","stateObj","lastStateObj","removeState","replaceState","oldState","newState","forceAdd","newStateExists","toggleState","enable","mergedTextConfig","transitionTarget","hasTransition","propNeedsTransition","_attachComponent","componentEl","_detachComponent","_clipPath","removeClipPath","previousTextContent","removeTextContent","cfg","removeTextConfig","setTextGuideLine","guideLine","removeTextGuideLine","stopAnimation","leftAnimators","animationProps","animateFrom","getPaintRect","elProto","isGroup","logs","logDeprecatedError","xKey","yKey","createLegacyProperty","privateKey","enhanceArray","defineProperty","animatable","animateToShallow","finishCount","doneHappened","cfgDone","cfgAborted","doneCb","abortedCb","copyArrShallow","copyValue","sourceArr","len0","topKey","animatableKeys","changedKeys","targetKeys","additive","setToFinal","animateAll","innerKey","keyLen","existsAnimators","existsAnimatorsOnSameTarget","revertedSource","reversedTarget","sourceClone","wmUniqueIndex","random","supportDefineProperty","WeakMap","_id","_guard","enumerable","configurable","has","ArcShape","Arc","unitX","unitY","interpolate","controlPoints","isLoop","constraint","prevPoint","nextPoint","v2Min","v2Max","point","v2Clone","v2Sub","v2Scale","v2Distance","cp0","v2Add","cp1","shift","smoothBezier","cp2","segs","w2","w3","smoothSpline","equal","scalar","toArray","fromArray","input","kCSSColorTable","clampCssByte","clampCssFloat","parseCssInt","parseCssFloat","cssHueToRgb","lerpNumber","setRgba","copyRgba","colorCache","lastRemovedArr","putToCache","colorStr","rgbaArr","cached","iv","strLen","op","ep","fname","params","hsla2rgba","hsla","lift","level","toHex","fastLerp","normalizedValue","colors","leftIndex","rightIndex","leftColor","rightColor","dv","fastMapToColor","fullOutput","mapToColor","modifyHSL","H","S","G","vMin","vMax","deltaG","deltaB","rgba2hsla","modifyAlpha","arrColor","backgroundLum","RingShape","Ring","BezierCurveShape","cpx1","cpy1","someVectorAt","isTangent","cpx2","cpy2","BezierCurve","tangentAt","CompoundPath","_updatePathDirty","dirtyPath","nodeParsers","INHERITABLE_STYLE_ATTRIBUTES_MAP","INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS","SELF_STYLE_ATTRIBUTES_MAP","SELF_STYLE_ATTRIBUTES_MAP_KEYS","SVGParser","_defs","_root","xml","_defsUsePending","named","viewBox","getAttribute","parseAttributes","viewBoxRect","viewBoxTransform","_parseNode","defs","defsUsePending","applyDefs","viewBoxArr","splitNumberSequence","makeViewBoxTransform","ignoreViewBox","elRoot","ignoreRootClip","xmlNode","parentGroup","namedFrom","isInDefs","isInText","namedFromForSub","parser_1","nameAttr","newNamed","svgNodeTagLower","parser","paintServerParsers","def","_parseText","_textX","_textY","inheritStyle","parentSelfStyle","__selfStyle","zrTextBaseline","parentInheritedStyle","__inheritedStyle","zrTextAlign","applyTextAlignment","textStyle","fontSize","fontFamily","fontStyle","fontWeight","internalField","circle","pointsArr","pointsStr","parsePoints","polyline","img","gradient","parsePaintServerUnit","parseGradientColorStops","toLocaleLowerCase","offsetStr","styleVals","parseInlineStyle","stopColor","pointsString","onlyInlineStyle","isTextGroup","inheritedStyle","selfStyle","transformOps_1","mt","transformRegex","valueArr","DEGREE_TO_ANGLE","parseTransformAttribute","inheritableStyleResult","selfStyleResult","svgAttrName","attrValue","parseAttributeStyle","getFillStrokeStyle","visibility","invisible","display","urlRegex","method","urlMatch","url","rawStr","styleRegex","styleRegResult","svgStlAttr","zrInheritableStlAttr","zrSelfStlAttr","parseSVG","isDomLevel2","MOUSE_EVENT_REG","clientToLocal","calculate","calculateZrXY","layerX","layerY","ex","ey","box","eventType","targetTouches","changedTouches","rawWheelDelta","deltaX","deltaY","getWheelDeltaMayPolyfill","detail","button","undefined","attachEvent","detachEvent","returnValue","isMiddleOrRightButtonOnMouseUpDown","_children","childAt","childOfName","childCount","_doAdd","addBefore","oldChild","newChild","replaceAt","old","removeAll","eachChild","stopped","includeChildren","tmpRect","tmpMat","createElementNS","normalizeColor","extractCommon","basePath","oldArr","diagonalPath","equals","newLen","oldLen","newPos","oldPos","commonCount","components","added","indices","pushComponent","buildValues","componentPos","componentLen","component","arrayDiff","editLength","maxEditLength","bestPath","execEditLength","addPath","removePath","canAdd","canRemove","NONE","mathRound","degree","round3","round4","svgEl","setAttribute","bindStyle","pathHasFill","pathHasStroke","strokeWidth","strokeScale_1","lineJoin","SVGPathRebuilder","_d","_str","_add","firstCmd","dThetaPositive","isCircle","unifiedTheta","large","_invalid","generateStr","getStr","svgPath","__svgEl","pathVersion","elExt","svgPathBuilder","__svgPathBuilder","__svgPathVersion","svgImage","HTMLImageElement","HTMLCanvasElement","toDataURL","dw","dh","__imageSrc","setAttributeNS","attrXLink","TEXT_ALIGN_TO_ANCHOR","center","middle","svgText","textSvgEl","attrXML","Definable","zrId","svgRoot","tagNames","markLabel","domName","nextId","_domName","_zrId","_svgRoot","_tagNames","_markLabel","getDefs","isForceCreating","getElementsByTagName","defs_1","insertBefore","contains","doUpdate","onUpdate","addDom","removeDom","removeChild","getDoms","doms","tagName","tags","markAllUnused","that","markDomUsed","markDomUnused","isDomUnused","removeUnused","getSvgProxy","getSvgElement","isLinearGradient","isRadialGradient","isGradient","GradientManager","addWithoutUpdate","svgElement","that_1","fillOrStroke","__dom","markUsed","updateDom","innerHTML","stop_1","colorTool","hex","isPattern","patternDomMap","PatternManager","patternDom","SVGElement","svgWidth","svgHeight","prevImage","imageSrc","patternImage","createdImage","hasClipPath","ClippathManager","_refGroups","_keyDuplicateCount","refGroups","_getClipPathGroup","prevDisplayable","keyDuplicateCount","clipPathKey","generateClipPathsKey","clipGroup","parentEl","clipPathEl","_dom","newRefGroupsMap","group","ShadowManager","_shadowDomMap","_shadowDomPool","_getFromPool","shadowDom","domChild","shadowBlur","shadowOffsetX","shadowOffsetY","hasShadow","shadowKey","globalScale","toFixed","getShadowKey","_shadowDom","blur","normalizedColor","stdDeviation","shadowDomsPool","shadowDomMap","parseInt10","checkParentAvailable","insertAfter","prevSibling","prepend","SVGPainter","createMethodNotSupport","_opts","svgDom","bgRoot","_gradientManager","_patternManager","_clipPathManager","_shadowManager","viewport","_svgDom","_backgroundRoot","_viewport","_visibleList","getSvgDom","getSvgRoot","getViewportRootOffset","viewportRoot","_paintList","_backgroundNode","bgNode","createSVGElement","tag","paintOne","svgProxy","gradientManager","patternManager","clipPathManager","shadowManager","visibleList","listLen","newVisibleList","prevSvgElement","topPrevSvgElement","currentClipGroup","_getSize","_width","_height","viewportStyle","whIdx","wh","cwh","plt","prb","stl","defaultView","getComputedStyle","viewportNode","outerHTML","encodeURIComponent","returnFalse","createDom","newDom","newDomStyle","Layer","motionBlur","lastFrameAlpha","virtual","maxRepaintRectCount","__firstTimePaint","__used","__drawIndex","__startIndex","__endIndex","__prevStartIndex","__prevEndIndex","domStyle","onselectstart","webkitUserSelect","userSelect","webkitTapHighlightColor","margin","borderWidth","domBack","ctxBack","getElementCount","initContext","setUnpainted","createBackBuffer","createRepaintRects","prevList","hasIntersections","mergedRepaintRects","full","pendingRect","addRectToMergePool","isMerged","minDeltaArea","bestRectToMergeIdx","mergedRect","pendingRect_1","aArea","bArea","deltaArea","shouldPaint","prevRect","getPrevPaintRect","curRect","_paintRects","debugGetPaintRects","clearAll","clearColor","repaintRects","haveMotionBLur","doClear","clearRect","clearColorGradientOrPattern","__canvasGradient","__painter","fillRect","HOVER_LAYER_ZLEVEL","CANVAS_ZLEVEL","EL_AFTER_INCREMENTAL_INC","CanvasPainter","_zlevelList","_prevDisplayList","_layers","_layerConfig","_needsManuallyCompositing","singleCanvas","_singleCanvas","rootStyle","zlevelList","layers","rootCanvas","mainLayer","__builtin__","_domRoot","domRoot","createRoot","isSingleCanvas","paintAll","_redrawId","_paintHoverList","_hoverlayer","getLayer","getHoverLayer","redrawId","_updateLayerStatus","_doPaintList","finished","needsRefreshHover","_compositeManually","eachLayer","self_1","eachBuiltinLayer","layerList","zi","_loop_1","this_1","useTimer","now","startTime","firstEl","repaint","repaintRect","_doPaintEl","draw","currentLayer","paintRect","setPrevPaintRect","insertLayer","layersMap","prevLayer","isLayerValid","prevDom","getLayers","updatePrevLayer","prevZlevel","incrementalLayerCount","_clearLayer","layerConfig","_zlevel","delLayer","clearLayer","getRenderedCanvas","imageLayer","pixelRatio","width_1","height_1","renderToCanvas","canvas","shadowBlurSize","leftMargin","rightMargin","topMargin","bottomMargin","pathTransform","imgShape","DEFAULT_IMAGE_STYLE","DEFAULT_IMAGE_ANIMATION_PROPS","size","imageSource","otherDim","otherDimSize","STYLE_MAGIC_KEY","PRIMARY_STATES_KEYS_IN_HOVER_LAYER","considerClipPath","considerAncestors","culling","viewRect","isDisplayableCulled","parent_1","rectContain","coord","_paintRect","elRect","shadowSize","tolerance","_prevPaintRect","animateStyle","notRedraw","styleUpdated","isStyleObject","targetStyle","sourceStyle","statesKeys","mergedStyle","dispProto","eventProcessors","_$eventProcessor","query","_$handlers","_h","eventProcessor","normalizeQuery","wrap","callAtLast","zrEventfulCallAtLast","lastWrap","newList","argLen","hItem","afterTrigger","triggerWithContext","RectShape","r1","r2","r3","r4","total","roundRectHelper","DEFAULT_RICH_TEXT_COLOR","DEFAULT_TEXT_ANIMATION_PROPS","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","borderColor","borderRadius","ZRText","_defaultStyle","_updateSubTexts","_childCursor","normalizeStyle","_updateRichTexts","_updatePlainTexts","defaultTextStyle","sourceRich","targetRich","_mergeRich","richNames","richName","_getOrCreateChild","textFont","getStyleText","needDrawBg","needDrawBackground","bgColorDrawn","baseX","baseY","textX","textY","boxX","boxY","_renderBackground","getTextXForPadding","defaultLineWidth","useDefaultFill","getFill","getStroke","fixedBoundingRect","subElStyle","xLeft","lineTop","xRight","tokenCount","remainedWidth","lineXLeft","lineXRight","_placeToken","parentBgColorDrawn","textWidth","textHeight","topStyle","rectEl","imgEl","rectStyle","textBorderWidth","textBorderColor","isImageBg","isPlainOrGradientBg","textBorderRadius","imgStyle","borderDash","borderDashOffset","commonStyle","makeFont","VALID_TEXT_ALIGN","VALID_TEXT_VERTICAL_ALIGN"],"mappings":"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","file":"static/js/28.afc7a661.chunk.js","sourcesContent":["var BUILTIN_OBJECT = {\n '[object Function]': true,\n '[object RegExp]': true,\n '[object Date]': true,\n '[object Error]': true,\n '[object CanvasGradient]': true,\n '[object CanvasPattern]': true,\n '[object Image]': true,\n '[object Canvas]': true\n};\nvar TYPED_ARRAY = {\n '[object Int8Array]': true,\n '[object Uint8Array]': true,\n '[object Uint8ClampedArray]': true,\n '[object Int16Array]': true,\n '[object Uint16Array]': true,\n '[object Int32Array]': true,\n '[object Uint32Array]': true,\n '[object Float32Array]': true,\n '[object Float64Array]': true\n};\nvar objToString = Object.prototype.toString;\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar ctorFunction = function () { }.constructor;\nvar protoFunction = ctorFunction ? ctorFunction.prototype : null;\nvar methods = {};\nexport function $override(name, fn) {\n methods[name] = fn;\n}\nvar idStart = 0x0907;\nexport function guid() {\n return idStart++;\n}\nexport function logError() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (typeof console !== 'undefined') {\n console.error.apply(console, args);\n }\n}\nexport function clone(source) {\n if (source == null || typeof source !== 'object') {\n return source;\n }\n var result = source;\n var typeStr = objToString.call(source);\n if (typeStr === '[object Array]') {\n if (!isPrimitive(source)) {\n result = [];\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = clone(source[i]);\n }\n }\n }\n else if (TYPED_ARRAY[typeStr]) {\n if (!isPrimitive(source)) {\n var Ctor = source.constructor;\n if (Ctor.from) {\n result = Ctor.from(source);\n }\n else {\n result = new Ctor(source.length);\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = clone(source[i]);\n }\n }\n }\n }\n else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n result = {};\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n result[key] = clone(source[key]);\n }\n }\n }\n return result;\n}\nexport function merge(target, source, overwrite) {\n if (!isObject(source) || !isObject(target)) {\n return overwrite ? clone(source) : target;\n }\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n var targetProp = target[key];\n var sourceProp = source[key];\n if (isObject(sourceProp)\n && isObject(targetProp)\n && !isArray(sourceProp)\n && !isArray(targetProp)\n && !isDom(sourceProp)\n && !isDom(targetProp)\n && !isBuiltInObject(sourceProp)\n && !isBuiltInObject(targetProp)\n && !isPrimitive(sourceProp)\n && !isPrimitive(targetProp)) {\n merge(targetProp, sourceProp, overwrite);\n }\n else if (overwrite || !(key in target)) {\n target[key] = clone(source[key]);\n }\n }\n }\n return target;\n}\nexport function mergeAll(targetAndSources, overwrite) {\n var result = targetAndSources[0];\n for (var i = 1, len = targetAndSources.length; i < len; i++) {\n result = merge(result, targetAndSources[i], overwrite);\n }\n return result;\n}\nexport function extend(target, source) {\n if (Object.assign) {\n Object.assign(target, source);\n }\n else {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\nexport function defaults(target, source, overlay) {\n var keysArr = keys(source);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n if ((overlay ? source[key] != null : target[key] == null)) {\n target[key] = source[key];\n }\n }\n return target;\n}\nexport var createCanvas = function () {\n return methods.createCanvas();\n};\nmethods.createCanvas = function () {\n return document.createElement('canvas');\n};\nexport function indexOf(array, value) {\n if (array) {\n if (array.indexOf) {\n return array.indexOf(value);\n }\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n }\n return -1;\n}\nexport function inherits(clazz, baseClazz) {\n var clazzPrototype = clazz.prototype;\n function F() { }\n F.prototype = baseClazz.prototype;\n clazz.prototype = new F();\n for (var prop in clazzPrototype) {\n if (clazzPrototype.hasOwnProperty(prop)) {\n clazz.prototype[prop] = clazzPrototype[prop];\n }\n }\n clazz.prototype.constructor = clazz;\n clazz.superClass = baseClazz;\n}\nexport function mixin(target, source, override) {\n target = 'prototype' in target ? target.prototype : target;\n source = 'prototype' in source ? source.prototype : source;\n if (Object.getOwnPropertyNames) {\n var keyList = Object.getOwnPropertyNames(source);\n for (var i = 0; i < keyList.length; i++) {\n var key = keyList[i];\n if (key !== 'constructor') {\n if ((override ? source[key] != null : target[key] == null)) {\n target[key] = source[key];\n }\n }\n }\n }\n else {\n defaults(target, source, override);\n }\n}\nexport function isArrayLike(data) {\n if (!data) {\n return false;\n }\n if (typeof data === 'string') {\n return false;\n }\n return typeof data.length === 'number';\n}\nexport function each(arr, cb, context) {\n if (!(arr && cb)) {\n return;\n }\n if (arr.forEach && arr.forEach === nativeForEach) {\n arr.forEach(cb, context);\n }\n else if (arr.length === +arr.length) {\n for (var i = 0, len = arr.length; i < len; i++) {\n cb.call(context, arr[i], i, arr);\n }\n }\n else {\n for (var key in arr) {\n if (arr.hasOwnProperty(key)) {\n cb.call(context, arr[key], key, arr);\n }\n }\n }\n}\nexport function map(arr, cb, context) {\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.map && arr.map === nativeMap) {\n return arr.map(cb, context);\n }\n else {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n result.push(cb.call(context, arr[i], i, arr));\n }\n return result;\n }\n}\nexport function reduce(arr, cb, memo, context) {\n if (!(arr && cb)) {\n return;\n }\n for (var i = 0, len = arr.length; i < len; i++) {\n memo = cb.call(context, memo, arr[i], i, arr);\n }\n return memo;\n}\nexport function filter(arr, cb, context) {\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.filter && arr.filter === nativeFilter) {\n return arr.filter(cb, context);\n }\n else {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n }\n}\nexport function find(arr, cb, context) {\n if (!(arr && cb)) {\n return;\n }\n for (var i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n return arr[i];\n }\n }\n}\nexport function keys(obj) {\n if (!obj) {\n return [];\n }\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keyList = [];\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n keyList.push(key);\n }\n }\n return keyList;\n}\nfunction bindPolyfill(func, context) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n return function () {\n return func.apply(context, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport var bind = (protoFunction && isFunction(protoFunction.bind))\n ? protoFunction.call.bind(protoFunction.bind)\n : bindPolyfill;\nfunction curry(func) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return function () {\n return func.apply(this, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport { curry };\nexport function isArray(value) {\n if (Array.isArray) {\n return Array.isArray(value);\n }\n return objToString.call(value) === '[object Array]';\n}\nexport function isFunction(value) {\n return typeof value === 'function';\n}\nexport function isString(value) {\n return typeof value === 'string';\n}\nexport function isStringSafe(value) {\n return objToString.call(value) === '[object String]';\n}\nexport function isNumber(value) {\n return typeof value === 'number';\n}\nexport function isObject(value) {\n var type = typeof value;\n return type === 'function' || (!!value && type === 'object');\n}\nexport function isBuiltInObject(value) {\n return !!BUILTIN_OBJECT[objToString.call(value)];\n}\nexport function isTypedArray(value) {\n return !!TYPED_ARRAY[objToString.call(value)];\n}\nexport function isDom(value) {\n return typeof value === 'object'\n && typeof value.nodeType === 'number'\n && typeof value.ownerDocument === 'object';\n}\nexport function isGradientObject(value) {\n return value.colorStops != null;\n}\nexport function isImagePatternObject(value) {\n return value.image != null;\n}\nexport function isRegExp(value) {\n return objToString.call(value) === '[object RegExp]';\n}\nexport function eqNaN(value) {\n return value !== value;\n}\nexport function retrieve() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n for (var i = 0, len = args.length; i < len; i++) {\n if (args[i] != null) {\n return args[i];\n }\n }\n}\nexport function retrieve2(value0, value1) {\n return value0 != null\n ? value0\n : value1;\n}\nexport function retrieve3(value0, value1, value2) {\n return value0 != null\n ? value0\n : value1 != null\n ? value1\n : value2;\n}\nexport function slice(arr) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return nativeSlice.apply(arr, args);\n}\nexport function normalizeCssArray(val) {\n if (typeof (val) === 'number') {\n return [val, val, val, val];\n }\n var len = val.length;\n if (len === 2) {\n return [val[0], val[1], val[0], val[1]];\n }\n else if (len === 3) {\n return [val[0], val[1], val[2], val[1]];\n }\n return val;\n}\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n}\nexport function trim(str) {\n if (str == null) {\n return null;\n }\n else if (typeof str.trim === 'function') {\n return str.trim();\n }\n else {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n}\nvar primitiveKey = '__ec_primitive__';\nexport function setAsPrimitive(obj) {\n obj[primitiveKey] = true;\n}\nexport function isPrimitive(obj) {\n return obj[primitiveKey];\n}\nvar HashMap = (function () {\n function HashMap(obj) {\n this.data = {};\n var isArr = isArray(obj);\n this.data = {};\n var thisMap = this;\n (obj instanceof HashMap)\n ? obj.each(visit)\n : (obj && each(obj, visit));\n function visit(value, key) {\n isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n }\n }\n HashMap.prototype.get = function (key) {\n return this.data.hasOwnProperty(key) ? this.data[key] : null;\n };\n HashMap.prototype.set = function (key, value) {\n return (this.data[key] = value);\n };\n HashMap.prototype.each = function (cb, context) {\n for (var key in this.data) {\n if (this.data.hasOwnProperty(key)) {\n cb.call(context, this.data[key], key);\n }\n }\n };\n HashMap.prototype.keys = function () {\n return keys(this.data);\n };\n HashMap.prototype.removeKey = function (key) {\n delete this.data[key];\n };\n return HashMap;\n}());\nexport { HashMap };\nexport function createHashMap(obj) {\n return new HashMap(obj);\n}\nexport function concatArray(a, b) {\n var newArray = new a.constructor(a.length + b.length);\n for (var i = 0; i < a.length; i++) {\n newArray[i] = a[i];\n }\n var offset = a.length;\n for (var i = 0; i < b.length; i++) {\n newArray[i + offset] = b[i];\n }\n return newArray;\n}\nexport function createObject(proto, properties) {\n var obj;\n if (Object.create) {\n obj = Object.create(proto);\n }\n else {\n var StyleCtor = function () { };\n StyleCtor.prototype = proto;\n obj = new StyleCtor();\n }\n if (properties) {\n extend(obj, properties);\n }\n return obj;\n}\nexport function hasOwn(own, prop) {\n return own.hasOwnProperty(prop);\n}\nexport function noop() { }\n","var dpr = 1;\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio\n || (window.screen && window.screen.deviceXDPI / window.screen.logicalXDPI)\n || 1, 1);\n}\nexport var debugMode = 0;\nexport var devicePixelRatio = dpr;\nexport var DARK_MODE_THRESHOLD = 0.4;\nexport var DARK_LABEL_COLOR = '#333';\nexport var LIGHT_LABEL_COLOR = '#ccc';\nexport var LIGHTER_LABEL_COLOR = '#eee';\n","import * as vec2 from './vector';\nimport BoundingRect from './BoundingRect';\nimport { devicePixelRatio as dpr } from '../config';\nimport { fromLine, fromCubic, fromQuadratic, fromArc } from './bbox';\nimport { cubicAt, cubicLength, cubicSubdivide, quadraticLength, quadraticSubdivide } from './curve';\nvar CMD = {\n M: 1,\n L: 2,\n C: 3,\n Q: 4,\n A: 5,\n Z: 6,\n R: 7\n};\nvar tmpOutX = [];\nvar tmpOutY = [];\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathSqrt = Math.sqrt;\nvar mathAbs = Math.abs;\nvar PI = Math.PI;\nvar PI2 = PI * 2;\nvar hasTypedArray = typeof Float32Array !== 'undefined';\nvar tmpAngles = [];\nfunction modPI2(radian) {\n var n = Math.round(radian / PI * 1e8) / 1e8;\n return (n % 2) * PI;\n}\nexport function normalizeArcAngles(angles, anticlockwise) {\n var newStartAngle = modPI2(angles[0]);\n if (newStartAngle < 0) {\n newStartAngle += PI2;\n }\n var delta = newStartAngle - angles[0];\n var newEndAngle = angles[1];\n newEndAngle += delta;\n if (!anticlockwise && newEndAngle - newStartAngle >= PI2) {\n newEndAngle = newStartAngle + PI2;\n }\n else if (anticlockwise && newStartAngle - newEndAngle >= PI2) {\n newEndAngle = newStartAngle - PI2;\n }\n else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (PI2 - modPI2(newStartAngle - newEndAngle));\n }\n else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (PI2 - modPI2(newEndAngle - newStartAngle));\n }\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\nvar PathProxy = (function () {\n function PathProxy(notSaveData) {\n this.dpr = 1;\n this._xi = 0;\n this._yi = 0;\n this._x0 = 0;\n this._y0 = 0;\n this._len = 0;\n if (notSaveData) {\n this._saveData = false;\n }\n if (this._saveData) {\n this.data = [];\n }\n }\n PathProxy.prototype.increaseVersion = function () {\n this._version++;\n };\n PathProxy.prototype.getVersion = function () {\n return this._version;\n };\n PathProxy.prototype.setScale = function (sx, sy, segmentIgnoreThreshold) {\n segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n if (segmentIgnoreThreshold > 0) {\n this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n }\n };\n PathProxy.prototype.setDPR = function (dpr) {\n this.dpr = dpr;\n };\n PathProxy.prototype.setContext = function (ctx) {\n this._ctx = ctx;\n };\n PathProxy.prototype.getContext = function () {\n return this._ctx;\n };\n PathProxy.prototype.beginPath = function () {\n this._ctx && this._ctx.beginPath();\n this.reset();\n return this;\n };\n PathProxy.prototype.reset = function () {\n if (this._saveData) {\n this._len = 0;\n }\n if (this._lineDash) {\n this._lineDash = null;\n this._dashOffset = 0;\n }\n if (this._pathSegLen) {\n this._pathSegLen = null;\n this._pathLen = 0;\n }\n this._version++;\n };\n PathProxy.prototype.moveTo = function (x, y) {\n this._drawPendingPt();\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y);\n this._x0 = x;\n this._y0 = y;\n this._xi = x;\n this._yi = y;\n return this;\n };\n PathProxy.prototype.lineTo = function (x, y) {\n var dx = mathAbs(x - this._xi);\n var dy = mathAbs(y - this._yi);\n var exceedUnit = dx > this._ux || dy > this._uy;\n this.addData(CMD.L, x, y);\n if (this._ctx && exceedUnit) {\n this._needsDash ? this._dashedLineTo(x, y)\n : this._ctx.lineTo(x, y);\n }\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n this._pendingPtDist = 0;\n }\n else {\n var d2 = dx * dx + dy * dy;\n if (d2 > this._pendingPtDist) {\n this._pendingPtX = x;\n this._pendingPtY = y;\n this._pendingPtDist = d2;\n }\n }\n return this;\n };\n PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) {\n this._drawPendingPt();\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n if (this._ctx) {\n this._needsDash ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)\n : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n this._xi = x3;\n this._yi = y3;\n return this;\n };\n PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) {\n this._drawPendingPt();\n this.addData(CMD.Q, x1, y1, x2, y2);\n if (this._ctx) {\n this._needsDash ? this._dashedQuadraticTo(x1, y1, x2, y2)\n : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n this._xi = x2;\n this._yi = y2;\n return this;\n };\n PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this._drawPendingPt();\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, anticlockwise);\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n var delta = endAngle - startAngle;\n this.addData(CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1);\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\n };\n PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) {\n this._drawPendingPt();\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n return this;\n };\n PathProxy.prototype.rect = function (x, y, w, h) {\n this._drawPendingPt();\n this._ctx && this._ctx.rect(x, y, w, h);\n this.addData(CMD.R, x, y, w, h);\n return this;\n };\n PathProxy.prototype.closePath = function () {\n this._drawPendingPt();\n this.addData(CMD.Z);\n var ctx = this._ctx;\n var x0 = this._x0;\n var y0 = this._y0;\n if (ctx) {\n this._needsDash && this._dashedLineTo(x0, y0);\n ctx.closePath();\n }\n this._xi = x0;\n this._yi = y0;\n return this;\n };\n PathProxy.prototype.fill = function (ctx) {\n ctx && ctx.fill();\n this.toStatic();\n };\n PathProxy.prototype.stroke = function (ctx) {\n ctx && ctx.stroke();\n this.toStatic();\n };\n PathProxy.prototype.setLineDash = function (lineDash) {\n if (lineDash instanceof Array) {\n this._lineDash = lineDash;\n this._dashIdx = 0;\n var lineDashSum = 0;\n for (var i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n this._dashSum = lineDashSum;\n this._needsDash = true;\n }\n else {\n this._lineDash = null;\n this._needsDash = false;\n }\n return this;\n };\n PathProxy.prototype.setLineDashOffset = function (offset) {\n this._dashOffset = offset;\n return this;\n };\n PathProxy.prototype.len = function () {\n return this._len;\n };\n PathProxy.prototype.setData = function (data) {\n var len = data.length;\n if (!(this.data && this.data.length === len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n for (var i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n this._len = len;\n };\n PathProxy.prototype.appendPath = function (path) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n var len = path.length;\n var appendSize = 0;\n var offset = this._len;\n for (var i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n if (hasTypedArray && (this.data instanceof Float32Array)) {\n this.data = new Float32Array(offset + appendSize);\n }\n for (var i = 0; i < len; i++) {\n var appendPathData = path[i].data;\n for (var k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n this._len = offset;\n };\n PathProxy.prototype.addData = function (cmd, a, b, c, d, e, f, g, h) {\n if (!this._saveData) {\n return;\n }\n var data = this.data;\n if (this._len + arguments.length > data.length) {\n this._expandData();\n data = this.data;\n }\n for (var i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n };\n PathProxy.prototype._drawPendingPt = function () {\n if (this._pendingPtDist > 0) {\n this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY);\n this._pendingPtDist = 0;\n }\n };\n PathProxy.prototype._expandData = function () {\n if (!(this.data instanceof Array)) {\n var newData = [];\n for (var i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n }\n };\n PathProxy.prototype._dashedLineTo = function (x1, y1) {\n var dashSum = this._dashSum;\n var lineDash = this._lineDash;\n var ctx = this._ctx;\n var offset = this._dashOffset;\n var x0 = this._xi;\n var y0 = this._yi;\n var dx = x1 - x0;\n var dy = y1 - y0;\n var dist = mathSqrt(dx * dx + dy * dy);\n var x = x0;\n var y = y0;\n var nDash = lineDash.length;\n var dash;\n var idx;\n dx /= dist;\n dy /= dist;\n if (offset < 0) {\n offset = dashSum + offset;\n }\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)\n || (dx === 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) {\n idx = this._dashIdx;\n dash = lineDash[idx];\n x += dx * dash;\n y += dy * dash;\n this._dashIdx = (idx + 1) % nDash;\n if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {\n continue;\n }\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](dx >= 0 ? mathMin(x, x1) : mathMax(x, x1), dy >= 0 ? mathMin(y, y1) : mathMax(y, y1));\n }\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n };\n PathProxy.prototype._dashedBezierTo = function (x1, y1, x2, y2, x3, y3) {\n var ctx = this._ctx;\n var dashSum = this._dashSum;\n var offset = this._dashOffset;\n var lineDash = this._lineDash;\n var x0 = this._xi;\n var y0 = this._yi;\n var bezierLen = 0;\n var idx = this._dashIdx;\n var nDash = lineDash.length;\n var t;\n var dx;\n var dy;\n var x;\n var y;\n var tmpLen = 0;\n if (offset < 0) {\n offset = dashSum + offset;\n }\n offset %= dashSum;\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1)\n - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1)\n - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n }\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n if (tmpLen > offset) {\n break;\n }\n }\n t = (tmpLen - offset) / bezierLen;\n while (t <= 1) {\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t);\n idx % 2 ? ctx.moveTo(x, y)\n : ctx.lineTo(x, y);\n t += lineDash[idx] / bezierLen;\n idx = (idx + 1) % nDash;\n }\n (idx % 2 !== 0) && ctx.lineTo(x3, y3);\n dx = x3 - x;\n dy = y3 - y;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n };\n PathProxy.prototype._dashedQuadraticTo = function (x1, y1, x2, y2) {\n var x3 = x2;\n var y3 = y2;\n x2 = (x2 + 2 * x1) / 3;\n y2 = (y2 + 2 * y1) / 3;\n x1 = (this._xi + 2 * x1) / 3;\n y1 = (this._yi + 2 * y1) / 3;\n this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n };\n PathProxy.prototype.toStatic = function () {\n if (!this._saveData) {\n return;\n }\n this._drawPendingPt();\n var data = this.data;\n if (data instanceof Array) {\n data.length = this._len;\n if (hasTypedArray && this._len > 11) {\n this.data = new Float32Array(data);\n }\n }\n };\n PathProxy.prototype.getBoundingRect = function () {\n min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n var data = this.data;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var i;\n for (i = 0; i < this._len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n switch (cmd) {\n case CMD.M:\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n case CMD.L:\n fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle;\n i += 1;\n var anticlockwise = !data[i++];\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2);\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n }\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n }\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n };\n PathProxy.prototype._calculateLength = function () {\n var data = this.data;\n var len = this._len;\n var ux = this._ux;\n var uy = this._uy;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n if (!this._pathSegLen) {\n this._pathSegLen = [];\n }\n var pathSegLen = this._pathSegLen;\n var pathTotalLen = 0;\n var segCount = 0;\n for (var i = 0; i < len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n var l = -1;\n switch (cmd) {\n case CMD.M:\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n break;\n case CMD.L: {\n var x2 = data[i++];\n var y2 = data[i++];\n var dx = x2 - xi;\n var dy = y2 - yi;\n if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) {\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x2;\n yi = y2;\n }\n break;\n }\n case CMD.C: {\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n var x3 = data[i++];\n var y3 = data[i++];\n l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n l = quadraticLength(xi, yi, x1, y1, x2, y2, 10);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var delta = data[i++];\n var endAngle = delta + startAngle;\n i += 1;\n var anticlockwise = !data[i++];\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n l = mathMax(rx, ry) * mathMin(PI2, Math.abs(delta));\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R: {\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n l = width * 2 + height * 2;\n break;\n }\n case CMD.Z: {\n var dx = x0 - xi;\n var dy = y0 - yi;\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (l >= 0) {\n pathSegLen[segCount++] = l;\n pathTotalLen += l;\n }\n }\n this._pathLen = pathTotalLen;\n return pathTotalLen;\n };\n PathProxy.prototype.rebuildPath = function (ctx, percent) {\n var d = this.data;\n var ux = this._ux;\n var uy = this._uy;\n var len = this._len;\n var x0;\n var y0;\n var xi;\n var yi;\n var x;\n var y;\n var drawPart = percent < 1;\n var pathSegLen;\n var pathTotalLen;\n var accumLength = 0;\n var segCount = 0;\n var displayedLength;\n var pendingPtDist = 0;\n var pendingPtX;\n var pendingPtY;\n if (drawPart) {\n if (!this._pathSegLen) {\n this._calculateLength();\n }\n pathSegLen = this._pathSegLen;\n pathTotalLen = this._pathLen;\n displayedLength = percent * pathTotalLen;\n if (!displayedLength) {\n return;\n }\n }\n lo: for (var i = 0; i < len;) {\n var cmd = d[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = d[i];\n yi = d[i + 1];\n x0 = xi;\n y0 = yi;\n }\n if (cmd !== CMD.L && pendingPtDist > 0) {\n ctx.lineTo(pendingPtX, pendingPtY);\n pendingPtDist = 0;\n }\n switch (cmd) {\n case CMD.M:\n x0 = xi = d[i++];\n y0 = yi = d[i++];\n ctx.moveTo(xi, yi);\n break;\n case CMD.L: {\n x = d[i++];\n y = d[i++];\n var dx = mathAbs(x - xi);\n var dy = mathAbs(y - yi);\n if (dx > ux || dy > uy) {\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t);\n break lo;\n }\n accumLength += l;\n }\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n pendingPtDist = 0;\n }\n else {\n var d2 = dx * dx + dy * dy;\n if (d2 > pendingPtDist) {\n pendingPtX = x;\n pendingPtY = y;\n pendingPtDist = d2;\n }\n }\n break;\n }\n case CMD.C: {\n var x1 = d[i++];\n var y1 = d[i++];\n var x2 = d[i++];\n var y2 = d[i++];\n var x3 = d[i++];\n var y3 = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n cubicSubdivide(xi, x1, x2, x3, t, tmpOutX);\n cubicSubdivide(yi, y1, y2, y3, t, tmpOutY);\n ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]);\n break lo;\n }\n accumLength += l;\n }\n ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n var x1 = d[i++];\n var y1 = d[i++];\n var x2 = d[i++];\n var y2 = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n quadraticSubdivide(xi, x1, x2, t, tmpOutX);\n quadraticSubdivide(yi, y1, y2, t, tmpOutY);\n ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]);\n break lo;\n }\n accumLength += l;\n }\n ctx.quadraticCurveTo(x1, y1, x2, y2);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n var cx = d[i++];\n var cy = d[i++];\n var rx = d[i++];\n var ry = d[i++];\n var startAngle = d[i++];\n var delta = d[i++];\n var psi = d[i++];\n var anticlockwise = !d[i++];\n var r = (rx > ry) ? rx : ry;\n var isEllipse = mathAbs(rx - ry) > 1e-3;\n var endAngle = startAngle + delta;\n var breakBuild = false;\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n endAngle = startAngle + delta * (displayedLength - accumLength) / l;\n breakBuild = true;\n }\n accumLength += l;\n }\n if (isEllipse && ctx.ellipse) {\n ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise);\n }\n else {\n ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n }\n if (breakBuild) {\n break lo;\n }\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n x = d[i++];\n y = d[i++];\n var width = d[i++];\n var height = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var d_1 = displayedLength - accumLength;\n ctx.moveTo(x, y);\n ctx.lineTo(x + mathMin(d_1, width), y);\n d_1 -= width;\n if (d_1 > 0) {\n ctx.lineTo(x + width, y + mathMin(d_1, height));\n }\n d_1 -= height;\n if (d_1 > 0) {\n ctx.lineTo(x + mathMax(width - d_1, 0), y + height);\n }\n d_1 -= width;\n if (d_1 > 0) {\n ctx.lineTo(x, y + mathMax(height - d_1, 0));\n }\n break lo;\n }\n accumLength += l;\n }\n ctx.rect(x, y, width, height);\n break;\n case CMD.Z:\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t);\n break lo;\n }\n accumLength += l;\n }\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n };\n PathProxy.prototype.clone = function () {\n var newProxy = new PathProxy();\n var data = this.data;\n newProxy.data = data.slice ? data.slice()\n : Array.prototype.slice.call(data);\n newProxy._len = this._len;\n return newProxy;\n };\n PathProxy.CMD = CMD;\n PathProxy.initDefaultProps = (function () {\n var proto = PathProxy.prototype;\n proto._saveData = true;\n proto._needsDash = false;\n proto._dashOffset = 0;\n proto._dashIdx = 0;\n proto._dashSum = 0;\n proto._ux = 0;\n proto._uy = 0;\n proto._pendingPtDist = 0;\n proto._version = 0;\n })();\n return PathProxy;\n}());\nexport default PathProxy;\n","import * as vec2 from './vector';\nimport * as curve from './curve';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\nexport function fromPoints(points, min, max) {\n if (points.length === 0) {\n return;\n }\n var p = points[0];\n var left = p[0];\n var right = p[0];\n var top = p[1];\n var bottom = p[1];\n for (var i = 1; i < points.length; i++) {\n p = points[i];\n left = mathMin(left, p[0]);\n right = mathMax(right, p[0]);\n top = mathMin(top, p[1]);\n bottom = mathMax(bottom, p[1]);\n }\n min[0] = left;\n min[1] = top;\n max[0] = right;\n max[1] = bottom;\n}\nexport function fromLine(x0, y0, x1, y1, min, max) {\n min[0] = mathMin(x0, x1);\n min[1] = mathMin(y0, y1);\n max[0] = mathMax(x0, x1);\n max[1] = mathMax(y0, y1);\n}\nvar xDim = [];\nvar yDim = [];\nexport function fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) {\n var cubicExtrema = curve.cubicExtrema;\n var cubicAt = curve.cubicAt;\n var n = cubicExtrema(x0, x1, x2, x3, xDim);\n min[0] = Infinity;\n min[1] = Infinity;\n max[0] = -Infinity;\n max[1] = -Infinity;\n for (var i = 0; i < n; i++) {\n var x = cubicAt(x0, x1, x2, x3, xDim[i]);\n min[0] = mathMin(x, min[0]);\n max[0] = mathMax(x, max[0]);\n }\n n = cubicExtrema(y0, y1, y2, y3, yDim);\n for (var i = 0; i < n; i++) {\n var y = cubicAt(y0, y1, y2, y3, yDim[i]);\n min[1] = mathMin(y, min[1]);\n max[1] = mathMax(y, max[1]);\n }\n min[0] = mathMin(x0, min[0]);\n max[0] = mathMax(x0, max[0]);\n min[0] = mathMin(x3, min[0]);\n max[0] = mathMax(x3, max[0]);\n min[1] = mathMin(y0, min[1]);\n max[1] = mathMax(y0, max[1]);\n min[1] = mathMin(y3, min[1]);\n max[1] = mathMax(y3, max[1]);\n}\nexport function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n var quadraticExtremum = curve.quadraticExtremum;\n var quadraticAt = curve.quadraticAt;\n var tx = mathMax(mathMin(quadraticExtremum(x0, x1, x2), 1), 0);\n var ty = mathMax(mathMin(quadraticExtremum(y0, y1, y2), 1), 0);\n var x = quadraticAt(x0, x1, x2, tx);\n var y = quadraticAt(y0, y1, y2, ty);\n min[0] = mathMin(x0, x2, x);\n min[1] = mathMin(y0, y2, y);\n max[0] = mathMax(x0, x2, x);\n max[1] = mathMax(y0, y2, y);\n}\nexport function fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max) {\n var vec2Min = vec2.min;\n var vec2Max = vec2.max;\n var diff = Math.abs(startAngle - endAngle);\n if (diff % PI2 < 1e-4 && diff > 1e-4) {\n min[0] = x - rx;\n min[1] = y - ry;\n max[0] = x + rx;\n max[1] = y + ry;\n return;\n }\n start[0] = mathCos(startAngle) * rx + x;\n start[1] = mathSin(startAngle) * ry + y;\n end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n vec2Min(min, start, end);\n vec2Max(max, start, end);\n startAngle = startAngle % (PI2);\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n endAngle = endAngle % (PI2);\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n }\n else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n if (anticlockwise) {\n var tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n }\n for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = mathCos(angle) * rx + x;\n extremity[1] = mathSin(angle) * ry + y;\n vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n","import * as matrix from './matrix';\nimport * as vector from './vector';\nvar mIdentity = matrix.identity;\nvar EPSILON = 5e-5;\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\nvar scaleTmp = [];\nvar tmpTransform = [];\nvar originTransform = matrix.create();\nvar abs = Math.abs;\nvar Transformable = (function () {\n function Transformable() {\n }\n Transformable.prototype.getLocalTransform = function (m) {\n return Transformable.getLocalTransform(this, m);\n };\n Transformable.prototype.setPosition = function (arr) {\n this.x = arr[0];\n this.y = arr[1];\n };\n Transformable.prototype.setScale = function (arr) {\n this.scaleX = arr[0];\n this.scaleY = arr[1];\n };\n Transformable.prototype.setSkew = function (arr) {\n this.skewX = arr[0];\n this.skewY = arr[1];\n };\n Transformable.prototype.setOrigin = function (arr) {\n this.originX = arr[0];\n this.originY = arr[1];\n };\n Transformable.prototype.needLocalTransform = function () {\n return isNotAroundZero(this.rotation)\n || isNotAroundZero(this.x)\n || isNotAroundZero(this.y)\n || isNotAroundZero(this.scaleX - 1)\n || isNotAroundZero(this.scaleY - 1);\n };\n Transformable.prototype.updateTransform = function () {\n var parentTransform = this.parent && this.parent.transform;\n var needLocalTransform = this.needLocalTransform();\n var m = this.transform;\n if (!(needLocalTransform || parentTransform)) {\n m && mIdentity(m);\n return;\n }\n m = m || matrix.create();\n if (needLocalTransform) {\n this.getLocalTransform(m);\n }\n else {\n mIdentity(m);\n }\n if (parentTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parentTransform, m);\n }\n else {\n matrix.copy(m, parentTransform);\n }\n }\n this.transform = m;\n this._resolveGlobalScaleRatio(m);\n };\n Transformable.prototype._resolveGlobalScaleRatio = function (m) {\n var globalScaleRatio = this.globalScaleRatio;\n if (globalScaleRatio != null && globalScaleRatio !== 1) {\n this.getGlobalScale(scaleTmp);\n var relX = scaleTmp[0] < 0 ? -1 : 1;\n var relY = scaleTmp[1] < 0 ? -1 : 1;\n var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n m[0] *= sx;\n m[1] *= sx;\n m[2] *= sy;\n m[3] *= sy;\n }\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n };\n Transformable.prototype.getComputedTransform = function () {\n var transformNode = this;\n var ancestors = [];\n while (transformNode) {\n ancestors.push(transformNode);\n transformNode = transformNode.parent;\n }\n while (transformNode = ancestors.pop()) {\n transformNode.updateTransform();\n }\n return this.transform;\n };\n Transformable.prototype.setLocalTransform = function (m) {\n if (!m) {\n return;\n }\n var sx = m[0] * m[0] + m[1] * m[1];\n var sy = m[2] * m[2] + m[3] * m[3];\n var rotation = Math.atan2(m[1], m[0]);\n var shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]);\n sy = Math.sqrt(sy) * Math.cos(shearX);\n sx = Math.sqrt(sx);\n this.skewX = shearX;\n this.skewY = 0;\n this.rotation = -rotation;\n this.x = +m[4];\n this.y = +m[5];\n this.scaleX = sx;\n this.scaleY = sy;\n this.originX = 0;\n this.originY = 0;\n };\n Transformable.prototype.decomposeTransform = function () {\n if (!this.transform) {\n return;\n }\n var parent = this.parent;\n var m = this.transform;\n if (parent && parent.transform) {\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n var ox = this.originX;\n var oy = this.originY;\n if (ox || oy) {\n originTransform[4] = ox;\n originTransform[5] = oy;\n matrix.mul(tmpTransform, m, originTransform);\n tmpTransform[4] -= ox;\n tmpTransform[5] -= oy;\n m = tmpTransform;\n }\n this.setLocalTransform(m);\n };\n Transformable.prototype.getGlobalScale = function (out) {\n var m = this.transform;\n out = out || [];\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\n out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n return out;\n };\n Transformable.prototype.transformCoordToLocal = function (x, y) {\n var v2 = [x, y];\n var invTransform = this.invTransform;\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n return v2;\n };\n Transformable.prototype.transformCoordToGlobal = function (x, y) {\n var v2 = [x, y];\n var transform = this.transform;\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n return v2;\n };\n Transformable.prototype.getLineScale = function () {\n var m = this.transform;\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n : 1;\n };\n Transformable.prototype.copyTransform = function (source) {\n var target = this;\n for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {\n var propName = TRANSFORMABLE_PROPS[i];\n target[propName] = source[propName];\n }\n };\n Transformable.getLocalTransform = function (target, m) {\n m = m || [];\n var ox = target.originX || 0;\n var oy = target.originY || 0;\n var sx = target.scaleX;\n var sy = target.scaleY;\n var rotation = target.rotation || 0;\n var x = target.x;\n var y = target.y;\n var skewX = target.skewX ? Math.tan(target.skewX) : 0;\n var skewY = target.skewY ? Math.tan(-target.skewY) : 0;\n if (ox || oy) {\n m[4] = -ox * sx - skewX * oy * sy;\n m[5] = -oy * sy - skewY * ox * sx;\n }\n else {\n m[4] = m[5] = 0;\n }\n m[0] = sx;\n m[3] = sy;\n m[1] = skewY * sx;\n m[2] = skewX * sy;\n rotation && matrix.rotate(m, m, rotation);\n m[4] += ox + x;\n m[5] += oy + y;\n return m;\n };\n Transformable.initDefaultProps = (function () {\n var proto = Transformable.prototype;\n proto.x = 0;\n proto.y = 0;\n proto.scaleX = 1;\n proto.scaleY = 1;\n proto.originX = 0;\n proto.originY = 0;\n proto.skewX = 0;\n proto.skewY = 0;\n proto.rotation = 0;\n proto.globalScaleRatio = 1;\n })();\n return Transformable;\n}());\n;\nexport var TRANSFORMABLE_PROPS = [\n 'x', 'y', 'originX', 'originY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY'\n];\nexport default Transformable;\n","export function create(x, y) {\n if (x == null) {\n x = 0;\n }\n if (y == null) {\n y = 0;\n }\n return [x, y];\n}\nexport function copy(out, v) {\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\nexport function clone(v) {\n return [v[0], v[1]];\n}\nexport function set(out, a, b) {\n out[0] = a;\n out[1] = b;\n return out;\n}\nexport function add(out, v1, v2) {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n}\nexport function scaleAndAdd(out, v1, v2, a) {\n out[0] = v1[0] + v2[0] * a;\n out[1] = v1[1] + v2[1] * a;\n return out;\n}\nexport function sub(out, v1, v2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n}\nexport function len(v) {\n return Math.sqrt(lenSquare(v));\n}\nexport var length = len;\nexport function lenSquare(v) {\n return v[0] * v[0] + v[1] * v[1];\n}\nexport var lengthSquare = lenSquare;\nexport function mul(out, v1, v2) {\n out[0] = v1[0] * v2[0];\n out[1] = v1[1] * v2[1];\n return out;\n}\nexport function div(out, v1, v2) {\n out[0] = v1[0] / v2[0];\n out[1] = v1[1] / v2[1];\n return out;\n}\nexport function dot(v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\nexport function scale(out, v, s) {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n}\nexport function normalize(out, v) {\n var d = len(v);\n if (d === 0) {\n out[0] = 0;\n out[1] = 0;\n }\n else {\n out[0] = v[0] / d;\n out[1] = v[1] / d;\n }\n return out;\n}\nexport function distance(v1, v2) {\n return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]));\n}\nexport var dist = distance;\nexport function distanceSquare(v1, v2) {\n return (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport var distSquare = distanceSquare;\nexport function negate(out, v) {\n out[0] = -v[0];\n out[1] = -v[1];\n return out;\n}\nexport function lerp(out, v1, v2, t) {\n out[0] = v1[0] + t * (v2[0] - v1[0]);\n out[1] = v1[1] + t * (v2[1] - v1[1]);\n return out;\n}\nexport function applyTransform(out, v, m) {\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\nexport function min(out, v1, v2) {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n}\nexport function max(out, v1, v2) {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n}\n","import { DEFAULT_COMMON_STYLE } from '../graphic/Displayable';\nimport PathProxy from '../core/PathProxy';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image';\nimport { getCanvasGradient, isClipPathChanged } from './helper';\nimport Path from '../graphic/Path';\nimport ZRImage from '../graphic/Image';\nimport TSpan from '../graphic/TSpan';\nimport { DEFAULT_FONT } from '../contain/text';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\nimport IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT } from '../graphic/constants';\nvar pathProxyForDraw = new PathProxy(true);\nfunction styleHasStroke(style) {\n var stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\nfunction isValidStrokeFillStyle(strokeOrFill) {\n return typeof strokeOrFill === 'string' && strokeOrFill !== 'none';\n}\nfunction styleHasFill(style) {\n var fill = style.fill;\n return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx, style) {\n if (style.fillOpacity != null && style.fillOpacity !== 1) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.fill();\n }\n}\nfunction doStrokePath(ctx, style) {\n if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.stroke();\n }\n}\nexport function createCanvasPattern(ctx, pattern, el) {\n var image = createOrUpdateImage(pattern.image, pattern.__image, el);\n if (isImageReady(image)) {\n var canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat');\n if (typeof DOMMatrix === 'function'\n && canvasPattern.setTransform) {\n var matrix = new DOMMatrix();\n matrix.rotateSelf(0, 0, (pattern.rotation || 0) / Math.PI * 180);\n matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1));\n matrix.translateSelf((pattern.x || 0), (pattern.y || 0));\n canvasPattern.setTransform(matrix);\n }\n return canvasPattern;\n }\n}\nfunction brushPath(ctx, el, style, inBatch) {\n var hasStroke = styleHasStroke(style);\n var hasFill = styleHasFill(style);\n var strokePercent = style.strokePercent;\n var strokePart = strokePercent < 1;\n var firstDraw = !el.path;\n if ((!el.silent || strokePart) && firstDraw) {\n el.createPathProxy();\n }\n var path = el.path || pathProxyForDraw;\n if (!inBatch) {\n var fill = style.fill;\n var stroke = style.stroke;\n var hasFillGradient = hasFill && !!fill.colorStops;\n var hasStrokeGradient = hasStroke && !!stroke.colorStops;\n var hasFillPattern = hasFill && !!fill.image;\n var hasStrokePattern = hasStroke && !!stroke.image;\n var fillGradient = void 0;\n var strokeGradient = void 0;\n var fillPattern = void 0;\n var strokePattern = void 0;\n var rect = void 0;\n if (hasFillGradient || hasStrokeGradient) {\n rect = el.getBoundingRect();\n }\n if (hasFillGradient) {\n fillGradient = el.__dirty\n ? getCanvasGradient(ctx, fill, rect)\n : el.__canvasFillGradient;\n el.__canvasFillGradient = fillGradient;\n }\n if (hasStrokeGradient) {\n strokeGradient = el.__dirty\n ? getCanvasGradient(ctx, stroke, rect)\n : el.__canvasStrokeGradient;\n el.__canvasStrokeGradient = strokeGradient;\n }\n if (hasFillPattern) {\n fillPattern = (el.__dirty || !el.__canvasFillPattern)\n ? createCanvasPattern(ctx, fill, el)\n : el.__canvasFillPattern;\n el.__canvasFillPattern = fillPattern;\n }\n if (hasStrokePattern) {\n strokePattern = (el.__dirty || !el.__canvasStrokePattern)\n ? createCanvasPattern(ctx, stroke, el)\n : el.__canvasStrokePattern;\n el.__canvasStrokePattern = fillPattern;\n }\n if (hasFillGradient) {\n ctx.fillStyle = fillGradient;\n }\n else if (hasFillPattern) {\n if (fillPattern) {\n ctx.fillStyle = fillPattern;\n }\n else {\n hasFill = false;\n }\n }\n if (hasStrokeGradient) {\n ctx.strokeStyle = strokeGradient;\n }\n else if (hasStrokePattern) {\n if (strokePattern) {\n ctx.strokeStyle = strokePattern;\n }\n else {\n hasStroke = false;\n }\n }\n }\n var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n var lineDashOffset = style.lineDashOffset;\n var ctxLineDash = !!ctx.setLineDash;\n var scale = el.getGlobalScale();\n path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n if (lineDash) {\n var lineScale_1 = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale_1 && lineScale_1 !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale_1;\n });\n lineDashOffset /= lineScale_1;\n }\n }\n var needsRebuild = true;\n if (firstDraw || (el.__dirty & SHAPE_CHANGED_BIT)\n || (lineDash && !ctxLineDash && hasStroke)) {\n path.setDPR(ctx.dpr);\n if (strokePart) {\n path.setContext(null);\n }\n else {\n path.setContext(ctx);\n needsRebuild = false;\n }\n path.reset();\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n el.buildPath(path, el.shape, inBatch);\n path.toStatic();\n el.pathUpdated();\n }\n if (needsRebuild) {\n path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n }\n if (lineDash && ctxLineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n if (!inBatch) {\n if (style.strokeFirst) {\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n if (hasFill) {\n doFillPath(ctx, style);\n }\n }\n else {\n if (hasFill) {\n doFillPath(ctx, style);\n }\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n }\n }\n if (lineDash && ctxLineDash) {\n ctx.setLineDash([]);\n }\n}\nfunction brushImage(ctx, el, style) {\n var image = el.__image = createOrUpdateImage(style.image, el.__image, el, el.onload);\n if (!image || !isImageReady(image)) {\n return;\n }\n var x = style.x || 0;\n var y = style.y || 0;\n var width = el.getWidth();\n var height = el.getHeight();\n var aspect = image.width / image.height;\n if (width == null && height != null) {\n width = height * aspect;\n }\n else if (height == null && width != null) {\n height = width / aspect;\n }\n else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n }\n if (style.sWidth && style.sHeight) {\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);\n }\n else if (style.sx && style.sy) {\n var sx = style.sx;\n var sy = style.sy;\n var sWidth = width - sx;\n var sHeight = height - sy;\n ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n}\nfunction brushText(ctx, el, style) {\n var text = style.text;\n text != null && (text += '');\n if (text) {\n ctx.font = style.font || DEFAULT_FONT;\n ctx.textAlign = style.textAlign;\n ctx.textBaseline = style.textBaseline;\n var hasLineDash = void 0;\n if (ctx.setLineDash) {\n var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n var lineDashOffset = style.lineDashOffset;\n if (lineDash) {\n var lineScale_2 = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale_2 && lineScale_2 !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale_2;\n });\n lineDashOffset /= lineScale_2;\n }\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n hasLineDash = true;\n }\n }\n if (style.strokeFirst) {\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n }\n else {\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n }\n if (hasLineDash) {\n ctx.setLineDash([]);\n }\n }\n}\nvar SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\nvar STROKE_PROPS = [\n ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n];\nfunction bindCommonProps(ctx, style, prevStyle, forceSetAll, scope) {\n var styleChanged = false;\n if (!forceSetAll) {\n prevStyle = prevStyle || {};\n if (style === prevStyle) {\n return false;\n }\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n var opacity = Math.max(Math.min(style.opacity, 1), 0);\n ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity;\n }\n if (forceSetAll || style.blend !== prevStyle.blend) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n }\n for (var i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n var propName = SHADOW_NUMBER_PROPS[i];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx[propName] = ctx.dpr * (style[propName] || 0);\n }\n }\n if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n }\n return styleChanged;\n}\nfunction bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetAll, scope) {\n var style = getStyle(el, scope.inHover);\n var prevStyle = forceSetAll\n ? null\n : (prevEl && getStyle(prevEl, scope.inHover) || {});\n if (style === prevStyle) {\n return false;\n }\n var styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n if (forceSetAll || style.fill !== prevStyle.fill) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill);\n }\n if (forceSetAll || style.stroke !== prevStyle.stroke) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke);\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n if (el.hasStroke()) {\n var lineWidth = style.lineWidth;\n var newLineWidth = lineWidth / ((style.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1);\n if (ctx.lineWidth !== newLineWidth) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.lineWidth = newLineWidth;\n }\n }\n for (var i = 0; i < STROKE_PROPS.length; i++) {\n var prop = STROKE_PROPS[i];\n var propName = prop[0];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx[propName] = style[propName] || prop[1];\n }\n }\n return styleChanged;\n}\nfunction bindImageStyle(ctx, el, prevEl, forceSetAll, scope) {\n return bindCommonProps(ctx, getStyle(el, scope.inHover), prevEl && getStyle(prevEl, scope.inHover), forceSetAll, scope);\n}\nfunction setContextTransform(ctx, el) {\n var m = el.transform;\n var dpr = ctx.dpr || 1;\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n }\n else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n}\nfunction updateClipStatus(clipPaths, ctx, scope) {\n var allClipped = false;\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n allClipped = allClipped || clipPath.isZeroArea();\n setContextTransform(ctx, clipPath);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip();\n }\n scope.allClipped = allClipped;\n}\nfunction isTransformChanged(m0, m1) {\n if (m0 && m1) {\n return m0[0] !== m1[0]\n || m0[1] !== m1[1]\n || m0[2] !== m1[2]\n || m0[3] !== m1[3]\n || m0[4] !== m1[4]\n || m0[5] !== m1[5];\n }\n else if (!m0 && !m1) {\n return false;\n }\n return true;\n}\nvar DRAW_TYPE_PATH = 1;\nvar DRAW_TYPE_IMAGE = 2;\nvar DRAW_TYPE_TEXT = 3;\nvar DRAW_TYPE_INCREMENTAL = 4;\nfunction canPathBatch(style) {\n var hasFill = styleHasFill(style);\n var hasStroke = styleHasStroke(style);\n return !(style.lineDash\n || !(+hasFill ^ +hasStroke)\n || (hasFill && typeof style.fill !== 'string')\n || (hasStroke && typeof style.stroke !== 'string')\n || style.strokePercent < 1\n || style.strokeOpacity < 1\n || style.fillOpacity < 1);\n}\nfunction flushPathDrawn(ctx, scope) {\n scope.batchFill && ctx.fill();\n scope.batchStroke && ctx.stroke();\n scope.batchFill = '';\n scope.batchStroke = '';\n}\nfunction getStyle(el, inHover) {\n return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\nexport function brushSingle(ctx, el) {\n brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true);\n}\nexport function brush(ctx, el, scope, isLast) {\n var m = el.transform;\n if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) {\n el.__dirty &= ~REDARAW_BIT;\n el.__isRendered = false;\n return;\n }\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths;\n var forceSetTransform = false;\n var forceSetStyle = false;\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n if (prevElClipPaths && prevElClipPaths.length) {\n flushPathDrawn(ctx, scope);\n ctx.restore();\n forceSetStyle = forceSetTransform = true;\n scope.prevElClipPaths = null;\n scope.allClipped = false;\n scope.prevEl = null;\n }\n if (clipPaths && clipPaths.length) {\n flushPathDrawn(ctx, scope);\n ctx.save();\n updateClipStatus(clipPaths, ctx, scope);\n forceSetTransform = true;\n }\n scope.prevElClipPaths = clipPaths;\n }\n if (scope.allClipped) {\n el.__isRendered = false;\n return;\n }\n el.beforeBrush && el.beforeBrush();\n el.innerBeforeBrush();\n var prevEl = scope.prevEl;\n if (!prevEl) {\n forceSetStyle = forceSetTransform = true;\n }\n var canBatchPath = el instanceof Path\n && el.autoBatch\n && canPathBatch(el.style);\n if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n flushPathDrawn(ctx, scope);\n setContextTransform(ctx, el);\n }\n else if (!canBatchPath) {\n flushPathDrawn(ctx, scope);\n }\n var style = getStyle(el, scope.inHover);\n if (el instanceof Path) {\n if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_PATH;\n }\n bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope);\n if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n ctx.beginPath();\n }\n brushPath(ctx, el, style, canBatchPath);\n if (canBatchPath) {\n scope.batchFill = style.fill || '';\n scope.batchStroke = style.stroke || '';\n }\n }\n else {\n if (el instanceof TSpan) {\n if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_TEXT;\n }\n bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope);\n brushText(ctx, el, style);\n }\n else if (el instanceof ZRImage) {\n if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_IMAGE;\n }\n bindImageStyle(ctx, el, prevEl, forceSetStyle, scope);\n brushImage(ctx, el, style);\n }\n else if (el instanceof IncrementalDisplayable) {\n if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n }\n brushIncremental(ctx, el, scope);\n }\n }\n if (canBatchPath && isLast) {\n flushPathDrawn(ctx, scope);\n }\n el.innerAfterBrush();\n el.afterBrush && el.afterBrush();\n scope.prevEl = el;\n el.__dirty = 0;\n el.__isRendered = true;\n}\nfunction brushIncremental(ctx, el, scope) {\n var displayables = el.getDisplayables();\n var temporalDisplayables = el.getTemporalDisplayables();\n ctx.save();\n var innerScope = {\n prevElClipPaths: null,\n prevEl: null,\n allClipped: false,\n viewWidth: scope.viewWidth,\n viewHeight: scope.viewHeight,\n inHover: scope.inHover\n };\n var i;\n var len;\n for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n var displayable = displayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n for (var i_1 = 0, len_1 = temporalDisplayables.length; i_1 < len_1; i_1++) {\n var displayable = temporalDisplayables[i_1];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i_1 === len_1 - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n el.clearTemporalDisplayables();\n el.notClear = true;\n ctx.restore();\n}\n","import PathProxy from '../core/PathProxy';\nimport { applyTransform as v2ApplyTransform } from '../core/vector';\nvar CMD = PathProxy.CMD;\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\nexport default function transformPath(path, m) {\n if (!m) {\n return;\n }\n var data = path.data;\n var len = path.len();\n var cmd;\n var nPoint;\n var i;\n var j;\n var k;\n var p;\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var R = CMD.R;\n var A = CMD.A;\n var Q = CMD.Q;\n for (i = 0, j = 0; i < len;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n case L:\n nPoint = 1;\n break;\n case C:\n nPoint = 3;\n break;\n case Q:\n nPoint = 2;\n break;\n case A:\n var x = m[4];\n var y = m[5];\n var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n var angle = mathAtan2(-m[1] / sy, m[0] / sx);\n data[i] *= sx;\n data[i++] += x;\n data[i] *= sy;\n data[i++] += y;\n data[i++] *= sx;\n data[i++] *= sy;\n data[i++] += angle;\n data[i++] += angle;\n i += 2;\n j = i;\n break;\n case R:\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n for (k = 0; k < nPoint; k++) {\n var p_1 = points[k];\n p_1[0] = data[i++];\n p_1[1] = data[i++];\n v2ApplyTransform(p_1, p_1, m);\n data[j++] = p_1[0];\n data[j++] = p_1[1];\n }\n }\n path.increaseVersion();\n}\n","import { __extends } from \"tslib\";\nimport Path from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\nimport { extend } from '../core/util';\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n;\nfunction vRatio(u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n}\n;\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n * Math.acos(vRatio(u, v));\n}\n;\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n var psi = psiDeg * (PI / 180.0);\n var xp = mathCos(psi) * (x1 - x2) / 2.0\n + mathSin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n + mathCos(psi) * (y1 - y2) / 2.0;\n var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n var f = (fa === fs ? -1 : 1)\n * mathSqrt((((rx * rx) * (ry * ry))\n - ((rx * rx) * (yp * yp))\n - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n + (ry * ry) * (xp * xp))) || 0;\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n var cx = (x1 + x2) / 2.0\n + mathCos(psi) * cxp\n - mathSin(psi) * cyp;\n var cy = (y1 + y2) / 2.0\n + mathSin(psi) * cxp\n + mathCos(psi) * cyp;\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (dTheta < 0) {\n var n = Math.round(dTheta / PI * 1e6) / 1e6;\n dTheta = PI * 2 + (n % 2) * PI;\n }\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction createPathProxyFromString(data) {\n var path = new PathProxy();\n if (!data) {\n return path;\n }\n var cpx = 0;\n var cpy = 0;\n var subpathX = cpx;\n var subpathY = cpy;\n var prevCmd;\n var CMD = PathProxy.CMD;\n var cmdList = data.match(commandReg);\n if (!cmdList) {\n return path;\n }\n for (var l = 0; l < cmdList.length; l++) {\n var cmdText = cmdList[l];\n var cmdStr = cmdText.charAt(0);\n var cmd = void 0;\n var p = cmdText.match(numberReg) || [];\n var pLen = p.length;\n for (var i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i]);\n }\n var off = 0;\n while (off < pLen) {\n var ctlPtx = void 0;\n var ctlPty = void 0;\n var rx = void 0;\n var ry = void 0;\n var psi = void 0;\n var fa = void 0;\n var fs = void 0;\n var x1 = cpx;\n var y1 = cpy;\n var len = void 0;\n var pathData = void 0;\n switch (cmdStr) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'l';\n break;\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'L';\n break;\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'C':\n cmd = CMD.C;\n path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]);\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n case 'c':\n cmd = CMD.C;\n path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy);\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n }\n }\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd);\n cpx = subpathX;\n cpy = subpathY;\n }\n prevCmd = cmd;\n }\n path.toStatic();\n return path;\n}\nvar SVGPath = (function (_super) {\n __extends(SVGPath, _super);\n function SVGPath() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SVGPath.prototype.applyTransform = function (m) { };\n return SVGPath;\n}(Path));\nfunction isPathProxy(path) {\n return path.setData != null;\n}\nfunction createPathOptions(str, opts) {\n var pathProxy = createPathProxyFromString(str);\n var innerOpts = extend({}, opts);\n innerOpts.buildPath = function (path) {\n if (isPathProxy(path)) {\n path.setData(pathProxy.data);\n var ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n else {\n var ctx = path;\n pathProxy.rebuildPath(ctx, 1);\n }\n };\n innerOpts.applyTransform = function (m) {\n transformPath(pathProxy, m);\n this.dirtyShape();\n };\n return innerOpts;\n}\nexport function createFromString(str, opts) {\n return new SVGPath(createPathOptions(str, opts));\n}\nexport function extendFromString(str, defaultOpts) {\n var innerOpts = createPathOptions(str, defaultOpts);\n var Sub = (function (_super) {\n __extends(Sub, _super);\n function Sub(opts) {\n var _this = _super.call(this, opts) || this;\n _this.applyTransform = innerOpts.applyTransform;\n _this.buildPath = innerOpts.buildPath;\n return _this;\n }\n return Sub;\n }(SVGPath));\n return Sub;\n}\nexport function mergePath(pathEls, opts) {\n var pathList = [];\n var len = pathEls.length;\n for (var i = 0; i < len; i++) {\n var pathEl = pathEls[i];\n pathList.push(pathEl.getUpdatedPathProxy(true));\n }\n var pathBundle = new Path(opts);\n pathBundle.createPathProxy();\n pathBundle.buildPath = function (path) {\n if (isPathProxy(path)) {\n path.appendPath(pathList);\n var ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n };\n return pathBundle;\n}\nexport function clonePath(sourcePath, opts) {\n opts = opts || {};\n var path = new Path();\n if (sourcePath.shape) {\n path.setShape(sourcePath.shape);\n }\n path.setStyle(sourcePath.style);\n if (opts.bakeTransform) {\n transformPath(path.path, sourcePath.getComputedTransform());\n }\n else {\n if (opts.toLocal) {\n path.setLocalTransform(sourcePath.getComputedTransform());\n }\n else {\n path.copyTransform(sourcePath);\n }\n }\n path.buildPath = sourcePath.buildPath;\n path.applyTransform = path.applyTransform;\n path.z = sourcePath.z;\n path.z2 = sourcePath.z2;\n path.zlevel = sourcePath.zlevel;\n return path;\n}\n","import { __extends } from \"tslib\";\nimport Displayable from './Displayable';\nimport { getBoundingRect, DEFAULT_FONT } from '../contain/text';\nimport { DEFAULT_PATH_STYLE } from './Path';\nimport { createObject, defaults } from '../core/util';\nexport var DEFAULT_TSPAN_STYLE = defaults({\n strokeFirst: true,\n font: DEFAULT_FONT,\n x: 0,\n y: 0,\n textAlign: 'left',\n textBaseline: 'top',\n miterLimit: 2\n}, DEFAULT_PATH_STYLE);\nvar TSpan = (function (_super) {\n __extends(TSpan, _super);\n function TSpan() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TSpan.prototype.hasStroke = function () {\n var style = this.style;\n var stroke = style.stroke;\n return stroke != null && stroke !== 'none' && style.lineWidth > 0;\n };\n TSpan.prototype.hasFill = function () {\n var style = this.style;\n var fill = style.fill;\n return fill != null && fill !== 'none';\n };\n TSpan.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_TSPAN_STYLE, obj);\n };\n TSpan.prototype.setBoundingRect = function (rect) {\n this._rect = rect;\n };\n TSpan.prototype.getBoundingRect = function () {\n var style = this.style;\n if (!this._rect) {\n var text = style.text;\n text != null ? (text += '') : (text = '');\n var rect = getBoundingRect(text, style.font, style.textAlign, style.textBaseline);\n rect.x += style.x || 0;\n rect.y += style.y || 0;\n if (this.hasStroke()) {\n var w = style.lineWidth;\n rect.x -= w / 2;\n rect.y -= w / 2;\n rect.width += w;\n rect.height += w;\n }\n this._rect = rect;\n }\n return this._rect;\n };\n TSpan.initDefaultProps = (function () {\n var tspanProto = TSpan.prototype;\n tspanProto.dirtyRectTolerance = 10;\n })();\n return TSpan;\n}(Displayable));\nTSpan.prototype.type = 'tspan';\nexport default TSpan;\n","var easing = {\n linear: function (k) {\n return k;\n },\n quadraticIn: function (k) {\n return k * k;\n },\n quadraticOut: function (k) {\n return k * (2 - k);\n },\n quadraticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * (--k * (k - 2) - 1);\n },\n cubicIn: function (k) {\n return k * k * k;\n },\n cubicOut: function (k) {\n return --k * k * k + 1;\n },\n cubicInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n quarticIn: function (k) {\n return k * k * k * k;\n },\n quarticOut: function (k) {\n return 1 - (--k * k * k * k);\n },\n quarticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n quinticIn: function (k) {\n return k * k * k * k * k;\n },\n quinticOut: function (k) {\n return --k * k * k * k * k + 1;\n },\n quinticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n sinusoidalIn: function (k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n sinusoidalOut: function (k) {\n return Math.sin(k * Math.PI / 2);\n },\n sinusoidalInOut: function (k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n exponentialIn: function (k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n exponentialOut: function (k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n exponentialInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n circularIn: function (k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n circularOut: function (k) {\n return Math.sqrt(1 - (--k * k));\n },\n circularInOut: function (k) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n elasticIn: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return -(a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n elasticOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return (a * Math.pow(2, -10 * k)\n * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n },\n elasticInOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n return a * Math.pow(2, -10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n bounceOut: function (k) {\n if (k < (1 / 2.75)) {\n return 7.5625 * k * k;\n }\n else if (k < (2 / 2.75)) {\n return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n }\n else if (k < (2.5 / 2.75)) {\n return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n }\n else {\n return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n }\n },\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nexport default easing;\n","import easingFuncs from './easing';\nvar Clip = (function () {\n function Clip(opts) {\n this._initialized = false;\n this._startTime = 0;\n this._pausedTime = 0;\n this._paused = false;\n this._life = opts.life || 1000;\n this._delay = opts.delay || 0;\n this.loop = opts.loop == null ? false : opts.loop;\n this.gap = opts.gap || 0;\n this.easing = opts.easing || 'linear';\n this.onframe = opts.onframe;\n this.ondestroy = opts.ondestroy;\n this.onrestart = opts.onrestart;\n }\n Clip.prototype.step = function (globalTime, deltaTime) {\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n var percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n if (percent < 0) {\n percent = 0;\n }\n percent = Math.min(percent, 1);\n var easing = this.easing;\n var easingFunc = typeof easing === 'string'\n ? easingFuncs[easing] : easing;\n var schedule = typeof easingFunc === 'function'\n ? easingFunc(percent)\n : percent;\n this.onframe && this.onframe(schedule);\n if (percent === 1) {\n if (this.loop) {\n this._restart(globalTime);\n this.onrestart && this.onrestart();\n }\n else {\n return true;\n }\n }\n return false;\n };\n Clip.prototype._restart = function (globalTime) {\n var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n };\n Clip.prototype.pause = function () {\n this._paused = true;\n };\n Clip.prototype.resume = function () {\n this._paused = false;\n };\n return Clip;\n}());\nexport default Clip;\n","import Clip from './Clip';\nimport * as color from '../tool/color';\nimport { isArrayLike, keys, logError } from '../core/util';\nvar arraySlice = Array.prototype.slice;\nexport function interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\nexport function step(p0, p1, percent) {\n return percent > 0.5 ? p1 : p0;\n}\nexport function interpolate1DArray(out, p0, p1, percent) {\n var len = p0.length;\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n}\nexport function interpolate2DArray(out, p0, p1, percent) {\n var len = p0.length;\n var len2 = len && p0[0].length;\n for (var i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n}\nfunction add1DArray(out, p0, p1, sign) {\n var len = p0.length;\n for (var i = 0; i < len; i++) {\n out[i] = p0[i] + p1[i] * sign;\n }\n return out;\n}\nfunction add2DArray(out, p0, p1, sign) {\n var len = p0.length;\n var len2 = len && p0[0].length;\n for (var i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (var j = 0; j < len2; j++) {\n out[i][j] = p0[i][j] + p1[i][j] * sign;\n }\n }\n return out;\n}\nfunction fillArray(val0, val1, arrDim) {\n var arr0 = val0;\n var arr1 = val1;\n if (!arr0.push || !arr1.push) {\n return;\n }\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n if (arr0Len !== arr1Len) {\n var isPreviousLarger = arr0Len > arr1Len;\n if (isPreviousLarger) {\n arr0.length = arr1Len;\n }\n else {\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n }\n var len2 = arr0[0] && arr0[0].length;\n for (var i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i])) {\n arr0[i] = arr1[i];\n }\n }\n else {\n for (var j = 0; j < len2; j++) {\n if (isNaN(arr0[i][j])) {\n arr0[i][j] = arr1[i][j];\n }\n }\n }\n }\n}\nfunction is1DArraySame(arr0, arr1) {\n var len = arr0.length;\n if (len !== arr1.length) {\n return false;\n }\n for (var i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n return true;\n}\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\nfunction catmullRomInterpolate1DArray(out, p0, p1, p2, p3, t, t2, t3) {\n var len = p0.length;\n for (var i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);\n }\n}\nfunction catmullRomInterpolate2DArray(out, p0, p1, p2, p3, t, t2, t3) {\n var len = p0.length;\n var len2 = p0[0].length;\n for (var i = 0; i < len; i++) {\n if (!out[i]) {\n out[1] = [];\n }\n for (var j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);\n }\n }\n}\nexport function cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n if (isArrayLike(value[0])) {\n var ret = [];\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n return ret;\n }\n return arraySlice.call(value);\n }\n return value;\n}\nfunction rgba2String(rgba) {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n return 'rgba(' + rgba.join(',') + ')';\n}\nfunction guessArrayDim(value) {\n return isArrayLike(value && value[0]) ? 2 : 1;\n}\nvar tmpRgba = [0, 0, 0, 0];\nvar Track = (function () {\n function Track(propName) {\n this.keyframes = [];\n this.maxTime = 0;\n this.arrDim = 0;\n this.interpolable = true;\n this._needsSort = false;\n this._isAllValueEqual = true;\n this._lastFrame = 0;\n this._lastFramePercent = 0;\n this.propName = propName;\n }\n Track.prototype.isFinished = function () {\n return this._finished;\n };\n Track.prototype.setFinished = function () {\n this._finished = true;\n if (this._additiveTrack) {\n this._additiveTrack.setFinished();\n }\n };\n Track.prototype.needsAnimate = function () {\n return !this._isAllValueEqual\n && this.keyframes.length >= 2\n && this.interpolable\n && this.maxTime > 0;\n };\n Track.prototype.getAdditiveTrack = function () {\n return this._additiveTrack;\n };\n Track.prototype.addKeyframe = function (time, value) {\n if (time >= this.maxTime) {\n this.maxTime = time;\n }\n else {\n this._needsSort = true;\n }\n var keyframes = this.keyframes;\n var len = keyframes.length;\n if (this.interpolable) {\n if (isArrayLike(value)) {\n var arrayDim = guessArrayDim(value);\n if (len > 0 && this.arrDim !== arrayDim) {\n this.interpolable = false;\n return;\n }\n if (arrayDim === 1 && typeof value[0] !== 'number'\n || arrayDim === 2 && typeof value[0][0] !== 'number') {\n this.interpolable = false;\n return;\n }\n if (len > 0) {\n var lastFrame = keyframes[len - 1];\n if (this._isAllValueEqual) {\n if (arrayDim === 1) {\n if (!is1DArraySame(value, lastFrame.value)) {\n this._isAllValueEqual = false;\n }\n }\n else {\n this._isAllValueEqual = false;\n }\n }\n }\n this.arrDim = arrayDim;\n }\n else {\n if (this.arrDim > 0) {\n this.interpolable = false;\n return;\n }\n if (typeof value === 'string') {\n var colorArray = color.parse(value);\n if (colorArray) {\n value = colorArray;\n this.isValueColor = true;\n }\n else {\n this.interpolable = false;\n }\n }\n else if (typeof value !== 'number' || isNaN(value)) {\n this.interpolable = false;\n return;\n }\n if (this._isAllValueEqual && len > 0) {\n var lastFrame = keyframes[len - 1];\n if (this.isValueColor && !is1DArraySame(lastFrame.value, value)) {\n this._isAllValueEqual = false;\n }\n else if (lastFrame.value !== value) {\n this._isAllValueEqual = false;\n }\n }\n }\n }\n var kf = {\n time: time,\n value: value,\n percent: 0\n };\n this.keyframes.push(kf);\n return kf;\n };\n Track.prototype.prepare = function (additiveTrack) {\n var kfs = this.keyframes;\n if (this._needsSort) {\n kfs.sort(function (a, b) {\n return a.time - b.time;\n });\n }\n var arrDim = this.arrDim;\n var kfsLen = kfs.length;\n var lastKf = kfs[kfsLen - 1];\n for (var i = 0; i < kfsLen; i++) {\n kfs[i].percent = kfs[i].time / this.maxTime;\n if (arrDim > 0 && i !== kfsLen - 1) {\n fillArray(kfs[i].value, lastKf.value, arrDim);\n }\n }\n if (additiveTrack\n && this.needsAnimate()\n && additiveTrack.needsAnimate()\n && arrDim === additiveTrack.arrDim\n && this.isValueColor === additiveTrack.isValueColor\n && !additiveTrack._finished) {\n this._additiveTrack = additiveTrack;\n var startValue = kfs[0].value;\n for (var i = 0; i < kfsLen; i++) {\n if (arrDim === 0) {\n if (this.isValueColor) {\n kfs[i].additiveValue =\n add1DArray([], kfs[i].value, startValue, -1);\n }\n else {\n kfs[i].additiveValue = kfs[i].value - startValue;\n }\n }\n else if (arrDim === 1) {\n kfs[i].additiveValue = add1DArray([], kfs[i].value, startValue, -1);\n }\n else if (arrDim === 2) {\n kfs[i].additiveValue = add2DArray([], kfs[i].value, startValue, -1);\n }\n }\n }\n };\n Track.prototype.step = function (target, percent) {\n if (this._finished) {\n return;\n }\n if (this._additiveTrack && this._additiveTrack._finished) {\n this._additiveTrack = null;\n }\n var isAdditive = this._additiveTrack != null;\n var valueKey = isAdditive ? 'additiveValue' : 'value';\n var keyframes = this.keyframes;\n var kfsNum = this.keyframes.length;\n var propName = this.propName;\n var arrDim = this.arrDim;\n var isValueColor = this.isValueColor;\n var frameIdx;\n if (percent < 0) {\n frameIdx = 0;\n }\n else if (percent < this._lastFramePercent) {\n var start = Math.min(this._lastFrame + 1, kfsNum - 1);\n for (frameIdx = start; frameIdx >= 0; frameIdx--) {\n if (keyframes[frameIdx].percent <= percent) {\n break;\n }\n }\n frameIdx = Math.min(frameIdx, kfsNum - 2);\n }\n else {\n for (frameIdx = this._lastFrame; frameIdx < kfsNum; frameIdx++) {\n if (keyframes[frameIdx].percent > percent) {\n break;\n }\n }\n frameIdx = Math.min(frameIdx - 1, kfsNum - 2);\n }\n var nextFrame = keyframes[frameIdx + 1];\n var frame = keyframes[frameIdx];\n if (!(frame && nextFrame)) {\n return;\n }\n this._lastFrame = frameIdx;\n this._lastFramePercent = percent;\n var range = (nextFrame.percent - frame.percent);\n if (range === 0) {\n return;\n }\n var w = (percent - frame.percent) / range;\n var targetArr = isAdditive ? this._additiveValue\n : (isValueColor ? tmpRgba : target[propName]);\n if ((arrDim > 0 || isValueColor) && !targetArr) {\n targetArr = this._additiveValue = [];\n }\n if (this.useSpline) {\n var p1 = keyframes[frameIdx][valueKey];\n var p0 = keyframes[frameIdx === 0 ? frameIdx : frameIdx - 1][valueKey];\n var p2 = keyframes[frameIdx > kfsNum - 2 ? kfsNum - 1 : frameIdx + 1][valueKey];\n var p3 = keyframes[frameIdx > kfsNum - 3 ? kfsNum - 1 : frameIdx + 2][valueKey];\n if (arrDim > 0) {\n arrDim === 1\n ? catmullRomInterpolate1DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w)\n : catmullRomInterpolate2DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w);\n }\n else if (isValueColor) {\n catmullRomInterpolate1DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w);\n if (!isAdditive) {\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n var value = void 0;\n if (!this.interpolable) {\n value = p2;\n }\n else {\n value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n else {\n if (arrDim > 0) {\n arrDim === 1\n ? interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w)\n : interpolate2DArray(targetArr, frame[valueKey], nextFrame[valueKey], w);\n }\n else if (isValueColor) {\n interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w);\n if (!isAdditive) {\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n var value = void 0;\n if (!this.interpolable) {\n value = step(frame[valueKey], nextFrame[valueKey], w);\n }\n else {\n value = interpolateNumber(frame[valueKey], nextFrame[valueKey], w);\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n if (isAdditive) {\n this._addToTarget(target);\n }\n };\n Track.prototype._addToTarget = function (target) {\n var arrDim = this.arrDim;\n var propName = this.propName;\n var additiveValue = this._additiveValue;\n if (arrDim === 0) {\n if (this.isValueColor) {\n color.parse(target[propName], tmpRgba);\n add1DArray(tmpRgba, tmpRgba, additiveValue, 1);\n target[propName] = rgba2String(tmpRgba);\n }\n else {\n target[propName] = target[propName] + additiveValue;\n }\n }\n else if (arrDim === 1) {\n add1DArray(target[propName], target[propName], additiveValue, 1);\n }\n else if (arrDim === 2) {\n add2DArray(target[propName], target[propName], additiveValue, 1);\n }\n };\n return Track;\n}());\nvar Animator = (function () {\n function Animator(target, loop, additiveTo) {\n this._tracks = {};\n this._trackKeys = [];\n this._delay = 0;\n this._maxTime = 0;\n this._paused = false;\n this._started = 0;\n this._clip = null;\n this._target = target;\n this._loop = loop;\n if (loop && additiveTo) {\n logError('Can\\' use additive animation on looped animation.');\n return;\n }\n this._additiveAnimators = additiveTo;\n }\n Animator.prototype.getTarget = function () {\n return this._target;\n };\n Animator.prototype.changeTarget = function (target) {\n this._target = target;\n };\n Animator.prototype.when = function (time, props) {\n return this.whenWithKeys(time, props, keys(props));\n };\n Animator.prototype.whenWithKeys = function (time, props, propNames) {\n var tracks = this._tracks;\n for (var i = 0; i < propNames.length; i++) {\n var propName = propNames[i];\n var track = tracks[propName];\n if (!track) {\n track = tracks[propName] = new Track(propName);\n var initialValue = void 0;\n var additiveTrack = this._getAdditiveTrack(propName);\n if (additiveTrack) {\n var lastFinalKf = additiveTrack.keyframes[additiveTrack.keyframes.length - 1];\n initialValue = lastFinalKf && lastFinalKf.value;\n if (additiveTrack.isValueColor && initialValue) {\n initialValue = rgba2String(initialValue);\n }\n }\n else {\n initialValue = this._target[propName];\n }\n if (initialValue == null) {\n continue;\n }\n if (time !== 0) {\n track.addKeyframe(0, cloneValue(initialValue));\n }\n this._trackKeys.push(propName);\n }\n track.addKeyframe(time, cloneValue(props[propName]));\n }\n this._maxTime = Math.max(this._maxTime, time);\n return this;\n };\n Animator.prototype.pause = function () {\n this._clip.pause();\n this._paused = true;\n };\n Animator.prototype.resume = function () {\n this._clip.resume();\n this._paused = false;\n };\n Animator.prototype.isPaused = function () {\n return !!this._paused;\n };\n Animator.prototype._doneCallback = function () {\n this._setTracksFinished();\n this._clip = null;\n var doneList = this._doneCbs;\n if (doneList) {\n var len = doneList.length;\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n }\n };\n Animator.prototype._abortedCallback = function () {\n this._setTracksFinished();\n var animation = this.animation;\n var abortedList = this._abortedCbs;\n if (animation) {\n animation.removeClip(this._clip);\n }\n this._clip = null;\n if (abortedList) {\n for (var i = 0; i < abortedList.length; i++) {\n abortedList[i].call(this);\n }\n }\n };\n Animator.prototype._setTracksFinished = function () {\n var tracks = this._tracks;\n var tracksKeys = this._trackKeys;\n for (var i = 0; i < tracksKeys.length; i++) {\n tracks[tracksKeys[i]].setFinished();\n }\n };\n Animator.prototype._getAdditiveTrack = function (trackName) {\n var additiveTrack;\n var additiveAnimators = this._additiveAnimators;\n if (additiveAnimators) {\n for (var i = 0; i < additiveAnimators.length; i++) {\n var track = additiveAnimators[i].getTrack(trackName);\n if (track) {\n additiveTrack = track;\n }\n }\n }\n return additiveTrack;\n };\n Animator.prototype.start = function (easing, forceAnimate) {\n if (this._started > 0) {\n return;\n }\n this._started = 1;\n var self = this;\n var tracks = [];\n for (var i = 0; i < this._trackKeys.length; i++) {\n var propName = this._trackKeys[i];\n var track = this._tracks[propName];\n var additiveTrack = this._getAdditiveTrack(propName);\n var kfs = track.keyframes;\n track.prepare(additiveTrack);\n if (track.needsAnimate()) {\n tracks.push(track);\n }\n else if (!track.interpolable) {\n var lastKf = kfs[kfs.length - 1];\n if (lastKf) {\n self._target[track.propName] = lastKf.value;\n }\n }\n }\n if (tracks.length || forceAnimate) {\n var clip = new Clip({\n life: this._maxTime,\n loop: this._loop,\n delay: this._delay,\n onframe: function (percent) {\n self._started = 2;\n var additiveAnimators = self._additiveAnimators;\n if (additiveAnimators) {\n var stillHasAdditiveAnimator = false;\n for (var i = 0; i < additiveAnimators.length; i++) {\n if (additiveAnimators[i]._clip) {\n stillHasAdditiveAnimator = true;\n break;\n }\n }\n if (!stillHasAdditiveAnimator) {\n self._additiveAnimators = null;\n }\n }\n for (var i = 0; i < tracks.length; i++) {\n tracks[i].step(self._target, percent);\n }\n var onframeList = self._onframeCbs;\n if (onframeList) {\n for (var i = 0; i < onframeList.length; i++) {\n onframeList[i](self._target, percent);\n }\n }\n },\n ondestroy: function () {\n self._doneCallback();\n }\n });\n this._clip = clip;\n if (this.animation) {\n this.animation.addClip(clip);\n }\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n }\n else {\n this._doneCallback();\n }\n return this;\n };\n Animator.prototype.stop = function (forwardToLast) {\n if (!this._clip) {\n return;\n }\n var clip = this._clip;\n if (forwardToLast) {\n clip.onframe(1);\n }\n this._abortedCallback();\n };\n Animator.prototype.delay = function (time) {\n this._delay = time;\n return this;\n };\n Animator.prototype.during = function (cb) {\n if (cb) {\n if (!this._onframeCbs) {\n this._onframeCbs = [];\n }\n this._onframeCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.done = function (cb) {\n if (cb) {\n if (!this._doneCbs) {\n this._doneCbs = [];\n }\n this._doneCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.aborted = function (cb) {\n if (cb) {\n if (!this._abortedCbs) {\n this._abortedCbs = [];\n }\n this._abortedCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.getClip = function () {\n return this._clip;\n };\n Animator.prototype.getTrack = function (propName) {\n return this._tracks[propName];\n };\n Animator.prototype.stopTracks = function (propNames, forwardToLast) {\n if (!propNames.length || !this._clip) {\n return true;\n }\n var tracks = this._tracks;\n var tracksKeys = this._trackKeys;\n for (var i = 0; i < propNames.length; i++) {\n var track = tracks[propNames[i]];\n if (track) {\n if (forwardToLast) {\n track.step(this._target, 1);\n }\n else if (this._started === 1) {\n track.step(this._target, 0);\n }\n track.setFinished();\n }\n }\n var allAborted = true;\n for (var i = 0; i < tracksKeys.length; i++) {\n if (!tracks[tracksKeys[i]].isFinished()) {\n allAborted = false;\n break;\n }\n }\n if (allAborted) {\n this._abortedCallback();\n }\n return allAborted;\n };\n Animator.prototype.saveFinalToTarget = function (target, trackKeys) {\n if (!target) {\n return;\n }\n trackKeys = trackKeys || this._trackKeys;\n for (var i = 0; i < trackKeys.length; i++) {\n var propName = trackKeys[i];\n var track = this._tracks[propName];\n if (!track || track.isFinished()) {\n continue;\n }\n var kfs = track.keyframes;\n var lastKf = kfs[kfs.length - 1];\n if (lastKf) {\n var val = cloneValue(lastKf.value);\n if (track.isValueColor) {\n val = rgba2String(val);\n }\n target[propName] = val;\n }\n }\n };\n Animator.prototype.__changeFinalValue = function (finalProps, trackKeys) {\n trackKeys = trackKeys || keys(finalProps);\n for (var i = 0; i < trackKeys.length; i++) {\n var propName = trackKeys[i];\n var track = this._tracks[propName];\n if (!track) {\n continue;\n }\n var kfs = track.keyframes;\n if (kfs.length > 1) {\n var lastKf = kfs.pop();\n track.addKeyframe(lastKf.time, finalProps[propName]);\n track.prepare(track.getAdditiveTrack());\n }\n }\n };\n return Animator;\n}());\nexport default Animator;\n","export default function windingLine(x0, y0, x1, y1, x, y) {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n if (y1 === y0) {\n return 0;\n }\n var t = (y - y0) / (y1 - y0);\n var dir = y1 < y0 ? 1 : -1;\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n var x_ = t * (x1 - x0) + x0;\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n","var Entry = (function () {\n function Entry(val) {\n this.value = val;\n }\n return Entry;\n}());\nexport { Entry };\nvar LinkedList = (function () {\n function LinkedList() {\n this._len = 0;\n }\n LinkedList.prototype.insert = function (val) {\n var entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n };\n LinkedList.prototype.insertEntry = function (entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n }\n else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n this._len++;\n };\n LinkedList.prototype.remove = function (entry) {\n var prev = entry.prev;\n var next = entry.next;\n if (prev) {\n prev.next = next;\n }\n else {\n this.head = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n this.tail = prev;\n }\n entry.next = entry.prev = null;\n this._len--;\n };\n LinkedList.prototype.len = function () {\n return this._len;\n };\n LinkedList.prototype.clear = function () {\n this.head = this.tail = null;\n this._len = 0;\n };\n return LinkedList;\n}());\nexport { LinkedList };\nvar LRU = (function () {\n function LRU(maxSize) {\n this._list = new LinkedList();\n this._maxSize = 10;\n this._map = {};\n this._maxSize = maxSize;\n }\n LRU.prototype.put = function (key, value) {\n var list = this._list;\n var map = this._map;\n var removed = null;\n if (map[key] == null) {\n var len = list.len();\n var entry = this._lastRemovedEntry;\n if (len >= this._maxSize && len > 0) {\n var leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n if (entry) {\n entry.value = value;\n }\n else {\n entry = new Entry(value);\n }\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n return removed;\n };\n LRU.prototype.get = function (key) {\n var entry = this._map[key];\n var list = this._list;\n if (entry != null) {\n if (entry !== list.tail) {\n list.remove(entry);\n list.insertEntry(entry);\n }\n return entry.value;\n }\n };\n LRU.prototype.clear = function () {\n this._list.clear();\n this._map = {};\n };\n LRU.prototype.len = function () {\n return this._list.len();\n };\n return LRU;\n}());\nexport default LRU;\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport * as polyHelper from '../helper/poly';\nvar PolygonShape = (function () {\n function PolygonShape() {\n this.points = null;\n this.smooth = 0;\n this.smoothConstraint = null;\n }\n return PolygonShape;\n}());\nexport { PolygonShape };\nvar Polygon = (function (_super) {\n __extends(Polygon, _super);\n function Polygon(opts) {\n return _super.call(this, opts) || this;\n }\n Polygon.prototype.getDefaultShape = function () {\n return new PolygonShape();\n };\n Polygon.prototype.buildPath = function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, true);\n };\n return Polygon;\n}(Path));\n;\nPolygon.prototype.type = 'polygon';\nexport default Polygon;\n","import LRU from '../../core/LRU';\nvar globalImageCache = new LRU(50);\nexport function findExistImage(newImageOrSrc) {\n if (typeof newImageOrSrc === 'string') {\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n }\n else {\n return newImageOrSrc;\n }\n}\nexport function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) {\n if (!newImageOrSrc) {\n return image;\n }\n else if (typeof newImageOrSrc === 'string') {\n if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) {\n return image;\n }\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n var pendingWrap = { hostEl: hostEl, cb: onload, cbPayload: cbPayload };\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n }\n else {\n image = new Image();\n image.onload = image.onerror = imageOnLoad;\n globalImageCache.put(newImageOrSrc, image.__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n });\n image.src = image.__zrImageSrc = newImageOrSrc;\n }\n return image;\n }\n else {\n return newImageOrSrc;\n }\n}\nfunction imageOnLoad() {\n var cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n for (var i = 0; i < cachedImgObj.pending.length; i++) {\n var pendingWrap = cachedImgObj.pending[i];\n var cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n cachedImgObj.pending.length = 0;\n}\nexport function isImageReady(image) {\n return image && image.width && image.height;\n}\n","export function containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n var _a = 0;\n var _b = x0;\n if ((y > y0 + _l && y > y1 + _l)\n || (y < y0 - _l && y < y1 - _l)\n || (x > x0 + _l && x > x1 + _l)\n || (x < x0 - _l && x < x1 - _l)) {\n return false;\n }\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n }\n else {\n return Math.abs(x - x0) <= _l / 2;\n }\n var tmp = _a * x - y + _b;\n var _s = tmp * tmp / (_a * _a + 1);\n return _s <= _l / 2 * _l / 2;\n}\n","var PI2 = Math.PI * 2;\nexport function normalizeRadian(angle) {\n angle %= PI2;\n if (angle < 0) {\n angle += PI2;\n }\n return angle;\n}\n","import windingLine from './windingLine';\nvar EPSILON = 1e-8;\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\nexport function contain(points, x, y) {\n var w = 0;\n var p = points[0];\n if (!p) {\n return false;\n }\n for (var i = 1; i < points.length; i++) {\n var p2 = points[i];\n w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n p = p2;\n }\n var p0 = points[0];\n if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n }\n return w !== 0;\n}\n","import { __extends } from \"tslib\";\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nvar m = [];\nvar IncrementalDisplayable = (function (_super) {\n __extends(IncrementalDisplayable, _super);\n function IncrementalDisplayable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.notClear = true;\n _this.incremental = true;\n _this._displayables = [];\n _this._temporaryDisplayables = [];\n _this._cursor = 0;\n return _this;\n }\n IncrementalDisplayable.prototype.traverse = function (cb, context) {\n cb.call(context, this);\n };\n IncrementalDisplayable.prototype.useStyle = function () {\n this.style = {};\n };\n IncrementalDisplayable.prototype.getCursor = function () {\n return this._cursor;\n };\n IncrementalDisplayable.prototype.innerAfterBrush = function () {\n this._cursor = this._displayables.length;\n };\n IncrementalDisplayable.prototype.clearDisplaybles = function () {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.markRedraw();\n this.notClear = false;\n };\n IncrementalDisplayable.prototype.clearTemporalDisplayables = function () {\n this._temporaryDisplayables = [];\n };\n IncrementalDisplayable.prototype.addDisplayable = function (displayable, notPersistent) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.markRedraw();\n };\n IncrementalDisplayable.prototype.addDisplayables = function (displayables, notPersistent) {\n notPersistent = notPersistent || false;\n for (var i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n };\n IncrementalDisplayable.prototype.getDisplayables = function () {\n return this._displayables;\n };\n IncrementalDisplayable.prototype.getTemporalDisplayables = function () {\n return this._temporaryDisplayables;\n };\n IncrementalDisplayable.prototype.eachPendingDisplayable = function (cb) {\n for (var i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n };\n IncrementalDisplayable.prototype.update = function () {\n this.updateTransform();\n for (var i = this._cursor; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n var displayable = this._temporaryDisplayables[i];\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n };\n IncrementalDisplayable.prototype.getBoundingRect = function () {\n if (!this._rect) {\n var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n var childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n };\n IncrementalDisplayable.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n if (rect.contain(localPos[0], localPos[1])) {\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n };\n return IncrementalDisplayable;\n}(Displayble));\nexport default IncrementalDisplayable;\n","var round = Math.round;\nexport function subPixelOptimizeLine(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n var x1 = inputShape.x1;\n var x2 = inputShape.x2;\n var y1 = inputShape.y1;\n var y2 = inputShape.y2;\n outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n var lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape;\n }\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n }\n return outputShape;\n}\nexport function subPixelOptimizeRect(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n var originX = inputShape.x;\n var originY = inputShape.y;\n var originWidth = inputShape.width;\n var originHeight = inputShape.height;\n outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n var lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape;\n }\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1);\n outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1);\n return outputShape;\n}\nexport function subPixelOptimize(position, lineWidth, positiveOrNegative) {\n if (!lineWidth) {\n return position;\n }\n var doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0\n ? doubledPosition / 2\n : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport { subPixelOptimizeLine } from '../helper/subPixelOptimize';\nvar subPixelOptimizeOutputShape = {};\nvar LineShape = (function () {\n function LineShape() {\n this.x1 = 0;\n this.y1 = 0;\n this.x2 = 0;\n this.y2 = 0;\n this.percent = 1;\n }\n return LineShape;\n}());\nexport { LineShape };\nvar Line = (function (_super) {\n __extends(Line, _super);\n function Line(opts) {\n return _super.call(this, opts) || this;\n }\n Line.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Line.prototype.getDefaultShape = function () {\n return new LineShape();\n };\n Line.prototype.buildPath = function (ctx, shape) {\n var x1;\n var y1;\n var x2;\n var y2;\n if (this.subPixelOptimize) {\n var optimizedShape = subPixelOptimizeLine(subPixelOptimizeOutputShape, shape, this.style);\n x1 = optimizedShape.x1;\n y1 = optimizedShape.y1;\n x2 = optimizedShape.x2;\n y2 = optimizedShape.y2;\n }\n else {\n x1 = shape.x1;\n y1 = shape.y1;\n x2 = shape.x2;\n y2 = shape.y2;\n }\n var percent = shape.percent;\n if (percent === 0) {\n return;\n }\n ctx.moveTo(x1, y1);\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n ctx.lineTo(x2, y2);\n };\n Line.prototype.pointAt = function (p) {\n var shape = this.shape;\n return [\n shape.x1 * (1 - p) + shape.x2 * p,\n shape.y1 * (1 - p) + shape.y2 * p\n ];\n };\n return Line;\n}(Path));\nLine.prototype.type = 'line';\nexport default Line;\n","export function createLinearGradient(ctx, obj, rect) {\n var x = obj.x == null ? 0 : obj.x;\n var x2 = obj.x2 == null ? 1 : obj.x2;\n var y = obj.y == null ? 0 : obj.y;\n var y2 = obj.y2 == null ? 0 : obj.y2;\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n x = isNaN(x) ? 0 : x;\n x2 = isNaN(x2) ? 1 : x2;\n y = isNaN(y) ? 0 : y;\n y2 = isNaN(y2) ? 0 : y2;\n var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n return canvasGradient;\n}\nexport function createRadialGradient(ctx, obj, rect) {\n var width = rect.width;\n var height = rect.height;\n var min = Math.min(width, height);\n var x = obj.x == null ? 0.5 : obj.x;\n var y = obj.y == null ? 0.5 : obj.y;\n var r = obj.r == null ? 0.5 : obj.r;\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n return canvasGradient;\n}\nexport function getCanvasGradient(ctx, obj, rect) {\n var canvasGradient = obj.type === 'radial'\n ? createRadialGradient(ctx, obj, rect)\n : createLinearGradient(ctx, obj, rect);\n var colorStops = obj.colorStops;\n for (var i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color);\n }\n return canvasGradient;\n}\nexport function isClipPathChanged(clipPaths, prevClipPaths) {\n if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\n return false;\n }\n if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n return true;\n }\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n return false;\n}\n","var Param = (function () {\n function Param(target, e) {\n this.target = target;\n this.topTarget = e && e.topTarget;\n }\n return Param;\n}());\nvar Draggable = (function () {\n function Draggable(handler) {\n this.handler = handler;\n handler.on('mousedown', this._dragStart, this);\n handler.on('mousemove', this._drag, this);\n handler.on('mouseup', this._dragEnd, this);\n }\n Draggable.prototype._dragStart = function (e) {\n var draggingTarget = e.target;\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent;\n }\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragstart', e.event);\n }\n };\n Draggable.prototype._drag = function (e) {\n var draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n var x = e.offsetX;\n var y = e.offsetY;\n var dx = x - this._x;\n var dy = y - this._y;\n this._x = x;\n this._y = y;\n draggingTarget.drift(dx, dy, e);\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'drag', e.event);\n var dropTarget = this.handler.findHover(x, y, draggingTarget).target;\n var lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(new Param(lastDropTarget, e), 'dragleave', e.event);\n }\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(new Param(dropTarget, e), 'dragenter', e.event);\n }\n }\n }\n };\n Draggable.prototype._dragEnd = function (e) {\n var draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event);\n if (this._dropTarget) {\n this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event);\n }\n this._draggingTarget = null;\n this._dropTarget = null;\n };\n return Draggable;\n}());\nexport default Draggable;\n","import * as eventUtil from './event';\nvar GestureMgr = (function () {\n function GestureMgr() {\n this._track = [];\n }\n GestureMgr.prototype.recognize = function (event, target, root) {\n this._doTrack(event, target, root);\n return this._recognize(event);\n };\n GestureMgr.prototype.clear = function () {\n this._track.length = 0;\n return this;\n };\n GestureMgr.prototype._doTrack = function (event, target, root) {\n var touches = event.touches;\n if (!touches) {\n return;\n }\n var trackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n for (var i = 0, len = touches.length; i < len; i++) {\n var touch = touches[i];\n var pos = eventUtil.clientToLocal(root, touch, {});\n trackItem.points.push([pos.zrX, pos.zrY]);\n trackItem.touches.push(touch);\n }\n this._track.push(trackItem);\n };\n GestureMgr.prototype._recognize = function (event) {\n for (var eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n var gestureInfo = recognizers[eventName](this._track, event);\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n };\n return GestureMgr;\n}());\nexport { GestureMgr };\nfunction dist(pointPair) {\n var dx = pointPair[1][0] - pointPair[0][0];\n var dy = pointPair[1][1] - pointPair[0][1];\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction center(pointPair) {\n return [\n (pointPair[0][0] + pointPair[1][0]) / 2,\n (pointPair[0][1] + pointPair[1][1]) / 2\n ];\n}\nvar recognizers = {\n pinch: function (tracks, event) {\n var trackLen = tracks.length;\n if (!trackLen) {\n return;\n }\n var pinchEnd = (tracks[trackLen - 1] || {}).points;\n var pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd;\n if (pinchPre\n && pinchPre.length > 1\n && pinchEnd\n && pinchEnd.length > 1) {\n var pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n event.pinchScale = pinchScale;\n var pinchCenter = center(pinchEnd);\n event.pinchX = pinchCenter[0];\n event.pinchY = pinchCenter[1];\n return {\n type: 'pinch',\n target: tracks[0].target,\n event: event\n };\n }\n }\n};\n","import { __extends } from \"tslib\";\nimport * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './core/Eventful';\nimport * as eventTool from './core/event';\nimport { GestureMgr } from './core/GestureMgr';\nvar SILENT = 'silent';\nfunction makeEventPacket(eveType, targetInfo, event) {\n return {\n type: eveType,\n event: event,\n target: targetInfo.target,\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: event.gestureEvent,\n pinchX: event.pinchX,\n pinchY: event.pinchY,\n pinchScale: event.pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\nfunction stopEvent() {\n eventTool.stop(this.event);\n}\nvar EmptyProxy = (function (_super) {\n __extends(EmptyProxy, _super);\n function EmptyProxy() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handler = null;\n return _this;\n }\n EmptyProxy.prototype.dispose = function () { };\n EmptyProxy.prototype.setCursor = function () { };\n return EmptyProxy;\n}(Eventful));\nvar HoveredResult = (function () {\n function HoveredResult(x, y) {\n this.x = x;\n this.y = y;\n }\n return HoveredResult;\n}());\nvar handlerNames = [\n 'click', 'dblclick', 'mousewheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\nvar Handler = (function (_super) {\n __extends(Handler, _super);\n function Handler(storage, painter, proxy, painterRoot) {\n var _this = _super.call(this) || this;\n _this._hovered = new HoveredResult(0, 0);\n _this.storage = storage;\n _this.painter = painter;\n _this.painterRoot = painterRoot;\n proxy = proxy || new EmptyProxy();\n _this.proxy = null;\n _this.setHandlerProxy(proxy);\n _this._draggingMgr = new Draggable(_this);\n return _this;\n }\n Handler.prototype.setHandlerProxy = function (proxy) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name], this);\n }, this);\n proxy.handler = this;\n }\n this.proxy = proxy;\n };\n Handler.prototype.mousemove = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target;\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n var hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n }\n this.dispatchToElement(hovered, 'mousemove', event);\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n };\n Handler.prototype.mouseout = function (event) {\n var eventControl = event.zrEventControl;\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n if (eventControl !== 'no_globalout') {\n this.trigger('globalout', { type: 'globalout', event: event });\n }\n };\n Handler.prototype.resize = function () {\n this._hovered = new HoveredResult(0, 0);\n };\n Handler.prototype.dispatch = function (eventName, eventArgs) {\n var handler = this[eventName];\n handler && handler.call(this, eventArgs);\n };\n Handler.prototype.dispose = function () {\n this.proxy.dispose();\n this.storage = null;\n this.proxy = null;\n this.painter = null;\n };\n Handler.prototype.setCursorStyle = function (cursorStyle) {\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n };\n Handler.prototype.dispatchToElement = function (targetInfo, eventName, event) {\n targetInfo = targetInfo || {};\n var el = targetInfo.target;\n if (el && el.silent) {\n return;\n }\n var eventKey = ('on' + eventName);\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n while (el) {\n el[eventKey]\n && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\n el = el.__hostTarget ? el.__hostTarget : el.parent;\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n if (!eventPacket.cancelBubble) {\n this.trigger(eventName, eventPacket);\n if (this.painter && this.painter.eachOtherLayer) {\n this.painter.eachOtherLayer(function (layer) {\n if (typeof (layer[eventKey]) === 'function') {\n layer[eventKey].call(layer, eventPacket);\n }\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n }\n };\n Handler.prototype.findHover = function (x, y, exclude) {\n var list = this.storage.getDisplayList();\n var out = new HoveredResult(x, y);\n for (var i = list.length - 1; i >= 0; i--) {\n var hoverCheckResult = void 0;\n if (list[i] !== exclude\n && !list[i].ignore\n && (hoverCheckResult = isHover(list[i], x, y))) {\n !out.topTarget && (out.topTarget = list[i]);\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n return out;\n };\n Handler.prototype.processGesture = function (event, stage) {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n var gestureMgr = this._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom);\n stage === 'end' && gestureMgr.clear();\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n var res = new HoveredResult();\n res.target = gestureInfo.target;\n this.dispatchToElement(res, type, gestureInfo.event);\n }\n };\n return Handler;\n}(Eventful));\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var hovered;\n var hoveredTarget;\n if (name !== 'mouseup' || !isOutside) {\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY];\n this._upEl = hoveredTarget;\n }\n else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n }\n else if (name === 'click') {\n if (this._downEl !== this._upEl\n || !this._downPoint\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\n this._downPoint = null;\n }\n this.dispatchToElement(hovered, name, event);\n };\n});\nfunction isHover(displayable, x, y) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n var el = displayable;\n var isSilent = void 0;\n var ignoreClip = false;\n while (el) {\n if (el.ignoreClip) {\n ignoreClip = true;\n }\n if (!ignoreClip) {\n var clipPath = el.getClipPath();\n if (clipPath && !clipPath.contain(x, y)) {\n return false;\n }\n if (el.silent) {\n isSilent = true;\n }\n }\n var hostEl = el.__hostTarget;\n el = hostEl ? hostEl : el.parent;\n }\n return isSilent ? SILENT : true;\n }\n return false;\n}\nfunction isOutsideBoundary(handlerInstance, x, y) {\n var painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\nexport default Handler;\n","import * as util from './core/util';\nimport env from './core/env';\nimport timsort from './core/timsort';\nimport { REDARAW_BIT } from './graphic/constants';\nvar invalidZErrorLogged = false;\nfunction logInvalidZError() {\n if (invalidZErrorLogged) {\n return;\n }\n invalidZErrorLogged = true;\n console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors');\n}\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n return a.z2 - b.z2;\n }\n return a.z - b.z;\n }\n return a.zlevel - b.zlevel;\n}\nvar Storage = (function () {\n function Storage() {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n this.displayableSortFunc = shapeCompareFunc;\n }\n Storage.prototype.traverse = function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n };\n Storage.prototype.getDisplayList = function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n var displayList = this._displayList;\n if (update || !displayList.length) {\n this.updateDisplayList(includeIgnore);\n }\n return displayList;\n };\n Storage.prototype.updateDisplayList = function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n displayList.length = this._displayListLen;\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n };\n Storage.prototype._updateAndAddDisplayable = function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n el.beforeUpdate();\n el.update();\n el.afterUpdate();\n var userSetClipPath = el.getClipPath();\n if (el.ignoreClip) {\n clipPaths = null;\n }\n else if (userSetClipPath) {\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n }\n else {\n clipPaths = [];\n }\n var currentClipPath = userSetClipPath;\n var parentClipPath = el;\n while (currentClipPath) {\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.getClipPath();\n }\n }\n if (el.childrenRef) {\n var children = el.childrenRef();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (el.__dirty) {\n child.__dirty |= REDARAW_BIT;\n }\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n }\n el.__dirty = 0;\n }\n else {\n var disp = el;\n if (clipPaths && clipPaths.length) {\n disp.__clipPaths = clipPaths;\n }\n else if (disp.__clipPaths && disp.__clipPaths.length > 0) {\n disp.__clipPaths = [];\n }\n if (isNaN(disp.z)) {\n logInvalidZError();\n disp.z = 0;\n }\n if (isNaN(disp.z2)) {\n logInvalidZError();\n disp.z2 = 0;\n }\n if (isNaN(disp.zlevel)) {\n logInvalidZError();\n disp.zlevel = 0;\n }\n this._displayList[this._displayListLen++] = disp;\n }\n var decalEl = el.getDecalElement && el.getDecalElement();\n if (decalEl) {\n this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore);\n }\n var textGuide = el.getTextGuideLine();\n if (textGuide) {\n this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore);\n }\n var textEl = el.getTextContent();\n if (textEl) {\n this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore);\n }\n };\n Storage.prototype.addRoot = function (el) {\n if (el.__zr && el.__zr.storage === this) {\n return;\n }\n this._roots.push(el);\n };\n Storage.prototype.delRoot = function (el) {\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n return;\n }\n var idx = util.indexOf(this._roots, el);\n if (idx >= 0) {\n this._roots.splice(idx, 1);\n }\n };\n Storage.prototype.delAllRoots = function () {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n };\n Storage.prototype.getRoots = function () {\n return this._roots;\n };\n Storage.prototype.dispose = function () {\n this._displayList = null;\n this._roots = null;\n };\n return Storage;\n}());\nexport default Storage;\n","import { __extends } from \"tslib\";\nimport Eventful from '../core/Eventful';\nimport requestAnimationFrame from './requestAnimationFrame';\nimport Animator from './Animator';\nvar Animation = (function (_super) {\n __extends(Animation, _super);\n function Animation(opts) {\n var _this = _super.call(this) || this;\n _this._running = false;\n _this._time = 0;\n _this._pausedTime = 0;\n _this._pauseStart = 0;\n _this._paused = false;\n opts = opts || {};\n _this.stage = opts.stage || {};\n _this.onframe = opts.onframe || function () { };\n return _this;\n }\n Animation.prototype.addClip = function (clip) {\n if (clip.animation) {\n this.removeClip(clip);\n }\n if (!this._clipsHead) {\n this._clipsHead = this._clipsTail = clip;\n }\n else {\n this._clipsTail.next = clip;\n clip.prev = this._clipsTail;\n clip.next = null;\n this._clipsTail = clip;\n }\n clip.animation = this;\n };\n Animation.prototype.addAnimator = function (animator) {\n animator.animation = this;\n var clip = animator.getClip();\n if (clip) {\n this.addClip(clip);\n }\n };\n Animation.prototype.removeClip = function (clip) {\n if (!clip.animation) {\n return;\n }\n var prev = clip.prev;\n var next = clip.next;\n if (prev) {\n prev.next = next;\n }\n else {\n this._clipsHead = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n this._clipsTail = prev;\n }\n clip.next = clip.prev = clip.animation = null;\n };\n Animation.prototype.removeAnimator = function (animator) {\n var clip = animator.getClip();\n if (clip) {\n this.removeClip(clip);\n }\n animator.animation = null;\n };\n Animation.prototype.update = function (notTriggerFrameAndStageUpdate) {\n var time = new Date().getTime() - this._pausedTime;\n var delta = time - this._time;\n var clip = this._clipsHead;\n while (clip) {\n var nextClip = clip.next;\n var finished = clip.step(time, delta);\n if (finished) {\n clip.ondestroy && clip.ondestroy();\n this.removeClip(clip);\n clip = nextClip;\n }\n else {\n clip = nextClip;\n }\n }\n this._time = time;\n if (!notTriggerFrameAndStageUpdate) {\n this.onframe(delta);\n this.trigger('frame', delta);\n this.stage.update && this.stage.update();\n }\n };\n Animation.prototype._startLoop = function () {\n var self = this;\n this._running = true;\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self.update();\n }\n }\n requestAnimationFrame(step);\n };\n Animation.prototype.start = function () {\n if (this._running) {\n return;\n }\n this._time = new Date().getTime();\n this._pausedTime = 0;\n this._startLoop();\n };\n Animation.prototype.stop = function () {\n this._running = false;\n };\n Animation.prototype.pause = function () {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n };\n Animation.prototype.resume = function () {\n if (this._paused) {\n this._pausedTime += (new Date().getTime()) - this._pauseStart;\n this._paused = false;\n }\n };\n Animation.prototype.clear = function () {\n var clip = this._clipsHead;\n while (clip) {\n var nextClip = clip.next;\n clip.prev = clip.next = clip.animation = null;\n clip = nextClip;\n }\n this._clipsHead = this._clipsTail = null;\n };\n Animation.prototype.isFinished = function () {\n return this._clipsHead == null;\n };\n Animation.prototype.animate = function (target, options) {\n options = options || {};\n this.start();\n var animator = new Animator(target, options.loop);\n this.addAnimator(animator);\n return animator;\n };\n return Animation;\n}(Eventful));\nexport default Animation;\n","import { __extends } from \"tslib\";\nimport { addEventListener, removeEventListener, normalizeEvent, getNativeEvent } from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../core/Eventful';\nimport env from '../core/env';\nvar TOUCH_CLICK_DELAY = 300;\nvar globalEventSupported = env.domSupported;\nvar localNativeListenerNames = (function () {\n var mouseHandlerNames = [\n 'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n ];\n var touchHandlerNames = [\n 'touchstart', 'touchend', 'touchmove'\n ];\n var pointerEventNameMap = {\n pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n };\n var pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n var nm = name.replace('mouse', 'pointer');\n return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n });\n return {\n mouse: mouseHandlerNames,\n touch: touchHandlerNames,\n pointer: pointerHandlerNames\n };\n})();\nvar globalNativeListenerNames = {\n mouse: ['mousemove', 'mouseup'],\n pointer: ['pointermove', 'pointerup']\n};\nvar wheelEventSupported = false;\nfunction isPointerFromTouch(event) {\n var pointerType = event.pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n}\nfunction setTouchTimer(scope) {\n scope.touching = true;\n if (scope.touchTimer != null) {\n clearTimeout(scope.touchTimer);\n scope.touchTimer = null;\n }\n scope.touchTimer = setTimeout(function () {\n scope.touching = false;\n scope.touchTimer = null;\n }, 700);\n}\nfunction markTouch(event) {\n event && (event.zrByTouch = true);\n}\nfunction normalizeGlobalEvent(instance, event) {\n return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true);\n}\nfunction isLocalEl(instance, el) {\n var elTmp = el;\n var isLocal = false;\n while (elTmp && elTmp.nodeType !== 9\n && !(isLocal = elTmp.domBelongToZr\n || (elTmp !== el && elTmp === instance.painterRoot))) {\n elTmp = elTmp.parentNode;\n }\n return isLocal;\n}\nvar FakeGlobalEvent = (function () {\n function FakeGlobalEvent(instance, event) {\n this.stopPropagation = zrUtil.noop;\n this.stopImmediatePropagation = zrUtil.noop;\n this.preventDefault = zrUtil.noop;\n this.type = event.type;\n this.target = this.currentTarget = instance.dom;\n this.pointerType = event.pointerType;\n this.clientX = event.clientX;\n this.clientY = event.clientY;\n }\n return FakeGlobalEvent;\n}());\nvar localDOMHandlers = {\n mousedown: function (event) {\n event = normalizeEvent(this.dom, event);\n this.__mayPointerCapture = [event.zrX, event.zrY];\n this.trigger('mousedown', event);\n },\n mousemove: function (event) {\n event = normalizeEvent(this.dom, event);\n var downPoint = this.__mayPointerCapture;\n if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n this.__togglePointerCapture(true);\n }\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n event = normalizeEvent(this.dom, event);\n this.__togglePointerCapture(false);\n this.trigger('mouseup', event);\n },\n mouseout: function (event) {\n event = normalizeEvent(this.dom, event);\n var element = event.toElement || event.relatedTarget;\n if (!isLocalEl(this, element)) {\n if (this.__pointerCapturing) {\n event.zrEventControl = 'no_globalout';\n }\n this.trigger('mouseout', event);\n }\n },\n wheel: function (event) {\n wheelEventSupported = true;\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n mousewheel: function (event) {\n if (wheelEventSupported) {\n return;\n }\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n touchstart: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.__lastTouchMoment = new Date();\n this.handler.processGesture(event, 'start');\n localDOMHandlers.mousemove.call(this, event);\n localDOMHandlers.mousedown.call(this, event);\n },\n touchmove: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'change');\n localDOMHandlers.mousemove.call(this, event);\n },\n touchend: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'end');\n localDOMHandlers.mouseup.call(this, event);\n if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) {\n localDOMHandlers.click.call(this, event);\n }\n },\n pointerdown: function (event) {\n localDOMHandlers.mousedown.call(this, event);\n },\n pointermove: function (event) {\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n localDOMHandlers.mouseup.call(this, event);\n },\n pointerout: function (event) {\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mouseout.call(this, event);\n }\n }\n};\nzrUtil.each(['click', 'dblclick', 'contextmenu'], function (name) {\n localDOMHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\nvar globalDOMHandlers = {\n pointermove: function (event) {\n if (!isPointerFromTouch(event)) {\n globalDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n globalDOMHandlers.mouseup.call(this, event);\n },\n mousemove: function (event) {\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n var pointerCaptureReleasing = this.__pointerCapturing;\n this.__togglePointerCapture(false);\n this.trigger('mouseup', event);\n if (pointerCaptureReleasing) {\n event.zrEventControl = 'only_globalout';\n this.trigger('mouseout', event);\n }\n }\n};\nfunction mountLocalDOMEventListeners(instance, scope) {\n var domHandlers = scope.domHandlers;\n if (env.pointerEventsSupported) {\n zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n domHandlers[nativeEventName].call(instance, event);\n });\n });\n }\n else {\n if (env.touchEventsSupported) {\n zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n domHandlers[nativeEventName].call(instance, event);\n setTouchTimer(scope);\n });\n });\n }\n zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n event = getNativeEvent(event);\n if (!scope.touching) {\n domHandlers[nativeEventName].call(instance, event);\n }\n });\n });\n }\n}\nfunction mountGlobalDOMEventListeners(instance, scope) {\n if (env.pointerEventsSupported) {\n zrUtil.each(globalNativeListenerNames.pointer, mount);\n }\n else if (!env.touchEventsSupported) {\n zrUtil.each(globalNativeListenerNames.mouse, mount);\n }\n function mount(nativeEventName) {\n function nativeEventListener(event) {\n event = getNativeEvent(event);\n if (!isLocalEl(instance, event.target)) {\n event = normalizeGlobalEvent(instance, event);\n scope.domHandlers[nativeEventName].call(instance, event);\n }\n }\n mountSingleDOMEventListener(scope, nativeEventName, nativeEventListener, { capture: true });\n }\n}\nfunction mountSingleDOMEventListener(scope, nativeEventName, listener, opt) {\n scope.mounted[nativeEventName] = listener;\n scope.listenerOpts[nativeEventName] = opt;\n addEventListener(scope.domTarget, nativeEventName, listener, opt);\n}\nfunction unmountDOMEventListeners(scope) {\n var mounted = scope.mounted;\n for (var nativeEventName in mounted) {\n if (mounted.hasOwnProperty(nativeEventName)) {\n removeEventListener(scope.domTarget, nativeEventName, mounted[nativeEventName], scope.listenerOpts[nativeEventName]);\n }\n }\n scope.mounted = {};\n}\nvar DOMHandlerScope = (function () {\n function DOMHandlerScope(domTarget, domHandlers) {\n this.mounted = {};\n this.listenerOpts = {};\n this.touching = false;\n this.domTarget = domTarget;\n this.domHandlers = domHandlers;\n }\n return DOMHandlerScope;\n}());\nvar HandlerDomProxy = (function (_super) {\n __extends(HandlerDomProxy, _super);\n function HandlerDomProxy(dom, painterRoot) {\n var _this = _super.call(this) || this;\n _this.__pointerCapturing = false;\n _this.dom = dom;\n _this.painterRoot = painterRoot;\n _this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n if (globalEventSupported) {\n _this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n }\n mountLocalDOMEventListeners(_this, _this._localHandlerScope);\n return _this;\n }\n HandlerDomProxy.prototype.dispose = function () {\n unmountDOMEventListeners(this._localHandlerScope);\n if (globalEventSupported) {\n unmountDOMEventListeners(this._globalHandlerScope);\n }\n };\n HandlerDomProxy.prototype.setCursor = function (cursorStyle) {\n this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n };\n HandlerDomProxy.prototype.__togglePointerCapture = function (isPointerCapturing) {\n this.__mayPointerCapture = null;\n if (globalEventSupported\n && ((+this.__pointerCapturing) ^ (+isPointerCapturing))) {\n this.__pointerCapturing = isPointerCapturing;\n var globalHandlerScope = this._globalHandlerScope;\n isPointerCapturing\n ? mountGlobalDOMEventListeners(this, globalHandlerScope)\n : unmountDOMEventListeners(globalHandlerScope);\n }\n };\n return HandlerDomProxy;\n}(Eventful));\nexport default HandlerDomProxy;\n","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\nimport { lum } from './tool/color';\nimport { DARK_MODE_THRESHOLD } from './config';\nimport Group from './graphic/Group';\nvar useVML = !env.canvasSupported;\nvar painterCtors = {};\nvar instances = {};\nfunction delInstance(id) {\n delete instances[id];\n}\nfunction isDarkMode(backgroundColor) {\n if (!backgroundColor) {\n return false;\n }\n if (typeof backgroundColor === 'string') {\n return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n }\n else if (backgroundColor.colorStops) {\n var colorStops = backgroundColor.colorStops;\n var totalLum = 0;\n var len = colorStops.length;\n for (var i = 0; i < len; i++) {\n totalLum += lum(colorStops[i].color, 1);\n }\n totalLum /= len;\n return totalLum < DARK_MODE_THRESHOLD;\n }\n return false;\n}\nvar ZRender = (function () {\n function ZRender(id, dom, opts) {\n var _this = this;\n this._sleepAfterStill = 10;\n this._stillFrameAccum = 0;\n this._needsRefresh = true;\n this._needsRefreshHover = true;\n this._darkMode = false;\n opts = opts || {};\n this.dom = dom;\n this.id = id;\n var storage = new Storage();\n var rendererType = opts.renderer || 'canvas';\n if (useVML) {\n throw new Error('IE8 support has been dropped since 5.0');\n }\n if (!painterCtors[rendererType]) {\n rendererType = zrUtil.keys(painterCtors)[0];\n }\n if (!painterCtors[rendererType]) {\n throw new Error(\"Renderer '\" + rendererType + \"' is not imported. Please import it first.\");\n }\n opts.useDirtyRect = opts.useDirtyRect == null\n ? false\n : opts.useDirtyRect;\n var painter = new painterCtors[rendererType](dom, storage, opts, id);\n this.storage = storage;\n this.painter = painter;\n var handerProxy = (!env.node && !env.worker)\n ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n this.animation = new Animation({\n stage: {\n update: function () { return _this._flush(true); }\n }\n });\n this.animation.start();\n }\n ZRender.prototype.add = function (el) {\n if (!el) {\n return;\n }\n this.storage.addRoot(el);\n el.addSelfToZr(this);\n this.refresh();\n };\n ZRender.prototype.remove = function (el) {\n if (!el) {\n return;\n }\n this.storage.delRoot(el);\n el.removeSelfFromZr(this);\n this.refresh();\n };\n ZRender.prototype.configLayer = function (zLevel, config) {\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n this.refresh();\n };\n ZRender.prototype.setBackgroundColor = function (backgroundColor) {\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n this.refresh();\n this._backgroundColor = backgroundColor;\n this._darkMode = isDarkMode(backgroundColor);\n };\n ZRender.prototype.getBackgroundColor = function () {\n return this._backgroundColor;\n };\n ZRender.prototype.setDarkMode = function (darkMode) {\n this._darkMode = darkMode;\n };\n ZRender.prototype.isDarkMode = function () {\n return this._darkMode;\n };\n ZRender.prototype.refreshImmediately = function (fromInside) {\n if (!fromInside) {\n this.animation.update(true);\n }\n this._needsRefresh = false;\n this.painter.refresh();\n this._needsRefresh = false;\n };\n ZRender.prototype.refresh = function () {\n this._needsRefresh = true;\n this.animation.start();\n };\n ZRender.prototype.flush = function () {\n this._flush(false);\n };\n ZRender.prototype._flush = function (fromInside) {\n var triggerRendered;\n var start = new Date().getTime();\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately(fromInside);\n }\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n var end = new Date().getTime();\n if (triggerRendered) {\n this._stillFrameAccum = 0;\n this.trigger('rendered', {\n elapsedTime: end - start\n });\n }\n else if (this._sleepAfterStill > 0) {\n this._stillFrameAccum++;\n if (this._stillFrameAccum > this._sleepAfterStill) {\n this.animation.stop();\n }\n }\n };\n ZRender.prototype.setSleepAfterStill = function (stillFramesCount) {\n this._sleepAfterStill = stillFramesCount;\n };\n ZRender.prototype.wakeUp = function () {\n this.animation.start();\n this._stillFrameAccum = 0;\n };\n ZRender.prototype.addHover = function (el) {\n };\n ZRender.prototype.removeHover = function (el) {\n };\n ZRender.prototype.clearHover = function () {\n };\n ZRender.prototype.refreshHover = function () {\n this._needsRefreshHover = true;\n };\n ZRender.prototype.refreshHoverImmediately = function () {\n this._needsRefreshHover = false;\n if (this.painter.refreshHover && this.painter.getType() === 'canvas') {\n this.painter.refreshHover();\n }\n };\n ZRender.prototype.resize = function (opts) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n };\n ZRender.prototype.clearAnimation = function () {\n this.animation.clear();\n };\n ZRender.prototype.getWidth = function () {\n return this.painter.getWidth();\n };\n ZRender.prototype.getHeight = function () {\n return this.painter.getHeight();\n };\n ZRender.prototype.pathToImage = function (e, dpr) {\n if (this.painter.pathToImage) {\n return this.painter.pathToImage(e, dpr);\n }\n };\n ZRender.prototype.setCursorStyle = function (cursorStyle) {\n this.handler.setCursorStyle(cursorStyle);\n };\n ZRender.prototype.findHover = function (x, y) {\n return this.handler.findHover(x, y);\n };\n ZRender.prototype.on = function (eventName, eventHandler, context) {\n this.handler.on(eventName, eventHandler, context);\n return this;\n };\n ZRender.prototype.off = function (eventName, eventHandler) {\n this.handler.off(eventName, eventHandler);\n };\n ZRender.prototype.trigger = function (eventName, event) {\n this.handler.trigger(eventName, event);\n };\n ZRender.prototype.clear = function () {\n var roots = this.storage.getRoots();\n for (var i = 0; i < roots.length; i++) {\n if (roots[i] instanceof Group) {\n roots[i].removeSelfFromZr(this);\n }\n }\n this.storage.delAllRoots();\n this.painter.clear();\n };\n ZRender.prototype.dispose = function () {\n this.animation.stop();\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n this.animation =\n this.storage =\n this.painter =\n this.handler = null;\n delInstance(this.id);\n };\n return ZRender;\n}());\nexport function init(dom, opts) {\n var zr = new ZRender(zrUtil.guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\nexport function dispose(zr) {\n zr.dispose();\n}\nexport function disposeAll() {\n for (var key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n instances = {};\n}\nexport function getInstance(id) {\n return instances[id];\n}\nexport function registerPainter(name, Ctor) {\n painterCtors[name] = Ctor;\n}\nexport var version = '5.2.0';\n;\n","import * as matrix from './matrix';\nimport Point from './Point';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar lt = new Point();\nvar rb = new Point();\nvar lb = new Point();\nvar rt = new Point();\nvar minTv = new Point();\nvar maxTv = new Point();\nvar BoundingRect = (function () {\n function BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n BoundingRect.prototype.union = function (other) {\n var x = mathMin(other.x, this.x);\n var y = mathMin(other.y, this.y);\n if (isFinite(this.x) && isFinite(this.width)) {\n this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n }\n else {\n this.width = other.width;\n }\n if (isFinite(this.y) && isFinite(this.height)) {\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n }\n else {\n this.height = other.height;\n }\n this.x = x;\n this.y = y;\n };\n BoundingRect.prototype.applyTransform = function (m) {\n BoundingRect.applyTransform(this, this, m);\n };\n BoundingRect.prototype.calculateTransform = function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create();\n matrix.translate(m, m, [-a.x, -a.y]);\n matrix.scale(m, m, [sx, sy]);\n matrix.translate(m, m, [b.x, b.y]);\n return m;\n };\n BoundingRect.prototype.intersect = function (b, mtv) {\n if (!b) {\n return false;\n }\n if (!(b instanceof BoundingRect)) {\n b = BoundingRect.create(b);\n }\n var a = this;\n var ax0 = a.x;\n var ax1 = a.x + a.width;\n var ay0 = a.y;\n var ay1 = a.y + a.height;\n var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n var overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n if (mtv) {\n var dMin = Infinity;\n var dMax = 0;\n var d0 = Math.abs(ax1 - bx0);\n var d1 = Math.abs(bx1 - ax0);\n var d2 = Math.abs(ay1 - by0);\n var d3 = Math.abs(by1 - ay0);\n var dx = Math.min(d0, d1);\n var dy = Math.min(d2, d3);\n if (ax1 < bx0 || bx1 < ax0) {\n if (dx > dMax) {\n dMax = dx;\n if (d0 < d1) {\n Point.set(maxTv, -d0, 0);\n }\n else {\n Point.set(maxTv, d1, 0);\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d0 < d1) {\n Point.set(minTv, d0, 0);\n }\n else {\n Point.set(minTv, -d1, 0);\n }\n }\n }\n if (ay1 < by0 || by1 < ay0) {\n if (dy > dMax) {\n dMax = dy;\n if (d2 < d3) {\n Point.set(maxTv, 0, -d2);\n }\n else {\n Point.set(maxTv, 0, d3);\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d2 < d3) {\n Point.set(minTv, 0, d2);\n }\n else {\n Point.set(minTv, 0, -d3);\n }\n }\n }\n }\n if (mtv) {\n Point.copy(mtv, overlap ? minTv : maxTv);\n }\n return overlap;\n };\n BoundingRect.prototype.contain = function (x, y) {\n var rect = this;\n return x >= rect.x\n && x <= (rect.x + rect.width)\n && y >= rect.y\n && y <= (rect.y + rect.height);\n };\n BoundingRect.prototype.clone = function () {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n };\n BoundingRect.prototype.copy = function (other) {\n BoundingRect.copy(this, other);\n };\n BoundingRect.prototype.plain = function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n };\n BoundingRect.prototype.isFinite = function () {\n return isFinite(this.x)\n && isFinite(this.y)\n && isFinite(this.width)\n && isFinite(this.height);\n };\n BoundingRect.prototype.isZero = function () {\n return this.width === 0 || this.height === 0;\n };\n BoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n };\n BoundingRect.copy = function (target, source) {\n target.x = source.x;\n target.y = source.y;\n target.width = source.width;\n target.height = source.height;\n };\n BoundingRect.applyTransform = function (target, source, m) {\n if (!m) {\n if (target !== source) {\n BoundingRect.copy(target, source);\n }\n return;\n }\n if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) {\n var sx = m[0];\n var sy = m[3];\n var tx = m[4];\n var ty = m[5];\n target.x = source.x * sx + tx;\n target.y = source.y * sy + ty;\n target.width = source.width * sx;\n target.height = source.height * sy;\n if (target.width < 0) {\n target.x += target.width;\n target.width = -target.width;\n }\n if (target.height < 0) {\n target.y += target.height;\n target.height = -target.height;\n }\n return;\n }\n lt.x = lb.x = source.x;\n lt.y = rt.y = source.y;\n rb.x = rt.x = source.x + source.width;\n rb.y = lb.y = source.y + source.height;\n lt.transform(m);\n rt.transform(m);\n rb.transform(m);\n lb.transform(m);\n target.x = mathMin(lt.x, rb.x, lb.x, rt.x);\n target.y = mathMin(lt.y, rb.y, lb.y, rt.y);\n var maxX = mathMax(lt.x, rb.x, lb.x, rt.x);\n var maxY = mathMax(lt.y, rb.y, lb.y, rt.y);\n target.width = maxX - target.x;\n target.height = maxY - target.y;\n };\n return BoundingRect;\n}());\nexport default BoundingRect;\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport * as polyHelper from '../helper/poly';\nvar PolylineShape = (function () {\n function PolylineShape() {\n this.points = null;\n this.percent = 1;\n this.smooth = 0;\n this.smoothConstraint = null;\n }\n return PolylineShape;\n}());\nexport { PolylineShape };\nvar Polyline = (function (_super) {\n __extends(Polyline, _super);\n function Polyline(opts) {\n return _super.call(this, opts) || this;\n }\n Polyline.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Polyline.prototype.getDefaultShape = function () {\n return new PolylineShape();\n };\n Polyline.prototype.buildPath = function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, false);\n };\n return Polyline;\n}(Path));\nPolyline.prototype.type = 'polyline';\nexport default Polyline;\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { __extends } from \"tslib\";\nimport Gradient from './Gradient';\nvar LinearGradient = (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient(x, y, x2, y2, colorStops, globalCoord) {\n var _this = _super.call(this, colorStops) || this;\n _this.x = x == null ? 0 : x;\n _this.y = y == null ? 0 : y;\n _this.x2 = x2 == null ? 1 : x2;\n _this.y2 = y2 == null ? 0 : y2;\n _this.type = 'linear';\n _this.global = globalCoord || false;\n return _this;\n }\n return LinearGradient;\n}(Gradient));\nexport default LinearGradient;\n;\n","export function create() {\n return [1, 0, 0, 1, 0, 0];\n}\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\nexport function copy(out, m) {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n}\nexport function mul(out, m1, m2) {\n var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = out3;\n out[4] = out4;\n out[5] = out5;\n return out;\n}\nexport function translate(out, a, v) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4] + v[0];\n out[5] = a[5] + v[1];\n return out;\n}\nexport function rotate(out, a, rad) {\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var st = Math.sin(rad);\n var ct = Math.cos(rad);\n out[0] = aa * ct + ab * st;\n out[1] = -aa * st + ab * ct;\n out[2] = ac * ct + ad * st;\n out[3] = -ac * st + ct * ad;\n out[4] = ct * atx + st * aty;\n out[5] = ct * aty - st * atx;\n return out;\n}\nexport function scale(out, a, v) {\n var vx = v[0];\n var vy = v[1];\n out[0] = a[0] * vx;\n out[1] = a[1] * vy;\n out[2] = a[2] * vx;\n out[3] = a[3] * vy;\n out[4] = a[4] * vx;\n out[5] = a[5] * vy;\n return out;\n}\nexport function invert(out, a) {\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var det = aa * ad - ab * ac;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n}\nexport function clone(a) {\n var b = create();\n copy(b, a);\n return b;\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nvar CircleShape = (function () {\n function CircleShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n }\n return CircleShape;\n}());\nexport { CircleShape };\nvar Circle = (function (_super) {\n __extends(Circle, _super);\n function Circle(opts) {\n return _super.call(this, opts) || this;\n }\n Circle.prototype.getDefaultShape = function () {\n return new CircleShape();\n };\n Circle.prototype.buildPath = function (ctx, shape, inBundle) {\n if (inBundle) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n }\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n };\n return Circle;\n}(Path));\n;\nCircle.prototype.type = 'circle';\nexport default Circle;\n","import * as curve from '../core/curve';\nexport function containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n if ((y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)) {\n return false;\n }\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n","import { normalizeRadian } from './util';\nvar PI2 = Math.PI * 2;\nexport function containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n if ((d - _l > r) || (d + _l < r)) {\n return false;\n }\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n return true;\n }\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n }\n else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n var angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += PI2;\n }\n return (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\n}\n","import PathProxy from '../core/PathProxy';\nimport * as line from './line';\nimport * as cubic from './cubic';\nimport * as quadratic from './quadratic';\nimport * as arc from './arc';\nimport * as curve from '../core/curve';\nimport windingLine from './windingLine';\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\nvar EPSILON = 1e-4;\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\nfunction swapExtrema() {\n var tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n if ((y > y0 && y > y1 && y > y2 && y > y3)\n || (y < y0 && y < y1 && y < y2 && y < y3)) {\n return 0;\n }\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n var w = 0;\n var nExtrema = -1;\n var y0_ = void 0;\n var y1_ = void 0;\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i];\n var unit = (t === 0 || t === 1) ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) {\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n }\n else {\n w += y3 < y1_ ? unit : -unit;\n }\n }\n else {\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n }\n}\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n if ((y > y0 && y > y1 && y > y2)\n || (y < y0 && y < y1 && y < y2)) {\n return 0;\n }\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n for (var i = 0; i < nRoots; i++) {\n var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) {\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n }\n else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n else {\n var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) {\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n }\n }\n}\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= PI2 - 1e-4) {\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n else {\n return 0;\n }\n }\n if (startAngle > endAngle) {\n var tmp_1 = startAngle;\n startAngle = endAngle;\n endAngle = tmp_1;\n }\n if (startAngle < 0) {\n startAngle += PI2;\n endAngle += PI2;\n }\n var w = 0;\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = PI2 + angle;\n }\n if ((angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\nfunction containPath(path, lineWidth, isStroke, x, y) {\n var data = path.data;\n var len = path.len();\n var w = 0;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n for (var i = 0; i < len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (cmd === CMD.M && i > 1) {\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n }\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n switch (cmd) {\n case CMD.M:\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n if (isStroke) {\n if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++];\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy;\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n }\n else {\n x0 = x1;\n y0 = y1;\n }\n var _x = (x - cx) * ry / rx + cx;\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n }\n else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n x1 = x0 + width;\n y1 = y0 + height;\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\n || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\n || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\n || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n break;\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\nexport function contain(pathProxy, x, y) {\n return containPath(pathProxy, 0, false, x, y);\n}\nexport function containStroke(pathProxy, lineWidth, x, y) {\n return containPath(pathProxy, lineWidth, true, x, y);\n}\n","import { __extends } from \"tslib\";\nimport Displayable, { DEFAULT_COMMON_STYLE, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable';\nimport PathProxy from '../core/PathProxy';\nimport * as pathContain from '../contain/path';\nimport { defaults, keys, extend, clone, isString, createObject } from '../core/util';\nimport { lum } from '../tool/color';\nimport { DARK_LABEL_COLOR, LIGHT_LABEL_COLOR, DARK_MODE_THRESHOLD, LIGHTER_LABEL_COLOR } from '../config';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT, STYLE_CHANGED_BIT } from './constants';\nexport var DEFAULT_PATH_STYLE = defaults({\n fill: '#000',\n stroke: null,\n strokePercent: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n lineDashOffset: 0,\n lineWidth: 1,\n lineCap: 'butt',\n miterLimit: 10,\n strokeNoScale: false,\n strokeFirst: false\n}, DEFAULT_COMMON_STYLE);\nexport var DEFAULT_PATH_ANIMATION_PROPS = {\n style: defaults({\n fill: true,\n stroke: true,\n strokePercent: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineDashOffset: true,\n lineWidth: true,\n miterLimit: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nvar pathCopyParams = [\n 'x', 'y', 'rotation', 'scaleX', 'scaleY', 'originX', 'originY', 'invisible',\n 'culling', 'z', 'z2', 'zlevel', 'parent'\n];\nvar Path = (function (_super) {\n __extends(Path, _super);\n function Path(opts) {\n return _super.call(this, opts) || this;\n }\n Path.prototype.update = function () {\n var _this = this;\n _super.prototype.update.call(this);\n var style = this.style;\n if (style.decal) {\n var decalEl = this._decalEl = this._decalEl || new Path();\n if (decalEl.buildPath === Path.prototype.buildPath) {\n decalEl.buildPath = function (ctx) {\n _this.buildPath(ctx, _this.shape);\n };\n }\n decalEl.silent = true;\n var decalElStyle = decalEl.style;\n for (var key in style) {\n if (decalElStyle[key] !== style[key]) {\n decalElStyle[key] = style[key];\n }\n }\n decalElStyle.fill = style.fill ? style.decal : null;\n decalElStyle.decal = null;\n decalElStyle.shadowColor = null;\n style.strokeFirst && (decalElStyle.stroke = null);\n for (var i = 0; i < pathCopyParams.length; ++i) {\n decalEl[pathCopyParams[i]] = this[pathCopyParams[i]];\n }\n decalEl.__dirty |= REDARAW_BIT;\n }\n else if (this._decalEl) {\n this._decalEl = null;\n }\n };\n Path.prototype.getDecalElement = function () {\n return this._decalEl;\n };\n Path.prototype._init = function (props) {\n var keysArr = keys(props);\n this.shape = this.getDefaultShape();\n var defaultStyle = this.getDefaultStyle();\n if (defaultStyle) {\n this.useStyle(defaultStyle);\n }\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n var value = props[key];\n if (key === 'style') {\n if (!this.style) {\n this.useStyle(value);\n }\n else {\n extend(this.style, value);\n }\n }\n else if (key === 'shape') {\n extend(this.shape, value);\n }\n else {\n _super.prototype.attrKV.call(this, key, value);\n }\n }\n if (!this.style) {\n this.useStyle({});\n }\n };\n Path.prototype.getDefaultStyle = function () {\n return null;\n };\n Path.prototype.getDefaultShape = function () {\n return {};\n };\n Path.prototype.canBeInsideText = function () {\n return this.hasFill();\n };\n Path.prototype.getInsideTextFill = function () {\n var pathFill = this.style.fill;\n if (pathFill !== 'none') {\n if (isString(pathFill)) {\n var fillLum = lum(pathFill, 0);\n if (fillLum > 0.5) {\n return DARK_LABEL_COLOR;\n }\n else if (fillLum > 0.2) {\n return LIGHTER_LABEL_COLOR;\n }\n return LIGHT_LABEL_COLOR;\n }\n else if (pathFill) {\n return LIGHT_LABEL_COLOR;\n }\n }\n return DARK_LABEL_COLOR;\n };\n Path.prototype.getInsideTextStroke = function (textFill) {\n var pathFill = this.style.fill;\n if (isString(pathFill)) {\n var zr = this.__zr;\n var isDarkMode = !!(zr && zr.isDarkMode());\n var isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD;\n if (isDarkMode === isDarkLabel) {\n return pathFill;\n }\n }\n };\n Path.prototype.buildPath = function (ctx, shapeCfg, inBatch) { };\n Path.prototype.pathUpdated = function () {\n this.__dirty &= ~SHAPE_CHANGED_BIT;\n };\n Path.prototype.getUpdatedPathProxy = function (inBatch) {\n !this.path && this.createPathProxy();\n this.path.beginPath();\n this.buildPath(this.path, this.shape, inBatch);\n return this.path;\n };\n Path.prototype.createPathProxy = function () {\n this.path = new PathProxy(false);\n };\n Path.prototype.hasStroke = function () {\n var style = this.style;\n var stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n };\n Path.prototype.hasFill = function () {\n var style = this.style;\n var fill = style.fill;\n return fill != null && fill !== 'none';\n };\n Path.prototype.getBoundingRect = function () {\n var rect = this._rect;\n var style = this.style;\n var needsUpdateRect = !rect;\n if (needsUpdateRect) {\n var firstInvoke = false;\n if (!this.path) {\n firstInvoke = true;\n this.createPathProxy();\n }\n var path = this.path;\n if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n this.pathUpdated();\n }\n rect = path.getBoundingRect();\n }\n this._rect = rect;\n if (this.hasStroke() && this.path && this.path.len() > 0) {\n var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n if (this.__dirty || needsUpdateRect) {\n rectWithStroke.copy(rect);\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n var w = style.lineWidth;\n if (!this.hasFill()) {\n var strokeContainThreshold = this.strokeContainThreshold;\n w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold);\n }\n if (lineScale > 1e-10) {\n rectWithStroke.width += w / lineScale;\n rectWithStroke.height += w / lineScale;\n rectWithStroke.x -= w / lineScale / 2;\n rectWithStroke.y -= w / lineScale / 2;\n }\n }\n return rectWithStroke;\n }\n return rect;\n };\n Path.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n var style = this.style;\n x = localPos[0];\n y = localPos[1];\n if (rect.contain(x, y)) {\n var pathProxy = this.path;\n if (this.hasStroke()) {\n var lineWidth = style.lineWidth;\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n if (lineScale > 1e-10) {\n if (!this.hasFill()) {\n lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n }\n if (pathContain.containStroke(pathProxy, lineWidth / lineScale, x, y)) {\n return true;\n }\n }\n }\n if (this.hasFill()) {\n return pathContain.contain(pathProxy, x, y);\n }\n }\n return false;\n };\n Path.prototype.dirtyShape = function () {\n this.__dirty |= SHAPE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n if (this._decalEl) {\n this._decalEl.dirtyShape();\n }\n this.markRedraw();\n };\n Path.prototype.dirty = function () {\n this.dirtyStyle();\n this.dirtyShape();\n };\n Path.prototype.animateShape = function (loop) {\n return this.animate('shape', loop);\n };\n Path.prototype.updateDuringAnimation = function (targetKey) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else if (targetKey === 'shape') {\n this.dirtyShape();\n }\n else {\n this.markRedraw();\n }\n };\n Path.prototype.attrKV = function (key, value) {\n if (key === 'shape') {\n this.setShape(value);\n }\n else {\n _super.prototype.attrKV.call(this, key, value);\n }\n };\n Path.prototype.setShape = function (keyOrObj, value) {\n var shape = this.shape;\n if (!shape) {\n shape = this.shape = {};\n }\n if (typeof keyOrObj === 'string') {\n shape[keyOrObj] = value;\n }\n else {\n extend(shape, keyOrObj);\n }\n this.dirtyShape();\n return this;\n };\n Path.prototype.shapeChanged = function () {\n return !!(this.__dirty & SHAPE_CHANGED_BIT);\n };\n Path.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_PATH_STYLE, obj);\n };\n Path.prototype._innerSaveToNormal = function (toState) {\n _super.prototype._innerSaveToNormal.call(this, toState);\n var normalState = this._normalState;\n if (toState.shape && !normalState.shape) {\n normalState.shape = extend({}, this.shape);\n }\n };\n Path.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n var needsRestoreToNormal = !(state && keepCurrentStates);\n var targetShape;\n if (state && state.shape) {\n if (transition) {\n if (keepCurrentStates) {\n targetShape = state.shape;\n }\n else {\n targetShape = extend({}, normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else {\n targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else if (needsRestoreToNormal) {\n targetShape = normalState.shape;\n }\n if (targetShape) {\n if (transition) {\n this.shape = extend({}, this.shape);\n var targetShapePrimaryProps = {};\n var shapeKeys = keys(targetShape);\n for (var i = 0; i < shapeKeys.length; i++) {\n var key = shapeKeys[i];\n if (typeof targetShape[key] === 'object') {\n this.shape[key] = targetShape[key];\n }\n else {\n targetShapePrimaryProps[key] = targetShape[key];\n }\n }\n this._transitionState(stateName, {\n shape: targetShapePrimaryProps\n }, animationCfg);\n }\n else {\n this.shape = targetShape;\n this.dirtyShape();\n }\n }\n };\n Path.prototype._mergeStates = function (states) {\n var mergedState = _super.prototype._mergeStates.call(this, states);\n var mergedShape;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n if (state.shape) {\n mergedShape = mergedShape || {};\n this._mergeStyle(mergedShape, state.shape);\n }\n }\n if (mergedShape) {\n mergedState.shape = mergedShape;\n }\n return mergedState;\n };\n Path.prototype.getAnimationStyleProps = function () {\n return DEFAULT_PATH_ANIMATION_PROPS;\n };\n Path.prototype.isZeroArea = function () {\n return false;\n };\n Path.extend = function (defaultProps) {\n var Sub = (function (_super) {\n __extends(Sub, _super);\n function Sub(opts) {\n var _this = _super.call(this, opts) || this;\n defaultProps.init && defaultProps.init.call(_this, opts);\n return _this;\n }\n Sub.prototype.getDefaultStyle = function () {\n return clone(defaultProps.style);\n };\n Sub.prototype.getDefaultShape = function () {\n return clone(defaultProps.shape);\n };\n return Sub;\n }(Path));\n for (var key in defaultProps) {\n if (typeof defaultProps[key] === 'function') {\n Sub.prototype[key] = defaultProps[key];\n }\n }\n return Sub;\n };\n Path.initDefaultProps = (function () {\n var pathProto = Path.prototype;\n pathProto.type = 'path';\n pathProto.strokeContainThreshold = 5;\n pathProto.segmentIgnoreThreshold = 0;\n pathProto.subPixelOptimize = false;\n pathProto.autoBatch = false;\n pathProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT;\n })();\n return Path;\n}(Displayable));\nexport default Path;\n","var Browser = (function () {\n function Browser() {\n this.firefox = false;\n this.ie = false;\n this.edge = false;\n this.newEdge = false;\n this.weChat = false;\n }\n return Browser;\n}());\nvar Env = (function () {\n function Env() {\n this.browser = new Browser();\n this.node = false;\n this.wxa = false;\n this.worker = false;\n this.canvasSupported = false;\n this.svgSupported = false;\n this.touchEventsSupported = false;\n this.pointerEventsSupported = false;\n this.domSupported = false;\n this.transformSupported = false;\n this.transform3dSupported = false;\n }\n return Env;\n}());\nvar env = new Env();\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n env.wxa = true;\n env.canvasSupported = true;\n env.touchEventsSupported = true;\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n env.worker = true;\n env.canvasSupported = true;\n}\nelse if (typeof navigator === 'undefined') {\n env.node = true;\n env.canvasSupported = true;\n env.svgSupported = true;\n}\nelse {\n detect(navigator.userAgent, env);\n}\nfunction detect(ua, env) {\n var browser = env.browser;\n var firefox = ua.match(/Firefox\\/([\\d.]+)/);\n var ie = ua.match(/MSIE\\s([\\d.]+)/)\n || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n var edge = ua.match(/Edge?\\/([\\d.]+)/);\n var weChat = (/micromessenger/i).test(ua);\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n }\n if (ie) {\n browser.ie = true;\n browser.version = ie[1];\n }\n if (edge) {\n browser.edge = true;\n browser.version = edge[1];\n browser.newEdge = +edge[1].split('.')[0] > 18;\n }\n if (weChat) {\n browser.weChat = true;\n }\n env.canvasSupported = !!document.createElement('canvas').getContext;\n env.svgSupported = typeof SVGRect !== 'undefined';\n env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge;\n env.pointerEventsSupported = 'onpointerdown' in window\n && (browser.edge || (browser.ie && +browser.version >= 11));\n env.domSupported = typeof document !== 'undefined';\n var style = document.documentElement.style;\n env.transform3dSupported = ((browser.ie && 'transition' in style)\n || browser.edge\n || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()))\n || 'MozPerspective' in style)\n && !('OTransition' in style);\n env.transformSupported = env.transform3dSupported\n || (browser.ie && +browser.version >= 9);\n}\nexport default env;\n","import { normalizeArcAngles } from '../../core/PathProxy';\nvar PI = Math.PI;\nvar PI2 = PI * 2;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar mathACos = Math.acos;\nvar mathATan2 = Math.atan2;\nvar mathAbs = Math.abs;\nvar mathSqrt = Math.sqrt;\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar e = 1e-4;\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0;\n var y10 = y1 - y0;\n var x32 = x3 - x2;\n var y32 = y3 - y2;\n var t = y32 * x10 - x32 * y10;\n if (t * t < e) {\n return;\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\nfunction computeCornerTangents(x0, y0, x1, y1, radius, cr, clockwise) {\n var x01 = x0 - x1;\n var y01 = y0 - y1;\n var lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01);\n var ox = lo * y01;\n var oy = -lo * x01;\n var x11 = x0 + ox;\n var y11 = y0 + oy;\n var x10 = x1 + ox;\n var y10 = y1 + oy;\n var x00 = (x11 + x10) / 2;\n var y00 = (y11 + y10) / 2;\n var dx = x10 - x11;\n var dy = y10 - y11;\n var d2 = dx * dx + dy * dy;\n var r = radius - cr;\n var s = x11 * y10 - x10 * y11;\n var d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax(0, r * r * d2 - s * s));\n var cx0 = (s * dy - dx * d) / d2;\n var cy0 = (-s * dx - dy * d) / d2;\n var cx1 = (s * dy + dx * d) / d2;\n var cy1 = (-s * dx + dy * d) / d2;\n var dx0 = cx0 - x00;\n var dy0 = cy0 - y00;\n var dx1 = cx1 - x00;\n var dy1 = cy1 - y00;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n cx0 = cx1;\n cy0 = cy1;\n }\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (radius / r - 1),\n y11: cy0 * (radius / r - 1)\n };\n}\nexport function buildPath(ctx, shape) {\n var radius = mathMax(shape.r, 0);\n var innerRadius = mathMax(shape.r0 || 0, 0);\n var hasRadius = radius > 0;\n var hasInnerRadius = innerRadius > 0;\n if (!hasRadius && !hasInnerRadius) {\n return;\n }\n if (!hasRadius) {\n radius = innerRadius;\n innerRadius = 0;\n }\n if (innerRadius > radius) {\n var tmp = radius;\n radius = innerRadius;\n innerRadius = tmp;\n }\n var clockwise = !!shape.clockwise;\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var arc;\n if (startAngle === endAngle) {\n arc = 0;\n }\n else {\n var tmpAngles = [startAngle, endAngle];\n normalizeArcAngles(tmpAngles, !clockwise);\n arc = mathAbs(tmpAngles[0] - tmpAngles[1]);\n }\n var x = shape.cx;\n var y = shape.cy;\n var cornerRadius = shape.cornerRadius || 0;\n var innerCornerRadius = shape.innerCornerRadius || 0;\n if (!(radius > e)) {\n ctx.moveTo(x, y);\n }\n else if (arc > PI2 - e) {\n ctx.moveTo(x + radius * mathCos(startAngle), y + radius * mathSin(startAngle));\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n if (innerRadius > e) {\n ctx.moveTo(x + innerRadius * mathCos(endAngle), y + innerRadius * mathSin(endAngle));\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n else {\n var halfRd = mathAbs(radius - innerRadius) / 2;\n var cr = mathMin(halfRd, cornerRadius);\n var icr = mathMin(halfRd, innerCornerRadius);\n var cr0 = icr;\n var cr1 = cr;\n var xrs = radius * mathCos(startAngle);\n var yrs = radius * mathSin(startAngle);\n var xire = innerRadius * mathCos(endAngle);\n var yire = innerRadius * mathSin(endAngle);\n var xre = void 0;\n var yre = void 0;\n var xirs = void 0;\n var yirs = void 0;\n if (cr > e || icr > e) {\n xre = radius * mathCos(endAngle);\n yre = radius * mathSin(endAngle);\n xirs = innerRadius * mathCos(startAngle);\n yirs = innerRadius * mathSin(startAngle);\n if (arc < PI) {\n var it_1 = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire);\n if (it_1) {\n var x0 = xrs - it_1[0];\n var y0 = yrs - it_1[1];\n var x1 = xre - it_1[0];\n var y1 = yre - it_1[1];\n var a = 1 / mathSin(mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2);\n var b = mathSqrt(it_1[0] * it_1[0] + it_1[1] * it_1[1]);\n cr0 = mathMin(icr, (innerRadius - b) / (a - 1));\n cr1 = mathMin(cr, (radius - b) / (a + 1));\n }\n }\n }\n if (!(arc > e)) {\n ctx.moveTo(x + xrs, y + yrs);\n }\n else if (cr1 > e) {\n var ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, cr1, clockwise);\n var ct1 = computeCornerTangents(xre, yre, xire, yire, radius, cr1, clockwise);\n ctx.moveTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n if (cr1 < cr) {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n else {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n ctx.arc(x, y, radius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), !clockwise);\n ctx.arc(x + ct1.cx, y + ct1.cy, cr1, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n else {\n ctx.moveTo(x + xrs, y + yrs);\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n }\n if (!(innerRadius > e) || !(arc > e)) {\n ctx.lineTo(x + xire, y + yire);\n }\n else if (cr0 > e) {\n var ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -cr0, clockwise);\n var ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -cr0, clockwise);\n ctx.lineTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n if (cr0 < icr) {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n else {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n ctx.arc(x, y, innerRadius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), clockwise);\n ctx.arc(x + ct1.cx, y + ct1.cy, cr0, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n else {\n ctx.lineTo(x + xire, y + yire);\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n ctx.closePath();\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport * as roundSectorHelper from '../helper/roundSector';\nvar SectorShape = (function () {\n function SectorShape() {\n this.cx = 0;\n this.cy = 0;\n this.r0 = 0;\n this.r = 0;\n this.startAngle = 0;\n this.endAngle = Math.PI * 2;\n this.clockwise = true;\n this.cornerRadius = 0;\n this.innerCornerRadius = 0;\n }\n return SectorShape;\n}());\nexport { SectorShape };\nvar Sector = (function (_super) {\n __extends(Sector, _super);\n function Sector(opts) {\n return _super.call(this, opts) || this;\n }\n Sector.prototype.getDefaultShape = function () {\n return new SectorShape();\n };\n Sector.prototype.buildPath = function (ctx, shape) {\n roundSectorHelper.buildPath(ctx, shape);\n };\n Sector.prototype.isZeroArea = function () {\n return this.shape.startAngle === this.shape.endAngle\n || this.shape.r === this.shape.r0;\n };\n return Sector;\n}(Path));\nSector.prototype.type = 'sector';\nexport default Sector;\n","import * as imageHelper from '../helper/image';\nimport { extend, retrieve2, retrieve3, reduce } from '../../core/util';\nimport { getLineHeight, getWidth, parsePercent } from '../../contain/text';\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nexport function truncateText(text, containerWidth, font, ellipsis, options) {\n if (!containerWidth) {\n return '';\n }\n var textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n for (var i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options);\n }\n return textLines.join('\\n');\n}\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n options = options || {};\n var preparedOpts = extend({}, options);\n preparedOpts.font = font;\n ellipsis = retrieve2(ellipsis, '...');\n preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n preparedOpts.cnCharWidth = getWidth('国', font);\n var ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n preparedOpts.placeholder = retrieve2(options.placeholder, '');\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1);\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n var ellipsisWidth = getWidth(ellipsis, font);\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n contentWidth = containerWidth - ellipsisWidth;\n preparedOpts.ellipsis = ellipsis;\n preparedOpts.ellipsisWidth = ellipsisWidth;\n preparedOpts.contentWidth = contentWidth;\n preparedOpts.containerWidth = containerWidth;\n return preparedOpts;\n}\nfunction truncateSingleLine(textLine, options) {\n var containerWidth = options.containerWidth;\n var font = options.font;\n var contentWidth = options.contentWidth;\n if (!containerWidth) {\n return '';\n }\n var lineWidth = getWidth(textLine, font);\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n for (var j = 0;; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n var subLength = j === 0\n ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n : lineWidth > 0\n ? Math.floor(textLine.length * contentWidth / lineWidth)\n : 0;\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n if (textLine === '') {\n textLine = options.placeholder;\n }\n return textLine;\n}\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n var width = 0;\n var i = 0;\n for (var len = text.length; i < len && width < contentWidth; i++) {\n var charCode = text.charCodeAt(i);\n width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n }\n return i;\n}\nexport function parsePlainText(text, style) {\n text != null && (text += '');\n var overflow = style.overflow;\n var padding = style.padding;\n var font = style.font;\n var truncate = overflow === 'truncate';\n var calculatedLineHeight = getLineHeight(font);\n var lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n var truncateLineOverflow = style.lineOverflow === 'truncate';\n var width = style.width;\n var lines;\n if (width != null && overflow === 'break' || overflow === 'breakAll') {\n lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n }\n else {\n lines = text ? text.split('\\n') : [];\n }\n var contentHeight = lines.length * lineHeight;\n var height = retrieve2(style.height, contentHeight);\n if (contentHeight > height && truncateLineOverflow) {\n var lineCount = Math.floor(height / lineHeight);\n lines = lines.slice(0, lineCount);\n }\n var outerHeight = height;\n var outerWidth = width;\n if (padding) {\n outerHeight += padding[0] + padding[2];\n if (outerWidth != null) {\n outerWidth += padding[1] + padding[3];\n }\n }\n if (text && truncate && outerWidth != null) {\n var options = prepareTruncateOptions(width, font, style.ellipsis, {\n minChar: style.truncateMinChar,\n placeholder: style.placeholder\n });\n for (var i = 0; i < lines.length; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n if (width == null) {\n var maxWidth = 0;\n for (var i = 0; i < lines.length; i++) {\n maxWidth = Math.max(getWidth(lines[i], font), maxWidth);\n }\n width = maxWidth;\n }\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n calculatedLineHeight: calculatedLineHeight,\n contentHeight: contentHeight,\n width: width\n };\n}\nvar RichTextToken = (function () {\n function RichTextToken() {\n }\n return RichTextToken;\n}());\nvar RichTextLine = (function () {\n function RichTextLine(tokens) {\n this.tokens = [];\n if (tokens) {\n this.tokens = tokens;\n }\n }\n return RichTextLine;\n}());\nvar RichTextContentBlock = (function () {\n function RichTextContentBlock() {\n this.width = 0;\n this.height = 0;\n this.contentWidth = 0;\n this.contentHeight = 0;\n this.outerWidth = 0;\n this.outerHeight = 0;\n this.lines = [];\n }\n return RichTextContentBlock;\n}());\nexport { RichTextContentBlock };\nexport function parseRichText(text, style) {\n var contentBlock = new RichTextContentBlock();\n text != null && (text += '');\n if (!text) {\n return contentBlock;\n }\n var topWidth = style.width;\n var topHeight = style.height;\n var overflow = style.overflow;\n var wrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n ? { width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll' }\n : null;\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n }\n pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n }\n var pendingList = [];\n var calculatedHeight = 0;\n var calculatedWidth = 0;\n var stlPadding = style.padding;\n var truncate = overflow === 'truncate';\n var truncateLine = style.lineOverflow === 'truncate';\n function finishLine(line, lineWidth, lineHeight) {\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n calculatedHeight += lineHeight;\n calculatedWidth = Math.max(calculatedWidth, lineWidth);\n }\n outer: for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var lineHeight = 0;\n var lineWidth = 0;\n for (var j = 0; j < line.tokens.length; j++) {\n var token = line.tokens[j];\n var tokenStyle = token.styleName && style.rich[token.styleName] || {};\n var textPadding = token.textPadding = tokenStyle.padding;\n var paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n var font = token.font = tokenStyle.font || style.font;\n token.contentHeight = getLineHeight(font);\n var tokenHeight = retrieve2(tokenStyle.height, token.contentHeight);\n token.innerHeight = tokenHeight;\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.lineHeight, style.lineHeight, tokenHeight);\n token.align = tokenStyle && tokenStyle.align || style.align;\n token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n if (j > 0) {\n line.tokens = line.tokens.slice(0, j);\n finishLine(line, lineWidth, lineHeight);\n contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n }\n else {\n contentBlock.lines = contentBlock.lines.slice(0, i);\n }\n break outer;\n }\n var styleTokenWidth = tokenStyle.width;\n var tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n token.percentWidth = styleTokenWidth;\n pendingList.push(token);\n token.contentWidth = getWidth(token.text, font);\n }\n else {\n if (tokenWidthNotSpecified) {\n var textBackgroundColor = tokenStyle.backgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image;\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n if (imageHelper.isImageReady(bgImg)) {\n token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n var remainTruncWidth = truncate && topWidth != null\n ? topWidth - lineWidth : null;\n if (remainTruncWidth != null && remainTruncWidth < token.width) {\n if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n token.text = '';\n token.width = token.contentWidth = 0;\n }\n else {\n token.text = truncateText(token.text, remainTruncWidth - paddingH, font, style.ellipsis, { minChar: style.truncateMinChar });\n token.width = token.contentWidth = getWidth(token.text, font);\n }\n }\n else {\n token.contentWidth = getWidth(token.text, font);\n }\n }\n token.width += paddingH;\n lineWidth += token.width;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n }\n finishLine(line, lineWidth, lineHeight);\n }\n contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n contentBlock.contentHeight = calculatedHeight;\n contentBlock.contentWidth = calculatedWidth;\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n for (var i = 0; i < pendingList.length; i++) {\n var token = pendingList[i];\n var percentWidth = token.percentWidth;\n token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n }\n return contentBlock;\n}\nfunction pushTokens(block, str, style, wrapInfo, styleName) {\n var isEmptyStr = str === '';\n var tokenStyle = styleName && style.rich[styleName] || {};\n var lines = block.lines;\n var font = tokenStyle.font || style.font;\n var newLine = false;\n var strLines;\n var linesWidths;\n if (wrapInfo) {\n var tokenPadding = tokenStyle.padding;\n var tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n var outerWidth_1 = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n if (lines.length > 0) {\n if (outerWidth_1 + wrapInfo.accumWidth > wrapInfo.width) {\n strLines = str.split('\\n');\n newLine = true;\n }\n }\n wrapInfo.accumWidth = outerWidth_1;\n }\n else {\n var res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n linesWidths = res.linesWidths;\n strLines = res.lines;\n }\n }\n else {\n strLines = str.split('\\n');\n }\n for (var i = 0; i < strLines.length; i++) {\n var text = strLines[i];\n var token = new RichTextToken();\n token.styleName = styleName;\n token.text = text;\n token.isLineHolder = !text && !isEmptyStr;\n if (typeof tokenStyle.width === 'number') {\n token.width = tokenStyle.width;\n }\n else {\n token.width = linesWidths\n ? linesWidths[i]\n : getWidth(text, font);\n }\n if (!i && !newLine) {\n var tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n var tokensLen = tokens.length;\n (tokensLen === 1 && tokens[0].isLineHolder)\n ? (tokens[0] = token)\n : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n }\n else {\n lines.push(new RichTextLine([token]));\n }\n }\n}\nfunction isLatin(ch) {\n var code = ch.charCodeAt(0);\n return code >= 0x21 && code <= 0xFF;\n}\nvar breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n obj[ch] = true;\n return obj;\n}, {});\nfunction isWordBreakChar(ch) {\n if (isLatin(ch)) {\n if (breakCharMap[ch]) {\n return true;\n }\n return false;\n }\n return true;\n}\nfunction wrapText(text, font, lineWidth, isBreakAll, lastAccumWidth) {\n var lines = [];\n var linesWidths = [];\n var line = '';\n var currentWord = '';\n var currentWordWidth = 0;\n var accumWidth = 0;\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch === '\\n') {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n line = '';\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = 0;\n continue;\n }\n var chWidth = getWidth(ch, font);\n var inWord = isBreakAll ? false : !isWordBreakChar(ch);\n if (!lines.length\n ? lastAccumWidth + accumWidth + chWidth > lineWidth\n : accumWidth + chWidth > lineWidth) {\n if (!accumWidth) {\n if (inWord) {\n lines.push(currentWord);\n linesWidths.push(currentWordWidth);\n currentWord = ch;\n currentWordWidth = chWidth;\n }\n else {\n lines.push(ch);\n linesWidths.push(chWidth);\n }\n }\n else if (line || currentWord) {\n if (inWord) {\n if (!line) {\n line = currentWord;\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth - currentWordWidth);\n currentWord += ch;\n currentWordWidth += chWidth;\n line = '';\n accumWidth = currentWordWidth;\n }\n else {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n currentWord = '';\n currentWordWidth = 0;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n line = ch;\n accumWidth = chWidth;\n }\n }\n continue;\n }\n accumWidth += chWidth;\n if (inWord) {\n currentWord += ch;\n currentWordWidth += chWidth;\n }\n else {\n if (currentWord) {\n line += currentWord;\n currentWord = '';\n currentWordWidth = 0;\n }\n line += ch;\n }\n }\n if (!lines.length && !line) {\n line = text;\n currentWord = '';\n currentWordWidth = 0;\n }\n if (currentWord) {\n line += currentWord;\n }\n if (line) {\n lines.push(line);\n linesWidths.push(accumWidth);\n }\n if (lines.length === 1) {\n accumWidth += lastAccumWidth;\n }\n return {\n accumWidth: accumWidth,\n lines: lines,\n linesWidths: linesWidths\n };\n}\n","import { isString } from '../core/util';\nexport function parseXML(svg) {\n if (isString(svg)) {\n var parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n }\n var svgNode = svg;\n if (svgNode.nodeType === 9) {\n svgNode = svgNode.firstChild;\n }\n while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) {\n svgNode = svgNode.nextSibling;\n }\n return svgNode;\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nvar EllipseShape = (function () {\n function EllipseShape() {\n this.cx = 0;\n this.cy = 0;\n this.rx = 0;\n this.ry = 0;\n }\n return EllipseShape;\n}());\nexport { EllipseShape };\nvar Ellipse = (function (_super) {\n __extends(Ellipse, _super);\n function Ellipse(opts) {\n return _super.call(this, opts) || this;\n }\n Ellipse.prototype.getDefaultShape = function () {\n return new EllipseShape();\n };\n Ellipse.prototype.buildPath = function (ctx, shape) {\n var k = 0.5522848;\n var x = shape.cx;\n var y = shape.cy;\n var a = shape.rx;\n var b = shape.ry;\n var ox = a * k;\n var oy = b * k;\n ctx.moveTo(x - a, y);\n ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n ctx.closePath();\n };\n return Ellipse;\n}(Path));\nEllipse.prototype.type = 'ellipse';\nexport default Ellipse;\n","var DEFAULT_MIN_MERGE = 32;\nvar DEFAULT_MIN_GALLOPING = 7;\nvar DEFAULT_TMP_STORAGE_LENGTH = 256;\nfunction minRunLength(n) {\n var r = 0;\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n return n + r;\n}\nfunction makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n if (runHi === hi) {\n return 1;\n }\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n reverseRun(array, lo, runHi);\n }\n else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n return runHi - lo;\n}\nfunction reverseRun(array, lo, hi) {\n hi--;\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n for (; start < hi; start++) {\n var pivot = array[start];\n var left = lo;\n var right = start;\n var mid;\n while (left < right) {\n mid = left + right >>> 1;\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n }\n else {\n left = mid + 1;\n }\n }\n var n = start - left;\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n case 2:\n array[left + 2] = array[left + 1];\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n array[left] = pivot;\n }\n}\nfunction gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n }\n else {\n offset = m;\n }\n }\n return offset;\n}\nfunction gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n else {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n }\n else {\n lastOffset = m + 1;\n }\n }\n return offset;\n}\nfunction TimSort(array, compare) {\n var minGallop = DEFAULT_MIN_GALLOPING;\n var length = 0;\n var tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n var stackLength = 0;\n var runStart;\n var runLength;\n var stackSize = 0;\n length = array.length;\n if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n tmpStorageLength = length >>> 1;\n }\n var tmp = [];\n stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n runStart = [];\n runLength = [];\n function pushRun(_runStart, _runLength) {\n runStart[stackSize] = _runStart;\n runLength[stackSize] = _runLength;\n stackSize += 1;\n }\n function mergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n if ((n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n }\n else if (runLength[n] > runLength[n + 1]) {\n break;\n }\n mergeAt(n);\n }\n }\n function forceMergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n mergeAt(n);\n }\n }\n function mergeAt(i) {\n var start1 = runStart[i];\n var length1 = runLength[i];\n var start2 = runStart[i + 1];\n var length2 = runLength[i + 1];\n runLength[i] = length1 + length2;\n if (i === stackSize - 3) {\n runStart[i + 1] = runStart[i + 2];\n runLength[i + 1] = runLength[i + 2];\n }\n stackSize--;\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n if (length1 === 0) {\n return;\n }\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n if (length2 === 0) {\n return;\n }\n if (length1 <= length2) {\n mergeLow(start1, length1, start2, length2);\n }\n else {\n mergeHigh(start1, length1, start2, length2);\n }\n }\n function mergeLow(start1, length1, start2, length2) {\n var i = 0;\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n var _minGallop = minGallop;\n var count1;\n var count2;\n var exit;\n while (1) {\n count1 = 0;\n count2 = 0;\n exit = false;\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n if (--length2 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n exit = true;\n break;\n }\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n if (--length1 === 1) {\n exit = true;\n break;\n }\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n _minGallop += 2;\n }\n minGallop = _minGallop;\n minGallop < 1 && (minGallop = 1);\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n }\n else if (length1 === 0) {\n throw new Error();\n }\n else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n function mergeHigh(start1, length1, start2, length2) {\n var i = 0;\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n return;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n return;\n }\n var _minGallop = minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n array[dest--] = tmp[cursor2--];\n if (--length2 === 1) {\n exit = true;\n break;\n }\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n exit = true;\n break;\n }\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n _minGallop += 2;\n }\n minGallop = _minGallop;\n if (minGallop < 1) {\n minGallop = 1;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n }\n else if (length2 === 0) {\n throw new Error();\n }\n else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n return {\n mergeRuns: mergeRuns,\n forceMergeRuns: forceMergeRuns,\n pushRun: pushRun\n };\n}\nexport default function sort(array, compare, lo, hi) {\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n var remaining = hi - lo;\n if (remaining < 2) {\n return;\n }\n var runLength = 0;\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n var ts = TimSort(array, compare);\n var minRun = minRunLength(remaining);\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n ts.forceMergeRuns();\n}\n","var requestAnimationFrame;\nrequestAnimationFrame = (typeof window !== 'undefined'\n && ((window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame)) || function (func) {\n return setTimeout(func, 16);\n};\nexport default requestAnimationFrame;\n","import Point from './Point';\nvar extent = [0, 0];\nvar extent2 = [0, 0];\nvar minTv = new Point();\nvar maxTv = new Point();\nvar OrientedBoundingRect = (function () {\n function OrientedBoundingRect(rect, transform) {\n this._corners = [];\n this._axes = [];\n this._origin = [0, 0];\n for (var i = 0; i < 4; i++) {\n this._corners[i] = new Point();\n }\n for (var i = 0; i < 2; i++) {\n this._axes[i] = new Point();\n }\n if (rect) {\n this.fromBoundingRect(rect, transform);\n }\n }\n OrientedBoundingRect.prototype.fromBoundingRect = function (rect, transform) {\n var corners = this._corners;\n var axes = this._axes;\n var x = rect.x;\n var y = rect.y;\n var x2 = x + rect.width;\n var y2 = y + rect.height;\n corners[0].set(x, y);\n corners[1].set(x2, y);\n corners[2].set(x2, y2);\n corners[3].set(x, y2);\n if (transform) {\n for (var i = 0; i < 4; i++) {\n corners[i].transform(transform);\n }\n }\n Point.sub(axes[0], corners[1], corners[0]);\n Point.sub(axes[1], corners[3], corners[0]);\n axes[0].normalize();\n axes[1].normalize();\n for (var i = 0; i < 2; i++) {\n this._origin[i] = axes[i].dot(corners[0]);\n }\n };\n OrientedBoundingRect.prototype.intersect = function (other, mtv) {\n var overlapped = true;\n var noMtv = !mtv;\n minTv.set(Infinity, Infinity);\n maxTv.set(0, 0);\n if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n if (!noMtv) {\n Point.copy(mtv, overlapped ? minTv : maxTv);\n }\n return overlapped;\n };\n OrientedBoundingRect.prototype._intersectCheckOneSide = function (self, other, minTv, maxTv, noMtv, inverse) {\n var overlapped = true;\n for (var i = 0; i < 2; i++) {\n var axis = this._axes[i];\n this._getProjMinMaxOnAxis(i, self._corners, extent);\n this._getProjMinMaxOnAxis(i, other._corners, extent2);\n if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n var dist0 = Math.abs(extent2[0] - extent[1]);\n var dist1 = Math.abs(extent[0] - extent2[1]);\n if (Math.min(dist0, dist1) > maxTv.len()) {\n if (dist0 < dist1) {\n Point.scale(maxTv, axis, -dist0 * inverse);\n }\n else {\n Point.scale(maxTv, axis, dist1 * inverse);\n }\n }\n }\n else if (minTv) {\n var dist0 = Math.abs(extent2[0] - extent[1]);\n var dist1 = Math.abs(extent[0] - extent2[1]);\n if (Math.min(dist0, dist1) < minTv.len()) {\n if (dist0 < dist1) {\n Point.scale(minTv, axis, dist0 * inverse);\n }\n else {\n Point.scale(minTv, axis, -dist1 * inverse);\n }\n }\n }\n }\n return overlapped;\n };\n OrientedBoundingRect.prototype._getProjMinMaxOnAxis = function (dim, corners, out) {\n var axis = this._axes[dim];\n var origin = this._origin;\n var proj = corners[0].dot(axis) + origin[dim];\n var min = proj;\n var max = proj;\n for (var i = 1; i < corners.length; i++) {\n var proj_1 = corners[i].dot(axis) + origin[dim];\n min = Math.min(proj_1, min);\n max = Math.max(proj_1, max);\n }\n out[0] = min;\n out[1] = max;\n };\n return OrientedBoundingRect;\n}());\nexport default OrientedBoundingRect;\n","import { isArray, isNumber } from '../../core/util';\nexport function normalizeLineDash(lineType, lineWidth) {\n if (!lineType || lineType === 'solid' || !(lineWidth > 0)) {\n return null;\n }\n lineWidth = lineWidth || 1;\n return lineType === 'dashed'\n ? [4 * lineWidth, 2 * lineWidth]\n : lineType === 'dotted'\n ? [lineWidth]\n : isNumber(lineType)\n ? [lineType] : isArray(lineType) ? lineType : null;\n}\n","import { create as v2Create, distSquare as v2DistSquare } from './vector';\nvar mathPow = Math.pow;\nvar mathSqrt = Math.sqrt;\nvar EPSILON = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\nvar THREE_SQRT = mathSqrt(3);\nvar ONE_THIRD = 1 / 3;\nvar _v0 = v2Create();\nvar _v1 = v2Create();\nvar _v2 = v2Create();\nfunction isAroundZero(val) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\nexport function cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1)\n + t * t * (t * p3 + 3 * onet * p2);\n}\nexport function cubicDerivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n + (p3 - p2) * t * t);\n}\nexport function cubicRootAt(p0, p1, p2, p3, val, roots) {\n var a = p3 + 3 * (p1 - p2) - p0;\n var b = 3 * (p2 - p1 * 2 + p0);\n var c = 3 * (p1 - p0);\n var d = p0 - val;\n var A = b * b - 3 * a * c;\n var B = b * c - 9 * a * d;\n var C = c * c - 3 * b * d;\n var n = 0;\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n }\n else {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n var disc = B * B - 4 * A * C;\n if (isAroundZero(disc)) {\n var K = B / A;\n var t1 = -b / a + K;\n var t2 = -K / 2;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n var Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -mathPow(-Y1, ONE_THIRD);\n }\n else {\n Y1 = mathPow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -mathPow(-Y2, ONE_THIRD);\n }\n else {\n Y2 = mathPow(Y2, ONE_THIRD);\n }\n var t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else {\n var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n var theta = Math.acos(T) / 3;\n var ASqrt = mathSqrt(A);\n var tmp = Math.cos(theta);\n var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\nexport function cubicExtrema(p0, p1, p2, p3, extrema) {\n var b = 6 * p2 - 12 * p1 + 6 * p0;\n var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n var c = 3 * p1 - 3 * p0;\n var n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\nexport function cubicSubdivide(p0, p1, p2, p3, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p23 = (p3 - p2) * t + p2;\n var p012 = (p12 - p01) * t + p01;\n var p123 = (p23 - p12) * t + p12;\n var p0123 = (p123 - p012) * t + p012;\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\nexport function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {\n var t;\n var interval = 0.005;\n var d = Infinity;\n var prev;\n var next;\n var d1;\n var d2;\n _v0[0] = x;\n _v0[1] = y;\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n d1 = v2DistSquare(_v1, _v0);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n return mathSqrt(d);\n}\nexport function cubicLength(x0, y0, x1, y1, x2, y2, x3, y3, iteration) {\n var px = x0;\n var py = y0;\n var d = 0;\n var step = 1 / iteration;\n for (var i = 1; i <= iteration; i++) {\n var t = i * step;\n var x = cubicAt(x0, x1, x2, x3, t);\n var y = cubicAt(y0, y1, y2, y3, t);\n var dx = x - px;\n var dy = y - py;\n d += Math.sqrt(dx * dx + dy * dy);\n px = x;\n py = y;\n }\n return d;\n}\nexport function quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\nexport function quadraticDerivativeAt(p0, p1, p2, t) {\n return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\nexport function quadraticRootAt(p0, p1, p2, val, roots) {\n var a = p0 - 2 * p1 + p2;\n var b = 2 * (p1 - p0);\n var c = p0 - val;\n var n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n var t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\nexport function quadraticExtremum(p0, p1, p2) {\n var divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n return 0.5;\n }\n else {\n return (p0 - p1) / divider;\n }\n}\nexport function quadraticSubdivide(p0, p1, p2, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p012 = (p12 - p01) * t + p01;\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p012;\n out[4] = p12;\n out[5] = p2;\n}\nexport function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {\n var t;\n var interval = 0.005;\n var d = Infinity;\n _v0[0] = x;\n _v0[1] = y;\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n var d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n var prev = t - interval;\n var next = t + interval;\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n var d1 = v2DistSquare(_v1, _v0);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n var d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n return mathSqrt(d);\n}\nexport function quadraticLength(x0, y0, x1, y1, x2, y2, iteration) {\n var px = x0;\n var py = y0;\n var d = 0;\n var step = 1 / iteration;\n for (var i = 1; i <= iteration; i++) {\n var t = i * step;\n var x = quadraticAt(x0, x1, x2, t);\n var y = quadraticAt(y0, y1, y2, t);\n var dx = x - px;\n var dy = y - py;\n d += Math.sqrt(dx * dx + dy * dy);\n px = x;\n py = y;\n }\n return d;\n}\n","var LN2 = Math.log(2);\nfunction determinant(rows, rank, rowStart, rowMask, colMask, detCache) {\n var cacheKey = rowMask + '-' + colMask;\n var fullRank = rows.length;\n if (detCache.hasOwnProperty(cacheKey)) {\n return detCache[cacheKey];\n }\n if (rank === 1) {\n var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n return rows[rowStart][colStart];\n }\n var subRowMask = rowMask | (1 << rowStart);\n var subRowStart = rowStart + 1;\n while (rowMask & (1 << subRowStart)) {\n subRowStart++;\n }\n var sum = 0;\n for (var j = 0, colLocalIdx = 0; j < fullRank; j++) {\n var colTag = 1 << j;\n if (!(colTag & colMask)) {\n sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n colLocalIdx++;\n }\n }\n detCache[cacheKey] = sum;\n return sum;\n}\nexport function buildTransformer(src, dest) {\n var mA = [\n [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n ];\n var detCache = {};\n var det = determinant(mA, 8, 0, 0, 0, detCache);\n if (det === 0) {\n return;\n }\n var vh = [];\n for (var i = 0; i < 8; i++) {\n for (var j = 0; j < 8; j++) {\n vh[j] == null && (vh[j] = 0);\n vh[j] += ((i + j) % 2 ? -1 : 1)\n * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n / det * dest[i];\n }\n }\n return function (out, srcPointX, srcPointY) {\n var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n };\n}\n","import env from './env';\nimport { buildTransformer } from './fourPointsTransform';\nvar EVENT_SAVED_PROP = '___zrEVENTSAVED';\nvar _calcOut = [];\nexport function transformLocalCoord(out, elFrom, elTarget, inX, inY) {\n return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)\n && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);\n}\nexport function transformCoordWithViewport(out, el, inX, inY, inverse) {\n if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {\n var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {});\n var markers = prepareCoordMarkers(el, saved);\n var transformer = preparePointerTransformer(markers, saved, inverse);\n if (transformer) {\n transformer(out, inX, inY);\n return true;\n }\n }\n return false;\n}\nfunction prepareCoordMarkers(el, saved) {\n var markers = saved.markers;\n if (markers) {\n return markers;\n }\n markers = saved.markers = [];\n var propLR = ['left', 'right'];\n var propTB = ['top', 'bottom'];\n for (var i = 0; i < 4; i++) {\n var marker = document.createElement('div');\n var stl = marker.style;\n var idxLR = i % 2;\n var idxTB = (i >> 1) % 2;\n stl.cssText = [\n 'position: absolute',\n 'visibility: hidden',\n 'padding: 0',\n 'margin: 0',\n 'border-width: 0',\n 'user-select: none',\n 'width:0',\n 'height:0',\n propLR[idxLR] + ':0',\n propTB[idxTB] + ':0',\n propLR[1 - idxLR] + ':auto',\n propTB[1 - idxTB] + ':auto',\n ''\n ].join('!important;');\n el.appendChild(marker);\n markers.push(marker);\n }\n return markers;\n}\nfunction preparePointerTransformer(markers, saved, inverse) {\n var transformerName = inverse ? 'invTrans' : 'trans';\n var transformer = saved[transformerName];\n var oldSrcCoords = saved.srcCoords;\n var srcCoords = [];\n var destCoords = [];\n var oldCoordTheSame = true;\n for (var i = 0; i < 4; i++) {\n var rect = markers[i].getBoundingClientRect();\n var ii = 2 * i;\n var x = rect.left;\n var y = rect.top;\n srcCoords.push(x, y);\n oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n }\n return (oldCoordTheSame && transformer)\n ? transformer\n : (saved.srcCoords = srcCoords,\n saved[transformerName] = inverse\n ? buildTransformer(destCoords, srcCoords)\n : buildTransformer(srcCoords, destCoords));\n}\nexport function isCanvasEl(el) {\n return el.nodeName.toUpperCase() === 'CANVAS';\n}\n","import BoundingRect from '../core/BoundingRect';\nimport { createCanvas } from '../core/util';\nimport LRU from '../core/LRU';\nvar textWidthCache = {};\nexport var DEFAULT_FONT = '12px sans-serif';\nvar _ctx;\nvar _cachedFont;\nfunction defaultMeasureText(text, font) {\n if (!_ctx) {\n _ctx = createCanvas().getContext('2d');\n }\n if (_cachedFont !== font) {\n _cachedFont = _ctx.font = font || DEFAULT_FONT;\n }\n return _ctx.measureText(text);\n}\nvar methods = {\n measureText: defaultMeasureText\n};\nexport function $override(name, fn) {\n methods[name] = fn;\n}\nexport function getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var cacheOfFont = textWidthCache[font];\n if (!cacheOfFont) {\n cacheOfFont = textWidthCache[font] = new LRU(500);\n }\n var width = cacheOfFont.get(text);\n if (width == null) {\n width = methods.measureText(text, font).width;\n cacheOfFont.put(text, width);\n }\n return width;\n}\nexport function innerGetBoundingRect(text, font, textAlign, textBaseline) {\n var width = getWidth(text, font);\n var height = getLineHeight(font);\n var x = adjustTextX(0, width, textAlign);\n var y = adjustTextY(0, height, textBaseline);\n var rect = new BoundingRect(x, y, width, height);\n return rect;\n}\nexport function getBoundingRect(text, font, textAlign, textBaseline) {\n var textLines = ((text || '') + '').split('\\n');\n var len = textLines.length;\n if (len === 1) {\n return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline);\n }\n else {\n var uniondRect = new BoundingRect(0, 0, 0, 0);\n for (var i = 0; i < textLines.length; i++) {\n var rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline);\n i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect);\n }\n return uniondRect;\n }\n}\nexport function adjustTextX(x, width, textAlign) {\n if (textAlign === 'right') {\n x -= width;\n }\n else if (textAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nexport function adjustTextY(y, height, verticalAlign) {\n if (verticalAlign === 'middle') {\n y -= height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y -= height;\n }\n return y;\n}\nexport function getLineHeight(font) {\n return getWidth('国', font);\n}\nexport function measureText(text, font) {\n return methods.measureText(text, font);\n}\nexport function parsePercent(value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n return parseFloat(value);\n }\n return value;\n}\nexport function calculateTextPosition(out, opts, rect) {\n var textPosition = opts.position || 'inside';\n var distance = opts.distance != null ? opts.distance : 5;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\n var x = rect.x;\n var y = rect.y;\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n if (textPosition instanceof Array) {\n x += parsePercent(textPosition[0], rect.width);\n y += parsePercent(textPosition[1], rect.height);\n textAlign = null;\n textVerticalAlign = null;\n }\n else {\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n }\n out = out || {};\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n return out;\n}\n","import { cubicSubdivide } from '../core/curve';\nimport PathProxy from '../core/PathProxy';\nvar CMD = PathProxy.CMD;\nfunction aroundEqual(a, b) {\n return Math.abs(a - b) < 1e-5;\n}\nexport function pathToBezierCurves(path) {\n var data = path.data;\n var len = path.len();\n var bezierArrayGroups = [];\n var currentSubpath;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n function createNewSubpath(x, y) {\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n }\n function addLine(x0, y0, x1, y1) {\n if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) {\n currentSubpath.push(x0, y0, x1, y1, x1, y1);\n }\n }\n function addArc(startAngle, endAngle, cx, cy, rx, ry) {\n var delta = Math.abs(endAngle - startAngle);\n var len = Math.tan(delta / 4) * 4 / 3;\n var dir = endAngle < startAngle ? -1 : 1;\n var c1 = Math.cos(startAngle);\n var s1 = Math.sin(startAngle);\n var c2 = Math.cos(endAngle);\n var s2 = Math.sin(endAngle);\n var x1 = c1 * rx + cx;\n var y1 = s1 * ry + cy;\n var x4 = c2 * rx + cx;\n var y4 = s2 * ry + cy;\n var hx = rx * len * dir;\n var hy = ry * len * dir;\n currentSubpath.push(x1 - hx * s1, y1 + hy * c1, x4 + hx * s2, y4 - hy * c2, x4, y4);\n }\n var x1;\n var y1;\n var x2;\n var y2;\n for (var i = 0; i < len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n if (cmd === CMD.L || cmd === CMD.C || cmd === CMD.Q) {\n currentSubpath = [x0, y0];\n }\n }\n switch (cmd) {\n case CMD.M:\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n createNewSubpath(x0, y0);\n break;\n case CMD.L:\n x1 = data[i++];\n y1 = data[i++];\n addLine(xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case CMD.C:\n currentSubpath.push(data[i++], data[i++], data[i++], data[i++], xi = data[i++], yi = data[i++]);\n break;\n case CMD.Q:\n x1 = data[i++];\n y1 = data[i++];\n x2 = data[i++];\n y2 = data[i++];\n currentSubpath.push(xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2);\n xi = x2;\n yi = y2;\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle;\n i += 1;\n var anticlockwise = !data[i++];\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * ry + cy;\n if (isFirst) {\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n }\n else {\n addLine(xi, yi, x1, y1);\n }\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * ry + cy;\n var step = (anticlockwise ? -1 : 1) * Math.PI / 2;\n for (var angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n var nextAngle = anticlockwise ? Math.max(angle + step, endAngle)\n : Math.min(angle + step, endAngle);\n addArc(angle, nextAngle, cx, cy, rx, ry);\n }\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n x1 = x0 + data[i++];\n y1 = y0 + data[i++];\n createNewSubpath(x1, y0);\n addLine(x1, y0, x1, y1);\n addLine(x1, y1, x0, y1);\n addLine(x0, y1, x0, y0);\n addLine(x0, y0, x1, y0);\n break;\n case CMD.Z:\n currentSubpath && addLine(xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n return bezierArrayGroups;\n}\nfunction adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, out, scale) {\n if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) {\n out.push(x3, y3);\n return;\n }\n var PIXEL_DISTANCE = 2 / scale;\n var PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE;\n var dx = x3 - x0;\n var dy = y3 - y0;\n var d = Math.sqrt(dx * dx + dy * dy);\n dx /= d;\n dy /= d;\n var dx1 = x1 - x0;\n var dy1 = y1 - y0;\n var dx2 = x2 - x3;\n var dy2 = y2 - y3;\n var cp1LenSqr = dx1 * dx1 + dy1 * dy1;\n var cp2LenSqr = dx2 * dx2 + dy2 * dy2;\n if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) {\n out.push(x3, y3);\n return;\n }\n var projLen1 = dx * dx1 + dy * dy1;\n var projLen2 = -dx * dx2 - dy * dy2;\n var d1Sqr = cp1LenSqr - projLen1 * projLen1;\n var d2Sqr = cp2LenSqr - projLen2 * projLen2;\n if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0\n && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0) {\n out.push(x3, y3);\n return;\n }\n var tmpSegX = [];\n var tmpSegY = [];\n cubicSubdivide(x0, x1, x2, x3, 0.5, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, 0.5, tmpSegY);\n adpativeBezier(tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3], out, scale);\n adpativeBezier(tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7], out, scale);\n}\nexport function pathToPolygons(path, scale) {\n var bezierArrayGroups = pathToBezierCurves(path);\n var polygons = [];\n scale = scale || 1;\n for (var i = 0; i < bezierArrayGroups.length; i++) {\n var beziers = bezierArrayGroups[i];\n var polygon = [];\n var x0 = beziers[0];\n var y0 = beziers[1];\n polygon.push(x0, y0);\n for (var k = 2; k < beziers.length;) {\n var x1 = beziers[k++];\n var y1 = beziers[k++];\n var x2 = beziers[k++];\n var y2 = beziers[k++];\n var x3 = beziers[k++];\n var y3 = beziers[k++];\n adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale);\n x0 = x3;\n y0 = y3;\n }\n polygons.push(polygon);\n }\n return polygons;\n}\n","import { fromPoints } from '../core/bbox';\nimport BoundingRect from '../core/BoundingRect';\nimport Point from '../core/Point';\nimport { map } from '../core/util';\nimport Polygon from '../graphic/shape/Polygon';\nimport Rect from '../graphic/shape/Rect';\nimport Sector from '../graphic/shape/Sector';\nimport { pathToPolygons } from './convertPath';\nimport { clonePath } from './path';\nfunction getDividingGrids(dimSize, rowDim, count) {\n var rowSize = dimSize[rowDim];\n var columnSize = dimSize[1 - rowDim];\n var ratio = Math.abs(rowSize / columnSize);\n var rowCount = Math.ceil(Math.sqrt(ratio * count));\n var columnCount = Math.floor(count / rowCount);\n if (columnCount === 0) {\n columnCount = 1;\n rowCount = count;\n }\n var grids = [];\n for (var i = 0; i < rowCount; i++) {\n grids.push(columnCount);\n }\n var currentCount = rowCount * columnCount;\n var remained = count - currentCount;\n if (remained > 0) {\n for (var i = 0; i < remained; i++) {\n grids[i % rowCount] += 1;\n }\n }\n return grids;\n}\nfunction divideSector(sectorShape, count, outShapes) {\n var r0 = sectorShape.r0;\n var r = sectorShape.r;\n var startAngle = sectorShape.startAngle;\n var endAngle = sectorShape.endAngle;\n var angle = Math.abs(endAngle - startAngle);\n var arcLen = angle * r;\n var deltaR = r - r0;\n var isAngleRow = arcLen > Math.abs(deltaR);\n var grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count);\n var rowSize = (isAngleRow ? angle : deltaR) / grids.length;\n for (var row = 0; row < grids.length; row++) {\n var columnSize = (isAngleRow ? deltaR : angle) / grids[row];\n for (var column = 0; column < grids[row]; column++) {\n var newShape = {};\n if (isAngleRow) {\n newShape.startAngle = startAngle + rowSize * row;\n newShape.endAngle = startAngle + rowSize * (row + 1);\n newShape.r0 = r0 + columnSize * column;\n newShape.r = r0 + columnSize * (column + 1);\n }\n else {\n newShape.startAngle = startAngle + columnSize * column;\n newShape.endAngle = startAngle + columnSize * (column + 1);\n newShape.r0 = r0 + rowSize * row;\n newShape.r = r0 + rowSize * (row + 1);\n }\n newShape.clockwise = sectorShape.clockwise;\n newShape.cx = sectorShape.cx;\n newShape.cy = sectorShape.cy;\n outShapes.push(newShape);\n }\n }\n}\nfunction divideRect(rectShape, count, outShapes) {\n var width = rectShape.width;\n var height = rectShape.height;\n var isHorizontalRow = width > height;\n var grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count);\n var rowSizeDim = isHorizontalRow ? 'width' : 'height';\n var columnSizeDim = isHorizontalRow ? 'height' : 'width';\n var rowDim = isHorizontalRow ? 'x' : 'y';\n var columnDim = isHorizontalRow ? 'y' : 'x';\n var rowSize = rectShape[rowSizeDim] / grids.length;\n for (var row = 0; row < grids.length; row++) {\n var columnSize = rectShape[columnSizeDim] / grids[row];\n for (var column = 0; column < grids[row]; column++) {\n var newShape = {};\n newShape[rowDim] = row * rowSize;\n newShape[columnDim] = column * columnSize;\n newShape[rowSizeDim] = rowSize;\n newShape[columnSizeDim] = columnSize;\n newShape.x += rectShape.x;\n newShape.y += rectShape.y;\n outShapes.push(newShape);\n }\n }\n}\nfunction crossProduct2d(x1, y1, x2, y2) {\n return x1 * y2 - x2 * y1;\n}\nfunction lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n var mx = a2x - a1x;\n var my = a2y - a1y;\n var nx = b2x - b1x;\n var ny = b2y - b1y;\n var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n if (Math.abs(nmCrossProduct) < 1e-6) {\n return null;\n }\n var b1a1x = a1x - b1x;\n var b1a1y = a1y - b1y;\n var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n if (p < 0 || p > 1) {\n return null;\n }\n return new Point(p * mx + a1x, p * my + a1y);\n}\nfunction projPtOnLine(pt, lineA, lineB) {\n var dir = new Point();\n Point.sub(dir, lineB, lineA);\n dir.normalize();\n var dir2 = new Point();\n Point.sub(dir2, pt, lineA);\n var len = dir2.dot(dir);\n return len;\n}\nfunction addToPoly(poly, pt) {\n var last = poly[poly.length - 1];\n if (last && last[0] === pt[0] && last[1] === pt[1]) {\n return;\n }\n poly.push(pt);\n}\nfunction splitPolygonByLine(points, lineA, lineB) {\n var len = points.length;\n var intersections = [];\n for (var i = 0; i < len; i++) {\n var p0 = points[i];\n var p1 = points[(i + 1) % len];\n var intersectionPt = lineLineIntersect(p0[0], p0[1], p1[0], p1[1], lineA.x, lineA.y, lineB.x, lineB.y);\n if (intersectionPt) {\n intersections.push({\n projPt: projPtOnLine(intersectionPt, lineA, lineB),\n pt: intersectionPt,\n idx: i\n });\n }\n }\n if (intersections.length < 2) {\n return [{ points: points }, { points: points }];\n }\n intersections.sort(function (a, b) {\n return a.projPt - b.projPt;\n });\n var splitPt0 = intersections[0];\n var splitPt1 = intersections[intersections.length - 1];\n if (splitPt1.idx < splitPt0.idx) {\n var tmp = splitPt0;\n splitPt0 = splitPt1;\n splitPt1 = tmp;\n }\n var splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y];\n var splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y];\n var newPolyA = [splitPt0Arr];\n var newPolyB = [splitPt1Arr];\n for (var i = splitPt0.idx + 1; i <= splitPt1.idx; i++) {\n addToPoly(newPolyA, points[i].slice());\n }\n addToPoly(newPolyA, splitPt1Arr);\n addToPoly(newPolyA, splitPt0Arr);\n for (var i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) {\n addToPoly(newPolyB, points[i % len].slice());\n }\n addToPoly(newPolyB, splitPt0Arr);\n addToPoly(newPolyB, splitPt1Arr);\n return [{\n points: newPolyA\n }, {\n points: newPolyB\n }];\n}\nfunction binaryDividePolygon(polygonShape) {\n var points = polygonShape.points;\n var min = [];\n var max = [];\n fromPoints(points, min, max);\n var boundingRect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n var width = boundingRect.width;\n var height = boundingRect.height;\n var x = boundingRect.x;\n var y = boundingRect.y;\n var pt0 = new Point();\n var pt1 = new Point();\n if (width > height) {\n pt0.x = pt1.x = x + width / 2;\n pt0.y = y;\n pt1.y = y + height;\n }\n else {\n pt0.y = pt1.y = y + height / 2;\n pt0.x = x;\n pt1.x = x + width;\n }\n return splitPolygonByLine(points, pt0, pt1);\n}\nfunction binaryDivideRecursive(divider, shape, count, out) {\n if (count === 1) {\n out.push(shape);\n }\n else {\n var mid = Math.floor(count / 2);\n var sub = divider(shape);\n binaryDivideRecursive(divider, sub[0], mid, out);\n binaryDivideRecursive(divider, sub[1], count - mid, out);\n }\n return out;\n}\nexport function clone(path, count) {\n var paths = [];\n for (var i = 0; i < count; i++) {\n paths.push(clonePath(path));\n }\n return paths;\n}\nfunction copyPathProps(source, target) {\n target.setStyle(source.style);\n target.z = source.z;\n target.z2 = source.z2;\n target.zlevel = source.zlevel;\n}\nfunction polygonConvert(points) {\n var out = [];\n for (var i = 0; i < points.length;) {\n out.push([points[i++], points[i++]]);\n }\n return out;\n}\nexport function split(path, count) {\n var outShapes = [];\n var shape = path.shape;\n var OutShapeCtor;\n switch (path.type) {\n case 'rect':\n divideRect(shape, count, outShapes);\n OutShapeCtor = Rect;\n break;\n case 'sector':\n divideSector(shape, count, outShapes);\n OutShapeCtor = Sector;\n break;\n case 'circle':\n divideSector({\n r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2,\n cx: shape.cx, cy: shape.cy\n }, count, outShapes);\n OutShapeCtor = Sector;\n break;\n default:\n var m = path.getComputedTransform();\n var scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1;\n var polygons = map(pathToPolygons(path.getUpdatedPathProxy(), scale), function (poly) { return polygonConvert(poly); });\n var polygonCount = polygons.length;\n if (polygonCount === 0) {\n binaryDivideRecursive(binaryDividePolygon, {\n points: polygons[0]\n }, count, outShapes);\n }\n else if (polygonCount === count) {\n for (var i = 0; i < polygonCount; i++) {\n outShapes.push({\n points: polygons[i]\n });\n }\n }\n else {\n var totalArea_1 = 0;\n var items = map(polygons, function (poly) {\n var min = [];\n var max = [];\n fromPoints(poly, min, max);\n var area = (max[1] - min[1]) * (max[0] - min[0]);\n totalArea_1 += area;\n return { poly: poly, area: area };\n });\n items.sort(function (a, b) { return b.area - a.area; });\n var left = count;\n for (var i = 0; i < polygonCount; i++) {\n var item = items[i];\n if (left <= 0) {\n break;\n }\n var selfCount = i === polygonCount - 1\n ? left\n : Math.ceil(item.area / totalArea_1 * count);\n if (selfCount < 0) {\n continue;\n }\n binaryDivideRecursive(binaryDividePolygon, {\n points: item.poly\n }, selfCount, outShapes);\n left -= selfCount;\n }\n ;\n }\n OutShapeCtor = Polygon;\n break;\n }\n if (!OutShapeCtor) {\n return clone(path, count);\n }\n var out = [];\n for (var i = 0; i < outShapes.length; i++) {\n var subPath = new OutShapeCtor();\n subPath.setShape(outShapes[i]);\n copyPathProps(path, subPath);\n out.push(subPath);\n }\n return out;\n}\n","import { cubicSubdivide } from '../core/curve';\nimport Path from '../graphic/Path';\nimport { defaults, map } from '../core/util';\nimport { lerp } from '../core/vector';\nimport { clonePath } from './path';\nimport Transformable from '../core/Transformable';\nimport { split } from './dividePath';\nimport { pathToBezierCurves } from './convertPath';\nfunction alignSubpath(subpath1, subpath2) {\n var len1 = subpath1.length;\n var len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n var tmpSegX = [];\n var tmpSegY = [];\n var shorterPath = len1 < len2 ? subpath1 : subpath2;\n var shorterLen = Math.min(len1, len2);\n var diff = Math.abs(len2 - len1) / 6;\n var shorterBezierCount = (shorterLen - 2) / 6;\n var eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1;\n var newSubpath = [shorterPath[0], shorterPath[1]];\n var remained = diff;\n for (var i = 2; i < shorterLen;) {\n var x0 = shorterPath[i - 2];\n var y0 = shorterPath[i - 1];\n var x1 = shorterPath[i++];\n var y1 = shorterPath[i++];\n var x2 = shorterPath[i++];\n var y2 = shorterPath[i++];\n var x3 = shorterPath[i++];\n var y3 = shorterPath[i++];\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n var actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1;\n for (var k = 1; k <= actualSubDivCount; k++) {\n var p = k / actualSubDivCount;\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n }\n remained -= actualSubDivCount - 1;\n }\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\nfunction createSubpath(lastSubpathSubpath, otherSubpath) {\n var len = lastSubpathSubpath.length;\n var lastX = lastSubpathSubpath[len - 2];\n var lastY = lastSubpathSubpath[len - 1];\n var newSubpath = [];\n for (var i = 0; i < otherSubpath.length;) {\n newSubpath[i++] = lastX;\n newSubpath[i++] = lastY;\n }\n return newSubpath;\n}\nexport function alignBezierCurves(array1, array2) {\n var _a;\n var lastSubpath1;\n var lastSubpath2;\n var newArray1 = [];\n var newArray2 = [];\n for (var i = 0; i < Math.max(array1.length, array2.length); i++) {\n var subpath1 = array1[i];\n var subpath2 = array2[i];\n var newSubpath1 = void 0;\n var newSubpath2 = void 0;\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2);\n newSubpath2 = subpath2;\n }\n else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1);\n newSubpath1 = subpath1;\n }\n else {\n _a = alignSubpath(subpath1, subpath2), newSubpath1 = _a[0], newSubpath2 = _a[1];\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n return [newArray1, newArray2];\n}\nexport function centroid(array) {\n var signedArea = 0;\n var cx = 0;\n var cy = 0;\n var len = array.length;\n for (var i = 0, j = len - 2; i < len; j = i, i += 2) {\n var x0 = array[j];\n var y0 = array[j + 1];\n var x1 = array[i];\n var y1 = array[i + 1];\n var a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0];\n }\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\nfunction findBestRingOffset(fromSubBeziers, toSubBeziers, fromCp, toCp) {\n var bezierCount = (fromSubBeziers.length - 2) / 6;\n var bestScore = Infinity;\n var bestOffset = 0;\n var len = fromSubBeziers.length;\n var len2 = len - 2;\n for (var offset = 0; offset < bezierCount; offset++) {\n var cursorOffset = offset * 6;\n var score = 0;\n for (var k = 0; k < len; k += 2) {\n var idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2 + 2);\n var x0 = fromSubBeziers[idx] - fromCp[0];\n var y0 = fromSubBeziers[idx + 1] - fromCp[1];\n var x1 = toSubBeziers[k] - toCp[0];\n var y1 = toSubBeziers[k + 1] - toCp[1];\n var dx = x1 - x0;\n var dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n return bestOffset;\n}\nfunction reverse(array) {\n var newArr = [];\n var len = array.length;\n for (var i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\nfunction findBestMorphingRotation(fromArr, toArr, searchAngleIteration, searchAngleRange) {\n var result = [];\n var fromNeedsReverse;\n for (var i = 0; i < fromArr.length; i++) {\n var fromSubpathBezier = fromArr[i];\n var toSubpathBezier = toArr[i];\n var fromCp = centroid(fromSubpathBezier);\n var toCp = centroid(toSubpathBezier);\n if (fromNeedsReverse == null) {\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n var newFromSubpathBezier = [];\n var newToSubpathBezier = [];\n var bestAngle = 0;\n var bestScore = Infinity;\n var tmpArr = [];\n var len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n fromSubpathBezier = reverse(fromSubpathBezier);\n }\n var offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n var len2 = len - 2;\n for (var k = 0; k < len2; k += 2) {\n var idx = (offset + k) % len2 + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n if (searchAngleIteration > 0) {\n var step = searchAngleRange / searchAngleIteration;\n for (var angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n var sa = Math.sin(angle);\n var ca = Math.cos(angle);\n var score = 0;\n for (var k = 0; k < fromSubpathBezier.length; k += 2) {\n var x0 = newFromSubpathBezier[k];\n var y0 = newFromSubpathBezier[k + 1];\n var x1 = toSubpathBezier[k] - toCp[0];\n var y1 = toSubpathBezier[k + 1] - toCp[1];\n var newX1 = x1 * ca - y1 * sa;\n var newY1 = x1 * sa + y1 * ca;\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n var dx = newX1 - x0;\n var dy = newY1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n for (var m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n }\n else {\n for (var i_1 = 0; i_1 < len; i_1 += 2) {\n newToSubpathBezier[i_1] = toSubpathBezier[i_1] - toCp[0];\n newToSubpathBezier[i_1 + 1] = toSubpathBezier[i_1 + 1] - toCp[1];\n }\n }\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp: fromCp,\n toCp: toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\nexport function isCombineMorphing(path) {\n return path.__isCombineMorphing;\n}\nexport function isMorphing(el) {\n return el.__morphT >= 0;\n}\nvar SAVED_METHOD_PREFIX = '__mOriginal_';\nfunction saveAndModifyMethod(obj, methodName, modifiers) {\n var savedMethodName = SAVED_METHOD_PREFIX + methodName;\n var originalMethod = obj[savedMethodName] || obj[methodName];\n if (!obj[savedMethodName]) {\n obj[savedMethodName] = obj[methodName];\n }\n var replace = modifiers.replace;\n var after = modifiers.after;\n var before = modifiers.before;\n obj[methodName] = function () {\n var args = arguments;\n var res;\n before && before.apply(this, args);\n if (replace) {\n res = replace.apply(this, args);\n }\n else {\n res = originalMethod.apply(this, args);\n }\n after && after.apply(this, args);\n return res;\n };\n}\nfunction restoreMethod(obj, methodName) {\n var savedMethodName = SAVED_METHOD_PREFIX + methodName;\n if (obj[savedMethodName]) {\n obj[methodName] = obj[savedMethodName];\n obj[savedMethodName] = null;\n }\n}\nfunction applyTransformOnBeziers(bezierCurves, mm) {\n for (var i = 0; i < bezierCurves.length; i++) {\n var subBeziers = bezierCurves[i];\n for (var k = 0; k < subBeziers.length;) {\n var x = subBeziers[k];\n var y = subBeziers[k + 1];\n subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4];\n subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5];\n }\n }\n}\nfunction prepareMorphPath(fromPath, toPath) {\n var fromPathProxy = fromPath.getUpdatedPathProxy();\n var toPathProxy = toPath.getUpdatedPathProxy();\n var _a = alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy)), fromBezierCurves = _a[0], toBezierCurves = _a[1];\n var fromPathTransform = fromPath.getComputedTransform();\n var toPathTransform = toPath.getComputedTransform();\n function updateIdentityTransform() {\n this.transform = null;\n }\n fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform);\n toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform);\n saveAndModifyMethod(toPath, 'updateTransform', { replace: updateIdentityTransform });\n toPath.transform = null;\n var morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI);\n var tmpArr = [];\n saveAndModifyMethod(toPath, 'buildPath', { replace: function (path) {\n var t = toPath.__morphT;\n var onet = 1 - t;\n var newCp = [];\n for (var i = 0; i < morphingData.length; i++) {\n var item = morphingData[i];\n var from = item.from;\n var to = item.to;\n var angle = item.rotation * t;\n var fromCp = item.fromCp;\n var toCp = item.toCp;\n var sa = Math.sin(angle);\n var ca = Math.cos(angle);\n lerp(newCp, fromCp, toCp, t);\n for (var m = 0; m < from.length; m += 2) {\n var x0_1 = from[m];\n var y0_1 = from[m + 1];\n var x1 = to[m];\n var y1 = to[m + 1];\n var x = x0_1 * onet + x1 * t;\n var y = y0_1 * onet + y1 * t;\n tmpArr[m] = (x * ca - y * sa) + newCp[0];\n tmpArr[m + 1] = (x * sa + y * ca) + newCp[1];\n }\n var x0 = tmpArr[0];\n var y0 = tmpArr[1];\n path.moveTo(x0, y0);\n for (var m = 2; m < from.length;) {\n var x1 = tmpArr[m++];\n var y1 = tmpArr[m++];\n var x2 = tmpArr[m++];\n var y2 = tmpArr[m++];\n var x3 = tmpArr[m++];\n var y3 = tmpArr[m++];\n if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\n path.lineTo(x3, y3);\n }\n else {\n path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n x0 = x3;\n y0 = y3;\n }\n }\n } });\n}\nexport function morphPath(fromPath, toPath, animationOpts) {\n if (!fromPath || !toPath) {\n return toPath;\n }\n var oldDone = animationOpts.done;\n var oldDuring = animationOpts.during;\n prepareMorphPath(fromPath, toPath);\n toPath.__morphT = 0;\n function restoreToPath() {\n restoreMethod(toPath, 'buildPath');\n restoreMethod(toPath, 'updateTransform');\n toPath.__morphT = -1;\n toPath.createPathProxy();\n toPath.dirtyShape();\n }\n toPath.animateTo({\n __morphT: 1\n }, defaults({\n during: function (p) {\n toPath.dirtyShape();\n oldDuring && oldDuring(p);\n },\n done: function () {\n restoreToPath();\n oldDone && oldDone();\n }\n }, animationOpts));\n return toPath;\n}\nfunction hilbert(x, y, minX, minY, maxX, maxY) {\n var bits = 16;\n x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX));\n y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY));\n var d = 0;\n var tmp;\n for (var s = (1 << bits) / 2; s > 0; s /= 2) {\n var rx = 0;\n var ry = 0;\n if ((x & s) > 0) {\n rx = 1;\n }\n if ((y & s) > 0) {\n ry = 1;\n }\n d += s * s * ((3 * rx) ^ ry);\n if (ry === 0) {\n if (rx === 1) {\n x = s - 1 - x;\n y = s - 1 - y;\n }\n tmp = x;\n x = y;\n y = tmp;\n }\n }\n return d;\n}\nfunction sortPaths(pathList) {\n var xMin = Infinity;\n var yMin = Infinity;\n var xMax = -Infinity;\n var yMax = -Infinity;\n var cps = map(pathList, function (path) {\n var rect = path.getBoundingRect();\n var m = path.getComputedTransform();\n var x = rect.x + rect.width / 2 + (m ? m[4] : 0);\n var y = rect.y + rect.height / 2 + (m ? m[5] : 0);\n xMin = Math.min(x, xMin);\n yMin = Math.min(y, yMin);\n xMax = Math.max(x, xMax);\n yMax = Math.max(y, yMax);\n return [x, y];\n });\n var items = map(cps, function (cp, idx) {\n return {\n cp: cp,\n z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax),\n path: pathList[idx]\n };\n });\n return items.sort(function (a, b) { return a.z - b.z; }).map(function (item) { return item.path; });\n}\n;\nfunction defaultDividePath(param) {\n return split(param.path, param.count);\n}\nfunction createEmptyReturn() {\n return {\n fromIndividuals: [],\n toIndividuals: [],\n count: 0\n };\n}\nexport function combineMorph(fromList, toPath, animationOpts) {\n var fromPathList = [];\n function addFromPath(fromList) {\n for (var i = 0; i < fromList.length; i++) {\n var from = fromList[i];\n if (isCombineMorphing(from)) {\n addFromPath(from.childrenRef());\n }\n else if (from instanceof Path) {\n fromPathList.push(from);\n }\n }\n }\n addFromPath(fromList);\n var separateCount = fromPathList.length;\n if (!separateCount) {\n return createEmptyReturn();\n }\n var dividePath = animationOpts.dividePath || defaultDividePath;\n var toSubPathList = dividePath({\n path: toPath, count: separateCount\n });\n if (toSubPathList.length !== separateCount) {\n console.error('Invalid morphing: unmatched splitted path');\n return createEmptyReturn();\n }\n fromPathList = sortPaths(fromPathList);\n toSubPathList = sortPaths(toSubPathList);\n var oldDone = animationOpts.done;\n var oldDuring = animationOpts.during;\n var individualDelay = animationOpts.individualDelay;\n var identityTransform = new Transformable();\n for (var i = 0; i < separateCount; i++) {\n var from = fromPathList[i];\n var to = toSubPathList[i];\n to.parent = toPath;\n to.copyTransform(identityTransform);\n if (!individualDelay) {\n prepareMorphPath(from, to);\n }\n }\n toPath.__isCombineMorphing = true;\n toPath.childrenRef = function () {\n return toSubPathList;\n };\n function addToSubPathListToZr(zr) {\n for (var i = 0; i < toSubPathList.length; i++) {\n toSubPathList[i].addSelfToZr(zr);\n }\n }\n saveAndModifyMethod(toPath, 'addSelfToZr', {\n after: function (zr) {\n addToSubPathListToZr(zr);\n }\n });\n saveAndModifyMethod(toPath, 'removeSelfFromZr', {\n after: function (zr) {\n for (var i = 0; i < toSubPathList.length; i++) {\n toSubPathList[i].removeSelfFromZr(zr);\n }\n }\n });\n function restoreToPath() {\n toPath.__isCombineMorphing = false;\n toPath.__morphT = -1;\n toPath.childrenRef = null;\n restoreMethod(toPath, 'addSelfToZr');\n restoreMethod(toPath, 'removeSelfFromZr');\n }\n var toLen = toSubPathList.length;\n if (individualDelay) {\n var animating_1 = toLen;\n var eachDone = function () {\n animating_1--;\n if (animating_1 === 0) {\n restoreToPath();\n oldDone && oldDone();\n }\n };\n for (var i = 0; i < toLen; i++) {\n var indivdualAnimationOpts = individualDelay ? defaults({\n delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]),\n done: eachDone\n }, animationOpts) : animationOpts;\n morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts);\n }\n }\n else {\n toPath.__morphT = 0;\n toPath.animateTo({\n __morphT: 1\n }, defaults({\n during: function (p) {\n for (var i = 0; i < toLen; i++) {\n var child = toSubPathList[i];\n child.__morphT = toPath.__morphT;\n child.dirtyShape();\n }\n oldDuring && oldDuring(p);\n },\n done: function () {\n restoreToPath();\n for (var i = 0; i < fromList.length; i++) {\n restoreMethod(fromList[i], 'updateTransform');\n }\n oldDone && oldDone();\n }\n }, animationOpts));\n }\n if (toPath.__zr) {\n addToSubPathListToZr(toPath.__zr);\n }\n return {\n fromIndividuals: fromPathList,\n toIndividuals: toSubPathList,\n count: toLen\n };\n}\nexport function separateMorph(fromPath, toPathList, animationOpts) {\n var toLen = toPathList.length;\n var fromPathList = [];\n var dividePath = animationOpts.dividePath || defaultDividePath;\n function addFromPath(fromList) {\n for (var i = 0; i < fromList.length; i++) {\n var from = fromList[i];\n if (isCombineMorphing(from)) {\n addFromPath(from.childrenRef());\n }\n else if (from instanceof Path) {\n fromPathList.push(from);\n }\n }\n }\n if (isCombineMorphing(fromPath)) {\n addFromPath(fromPath.childrenRef());\n var fromLen = fromPathList.length;\n if (fromLen < toLen) {\n var k = 0;\n for (var i = fromLen; i < toLen; i++) {\n fromPathList.push(clonePath(fromPathList[k++ % fromLen]));\n }\n }\n fromPathList.length = toLen;\n }\n else {\n fromPathList = dividePath({ path: fromPath, count: toLen });\n var fromPathTransform = fromPath.getComputedTransform();\n for (var i = 0; i < fromPathList.length; i++) {\n fromPathList[i].setLocalTransform(fromPathTransform);\n }\n if (fromPathList.length !== toLen) {\n console.error('Invalid morphing: unmatched splitted path');\n return createEmptyReturn();\n }\n }\n fromPathList = sortPaths(fromPathList);\n toPathList = sortPaths(toPathList);\n var individualDelay = animationOpts.individualDelay;\n for (var i = 0; i < toLen; i++) {\n var indivdualAnimationOpts = individualDelay ? defaults({\n delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i])\n }, animationOpts) : animationOpts;\n morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts);\n }\n return {\n fromIndividuals: fromPathList,\n toIndividuals: toPathList,\n count: toPathList.length\n };\n}\nexport { split as defaultDividePath };\n","import { __extends } from \"tslib\";\nimport Gradient from './Gradient';\nvar RadialGradient = (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient(x, y, r, colorStops, globalCoord) {\n var _this = _super.call(this, colorStops) || this;\n _this.x = x == null ? 0.5 : x;\n _this.y = y == null ? 0.5 : y;\n _this.r = r == null ? 0.5 : r;\n _this.type = 'radial';\n _this.global = globalCoord || false;\n return _this;\n }\n return RadialGradient;\n}(Gradient));\nexport default RadialGradient;\n","import Transformable from './core/Transformable';\nimport Animator, { cloneValue } from './animation/Animator';\nimport BoundingRect from './core/BoundingRect';\nimport Eventful from './core/Eventful';\nimport { calculateTextPosition, parsePercent } from './contain/text';\nimport { guid, isObject, keys, extend, indexOf, logError, mixin, isArrayLike, isTypedArray } from './core/util';\nimport { LIGHT_LABEL_COLOR, DARK_LABEL_COLOR } from './config';\nimport { parse, stringify } from './tool/color';\nimport env from './core/env';\nimport { REDARAW_BIT } from './graphic/constants';\nexport var PRESERVED_NORMAL_STATE = '__zr_normal__';\nvar PRIMARY_STATES_KEYS = ['x', 'y', 'scaleX', 'scaleY', 'originX', 'originY', 'rotation', 'ignore'];\nvar DEFAULT_ANIMATABLE_MAP = {\n x: true,\n y: true,\n scaleX: true,\n scaleY: true,\n originX: true,\n originY: true,\n rotation: true,\n ignore: false\n};\nvar tmpTextPosCalcRes = {};\nvar tmpBoundingRect = new BoundingRect(0, 0, 0, 0);\nvar Element = (function () {\n function Element(props) {\n this.id = guid();\n this.animators = [];\n this.currentStates = [];\n this.states = {};\n this._init(props);\n }\n Element.prototype._init = function (props) {\n this.attr(props);\n };\n Element.prototype.drift = function (dx, dy, e) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n case 'vertical':\n dx = 0;\n break;\n }\n var m = this.transform;\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.markRedraw();\n };\n Element.prototype.beforeUpdate = function () { };\n Element.prototype.afterUpdate = function () { };\n Element.prototype.update = function () {\n this.updateTransform();\n if (this.__dirty) {\n this.updateInnerText();\n }\n };\n Element.prototype.updateInnerText = function (forceUpdate) {\n var textEl = this._textContent;\n if (textEl && (!textEl.ignore || forceUpdate)) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n var textConfig = this.textConfig;\n var isLocal = textConfig.local;\n var innerTransformable = textEl.innerTransformable;\n var textAlign = void 0;\n var textVerticalAlign = void 0;\n var textStyleChanged = false;\n innerTransformable.parent = isLocal ? this : null;\n var innerOrigin = false;\n innerTransformable.copyTransform(textEl);\n if (textConfig.position != null) {\n var layoutRect = tmpBoundingRect;\n if (textConfig.layoutRect) {\n layoutRect.copy(textConfig.layoutRect);\n }\n else {\n layoutRect.copy(this.getBoundingRect());\n }\n if (!isLocal) {\n layoutRect.applyTransform(this.transform);\n }\n if (this.calculateTextPosition) {\n this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n else {\n calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n innerTransformable.x = tmpTextPosCalcRes.x;\n innerTransformable.y = tmpTextPosCalcRes.y;\n textAlign = tmpTextPosCalcRes.align;\n textVerticalAlign = tmpTextPosCalcRes.verticalAlign;\n var textOrigin = textConfig.origin;\n if (textOrigin && textConfig.rotation != null) {\n var relOriginX = void 0;\n var relOriginY = void 0;\n if (textOrigin === 'center') {\n relOriginX = layoutRect.width * 0.5;\n relOriginY = layoutRect.height * 0.5;\n }\n else {\n relOriginX = parsePercent(textOrigin[0], layoutRect.width);\n relOriginY = parsePercent(textOrigin[1], layoutRect.height);\n }\n innerOrigin = true;\n innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x);\n innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y);\n }\n }\n if (textConfig.rotation != null) {\n innerTransformable.rotation = textConfig.rotation;\n }\n var textOffset = textConfig.offset;\n if (textOffset) {\n innerTransformable.x += textOffset[0];\n innerTransformable.y += textOffset[1];\n if (!innerOrigin) {\n innerTransformable.originX = -textOffset[0];\n innerTransformable.originY = -textOffset[1];\n }\n }\n var isInside = textConfig.inside == null\n ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0)\n : textConfig.inside;\n var innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {});\n var textFill = void 0;\n var textStroke = void 0;\n var autoStroke = void 0;\n if (isInside && this.canBeInsideText()) {\n textFill = textConfig.insideFill;\n textStroke = textConfig.insideStroke;\n if (textFill == null || textFill === 'auto') {\n textFill = this.getInsideTextFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getInsideTextStroke(textFill);\n autoStroke = true;\n }\n }\n else {\n textFill = textConfig.outsideFill;\n textStroke = textConfig.outsideStroke;\n if (textFill == null || textFill === 'auto') {\n textFill = this.getOutsideFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getOutsideStroke(textFill);\n autoStroke = true;\n }\n }\n textFill = textFill || '#000';\n if (textFill !== innerTextDefaultStyle.fill\n || textStroke !== innerTextDefaultStyle.stroke\n || autoStroke !== innerTextDefaultStyle.autoStroke\n || textAlign !== innerTextDefaultStyle.align\n || textVerticalAlign !== innerTextDefaultStyle.verticalAlign) {\n textStyleChanged = true;\n innerTextDefaultStyle.fill = textFill;\n innerTextDefaultStyle.stroke = textStroke;\n innerTextDefaultStyle.autoStroke = autoStroke;\n innerTextDefaultStyle.align = textAlign;\n innerTextDefaultStyle.verticalAlign = textVerticalAlign;\n textEl.setDefaultTextStyle(innerTextDefaultStyle);\n }\n textEl.__dirty |= REDARAW_BIT;\n if (textStyleChanged) {\n textEl.dirtyStyle(true);\n }\n }\n };\n Element.prototype.canBeInsideText = function () {\n return true;\n };\n Element.prototype.getInsideTextFill = function () {\n return '#fff';\n };\n Element.prototype.getInsideTextStroke = function (textFill) {\n return '#000';\n };\n Element.prototype.getOutsideFill = function () {\n return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR;\n };\n Element.prototype.getOutsideStroke = function (textFill) {\n var backgroundColor = this.__zr && this.__zr.getBackgroundColor();\n var colorArr = typeof backgroundColor === 'string' && parse(backgroundColor);\n if (!colorArr) {\n colorArr = [255, 255, 255, 1];\n }\n var alpha = colorArr[3];\n var isDark = this.__zr.isDarkMode();\n for (var i = 0; i < 3; i++) {\n colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha);\n }\n colorArr[3] = 1;\n return stringify(colorArr, 'rgba');\n };\n Element.prototype.traverse = function (cb, context) { };\n Element.prototype.attrKV = function (key, value) {\n if (key === 'textConfig') {\n this.setTextConfig(value);\n }\n else if (key === 'textContent') {\n this.setTextContent(value);\n }\n else if (key === 'clipPath') {\n this.setClipPath(value);\n }\n else if (key === 'extra') {\n this.extra = this.extra || {};\n extend(this.extra, value);\n }\n else {\n this[key] = value;\n }\n };\n Element.prototype.hide = function () {\n this.ignore = true;\n this.markRedraw();\n };\n Element.prototype.show = function () {\n this.ignore = false;\n this.markRedraw();\n };\n Element.prototype.attr = function (keyOrObj, value) {\n if (typeof keyOrObj === 'string') {\n this.attrKV(keyOrObj, value);\n }\n else if (isObject(keyOrObj)) {\n var obj = keyOrObj;\n var keysArr = keys(obj);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n this.attrKV(key, keyOrObj[key]);\n }\n }\n this.markRedraw();\n return this;\n };\n Element.prototype.saveCurrentToNormalState = function (toState) {\n this._innerSaveToNormal(toState);\n var normalState = this._normalState;\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n var fromStateTransition = animator.__fromStateTransition;\n if (fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) {\n continue;\n }\n var targetName = animator.targetName;\n var target = targetName\n ? normalState[targetName] : normalState;\n animator.saveFinalToTarget(target);\n }\n };\n Element.prototype._innerSaveToNormal = function (toState) {\n var normalState = this._normalState;\n if (!normalState) {\n normalState = this._normalState = {};\n }\n if (toState.textConfig && !normalState.textConfig) {\n normalState.textConfig = this.textConfig;\n }\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n };\n Element.prototype._savePrimaryToNormal = function (toState, normalState, primaryKeys) {\n for (var i = 0; i < primaryKeys.length; i++) {\n var key = primaryKeys[i];\n if (toState[key] != null && !(key in normalState)) {\n normalState[key] = this[key];\n }\n }\n };\n Element.prototype.hasState = function () {\n return this.currentStates.length > 0;\n };\n Element.prototype.getState = function (name) {\n return this.states[name];\n };\n Element.prototype.ensureState = function (name) {\n var states = this.states;\n if (!states[name]) {\n states[name] = {};\n }\n return states[name];\n };\n Element.prototype.clearStates = function (noAnimation) {\n this.useState(PRESERVED_NORMAL_STATE, false, noAnimation);\n };\n Element.prototype.useState = function (stateName, keepCurrentStates, noAnimation, forceUseHoverLayer) {\n var toNormalState = stateName === PRESERVED_NORMAL_STATE;\n var hasStates = this.hasState();\n if (!hasStates && toNormalState) {\n return;\n }\n var currentStates = this.currentStates;\n var animationCfg = this.stateTransition;\n if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) {\n return;\n }\n var state;\n if (this.stateProxy && !toNormalState) {\n state = this.stateProxy(stateName);\n }\n if (!state) {\n state = (this.states && this.states[stateName]);\n }\n if (!state && !toNormalState) {\n logError(\"State \" + stateName + \" not exists.\");\n return;\n }\n if (!toNormalState) {\n this.saveCurrentToNormalState(state);\n }\n var useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n this._toggleHoverLayerFlag(true);\n }\n this._applyStateObj(stateName, state, this._normalState, keepCurrentStates, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg);\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (toNormalState) {\n this.currentStates = [];\n this._normalState = {};\n }\n else {\n if (!keepCurrentStates) {\n this.currentStates = [stateName];\n }\n else {\n this.currentStates.push(stateName);\n }\n }\n this._updateAnimationTargets();\n this.markRedraw();\n if (!useHoverLayer && this.__inHover) {\n this._toggleHoverLayerFlag(false);\n this.__dirty &= ~REDARAW_BIT;\n }\n return state;\n };\n Element.prototype.useStates = function (states, noAnimation, forceUseHoverLayer) {\n if (!states.length) {\n this.clearStates();\n }\n else {\n var stateObjects = [];\n var currentStates = this.currentStates;\n var len = states.length;\n var notChange = len === currentStates.length;\n if (notChange) {\n for (var i = 0; i < len; i++) {\n if (states[i] !== currentStates[i]) {\n notChange = false;\n break;\n }\n }\n }\n if (notChange) {\n return;\n }\n for (var i = 0; i < len; i++) {\n var stateName = states[i];\n var stateObj = void 0;\n if (this.stateProxy) {\n stateObj = this.stateProxy(stateName, states);\n }\n if (!stateObj) {\n stateObj = this.states[stateName];\n }\n if (stateObj) {\n stateObjects.push(stateObj);\n }\n }\n var lastStateObj = stateObjects[len - 1];\n var useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n this._toggleHoverLayerFlag(true);\n }\n var mergedState = this._mergeStates(stateObjects);\n var animationCfg = this.stateTransition;\n this.saveCurrentToNormalState(mergedState);\n this._applyStateObj(states.join(','), mergedState, this._normalState, false, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg);\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.useStates(states, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useStates(states, noAnimation, useHoverLayer);\n }\n this._updateAnimationTargets();\n this.currentStates = states.slice();\n this.markRedraw();\n if (!useHoverLayer && this.__inHover) {\n this._toggleHoverLayerFlag(false);\n this.__dirty &= ~REDARAW_BIT;\n }\n }\n };\n Element.prototype._updateAnimationTargets = function () {\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n if (animator.targetName) {\n animator.changeTarget(this[animator.targetName]);\n }\n }\n };\n Element.prototype.removeState = function (state) {\n var idx = indexOf(this.currentStates, state);\n if (idx >= 0) {\n var currentStates = this.currentStates.slice();\n currentStates.splice(idx, 1);\n this.useStates(currentStates);\n }\n };\n Element.prototype.replaceState = function (oldState, newState, forceAdd) {\n var currentStates = this.currentStates.slice();\n var idx = indexOf(currentStates, oldState);\n var newStateExists = indexOf(currentStates, newState) >= 0;\n if (idx >= 0) {\n if (!newStateExists) {\n currentStates[idx] = newState;\n }\n else {\n currentStates.splice(idx, 1);\n }\n }\n else if (forceAdd && !newStateExists) {\n currentStates.push(newState);\n }\n this.useStates(currentStates);\n };\n Element.prototype.toggleState = function (state, enable) {\n if (enable) {\n this.useState(state, true);\n }\n else {\n this.removeState(state);\n }\n };\n Element.prototype._mergeStates = function (states) {\n var mergedState = {};\n var mergedTextConfig;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n extend(mergedState, state);\n if (state.textConfig) {\n mergedTextConfig = mergedTextConfig || {};\n extend(mergedTextConfig, state.textConfig);\n }\n }\n if (mergedTextConfig) {\n mergedState.textConfig = mergedTextConfig;\n }\n return mergedState;\n };\n Element.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n var needsRestoreToNormal = !(state && keepCurrentStates);\n if (state && state.textConfig) {\n this.textConfig = extend({}, keepCurrentStates ? this.textConfig : normalState.textConfig);\n extend(this.textConfig, state.textConfig);\n }\n else if (needsRestoreToNormal) {\n if (normalState.textConfig) {\n this.textConfig = normalState.textConfig;\n }\n }\n var transitionTarget = {};\n var hasTransition = false;\n for (var i = 0; i < PRIMARY_STATES_KEYS.length; i++) {\n var key = PRIMARY_STATES_KEYS[i];\n var propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key];\n if (state && state[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = state[key];\n }\n else {\n this[key] = state[key];\n }\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = normalState[key];\n }\n else {\n this[key] = normalState[key];\n }\n }\n }\n }\n if (!transition) {\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n var targetName = animator.targetName;\n animator.__changeFinalValue(targetName\n ? (state || normalState)[targetName]\n : (state || normalState));\n }\n }\n if (hasTransition) {\n this._transitionState(stateName, transitionTarget, animationCfg);\n }\n };\n Element.prototype._attachComponent = function (componentEl) {\n if (componentEl.__zr && !componentEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n if (componentEl === this) {\n throw new Error('Recursive component attachment.');\n }\n var zr = this.__zr;\n if (zr) {\n componentEl.addSelfToZr(zr);\n }\n componentEl.__zr = zr;\n componentEl.__hostTarget = this;\n };\n Element.prototype._detachComponent = function (componentEl) {\n if (componentEl.__zr) {\n componentEl.removeSelfFromZr(componentEl.__zr);\n }\n componentEl.__zr = null;\n componentEl.__hostTarget = null;\n };\n Element.prototype.getClipPath = function () {\n return this._clipPath;\n };\n Element.prototype.setClipPath = function (clipPath) {\n if (this._clipPath && this._clipPath !== clipPath) {\n this.removeClipPath();\n }\n this._attachComponent(clipPath);\n this._clipPath = clipPath;\n this.markRedraw();\n };\n Element.prototype.removeClipPath = function () {\n var clipPath = this._clipPath;\n if (clipPath) {\n this._detachComponent(clipPath);\n this._clipPath = null;\n this.markRedraw();\n }\n };\n Element.prototype.getTextContent = function () {\n return this._textContent;\n };\n Element.prototype.setTextContent = function (textEl) {\n var previousTextContent = this._textContent;\n if (previousTextContent === textEl) {\n return;\n }\n if (previousTextContent && previousTextContent !== textEl) {\n this.removeTextContent();\n }\n if (textEl.__zr && !textEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n textEl.innerTransformable = new Transformable();\n this._attachComponent(textEl);\n this._textContent = textEl;\n this.markRedraw();\n };\n Element.prototype.setTextConfig = function (cfg) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n extend(this.textConfig, cfg);\n this.markRedraw();\n };\n Element.prototype.removeTextConfig = function () {\n this.textConfig = null;\n this.markRedraw();\n };\n Element.prototype.removeTextContent = function () {\n var textEl = this._textContent;\n if (textEl) {\n textEl.innerTransformable = null;\n this._detachComponent(textEl);\n this._textContent = null;\n this._innerTextDefaultStyle = null;\n this.markRedraw();\n }\n };\n Element.prototype.getTextGuideLine = function () {\n return this._textGuide;\n };\n Element.prototype.setTextGuideLine = function (guideLine) {\n if (this._textGuide && this._textGuide !== guideLine) {\n this.removeTextGuideLine();\n }\n this._attachComponent(guideLine);\n this._textGuide = guideLine;\n this.markRedraw();\n };\n Element.prototype.removeTextGuideLine = function () {\n var textGuide = this._textGuide;\n if (textGuide) {\n this._detachComponent(textGuide);\n this._textGuide = null;\n this.markRedraw();\n }\n };\n Element.prototype.markRedraw = function () {\n this.__dirty |= REDARAW_BIT;\n var zr = this.__zr;\n if (zr) {\n if (this.__inHover) {\n zr.refreshHover();\n }\n else {\n zr.refresh();\n }\n }\n if (this.__hostTarget) {\n this.__hostTarget.markRedraw();\n }\n };\n Element.prototype.dirty = function () {\n this.markRedraw();\n };\n Element.prototype._toggleHoverLayerFlag = function (inHover) {\n this.__inHover = inHover;\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.__inHover = inHover;\n }\n if (textGuide) {\n textGuide.__inHover = inHover;\n }\n };\n Element.prototype.addSelfToZr = function (zr) {\n if (this.__zr === zr) {\n return;\n }\n this.__zr = zr;\n var animators = this.animators;\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n if (this._clipPath) {\n this._clipPath.addSelfToZr(zr);\n }\n if (this._textContent) {\n this._textContent.addSelfToZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.addSelfToZr(zr);\n }\n };\n Element.prototype.removeSelfFromZr = function (zr) {\n if (!this.__zr) {\n return;\n }\n this.__zr = null;\n var animators = this.animators;\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n if (this._clipPath) {\n this._clipPath.removeSelfFromZr(zr);\n }\n if (this._textContent) {\n this._textContent.removeSelfFromZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.removeSelfFromZr(zr);\n }\n };\n Element.prototype.animate = function (key, loop) {\n var target = key ? this[key] : this;\n if (!target) {\n logError('Property \"'\n + key\n + '\" is not existed in element '\n + this.id);\n return;\n }\n var animator = new Animator(target, loop);\n this.addAnimator(animator, key);\n return animator;\n };\n Element.prototype.addAnimator = function (animator, key) {\n var zr = this.__zr;\n var el = this;\n animator.during(function () {\n el.updateDuringAnimation(key);\n }).done(function () {\n var animators = el.animators;\n var idx = indexOf(animators, animator);\n if (idx >= 0) {\n animators.splice(idx, 1);\n }\n });\n this.animators.push(animator);\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n zr && zr.wakeUp();\n };\n Element.prototype.updateDuringAnimation = function (key) {\n this.markRedraw();\n };\n Element.prototype.stopAnimation = function (scope, forwardToLast) {\n var animators = this.animators;\n var len = animators.length;\n var leftAnimators = [];\n for (var i = 0; i < len; i++) {\n var animator = animators[i];\n if (!scope || scope === animator.scope) {\n animator.stop(forwardToLast);\n }\n else {\n leftAnimators.push(animator);\n }\n }\n this.animators = leftAnimators;\n return this;\n };\n Element.prototype.animateTo = function (target, cfg, animationProps) {\n animateTo(this, target, cfg, animationProps);\n };\n Element.prototype.animateFrom = function (target, cfg, animationProps) {\n animateTo(this, target, cfg, animationProps, true);\n };\n Element.prototype._transitionState = function (stateName, target, cfg, animationProps) {\n var animators = animateTo(this, target, cfg, animationProps);\n for (var i = 0; i < animators.length; i++) {\n animators[i].__fromStateTransition = stateName;\n }\n };\n Element.prototype.getBoundingRect = function () {\n return null;\n };\n Element.prototype.getPaintRect = function () {\n return null;\n };\n Element.initDefaultProps = (function () {\n var elProto = Element.prototype;\n elProto.type = 'element';\n elProto.name = '';\n elProto.ignore = false;\n elProto.silent = false;\n elProto.isGroup = false;\n elProto.draggable = false;\n elProto.dragging = false;\n elProto.ignoreClip = false;\n elProto.__inHover = false;\n elProto.__dirty = REDARAW_BIT;\n var logs = {};\n function logDeprecatedError(key, xKey, yKey) {\n if (!logs[key + xKey + yKey]) {\n console.warn(\"DEPRECATED: '\" + key + \"' has been deprecated. use '\" + xKey + \"', '\" + yKey + \"' instead\");\n logs[key + xKey + yKey] = true;\n }\n }\n function createLegacyProperty(key, privateKey, xKey, yKey) {\n Object.defineProperty(elProto, key, {\n get: function () {\n logDeprecatedError(key, xKey, yKey);\n if (!this[privateKey]) {\n var pos = this[privateKey] = [];\n enhanceArray(this, pos);\n }\n return this[privateKey];\n },\n set: function (pos) {\n logDeprecatedError(key, xKey, yKey);\n this[xKey] = pos[0];\n this[yKey] = pos[1];\n this[privateKey] = pos;\n enhanceArray(this, pos);\n }\n });\n function enhanceArray(self, pos) {\n Object.defineProperty(pos, 0, {\n get: function () {\n return self[xKey];\n },\n set: function (val) {\n self[xKey] = val;\n }\n });\n Object.defineProperty(pos, 1, {\n get: function () {\n return self[yKey];\n },\n set: function (val) {\n self[yKey] = val;\n }\n });\n }\n }\n if (Object.defineProperty && (!env.browser.ie || env.browser.version > 8)) {\n createLegacyProperty('position', '_legacyPos', 'x', 'y');\n createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY');\n createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY');\n }\n })();\n return Element;\n}());\nmixin(Element, Eventful);\nmixin(Element, Transformable);\nfunction animateTo(animatable, target, cfg, animationProps, reverse) {\n cfg = cfg || {};\n var animators = [];\n animateToShallow(animatable, '', animatable, target, cfg, animationProps, animators, reverse);\n var finishCount = animators.length;\n var doneHappened = false;\n var cfgDone = cfg.done;\n var cfgAborted = cfg.aborted;\n var doneCb = function () {\n doneHappened = true;\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n var abortedCb = function () {\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n if (!finishCount) {\n cfgDone && cfgDone();\n }\n if (animators.length > 0 && cfg.during) {\n animators[0].during(function (target, percent) {\n cfg.during(percent);\n });\n }\n for (var i = 0; i < animators.length; i++) {\n var animator = animators[i];\n if (doneCb) {\n animator.done(doneCb);\n }\n if (abortedCb) {\n animator.aborted(abortedCb);\n }\n animator.start(cfg.easing, cfg.force);\n }\n return animators;\n}\nfunction copyArrShallow(source, target, len) {\n for (var i = 0; i < len; i++) {\n source[i] = target[i];\n }\n}\nfunction is2DArray(value) {\n return isArrayLike(value[0]);\n}\nfunction copyValue(target, source, key) {\n if (isArrayLike(source[key])) {\n if (!isArrayLike(target[key])) {\n target[key] = [];\n }\n if (isTypedArray(source[key])) {\n var len = source[key].length;\n if (target[key].length !== len) {\n target[key] = new (source[key].constructor)(len);\n copyArrShallow(target[key], source[key], len);\n }\n }\n else {\n var sourceArr = source[key];\n var targetArr = target[key];\n var len0 = sourceArr.length;\n if (is2DArray(sourceArr)) {\n var len1 = sourceArr[0].length;\n for (var i = 0; i < len0; i++) {\n if (!targetArr[i]) {\n targetArr[i] = Array.prototype.slice.call(sourceArr[i]);\n }\n else {\n copyArrShallow(targetArr[i], sourceArr[i], len1);\n }\n }\n }\n else {\n copyArrShallow(targetArr, sourceArr, len0);\n }\n targetArr.length = sourceArr.length;\n }\n }\n else {\n target[key] = source[key];\n }\n}\nfunction animateToShallow(animatable, topKey, source, target, cfg, animationProps, animators, reverse) {\n var animatableKeys = [];\n var changedKeys = [];\n var targetKeys = keys(target);\n var duration = cfg.duration;\n var delay = cfg.delay;\n var additive = cfg.additive;\n var setToFinal = cfg.setToFinal;\n var animateAll = !isObject(animationProps);\n for (var k = 0; k < targetKeys.length; k++) {\n var innerKey = targetKeys[k];\n if (source[innerKey] != null\n && target[innerKey] != null\n && (animateAll || animationProps[innerKey])) {\n if (isObject(target[innerKey]) && !isArrayLike(target[innerKey])) {\n if (topKey) {\n if (!reverse) {\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n }\n continue;\n }\n animateToShallow(animatable, innerKey, source[innerKey], target[innerKey], cfg, animationProps && animationProps[innerKey], animators, reverse);\n }\n else {\n animatableKeys.push(innerKey);\n changedKeys.push(innerKey);\n }\n }\n else if (!reverse) {\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n changedKeys.push(innerKey);\n }\n }\n var keyLen = animatableKeys.length;\n if (keyLen > 0\n || (cfg.force && !animators.length)) {\n var existsAnimators = animatable.animators;\n var existsAnimatorsOnSameTarget = [];\n for (var i = 0; i < existsAnimators.length; i++) {\n if (existsAnimators[i].targetName === topKey) {\n existsAnimatorsOnSameTarget.push(existsAnimators[i]);\n }\n }\n if (!additive && existsAnimatorsOnSameTarget.length) {\n for (var i = 0; i < existsAnimatorsOnSameTarget.length; i++) {\n var allAborted = existsAnimatorsOnSameTarget[i].stopTracks(changedKeys);\n if (allAborted) {\n var idx = indexOf(existsAnimators, existsAnimatorsOnSameTarget[i]);\n existsAnimators.splice(idx, 1);\n }\n }\n }\n var revertedSource = void 0;\n var reversedTarget = void 0;\n var sourceClone = void 0;\n if (reverse) {\n reversedTarget = {};\n if (setToFinal) {\n revertedSource = {};\n }\n for (var i = 0; i < keyLen; i++) {\n var innerKey = animatableKeys[i];\n reversedTarget[innerKey] = source[innerKey];\n if (setToFinal) {\n revertedSource[innerKey] = target[innerKey];\n }\n else {\n source[innerKey] = target[innerKey];\n }\n }\n }\n else if (setToFinal) {\n sourceClone = {};\n for (var i = 0; i < keyLen; i++) {\n var innerKey = animatableKeys[i];\n sourceClone[innerKey] = cloneValue(source[innerKey]);\n copyValue(source, target, innerKey);\n }\n }\n var animator = new Animator(source, false, additive ? existsAnimatorsOnSameTarget : null);\n animator.targetName = topKey;\n if (cfg.scope) {\n animator.scope = cfg.scope;\n }\n if (setToFinal && revertedSource) {\n animator.whenWithKeys(0, revertedSource, animatableKeys);\n }\n if (sourceClone) {\n animator.whenWithKeys(0, sourceClone, animatableKeys);\n }\n animator.whenWithKeys(duration == null ? 500 : duration, reverse ? reversedTarget : target, animatableKeys).delay(delay || 0);\n animatable.addAnimator(animator, topKey);\n animators.push(animator);\n }\n}\nexport default Element;\n","import { quadraticProjectPoint } from '../core/curve';\nexport function containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n if ((y > y0 + _l && y > y1 + _l && y > y2 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l)) {\n return false;\n }\n var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n","var Gradient = (function () {\n function Gradient(colorStops) {\n this.colorStops = colorStops || [];\n }\n Gradient.prototype.addColorStop = function (offset, color) {\n this.colorStops.push({\n offset: offset,\n color: color\n });\n };\n return Gradient;\n}());\nexport default Gradient;\n","var wmUniqueIndex = Math.round(Math.random() * 9);\nvar supportDefineProperty = typeof Object.defineProperty === 'function';\nvar WeakMap = (function () {\n function WeakMap() {\n this._id = '__ec_inner_' + wmUniqueIndex++;\n }\n WeakMap.prototype.get = function (key) {\n return this._guard(key)[this._id];\n };\n WeakMap.prototype.set = function (key, value) {\n var target = this._guard(key);\n if (supportDefineProperty) {\n Object.defineProperty(target, this._id, {\n value: value,\n enumerable: false,\n configurable: true\n });\n }\n else {\n target[this._id] = value;\n }\n return this;\n };\n WeakMap.prototype[\"delete\"] = function (key) {\n if (this.has(key)) {\n delete this._guard(key)[this._id];\n return true;\n }\n return false;\n };\n WeakMap.prototype.has = function (key) {\n return !!this._guard(key)[this._id];\n };\n WeakMap.prototype._guard = function (key) {\n if (key !== Object(key)) {\n throw TypeError('Value of WeakMap is not a non-null object.');\n }\n return key;\n };\n return WeakMap;\n}());\nexport default WeakMap;\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nvar ArcShape = (function () {\n function ArcShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n this.startAngle = 0;\n this.endAngle = Math.PI * 2;\n this.clockwise = true;\n }\n return ArcShape;\n}());\nexport { ArcShape };\nvar Arc = (function (_super) {\n __extends(Arc, _super);\n function Arc(opts) {\n return _super.call(this, opts) || this;\n }\n Arc.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Arc.prototype.getDefaultShape = function () {\n return new ArcShape();\n };\n Arc.prototype.buildPath = function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n };\n return Arc;\n}(Path));\nArc.prototype.type = 'arc';\nexport default Arc;\n","import { distance as v2Distance } from '../../core/vector';\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\nexport default function smoothSpline(points, isLoop) {\n var len = points.length;\n var ret = [];\n var distance = 0;\n for (var i = 1; i < len; i++) {\n distance += v2Distance(points[i - 1], points[i]);\n }\n var segs = distance / 2;\n segs = segs < len ? len : segs;\n for (var i = 0; i < segs; i++) {\n var pos = i / (segs - 1) * (isLoop ? len : len - 1);\n var idx = Math.floor(pos);\n var w = pos - idx;\n var p0 = void 0;\n var p1 = points[idx % len];\n var p2 = void 0;\n var p3 = void 0;\n if (!isLoop) {\n p0 = points[idx === 0 ? idx : idx - 1];\n p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n }\n else {\n p0 = points[(idx - 1 + len) % len];\n p2 = points[(idx + 1) % len];\n p3 = points[(idx + 2) % len];\n }\n var w2 = w * w;\n var w3 = w * w2;\n ret.push([\n interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),\n interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)\n ]);\n }\n return ret;\n}\n","import smoothSpline from './smoothSpline';\nimport smoothBezier from './smoothBezier';\nexport function buildPath(ctx, shape, closePath) {\n var smooth = shape.smooth;\n var points = shape.points;\n if (points && points.length >= 2) {\n if (smooth && smooth !== 'spline') {\n var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint);\n ctx.moveTo(points[0][0], points[0][1]);\n var len = points.length;\n for (var i = 0; i < (closePath ? len : len - 1); i++) {\n var cp1 = controlPoints[i * 2];\n var cp2 = controlPoints[i * 2 + 1];\n var p = points[(i + 1) % len];\n ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);\n }\n }\n else {\n if (smooth === 'spline') {\n points = smoothSpline(points, closePath);\n }\n ctx.moveTo(points[0][0], points[0][1]);\n for (var i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n closePath && ctx.closePath();\n }\n}\n","import { min as v2Min, max as v2Max, scale as v2Scale, distance as v2Distance, add as v2Add, clone as v2Clone, sub as v2Sub } from '../../core/vector';\nexport default function smoothBezier(points, smooth, isLoop, constraint) {\n var cps = [];\n var v = [];\n var v1 = [];\n var v2 = [];\n var prevPoint;\n var nextPoint;\n var min;\n var max;\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n for (var i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n }\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n }\n else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n }\n else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n v2Sub(v, nextPoint, prevPoint);\n v2Scale(v, v, smooth);\n var d0 = v2Distance(point, prevPoint);\n var d1 = v2Distance(point, nextPoint);\n var sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n var cp0 = v2Add([], point, v1);\n var cp1 = v2Add([], point, v2);\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n }\n if (isLoop) {\n cps.push(cps.shift());\n }\n return cps;\n}\n","var Point = (function () {\n function Point(x, y) {\n this.x = x || 0;\n this.y = y || 0;\n }\n Point.prototype.copy = function (other) {\n this.x = other.x;\n this.y = other.y;\n return this;\n };\n Point.prototype.clone = function () {\n return new Point(this.x, this.y);\n };\n Point.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n Point.prototype.equal = function (other) {\n return other.x === this.x && other.y === this.y;\n };\n Point.prototype.add = function (other) {\n this.x += other.x;\n this.y += other.y;\n return this;\n };\n Point.prototype.scale = function (scalar) {\n this.x *= scalar;\n this.y *= scalar;\n };\n Point.prototype.scaleAndAdd = function (other, scalar) {\n this.x += other.x * scalar;\n this.y += other.y * scalar;\n };\n Point.prototype.sub = function (other) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n };\n Point.prototype.dot = function (other) {\n return this.x * other.x + this.y * other.y;\n };\n Point.prototype.len = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n };\n Point.prototype.lenSquare = function () {\n return this.x * this.x + this.y * this.y;\n };\n Point.prototype.normalize = function () {\n var len = this.len();\n this.x /= len;\n this.y /= len;\n return this;\n };\n Point.prototype.distance = function (other) {\n var dx = this.x - other.x;\n var dy = this.y - other.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Point.prototype.distanceSquare = function (other) {\n var dx = this.x - other.x;\n var dy = this.y - other.y;\n return dx * dx + dy * dy;\n };\n Point.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n };\n Point.prototype.transform = function (m) {\n if (!m) {\n return;\n }\n var x = this.x;\n var y = this.y;\n this.x = m[0] * x + m[2] * y + m[4];\n this.y = m[1] * x + m[3] * y + m[5];\n return this;\n };\n Point.prototype.toArray = function (out) {\n out[0] = this.x;\n out[1] = this.y;\n return out;\n };\n Point.prototype.fromArray = function (input) {\n this.x = input[0];\n this.y = input[1];\n };\n Point.set = function (p, x, y) {\n p.x = x;\n p.y = y;\n };\n Point.copy = function (p, p2) {\n p.x = p2.x;\n p.y = p2.y;\n };\n Point.len = function (p) {\n return Math.sqrt(p.x * p.x + p.y * p.y);\n };\n Point.lenSquare = function (p) {\n return p.x * p.x + p.y * p.y;\n };\n Point.dot = function (p0, p1) {\n return p0.x * p1.x + p0.y * p1.y;\n };\n Point.add = function (out, p0, p1) {\n out.x = p0.x + p1.x;\n out.y = p0.y + p1.y;\n };\n Point.sub = function (out, p0, p1) {\n out.x = p0.x - p1.x;\n out.y = p0.y - p1.y;\n };\n Point.scale = function (out, p0, scalar) {\n out.x = p0.x * scalar;\n out.y = p0.y * scalar;\n };\n Point.scaleAndAdd = function (out, p0, p1, scalar) {\n out.x = p0.x + p1.x * scalar;\n out.y = p0.y + p1.y * scalar;\n };\n Point.lerp = function (out, p0, p1, t) {\n var onet = 1 - t;\n out.x = onet * p0.x + t * p1.x;\n out.y = onet * p0.y + t * p1.y;\n };\n return Point;\n}());\nexport default Point;\n","import LRU from '../core/LRU';\nvar kCSSColorTable = {\n 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\nfunction clampCssByte(i) {\n i = Math.round(i);\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clampCssAngle(i) {\n i = Math.round(i);\n return i < 0 ? 0 : i > 360 ? 360 : i;\n}\nfunction clampCssFloat(f) {\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parseCssInt(val) {\n var str = val;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssByte(parseFloat(str) / 100 * 255);\n }\n return clampCssByte(parseInt(str, 10));\n}\nfunction parseCssFloat(val) {\n var str = val;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssFloat(parseFloat(str) / 100);\n }\n return clampCssFloat(parseFloat(str));\n}\nfunction cssHueToRgb(m1, m2, h) {\n if (h < 0) {\n h += 1;\n }\n else if (h > 1) {\n h -= 1;\n }\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * h * 6;\n }\n if (h * 2 < 1) {\n return m2;\n }\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n}\nfunction lerpNumber(a, b, p) {\n return a + (b - a) * p;\n}\nfunction setRgba(out, r, g, b, a) {\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n}\nfunction copyRgba(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\nfunction putToCache(colorStr, rgbaArr) {\n if (lastRemovedArr) {\n copyRgba(lastRemovedArr, rgbaArr);\n }\n lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\nexport function parse(colorStr, rgbaArr) {\n if (!colorStr) {\n return;\n }\n rgbaArr = rgbaArr || [];\n var cached = colorCache.get(colorStr);\n if (cached) {\n return copyRgba(rgbaArr, cached);\n }\n colorStr = colorStr + '';\n var str = colorStr.replace(/ /g, '').toLowerCase();\n if (str in kCSSColorTable) {\n copyRgba(rgbaArr, kCSSColorTable[str]);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n var strLen = str.length;\n if (str.charAt(0) === '#') {\n if (strLen === 4 || strLen === 5) {\n var iv = parseInt(str.slice(1, 4), 16);\n if (!(iv >= 0 && iv <= 0xfff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr, ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), (iv & 0xf0) | ((iv & 0xf0) >> 4), (iv & 0xf) | ((iv & 0xf) << 4), strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n else if (strLen === 7 || strLen === 9) {\n var iv = parseInt(str.slice(1, 7), 16);\n if (!(iv >= 0 && iv <= 0xffffff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n return;\n }\n var op = str.indexOf('(');\n var ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === strLen) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) {\n return params.length === 3\n ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1)\n : setRgba(rgbaArr, 0, 0, 0, 1);\n }\n alpha = parseCssFloat(params.pop());\n case 'rgb':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), alpha);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsla':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n params[3] = parseCssFloat(params[3]);\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsl':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n default:\n return;\n }\n }\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n}\nfunction hsla2rgba(hsla, rgba) {\n var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360;\n var s = parseCssFloat(hsla[1]);\n var l = parseCssFloat(hsla[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n rgba = rgba || [];\n setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1);\n if (hsla.length === 4) {\n rgba[3] = hsla[3];\n }\n return rgba;\n}\nfunction rgba2hsla(rgba) {\n if (!rgba) {\n return;\n }\n var R = rgba[0] / 255;\n var G = rgba[1] / 255;\n var B = rgba[2] / 255;\n var vMin = Math.min(R, G, B);\n var vMax = Math.max(R, G, B);\n var delta = vMax - vMin;\n var L = (vMax + vMin) / 2;\n var H;\n var S;\n if (delta === 0) {\n H = 0;\n S = 0;\n }\n else {\n if (L < 0.5) {\n S = delta / (vMax + vMin);\n }\n else {\n S = delta / (2 - vMax - vMin);\n }\n var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n if (R === vMax) {\n H = deltaB - deltaG;\n }\n else if (G === vMax) {\n H = (1 / 3) + deltaR - deltaB;\n }\n else if (B === vMax) {\n H = (2 / 3) + deltaG - deltaR;\n }\n if (H < 0) {\n H += 1;\n }\n if (H > 1) {\n H -= 1;\n }\n }\n var hsla = [H * 360, S, L];\n if (rgba[3] != null) {\n hsla.push(rgba[3]);\n }\n return hsla;\n}\nexport function lift(color, level) {\n var colorArr = parse(color);\n if (colorArr) {\n for (var i = 0; i < 3; i++) {\n if (level < 0) {\n colorArr[i] = colorArr[i] * (1 - level) | 0;\n }\n else {\n colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n }\n if (colorArr[i] > 255) {\n colorArr[i] = 255;\n }\n else if (colorArr[i] < 0) {\n colorArr[i] = 0;\n }\n }\n return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n }\n}\nexport function toHex(color) {\n var colorArr = parse(color);\n if (colorArr) {\n return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n }\n}\nexport function fastLerp(normalizedValue, colors, out) {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n out = out || [];\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = colors[leftIndex];\n var rightColor = colors[rightIndex];\n var dv = value - leftIndex;\n out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n return out;\n}\nexport var fastMapToColor = fastLerp;\nexport function lerp(normalizedValue, colors, fullOutput) {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = parse(colors[leftIndex]);\n var rightColor = parse(colors[rightIndex]);\n var dv = value - leftIndex;\n var color = stringify([\n clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n ], 'rgba');\n return fullOutput\n ? {\n color: color,\n leftIndex: leftIndex,\n rightIndex: rightIndex,\n value: value\n }\n : color;\n}\nexport var mapToColor = lerp;\nexport function modifyHSL(color, h, s, l) {\n var colorArr = parse(color);\n if (color) {\n colorArr = rgba2hsla(colorArr);\n h != null && (colorArr[0] = clampCssAngle(h));\n s != null && (colorArr[1] = parseCssFloat(s));\n l != null && (colorArr[2] = parseCssFloat(l));\n return stringify(hsla2rgba(colorArr), 'rgba');\n }\n}\nexport function modifyAlpha(color, alpha) {\n var colorArr = parse(color);\n if (colorArr && alpha != null) {\n colorArr[3] = clampCssFloat(alpha);\n return stringify(colorArr, 'rgba');\n }\n}\nexport function stringify(arrColor, type) {\n if (!arrColor || !arrColor.length) {\n return;\n }\n var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n colorStr += ',' + arrColor[3];\n }\n return type + '(' + colorStr + ')';\n}\nexport function lum(color, backgroundLum) {\n var arr = parse(color);\n return arr\n ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255\n + (1 - arr[3]) * backgroundLum\n : 0;\n}\nexport function random() {\n var r = Math.round(Math.random() * 255);\n var g = Math.round(Math.random() * 255);\n var b = Math.round(Math.random() * 255);\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nvar RingShape = (function () {\n function RingShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n this.r0 = 0;\n }\n return RingShape;\n}());\nexport { RingShape };\nvar Ring = (function (_super) {\n __extends(Ring, _super);\n function Ring(opts) {\n return _super.call(this, opts) || this;\n }\n Ring.prototype.getDefaultShape = function () {\n return new RingShape();\n };\n Ring.prototype.buildPath = function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n };\n return Ring;\n}(Path));\nRing.prototype.type = 'ring';\nexport default Ring;\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport * as vec2 from '../../core/vector';\nimport { quadraticSubdivide, cubicSubdivide, quadraticAt, cubicAt, quadraticDerivativeAt, cubicDerivativeAt } from '../../core/curve';\nvar out = [];\nvar BezierCurveShape = (function () {\n function BezierCurveShape() {\n this.x1 = 0;\n this.y1 = 0;\n this.x2 = 0;\n this.y2 = 0;\n this.cpx1 = 0;\n this.cpy1 = 0;\n this.percent = 1;\n }\n return BezierCurveShape;\n}());\nexport { BezierCurveShape };\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n if (cpx2 === null || cpy2 === null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\nvar BezierCurve = (function (_super) {\n __extends(BezierCurve, _super);\n function BezierCurve(opts) {\n return _super.call(this, opts) || this;\n }\n BezierCurve.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n BezierCurve.prototype.getDefaultShape = function () {\n return new BezierCurveShape();\n };\n BezierCurve.prototype.buildPath = function (ctx, shape) {\n var x1 = shape.x1;\n var y1 = shape.y1;\n var x2 = shape.x2;\n var y2 = shape.y2;\n var cpx1 = shape.cpx1;\n var cpy1 = shape.cpy1;\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n var percent = shape.percent;\n if (percent === 0) {\n return;\n }\n ctx.moveTo(x1, y1);\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n ctx.quadraticCurveTo(cpx1, cpy1, x2, y2);\n }\n else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n }\n };\n BezierCurve.prototype.pointAt = function (t) {\n return someVectorAt(this.shape, t, false);\n };\n BezierCurve.prototype.tangentAt = function (t) {\n var p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n };\n return BezierCurve;\n}(Path));\n;\nBezierCurve.prototype.type = 'bezier-curve';\nexport default BezierCurve;\n","import { __extends } from \"tslib\";\nimport Path from './Path';\nvar CompoundPath = (function (_super) {\n __extends(CompoundPath, _super);\n function CompoundPath() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'compound';\n return _this;\n }\n CompoundPath.prototype._updatePathDirty = function () {\n var paths = this.shape.paths;\n var dirtyPath = this.shapeChanged();\n for (var i = 0; i < paths.length; i++) {\n dirtyPath = dirtyPath || paths[i].shapeChanged();\n }\n if (dirtyPath) {\n this.dirtyShape();\n }\n };\n CompoundPath.prototype.beforeBrush = function () {\n this._updatePathDirty();\n var paths = this.shape.paths || [];\n var scale = this.getGlobalScale();\n for (var i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n };\n CompoundPath.prototype.buildPath = function (ctx, shape) {\n var paths = shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n };\n CompoundPath.prototype.afterBrush = function () {\n var paths = this.shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].pathUpdated();\n }\n };\n CompoundPath.prototype.getBoundingRect = function () {\n this._updatePathDirty.call(this);\n return Path.prototype.getBoundingRect.call(this);\n };\n return CompoundPath;\n}(Path));\nexport default CompoundPath;\n","import Group from '../graphic/Group';\nimport ZRImage from '../graphic/Image';\nimport Circle from '../graphic/shape/Circle';\nimport Rect from '../graphic/shape/Rect';\nimport Ellipse from '../graphic/shape/Ellipse';\nimport Line from '../graphic/shape/Line';\nimport Polygon from '../graphic/shape/Polygon';\nimport Polyline from '../graphic/shape/Polyline';\nimport * as matrix from '../core/matrix';\nimport { createFromString } from './path';\nimport { defaults, trim, each, map, keys, hasOwn } from '../core/util';\nimport LinearGradient from '../graphic/LinearGradient';\nimport RadialGradient from '../graphic/RadialGradient';\nimport TSpan from '../graphic/TSpan';\nimport { parseXML } from './parseXML';\n;\nvar nodeParsers;\nvar INHERITABLE_STYLE_ATTRIBUTES_MAP = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'text-anchor': 'textAlign',\n 'visibility': 'visibility',\n 'display': 'display'\n};\nvar INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP);\nvar SELF_STYLE_ATTRIBUTES_MAP = {\n 'alignment-baseline': 'textBaseline',\n 'stop-color': 'stopColor'\n};\nvar SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP);\nvar SVGParser = (function () {\n function SVGParser() {\n this._defs = {};\n this._root = null;\n }\n SVGParser.prototype.parse = function (xml, opt) {\n opt = opt || {};\n var svg = parseXML(xml);\n if (!svg) {\n throw new Error('Illegal svg');\n }\n this._defsUsePending = [];\n var root = new Group();\n this._root = root;\n var named = [];\n var viewBox = svg.getAttribute('viewBox') || '';\n var width = parseFloat((svg.getAttribute('width') || opt.width));\n var height = parseFloat((svg.getAttribute('height') || opt.height));\n isNaN(width) && (width = null);\n isNaN(height) && (height = null);\n parseAttributes(svg, root, null, true, false);\n var child = svg.firstChild;\n while (child) {\n this._parseNode(child, root, named, null, false, false);\n child = child.nextSibling;\n }\n applyDefs(this._defs, this._defsUsePending);\n this._defsUsePending = [];\n var viewBoxRect;\n var viewBoxTransform;\n if (viewBox) {\n var viewBoxArr = splitNumberSequence(viewBox);\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat((viewBoxArr[0] || 0)),\n y: parseFloat((viewBoxArr[1] || 0)),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n }\n }\n if (viewBoxRect && width != null && height != null) {\n viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height });\n if (!opt.ignoreViewBox) {\n var elRoot = root;\n root = new Group();\n root.add(elRoot);\n elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale;\n elRoot.x = viewBoxTransform.x;\n elRoot.y = viewBoxTransform.y;\n }\n }\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: { x: 0, y: 0, width: width, height: height }\n }));\n }\n return {\n root: root,\n width: width,\n height: height,\n viewBoxRect: viewBoxRect,\n viewBoxTransform: viewBoxTransform,\n named: named\n };\n };\n SVGParser.prototype._parseNode = function (xmlNode, parentGroup, named, namedFrom, isInDefs, isInText) {\n var nodeName = xmlNode.nodeName.toLowerCase();\n var el;\n var namedFromForSub = namedFrom;\n if (nodeName === 'defs') {\n isInDefs = true;\n }\n if (nodeName === 'text') {\n isInText = true;\n }\n if (nodeName === 'defs' || nodeName === 'switch') {\n el = parentGroup;\n }\n else {\n if (!isInDefs) {\n var parser_1 = nodeParsers[nodeName];\n if (parser_1 && hasOwn(nodeParsers, nodeName)) {\n el = parser_1.call(this, xmlNode, parentGroup);\n var nameAttr = xmlNode.getAttribute('name');\n if (nameAttr) {\n var newNamed = {\n name: nameAttr,\n namedFrom: null,\n svgNodeTagLower: nodeName,\n el: el\n };\n named.push(newNamed);\n if (nodeName === 'g') {\n namedFromForSub = newNamed;\n }\n }\n else if (namedFrom) {\n named.push({\n name: namedFrom.name,\n namedFrom: namedFrom,\n svgNodeTagLower: nodeName,\n el: el\n });\n }\n parentGroup.add(el);\n }\n }\n var parser = paintServerParsers[nodeName];\n if (parser && hasOwn(paintServerParsers, nodeName)) {\n var def = parser.call(this, xmlNode);\n var id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n if (el && el.isGroup) {\n var child = xmlNode.firstChild;\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el, named, namedFromForSub, isInDefs, isInText);\n }\n else if (child.nodeType === 3 && isInText) {\n this._parseText(child, el);\n }\n child = child.nextSibling;\n }\n }\n };\n SVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n var text = new TSpan({\n style: {\n text: xmlNode.textContent\n },\n silent: true,\n x: this._textX || 0,\n y: this._textY || 0\n });\n inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defsUsePending, false, false);\n applyTextAlignment(text, parentGroup);\n var textStyle = text.style;\n var fontSize = textStyle.fontSize;\n if (fontSize && fontSize < 9) {\n textStyle.fontSize = 9;\n text.scaleX *= fontSize / 9;\n text.scaleY *= fontSize / 9;\n }\n var font = (textStyle.fontSize || textStyle.fontFamily) && [\n textStyle.fontStyle,\n textStyle.fontWeight,\n (textStyle.fontSize || 12) + 'px',\n textStyle.fontFamily || 'sans-serif'\n ].join(' ');\n textStyle.font = font;\n var rect = text.getBoundingRect();\n this._textX += rect.width;\n parentGroup.add(text);\n return text;\n };\n SVGParser.internalField = (function () {\n nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, false);\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n var rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defsUsePending, false, false);\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || '0'),\n y: parseFloat(xmlNode.getAttribute('y') || '0'),\n width: parseFloat(xmlNode.getAttribute('width') || '0'),\n height: parseFloat(xmlNode.getAttribute('height') || '0')\n });\n rect.silent = true;\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n var circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defsUsePending, false, false);\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n r: parseFloat(xmlNode.getAttribute('r') || '0')\n });\n circle.silent = true;\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n var line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defsUsePending, false, false);\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || '0'),\n y1: parseFloat(xmlNode.getAttribute('y1') || '0'),\n x2: parseFloat(xmlNode.getAttribute('x2') || '0'),\n y2: parseFloat(xmlNode.getAttribute('y2') || '0')\n });\n line.silent = true;\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n var ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false);\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n rx: parseFloat(xmlNode.getAttribute('rx') || '0'),\n ry: parseFloat(xmlNode.getAttribute('ry') || '0')\n });\n ellipse.silent = true;\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n var pointsStr = xmlNode.getAttribute('points');\n var pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n var polygon = new Polygon({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defsUsePending, false, false);\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n var pointsStr = xmlNode.getAttribute('points');\n var pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n var polyline = new Polyline({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n inheritStyle(parentGroup, polyline);\n parseAttributes(xmlNode, polyline, this._defsUsePending, false, false);\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n var img = new ZRImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defsUsePending, false, false);\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: +xmlNode.getAttribute('x'),\n y: +xmlNode.getAttribute('y'),\n width: +xmlNode.getAttribute('width'),\n height: +xmlNode.getAttribute('height')\n });\n img.silent = true;\n return img;\n },\n 'text': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x') || '0';\n var y = xmlNode.getAttribute('y') || '0';\n var dx = xmlNode.getAttribute('dx') || '0';\n var dy = xmlNode.getAttribute('dy') || '0';\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x');\n var y = xmlNode.getAttribute('y');\n if (x != null) {\n this._textX = parseFloat(x);\n }\n if (y != null) {\n this._textY = parseFloat(y);\n }\n var dx = xmlNode.getAttribute('dx') || '0';\n var dy = xmlNode.getAttribute('dy') || '0';\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n var d = xmlNode.getAttribute('d') || '';\n var path = createFromString(d);\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defsUsePending, false, false);\n path.silent = true;\n return path;\n }\n };\n })();\n return SVGParser;\n}());\nvar paintServerParsers = {\n 'lineargradient': function (xmlNode) {\n var x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10);\n var y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10);\n var x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10);\n var y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10);\n var gradient = new LinearGradient(x1, y1, x2, y2);\n parsePaintServerUnit(xmlNode, gradient);\n parseGradientColorStops(xmlNode, gradient);\n return gradient;\n },\n 'radialgradient': function (xmlNode) {\n var cx = parseInt(xmlNode.getAttribute('cx') || '0', 10);\n var cy = parseInt(xmlNode.getAttribute('cy') || '0', 10);\n var r = parseInt(xmlNode.getAttribute('r') || '0', 10);\n var gradient = new RadialGradient(cx, cy, r);\n parsePaintServerUnit(xmlNode, gradient);\n parseGradientColorStops(xmlNode, gradient);\n return gradient;\n }\n};\nfunction parsePaintServerUnit(xmlNode, gradient) {\n var gradientUnits = xmlNode.getAttribute('gradientUnits');\n if (gradientUnits === 'userSpaceOnUse') {\n gradient.global = true;\n }\n}\nfunction parseGradientColorStops(xmlNode, gradient) {\n var stop = xmlNode.firstChild;\n while (stop) {\n if (stop.nodeType === 1\n && stop.nodeName.toLocaleLowerCase() === 'stop') {\n var offsetStr = stop.getAttribute('offset');\n var offset = void 0;\n if (offsetStr && offsetStr.indexOf('%') > 0) {\n offset = parseInt(offsetStr, 10) / 100;\n }\n else if (offsetStr) {\n offset = parseFloat(offsetStr);\n }\n else {\n offset = 0;\n }\n var styleVals = {};\n parseInlineStyle(stop, styleVals, styleVals);\n var stopColor = styleVals.stopColor\n || stop.getAttribute('stop-color')\n || '#000000';\n gradient.colorStops.push({\n offset: offset,\n color: stopColor\n });\n }\n stop = stop.nextSibling;\n }\n}\nfunction inheritStyle(parent, child) {\n if (parent && parent.__inheritedStyle) {\n if (!child.__inheritedStyle) {\n child.__inheritedStyle = {};\n }\n defaults(child.__inheritedStyle, parent.__inheritedStyle);\n }\n}\nfunction parsePoints(pointsString) {\n var list = splitNumberSequence(pointsString);\n var points = [];\n for (var i = 0; i < list.length; i += 2) {\n var x = parseFloat(list[i]);\n var y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\nfunction parseAttributes(xmlNode, el, defsUsePending, onlyInlineStyle, isTextGroup) {\n var disp = el;\n var inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {};\n var selfStyle = {};\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n parseInlineStyle(xmlNode, inheritedStyle, selfStyle);\n if (!onlyInlineStyle) {\n parseAttributeStyle(xmlNode, inheritedStyle, selfStyle);\n }\n }\n disp.style = disp.style || {};\n if (inheritedStyle.fill != null) {\n disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending);\n }\n if (inheritedStyle.stroke != null) {\n disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending);\n }\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ], function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = parseFloat(inheritedStyle[propName]);\n }\n });\n each([\n 'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign'\n ], function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = inheritedStyle[propName];\n }\n });\n if (isTextGroup) {\n disp.__selfStyle = selfStyle;\n }\n if (inheritedStyle.lineDash) {\n disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) {\n return parseFloat(str);\n });\n }\n if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') {\n disp.invisible = true;\n }\n if (inheritedStyle.display === 'none') {\n disp.ignore = true;\n }\n}\nfunction applyTextAlignment(text, parentGroup) {\n var parentSelfStyle = parentGroup.__selfStyle;\n if (parentSelfStyle) {\n var textBaseline = parentSelfStyle.textBaseline;\n var zrTextBaseline = textBaseline;\n if (!textBaseline || textBaseline === 'auto') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'baseline') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') {\n zrTextBaseline = 'top';\n }\n else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') {\n zrTextBaseline = 'bottom';\n }\n else if (textBaseline === 'central' || textBaseline === 'mathematical') {\n zrTextBaseline = 'middle';\n }\n text.style.textBaseline = zrTextBaseline;\n }\n var parentInheritedStyle = parentGroup.__inheritedStyle;\n if (parentInheritedStyle) {\n var textAlign = parentInheritedStyle.textAlign;\n var zrTextAlign = textAlign;\n if (textAlign) {\n if (textAlign === 'middle') {\n zrTextAlign = 'center';\n }\n text.style.textAlign = zrTextAlign;\n }\n }\n}\nvar urlRegex = /^url\\(\\s*#(.*?)\\)/;\nfunction getFillStrokeStyle(el, method, str, defsUsePending) {\n var urlMatch = str && str.match(urlRegex);\n if (urlMatch) {\n var url = trim(urlMatch[1]);\n defsUsePending.push([el, method, url]);\n return;\n }\n if (str === 'none') {\n str = null;\n }\n return str;\n}\nfunction applyDefs(defs, defsUsePending) {\n for (var i = 0; i < defsUsePending.length; i++) {\n var item = defsUsePending[i];\n item[0].style[item[1]] = defs[item[2]];\n }\n}\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr) {\n return rawStr.match(numberReg) || [];\n}\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.eE,]*)\\)/g;\nvar DEGREE_TO_ANGLE = Math.PI / 180;\nfunction parseTransformAttribute(xmlNode, node) {\n var transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n var transformOps_1 = [];\n var mt = null;\n transform.replace(transformRegex, function (str, type, value) {\n transformOps_1.push(type, value);\n return '';\n });\n for (var i = transformOps_1.length - 1; i > 0; i -= 2) {\n var value = transformOps_1[i];\n var type = transformOps_1[i - 1];\n var valueArr = splitNumberSequence(value);\n mt = mt || matrix.create();\n switch (type) {\n case 'translate':\n matrix.translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n break;\n case 'scale':\n matrix.scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n break;\n case 'rotate':\n matrix.rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n break;\n case 'skewX':\n var sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, 0, sx, 1, 0, 0], mt);\n break;\n case 'skewY':\n var sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, sy, 0, 1, 0, 0], mt);\n break;\n case 'matrix':\n mt[0] = parseFloat(valueArr[0]);\n mt[1] = parseFloat(valueArr[1]);\n mt[2] = parseFloat(valueArr[2]);\n mt[3] = parseFloat(valueArr[3]);\n mt[4] = parseFloat(valueArr[4]);\n mt[5] = parseFloat(valueArr[5]);\n break;\n }\n }\n node.setLocalTransform(mt);\n }\n}\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseInlineStyle(xmlNode, inheritableStyleResult, selfStyleResult) {\n var style = xmlNode.getAttribute('style');\n if (!style) {\n return;\n }\n styleRegex.lastIndex = 0;\n var styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n var svgStlAttr = styleRegResult[1];\n var zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr]\n : null;\n if (zrInheritableStlAttr) {\n inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2];\n }\n var zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr]\n : null;\n if (zrSelfStlAttr) {\n selfStyleResult[zrSelfStlAttr] = styleRegResult[2];\n }\n }\n}\nfunction parseAttributeStyle(xmlNode, inheritableStyleResult, selfStyleResult) {\n for (var i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n var svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i];\n var attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n for (var i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n var svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i];\n var attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n}\nexport function makeViewBoxTransform(viewBoxRect, boundingRect) {\n var scaleX = boundingRect.width / viewBoxRect.width;\n var scaleY = boundingRect.height / viewBoxRect.height;\n var scale = Math.min(scaleX, scaleY);\n return {\n scale: scale,\n x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2),\n y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2)\n };\n}\nexport function parseSVG(xml, opt) {\n var parser = new SVGParser();\n return parser.parse(xml, opt);\n}\nexport { parseXML };\n","import Eventful from './Eventful';\nimport env from './env';\nimport { isCanvasEl, transformCoordWithViewport } from './dom';\nvar isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nvar _calcOut = [];\nexport function clientToLocal(el, e, out, calculate) {\n out = out || {};\n if (calculate || !env.canvasSupported) {\n calculateZrXY(el, e, out);\n }\n else if (env.browser.firefox\n && e.layerX != null\n && e.layerX !== e.offsetX) {\n out.zrX = e.layerX;\n out.zrY = e.layerY;\n }\n else if (e.offsetX != null) {\n out.zrX = e.offsetX;\n out.zrY = e.offsetY;\n }\n else {\n calculateZrXY(el, e, out);\n }\n return out;\n}\nfunction calculateZrXY(el, e, out) {\n if (env.domSupported && el.getBoundingClientRect) {\n var ex = e.clientX;\n var ey = e.clientY;\n if (isCanvasEl(el)) {\n var box = el.getBoundingClientRect();\n out.zrX = ex - box.left;\n out.zrY = ey - box.top;\n return;\n }\n else {\n if (transformCoordWithViewport(_calcOut, el, ex, ey)) {\n out.zrX = _calcOut[0];\n out.zrY = _calcOut[1];\n return;\n }\n }\n }\n out.zrX = out.zrY = 0;\n}\nexport function getNativeEvent(e) {\n return e\n || window.event;\n}\nexport function normalizeEvent(el, e, calculate) {\n e = getNativeEvent(e);\n if (e.zrX != null) {\n return e;\n }\n var eventType = e.type;\n var isTouch = eventType && eventType.indexOf('touch') >= 0;\n if (!isTouch) {\n clientToLocal(el, e, e, calculate);\n var wheelDelta = getWheelDeltaMayPolyfill(e);\n e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;\n }\n else {\n var touch = eventType !== 'touchend'\n ? e.targetTouches[0]\n : e.changedTouches[0];\n touch && clientToLocal(el, touch, e, calculate);\n }\n var button = e.button;\n if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n }\n return e;\n}\nfunction getWheelDeltaMayPolyfill(e) {\n var rawWheelDelta = e.wheelDelta;\n if (rawWheelDelta) {\n return rawWheelDelta;\n }\n var deltaX = e.deltaX;\n var deltaY = e.deltaY;\n if (deltaX == null || deltaY == null) {\n return rawWheelDelta;\n }\n var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);\n var sign = deltaY > 0 ? -1\n : deltaY < 0 ? 1\n : deltaX > 0 ? -1\n : 1;\n return 3 * delta * sign;\n}\nexport function addEventListener(el, name, handler, opt) {\n if (isDomLevel2) {\n el.addEventListener(name, handler, opt);\n }\n else {\n el.attachEvent('on' + name, handler);\n }\n}\nexport function removeEventListener(el, name, handler, opt) {\n if (isDomLevel2) {\n el.removeEventListener(name, handler, opt);\n }\n else {\n el.detachEvent('on' + name, handler);\n }\n}\nexport var stop = isDomLevel2\n ? function (e) {\n e.preventDefault();\n e.stopPropagation();\n e.cancelBubble = true;\n }\n : function (e) {\n e.returnValue = false;\n e.cancelBubble = true;\n };\nexport function isMiddleOrRightButtonOnMouseUpDown(e) {\n return e.which === 2 || e.which === 3;\n}\nexport function notLeftMouse(e) {\n return e.which > 1;\n}\nexport { Eventful as Dispatcher };\n","import { __extends } from \"tslib\";\nimport * as zrUtil from '../core/util';\nimport Element from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nvar Group = (function (_super) {\n __extends(Group, _super);\n function Group(opts) {\n var _this = _super.call(this) || this;\n _this.isGroup = true;\n _this._children = [];\n _this.attr(opts);\n return _this;\n }\n Group.prototype.childrenRef = function () {\n return this._children;\n };\n Group.prototype.children = function () {\n return this._children.slice();\n };\n Group.prototype.childAt = function (idx) {\n return this._children[idx];\n };\n Group.prototype.childOfName = function (name) {\n var children = this._children;\n for (var i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n };\n Group.prototype.childCount = function () {\n return this._children.length;\n };\n Group.prototype.add = function (child) {\n if (child) {\n if (child !== this && child.parent !== this) {\n this._children.push(child);\n this._doAdd(child);\n }\n if (child.__hostTarget) {\n throw 'This elemenet has been used as an attachment';\n }\n }\n return this;\n };\n Group.prototype.addBefore = function (child, nextSibling) {\n if (child && child !== this && child.parent !== this\n && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n if (idx >= 0) {\n children.splice(idx, 0, child);\n this._doAdd(child);\n }\n }\n return this;\n };\n Group.prototype.replace = function (oldChild, newChild) {\n var idx = zrUtil.indexOf(this._children, oldChild);\n if (idx >= 0) {\n this.replaceAt(newChild, idx);\n }\n return this;\n };\n Group.prototype.replaceAt = function (child, index) {\n var children = this._children;\n var old = children[index];\n if (child && child !== this && child.parent !== this && child !== old) {\n children[index] = child;\n old.parent = null;\n var zr = this.__zr;\n if (zr) {\n old.removeSelfFromZr(zr);\n }\n this._doAdd(child);\n }\n return this;\n };\n Group.prototype._doAdd = function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n child.parent = this;\n var zr = this.__zr;\n if (zr && zr !== child.__zr) {\n child.addSelfToZr(zr);\n }\n zr && zr.refresh();\n };\n Group.prototype.remove = function (child) {\n var zr = this.__zr;\n var children = this._children;\n var idx = zrUtil.indexOf(children, child);\n if (idx < 0) {\n return this;\n }\n children.splice(idx, 1);\n child.parent = null;\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n zr && zr.refresh();\n return this;\n };\n Group.prototype.removeAll = function () {\n var children = this._children;\n var zr = this.__zr;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n child.parent = null;\n }\n children.length = 0;\n return this;\n };\n Group.prototype.eachChild = function (cb, context) {\n var children = this._children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\n return this;\n };\n Group.prototype.traverse = function (cb, context) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n var stopped = cb.call(context, child);\n if (child.isGroup && !stopped) {\n child.traverse(cb, context);\n }\n }\n return this;\n };\n Group.prototype.addSelfToZr = function (zr) {\n _super.prototype.addSelfToZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.addSelfToZr(zr);\n }\n };\n Group.prototype.removeSelfFromZr = function (zr) {\n _super.prototype.removeSelfFromZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.removeSelfFromZr(zr);\n }\n };\n Group.prototype.getBoundingRect = function (includeChildren) {\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = includeChildren || this._children;\n var tmpMat = [];\n var rect = null;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.ignore || child.invisible) {\n continue;\n }\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat);\n if (transform) {\n BoundingRect.applyTransform(tmpRect, childRect, transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n return rect || tmpRect;\n };\n return Group;\n}(Element));\nGroup.prototype.type = 'group';\nexport default Group;\n","import { parse } from '../tool/color';\nexport function createElement(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nexport function normalizeColor(color) {\n var opacity;\n if (!color || color === 'transparent') {\n color = 'none';\n }\n else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\n var arr = parse(color);\n if (arr) {\n color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')';\n opacity = arr[3];\n }\n }\n return {\n color: color,\n opacity: opacity == null ? 1 : opacity\n };\n}\n","function diff(oldArr, newArr, equals) {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n oldArr = oldArr.slice();\n newArr = newArr.slice();\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{ newPos: -1, components: [] }];\n var oldPos = extractCommon(bestPath[0], newArr, oldArr, 0, equals);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n for (var i = 0; i < newArr.length; i++) {\n indices.push(i);\n }\n return [{\n indices: indices,\n count: newArr.length,\n added: false,\n removed: false\n }];\n }\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath;\n var addPath = bestPath[diagonalPath - 1];\n var removePath = bestPath[diagonalPath + 1];\n var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = addPath && addPath.newPos + 1 < newLen;\n var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n if (!canAdd && !canRemove) {\n bestPath[diagonalPath] = undefined;\n continue;\n }\n if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n pushComponent(basePath.components, false, true);\n }\n else {\n basePath = addPath;\n basePath.newPos++;\n pushComponent(basePath.components, true, false);\n }\n oldPos = extractCommon(basePath, newArr, oldArr, diagonalPath, equals);\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(basePath.components);\n }\n else {\n bestPath[diagonalPath] = basePath;\n }\n }\n editLength++;\n }\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n}\nfunction extractCommon(basePath, newArr, oldArr, diagonalPath, equals) {\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var newPos = basePath.newPos;\n var oldPos = newPos - diagonalPath;\n var commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n if (commonCount) {\n basePath.components.push({\n count: commonCount,\n added: false,\n removed: false,\n indices: []\n });\n }\n basePath.newPos = newPos;\n return oldPos;\n}\nfunction pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n if (last && last.added === added && last.removed === removed) {\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed,\n indices: []\n };\n }\n else {\n components.push({\n count: 1,\n added: added,\n removed: removed,\n indices: []\n });\n }\n}\nfunction buildValues(components) {\n var componentPos = 0;\n var componentLen = components.length;\n var newPos = 0;\n var oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n var indices = [];\n for (var i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n component.indices = indices;\n newPos += component.count;\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n for (var i = oldPos; i < oldPos + component.count; i++) {\n component.indices.push(i);\n }\n oldPos += component.count;\n }\n }\n return components;\n}\nfunction clonePath(path) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\nexport default function arrayDiff(oldArr, newArr, equal) {\n return diff(oldArr, newArr, equal);\n}\n","import { createElement, normalizeColor } from './core';\nimport ZRImage from '../graphic/Image';\nimport { DEFAULT_FONT, getLineHeight } from '../contain/text';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\nvar EPSILON = 1e-4;\nfunction round3(val) {\n return mathRound(val * 1e3) / 1e3;\n}\nfunction round4(val) {\n return mathRound(val * 1e4) / 1e4;\n}\nfunction isAroundZero(val) {\n return val < EPSILON && val > -EPSILON;\n}\nfunction pathHasFill(style) {\n var fill = style.fill;\n return fill != null && fill !== NONE;\n}\nfunction pathHasStroke(style) {\n var stroke = style.stroke;\n return stroke != null && stroke !== NONE;\n}\nfunction setTransform(svgEl, m) {\n if (m) {\n attr(svgEl, 'transform', 'matrix('\n + round3(m[0]) + ','\n + round3(m[1]) + ','\n + round3(m[2]) + ','\n + round3(m[3]) + ','\n + round4(m[4]) + ','\n + round4(m[5])\n + ')');\n }\n}\nfunction attr(el, key, val) {\n if (!val || val.type !== 'linear' && val.type !== 'radial') {\n el.setAttribute(key, val);\n }\n}\nfunction attrXLink(el, key, val) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\nfunction attrXML(el, key, val) {\n el.setAttributeNS('http://www.w3.org/XML/1998/namespace', key, val);\n}\nfunction bindStyle(svgEl, style, el) {\n var opacity = style.opacity == null ? 1 : style.opacity;\n if (el instanceof ZRImage) {\n svgEl.style.opacity = opacity + '';\n return;\n }\n if (pathHasFill(style)) {\n var fill = normalizeColor(style.fill);\n attr(svgEl, 'fill', fill.color);\n attr(svgEl, 'fill-opacity', (style.fillOpacity != null\n ? style.fillOpacity * fill.opacity * opacity\n : fill.opacity * opacity) + '');\n }\n else {\n attr(svgEl, 'fill', NONE);\n }\n if (pathHasStroke(style)) {\n var stroke = normalizeColor(style.stroke);\n attr(svgEl, 'stroke', stroke.color);\n var strokeWidth = style.lineWidth;\n var strokeScale_1 = style.strokeNoScale\n ? el.getLineScale()\n : 1;\n attr(svgEl, 'stroke-width', (strokeScale_1 ? strokeWidth / strokeScale_1 : 0) + '');\n attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill');\n attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null\n ? style.strokeOpacity * stroke.opacity * opacity\n : stroke.opacity * opacity) + '');\n var lineDash = style.lineDash && strokeWidth > 0 && normalizeLineDash(style.lineDash, strokeWidth);\n if (lineDash) {\n var lineDashOffset = style.lineDashOffset;\n if (strokeScale_1 && strokeScale_1 !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / strokeScale_1;\n });\n if (lineDashOffset) {\n lineDashOffset /= strokeScale_1;\n lineDashOffset = mathRound(lineDashOffset);\n }\n }\n attr(svgEl, 'stroke-dasharray', lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', (lineDashOffset || 0) + '');\n }\n else {\n attr(svgEl, 'stroke-dasharray', '');\n }\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit + '');\n }\n else {\n attr(svgEl, 'stroke', NONE);\n }\n}\nvar SVGPathRebuilder = (function () {\n function SVGPathRebuilder() {\n }\n SVGPathRebuilder.prototype.reset = function () {\n this._d = [];\n this._str = '';\n };\n SVGPathRebuilder.prototype.moveTo = function (x, y) {\n this._add('M', x, y);\n };\n SVGPathRebuilder.prototype.lineTo = function (x, y) {\n this._add('L', x, y);\n };\n SVGPathRebuilder.prototype.bezierCurveTo = function (x, y, x2, y2, x3, y3) {\n this._add('C', x, y, x2, y2, x3, y3);\n };\n SVGPathRebuilder.prototype.quadraticCurveTo = function (x, y, x2, y2) {\n this._add('Q', x, y, x2, y2);\n };\n SVGPathRebuilder.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise);\n };\n SVGPathRebuilder.prototype.ellipse = function (cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise) {\n var firstCmd = this._d.length === 0;\n var dTheta = endAngle - startAngle;\n var clockwise = !anticlockwise;\n var dThetaPositive = Math.abs(dTheta);\n var isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n var unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n var large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n var x0 = round4(cx + rx * mathCos(startAngle));\n var y0 = round4(cy + ry * mathSin(startAngle));\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n }\n else {\n dTheta = -PI2 + 1e-4;\n }\n large = true;\n if (firstCmd) {\n this._d.push('M', x0, y0);\n }\n }\n var x = round4(cx + rx * mathCos(startAngle + dTheta));\n var y = round4(cy + ry * mathSin(startAngle + dTheta));\n if (isNaN(x0) || isNaN(y0) || isNaN(rx) || isNaN(ry) || isNaN(psi) || isNaN(degree) || isNaN(x) || isNaN(y)) {\n return '';\n }\n this._d.push('A', round4(rx), round4(ry), mathRound(psi * degree), +large, +clockwise, x, y);\n };\n SVGPathRebuilder.prototype.rect = function (x, y, w, h) {\n this._add('M', x, y);\n this._add('L', x + w, y);\n this._add('L', x + w, y + h);\n this._add('L', x, y + h);\n this._add('L', x, y);\n this._add('Z');\n };\n SVGPathRebuilder.prototype.closePath = function () {\n if (this._d.length > 0) {\n this._add('Z');\n }\n };\n SVGPathRebuilder.prototype._add = function (cmd, a, b, c, d, e, f, g, h) {\n this._d.push(cmd);\n for (var i = 1; i < arguments.length; i++) {\n var val = arguments[i];\n if (isNaN(val)) {\n this._invalid = true;\n return;\n }\n this._d.push(round4(val));\n }\n };\n SVGPathRebuilder.prototype.generateStr = function () {\n this._str = this._invalid ? '' : this._d.join(' ');\n this._d = [];\n };\n SVGPathRebuilder.prototype.getStr = function () {\n return this._str;\n };\n return SVGPathRebuilder;\n}());\nvar svgPath = {\n brush: function (el) {\n var style = el.style;\n var svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n if (!el.path) {\n el.createPathProxy();\n }\n var path = el.path;\n if (el.shapeChanged()) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.pathUpdated();\n }\n var pathVersion = path.getVersion();\n var elExt = el;\n var svgPathBuilder = elExt.__svgPathBuilder;\n if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || el.style.strokePercent < 1) {\n if (!svgPathBuilder) {\n svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder();\n }\n svgPathBuilder.reset();\n path.rebuildPath(svgPathBuilder, el.style.strokePercent);\n svgPathBuilder.generateStr();\n elExt.__svgPathVersion = pathVersion;\n }\n attr(svgEl, 'd', svgPathBuilder.getStr());\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\nexport { svgPath as path };\nvar svgImage = {\n brush: function (el) {\n var style = el.style;\n var image = style.image;\n if (image instanceof HTMLImageElement) {\n image = image.src;\n }\n else if (image instanceof HTMLCanvasElement) {\n image = image.toDataURL();\n }\n if (!image) {\n return;\n }\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image);\n el.__imageSrc = image;\n }\n attr(svgEl, 'width', dw + '');\n attr(svgEl, 'height', dh + '');\n attr(svgEl, 'x', x + '');\n attr(svgEl, 'y', y + '');\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\nexport { svgImage as image };\nvar TEXT_ALIGN_TO_ANCHOR = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\nfunction adjustTextY(y, lineHeight, textBaseline) {\n if (textBaseline === 'top') {\n y += lineHeight / 2;\n }\n else if (textBaseline === 'bottom') {\n y -= lineHeight / 2;\n }\n return y;\n}\nvar svgText = {\n brush: function (el) {\n var style = el.style;\n var text = style.text;\n text != null && (text += '');\n if (!text || isNaN(style.x) || isNaN(style.y)) {\n return;\n }\n var textSvgEl = el.__svgEl;\n if (!textSvgEl) {\n textSvgEl = createElement('text');\n attrXML(textSvgEl, 'xml:space', 'preserve');\n el.__svgEl = textSvgEl;\n }\n var font = style.font || DEFAULT_FONT;\n var textSvgElStyle = textSvgEl.style;\n textSvgElStyle.font = font;\n textSvgEl.textContent = text;\n bindStyle(textSvgEl, style, el);\n setTransform(textSvgEl, el.transform);\n var x = style.x || 0;\n var y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n var textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign]\n || style.textAlign;\n attr(textSvgEl, 'dominant-baseline', 'central');\n attr(textSvgEl, 'text-anchor', textAlign);\n attr(textSvgEl, 'x', x + '');\n attr(textSvgEl, 'y', y + '');\n }\n};\nexport { svgText as text };\n","import { createElement } from '../core';\nimport * as zrUtil from '../../core/util';\nimport Path from '../../graphic/Path';\nimport ZRImage from '../../graphic/Image';\nimport TSpan from '../../graphic/TSpan';\nimport { path as svgPath, image as svgImage, text as svgText } from '../graphic';\nvar MARK_UNUSED = '0';\nvar MARK_USED = '1';\nvar Definable = (function () {\n function Definable(zrId, svgRoot, tagNames, markLabel, domName) {\n this.nextId = 0;\n this._domName = '_dom';\n this.createElement = createElement;\n this._zrId = zrId;\n this._svgRoot = svgRoot;\n this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n this._markLabel = markLabel;\n if (domName) {\n this._domName = domName;\n }\n }\n Definable.prototype.getDefs = function (isForceCreating) {\n var svgRoot = this._svgRoot;\n var defs = this._svgRoot.getElementsByTagName('defs');\n if (defs.length === 0) {\n if (isForceCreating) {\n var defs_1 = svgRoot.insertBefore(this.createElement('defs'), svgRoot.firstChild);\n if (!defs_1.contains) {\n defs_1.contains = function (el) {\n var children = defs_1.children;\n if (!children) {\n return false;\n }\n for (var i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n return false;\n };\n }\n return defs_1;\n }\n else {\n return null;\n }\n }\n else {\n return defs[0];\n }\n };\n Definable.prototype.doUpdate = function (target, onUpdate) {\n if (!target) {\n return;\n }\n var defs = this.getDefs(false);\n if (target[this._domName] && defs.contains(target[this._domName])) {\n if (typeof onUpdate === 'function') {\n onUpdate(target);\n }\n }\n else {\n var dom = this.add(target);\n if (dom) {\n target[this._domName] = dom;\n }\n }\n };\n Definable.prototype.add = function (target) {\n return null;\n };\n Definable.prototype.addDom = function (dom) {\n var defs = this.getDefs(true);\n if (dom.parentNode !== defs) {\n defs.appendChild(dom);\n }\n };\n Definable.prototype.removeDom = function (target) {\n var defs = this.getDefs(false);\n if (defs && target[this._domName]) {\n defs.removeChild(target[this._domName]);\n target[this._domName] = null;\n }\n };\n Definable.prototype.getDoms = function () {\n var defs = this.getDefs(false);\n if (!defs) {\n return [];\n }\n var doms = [];\n zrUtil.each(this._tagNames, function (tagName) {\n var tags = defs.getElementsByTagName(tagName);\n for (var i = 0; i < tags.length; i++) {\n doms.push(tags[i]);\n }\n });\n return doms;\n };\n Definable.prototype.markAllUnused = function () {\n var doms = this.getDoms();\n var that = this;\n zrUtil.each(doms, function (dom) {\n dom[that._markLabel] = MARK_UNUSED;\n });\n };\n Definable.prototype.markDomUsed = function (dom) {\n dom && (dom[this._markLabel] = MARK_USED);\n };\n ;\n Definable.prototype.markDomUnused = function (dom) {\n dom && (dom[this._markLabel] = MARK_UNUSED);\n };\n ;\n Definable.prototype.isDomUnused = function (dom) {\n return dom && dom[this._markLabel] !== MARK_USED;\n };\n Definable.prototype.removeUnused = function () {\n var _this = this;\n var defs = this.getDefs(false);\n if (!defs) {\n return;\n }\n var doms = this.getDoms();\n zrUtil.each(doms, function (dom) {\n if (_this.isDomUnused(dom)) {\n defs.removeChild(dom);\n }\n });\n };\n Definable.prototype.getSvgProxy = function (displayable) {\n if (displayable instanceof Path) {\n return svgPath;\n }\n else if (displayable instanceof ZRImage) {\n return svgImage;\n }\n else if (displayable instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n };\n Definable.prototype.getSvgElement = function (displayable) {\n return displayable.__svgEl;\n };\n return Definable;\n}());\nexport default Definable;\n","import { __extends } from \"tslib\";\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as colorTool from '../../tool/color';\nfunction isLinearGradient(value) {\n return value.type === 'linear';\n}\nfunction isRadialGradient(value) {\n return value.type === 'radial';\n}\nfunction isGradient(value) {\n return value && (value.type === 'linear'\n || value.type === 'radial');\n}\nvar GradientManager = (function (_super) {\n __extends(GradientManager, _super);\n function GradientManager(zrId, svgRoot) {\n return _super.call(this, zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__') || this;\n }\n GradientManager.prototype.addWithoutUpdate = function (svgElement, displayable) {\n if (displayable && displayable.style) {\n var that_1 = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n var value = displayable.style[fillOrStroke];\n if (isGradient(value)) {\n var gradient = value;\n var defs = that_1.getDefs(true);\n var dom = void 0;\n if (gradient.__dom) {\n dom = gradient.__dom;\n if (!defs.contains(gradient.__dom)) {\n that_1.addDom(dom);\n }\n }\n else {\n dom = that_1.add(gradient);\n }\n that_1.markUsed(displayable);\n var id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n };\n GradientManager.prototype.add = function (gradient) {\n var dom;\n if (isLinearGradient(gradient)) {\n dom = this.createElement('linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n dom = this.createElement('radialGradient');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return null;\n }\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-gradient-' + gradient.id);\n this.updateDom(gradient, dom);\n this.addDom(dom);\n return dom;\n };\n GradientManager.prototype.update = function (gradient) {\n if (!isGradient(gradient)) {\n return;\n }\n var that = this;\n this.doUpdate(gradient, function () {\n var dom = gradient.__dom;\n if (!dom) {\n return;\n }\n var tagName = dom.tagName;\n var type = gradient.type;\n if (type === 'linear' && tagName === 'linearGradient'\n || type === 'radial' && tagName === 'radialGradient') {\n that.updateDom(gradient, gradient.__dom);\n }\n else {\n that.removeDom(gradient);\n that.add(gradient);\n }\n });\n };\n GradientManager.prototype.updateDom = function (gradient, dom) {\n if (isLinearGradient(gradient)) {\n dom.setAttribute('x1', gradient.x + '');\n dom.setAttribute('y1', gradient.y + '');\n dom.setAttribute('x2', gradient.x2 + '');\n dom.setAttribute('y2', gradient.y2 + '');\n }\n else if (isRadialGradient(gradient)) {\n dom.setAttribute('cx', gradient.x + '');\n dom.setAttribute('cy', gradient.y + '');\n dom.setAttribute('r', gradient.r + '');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return;\n }\n if (gradient.global) {\n dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n }\n else {\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n }\n dom.innerHTML = '';\n var colors = gradient.colorStops;\n for (var i = 0, len = colors.length; i < len; ++i) {\n var stop_1 = this.createElement('stop');\n stop_1.setAttribute('offset', colors[i].offset * 100 + '%');\n var color = colors[i].color;\n if (color.indexOf('rgba') > -1) {\n var opacity = colorTool.parse(color)[3];\n var hex = colorTool.toHex(color);\n stop_1.setAttribute('stop-color', '#' + hex);\n stop_1.setAttribute('stop-opacity', opacity + '');\n }\n else {\n stop_1.setAttribute('stop-color', colors[i].color);\n }\n dom.appendChild(stop_1);\n }\n gradient.__dom = dom;\n };\n GradientManager.prototype.markUsed = function (displayable) {\n if (displayable.style) {\n var gradient = displayable.style.fill;\n if (gradient && gradient.__dom) {\n _super.prototype.markDomUsed.call(this, gradient.__dom);\n }\n gradient = displayable.style.stroke;\n if (gradient && gradient.__dom) {\n _super.prototype.markDomUsed.call(this, gradient.__dom);\n }\n }\n };\n return GradientManager;\n}(Definable));\nexport default GradientManager;\n","import { __extends } from \"tslib\";\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport { createOrUpdateImage } from '../../graphic/helper/image';\nimport WeakMap from '../../core/WeakMap';\nfunction isPattern(value) {\n return value && (!!value.image || !!value.svgElement);\n}\nvar patternDomMap = new WeakMap();\nvar PatternManager = (function (_super) {\n __extends(PatternManager, _super);\n function PatternManager(zrId, svgRoot) {\n return _super.call(this, zrId, svgRoot, ['pattern'], '__pattern_in_use__') || this;\n }\n PatternManager.prototype.addWithoutUpdate = function (svgElement, displayable) {\n if (displayable && displayable.style) {\n var that_1 = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n var pattern = displayable.style[fillOrStroke];\n if (isPattern(pattern)) {\n var defs = that_1.getDefs(true);\n var dom = patternDomMap.get(pattern);\n if (dom) {\n if (!defs.contains(dom)) {\n that_1.addDom(dom);\n }\n }\n else {\n dom = that_1.add(pattern);\n }\n that_1.markUsed(displayable);\n var id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n };\n PatternManager.prototype.add = function (pattern) {\n if (!isPattern(pattern)) {\n return;\n }\n var dom = this.createElement('pattern');\n pattern.id = pattern.id == null ? this.nextId++ : pattern.id;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-pattern-' + pattern.id);\n dom.setAttribute('x', '0');\n dom.setAttribute('y', '0');\n dom.setAttribute('patternUnits', 'userSpaceOnUse');\n this.updateDom(pattern, dom);\n this.addDom(dom);\n return dom;\n };\n PatternManager.prototype.update = function (pattern) {\n if (!isPattern(pattern)) {\n return;\n }\n var that = this;\n this.doUpdate(pattern, function () {\n var dom = patternDomMap.get(pattern);\n that.updateDom(pattern, dom);\n });\n };\n PatternManager.prototype.updateDom = function (pattern, patternDom) {\n var svgElement = pattern.svgElement;\n if (svgElement instanceof SVGElement) {\n if (svgElement.parentNode !== patternDom) {\n patternDom.innerHTML = '';\n patternDom.appendChild(svgElement);\n patternDom.setAttribute('width', pattern.svgWidth + '');\n patternDom.setAttribute('height', pattern.svgHeight + '');\n }\n }\n else {\n var img = void 0;\n var prevImage = patternDom.getElementsByTagName('image');\n if (prevImage.length) {\n if (pattern.image) {\n img = prevImage[0];\n }\n else {\n patternDom.removeChild(prevImage[0]);\n return;\n }\n }\n else if (pattern.image) {\n img = this.createElement('image');\n }\n if (img) {\n var imageSrc = void 0;\n var patternImage = pattern.image;\n if (typeof patternImage === 'string') {\n imageSrc = patternImage;\n }\n else if (patternImage instanceof HTMLImageElement) {\n imageSrc = patternImage.src;\n }\n else if (patternImage instanceof HTMLCanvasElement) {\n imageSrc = patternImage.toDataURL();\n }\n if (imageSrc) {\n img.setAttribute('href', imageSrc);\n img.setAttribute('x', '0');\n img.setAttribute('y', '0');\n var hostEl = {\n dirty: function () { }\n };\n var createdImage = createOrUpdateImage(imageSrc, img, hostEl, function (img) {\n patternDom.setAttribute('width', img.width + '');\n patternDom.setAttribute('height', img.height + '');\n });\n if (createdImage && createdImage.width && createdImage.height) {\n patternDom.setAttribute('width', createdImage.width + '');\n patternDom.setAttribute('height', createdImage.height + '');\n }\n patternDom.appendChild(img);\n }\n }\n }\n var x = pattern.x || 0;\n var y = pattern.y || 0;\n var rotation = (pattern.rotation || 0) / Math.PI * 180;\n var scaleX = pattern.scaleX || 1;\n var scaleY = pattern.scaleY || 1;\n var transform = \"translate(\" + x + \", \" + y + \") rotate(\" + rotation + \") scale(\" + scaleX + \", \" + scaleY + \")\";\n patternDom.setAttribute('patternTransform', transform);\n patternDomMap.set(pattern, patternDom);\n };\n PatternManager.prototype.markUsed = function (displayable) {\n if (displayable.style) {\n if (isPattern(displayable.style.fill)) {\n _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.fill));\n }\n if (isPattern(displayable.style.stroke)) {\n _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.stroke));\n }\n }\n };\n return PatternManager;\n}(Definable));\nexport default PatternManager;\n","import { __extends } from \"tslib\";\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport { isClipPathChanged } from '../../canvas/helper';\nfunction generateClipPathsKey(clipPaths) {\n var key = [];\n if (clipPaths) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n key.push(clipPath.id);\n }\n }\n return key.join(',');\n}\nexport function hasClipPath(displayable) {\n var clipPaths = displayable.__clipPaths;\n return clipPaths && clipPaths.length > 0;\n}\nvar ClippathManager = (function (_super) {\n __extends(ClippathManager, _super);\n function ClippathManager(zrId, svgRoot) {\n var _this = _super.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__') || this;\n _this._refGroups = {};\n _this._keyDuplicateCount = {};\n return _this;\n }\n ClippathManager.prototype.markAllUnused = function () {\n _super.prototype.markAllUnused.call(this);\n var refGroups = this._refGroups;\n for (var key in refGroups) {\n if (refGroups.hasOwnProperty(key)) {\n this.markDomUnused(refGroups[key]);\n }\n }\n this._keyDuplicateCount = {};\n };\n ClippathManager.prototype._getClipPathGroup = function (displayable, prevDisplayable) {\n if (!hasClipPath(displayable)) {\n return;\n }\n var clipPaths = displayable.__clipPaths;\n var keyDuplicateCount = this._keyDuplicateCount;\n var clipPathKey = generateClipPathsKey(clipPaths);\n if (isClipPathChanged(clipPaths, prevDisplayable && prevDisplayable.__clipPaths)) {\n keyDuplicateCount[clipPathKey] = keyDuplicateCount[clipPathKey] || 0;\n keyDuplicateCount[clipPathKey] && (clipPathKey += '-' + keyDuplicateCount[clipPathKey]);\n keyDuplicateCount[clipPathKey]++;\n }\n return this._refGroups[clipPathKey]\n || (this._refGroups[clipPathKey] = this.createElement('g'));\n };\n ClippathManager.prototype.update = function (displayable, prevDisplayable) {\n var clipGroup = this._getClipPathGroup(displayable, prevDisplayable);\n if (clipGroup) {\n this.markDomUsed(clipGroup);\n this.updateDom(clipGroup, displayable.__clipPaths);\n }\n return clipGroup;\n };\n ;\n ClippathManager.prototype.updateDom = function (parentEl, clipPaths) {\n if (clipPaths && clipPaths.length > 0) {\n var defs = this.getDefs(true);\n var clipPath = clipPaths[0];\n var clipPathEl = void 0;\n var id = void 0;\n if (clipPath._dom) {\n id = clipPath._dom.getAttribute('id');\n clipPathEl = clipPath._dom;\n if (!defs.contains(clipPathEl)) {\n defs.appendChild(clipPathEl);\n }\n }\n else {\n id = 'zr' + this._zrId + '-clip-' + this.nextId;\n ++this.nextId;\n clipPathEl = this.createElement('clipPath');\n clipPathEl.setAttribute('id', id);\n defs.appendChild(clipPathEl);\n clipPath._dom = clipPathEl;\n }\n var svgProxy = this.getSvgProxy(clipPath);\n svgProxy.brush(clipPath);\n var pathEl = this.getSvgElement(clipPath);\n clipPathEl.innerHTML = '';\n clipPathEl.appendChild(pathEl);\n parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n if (clipPaths.length > 1) {\n this.updateDom(clipPathEl, clipPaths.slice(1));\n }\n }\n else {\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n };\n ;\n ClippathManager.prototype.markUsed = function (displayable) {\n var _this = this;\n if (displayable.__clipPaths) {\n zrUtil.each(displayable.__clipPaths, function (clipPath) {\n if (clipPath._dom) {\n _super.prototype.markDomUsed.call(_this, clipPath._dom);\n }\n });\n }\n };\n ;\n ClippathManager.prototype.removeUnused = function () {\n _super.prototype.removeUnused.call(this);\n var newRefGroupsMap = {};\n var refGroups = this._refGroups;\n for (var key in refGroups) {\n if (refGroups.hasOwnProperty(key)) {\n var group = refGroups[key];\n if (!this.isDomUnused(group)) {\n newRefGroupsMap[key] = group;\n }\n else if (group.parentNode) {\n group.parentNode.removeChild(group);\n }\n }\n }\n this._refGroups = newRefGroupsMap;\n };\n return ClippathManager;\n}(Definable));\nexport default ClippathManager;\n","import { __extends } from \"tslib\";\nimport Definable from './Definable';\nimport { normalizeColor } from '../core';\nvar ShadowManager = (function (_super) {\n __extends(ShadowManager, _super);\n function ShadowManager(zrId, svgRoot) {\n var _this = _super.call(this, zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom') || this;\n _this._shadowDomMap = {};\n _this._shadowDomPool = [];\n return _this;\n }\n ShadowManager.prototype._getFromPool = function () {\n var shadowDom = this._shadowDomPool.pop();\n if (!shadowDom) {\n shadowDom = this.createElement('filter');\n shadowDom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + this.nextId++);\n var domChild = this.createElement('feDropShadow');\n shadowDom.appendChild(domChild);\n this.addDom(shadowDom);\n }\n return shadowDom;\n };\n ShadowManager.prototype.update = function (svgElement, displayable) {\n var style = displayable.style;\n if (hasShadow(style)) {\n var shadowKey = getShadowKey(displayable);\n var shadowDom = displayable._shadowDom = this._shadowDomMap[shadowKey];\n if (!shadowDom) {\n shadowDom = this._getFromPool();\n this._shadowDomMap[shadowKey] = shadowDom;\n }\n this.updateDom(svgElement, displayable, shadowDom);\n }\n else {\n this.remove(svgElement, displayable);\n }\n };\n ShadowManager.prototype.remove = function (svgElement, displayable) {\n if (displayable._shadowDom != null) {\n displayable._shadowDom = null;\n svgElement.style.filter = '';\n }\n };\n ShadowManager.prototype.updateDom = function (svgElement, displayable, shadowDom) {\n var domChild = shadowDom.children[0];\n var style = displayable.style;\n var globalScale = displayable.getGlobalScale();\n var scaleX = globalScale[0];\n var scaleY = globalScale[1];\n if (!scaleX || !scaleY) {\n return;\n }\n var offsetX = style.shadowOffsetX || 0;\n var offsetY = style.shadowOffsetY || 0;\n var blur = style.shadowBlur;\n var normalizedColor = normalizeColor(style.shadowColor);\n domChild.setAttribute('dx', offsetX / scaleX + '');\n domChild.setAttribute('dy', offsetY / scaleY + '');\n domChild.setAttribute('flood-color', normalizedColor.color);\n domChild.setAttribute('flood-opacity', normalizedColor.opacity + '');\n var stdDx = blur / 2 / scaleX;\n var stdDy = blur / 2 / scaleY;\n var stdDeviation = stdDx + ' ' + stdDy;\n domChild.setAttribute('stdDeviation', stdDeviation);\n shadowDom.setAttribute('x', '-100%');\n shadowDom.setAttribute('y', '-100%');\n shadowDom.setAttribute('width', '300%');\n shadowDom.setAttribute('height', '300%');\n displayable._shadowDom = shadowDom;\n var id = shadowDom.getAttribute('id');\n svgElement.style.filter = 'url(#' + id + ')';\n };\n ShadowManager.prototype.removeUnused = function () {\n var defs = this.getDefs(false);\n if (!defs) {\n return;\n }\n var shadowDomsPool = this._shadowDomPool;\n var shadowDomMap = this._shadowDomMap;\n for (var key in shadowDomMap) {\n if (shadowDomMap.hasOwnProperty(key)) {\n shadowDomsPool.push(shadowDomMap[key]);\n }\n }\n this._shadowDomMap = {};\n };\n return ShadowManager;\n}(Definable));\nexport default ShadowManager;\nfunction hasShadow(style) {\n return style\n && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\n}\nfunction getShadowKey(displayable) {\n var style = displayable.style;\n var globalScale = displayable.getGlobalScale();\n return [\n style.shadowColor,\n (style.shadowBlur || 0).toFixed(2),\n (style.shadowOffsetX || 0).toFixed(2),\n (style.shadowOffsetY || 0).toFixed(2),\n globalScale[0],\n globalScale[1]\n ].join(',');\n}\n","import { createElement, normalizeColor } from './core';\nimport * as util from '../core/util';\nimport Path from '../graphic/Path';\nimport ZRImage from '../graphic/Image';\nimport TSpan from '../graphic/TSpan';\nimport arrayDiff from '../core/arrayDiff';\nimport GradientManager from './helper/GradientManager';\nimport PatternManager from './helper/PatternManager';\nimport ClippathManager, { hasClipPath } from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport { path as svgPath, image as svgImage, text as svgText } from './graphic';\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\nfunction getSvgProxy(el) {\n if (el instanceof Path) {\n return svgPath;\n }\n else if (el instanceof ZRImage) {\n return svgImage;\n }\n else if (el instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n}\nfunction checkParentAvailable(parent, child) {\n return child && parent && child.parentNode !== parent;\n}\nfunction insertAfter(parent, child, prevSibling) {\n if (checkParentAvailable(parent, child) && prevSibling) {\n var nextSibling = prevSibling.nextSibling;\n nextSibling ? parent.insertBefore(child, nextSibling)\n : parent.appendChild(child);\n }\n}\nfunction prepend(parent, child) {\n if (checkParentAvailable(parent, child)) {\n var firstChild = parent.firstChild;\n firstChild ? parent.insertBefore(child, firstChild)\n : parent.appendChild(child);\n }\n}\nfunction remove(parent, child) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n}\nfunction removeFromMyParent(child) {\n if (child && child.parentNode) {\n child.parentNode.removeChild(child);\n }\n}\nfunction getSvgElement(displayable) {\n return displayable.__svgEl;\n}\nvar SVGPainter = (function () {\n function SVGPainter(root, storage, opts, zrId) {\n this.type = 'svg';\n this.refreshHover = createMethodNotSupport('refreshHover');\n this.pathToImage = createMethodNotSupport('pathToImage');\n this.configLayer = createMethodNotSupport('configLayer');\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n var svgDom = createElement('svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n svgDom.setAttribute('version', '1.1');\n svgDom.setAttribute('baseProfile', 'full');\n svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n var bgRoot = createElement('g');\n svgDom.appendChild(bgRoot);\n var svgRoot = createElement('g');\n svgDom.appendChild(svgRoot);\n this._gradientManager = new GradientManager(zrId, svgRoot);\n this._patternManager = new PatternManager(zrId, svgRoot);\n this._clipPathManager = new ClippathManager(zrId, svgRoot);\n this._shadowManager = new ShadowManager(zrId, svgRoot);\n var viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n this._svgDom = svgDom;\n this._svgRoot = svgRoot;\n this._backgroundRoot = bgRoot;\n this._viewport = viewport;\n root.appendChild(viewport);\n viewport.appendChild(svgDom);\n this.resize(opts.width, opts.height);\n this._visibleList = [];\n }\n SVGPainter.prototype.getType = function () {\n return 'svg';\n };\n SVGPainter.prototype.getViewportRoot = function () {\n return this._viewport;\n };\n SVGPainter.prototype.getSvgDom = function () {\n return this._svgDom;\n };\n SVGPainter.prototype.getSvgRoot = function () {\n return this._svgRoot;\n };\n SVGPainter.prototype.getViewportRootOffset = function () {\n var viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n };\n SVGPainter.prototype.refresh = function () {\n var list = this.storage.getDisplayList(true);\n this._paintList(list);\n };\n SVGPainter.prototype.setBackgroundColor = function (backgroundColor) {\n if (this._backgroundRoot && this._backgroundNode) {\n this._backgroundRoot.removeChild(this._backgroundNode);\n }\n var bgNode = createElement('rect');\n bgNode.setAttribute('width', this.getWidth());\n bgNode.setAttribute('height', this.getHeight());\n bgNode.setAttribute('x', 0);\n bgNode.setAttribute('y', 0);\n bgNode.setAttribute('id', 0);\n var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity;\n bgNode.setAttribute('fill', color);\n bgNode.setAttribute('fill-opacity', opacity);\n this._backgroundRoot.appendChild(bgNode);\n this._backgroundNode = bgNode;\n };\n SVGPainter.prototype.createSVGElement = function (tag) {\n return createElement(tag);\n };\n SVGPainter.prototype.paintOne = function (el) {\n var svgProxy = getSvgProxy(el);\n svgProxy && svgProxy.brush(el);\n return getSvgElement(el);\n };\n SVGPainter.prototype._paintList = function (list) {\n var gradientManager = this._gradientManager;\n var patternManager = this._patternManager;\n var clipPathManager = this._clipPathManager;\n var shadowManager = this._shadowManager;\n gradientManager.markAllUnused();\n patternManager.markAllUnused();\n clipPathManager.markAllUnused();\n shadowManager.markAllUnused();\n var svgRoot = this._svgRoot;\n var visibleList = this._visibleList;\n var listLen = list.length;\n var newVisibleList = [];\n for (var i = 0; i < listLen; i++) {\n var displayable = list[i];\n var svgProxy = getSvgProxy(displayable);\n var svgElement = getSvgElement(displayable);\n if (!displayable.invisible) {\n if (displayable.__dirty || !svgElement) {\n svgProxy && svgProxy.brush(displayable);\n svgElement = getSvgElement(displayable);\n if (svgElement && displayable.style) {\n gradientManager.update(displayable.style.fill);\n gradientManager.update(displayable.style.stroke);\n patternManager.update(displayable.style.fill);\n patternManager.update(displayable.style.stroke);\n shadowManager.update(svgElement, displayable);\n }\n displayable.__dirty = 0;\n }\n if (svgElement) {\n newVisibleList.push(displayable);\n }\n }\n }\n var diff = arrayDiff(visibleList, newVisibleList);\n var prevSvgElement;\n var topPrevSvgElement;\n for (var i = 0; i < diff.length; i++) {\n var item = diff[i];\n if (item.removed) {\n for (var k = 0; k < item.count; k++) {\n var displayable = visibleList[item.indices[k]];\n var svgElement = getSvgElement(displayable);\n hasClipPath(displayable) ? removeFromMyParent(svgElement)\n : remove(svgRoot, svgElement);\n }\n }\n }\n var prevDisplayable;\n var currentClipGroup;\n for (var i = 0; i < diff.length; i++) {\n var item = diff[i];\n if (item.removed) {\n continue;\n }\n for (var k = 0; k < item.count; k++) {\n var displayable = newVisibleList[item.indices[k]];\n var clipGroup = clipPathManager.update(displayable, prevDisplayable);\n if (clipGroup !== currentClipGroup) {\n prevSvgElement = topPrevSvgElement;\n if (clipGroup) {\n prevSvgElement ? insertAfter(svgRoot, clipGroup, prevSvgElement)\n : prepend(svgRoot, clipGroup);\n topPrevSvgElement = clipGroup;\n prevSvgElement = null;\n }\n currentClipGroup = clipGroup;\n }\n var svgElement = getSvgElement(displayable);\n prevSvgElement\n ? insertAfter(currentClipGroup || svgRoot, svgElement, prevSvgElement)\n : prepend(currentClipGroup || svgRoot, svgElement);\n prevSvgElement = svgElement || prevSvgElement;\n if (!currentClipGroup) {\n topPrevSvgElement = prevSvgElement;\n }\n gradientManager.markUsed(displayable);\n gradientManager.addWithoutUpdate(svgElement, displayable);\n patternManager.markUsed(displayable);\n patternManager.addWithoutUpdate(svgElement, displayable);\n clipPathManager.markUsed(displayable);\n prevDisplayable = displayable;\n }\n }\n gradientManager.removeUnused();\n patternManager.removeUnused();\n clipPathManager.removeUnused();\n shadowManager.removeUnused();\n this._visibleList = newVisibleList;\n };\n SVGPainter.prototype.resize = function (width, height) {\n var viewport = this._viewport;\n viewport.style.display = 'none';\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n viewport.style.display = '';\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n var viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n var svgRoot = this._svgDom;\n svgRoot.setAttribute('width', width + '');\n svgRoot.setAttribute('height', height + '');\n }\n if (this._backgroundNode) {\n this._backgroundNode.setAttribute('width', width);\n this._backgroundNode.setAttribute('height', height);\n }\n };\n SVGPainter.prototype.getWidth = function () {\n return this._width;\n };\n SVGPainter.prototype.getHeight = function () {\n return this._height;\n };\n SVGPainter.prototype._getSize = function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n var root = this.root;\n var stl = document.defaultView.getComputedStyle(root);\n return ((root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)) | 0;\n };\n SVGPainter.prototype.dispose = function () {\n this.root.innerHTML = '';\n this._svgRoot =\n this._backgroundRoot =\n this._svgDom =\n this._backgroundNode =\n this._viewport = this.storage = null;\n };\n SVGPainter.prototype.clear = function () {\n var viewportNode = this._viewport;\n if (viewportNode && viewportNode.parentNode) {\n viewportNode.parentNode.removeChild(viewportNode);\n }\n };\n SVGPainter.prototype.toDataURL = function () {\n this.refresh();\n var svgDom = this._svgDom;\n var outerHTML = svgDom.outerHTML\n || (svgDom.parentNode && svgDom.parentNode).innerHTML;\n var html = encodeURIComponent(outerHTML.replace(/>\\n\\r<'));\n return 'data:image/svg+xml;charset=UTF-8,' + html;\n };\n return SVGPainter;\n}());\nfunction createMethodNotSupport(method) {\n return function () {\n util.logError('In SVG mode painter not support method \"' + method + '\"');\n };\n}\nexport default SVGPainter;\n","export var REDARAW_BIT = 1;\nexport var STYLE_CHANGED_BIT = 2;\nexport var SHAPE_CHANGED_BIT = 4;\n","import { __extends } from \"tslib\";\nimport * as util from '../core/util';\nimport { devicePixelRatio } from '../config';\nimport Eventful from '../core/Eventful';\nimport { getCanvasGradient } from './helper';\nimport { createCanvasPattern } from './graphic';\nimport BoundingRect from '../core/BoundingRect';\nimport { REDARAW_BIT } from '../graphic/constants';\nfunction returnFalse() {\n return false;\n}\nfunction createDom(id, painter, dpr) {\n var newDom = util.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style;\n if (newDomStyle) {\n newDomStyle.position = 'absolute';\n newDomStyle.left = '0';\n newDomStyle.top = '0';\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.setAttribute('data-zr-dom-id', id);\n }\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n return newDom;\n}\n;\nvar Layer = (function (_super) {\n __extends(Layer, _super);\n function Layer(id, painter, dpr) {\n var _this = _super.call(this) || this;\n _this.motionBlur = false;\n _this.lastFrameAlpha = 0.7;\n _this.dpr = 1;\n _this.virtual = false;\n _this.config = {};\n _this.incremental = false;\n _this.zlevel = 0;\n _this.maxRepaintRectCount = 5;\n _this.__dirty = true;\n _this.__firstTimePaint = true;\n _this.__used = false;\n _this.__drawIndex = 0;\n _this.__startIndex = 0;\n _this.__endIndex = 0;\n _this.__prevStartIndex = null;\n _this.__prevEndIndex = null;\n var dom;\n dpr = dpr || devicePixelRatio;\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n }\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n _this.id = id;\n _this.dom = dom;\n var domStyle = dom.style;\n if (domStyle) {\n dom.onselectstart = returnFalse;\n domStyle.webkitUserSelect = 'none';\n domStyle.userSelect = 'none';\n domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n domStyle['-webkit-touch-callout'] = 'none';\n domStyle.padding = '0';\n domStyle.margin = '0';\n domStyle.borderWidth = '0';\n }\n _this.domBack = null;\n _this.ctxBack = null;\n _this.painter = painter;\n _this.config = null;\n _this.dpr = dpr;\n return _this;\n }\n Layer.prototype.getElementCount = function () {\n return this.__endIndex - this.__startIndex;\n };\n Layer.prototype.afterBrush = function () {\n this.__prevStartIndex = this.__startIndex;\n this.__prevEndIndex = this.__endIndex;\n };\n Layer.prototype.initContext = function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.dpr = this.dpr;\n };\n Layer.prototype.setUnpainted = function () {\n this.__firstTimePaint = true;\n };\n Layer.prototype.createBackBuffer = function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n };\n Layer.prototype.createRepaintRects = function (displayList, prevList, viewWidth, viewHeight) {\n if (this.__firstTimePaint) {\n this.__firstTimePaint = false;\n return null;\n }\n var mergedRepaintRects = [];\n var maxRepaintRectCount = this.maxRepaintRectCount;\n var full = false;\n var pendingRect = new BoundingRect(0, 0, 0, 0);\n function addRectToMergePool(rect) {\n if (!rect.isFinite() || rect.isZero()) {\n return;\n }\n if (mergedRepaintRects.length === 0) {\n var boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n else {\n var isMerged = false;\n var minDeltaArea = Infinity;\n var bestRectToMergeIdx = 0;\n for (var i = 0; i < mergedRepaintRects.length; ++i) {\n var mergedRect = mergedRepaintRects[i];\n if (mergedRect.intersect(rect)) {\n var pendingRect_1 = new BoundingRect(0, 0, 0, 0);\n pendingRect_1.copy(mergedRect);\n pendingRect_1.union(rect);\n mergedRepaintRects[i] = pendingRect_1;\n isMerged = true;\n break;\n }\n else if (full) {\n pendingRect.copy(rect);\n pendingRect.union(mergedRect);\n var aArea = rect.width * rect.height;\n var bArea = mergedRect.width * mergedRect.height;\n var pendingArea = pendingRect.width * pendingRect.height;\n var deltaArea = pendingArea - aArea - bArea;\n if (deltaArea < minDeltaArea) {\n minDeltaArea = deltaArea;\n bestRectToMergeIdx = i;\n }\n }\n }\n if (full) {\n mergedRepaintRects[bestRectToMergeIdx].union(rect);\n isMerged = true;\n }\n if (!isMerged) {\n var boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n if (!full) {\n full = mergedRepaintRects.length >= maxRepaintRectCount;\n }\n }\n }\n for (var i = this.__startIndex; i < this.__endIndex; ++i) {\n var el = displayList[i];\n if (el) {\n var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n var prevRect = el.__isRendered && ((el.__dirty & REDARAW_BIT) || !shouldPaint)\n ? el.getPrevPaintRect()\n : null;\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n var curRect = shouldPaint && ((el.__dirty & REDARAW_BIT) || !el.__isRendered)\n ? el.getPaintRect()\n : null;\n if (curRect) {\n addRectToMergePool(curRect);\n }\n }\n }\n for (var i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) {\n var el = prevList[i];\n var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n if (el && (!shouldPaint || !el.__zr) && el.__isRendered) {\n var prevRect = el.getPrevPaintRect();\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n }\n }\n var hasIntersections;\n do {\n hasIntersections = false;\n for (var i = 0; i < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].isZero()) {\n mergedRepaintRects.splice(i, 1);\n continue;\n }\n for (var j = i + 1; j < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) {\n hasIntersections = true;\n mergedRepaintRects[i].union(mergedRepaintRects[j]);\n mergedRepaintRects.splice(j, 1);\n }\n else {\n j++;\n }\n }\n i++;\n }\n } while (hasIntersections);\n this._paintRects = mergedRepaintRects;\n return mergedRepaintRects;\n };\n Layer.prototype.debugGetPaintRects = function () {\n return (this._paintRects || []).slice();\n };\n Layer.prototype.resize = function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n dom.width = width * dpr;\n dom.height = height * dpr;\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n };\n Layer.prototype.clear = function (clearAll, clearColor, repaintRects) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n clearColor = clearColor || this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n var self = this;\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n var domBack = this.domBack;\n function doClear(x, y, width, height) {\n ctx.clearRect(x, y, width, height);\n if (clearColor && clearColor !== 'transparent') {\n var clearColorGradientOrPattern = void 0;\n if (util.isGradientObject(clearColor)) {\n clearColorGradientOrPattern = clearColor.__canvasGradient\n || getCanvasGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n }\n else if (util.isImagePatternObject(clearColor)) {\n clearColorGradientOrPattern = createCanvasPattern(ctx, clearColor, {\n dirty: function () {\n self.setUnpainted();\n self.__painter.refresh();\n }\n });\n }\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(x, y, width, height);\n ctx.restore();\n }\n if (haveMotionBLur) {\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, x, y, width, height);\n ctx.restore();\n }\n }\n ;\n if (!repaintRects || haveMotionBLur) {\n doClear(0, 0, width, height);\n }\n else if (repaintRects.length) {\n util.each(repaintRects, function (rect) {\n doClear(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr);\n });\n }\n };\n return Layer;\n}(Eventful));\nexport default Layer;\n","import { devicePixelRatio } from '../config';\nimport * as util from '../core/util';\nimport Layer from './Layer';\nimport requestAnimationFrame from '../animation/requestAnimationFrame';\nimport ZRImage from '../graphic/Image';\nimport env from '../core/env';\nimport { brush, brushSingle } from './graphic';\nimport { REDARAW_BIT } from '../graphic/constants';\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n if (layer.__builtin__) {\n return true;\n }\n if (typeof (layer.resize) !== 'function'\n || typeof (layer.refresh) !== 'function') {\n return false;\n }\n return true;\n}\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div');\n domRoot.style.cssText = [\n 'position:relative',\n 'width:' + width + 'px',\n 'height:' + height + 'px',\n 'padding:0',\n 'margin:0',\n 'border-width:0'\n ].join(';') + ';';\n return domRoot;\n}\nvar CanvasPainter = (function () {\n function CanvasPainter(root, storage, opts, id) {\n this.type = 'canvas';\n this._zlevelList = [];\n this._prevDisplayList = [];\n this._layers = {};\n this._layerConfig = {};\n this._needsManuallyCompositing = false;\n this.type = 'canvas';\n var singleCanvas = !root.nodeName\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n this._singleCanvas = singleCanvas;\n this.root = root;\n var rootStyle = root.style;\n if (rootStyle) {\n rootStyle.webkitTapHighlightColor = 'transparent';\n rootStyle.webkitUserSelect = 'none';\n rootStyle.userSelect = 'none';\n rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n this.storage = storage;\n var zlevelList = this._zlevelList;\n this._prevDisplayList = [];\n var layers = this._layers;\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n }\n else {\n var rootCanvas = root;\n var width = rootCanvas.width;\n var height = rootCanvas.height;\n if (opts.width != null) {\n width = opts.width;\n }\n if (opts.height != null) {\n height = opts.height;\n }\n this.dpr = opts.devicePixelRatio || 1;\n rootCanvas.width = width * this.dpr;\n rootCanvas.height = height * this.dpr;\n this._width = width;\n this._height = height;\n var mainLayer = new Layer(rootCanvas, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext();\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL;\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n }\n CanvasPainter.prototype.getType = function () {\n return 'canvas';\n };\n CanvasPainter.prototype.isSingleCanvas = function () {\n return this._singleCanvas;\n };\n CanvasPainter.prototype.getViewportRoot = function () {\n return this._domRoot;\n };\n CanvasPainter.prototype.getViewportRootOffset = function () {\n var viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n };\n CanvasPainter.prototype.refresh = function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var prevList = this._prevDisplayList;\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n this._paintList(list, prevList, paintAll, this._redrawId);\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (!layer.__builtin__ && layer.refresh) {\n var clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n if (this._opts.useDirtyRect) {\n this._prevDisplayList = list.slice();\n }\n return this;\n };\n CanvasPainter.prototype.refreshHover = function () {\n this._paintHoverList(this.storage.getDisplayList(false));\n };\n CanvasPainter.prototype._paintHoverList = function (list) {\n var len = list.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n if (!len) {\n return;\n }\n var scope = {\n inHover: true,\n viewWidth: this._width,\n viewHeight: this._height\n };\n var ctx;\n for (var i = 0; i < len; i++) {\n var el = list[i];\n if (el.__inHover) {\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n if (!ctx) {\n ctx = hoverLayer.ctx;\n ctx.save();\n }\n brush(ctx, el, scope, i === len - 1);\n }\n }\n if (ctx) {\n ctx.restore();\n }\n };\n CanvasPainter.prototype.getHoverLayer = function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n };\n CanvasPainter.prototype.paintOne = function (ctx, el) {\n brushSingle(ctx, el);\n };\n CanvasPainter.prototype._paintList = function (list, prevList, paintAll, redrawId) {\n if (this._redrawId !== redrawId) {\n return;\n }\n paintAll = paintAll || false;\n this._updateLayerStatus(list);\n var _a = this._doPaintList(list, prevList, paintAll), finished = _a.finished, needsRefreshHover = _a.needsRefreshHover;\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n if (needsRefreshHover) {\n this._paintHoverList(list);\n }\n if (!finished) {\n var self_1 = this;\n requestAnimationFrame(function () {\n self_1._paintList(list, prevList, paintAll, redrawId);\n });\n }\n else {\n this.eachLayer(function (layer) {\n layer.afterBrush && layer.afterBrush();\n });\n }\n };\n CanvasPainter.prototype._compositeManually = function () {\n var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n var width = this._domRoot.width;\n var height = this._domRoot.height;\n ctx.clearRect(0, 0, width, height);\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n };\n CanvasPainter.prototype._doPaintList = function (list, prevList, paintAll) {\n var _this = this;\n var layerList = [];\n var useDirtyRect = this._opts.useDirtyRect;\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n if (layer.__builtin__\n && layer !== this._hoverlayer\n && (layer.__dirty || paintAll)) {\n layerList.push(layer);\n }\n }\n var finished = true;\n var needsRefreshHover = false;\n var _loop_1 = function (k) {\n var layer = layerList[k];\n var ctx = layer.ctx;\n var repaintRects = useDirtyRect\n && layer.createRepaintRects(list, prevList, this_1._width, this_1._height);\n var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this_1._zlevelList[0]\n ? this_1._backgroundColor : null;\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor, repaintRects);\n }\n else if (start === layer.__startIndex) {\n var firstEl = list[start];\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor, repaintRects);\n }\n }\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n var i;\n var repaint = function (repaintRect) {\n var scope = {\n inHover: false,\n allClipped: false,\n prevEl: null,\n viewWidth: _this._width,\n viewHeight: _this._height\n };\n for (i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n if (el.__inHover) {\n needsRefreshHover = true;\n }\n _this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1);\n if (useTimer) {\n var dTime = Date.now() - startTime;\n if (dTime > 15) {\n break;\n }\n }\n }\n if (scope.prevElClipPaths) {\n ctx.restore();\n }\n };\n if (repaintRects) {\n if (repaintRects.length === 0) {\n i = layer.__endIndex;\n }\n else {\n var dpr = this_1.dpr;\n for (var r = 0; r < repaintRects.length; ++r) {\n var rect = repaintRects[r];\n ctx.save();\n ctx.beginPath();\n ctx.rect(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr);\n ctx.clip();\n repaint(rect);\n ctx.restore();\n }\n }\n }\n else {\n ctx.save();\n repaint();\n ctx.restore();\n }\n layer.__drawIndex = i;\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n };\n var this_1 = this;\n for (var k = 0; k < layerList.length; k++) {\n _loop_1(k);\n }\n if (env.wxa) {\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && layer.ctx.draw) {\n layer.ctx.draw();\n }\n });\n }\n return {\n finished: finished,\n needsRefreshHover: needsRefreshHover\n };\n };\n CanvasPainter.prototype._doPaintEl = function (el, currentLayer, useDirtyRect, repaintRect, scope, isLast) {\n var ctx = currentLayer.ctx;\n if (useDirtyRect) {\n var paintRect = el.getPaintRect();\n if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) {\n brush(ctx, el, scope, isLast);\n el.setPrevPaintRect(paintRect);\n }\n }\n else {\n brush(ctx, el, scope, isLast);\n }\n };\n CanvasPainter.prototype.getLayer = function (zlevel, virtual) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n var layer = this._layers[zlevel];\n if (!layer) {\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n if (virtual) {\n layer.virtual = virtual;\n }\n this.insertLayer(zlevel, layer);\n layer.initContext();\n }\n return layer;\n };\n CanvasPainter.prototype.insertLayer = function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var domRoot = this._domRoot;\n var prevLayer = null;\n var i = -1;\n if (layersMap[zlevel]) {\n util.logError('ZLevel ' + zlevel + ' has been used already');\n return;\n }\n if (!isLayerValid(layer)) {\n util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel\n && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n prevLayer = layersMap[zlevelList[i]];\n }\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer;\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n layer.__painter = this;\n };\n CanvasPainter.prototype.eachLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n };\n CanvasPainter.prototype.eachBuiltinLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n };\n CanvasPainter.prototype.eachOtherLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n };\n CanvasPainter.prototype.getLayers = function () {\n return this._layers;\n };\n CanvasPainter.prototype._updateLayerStatus = function (list) {\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n function updatePrevLayer(idx) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n prevLayer.__endIndex = idx;\n }\n }\n if (this._singleCanvas) {\n for (var i_1 = 1; i_1 < list.length; i_1++) {\n var el = list[i_1];\n if (el.zlevel !== list[i_1 - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n var prevLayer = null;\n var incrementalLayerCount = 0;\n var prevZlevel;\n var i;\n for (i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer = void 0;\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n }\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n }\n else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n }\n if (!layer.__builtin__) {\n util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n if (layer !== prevLayer) {\n layer.__used = true;\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n layer.__startIndex = i;\n if (!layer.incremental) {\n layer.__drawIndex = i;\n }\n else {\n layer.__drawIndex = -1;\n }\n updatePrevLayer(i);\n prevLayer = layer;\n }\n if ((el.__dirty & REDARAW_BIT) && !el.__inHover) {\n layer.__dirty = true;\n if (layer.incremental && layer.__drawIndex < 0) {\n layer.__drawIndex = i;\n }\n }\n }\n updatePrevLayer(i);\n this.eachBuiltinLayer(function (layer, z) {\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n }\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n };\n CanvasPainter.prototype.clear = function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n };\n CanvasPainter.prototype._clearLayer = function (layer) {\n layer.clear();\n };\n CanvasPainter.prototype.setBackgroundColor = function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n util.each(this._layers, function (layer) {\n layer.setUnpainted();\n });\n };\n CanvasPainter.prototype.configLayer = function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n }\n else {\n util.merge(layerConfig[zlevel], config, true);\n }\n for (var i = 0; i < this._zlevelList.length; i++) {\n var _zlevel = this._zlevelList[i];\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n var layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n };\n CanvasPainter.prototype.delLayer = function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n if (!layer) {\n return;\n }\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n };\n CanvasPainter.prototype.resize = function (width, height) {\n if (!this._domRoot.style) {\n if (width == null || height == null) {\n return;\n }\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n }\n else {\n var domRoot = this._domRoot;\n domRoot.style.display = 'none';\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = '';\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n this.refresh(true);\n }\n this._width = width;\n this._height = height;\n }\n return this;\n };\n CanvasPainter.prototype.clearLayer = function (zlevel) {\n var layer = this._layers[zlevel];\n if (layer) {\n layer.clear();\n }\n };\n CanvasPainter.prototype.dispose = function () {\n this.root.innerHTML = '';\n this.root =\n this.storage =\n this._domRoot =\n this._layers = null;\n };\n CanvasPainter.prototype.getRenderedCanvas = function (opts) {\n opts = opts || {};\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n var ctx = imageLayer.ctx;\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n var width_1 = imageLayer.dom.width;\n var height_1 = imageLayer.dom.height;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width_1, height_1);\n }\n else if (layer.renderToCanvas) {\n ctx.save();\n layer.renderToCanvas(ctx);\n ctx.restore();\n }\n });\n }\n else {\n var scope = {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n };\n var displayList = this.storage.getDisplayList(true);\n for (var i = 0, len = displayList.length; i < len; i++) {\n var el = displayList[i];\n brush(ctx, el, scope, i === len - 1);\n }\n }\n return imageLayer.dom;\n };\n CanvasPainter.prototype.getWidth = function () {\n return this._width;\n };\n CanvasPainter.prototype.getHeight = function () {\n return this._height;\n };\n CanvasPainter.prototype._getSize = function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n var root = this.root;\n var stl = document.defaultView.getComputedStyle(root);\n return ((root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)) | 0;\n };\n CanvasPainter.prototype.pathToImage = function (path, dpr) {\n dpr = dpr || this.dpr;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var rect = path.getBoundingRect();\n var style = path.style;\n var shadowBlurSize = style.shadowBlur * dpr;\n var shadowOffsetX = style.shadowOffsetX * dpr;\n var shadowOffsetY = style.shadowOffsetY * dpr;\n var lineWidth = path.hasStroke() ? style.lineWidth : 0;\n var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n var width = rect.width + leftMargin + rightMargin;\n var height = rect.height + topMargin + bottomMargin;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\n var pathTransform = {\n x: path.x,\n y: path.y,\n scaleX: path.scaleX,\n scaleY: path.scaleY,\n rotation: path.rotation,\n originX: path.originX,\n originY: path.originY\n };\n path.x = leftMargin - rect.x;\n path.y = topMargin - rect.y;\n path.rotation = 0;\n path.scaleX = 1;\n path.scaleY = 1;\n path.updateTransform();\n if (path) {\n brush(ctx, path, {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n }, true);\n }\n var imgShape = new ZRImage({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n util.extend(path, pathTransform);\n return imgShape;\n };\n return CanvasPainter;\n}());\nexport default CanvasPainter;\n;\n","import { __extends } from \"tslib\";\nimport Displayable, { DEFAULT_COMMON_STYLE, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { defaults, createObject } from '../core/util';\nexport var DEFAULT_IMAGE_STYLE = defaults({\n x: 0,\n y: 0\n}, DEFAULT_COMMON_STYLE);\nexport var DEFAULT_IMAGE_ANIMATION_PROPS = {\n style: defaults({\n x: true,\n y: true,\n width: true,\n height: true,\n sx: true,\n sy: true,\n sWidth: true,\n sHeight: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nfunction isImageLike(source) {\n return !!(source\n && typeof source !== 'string'\n && source.width && source.height);\n}\nvar ZRImage = (function (_super) {\n __extends(ZRImage, _super);\n function ZRImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ZRImage.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_IMAGE_STYLE, obj);\n };\n ZRImage.prototype._getSize = function (dim) {\n var style = this.style;\n var size = style[dim];\n if (size != null) {\n return size;\n }\n var imageSource = isImageLike(style.image)\n ? style.image : this.__image;\n if (!imageSource) {\n return 0;\n }\n var otherDim = dim === 'width' ? 'height' : 'width';\n var otherDimSize = style[otherDim];\n if (otherDimSize == null) {\n return imageSource[dim];\n }\n else {\n return imageSource[dim] / imageSource[otherDim] * otherDimSize;\n }\n };\n ZRImage.prototype.getWidth = function () {\n return this._getSize('width');\n };\n ZRImage.prototype.getHeight = function () {\n return this._getSize('height');\n };\n ZRImage.prototype.getAnimationStyleProps = function () {\n return DEFAULT_IMAGE_ANIMATION_PROPS;\n };\n ZRImage.prototype.getBoundingRect = function () {\n var style = this.style;\n if (!this._rect) {\n this._rect = new BoundingRect(style.x || 0, style.y || 0, this.getWidth(), this.getHeight());\n }\n return this._rect;\n };\n return ZRImage;\n}(Displayable));\nZRImage.prototype.type = 'image';\nexport default ZRImage;\n","import { __extends } from \"tslib\";\nimport Element from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nimport { keys, extend, createObject } from '../core/util';\nimport { REDARAW_BIT, STYLE_CHANGED_BIT } from './constants';\nvar STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10));\nexport var DEFAULT_COMMON_STYLE = {\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: '#000',\n opacity: 1,\n blend: 'source-over'\n};\nexport var DEFAULT_COMMON_ANIMATION_PROPS = {\n style: {\n shadowBlur: true,\n shadowOffsetX: true,\n shadowOffsetY: true,\n shadowColor: true,\n opacity: true\n }\n};\nDEFAULT_COMMON_STYLE[STYLE_MAGIC_KEY] = true;\nvar PRIMARY_STATES_KEYS = ['z', 'z2', 'invisible'];\nvar PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible'];\nvar Displayable = (function (_super) {\n __extends(Displayable, _super);\n function Displayable(props) {\n return _super.call(this, props) || this;\n }\n Displayable.prototype._init = function (props) {\n var keysArr = keys(props);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n if (key === 'style') {\n this.useStyle(props[key]);\n }\n else {\n _super.prototype.attrKV.call(this, key, props[key]);\n }\n }\n if (!this.style) {\n this.useStyle({});\n }\n };\n Displayable.prototype.beforeBrush = function () { };\n Displayable.prototype.afterBrush = function () { };\n Displayable.prototype.innerBeforeBrush = function () { };\n Displayable.prototype.innerAfterBrush = function () { };\n Displayable.prototype.shouldBePainted = function (viewWidth, viewHeight, considerClipPath, considerAncestors) {\n var m = this.transform;\n if (this.ignore\n || this.invisible\n || this.style.opacity === 0\n || (this.culling\n && isDisplayableCulled(this, viewWidth, viewHeight))\n || (m && !m[0] && !m[3])) {\n return false;\n }\n if (considerClipPath && this.__clipPaths) {\n for (var i = 0; i < this.__clipPaths.length; ++i) {\n if (this.__clipPaths[i].isZeroArea()) {\n return false;\n }\n }\n }\n if (considerAncestors && this.parent) {\n var parent_1 = this.parent;\n while (parent_1) {\n if (parent_1.ignore) {\n return false;\n }\n parent_1 = parent_1.parent;\n }\n }\n return true;\n };\n Displayable.prototype.contain = function (x, y) {\n return this.rectContain(x, y);\n };\n Displayable.prototype.traverse = function (cb, context) {\n cb.call(context, this);\n };\n Displayable.prototype.rectContain = function (x, y) {\n var coord = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n };\n Displayable.prototype.getPaintRect = function () {\n var rect = this._paintRect;\n if (!this._paintRect || this.__dirty) {\n var transform = this.transform;\n var elRect = this.getBoundingRect();\n var style = this.style;\n var shadowSize = style.shadowBlur || 0;\n var shadowOffsetX = style.shadowOffsetX || 0;\n var shadowOffsetY = style.shadowOffsetY || 0;\n rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0));\n if (transform) {\n BoundingRect.applyTransform(rect, elRect, transform);\n }\n else {\n rect.copy(elRect);\n }\n if (shadowSize || shadowOffsetX || shadowOffsetY) {\n rect.width += shadowSize * 2 + Math.abs(shadowOffsetX);\n rect.height += shadowSize * 2 + Math.abs(shadowOffsetY);\n rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize);\n rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize);\n }\n var tolerance = this.dirtyRectTolerance;\n if (!rect.isZero()) {\n rect.x = Math.floor(rect.x - tolerance);\n rect.y = Math.floor(rect.y - tolerance);\n rect.width = Math.ceil(rect.width + 1 + tolerance * 2);\n rect.height = Math.ceil(rect.height + 1 + tolerance * 2);\n }\n }\n return rect;\n };\n Displayable.prototype.setPrevPaintRect = function (paintRect) {\n if (paintRect) {\n this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0);\n this._prevPaintRect.copy(paintRect);\n }\n else {\n this._prevPaintRect = null;\n }\n };\n Displayable.prototype.getPrevPaintRect = function () {\n return this._prevPaintRect;\n };\n Displayable.prototype.animateStyle = function (loop) {\n return this.animate('style', loop);\n };\n Displayable.prototype.updateDuringAnimation = function (targetKey) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else {\n this.markRedraw();\n }\n };\n Displayable.prototype.attrKV = function (key, value) {\n if (key !== 'style') {\n _super.prototype.attrKV.call(this, key, value);\n }\n else {\n if (!this.style) {\n this.useStyle(value);\n }\n else {\n this.setStyle(value);\n }\n }\n };\n Displayable.prototype.setStyle = function (keyOrObj, value) {\n if (typeof keyOrObj === 'string') {\n this.style[keyOrObj] = value;\n }\n else {\n extend(this.style, keyOrObj);\n }\n this.dirtyStyle();\n return this;\n };\n Displayable.prototype.dirtyStyle = function (notRedraw) {\n if (!notRedraw) {\n this.markRedraw();\n }\n this.__dirty |= STYLE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n };\n Displayable.prototype.dirty = function () {\n this.dirtyStyle();\n };\n Displayable.prototype.styleChanged = function () {\n return !!(this.__dirty & STYLE_CHANGED_BIT);\n };\n Displayable.prototype.styleUpdated = function () {\n this.__dirty &= ~STYLE_CHANGED_BIT;\n };\n Displayable.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_COMMON_STYLE, obj);\n };\n Displayable.prototype.useStyle = function (obj) {\n if (!obj[STYLE_MAGIC_KEY]) {\n obj = this.createStyle(obj);\n }\n if (this.__inHover) {\n this.__hoverStyle = obj;\n }\n else {\n this.style = obj;\n }\n this.dirtyStyle();\n };\n Displayable.prototype.isStyleObject = function (obj) {\n return obj[STYLE_MAGIC_KEY];\n };\n Displayable.prototype._innerSaveToNormal = function (toState) {\n _super.prototype._innerSaveToNormal.call(this, toState);\n var normalState = this._normalState;\n if (toState.style && !normalState.style) {\n normalState.style = this._mergeStyle(this.createStyle(), this.style);\n }\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n };\n Displayable.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n var needsRestoreToNormal = !(state && keepCurrentStates);\n var targetStyle;\n if (state && state.style) {\n if (transition) {\n if (keepCurrentStates) {\n targetStyle = state.style;\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), keepCurrentStates ? this.style : normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else if (needsRestoreToNormal) {\n targetStyle = normalState.style;\n }\n if (targetStyle) {\n if (transition) {\n var sourceStyle = this.style;\n this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle);\n if (needsRestoreToNormal) {\n var changedKeys = keys(sourceStyle);\n for (var i = 0; i < changedKeys.length; i++) {\n var key = changedKeys[i];\n if (key in targetStyle) {\n targetStyle[key] = targetStyle[key];\n this.style[key] = sourceStyle[key];\n }\n }\n }\n var targetKeys = keys(targetStyle);\n for (var i = 0; i < targetKeys.length; i++) {\n var key = targetKeys[i];\n this.style[key] = this.style[key];\n }\n this._transitionState(stateName, {\n style: targetStyle\n }, animationCfg, this.getAnimationStyleProps());\n }\n else {\n this.useStyle(targetStyle);\n }\n }\n var statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS;\n for (var i = 0; i < statesKeys.length; i++) {\n var key = statesKeys[i];\n if (state && state[key] != null) {\n this[key] = state[key];\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n this[key] = normalState[key];\n }\n }\n }\n };\n Displayable.prototype._mergeStates = function (states) {\n var mergedState = _super.prototype._mergeStates.call(this, states);\n var mergedStyle;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n if (state.style) {\n mergedStyle = mergedStyle || {};\n this._mergeStyle(mergedStyle, state.style);\n }\n }\n if (mergedStyle) {\n mergedState.style = mergedStyle;\n }\n return mergedState;\n };\n Displayable.prototype._mergeStyle = function (targetStyle, sourceStyle) {\n extend(targetStyle, sourceStyle);\n return targetStyle;\n };\n Displayable.prototype.getAnimationStyleProps = function () {\n return DEFAULT_COMMON_ANIMATION_PROPS;\n };\n Displayable.initDefaultProps = (function () {\n var dispProto = Displayable.prototype;\n dispProto.type = 'displayable';\n dispProto.invisible = false;\n dispProto.z = 0;\n dispProto.z2 = 0;\n dispProto.zlevel = 0;\n dispProto.culling = false;\n dispProto.cursor = 'pointer';\n dispProto.rectHover = false;\n dispProto.incremental = false;\n dispProto._rect = null;\n dispProto.dirtyRectTolerance = 0;\n dispProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT;\n })();\n return Displayable;\n}(Element));\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\nexport default Displayable;\n","var Eventful = (function () {\n function Eventful(eventProcessors) {\n if (eventProcessors) {\n this._$eventProcessor = eventProcessors;\n }\n }\n Eventful.prototype.on = function (event, query, handler, context) {\n if (!this._$handlers) {\n this._$handlers = {};\n }\n var _h = this._$handlers;\n if (typeof query === 'function') {\n context = handler;\n handler = query;\n query = null;\n }\n if (!handler || !event) {\n return this;\n }\n var eventProcessor = this._$eventProcessor;\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\n if (!_h[event]) {\n _h[event] = [];\n }\n for (var i = 0; i < _h[event].length; i++) {\n if (_h[event][i].h === handler) {\n return this;\n }\n }\n var wrap = {\n h: handler,\n query: query,\n ctx: (context || this),\n callAtLast: handler.zrEventfulCallAtLast\n };\n var lastIndex = _h[event].length - 1;\n var lastWrap = _h[event][lastIndex];\n (lastWrap && lastWrap.callAtLast)\n ? _h[event].splice(lastIndex, 0, wrap)\n : _h[event].push(wrap);\n return this;\n };\n Eventful.prototype.isSilent = function (eventName) {\n var _h = this._$handlers;\n return !_h || !_h[eventName] || !_h[eventName].length;\n };\n Eventful.prototype.off = function (eventType, handler) {\n var _h = this._$handlers;\n if (!_h) {\n return this;\n }\n if (!eventType) {\n this._$handlers = {};\n return this;\n }\n if (handler) {\n if (_h[eventType]) {\n var newList = [];\n for (var i = 0, l = _h[eventType].length; i < l; i++) {\n if (_h[eventType][i].h !== handler) {\n newList.push(_h[eventType][i]);\n }\n }\n _h[eventType] = newList;\n }\n if (_h[eventType] && _h[eventType].length === 0) {\n delete _h[eventType];\n }\n }\n else {\n delete _h[eventType];\n }\n return this;\n };\n Eventful.prototype.trigger = function (eventType) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!this._$handlers) {\n return this;\n }\n var _h = this._$handlers[eventType];\n var eventProcessor = this._$eventProcessor;\n if (_h) {\n var argLen = args.length;\n var len = _h.length;\n for (var i = 0; i < len; i++) {\n var hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(eventType, hItem.query)) {\n continue;\n }\n switch (argLen) {\n case 0:\n hItem.h.call(hItem.ctx);\n break;\n case 1:\n hItem.h.call(hItem.ctx, args[0]);\n break;\n case 2:\n hItem.h.call(hItem.ctx, args[0], args[1]);\n break;\n default:\n hItem.h.apply(hItem.ctx, args);\n break;\n }\n }\n }\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(eventType);\n return this;\n };\n Eventful.prototype.triggerWithContext = function (type) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!this._$handlers) {\n return this;\n }\n var _h = this._$handlers[type];\n var eventProcessor = this._$eventProcessor;\n if (_h) {\n var argLen = args.length;\n var ctx = args[argLen - 1];\n var len = _h.length;\n for (var i = 0; i < len; i++) {\n var hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(type, hItem.query)) {\n continue;\n }\n switch (argLen) {\n case 0:\n hItem.h.call(ctx);\n break;\n case 1:\n hItem.h.call(ctx, args[0]);\n break;\n case 2:\n hItem.h.call(ctx, args[0], args[1]);\n break;\n default:\n hItem.h.apply(ctx, args.slice(1, argLen - 1));\n break;\n }\n }\n }\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(type);\n return this;\n };\n return Eventful;\n}());\nexport default Eventful;\n","import { __extends } from \"tslib\";\nimport Path from '../Path';\nimport * as roundRectHelper from '../helper/roundRect';\nimport { subPixelOptimizeRect } from '../helper/subPixelOptimize';\nvar RectShape = (function () {\n function RectShape() {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n }\n return RectShape;\n}());\nexport { RectShape };\nvar subPixelOptimizeOutputShape = {};\nvar Rect = (function (_super) {\n __extends(Rect, _super);\n function Rect(opts) {\n return _super.call(this, opts) || this;\n }\n Rect.prototype.getDefaultShape = function () {\n return new RectShape();\n };\n Rect.prototype.buildPath = function (ctx, shape) {\n var x;\n var y;\n var width;\n var height;\n if (this.subPixelOptimize) {\n var optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n x = optimizedShape.x;\n y = optimizedShape.y;\n width = optimizedShape.width;\n height = optimizedShape.height;\n optimizedShape.r = shape.r;\n shape = optimizedShape;\n }\n else {\n x = shape.x;\n y = shape.y;\n width = shape.width;\n height = shape.height;\n }\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n }\n else {\n roundRectHelper.buildPath(ctx, shape);\n }\n };\n Rect.prototype.isZeroArea = function () {\n return !this.shape.width || !this.shape.height;\n };\n return Rect;\n}(Path));\nRect.prototype.type = 'rect';\nexport default Rect;\n","export function buildPath(ctx, shape) {\n var x = shape.x;\n var y = shape.y;\n var width = shape.width;\n var height = shape.height;\n var r = shape.r;\n var r1;\n var r2;\n var r3;\n var r4;\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n }\n else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n }\n else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n }\n else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n }\n else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = 0;\n }\n var total;\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n","import { __extends } from \"tslib\";\nimport { parseRichText, parsePlainText } from './helper/parseText';\nimport TSpan from './TSpan';\nimport { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util';\nimport { DEFAULT_FONT, adjustTextX, adjustTextY } from '../contain/text';\nimport ZRImage from './Image';\nimport Rect from './shape/Rect';\nimport BoundingRect from '../core/BoundingRect';\nimport Displayable, { DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable';\nvar DEFAULT_RICH_TEXT_COLOR = {\n fill: '#000'\n};\nvar DEFAULT_STROKE_LINE_WIDTH = 2;\nexport var DEFAULT_TEXT_ANIMATION_PROPS = {\n style: defaults({\n fill: true,\n stroke: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineWidth: true,\n fontSize: true,\n lineHeight: true,\n width: true,\n height: true,\n textShadowColor: true,\n textShadowBlur: true,\n textShadowOffsetX: true,\n textShadowOffsetY: true,\n backgroundColor: true,\n padding: true,\n borderColor: true,\n borderWidth: true,\n borderRadius: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nvar ZRText = (function (_super) {\n __extends(ZRText, _super);\n function ZRText(opts) {\n var _this = _super.call(this) || this;\n _this.type = 'text';\n _this._children = [];\n _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR;\n _this.attr(opts);\n return _this;\n }\n ZRText.prototype.childrenRef = function () {\n return this._children;\n };\n ZRText.prototype.update = function () {\n _super.prototype.update.call(this);\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.zlevel = this.zlevel;\n child.z = this.z;\n child.z2 = this.z2;\n child.culling = this.culling;\n child.cursor = this.cursor;\n child.invisible = this.invisible;\n }\n };\n ZRText.prototype.updateTransform = function () {\n var innerTransformable = this.innerTransformable;\n if (innerTransformable) {\n innerTransformable.updateTransform();\n if (innerTransformable.transform) {\n this.transform = innerTransformable.transform;\n }\n }\n else {\n _super.prototype.updateTransform.call(this);\n }\n };\n ZRText.prototype.getLocalTransform = function (m) {\n var innerTransformable = this.innerTransformable;\n return innerTransformable\n ? innerTransformable.getLocalTransform(m)\n : _super.prototype.getLocalTransform.call(this, m);\n };\n ZRText.prototype.getComputedTransform = function () {\n if (this.__hostTarget) {\n this.__hostTarget.getComputedTransform();\n this.__hostTarget.updateInnerText(true);\n }\n return _super.prototype.getComputedTransform.call(this);\n };\n ZRText.prototype._updateSubTexts = function () {\n this._childCursor = 0;\n normalizeTextStyle(this.style);\n this.style.rich\n ? this._updateRichTexts()\n : this._updatePlainTexts();\n this._children.length = this._childCursor;\n this.styleUpdated();\n };\n ZRText.prototype.addSelfToZr = function (zr) {\n _super.prototype.addSelfToZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n this._children[i].__zr = zr;\n }\n };\n ZRText.prototype.removeSelfFromZr = function (zr) {\n _super.prototype.removeSelfFromZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n this._children[i].__zr = null;\n }\n };\n ZRText.prototype.getBoundingRect = function () {\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n if (!this._rect) {\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = this._children;\n var tmpMat = [];\n var rect = null;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat);\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n this._rect = rect || tmpRect;\n }\n return this._rect;\n };\n ZRText.prototype.setDefaultTextStyle = function (defaultTextStyle) {\n this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n };\n ZRText.prototype.setTextContent = function (textContent) {\n throw new Error('Can\\'t attach text on another text');\n };\n ZRText.prototype._mergeStyle = function (targetStyle, sourceStyle) {\n if (!sourceStyle) {\n return targetStyle;\n }\n var sourceRich = sourceStyle.rich;\n var targetRich = targetStyle.rich || (sourceRich && {});\n extend(targetStyle, sourceStyle);\n if (sourceRich && targetRich) {\n this._mergeRich(targetRich, sourceRich);\n targetStyle.rich = targetRich;\n }\n else if (targetRich) {\n targetStyle.rich = targetRich;\n }\n return targetStyle;\n };\n ZRText.prototype._mergeRich = function (targetRich, sourceRich) {\n var richNames = keys(sourceRich);\n for (var i = 0; i < richNames.length; i++) {\n var richName = richNames[i];\n targetRich[richName] = targetRich[richName] || {};\n extend(targetRich[richName], sourceRich[richName]);\n }\n };\n ZRText.prototype.getAnimationStyleProps = function () {\n return DEFAULT_TEXT_ANIMATION_PROPS;\n };\n ZRText.prototype._getOrCreateChild = function (Ctor) {\n var child = this._children[this._childCursor];\n if (!child || !(child instanceof Ctor)) {\n child = new Ctor();\n }\n this._children[this._childCursor++] = child;\n child.__zr = this.__zr;\n child.parent = this;\n return child;\n };\n ZRText.prototype._updatePlainTexts = function () {\n var style = this.style;\n var textFont = style.font || DEFAULT_FONT;\n var textPadding = style.padding;\n var text = getStyleText(style);\n var contentBlock = parsePlainText(text, style);\n var needDrawBg = needDrawBackground(style);\n var bgColorDrawn = !!(style.backgroundColor);\n var outerHeight = contentBlock.outerHeight;\n var textLines = contentBlock.lines;\n var lineHeight = contentBlock.lineHeight;\n var defaultStyle = this._defaultStyle;\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var textAlign = style.align || defaultStyle.align || 'left';\n var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n var textX = baseX;\n var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n if (needDrawBg || textPadding) {\n var outerWidth_1 = contentBlock.width;\n textPadding && (outerWidth_1 += textPadding[1] + textPadding[3]);\n var boxX = adjustTextX(baseX, outerWidth_1, textAlign);\n var boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth_1, outerHeight);\n }\n textY += lineHeight / 2;\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n if (verticalAlign === 'top') {\n textY += textPadding[0];\n }\n else if (verticalAlign === 'bottom') {\n textY -= textPadding[2];\n }\n }\n var defaultLineWidth = 0;\n var useDefaultFill = false;\n var textFill = getFill('fill' in style\n ? style.fill\n : (useDefaultFill = true, defaultStyle.fill));\n var textStroke = getStroke('stroke' in style\n ? style.stroke\n : (!bgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill))\n ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null);\n var hasShadow = style.textShadowBlur > 0;\n var fixedBoundingRect = style.width != null\n && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n var calculatedLineHeight = contentBlock.calculatedLineHeight;\n for (var i = 0; i < textLines.length; i++) {\n var el = this._getOrCreateChild(TSpan);\n var subElStyle = el.createStyle();\n el.useStyle(subElStyle);\n subElStyle.text = textLines[i];\n subElStyle.x = textX;\n subElStyle.y = textY;\n if (textAlign) {\n subElStyle.textAlign = textAlign;\n }\n subElStyle.textBaseline = 'middle';\n subElStyle.opacity = style.opacity;\n subElStyle.strokeFirst = true;\n if (hasShadow) {\n subElStyle.shadowBlur = style.textShadowBlur || 0;\n subElStyle.shadowColor = style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n }\n if (textStroke) {\n subElStyle.stroke = textStroke;\n subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n subElStyle.lineDash = style.lineDash;\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n subElStyle.font = textFont;\n textY += lineHeight;\n if (fixedBoundingRect) {\n el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, style.width, subElStyle.textAlign), adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline), style.width, calculatedLineHeight));\n }\n }\n };\n ZRText.prototype._updateRichTexts = function () {\n var style = this.style;\n var text = getStyleText(style);\n var contentBlock = parseRichText(text, style);\n var contentWidth = contentBlock.width;\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var textPadding = style.padding;\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var defaultStyle = this._defaultStyle;\n var textAlign = style.align || defaultStyle.align;\n var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n var boxX = adjustTextX(baseX, outerWidth, textAlign);\n var boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n var xLeft = boxX;\n var lineTop = boxY;\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n var xRight = xLeft + contentWidth;\n if (needDrawBackground(style)) {\n this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n var bgColorDrawn = !!(style.backgroundColor);\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var tokens = line.tokens;\n var tokenCount = tokens.length;\n var lineHeight = line.lineHeight;\n var remainedWidth = line.width;\n var leftIndex = 0;\n var lineXLeft = xLeft;\n var lineXRight = xRight;\n var rightIndex = tokenCount - 1;\n var token = void 0;\n while (leftIndex < tokenCount\n && (token = tokens[leftIndex], !token.align || token.align === 'left')) {\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n remainedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n while (rightIndex >= 0\n && (token = tokens[rightIndex], token.align === 'right')) {\n this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n remainedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n }\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex];\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center', bgColorDrawn);\n lineXLeft += token.width;\n leftIndex++;\n }\n lineTop += lineHeight;\n }\n };\n ZRText.prototype._placeToken = function (token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) {\n var tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text;\n var verticalAlign = token.verticalAlign;\n var y = lineTop + lineHeight / 2;\n if (verticalAlign === 'top') {\n y = lineTop + token.height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n var needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n needDrawBg && this._renderBackground(tokenStyle, style, textAlign === 'right'\n ? x - token.width\n : textAlign === 'center'\n ? x - token.width / 2\n : x, y - token.height / 2, token.width, token.height);\n var bgColorDrawn = !!tokenStyle.backgroundColor;\n var textPadding = token.textPadding;\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;\n }\n var el = this._getOrCreateChild(TSpan);\n var subElStyle = el.createStyle();\n el.useStyle(subElStyle);\n var defaultStyle = this._defaultStyle;\n var useDefaultFill = false;\n var defaultLineWidth = 0;\n var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill\n : 'fill' in style ? style.fill\n : (useDefaultFill = true, defaultStyle.fill));\n var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke\n : 'stroke' in style ? style.stroke\n : (!bgColorDrawn\n && !parentBgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill)) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null);\n var hasShadow = tokenStyle.textShadowBlur > 0\n || style.textShadowBlur > 0;\n subElStyle.text = token.text;\n subElStyle.x = x;\n subElStyle.y = y;\n if (hasShadow) {\n subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n }\n subElStyle.textAlign = textAlign;\n subElStyle.textBaseline = 'middle';\n subElStyle.font = token.font || DEFAULT_FONT;\n subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);\n if (textStroke) {\n subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n subElStyle.stroke = textStroke;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n var textWidth = token.contentWidth;\n var textHeight = token.contentHeight;\n el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline), textWidth, textHeight));\n };\n ZRText.prototype._renderBackground = function (style, topStyle, x, y, width, height) {\n var textBackgroundColor = style.backgroundColor;\n var textBorderWidth = style.borderWidth;\n var textBorderColor = style.borderColor;\n var isImageBg = textBackgroundColor && textBackgroundColor.image;\n var isPlainOrGradientBg = textBackgroundColor && !isImageBg;\n var textBorderRadius = style.borderRadius;\n var self = this;\n var rectEl;\n var imgEl;\n if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) {\n rectEl = this._getOrCreateChild(Rect);\n rectEl.useStyle(rectEl.createStyle());\n rectEl.style.fill = null;\n var rectShape = rectEl.shape;\n rectShape.x = x;\n rectShape.y = y;\n rectShape.width = width;\n rectShape.height = height;\n rectShape.r = textBorderRadius;\n rectEl.dirtyShape();\n }\n if (isPlainOrGradientBg) {\n var rectStyle = rectEl.style;\n rectStyle.fill = textBackgroundColor || null;\n rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n }\n else if (isImageBg) {\n imgEl = this._getOrCreateChild(ZRImage);\n imgEl.onload = function () {\n self.dirtyStyle();\n };\n var imgStyle = imgEl.style;\n imgStyle.image = textBackgroundColor.image;\n imgStyle.x = x;\n imgStyle.y = y;\n imgStyle.width = width;\n imgStyle.height = height;\n }\n if (textBorderWidth && textBorderColor) {\n var rectStyle = rectEl.style;\n rectStyle.lineWidth = textBorderWidth;\n rectStyle.stroke = textBorderColor;\n rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n rectStyle.lineDash = style.borderDash;\n rectStyle.lineDashOffset = style.borderDashOffset || 0;\n rectEl.strokeContainThreshold = 0;\n if (rectEl.hasFill() && rectEl.hasStroke()) {\n rectStyle.strokeFirst = true;\n rectStyle.lineWidth *= 2;\n }\n }\n var commonStyle = (rectEl || imgEl).style;\n commonStyle.shadowBlur = style.shadowBlur || 0;\n commonStyle.shadowColor = style.shadowColor || 'transparent';\n commonStyle.shadowOffsetX = style.shadowOffsetX || 0;\n commonStyle.shadowOffsetY = style.shadowOffsetY || 0;\n commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);\n };\n ZRText.makeFont = function (style) {\n var font = '';\n if (style.fontSize || style.fontFamily || style.fontWeight) {\n var fontSize = '';\n if (typeof style.fontSize === 'string'\n && (style.fontSize.indexOf('px') !== -1\n || style.fontSize.indexOf('rem') !== -1\n || style.fontSize.indexOf('em') !== -1)) {\n fontSize = style.fontSize;\n }\n else if (!isNaN(+style.fontSize)) {\n fontSize = style.fontSize + 'px';\n }\n else {\n fontSize = '12px';\n }\n font = [\n style.fontStyle,\n style.fontWeight,\n fontSize,\n style.fontFamily || 'sans-serif'\n ].join(' ');\n }\n return font && trim(font) || style.textFont || style.font;\n };\n return ZRText;\n}(Displayable));\nvar VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 };\nvar VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 };\nexport function normalizeTextStyle(style) {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\nfunction normalizeStyle(style) {\n if (style) {\n style.font = ZRText.makeFont(style);\n var textAlign = style.align;\n textAlign === 'middle' && (textAlign = 'center');\n style.align = (textAlign == null || VALID_TEXT_ALIGN[textAlign]) ? textAlign : 'left';\n var verticalAlign = style.verticalAlign;\n verticalAlign === 'center' && (verticalAlign = 'middle');\n style.verticalAlign = (verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]) ? verticalAlign : 'top';\n var textPadding = style.padding;\n if (textPadding) {\n style.padding = normalizeCssArray(style.padding);\n }\n }\n}\nfunction getStroke(stroke, lineWidth) {\n return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n ? null\n : (stroke.image || stroke.colorStops)\n ? '#000'\n : stroke;\n}\nfunction getFill(fill) {\n return (fill == null || fill === 'none')\n ? null\n : (fill.image || fill.colorStops)\n ? '#000'\n : fill;\n}\nfunction getTextXForPadding(x, textAlign, textPadding) {\n return textAlign === 'right'\n ? (x - textPadding[1])\n : textAlign === 'center'\n ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n : (x + textPadding[3]);\n}\nfunction getStyleText(style) {\n var text = style.text;\n text != null && (text += '');\n return text;\n}\nfunction needDrawBackground(style) {\n return !!(style.backgroundColor\n || style.lineHeight\n || (style.borderWidth && style.borderColor));\n}\nexport default ZRText;\n"],"sourceRoot":""}