{"version":3,"sources":["kendo.drawing.js"],"names":["f","define","$","createPromise","Deferred","promiseAll","promises","when","apply","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","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","setAccessor","geometryChange","getAccessor","defineAccessors","fn","fields","capitalized","toUpperCase","substring","toMatrix","transformation","matrix","ellipseExtremeAngles","center","rx","ry","extremeX","extremeY","atan2","d","close","tolerance","PRECISION","abs","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","s","t","Point","transform","Transformation","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","pointAccessor","fieldName","_observerField","create","definePointAccessors","names","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","arrayLimits","arr","MAX_NUM","MIN_NUM","parseMatrix","matrixString","members","match","matrixRegexp","Matrix","unit","Function","prototype","bind","concat","transformMatrix","transform$$1","elementScale","parent","parentMatrix","parentElement","multiplyCopy","geometryAccessor","defineGeometryAccessors","elementsBoundingBox","elements","applyTransform","boundingBox","elementBoundingBox","visible","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","toLineParamaters","isVertical","insertPosition","splice","reflectionPoint","scaleCopy","translate","quadraticToCubicControlPoints","position","scaledPoint","clone","scale","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","number","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","alignToScreen","ctm","getScreenCTM","decodeEntities","ENTITY_REGEX","test","_element","lastIndex","innerHTML","innerText","exportGroup","group","exportRoot","svg","root","RootNode","skipBaseHref","rootGroup","getOrigin","Group","children","load","SVG_NS","render","destroy","renderPath","ctx","path","segment","anchor","prevSeg","prevOut","segments","moveTo","bezierCurveTo","lineTo","closed","closePath","zIndexComparer","_zIndex","addGradientStops","gradient","stops","stop","parseColor","opacity","addColorStop","offset","toCssRgba","exportImage","surfaceOptions","container","surface","promise","defaults","cors","getSize","display","Surface$3","suspendTracking","draw","image","then","exportSVG","raw","resolve","slice$1","thing","call","addClass","el","cls","classList","className","removeClass","remove","reduce","word","setCSS","Object","keys","forEach","closest","selector","matches","getXY","drawDOM","doOne","pos","setTransform","nodeInfo","_clipbox","_matrix","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","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","Error","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","progress","canceled","next","cancel","doStylesheet","ss","rules","cssRules","ex","addRules","findFonts","rule","font","src","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","hasOwnProperty","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","pushNodeInfo","decoration","toLowerCase","createsStackingContext","popNodeInfo","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","exec","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","clip","addArcToPath","Arc","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","_renderElement","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$1","Circle","renderFormField","option","whiteSpace","multiple","floats","positioned","floating","toDataURL","renderText","actuallyGetRangeBoundingRect","rectangles","done","chrome","Infinity","prevLineBottom","doChunk","found","cc","code","indent","origStart","substr","search","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","drawText","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","ObserversMixin","Size","PI_DIV_2","MAX_INTERVAL","pow$1","Segment","geometry","toString","OptionsStore","Element$1","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","pop","unshift","ElementsArray","GeometryElementsArray","MultiPath","ShapeMap","SEGMENT_REGEX","MOVE","CLOSE","PathParser","DEFAULT_STROKE$1","Arc$2","DEFAULT_FONT","DEFAULT_FILL","Text","Traversable","forEachReverse","Layout","Rect$2","StopsArray","GradientStop","Gradient","RadialGradient","easingFunctions","AnimationFactory","now","Animation","SurfaceFactory","Surface","BaseNode","NODE_MAP","NONE","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","TRANSFORM","DefinitionMap","Node","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","RTL","Surface$1","GroupNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","ArcNode","CircleNode","RectNode","ImageNode","TextNode","MultiPathNode","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","inBrowser","proto","method","this$1","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","h","det","equals","other","toArray","scaleX","scaleY","IDENTITY","originPoint","ZERO","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","radius","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","_optionsChange","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","ceil","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","distance","angleRad","pointRadius","startPoint","arcParameters","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","prefix","member","_wrap","part","_set","composite","parentObj","_clear","wrapped","_initOptions","id","parentTransform","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","_splice","_change","_add","_remove","howMany","_clearObserver","_setObserver","paths","arc","arcTo","isRelative","v","lastControlIn","previousCommand","cubicControlPoints","lastSegment","parse","multiPath","params","command","lineJoin","_addArcSegments","previous","pathWidth","segmentBox","fromArc","toPath","metrics","_rect","childrenField","traverse","child","childrenChange","action","items","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","_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","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","_items","register","Date","getTime","setup","step","play","easing","finish","duration","delay","abort","loop","wallTime","easingPosition","_stopped","animationFrame","order","preferred","logToConsole","navigator","userAgent","Observable","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","unbind","eventTarget","domNode","_kendoNode","srcElement","currentSize","_resize","resize","force","_suspendedTracking","resumeTracking","originalEvent","_elementOffset","_surfacePoint","coord","inverseTransform","childNodes","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","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","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","createDefinition","item","addDefinition","mapItem","removeDefinition","defs","rtl","direction","_template","_rootElement","click","mouseover","mouseout","mousemove","viewBox","_offset","implementation","hasFeature","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","mapPosition","mapSource","renderPosition","encode","htmlEncode","renderSource","setY","renderContent","renderTextAnchor","initClip","clearClip","setClip","beginPath","loadElements","setOpacity","globalAlpha","opactity","renderTo","save","restore","getContext","invalidateHandler","_invalidate","throttle","_rescale","_devicePixelRatio","devicePixelRatio","fixedScale","clearRect","shapes","_quadNode","pointShapes","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","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","undefined","resolveDataURL","rootElement","loadingStates","loading","currentShape","_currentShape","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","state","drawImage","fillText","strokeText","_pdfRect","Element","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 kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\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 (!text) {\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 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 ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (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 trigger: function (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 optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(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 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 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 Matrix = Class.extend({\n init: function (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 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 multiplyCopy: function (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 invert: function () {\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 clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (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 round: function (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 toArray: function (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 toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (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 (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (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 scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (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 transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (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 round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (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 toString: function (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 });\n Point.create = function (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 () {\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 () {\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 () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (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 });\n Size.create = function (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 if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (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 transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (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 expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (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 _isOnPath: function (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 });\n Rect.fromPoints = function () {\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 (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (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 ObserversMixin.extend(Rect.prototype);\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 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (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 _pointAt: function (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 containsPoint: function (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 _isOnPath: function (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 });\n defineAccessors(Circle.prototype, ['radius']);\n ObserversMixin.extend(Circle.prototype);\n var PRECISION = 10;\n function close(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(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 Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (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 rotate: function (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 multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(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 MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\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 clone: function () {\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 setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (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 curvePoints: function () {\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().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 bbox: function (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 _arcInterval: function () {\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 _intervalCurvePoints: function (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 _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (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 _isOnPath: function (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 });\n Arc.fromPoints = function (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 defineAccessors(Arc.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc.prototype);\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 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 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().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 = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (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 equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\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(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 var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (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 _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (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 _curveExtremesFor: function (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 _curveExtremes: function (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 _intersectionsTo: function (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 _isOnCurveTo: function (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().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 _isOnLineTo: function (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().rotate(-angle, p1)));\n },\n _isOnPathTo: function (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 });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\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 geometry = {\n Circle: Circle,\n Arc: Arc,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\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$$1 = getComputedStyle(element).transform;\n if (transform$$1 === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform$$1);\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,\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 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 = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\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 get: function (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 set: function (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 _set: function (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 _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.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 });\n ObserversMixin.extend(OptionsStore.prototype);\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\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(parentMatrix);\n }\n },\n currentTransform: function (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(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (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 opacity: function (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 clippedBBox: function (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 containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (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 stroke: function (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 };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (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 geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\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 DEFAULT_STROKE = '#000';\n var Circle$1 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle$1.prototype.nodeType = 'Circle';\n Paintable.extend(Circle$1.prototype);\n Measurable.extend(Circle$1.prototype);\n defineGeometryAccessors(Circle$1.prototype, ['geometry']);\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 = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (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 push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (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 shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (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 _splice: function (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 _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\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 MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.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 moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (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 arcTo: function (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 close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (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 _isOnPath: function (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 _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\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 var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\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 multiPath.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](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.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 multiPath;\n }\n });\n PathParser.current = new PathParser();\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.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 moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (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 curveTo: function (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 arc: function (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(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 arcTo: function (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.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (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 close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (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 _isOnPath: function (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 _bbox: function (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 });\n Path.fromRect = function (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 (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 (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 Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var DEFAULT_STROKE$1 = '#000';\n var Arc$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\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 _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc$2.prototype.nodeType = 'Arc';\n Paintable.extend(Arc$2.prototype);\n Measurable.extend(Arc$2.prototype);\n defineGeometryAccessors(Arc$2.prototype, ['geometry']);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.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 content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\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 bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (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 }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (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 removeAt: function (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 clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (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 _reparent: function (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 });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\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 = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\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 reflow: function () {\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$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\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 _addToGroup: function (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 _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\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$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\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 GradientStop = Class.extend({\n init: function (offset, color, opacity) {\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 });\n GradientStop.create = function (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 defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\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 userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (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 addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.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 radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['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 AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (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 });\n AnimationFactory.current = new AnimationFactory();\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\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 abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (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 });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.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 draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n },\n eventTarget: function (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 exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (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 size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (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 _elementOffset: function () {\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 _surfacePoint: function (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 });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\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 load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (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 removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (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 });\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 = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (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 root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (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 setElement: function (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 clear: function () {\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 removeSelf: function () {\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.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\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 optionsChange: function (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.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (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 css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (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 removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (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 renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\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 renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\n },\n createDefinitions: function () {\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 definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (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 clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\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 refUrl: function (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 baseUrl: function () {\n return baseUrl();\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\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 optionsChange: function (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 });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\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 optionsChange: function (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 renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\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 });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\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 });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (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 createDefinition: function (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 addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (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 removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (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 });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\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$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.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 destroy: function () {\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 Surface.fn.destroy.call(this);\n },\n translate: function (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 draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\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().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\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 = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (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.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (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 printPoints: function () {\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 segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (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 renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (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 renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (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 renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\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 center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\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 size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\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 renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (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 renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\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 = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.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 pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\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 });\n NODE_MAP.MultiPath = MultiPathNode;\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().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 = {\n Surface: Surface$1,\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 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 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (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 loadElements: function (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 load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (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 });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas, size) {\n GroupNode$2.fn.init.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 destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _rescale: function (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 _devicePixelRatio: function () {\n if (window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n return 1;\n },\n _invalidate: function (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 });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (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 insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (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 });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (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 pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (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 _initChildren: function () {\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 });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\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 pointShape: function (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 assignZindex: function (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 optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (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 add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (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 _insert: function (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(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (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 remove: function (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 inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (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 });\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 = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (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 _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (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 _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.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 destroy: function () {\n Surface.fn.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 draw: function (element) {\n Surface.fn.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 clear: function () {\n Surface.fn.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 eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\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 suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.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 _resize: function () {\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 _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (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 });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\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 = Node$2.extend({\n renderTo: function (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 setFill: function (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 setGradientFill: function (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 setStroke: function (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 dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (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 setLineCap: function (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 setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (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 });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (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 });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.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 renderTo: function (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 optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (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 });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (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 });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\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().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$3(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(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 = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\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(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(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(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$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(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$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = 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(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$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$$1) {\n pages.forEach(function (page, i) {\n var el = template$$1({\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 drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (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(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(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([\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(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(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(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(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().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$1(new Circle([\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$1(new Circle([\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(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(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,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle$1,\n Arc: Arc$2,\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 };\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 = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.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}));"]}