{"version":3,"sources":["kendo.drawing.js"],"names":["f","define","$","createPromise","Deferred","promiseAll","promises","when","apply","extendStatic","dest","src","__proto__","member","hasOwnProperty","kendo","drawing","util","deepExtend","window","jQuery","amd","a1","a2","a3","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","append$1$1","first","second","arabicToRoman","n","values","roman","shift","literals","defined","UNDEFINED","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","input","c","output","fromCharCode","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","isNaN","KEY_STR","charAt","eventCoordinates","e","x","location","y","pageX","clientX","pageY","clientY","eventElement","touch","initialTouch","target","isTransparent","color","last","array","limitValue","min","max","Math","mergeSort","a","cmp","merge","b","r","ai","bi","slice","m","left","right","floor","rad","degrees","pow","p","round","precision","power","valueOrDefault","defaultValue","bindEvents","element","events","eventName","eventNames","idx","trim","split","addEventListener","elementOffset","getBoundingClientRect","documentElement","top","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","elementStyles","styles","field","result","getComputedStyle","stylesArray","Array","isArray","getPixels","elementSize","size$1","parseInt","unbindEvents","name","removeEventListener","elementPadding","ref","paddingLeft","paddingTop","parseFloat","parseMatrix","matrixString","members","match","matrixRegexp","Matrix","unit","Function","prototype","bind","concat","transformMatrix","transform","elementScale","matrix","parent","parentMatrix","parentElement","multiplyCopy","setAccessor","geometryChange","getAccessor","defineAccessors","fn","fields","capitalized","toUpperCase","substring","toMatrix","transformation","transform$1","Transformation","ellipseExtremeAngles","center","rx","ry","extremeX","extremeY","atan2","d","geometryAccessor","fieldName","_observerField","defineGeometryAccessors","names","close$1","tolerance","PRECISION","abs","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","s","t","Point","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","parameters","cosine","sine","xT","yT","sign","xt2","yt2","rx2","ry2","delta","constT","cxT","cyT","uX","uY","vX","vY","startAngle","angleCosine","angle","endAngle","signEndAngle","x1","y1","x2","y2","largeArc","swipe","rotation","sqrt","acos","radiusX","radiusY","xRotation","bboxStartAngle","start","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","rotate","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","q","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","add","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","range","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","count","bottomRight","lineIntersectionsCount","intersects","minX","maxX","minY","maxY","inRange","pointAccessor","create","definePointAccessors","arrayLimits","arr","MAX_NUM","MIN_NUM","toLineParamaters","isVertical","insertPosition","splice","reflectionPoint","scaleCopy","translate","quadraticToCubicControlPoints","position","scaledPoint","clone","scale","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","number","parsePath","pathInstance","previousCommand","SEGMENT_REGEX","params","closePath","command","toLowerCase","isRelative","MOVE","moveTo","ShapeMap","CLOSE","close","Error","elementsBoundingBox","elements","applyTransform","boundingBox","elementBoundingBox","visible","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","translateToPoint","transofrm","origin","alignStart","rect","align","axis","sizeField","alignStartReverse","alignElements","alignment","vAlign","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","stack","vStack","getStacks","maxSize","stacks","stackSize","addElementToStack","wrapElements","startElement","elementIdx","wrap","vWrap","fit","rectSize","optionsAccessor","set","defineOptionsAccessors","swing","PI","linear","easeOutElastic","time","diff","asin","renderAttr","renderAllAttr","attrs","renderStyle","isDefinition","type","nodeType","baseUrl","hashIndex","base","getElementsByTagName","href","url","supportBrowser","msie","indexOf","decodeEntities","ENTITY_REGEX","test","_element","lastIndex","innerHTML","innerText","alignToScreen","ctm","getScreenCTM","renderPath","ctx","path","segment","anchor","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","zIndexComparer","_zIndex","addGradientStops","gradient","stops","stop","parseColor","opacity","addColorStop","offset","toCssRgba","exportGroup","group","exportRoot","svg","root","RootNode","skipBaseHref","rootGroup","getOrigin","Group","children","load","SVG_NS","render","destroy","exportImage","surfaceOptions","container","surface","promise","defaults","cors","getSize","display","Surface$4","suspendTracking","draw","image","then","exportSVG","raw","resolve","slice$1$1","thing","call","addClass","el","cls","classList","className","removeClass","remove","reduce","word","setCSS","Object","keys","forEach","closest","selector","matches","getXY","drawDOM","doOne","pos","setTransform$1","nodeInfo","_clipbox","_matrix","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template","data","div","firstElementChild","handlePageBreaks","callback","forceBreak","pageWidth","pageHeight","margin","doPageBreak","splitElement","copy","page","makePage","insertBefore","pages","pageNum","totalPages","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","tagName","getAttribute","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","getComputedStyle$1","getPropertyValue","firstChild","nextSibling","breakAtElement","fallsOnMargin","splitText","firstInParent","table","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","doc","createRange","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","boxSizing","padding","bottom","overflow","clear","pageClassName","available","node","len","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","setAttribute","ownerDocument","_destructive","cloneNodes","querySelectorAll","tfoot","ol","index","paddingRight","beforePageBreak","setTimeout","reject","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","progress","canceled","next","append","cancel","drawText","pushNodeInfo","renderText","_renderElement","popNodeInfo","doStylesheet","ss","rules","cssRules","ex","addRules","findFonts","rule","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","obj","getCounter","getAllCounters","getPrototypeOf","reverse","incCounter","inc","_root","resetCounter","val","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","css","toRGB","pending","img","images","complete","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","decoration","createsStackingContext","updateClipbox","intersect","emptyClipbox","cb","prop","pseudoElt","defa","browser","webkit","mozilla","opera","microsoft","arguments","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","func","prev","getBorderRadius","sanitizeRadius","getContentBox","innerBox","wt","wr","wb","wl","getTransform","transform$$1","exec","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","clip","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","tmp","Path","fill","stroke","formatCounter","evalPseudoElementContent","content","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","rows","cells","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","edge","drawBackground","background","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","k","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","dir","textOverflow","saveTextOverflow","innerbox","version","currentStyle","getClientRects","g","_pdfLink","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","end","to","atan","tan","percent","fromRect","LinearGradient","userSpace","console","log","visual","widget","wrap$$1","_kendoExportVisual","attr","widgetInstance","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","selectedIndex","renderCheckbox","checked","Circle","Circle$2","renderFormField","option","whiteSpace","multiple","floats","positioned","floating","toDataURL","actuallyGetRangeBoundingRect","rectangles","done","chrome","Infinity","prevLineBottom","doChunk","found","cc","code","indent","origStart","substr","search","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","getFontHeight","textTransform","l","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","hasDecoration","selectNode","groupInStackingContext","zIndex","main","_dom_zIndex","insert","invert","visibility","mmul","b1","c1","d1","e1","f1","b2","c2","d2","e2","f2","kendoDrawing","kendoDrawingUtil","kendoUtil","support","HasObservers","now","toString$1","OptionsStore","withAccessors","Size","Element$1","PI_DIV_2","GRADIENT","paintable","IDENTITY_MATRIX_HASH","measurable","withGeometry","DEFAULT_STROKE","MAX_INTERVAL","pow$1","accessors","pop","unshift","ElementsArray","GeometryElementsArray","withPoints","Segment","MultiPath","DEFAULT_STROKE$1","Arc","DEFAULT_FONT","DEFAULT_FILL","Text","traversable","forEachReverse","Layout","Rect$2","StopsArray","withOptions","GradientStop","Gradient","points$1","RadialGradient","easingFunctions","instance","AnimationFactory","Animation","instance$1","PathParser","BaseNode","Surface$2","NODE_MAP","NONE","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","TRANSFORM","DefinitionMap","Node","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","ArcNode","CircleNode","GroupNode","ImageNode","MultiPathNode","RectNode","TextNode","RTL","Surface$3","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","geometry","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","ImageNode$2","MultiPathNode$2","RectNode$2","TextNode$2","instance$2","support$1","hasDocument","supportsCanvas","supportsSVG","SurfaceFactory","Surface","svg$1","canvas","inBrowser","Class$$1","constructor","observers","_observers","addObserver","removeObserver","trigger","methodName","event","observer","_suspended","optionsChange","suspend","resume","1","10","100","2","20","200","3","30","300","4","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","Number","MAX_VALUE","Date","getTime","h","det","equals","other","toArray","toString","scaleX","scaleY","IDENTITY","HasObservers$$1","prefix","this$1","_wrap","part","_set","composite","parentObj","_clear","wrapped","TBase","superclass","staticAccessors","ZERO","originPoint","move","distanceTo","dx","dy","digits","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","setSize","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","Element","_initOptions","prototypeAccessors","id","parentTransform","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","radius","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","anonymous","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","ceil","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","distance","angleRad","pointRadius","startPoint","arcParameters","_splice","_change","_add","_remove","howMany","_clearObserver","_setObserver","ElementsArray$$1","cNumber","addConstant","rad$$1","nthR","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","v","arcTo","lastControlIn","paths","cubicControlPoints","lastSegment","lineJoin","parse","arc","_addArcSegments","previous","pathWidth","segmentBox","fromArc","prototypeAccessors$1","toPath","metrics","_rect","childrenField","traverse","child","childrenChange","action","items","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","Group$$1","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","reflow","groups","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","arrangeElements","groupIdx","scaledStart","scaledSize","newStart","_initGroups","lineSize","bboxes","_newGroup","addGroup","_addToGroup","Rect$$1","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","_items","register","_options","duration","easing","setup","step","play","finish","delay","abort","loop","wallTime","easingPosition","_stopped","animationFrame","multiPath","srcElement","childNodes","observe","removeSelf","invalidate","Observable$$1","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","unbind","eventTarget","domNode","_kendoNode","currentSize","_resize","resize","force","_suspendedTracking","resumeTracking","originalEvent","_elementOffset","_surfacePoint","coord","inverseTransform","Observable","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","BaseNode$$1","definitions","clearDefinitions","childNode","createDefinitions","attachTo","domElement","setElement","nodes","childElement","renderChildren","updateDefinition","removeAttr","allAttr","allCss","removeAttribute","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definition","definitionChange","refUrl","renderDefinitions","mapDefinitions","baseHref","Node$$1","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","GradientNode$$1","definitionMap","addDefinitions","removeDefinitions","createDefinition","item","addDefinition","mapItem","removeDefinition","defs","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","fill.opacity","stroke.color","stroke.width","stroke.opacity","renderData","mapFill","mapStroke","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","PathNode$$1","mapPosition","mapSource","renderPosition","encode","htmlEncode","renderSource","setY","renderContent","renderTextAnchor","rtl","BaseSurface","direction","_template","_rootElement","click","mouseover","mouseout","mousemove","viewBox","_offset","initClip","clearClip","setClip","beginPath","setTransform","loadElements","setOpacity","globalAlpha","opactity","renderTo","save","restore","getContext","invalidateHandler","_invalidate","throttle","_rescale","_devicePixelRatio","devicePixelRatio","fixedScale","clearRect","shapes","_quadNode","pointShapes","QuadRoot$$1","inBounds","nodeRect","nodeBottomRight","inserted","_initChildren","halfWidth","halfHeight","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","levelWeight","parents","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","loading","state","drawImage","fillText","strokeText","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","undefined","resolveDataURL","rootElement","loadingStates","currentShape","_currentShape","implementation","hasFeature","preferred","logToConsole","navigator","userAgent","Text$$1","_pdfRect","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","$el","$clone","selected","orig","canvases","canvas$$1","skip_ws","tok_whitespace","read","token","read_stop","tok_length","tok_percent","read_linear_gradient","propName","to1","to2","tok_popen","tok_angle","tok_comma","tok_keyword","tok_pclose","read_url","tok_content","tok","cache1","tok_linear_gradient","tok_url","cache2","cache","looking_at","ret","last$$1","in_paren","in_string","dataviz","Color","NS","utils","outerWidth","_outerWidth","outerHeight","_outerHeight","proxy","TOOLTIP_TEMPLATE","TOOLTIP_CLOSE_TEMPLATE","SurfaceTooltip","_tooltipOptions","popupOptions","appendTo","animation","copyAnchorStyles","collision","_openPopupHandler","_openPopup","_bindEvents","showOn","autoHide","hideDelay","showAfter","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","on","_hideClick","_tooltipLeave","getPopup","popup","ui","Popup","off","clearTimeout","_timeout","shared","_tooltipShape","tooltip","_updateContent","isFunction","html","_position","tooltipOffset","_instance","surfaceOffset","show","_show","hide","_showTimeout","preventDefault","_autoHide","_measure","open","_closeButton","wrapper","_popupRelatedTarget","relatedTarget","DrawingSurface","Widget","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","plugin"],"mappings":"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","file":"kendo.drawing.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n function extendStatic(dest, src) {\n if (!src) {\n return;\n }\n if (typeof src.__proto__ === 'function') {\n dest.__proto__ = src;\n } else {\n for (var member in src) {\n if (src.hasOwnProperty(member)) {\n dest[member] = src[member];\n }\n }\n }\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll,\n extendStatic: extendStatic\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var extendStatic = kendoDrawingUtil.extendStatic;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var HasObservers = function (Class$$1) {\n function HasObservers() {\n Class$$1.apply(this, arguments);\n }\n extendStatic(HasObservers, Class$$1);\n HasObservers.prototype = Object.create(Class$$1 && Class$$1.prototype);\n HasObservers.prototype.constructor = HasObservers;\n HasObservers.fn = HasObservers.prototype;\n HasObservers.fn.init = HasObservers.fn.constructor;\n HasObservers.prototype.observers = function observers() {\n this._observers = this._observers || [];\n return this._observers;\n };\n HasObservers.prototype.addObserver = function addObserver(element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n };\n HasObservers.prototype.removeObserver = function removeObserver(element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n };\n HasObservers.prototype.trigger = function trigger(methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n };\n HasObservers.prototype.optionsChange = function optionsChange(e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n };\n HasObservers.prototype.geometryChange = function geometryChange() {\n this.trigger('geometryChange', { element: this });\n };\n HasObservers.prototype.suspend = function suspend() {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n };\n HasObservers.prototype.resume = function resume() {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n };\n HasObservers.prototype._observerField = function _observerField(field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n };\n return HasObservers;\n }(Class);\n function append$1$1(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n var now = Date.now || function () {\n return new Date().getTime();\n };\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n function elementPadding(element) {\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n }\n var Matrix = function (Class$$1) {\n function Matrix(a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n Class$$1.call(this);\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n extendStatic(Matrix, Class$$1);\n Matrix.prototype = Object.create(Class$$1 && Class$$1.prototype);\n Matrix.prototype.constructor = Matrix;\n Matrix.fn = Matrix.prototype;\n Matrix.fn.init = Matrix.fn.constructor;\n Matrix.prototype.multiplyCopy = function multiplyCopy(matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n };\n Matrix.prototype.invert = function invert() {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n };\n Matrix.prototype.clone = function clone() {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix.prototype.equals = function equals(other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n };\n Matrix.prototype.round = function round$1(precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n };\n Matrix.prototype.toArray = function toArray(precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n };\n Matrix.prototype.toString = function toString(precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n };\n Matrix.translate = function translate(x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function unit() {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function rotate(angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function scale(scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n return Matrix;\n }(Class);\n Matrix.IDENTITY = Matrix.unit();\n var matrixRegexp = /matrix\\((.*)\\)/;\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n var members = match[1].split(',').map(function (x) {\n return parseFloat(x);\n });\n return new (Function.prototype.bind.apply(Matrix, [null].concat(members)))();\n }\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n if (transform === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform);\n }\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n var util = {\n append: append$1$1,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n now: now,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n elementPadding: elementPadding,\n elementScale: elementScale,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString$1 = {}.toString;\n var OptionsStore = function (HasObservers$$1) {\n function OptionsStore(options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n HasObservers$$1.call(this);\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n }\n extendStatic(OptionsStore, HasObservers$$1);\n OptionsStore.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n OptionsStore.prototype.constructor = OptionsStore;\n OptionsStore.fn = OptionsStore.prototype;\n OptionsStore.fn.init = OptionsStore.fn.constructor;\n OptionsStore.prototype.get = function get(field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n };\n OptionsStore.prototype.set = function set(field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n };\n OptionsStore.prototype._set = function _set(field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n };\n OptionsStore.prototype._clear = function _clear(field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n };\n OptionsStore.prototype._wrap = function _wrap(object, field) {\n var type = toString$1.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n };\n return OptionsStore;\n }(HasObservers);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var withAccessors = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineAccessors(result.prototype, names);\n return result;\n };\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = function (superclass) {\n function Point(x, y) {\n superclass.call(this);\n this.x = x || 0;\n this.y = y || 0;\n }\n extendStatic(Point, superclass);\n Point.prototype = Object.create(superclass && superclass.prototype);\n Point.prototype.constructor = Point;\n Point.fn = Point.prototype;\n Point.fn.init = Point.fn.constructor;\n var staticAccessors = { ZERO: {} };\n Point.prototype.equals = function equals(other) {\n return other && other.x === this.x && other.y === this.y;\n };\n Point.prototype.clone = function clone() {\n return new Point(this.x, this.y);\n };\n Point.prototype.rotate = function rotate(angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n };\n Point.prototype.translate = function translate(x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n };\n Point.prototype.translateWith = function translateWith(point) {\n return this.translate(point.x, point.y);\n };\n Point.prototype.move = function move(x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n };\n Point.prototype.scale = function scale(scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n };\n Point.prototype.scaleCopy = function scaleCopy(scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n };\n Point.prototype.transform = function transform(transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n };\n Point.prototype.transformCopy = function transformCopy(transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n };\n Point.prototype.distanceTo = function distanceTo(point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Point.prototype.round = function round$1(digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n };\n Point.prototype.toArray = function toArray(digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n };\n Point.prototype.toString = function toString(digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n };\n Point.create = function create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function min() {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function max() {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function minPoint() {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function maxPoint() {\n return new Point(MAX_NUM, MAX_NUM);\n };\n staticAccessors.ZERO.get = function () {\n return new Point(0, 0);\n };\n Object.defineProperties(Point, staticAccessors);\n return Point;\n }(withAccessors(HasObservers, [\n 'x',\n 'y'\n ]));\n var Size = function (superclass) {\n function Size(width, height) {\n superclass.call(this);\n this.width = width || 0;\n this.height = height || 0;\n }\n extendStatic(Size, superclass);\n Size.prototype = Object.create(superclass && superclass.prototype);\n Size.prototype.constructor = Size;\n Size.fn = Size.prototype;\n Size.fn.init = Size.fn.constructor;\n var staticAccessors = { ZERO: {} };\n Size.prototype.equals = function equals(other) {\n return other && other.width === this.width && other.height === this.height;\n };\n Size.prototype.clone = function clone() {\n return new Size(this.width, this.height);\n };\n Size.prototype.toArray = function toArray(digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n };\n Size.create = function create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n staticAccessors.ZERO.get = function () {\n return new Size(0, 0);\n };\n Object.defineProperties(Size, staticAccessors);\n return Size;\n }(withAccessors(HasObservers, [\n 'width',\n 'height'\n ]));\n var Rect = function (HasObservers$$1) {\n function Rect(origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n HasObservers$$1.call(this);\n this.setOrigin(origin);\n this.setSize(size);\n }\n extendStatic(Rect, HasObservers$$1);\n Rect.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Rect.prototype.constructor = Rect;\n Rect.fn = Rect.prototype;\n Rect.fn.init = Rect.fn.constructor;\n Rect.prototype.clone = function clone() {\n return new Rect(this.origin.clone(), this.size.clone());\n };\n Rect.prototype.equals = function equals(other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n };\n Rect.prototype.setOrigin = function setOrigin(value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n };\n Rect.prototype.getOrigin = function getOrigin() {\n return this.origin;\n };\n Rect.prototype.setSize = function setSize(value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n };\n Rect.prototype.getSize = function getSize() {\n return this.size;\n };\n Rect.prototype.width = function width() {\n return this.size.width;\n };\n Rect.prototype.height = function height() {\n return this.size.height;\n };\n Rect.prototype.topLeft = function topLeft() {\n return this.origin.clone();\n };\n Rect.prototype.bottomRight = function bottomRight() {\n return this.origin.clone().translate(this.width(), this.height());\n };\n Rect.prototype.topRight = function topRight() {\n return this.origin.clone().translate(this.width(), 0);\n };\n Rect.prototype.bottomLeft = function bottomLeft() {\n return this.origin.clone().translate(0, this.height());\n };\n Rect.prototype.center = function center() {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n };\n Rect.prototype.bbox = function bbox(matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n };\n Rect.prototype.transformCopy = function transformCopy(m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n };\n Rect.prototype.expand = function expand(x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n };\n Rect.prototype.expandCopy = function expandCopy(x, y) {\n return this.clone().expand(x, y);\n };\n Rect.prototype.containsPoint = function containsPoint(point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n };\n Rect.prototype._isOnPath = function _isOnPath(point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n };\n Rect.fromPoints = function fromPoints() {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function union(a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function intersect(a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n return Rect;\n }(HasObservers);\n var Transformation = function (HasObservers$$1) {\n function Transformation(matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n HasObservers$$1.call(this);\n this._matrix = matrix;\n }\n extendStatic(Transformation, HasObservers$$1);\n Transformation.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Transformation.prototype.constructor = Transformation;\n Transformation.fn = Transformation.prototype;\n Transformation.fn.init = Transformation.fn.constructor;\n Transformation.prototype.clone = function clone() {\n return new Transformation(this._matrix.clone());\n };\n Transformation.prototype.equals = function equals(other) {\n return other && other._matrix.equals(this._matrix);\n };\n Transformation.prototype.translate = function translate(x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n };\n Transformation.prototype.scale = function scale(scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n };\n Transformation.prototype.rotate = function rotate(angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n };\n Transformation.prototype.multiply = function multiply(transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n };\n Transformation.prototype.matrix = function matrix(value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n };\n Transformation.prototype._optionsChange = function _optionsChange() {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n };\n return Transformation;\n }(HasObservers);\n function transform$1(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = function (HasObservers$$1) {\n function Element(options) {\n HasObservers$$1.call(this);\n this._initOptions(options);\n }\n extendStatic(Element, HasObservers$$1);\n Element.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Element.prototype.constructor = Element;\n Element.fn = Element.prototype;\n Element.fn.init = Element.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Rect';\n };\n Element.prototype._initOptions = function _initOptions(options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform = options.transform;\n if (transform) {\n options.transform = transform$1(transform);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n };\n Element.prototype.transform = function transform(value) {\n if (defined(value)) {\n this.options.set('transform', transform$1(value));\n } else {\n return this.options.get('transform');\n }\n };\n Element.prototype.parentTransform = function parentTransform() {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform$1(parentMatrix);\n }\n };\n Element.prototype.currentTransform = function currentTransform(parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform$1(combinedMatrix);\n }\n };\n Element.prototype.visible = function visible(value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n };\n Element.prototype.clip = function clip(value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n };\n Element.prototype.opacity = function opacity(value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n };\n Element.prototype.clippedBBox = function clippedBBox(transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n };\n Element.prototype.containsPoint = function containsPoint(point, parentTransform) {\n if (this.visible()) {\n var transform = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n };\n Element.prototype._hasFill = function _hasFill() {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n };\n Element.prototype._hasStroke = function _hasStroke() {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n };\n Element.prototype._clippedBBox = function _clippedBBox(transformation) {\n return this.bbox(transformation);\n };\n Object.defineProperties(Element.prototype, prototypeAccessors);\n return Element;\n }(HasObservers);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = function (superclass) {\n function Circle(center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n superclass.call(this);\n this.setCenter(center);\n this.setRadius(radius);\n }\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create(superclass && superclass.prototype);\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n Circle.prototype.setCenter = function setCenter(value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n };\n Circle.prototype.getCenter = function getCenter() {\n return this.center;\n };\n Circle.prototype.equals = function equals(other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n };\n Circle.prototype.clone = function clone() {\n return new Circle(this.center.clone(), this.radius);\n };\n Circle.prototype.pointAt = function pointAt(angle) {\n return this._pointAt(rad(angle));\n };\n Circle.prototype.bbox = function bbox(matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n };\n Circle.prototype._pointAt = function _pointAt(angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n };\n Circle.prototype.containsPoint = function containsPoint(point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n };\n Circle.prototype._isOnPath = function _isOnPath(point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n };\n return Circle;\n }(withAccessors(HasObservers, ['radius']));\n var GRADIENT = 'Gradient';\n var paintable = function (TBase) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.fill = function fill(color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n };\n anonymous.prototype.stroke = function stroke(color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n };\n return anonymous;\n }(TBase);\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var measurable = function (TBase) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.bbox = function bbox(transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n };\n anonymous.prototype.geometryChange = function geometryChange() {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n };\n return anonymous;\n }(TBase);\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var withGeometry = function (TBase, names) {\n if (names === void 0) {\n names = ['geometry'];\n }\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineGeometryAccessors(result.prototype, names);\n return result;\n };\n var DEFAULT_STROKE = '#000';\n var Circle = function (superclass) {\n function Circle(geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create(superclass && superclass.prototype);\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Circle';\n };\n Circle.prototype.rawBBox = function rawBBox() {\n return this._geometry.bbox();\n };\n Circle.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Circle.prototype._containsPoint = function _containsPoint(point) {\n return this.geometry().containsPoint(point);\n };\n Circle.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Circle.prototype, prototypeAccessors);\n return Circle;\n }(paintable(measurable(withGeometry(Element$1))));\n var PRECISION = 10;\n function close$1(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close$1(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var accessors = [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ];\n var Arc$2 = function (superclass) {\n function Arc(center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this);\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n }\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create(superclass && superclass.prototype);\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n Arc.prototype.clone = function clone() {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n };\n Arc.prototype.setCenter = function setCenter(value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n };\n Arc.prototype.getCenter = function getCenter() {\n return this.center;\n };\n Arc.prototype.pointAt = function pointAt(angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n };\n Arc.prototype.curvePoints = function curvePoints() {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform$1().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n };\n Arc.prototype.bbox = function bbox(matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n };\n Arc.prototype._arcInterval = function _arcInterval() {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n };\n Arc.prototype._intervalCurvePoints = function _intervalCurvePoints(startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n };\n Arc.prototype._derivativeAt = function _derivativeAt(angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n };\n Arc.prototype.containsPoint = function containsPoint(point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n };\n Arc.prototype._isOnPath = function _isOnPath(point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n };\n Arc.fromPoints = function fromPoints(start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n return Arc;\n }(withAccessors(HasObservers, accessors));\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = function (HasObservers$$1) {\n function ElementsArray(array) {\n if (array === void 0) {\n array = [];\n }\n HasObservers$$1.call(this);\n this.length = 0;\n this._splice(0, array.length, array);\n }\n extendStatic(ElementsArray, HasObservers$$1);\n ElementsArray.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n ElementsArray.prototype.constructor = ElementsArray;\n ElementsArray.fn = ElementsArray.prototype;\n ElementsArray.fn.init = ElementsArray.fn.constructor;\n ElementsArray.prototype.elements = function elements(value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n };\n ElementsArray.prototype.push = function push$1() {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n };\n ElementsArray.prototype.slice = function slice$1() {\n return slice.call(this);\n };\n ElementsArray.prototype.pop = function pop$1() {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n };\n ElementsArray.prototype.splice = function splice$1(index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n };\n ElementsArray.prototype.shift = function shift$1() {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n };\n ElementsArray.prototype.unshift = function unshift$1() {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n };\n ElementsArray.prototype.indexOf = function indexOf(element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n };\n ElementsArray.prototype._splice = function _splice(index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n };\n ElementsArray.prototype._add = function _add(elements) {\n this._setObserver(elements);\n this._change();\n };\n ElementsArray.prototype._remove = function _remove(elements) {\n this._clearObserver(elements);\n this._change();\n };\n ElementsArray.prototype._setObserver = function _setObserver(elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n };\n ElementsArray.prototype._clearObserver = function _clearObserver(elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n };\n ElementsArray.prototype._change = function _change() {\n };\n return ElementsArray;\n }(HasObservers);\n var GeometryElementsArray = function (ElementsArray$$1) {\n function GeometryElementsArray() {\n ElementsArray$$1.apply(this, arguments);\n }\n extendStatic(GeometryElementsArray, ElementsArray$$1);\n GeometryElementsArray.prototype = Object.create(ElementsArray$$1 && ElementsArray$$1.prototype);\n GeometryElementsArray.prototype.constructor = GeometryElementsArray;\n GeometryElementsArray.fn = GeometryElementsArray.prototype;\n GeometryElementsArray.fn.init = GeometryElementsArray.fn.constructor;\n GeometryElementsArray.prototype._change = function _change() {\n this.geometryChange();\n };\n return GeometryElementsArray;\n }(ElementsArray);\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform$1().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = function (Class$$1) {\n function ComplexNumber(real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n Class$$1.call(this);\n this.real = real;\n this.img = img;\n }\n extendStatic(ComplexNumber, Class$$1);\n ComplexNumber.prototype = Object.create(Class$$1 && Class$$1.prototype);\n ComplexNumber.prototype.constructor = ComplexNumber;\n ComplexNumber.fn = ComplexNumber.prototype;\n ComplexNumber.fn.init = ComplexNumber.fn.constructor;\n ComplexNumber.prototype.add = function add(cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n };\n ComplexNumber.prototype.addConstant = function addConstant(value) {\n return new ComplexNumber(this.real + value, this.img);\n };\n ComplexNumber.prototype.negate = function negate() {\n return new ComplexNumber(-this.real, -this.img);\n };\n ComplexNumber.prototype.multiply = function multiply(cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n };\n ComplexNumber.prototype.multiplyConstant = function multiplyConstant(value) {\n return new ComplexNumber(this.real * value, this.img * value);\n };\n ComplexNumber.prototype.nthRoot = function nthRoot(n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n };\n ComplexNumber.prototype.equals = function equals(cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n };\n ComplexNumber.prototype.isReal = function isReal() {\n return this.img === 0;\n };\n return ComplexNumber;\n }(Class);\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close$1(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n var withPoints = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n definePointAccessors(result.prototype, names);\n return result;\n };\n var points = [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ];\n var Segment = function (superclass) {\n function Segment(anchor, controlIn, controlOut) {\n superclass.call(this);\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n extendStatic(Segment, superclass);\n Segment.prototype = Object.create(superclass && superclass.prototype);\n Segment.prototype.constructor = Segment;\n Segment.fn = Segment.prototype;\n Segment.fn.init = Segment.fn.constructor;\n Segment.prototype.bboxTo = function bboxTo(toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n };\n Segment.prototype._lineBoundingBox = function _lineBoundingBox(p1, p2) {\n return Rect.fromPoints(p1, p2);\n };\n Segment.prototype._curveBoundingBox = function _curveBoundingBox(p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n };\n Segment.prototype._curveExtremesFor = function _curveExtremesFor(points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n };\n Segment.prototype._curveExtremes = function _curveExtremes(x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n };\n Segment.prototype._intersectionsTo = function _intersectionsTo(segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n };\n Segment.prototype._isOnCurveTo = function _isOnCurveTo(segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform$1().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n };\n Segment.prototype._isOnLineTo = function _isOnLineTo(segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform$1().rotate(-angle, p1)));\n };\n Segment.prototype._isOnPathTo = function _isOnPathTo(segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n };\n return Segment;\n }(withPoints(HasObservers, points));\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n function parsePath(pathInstance, str) {\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n pathInstance.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return pathInstance;\n }\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var Path = function (superclass) {\n function Path(options) {\n superclass.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n }\n extendStatic(Path, superclass);\n Path.prototype = Object.create(superclass && superclass.prototype);\n Path.prototype.constructor = Path;\n Path.fn = Path.prototype;\n Path.fn.init = Path.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n Path.parse = function parse(str, options) {\n return MultiPath.parse(str, options);\n };\n prototypeAccessors.nodeType.get = function () {\n return 'Path';\n };\n Path.prototype.moveTo = function moveTo(x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n };\n Path.prototype.lineTo = function lineTo(x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n };\n Path.prototype.curveTo = function curveTo(controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n };\n Path.prototype.arc = function arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n };\n Path.prototype.arcTo = function arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n };\n Path.prototype._addArcSegments = function _addArcSegments(arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n };\n Path.prototype.close = function close() {\n this.options.closed = true;\n this.geometryChange();\n return this;\n };\n Path.prototype.rawBBox = function rawBBox() {\n return this._bbox();\n };\n Path.prototype._containsPoint = function _containsPoint(point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n };\n Path.prototype._isOnPath = function _isOnPath(point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n };\n Path.prototype._bbox = function _bbox(matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n };\n Path.fromRect = function fromRect(rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function fromPoints(points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function fromArc(arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Object.defineProperties(Path.prototype, prototypeAccessors);\n return Path;\n }(paintable(measurable(Element$1)));\n var MultiPath = function (superclass) {\n function MultiPath(options) {\n superclass.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n extendStatic(MultiPath, superclass);\n MultiPath.prototype = Object.create(superclass && superclass.prototype);\n MultiPath.prototype.constructor = MultiPath;\n MultiPath.fn = MultiPath.prototype;\n MultiPath.fn.init = MultiPath.fn.constructor;\n var prototypeAccessors$1 = { nodeType: {} };\n MultiPath.parse = function parse(str, options) {\n var instance = new MultiPath(options);\n return parsePath(instance, str);\n };\n prototypeAccessors$1.nodeType.get = function () {\n return 'MultiPath';\n };\n MultiPath.prototype.moveTo = function moveTo(x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n };\n MultiPath.prototype.lineTo = function lineTo(x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n };\n MultiPath.prototype.curveTo = function curveTo(controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n };\n MultiPath.prototype.arc = function arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n };\n MultiPath.prototype.arcTo = function arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n };\n MultiPath.prototype.close = function close() {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n };\n MultiPath.prototype._bbox = function _bbox(matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n };\n MultiPath.prototype.rawBBox = function rawBBox() {\n return elementsBoundingBox(this.paths, false);\n };\n MultiPath.prototype._containsPoint = function _containsPoint(point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n };\n MultiPath.prototype._isOnPath = function _isOnPath(point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n };\n MultiPath.prototype._clippedBBox = function _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n };\n Object.defineProperties(MultiPath.prototype, prototypeAccessors$1);\n return MultiPath;\n }(paintable(measurable(Element$1)));\n var DEFAULT_STROKE$1 = '#000';\n var Arc = function (superclass) {\n function Arc(geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n }\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create(superclass && superclass.prototype);\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Arc';\n };\n Arc.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Arc.prototype.rawBBox = function rawBBox() {\n return this.geometry().bbox();\n };\n Arc.prototype.toPath = function toPath() {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n };\n Arc.prototype._containsPoint = function _containsPoint(point) {\n return this.geometry().containsPoint(point);\n };\n Arc.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Arc.prototype, prototypeAccessors);\n return Arc;\n }(paintable(measurable(withGeometry(Element$1))));\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = function (superclass) {\n function Text(content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n }\n extendStatic(Text, superclass);\n Text.prototype = Object.create(superclass && superclass.prototype);\n Text.prototype.constructor = Text;\n Text.fn = Text.prototype;\n Text.fn.init = Text.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Text';\n };\n Text.prototype.content = function content(value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n };\n Text.prototype.measure = function measure() {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n };\n Text.prototype.rect = function rect() {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n };\n Text.prototype.bbox = function bbox(transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n };\n Text.prototype.rawBBox = function rawBBox() {\n return this.rect().bbox();\n };\n Text.prototype._containsPoint = function _containsPoint(point) {\n return this.rect().containsPoint(point);\n };\n Object.defineProperties(Text.prototype, prototypeAccessors);\n return Text;\n }(paintable(withPoints(Element$1, ['position'])));\n var Image$1 = function (superclass) {\n function Image(src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.src(src);\n this.rect(rect);\n }\n extendStatic(Image, superclass);\n Image.prototype = Object.create(superclass && superclass.prototype);\n Image.prototype.constructor = Image;\n Image.fn = Image.prototype;\n Image.fn.init = Image.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Image';\n };\n Image.prototype.src = function src(value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n };\n Image.prototype.bbox = function bbox(transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n };\n Image.prototype.rawBBox = function rawBBox() {\n return this._rect.bbox();\n };\n Image.prototype._containsPoint = function _containsPoint(point) {\n return this._rect.containsPoint(point);\n };\n Image.prototype._hasFill = function _hasFill() {\n return this.src();\n };\n Object.defineProperties(Image.prototype, prototypeAccessors);\n return Image;\n }(withGeometry(Element$1, ['rect']));\n var traversable = function (TBase, childrenField) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.traverse = function traverse(callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n return anonymous;\n }(TBase);\n };\n var Group = function (superclass) {\n function Group(options) {\n superclass.call(this, options);\n this.children = [];\n }\n extendStatic(Group, superclass);\n Group.prototype = Object.create(superclass && superclass.prototype);\n Group.prototype.constructor = Group;\n Group.fn = Group.prototype;\n Group.fn.init = Group.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Group';\n };\n Group.prototype.childrenChange = function childrenChange(action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n };\n Group.prototype.append = function append$1() {\n append$1$1(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n };\n Group.prototype.insert = function insert(index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n };\n Group.prototype.insertAt = function insertAt(element, index) {\n return this.insert(index, element);\n };\n Group.prototype.remove = function remove(element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n };\n Group.prototype.removeAt = function removeAt(index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n };\n Group.prototype.clear = function clear() {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n };\n Group.prototype.bbox = function bbox(transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n };\n Group.prototype.rawBBox = function rawBBox() {\n return elementsBoundingBox(this.children, false);\n };\n Group.prototype._clippedBBox = function _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n };\n Group.prototype.currentTransform = function currentTransform(transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n };\n Group.prototype.containsPoint = function containsPoint(point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n };\n Group.prototype._reparent = function _reparent(elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n };\n Object.defineProperties(Group.prototype, prototypeAccessors);\n return Group;\n }(traversable(Element$1, 'children'));\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform$1();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true,\n revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n var Layout = function (Group$$1) {\n function Layout(rect, options) {\n Group$$1.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n extendStatic(Layout, Group$$1);\n Layout.prototype = Object.create(Group$$1 && Group$$1.prototype);\n Layout.prototype.constructor = Layout;\n Layout.fn = Layout.prototype;\n Layout.fn.init = Layout.fn.constructor;\n Layout.prototype.rect = function rect(value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n };\n Layout.prototype._initMap = function _initMap() {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n };\n Layout.prototype.reflow = function reflow() {\n var this$1 = this;\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this$1.forEach(group.bboxes, arrangeElements);\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform = transform$1();\n if (groupAxis === 'x') {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n this.transform(transform);\n }\n };\n Layout.prototype._initGroups = function _initGroups() {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n };\n Layout.prototype._addToGroup = function _addToGroup(group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n };\n Layout.prototype._newGroup = function _newGroup() {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n };\n return Layout;\n }(Group);\n var Rect$2 = function (superclass) {\n function Rect$$1(geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n extendStatic(Rect$$1, superclass);\n Rect$$1.prototype = Object.create(superclass && superclass.prototype);\n Rect$$1.prototype.constructor = Rect$$1;\n Rect$$1.fn = Rect$$1.prototype;\n Rect$$1.fn.init = Rect$$1.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Rect';\n };\n Rect$$1.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Rect$$1.prototype.rawBBox = function rawBBox() {\n return this._geometry.bbox();\n };\n Rect$$1.prototype._containsPoint = function _containsPoint(point) {\n return this._geometry.containsPoint(point);\n };\n Rect$$1.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Rect$$1.prototype, prototypeAccessors);\n return Rect$$1;\n }(paintable(measurable(withGeometry(Element$1))));\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform = element.transform() || transform$1();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n }\n var StopsArray = function (ElementsArray$$1) {\n function StopsArray() {\n ElementsArray$$1.apply(this, arguments);\n }\n extendStatic(StopsArray, ElementsArray$$1);\n StopsArray.prototype = Object.create(ElementsArray$$1 && ElementsArray$$1.prototype);\n StopsArray.prototype.constructor = StopsArray;\n StopsArray.fn = StopsArray.prototype;\n StopsArray.fn.init = StopsArray.fn.constructor;\n StopsArray.prototype._change = function _change() {\n this.optionsChange({ field: 'stops' });\n };\n return StopsArray;\n }(ElementsArray);\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var withOptions = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineOptionsAccessors(result.prototype, names);\n return result;\n };\n var options = [\n 'offset',\n 'color',\n 'opacity'\n ];\n var GradientStop = function (superclass) {\n function GradientStop(offset, color, opacity) {\n superclass.call(this);\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n extendStatic(GradientStop, superclass);\n GradientStop.prototype = Object.create(superclass && superclass.prototype);\n GradientStop.prototype.constructor = GradientStop;\n GradientStop.fn = GradientStop.prototype;\n GradientStop.fn.init = GradientStop.fn.constructor;\n GradientStop.create = function create(arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n return GradientStop;\n }(withOptions(HasObservers, options));\n var Gradient = function (HasObservers$$1) {\n function Gradient(options) {\n if (options === void 0) {\n options = {};\n }\n HasObservers$$1.call(this);\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n }\n extendStatic(Gradient, HasObservers$$1);\n Gradient.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Gradient.prototype.constructor = Gradient;\n Gradient.fn = Gradient.prototype;\n Gradient.fn.init = Gradient.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Gradient';\n };\n Gradient.prototype.userSpace = function userSpace(value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n };\n Gradient.prototype._createStops = function _createStops(stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n };\n Gradient.prototype.addStop = function addStop(offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n };\n Gradient.prototype.removeStop = function removeStop(stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n };\n Gradient.prototype.optionsChange = function optionsChange(e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n };\n Gradient.prototype.geometryChange = function geometryChange() {\n this.optionsChange();\n };\n Object.defineProperties(Gradient.prototype, prototypeAccessors);\n return Gradient;\n }(HasObservers);\n var points$1 = [\n 'start',\n 'end'\n ];\n var LinearGradient = function (superclass) {\n function LinearGradient(options) {\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n extendStatic(LinearGradient, superclass);\n LinearGradient.prototype = Object.create(superclass && superclass.prototype);\n LinearGradient.prototype.constructor = LinearGradient;\n LinearGradient.fn = LinearGradient.prototype;\n LinearGradient.fn.init = LinearGradient.fn.constructor;\n return LinearGradient;\n }(withPoints(Gradient, points$1));\n var RadialGradient = function (superclass) {\n function RadialGradient(options) {\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n }\n extendStatic(RadialGradient, superclass);\n RadialGradient.prototype = Object.create(superclass && superclass.prototype);\n RadialGradient.prototype.constructor = RadialGradient;\n RadialGradient.fn = RadialGradient.prototype;\n RadialGradient.fn.init = RadialGradient.fn.constructor;\n RadialGradient.prototype.radius = function radius(value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n };\n RadialGradient.prototype.fallbackFill = function fallbackFill(value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n };\n return RadialGradient;\n }(withPoints(Gradient, ['center']));\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var instance;\n var AnimationFactory = function (Class$$1) {\n function AnimationFactory() {\n Class$$1.call(this);\n this._items = [];\n }\n extendStatic(AnimationFactory, Class$$1);\n AnimationFactory.prototype = Object.create(Class$$1 && Class$$1.prototype);\n AnimationFactory.prototype.constructor = AnimationFactory;\n AnimationFactory.fn = AnimationFactory.prototype;\n AnimationFactory.fn.init = AnimationFactory.fn.constructor;\n var staticAccessors = { current: {} };\n staticAccessors.current.get = function () {\n if (!instance) {\n instance = new AnimationFactory();\n }\n return instance;\n };\n AnimationFactory.prototype.register = function register(name, type) {\n this._items.push({\n name: name,\n type: type\n });\n };\n AnimationFactory.prototype.create = function create(element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n };\n Object.defineProperties(AnimationFactory, staticAccessors);\n return AnimationFactory;\n }(Class);\n var Animation = function (Class$$1) {\n function Animation(element, options) {\n Class$$1.call(this);\n this.options = $.extend({}, this.options, options);\n this.element = element;\n }\n extendStatic(Animation, Class$$1);\n Animation.prototype = Object.create(Class$$1 && Class$$1.prototype);\n Animation.prototype.constructor = Animation;\n Animation.fn = Animation.prototype;\n Animation.fn.init = Animation.fn.constructor;\n var prototypeAccessors = { options: {} };\n Animation.create = function create(type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n prototypeAccessors.options.get = function () {\n return this._options || {\n duration: 500,\n easing: 'swing'\n };\n };\n prototypeAccessors.options.set = function (value) {\n this._options = value;\n };\n Animation.prototype.setup = function setup() {\n };\n Animation.prototype.step = function step() {\n };\n Animation.prototype.play = function play() {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n };\n Animation.prototype.abort = function abort() {\n this._stopped = true;\n };\n Animation.prototype.destroy = function destroy() {\n this.abort();\n };\n Object.defineProperties(Animation.prototype, prototypeAccessors);\n return Animation;\n }(Class);\n var instance$1;\n var PathParser = function (Class$$1) {\n function PathParser() {\n Class$$1.apply(this, arguments);\n }\n extendStatic(PathParser, Class$$1);\n PathParser.prototype = Object.create(Class$$1 && Class$$1.prototype);\n PathParser.prototype.constructor = PathParser;\n PathParser.fn = PathParser.prototype;\n PathParser.fn.init = PathParser.fn.constructor;\n var staticAccessors = { current: {} };\n staticAccessors.current.get = function () {\n if (!instance$1) {\n instance$1 = new PathParser();\n }\n return instance$1;\n };\n PathParser.prototype.parse = function parse(str, options) {\n var multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n };\n Object.defineProperties(PathParser, staticAccessors);\n return PathParser;\n }(Class);\n var BaseNode = function (Class$$1) {\n function BaseNode(srcElement) {\n Class$$1.call(this);\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n extendStatic(BaseNode, Class$$1);\n BaseNode.prototype = Object.create(Class$$1 && Class$$1.prototype);\n BaseNode.prototype.constructor = BaseNode;\n BaseNode.fn = BaseNode.prototype;\n BaseNode.fn.init = BaseNode.fn.constructor;\n BaseNode.prototype.destroy = function destroy() {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n };\n BaseNode.prototype.load = function load() {\n };\n BaseNode.prototype.observe = function observe() {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n };\n BaseNode.prototype.append = function append(node) {\n this.childNodes.push(node);\n node.parent = this;\n };\n BaseNode.prototype.insertAt = function insertAt(node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n };\n BaseNode.prototype.remove = function remove(index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n };\n BaseNode.prototype.removeSelf = function removeSelf() {\n this.clear();\n this.destroy();\n };\n BaseNode.prototype.clear = function clear() {\n this.remove(0, this.childNodes.length);\n };\n BaseNode.prototype.invalidate = function invalidate() {\n if (this.parent) {\n this.parent.invalidate();\n }\n };\n BaseNode.prototype.geometryChange = function geometryChange() {\n this.invalidate();\n };\n BaseNode.prototype.optionsChange = function optionsChange() {\n this.invalidate();\n };\n BaseNode.prototype.childrenChange = function childrenChange(e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n };\n return BaseNode;\n }(Class);\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface$2 = function (Observable$$1) {\n function Surface(element, options) {\n Observable$$1.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n }\n extendStatic(Surface, Observable$$1);\n Surface.prototype = Object.create(Observable$$1 && Observable$$1.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n Surface.prototype.draw = function draw(element) {\n this._visual.children.push(element);\n };\n Surface.prototype.clear = function clear() {\n this._visual.children = [];\n };\n Surface.prototype.destroy = function destroy() {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n };\n Surface.prototype.eventTarget = function eventTarget(e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n };\n Surface.prototype.exportVisual = function exportVisual() {\n return this._visual;\n };\n Surface.prototype.getSize = function getSize() {\n return elementSize(this.element);\n };\n Surface.prototype.currentSize = function currentSize(size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n };\n Surface.prototype.setSize = function setSize(size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n };\n Surface.prototype.resize = function resize(force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n };\n Surface.prototype.size = function size(value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n };\n Surface.prototype.suspendTracking = function suspendTracking() {\n this._suspendedTracking = true;\n };\n Surface.prototype.resumeTracking = function resumeTracking() {\n this._suspendedTracking = false;\n };\n Surface.prototype._enableTracking = function _enableTracking() {\n };\n Surface.prototype._resize = function _resize() {\n };\n Surface.prototype._handler = function _handler(eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n };\n Surface.prototype._elementOffset = function _elementOffset() {\n var element = this.element;\n var padding = elementPadding(element);\n var ref = elementOffset(element);\n var left = ref.left;\n var top = ref.top;\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n };\n Surface.prototype._surfacePoint = function _surfacePoint(e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n var inverseTransform = elementScale(this.element).invert();\n var point = new Point(x, y).transform(inverseTransform);\n return point;\n };\n return Surface;\n }(kendo.Observable);\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\"' + value + '\" ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var url = '';\n if (base && !(supportBrowser || {}).msie) {\n var hashIndex = href.indexOf('#');\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n var Node = function (BaseNode$$1) {\n function Node(srcElement, options) {\n BaseNode$$1.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n }\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create(BaseNode$$1 && BaseNode$$1.prototype);\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n Node.prototype.destroy = function destroy() {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode$$1.prototype.destroy.call(this);\n };\n Node.prototype.load = function load(elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n };\n Node.prototype.root = function root() {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n };\n Node.prototype.attachTo = function attachTo(domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n };\n Node.prototype.setElement = function setElement(element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n };\n Node.prototype.clear = function clear() {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n };\n Node.prototype.removeSelf = function removeSelf() {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode$$1.prototype.removeSelf.call(this);\n };\n Node.prototype.template = function template() {\n return this.renderChildren();\n };\n Node.prototype.render = function render() {\n return this.template();\n };\n Node.prototype.renderChildren = function renderChildren() {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n };\n Node.prototype.optionsChange = function optionsChange(e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\n }\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n Node.prototype.attr = function attr(name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n };\n Node.prototype.allAttr = function allAttr(attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n };\n Node.prototype.css = function css(name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n };\n Node.prototype.allCss = function allCss(styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n };\n Node.prototype.removeAttr = function removeAttr(name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n };\n Node.prototype.mapTransform = function mapTransform(transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n };\n Node.prototype.renderTransform = function renderTransform() {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n };\n Node.prototype.transformChange = function transformChange(value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n };\n Node.prototype.mapStyle = function mapStyle() {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n };\n Node.prototype.renderStyle = function renderStyle$1() {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n };\n Node.prototype.renderOpacity = function renderOpacity() {\n return renderAttr('opacity', this.srcElement.options.opacity);\n };\n Node.prototype.renderId = function renderId() {\n return renderAttr('id', this.srcElement.options.id);\n };\n Node.prototype.createDefinitions = function createDefinitions() {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n };\n Node.prototype.definitionChange = function definitionChange(e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n };\n Node.prototype.updateDefinition = function updateDefinition(type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n };\n Node.prototype.clearDefinitions = function clearDefinitions() {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n };\n Node.prototype.renderDefinitions = function renderDefinitions() {\n return renderAllAttr(this.mapDefinitions());\n };\n Node.prototype.mapDefinitions = function mapDefinitions() {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n };\n Node.prototype.refUrl = function refUrl(id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, '\\\\\\'');\n var base = skipBaseHref ? '' : baseHref;\n return 'url(' + base + '#' + id + ')';\n };\n Node.prototype.baseUrl = function baseUrl$1() {\n return baseUrl();\n };\n return Node;\n }(BaseNode);\n var GradientStopNode = function (Node$$1) {\n function GradientStopNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(GradientStopNode, Node$$1);\n GradientStopNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GradientStopNode.prototype.constructor = GradientStopNode;\n GradientStopNode.fn = GradientStopNode.prototype;\n GradientStopNode.fn.init = GradientStopNode.fn.constructor;\n GradientStopNode.prototype.template = function template() {\n return '';\n };\n GradientStopNode.prototype.renderOffset = function renderOffset() {\n return renderAttr('offset', this.srcElement.offset());\n };\n GradientStopNode.prototype.mapStyle = function mapStyle() {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n };\n GradientStopNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n };\n return GradientStopNode;\n }(Node);\n var GradientNode = function (Node$$1) {\n function GradientNode(srcElement) {\n Node$$1.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n }\n extendStatic(GradientNode, Node$$1);\n GradientNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GradientNode.prototype.constructor = GradientNode;\n GradientNode.fn = GradientNode.prototype;\n GradientNode.fn.init = GradientNode.fn.constructor;\n GradientNode.prototype.loadStops = function loadStops() {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n };\n GradientNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n };\n GradientNode.prototype.renderCoordinates = function renderCoordinates() {\n return renderAllAttr(this.mapCoordinates());\n };\n GradientNode.prototype.mapSpace = function mapSpace() {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n };\n return GradientNode;\n }(Node);\n var LinearGradientNode = function (GradientNode$$1) {\n function LinearGradientNode() {\n GradientNode$$1.apply(this, arguments);\n }\n extendStatic(LinearGradientNode, GradientNode$$1);\n LinearGradientNode.prototype = Object.create(GradientNode$$1 && GradientNode$$1.prototype);\n LinearGradientNode.prototype.constructor = LinearGradientNode;\n LinearGradientNode.fn = LinearGradientNode.prototype;\n LinearGradientNode.fn.init = LinearGradientNode.fn.constructor;\n LinearGradientNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n LinearGradientNode.prototype.mapCoordinates = function mapCoordinates() {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n };\n return LinearGradientNode;\n }(GradientNode);\n var RadialGradientNode = function (GradientNode$$1) {\n function RadialGradientNode() {\n GradientNode$$1.apply(this, arguments);\n }\n extendStatic(RadialGradientNode, GradientNode$$1);\n RadialGradientNode.prototype = Object.create(GradientNode$$1 && GradientNode$$1.prototype);\n RadialGradientNode.prototype.constructor = RadialGradientNode;\n RadialGradientNode.fn = RadialGradientNode.prototype;\n RadialGradientNode.fn.init = RadialGradientNode.fn.constructor;\n RadialGradientNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n RadialGradientNode.prototype.mapCoordinates = function mapCoordinates() {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n };\n return RadialGradientNode;\n }(GradientNode);\n var ClipNode = function (Node$$1) {\n function ClipNode(srcElement) {\n Node$$1.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n }\n extendStatic(ClipNode, Node$$1);\n ClipNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n ClipNode.prototype.constructor = ClipNode;\n ClipNode.fn = ClipNode.prototype;\n ClipNode.fn.init = ClipNode.fn.constructor;\n ClipNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n return ClipNode;\n }(Node);\n var DefinitionNode = function (Node$$1) {\n function DefinitionNode() {\n Node$$1.call(this);\n this.definitionMap = {};\n }\n extendStatic(DefinitionNode, Node$$1);\n DefinitionNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n DefinitionNode.prototype.constructor = DefinitionNode;\n DefinitionNode.fn = DefinitionNode.prototype;\n DefinitionNode.fn.init = DefinitionNode.fn.constructor;\n DefinitionNode.prototype.attachTo = function attachTo(domElement) {\n this.element = domElement;\n };\n DefinitionNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n DefinitionNode.prototype.definitionChange = function definitionChange(e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n };\n DefinitionNode.prototype.createDefinition = function createDefinition(type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n };\n DefinitionNode.prototype.addDefinitions = function addDefinitions(definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n };\n DefinitionNode.prototype.addDefinition = function addDefinition(type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n };\n DefinitionNode.prototype.removeDefinitions = function removeDefinitions(definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n };\n DefinitionNode.prototype.removeDefinition = function removeDefinition(srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n };\n return DefinitionNode;\n }(Node);\n var RootNode = function (Node$$1) {\n function RootNode(options) {\n Node$$1.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n }\n extendStatic(RootNode, Node$$1);\n RootNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n RootNode.prototype.attachTo = function attachTo(domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n };\n RootNode.prototype.clear = function clear() {\n BaseNode.prototype.clear.call(this);\n };\n RootNode.prototype.template = function template() {\n return this.defs.render() + this.renderChildren();\n };\n RootNode.prototype.definitionChange = function definitionChange(e) {\n this.defs.definitionChange(e);\n };\n return RootNode;\n }(Node);\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = function (Node$$1) {\n function PathNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(PathNode, Node$$1);\n PathNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n PathNode.prototype.geometryChange = function geometryChange() {\n this.attr('d', this.renderData());\n this.invalidate();\n };\n PathNode.prototype.optionsChange = function optionsChange(e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node$$1.prototype.optionsChange.call(this, e);\n };\n PathNode.prototype.content = function content() {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n };\n PathNode.prototype.renderData = function renderData() {\n return this.printPath(this.srcElement);\n };\n PathNode.prototype.printPath = function printPath(path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n };\n PathNode.prototype.printPoints = function printPoints() {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n };\n PathNode.prototype.segmentType = function segmentType(segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n };\n PathNode.prototype.mapStroke = function mapStroke(stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n };\n PathNode.prototype.renderStroke = function renderStroke() {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n };\n PathNode.prototype.renderDashType = function renderDashType(stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n };\n PathNode.prototype.renderLinecap = function renderLinecap(stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n };\n PathNode.prototype.mapFill = function mapFill(fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n };\n PathNode.prototype.renderFill = function renderFill() {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n };\n PathNode.prototype.template = function template() {\n return '';\n };\n return PathNode;\n }(Node);\n var ArcNode = function (PathNode$$1) {\n function ArcNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(ArcNode, PathNode$$1);\n ArcNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n ArcNode.prototype.renderData = function renderData() {\n return this.printPath(this.srcElement.toPath());\n };\n return ArcNode;\n }(PathNode);\n var CircleNode = function (PathNode$$1) {\n function CircleNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(CircleNode, PathNode$$1);\n CircleNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n CircleNode.prototype.geometryChange = function geometryChange() {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n };\n CircleNode.prototype.center = function center() {\n return this.srcElement.geometry().center;\n };\n CircleNode.prototype.radius = function radius() {\n return this.srcElement.geometry().radius;\n };\n CircleNode.prototype.template = function template() {\n return '';\n };\n return CircleNode;\n }(PathNode);\n var GroupNode = function (Node$$1) {\n function GroupNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(GroupNode, Node$$1);\n GroupNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n GroupNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n GroupNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node$$1.prototype.optionsChange.call(this, e);\n };\n return GroupNode;\n }(Node);\n var ImageNode = function (PathNode$$1) {\n function ImageNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(ImageNode, PathNode$$1);\n ImageNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n ImageNode.prototype.geometryChange = function geometryChange() {\n this.allAttr(this.mapPosition());\n this.invalidate();\n };\n ImageNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n ImageNode.prototype.mapPosition = function mapPosition() {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n };\n ImageNode.prototype.renderPosition = function renderPosition() {\n return renderAllAttr(this.mapPosition());\n };\n ImageNode.prototype.mapSource = function mapSource(encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n };\n ImageNode.prototype.renderSource = function renderSource() {\n return renderAllAttr(this.mapSource(true));\n };\n ImageNode.prototype.template = function template() {\n return '' + '';\n };\n return ImageNode;\n }(PathNode);\n var MultiPathNode = function (PathNode$$1) {\n function MultiPathNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(MultiPathNode, PathNode$$1);\n MultiPathNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n MultiPathNode.prototype.renderData = function renderData() {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n };\n return MultiPathNode;\n }(PathNode);\n var RectNode = function (PathNode$$1) {\n function RectNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(RectNode, PathNode$$1);\n RectNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n RectNode.prototype.geometryChange = function geometryChange() {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n };\n RectNode.prototype.size = function size() {\n return this.srcElement.geometry().size;\n };\n RectNode.prototype.origin = function origin() {\n return this.srcElement.geometry().origin;\n };\n RectNode.prototype.template = function template() {\n return '';\n };\n return RectNode;\n }(PathNode);\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = function (PathNode$$1) {\n function TextNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(TextNode, PathNode$$1);\n TextNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n TextNode.prototype.geometryChange = function geometryChange() {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n };\n TextNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode$$1.prototype.content.call(this, this.srcElement.content());\n }\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n TextNode.prototype.mapStyle = function mapStyle(encode) {\n var style = PathNode$$1.prototype.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ], [\n 'white-space',\n 'pre'\n ]);\n return style;\n };\n TextNode.prototype.pos = function pos() {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n };\n TextNode.prototype.renderContent = function renderContent() {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n };\n TextNode.prototype.renderTextAnchor = function renderTextAnchor() {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n };\n TextNode.prototype.template = function template() {\n return '' + this.renderContent() + '';\n };\n return TextNode;\n }(PathNode);\n NODE_MAP.Arc = ArcNode;\n NODE_MAP.Circle = CircleNode;\n NODE_MAP.Group = GroupNode;\n NODE_MAP.Image = ImageNode;\n NODE_MAP.MultiPath = MultiPathNode;\n NODE_MAP.Path = PathNode;\n NODE_MAP.Rect = RectNode;\n NODE_MAP.Text = TextNode;\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$3 = function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n }\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var prototypeAccessors = { type: {} };\n prototypeAccessors.type.get = function () {\n return 'svg';\n };\n Surface.prototype.destroy = function destroy() {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n BaseSurface.prototype.destroy.call(this);\n };\n Surface.prototype.translate = function translate(offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n };\n Surface.prototype.draw = function draw(element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([element]);\n };\n Surface.prototype.clear = function clear() {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n };\n Surface.prototype.svg = function svg() {\n return '' + this._template();\n };\n Surface.prototype.exportVisual = function exportVisual() {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform$1().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n };\n Surface.prototype._resize = function _resize() {\n if (this._offset) {\n this.translate(this._offset);\n }\n };\n Surface.prototype._template = function _template() {\n return '' + this._root.render() + '';\n };\n Object.defineProperties(Surface.prototype, prototypeAccessors);\n return Surface;\n }(Surface$2);\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = function (BaseNode$$1) {\n function Node(srcElement) {\n BaseNode$$1.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create(BaseNode$$1 && BaseNode$$1.prototype);\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n Node.prototype.initClip = function initClip() {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n };\n Node.prototype.clear = function clear() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode$$1.prototype.clear.call(this);\n };\n Node.prototype.clearClip = function clearClip() {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n };\n Node.prototype.setClip = function setClip(ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n };\n Node.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n Node.prototype.setTransform = function setTransform(ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n };\n Node.prototype.loadElements = function loadElements(elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n };\n Node.prototype.load = function load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n };\n Node.prototype.setOpacity = function setOpacity(ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n };\n Node.prototype.globalAlpha = function globalAlpha(ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n };\n Node.prototype.visible = function visible() {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n };\n return Node;\n }(BaseNode);\n var GroupNode$2 = function (superclass) {\n function GroupNode() {\n superclass.apply(this, arguments);\n }\n extendStatic(GroupNode, superclass);\n GroupNode.prototype = Object.create(superclass && superclass.prototype);\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n GroupNode.prototype.renderTo = function renderTo(ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n };\n return GroupNode;\n }(traversable(Node$2, 'childNodes'));\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = function (superclass) {\n function RootNode(canvas, size) {\n superclass.call(this);\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n extendStatic(RootNode, superclass);\n RootNode.prototype = Object.create(superclass && superclass.prototype);\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n RootNode.prototype.destroy = function destroy() {\n superclass.prototype.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n };\n RootNode.prototype.load = function load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n };\n RootNode.prototype._rescale = function _rescale(scale) {\n var ref = this;\n var canvas = ref.canvas;\n var size = ref.size;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n };\n RootNode.prototype._devicePixelRatio = function _devicePixelRatio() {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n return 1;\n };\n RootNode.prototype._invalidate = function _invalidate(options) {\n if (!this.ctx) {\n return;\n }\n var fixedScale = options && options.fixedScale;\n var scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n };\n return RootNode;\n }(traversable(GroupNode$2, 'childNodes'));\n var QuadRoot = function (Class$$1) {\n function QuadRoot() {\n Class$$1.call(this);\n this.shapes = [];\n }\n extendStatic(QuadRoot, Class$$1);\n QuadRoot.prototype = Object.create(Class$$1 && Class$$1.prototype);\n QuadRoot.prototype.constructor = QuadRoot;\n QuadRoot.fn = QuadRoot.prototype;\n QuadRoot.fn.init = QuadRoot.fn.constructor;\n QuadRoot.prototype._add = function _add(shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n };\n QuadRoot.prototype.pointShapes = function pointShapes(point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n };\n QuadRoot.prototype.insert = function insert(shape, bbox) {\n this._add(shape, bbox);\n };\n QuadRoot.prototype.remove = function remove(shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n };\n return QuadRoot;\n }(Class);\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform$1\n };\n var QuadNode = function (QuadRoot$$1) {\n function QuadNode(rect) {\n QuadRoot$$1.call(this);\n this.children = [];\n this.rect = rect;\n }\n extendStatic(QuadNode, QuadRoot$$1);\n QuadNode.prototype = Object.create(QuadRoot$$1 && QuadRoot$$1.prototype);\n QuadNode.prototype.constructor = QuadNode;\n QuadNode.fn = QuadNode.prototype;\n QuadNode.fn.init = QuadNode.fn.constructor;\n QuadNode.prototype.inBounds = function inBounds(rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n };\n QuadNode.prototype.pointShapes = function pointShapes(point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot$$1.prototype.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append$1$1(result, children[idx].pointShapes(point));\n }\n return result;\n };\n QuadNode.prototype.insert = function insert(shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n };\n QuadNode.prototype._initChildren = function _initChildren() {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n };\n return QuadNode;\n }(QuadRoot);\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = function (Class$$1) {\n function ShapesQuadTree() {\n Class$$1.call(this);\n this.initRoots();\n }\n extendStatic(ShapesQuadTree, Class$$1);\n ShapesQuadTree.prototype = Object.create(Class$$1 && Class$$1.prototype);\n ShapesQuadTree.prototype.constructor = ShapesQuadTree;\n ShapesQuadTree.fn = ShapesQuadTree.prototype;\n ShapesQuadTree.fn.init = ShapesQuadTree.fn.constructor;\n ShapesQuadTree.prototype.initRoots = function initRoots() {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n };\n ShapesQuadTree.prototype.clear = function clear() {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n };\n ShapesQuadTree.prototype.pointShape = function pointShape(point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n };\n ShapesQuadTree.prototype.assignZindex = function assignZindex(elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n };\n ShapesQuadTree.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n };\n ShapesQuadTree.prototype.geometryChange = function geometryChange(e) {\n this.bboxChange(e.element);\n };\n ShapesQuadTree.prototype.bboxChange = function bboxChange(element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n };\n ShapesQuadTree.prototype.add = function add(elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append$1$1(this.rootElements, elementsArray);\n this._insert(elementsArray);\n };\n ShapesQuadTree.prototype.childrenChange = function childrenChange(e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n };\n ShapesQuadTree.prototype._insert = function _insert(elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append$1$1(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n };\n ShapesQuadTree.prototype._insertShape = function _insertShape(shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n };\n ShapesQuadTree.prototype.remove = function remove(element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n };\n ShapesQuadTree.prototype.inRoot = function inRoot(sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n };\n ShapesQuadTree.prototype.getSectors = function getSectors(rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n };\n return ShapesQuadTree;\n }(Class);\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = function SurfaceCursor(surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n };\n SurfaceCursor.prototype.clear = function clear() {\n this._resetCursor();\n };\n SurfaceCursor.prototype.destroy = function destroy() {\n this._resetCursor();\n delete this.element;\n };\n SurfaceCursor.prototype._mouseenter = function _mouseenter(e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n };\n SurfaceCursor.prototype._mouseleave = function _mouseleave() {\n this._resetCursor();\n };\n SurfaceCursor.prototype._shapeCursor = function _shapeCursor(e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n };\n SurfaceCursor.prototype._getCursor = function _getCursor() {\n if (this.element) {\n return this.element.style.cursor;\n }\n };\n SurfaceCursor.prototype._setCursor = function _setCursor(cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n };\n SurfaceCursor.prototype._resetCursor = function _resetCursor() {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n };\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = function (Node) {\n function PathNode() {\n Node.apply(this, arguments);\n }\n extendStatic(PathNode, Node);\n PathNode.prototype = Object.create(Node && Node.prototype);\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n PathNode.prototype.renderTo = function renderTo(ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n };\n PathNode.prototype.setFill = function setFill(ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n };\n PathNode.prototype.setGradientFill = function setGradientFill(ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n };\n PathNode.prototype.setStroke = function setStroke(ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n };\n PathNode.prototype.dashType = function dashType() {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n };\n PathNode.prototype.setLineDash = function setLineDash(ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n };\n PathNode.prototype.setLineCap = function setLineCap(ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n };\n PathNode.prototype.setLineJoin = function setLineJoin(ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n };\n PathNode.prototype.renderPoints = function renderPoints(ctx, path) {\n renderPath(ctx, path);\n };\n return PathNode;\n }(Node$2);\n var ArcNode$2 = function (PathNode) {\n function ArcNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(ArcNode, PathNode);\n ArcNode.prototype = Object.create(PathNode && PathNode.prototype);\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n ArcNode.prototype.renderPoints = function renderPoints(ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n };\n return ArcNode;\n }(PathNode$2);\n var CircleNode$2 = function (PathNode) {\n function CircleNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(CircleNode, PathNode);\n CircleNode.prototype = Object.create(PathNode && PathNode.prototype);\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n CircleNode.prototype.renderPoints = function renderPoints(ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n };\n return CircleNode;\n }(PathNode$2);\n var ImageNode$2 = function (PathNode) {\n function ImageNode(srcElement, cors) {\n PathNode.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n }\n extendStatic(ImageNode, PathNode);\n ImageNode.prototype = Object.create(PathNode && PathNode.prototype);\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n ImageNode.prototype.renderTo = function renderTo(ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n };\n ImageNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode.prototype.optionsChange.call(this, e);\n }\n };\n ImageNode.prototype.onLoad = function onLoad() {\n this.loading.resolve();\n this.invalidate();\n };\n ImageNode.prototype.onError = function onError() {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n };\n ImageNode.prototype.drawImage = function drawImage(ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n };\n return ImageNode;\n }(PathNode$2);\n var MultiPathNode$2 = function (PathNode) {\n function MultiPathNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(MultiPathNode, PathNode);\n MultiPathNode.prototype = Object.create(PathNode && PathNode.prototype);\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n MultiPathNode.prototype.renderPoints = function renderPoints(ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n };\n return MultiPathNode;\n }(PathNode$2);\n var RectNode$2 = function (PathNode) {\n function RectNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(RectNode, PathNode);\n RectNode.prototype = Object.create(PathNode && PathNode.prototype);\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n RectNode.prototype.renderPoints = function renderPoints(ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n };\n return RectNode;\n }(PathNode$2);\n var TextNode$2 = function (PathNode) {\n function TextNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(TextNode, PathNode);\n TextNode.prototype = Object.create(PathNode && PathNode.prototype);\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n TextNode.prototype.renderTo = function renderTo(ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n };\n return TextNode;\n }(PathNode$2);\n NODE_MAP$2.Arc = ArcNode$2;\n NODE_MAP$2.Circle = CircleNode$2;\n NODE_MAP$2.Group = GroupNode$2;\n NODE_MAP$2.Image = ImageNode$2;\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n NODE_MAP$2.Path = PathNode$2;\n NODE_MAP$2.Rect = RectNode$2;\n NODE_MAP$2.Text = TextNode$2;\n var Surface$4 = function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas, size);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var prototypeAccessors = { type: {} };\n prototypeAccessors.type.get = function () {\n return 'canvas';\n };\n Surface.prototype.destroy = function destroy() {\n BaseSurface.prototype.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n };\n Surface.prototype.draw = function draw(element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n };\n Surface.prototype.clear = function clear() {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n };\n Surface.prototype.eventTarget = function eventTarget(e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n };\n Surface.prototype.image = function image() {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate({ fixedScale: true });\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n };\n Surface.prototype.suspendTracking = function suspendTracking() {\n BaseSurface.prototype.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n };\n Surface.prototype.resumeTracking = function resumeTracking() {\n BaseSurface.prototype.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n };\n Surface.prototype._resize = function _resize() {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.size = this._size;\n this._root.invalidate();\n };\n Surface.prototype._template = function _template() {\n return '';\n };\n Surface.prototype._enableTracking = function _enableTracking() {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n BaseSurface.prototype._enableTracking.call(this);\n };\n Surface.prototype._trackMouse = function _trackMouse(e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n };\n Object.defineProperties(Surface.prototype, prototypeAccessors);\n return Surface;\n }(Surface$2);\n var instance$2;\n var support$1;\n var hasDocument = function () {\n return typeof document !== 'undefined';\n };\n var supportsCanvas = function () {\n return hasDocument() && document.createElement('canvas').getContext;\n };\n var supportsSVG = function () {\n return hasDocument() && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n };\n var SurfaceFactory = function (Class$$1) {\n function SurfaceFactory() {\n Class$$1.call(this);\n this._items = [\n {\n name: 'svg',\n type: Surface$3\n },\n {\n name: 'canvas',\n type: Surface$4\n }\n ];\n }\n extendStatic(SurfaceFactory, Class$$1);\n SurfaceFactory.prototype = Object.create(Class$$1 && Class$$1.prototype);\n SurfaceFactory.prototype.constructor = SurfaceFactory;\n SurfaceFactory.fn = SurfaceFactory.prototype;\n SurfaceFactory.fn.init = SurfaceFactory.fn.constructor;\n var staticAccessors = {\n support: {},\n current: {}\n };\n staticAccessors.support.get = function () {\n if (!support$1) {\n support$1 = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n return support$1;\n };\n staticAccessors.current.get = function () {\n if (!instance$2) {\n instance$2 = new SurfaceFactory();\n }\n return instance$2;\n };\n SurfaceFactory.prototype.create = function create(element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n };\n Object.defineProperties(SurfaceFactory, staticAccessors);\n return SurfaceFactory;\n }(Class);\n var Surface = function (BaseSurface) {\n function Surface() {\n BaseSurface.apply(this, arguments);\n }\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var staticAccessors = { support: {} };\n staticAccessors.support.get = function () {\n return SurfaceFactory.support;\n };\n Surface.create = function create(element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Object.defineProperties(Surface, staticAccessors);\n return Surface;\n }(Surface$2);\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg$1 = {\n Surface: Surface$3,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var canvas = {\n Surface: Surface$4,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$4(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser || {};\n function slice$1$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n var TextRect = function (Text$$1) {\n function TextRect(str, rect, options) {\n Text$$1.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n extendStatic(TextRect, Text$$1);\n TextRect.prototype = Object.create(Text$$1 && Text$$1.prototype);\n TextRect.prototype.constructor = TextRect;\n TextRect.fn = TextRect.prototype;\n TextRect.fn.init = TextRect.fn.constructor;\n TextRect.prototype.rect = function rect() {\n return this._pdfRect;\n };\n TextRect.prototype.rawBBox = function rawBBox() {\n return this._pdfRect;\n };\n return TextRect;\n }(Text);\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n clone.removeAttribute('id');\n clone.removeAttribute('name');\n if (!/^textarea$/i.test(el.tagName)) {\n clone.value = el.value;\n }\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = function dive(node) {\n var clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (var i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n }(el);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\n throw new Error('window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform$1(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template) {\n if (template != null) {\n if (typeof template == 'string') {\n template = kendo.template(template.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template == 'function') {\n return function (data) {\n var el = template(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template) {\n pages.forEach(function (page, i) {\n var el = template({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n cacheImages(pages, function () {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n });\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle$1(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle$1(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid.k-widget');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid.k-widget');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n function drawText(element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle$1(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n }\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle == '0') {\n angle = '0deg';\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle$1(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1$1(element.children).forEach(dive);\n }\n }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle$1(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (microsoft) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (microsoft) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle$1(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform$1(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle$1(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle$1(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != 'normal' && content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n if (fake.length > 0) {\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n } else {\n _renderElement(element, group);\n }\n }\n function _renderElement(element, group) {\n var style = getComputedStyle$1(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow;\n if (textOverflow == 'ellipsis') {\n saveTextOverflow = element.style.textOverflow;\n element.style.textOverflow = 'clip';\n }\n }\n if (browser.msie && browser.version < 10) {\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n var innerbox = innerBox(element.getBoundingClientRect(), 'border-*-width', element);\n (function () {\n var clip = getPropertyValue(style, 'clip');\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == 'auto' ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == 'auto' ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == 'auto' ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == 'auto' ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path().moveTo(left, top).lineTo(right, top).lineTo(right, bottom).lineTo(left, bottom).close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n }());\n var boxes, i, cells;\n var display = getPropertyValue(style, 'display');\n if (display == 'table-row') {\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n boxes = [element.getBoundingClientRect()];\n }\n }\n boxes = adjustBoxes(boxes);\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n if (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n var r = document.createRange();\n r.selectNodeContents(element);\n slice$1$1(r.getClientRects()).forEach(function (box) {\n var g = new Group();\n g._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n group.append(g);\n });\n }\n }\n if (boxes.length > 0 && display == 'list-item' && !element.getAttribute('kendo-no-bullet')) {\n drawBullet(boxes[0]);\n }\n (function () {\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, 'padding');\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-x'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-y'))) {\n clipit();\n }\n }());\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n if (microsoft && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\n }\n return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, 'border-collapse') == 'collapse') {\n var tableBorderLeft = getBorder(table.style, 'left').width;\n var tableBorderTop = getBorder(table.style, 'top').width;\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes;\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1$1(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform$1(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform$1(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n var visual;\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform$1().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle$1(a);\n var sb = getComputedStyle$1(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle$1(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle$1(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle$1(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle$1(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle$1(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textTransform = getPropertyValue(style, 'text-transform');\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (hasDecoration) {\n range.selectNode(node);\n slice$1$1(range.getClientRects()).forEach(decorate);\n }\n return;\n function actuallyGetRangeBoundingRect(range) {\n if (microsoft || browser.chrome) {\n var rectangles = range.getClientRects(), box = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n }, done = false;\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n switch (textTransform) {\n case 'uppercase':\n str = str.toUpperCase();\n break;\n case 'lowercase':\n str = str.toLowerCase();\n break;\n case 'capitalize':\n str = str.replace(/(?:^|\\s)\\S/g, function (l) {\n return l.toUpperCase();\n });\n break;\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle$1(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform$1(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg$1,\n canvas: canvas,\n util: util,\n HasObservers: HasObservers,\n PathParser: PathParser,\n parsePath: parsePath,\n BaseNode: BaseNode,\n OptionsStore: OptionsStore,\n Surface: Surface,\n SurfaceFactory: SurfaceFactory,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM,\n drawText: drawText,\n getFontFaces: getFontFaces\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
' + '
' + '
';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n this.element.on('mouseleave' + NS, proxy(this._tooltipLeave, this));\n },\n getPopup: function () {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n return this.popup;\n },\n destroy: function () {\n var popup = this.popup;\n this.surface.unbind('click', this._showHandler);\n this.surface.unbind('mouseenter', this._showHandler);\n this.surface.unbind('mouseleave', this._mouseleaveHandler);\n this.surface.unbind('mousemove', this._mousemoveHandler);\n this.surface.element.off('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.off('click' + NS);\n this.element.off('mouseleave' + NS);\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n clearTimeout(this._timeout);\n delete this.element;\n delete this.content;\n delete this.surface;\n },\n _tooltipOptions: function (options) {\n options = options || {};\n return {\n position: options.position,\n showOn: options.showOn,\n offset: options.offset,\n autoHide: options.autoHide,\n width: options.width,\n height: options.height,\n content: options.content,\n shared: options.shared,\n hideDelay: options.hideDelay,\n showAfter: options.showAfter\n };\n },\n _tooltipShape: function (shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\n _updateContent: function (target, shape, options) {\n var content = options.content;\n if (kendo.isFunction(content)) {\n content = content({\n element: shape,\n target: target\n });\n }\n if (content) {\n this.content.html(content);\n return true;\n }\n },\n _position: function (shape, options, elementSize, event) {\n var position = options.position;\n var tooltipOffset = options.offset || 0;\n var surface = this.surface;\n var offset = surface._instance._elementOffset();\n var size = surface.getSize();\n var surfaceOffset = surface._instance._offset;\n var bbox = shape.bbox();\n var width = elementSize.width;\n var height = elementSize.height;\n var left = 0, top = 0;\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\n if (position == 'cursor' && event) {\n var coord = eventCoordinates(event);\n left = coord.x - width / 2;\n top = coord.y - height - tooltipOffset;\n } else if (position == 'left') {\n left = bbox.origin.x - width - tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'right') {\n left = bbox.bottomRight().x + tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'bottom') {\n left = bbox.center().x - width / 2;\n top = bbox.bottomRight().y + tooltipOffset;\n } else {\n left = bbox.center().x - width / 2;\n top = bbox.origin.y - height - tooltipOffset;\n }\n return {\n left: limitValue(left, offset.left, offset.left + size.width),\n top: limitValue(top, offset.top, offset.top + size.height)\n };\n },\n show: function (shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n hide: function () {\n var popup = this.popup;\n var current = this._current;\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current && !this.surface.trigger('tooltipClose', {\n element: current.shape,\n target: current.target,\n popup: popup\n })) {\n popup.close();\n }\n },\n _hideClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _show: function (target, shape, options, event, delay) {\n var current = this._current;\n clearTimeout(this._timeout);\n if (current && (current.shape === shape && options.shared || current.target === target)) {\n return;\n }\n clearTimeout(this._showTimeout);\n var popup = this.getPopup();\n if (!this.surface.trigger('tooltipOpen', {\n element: shape,\n target: target,\n popup: popup\n }) && this._updateContent(target, shape, options)) {\n this._autoHide(options);\n var elementSize = this._measure(options);\n if (popup.visible()) {\n popup.close(true);\n }\n this._current = {\n options: options,\n elementSize: elementSize,\n shape: shape,\n target: target,\n position: this._position(options.shared ? shape : target, options, elementSize, event)\n };\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n _openPopup: function () {\n var current = this._current;\n var position = current.position;\n this.getPopup().open(position.left, position.top);\n },\n _autoHide: function (options) {\n if (options.autoHide && this._closeButton) {\n this.element.removeClass('k-tooltip-closable');\n this._closeButton.remove();\n delete this._closeButton;\n }\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass('k-tooltip-closable');\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).appendTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n },\n _tooltipLeave: function () {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n });\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface', [\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip'\n ], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var draw = kendo.drawing;\n var DrawingSurface = draw.Surface;\n var Widget = kendo.ui.Widget;\n var deepExtend = kendo.deepExtend;\n var proxy = $.proxy;\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n var Surface = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, {});\n this.options = deepExtend({}, this.options, options);\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n this._triggerInstanceHandler = proxy(this._triggerInstanceEvent, this);\n this._bindHandler('click');\n this._bindHandler('mouseenter');\n this._bindHandler('mouseleave');\n this._bindHandler('mousemove');\n this._enableTracking();\n },\n options: {\n name: 'Surface',\n tooltip: {}\n },\n events: [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ],\n _triggerInstanceEvent: function (e) {\n this.trigger(e.type, e);\n },\n _bindHandler: function (event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n draw: function (element) {\n this._instance.draw(element);\n },\n clear: function () {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n destroy: function () {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n Widget.fn.destroy.call(this);\n },\n exportVisual: function () {\n return this._instance.exportVisual();\n },\n eventTarget: function (e) {\n return this._instance.eventTarget(e);\n },\n showTooltip: function (shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n hideTooltip: function () {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n suspendTracking: function () {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n resumeTracking: function () {\n this._instance.resumeTracking();\n },\n getSize: function () {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n setSize: function (size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n _resize: function () {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n _enableTracking: function () {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n kendo.ui.plugin(Surface);\n Surface.create = function (element, options) {\n return new Surface(element, options);\n };\n kendo.drawing.Surface = Surface;\n function translate(offset) {\n this._instance.translate(offset);\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/html', ['drawing/kendo-drawing'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n drawing.drawDOM = function (element, options) {\n return drawDOM($(element)[0], options);\n };\n drawing.drawDOM.drawText = drawing.drawText;\n drawing.drawDOM.getFontFaces = drawing.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}