{"version":3,"file":"kendo.drawing.min.js","names":["factory","define","amd","$","window","kendo","jQuery","drawing","util","deepExtend","createPromise","Deferred","promiseAll","promises","when","apply","extendStatic","dest","src","__proto__","member","hasOwnProperty","LRUCache","Class","extend","init","size","this","_size","_length","_map","put","key","value","map","entry","_head","_tail","newer","older","get","REPLACE_REGEX","normalizeText","text","String","replace","objectKey","object","parts","push","sort","join","hashKey","str","hash","i","length","charCodeAt","defaultMeasureBox","DEFAULT_OPTIONS","baselineMarkerSize","document","createElement","style","cssText","TextMetrics","options","_cache","measure","width","height","baseline","cacheKey","cachedResult","measureBox","box","baselineMarker","_baselineMarker","cloneNode","textStr","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","current","measureText","kendoDrawingUtil","kendoUtil","supportBrowser","support","browser","htmlEncode","HasObservers","Class$$1","arguments","prototype","Object","create","constructor","fn","observers","_observers","addObserver","element","removeObserver","index","indexOf","splice","trigger","methodName","event","_suspended","idx","observer","optionsChange","e","geometryChange","suspend","resume","Math","max","_observerField","field","append$1$1","first","second","literals","arabicToRoman","n","values","roman","shift","UNDEFINED","defined","defId","definitionId","DEG_TO_RAD","PI","MAX_NUM","Number","MAX_VALUE","MIN_NUM","deg","radians","fromCharCode","KEY_STR","encodeBase64","input","output","utfInput","code","hi","low","isNaN","encodeUTF8","chr1","chr2","chr3","enc1","enc2","enc3","enc4","charAt","eventCoordinates","x","location","y","pageX","clientX","pageY","clientY","eventElement","touch","initialTouch","target","isTransparent","color","last","array","limitValue","min","mergeSort","a","cmp","slice","m","floor","left","right","b","r","ai","bi","merge","now","Date","getTime","rad","degrees","round","precision","p","power","pow","valueOrDefault","defaultValue","bindEvents","events","eventName","eventNames","trim","split","addEventListener","elementOffset","getBoundingClientRect","documentElement","top","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","elementStyles","styles","result","getComputedStyle","stylesArray","Array","isArray","getPixels","elementSize","size$1","parseInt","unbindEvents","name","removeEventListener","elementPadding","ref","paddingLeft","paddingTop","parseFloat","Matrix","c","d","f","call","multiplyCopy","matrix","invert","g","h","det","clone","equals","other","toArray","toString","separator","translate","unit","rotate","angle","cos","sin","scale","scaleX","scaleY","IDENTITY","matrixRegexp","transformMatrix","transform","matrixString","match","members","Function","bind","concat","parseMatrix","elementScale","parent","parentElement","parentMatrix","append","toString$1","OptionsStore","HasObservers$$1","prefix","_wrap","set","_set","composite","parentObj","fieldName","obj","_clear","type","wrapped","setAccessor","getAccessor","withAccessors","TBase","names","fields","capitalized","toUpperCase","substring","defineAccessors","toMatrix","transformation","Point","superclass","staticAccessors","ZERO","origin","originPoint","translateWith","point","move","scaleCopy","transformCopy","distanceTo","dx","dy","sqrt","digits","doRound","arg0","arg1","arguments$1","minX","minY","maxX","maxY","minPoint","maxPoint","defineProperties","Size","Rect","cornerRadius","setOrigin","setSize","setCornerRadius","getOrigin","radius","getCornerRadius","getSize","topLeft","bottomRight","topRight","bottomLeft","center","bbox","tl","tr","br","bl","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","union","intersect","rect1","bottom","rect2","Transformation","_matrix","_optionsChange","multiply","transform$1","Element$1","Element","_initOptions","prototypeAccessors","nodeType","clip","id","parentTransform","currentTransform","combinedMatrix","elementMatrix","visible","opacity","className","clippedBBox","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","fill","stroke","ellipseExtremeAngles","rx","ry","extremeX","extremeY","atan2","PI_DIV_2","Circle$2","Circle","setCenter","setRadius","getCenter","pointAt","_pointAt","extremeAngles","currentPointX","currentPointY","currentPoint","pointDistance","paintable","anonymous","newFill","IDENTITY_MATRIX_HASH","measurable","matrixHash","_bboxCache","_matrixHash","_bbox","strokeWidth","geometryAccessor","withGeometry","defineGeometryAccessors","geometry","rawBBox","_geometry","PRECISION","close$1","tolerance","abs","closeOrLess","pow$1","Arc$2","Arc","radiusX","radiusY","startAngle","endAngle","anticlockwise","xRotation","radian","curvePoints","dir","interval","_arcInterval","intervalAngle","subIntervalsCount","ceil","subIntervalAngle","currentAngle","nextAngle","points","_intervalCurvePoints","cp1","cp2","p2","endPoint","currentAngleX","bboxStartAngle","currentAngleY","oldStart","p1","p1Derivative","_derivativeAt","p2Derivative","t","distance","angleRad","pointRadius","startPoint","intersection","p0","p3","s1x","s2x","s1y","s2y","nx","ny","s","lineIntersection","calculateAngle","inAngleRange","start","end","largeArc","swipe","rotation","arcParameters","parameters","x1","y1","x2","y2","cosine","sine","xT","yT","sign","xt2","yt2","rx2","ry2","delta","constT","cxT","cyT","cx","cy","uX","uY","vX","vY","acos","angleCosine","signEndAngle","normalizeArcParameters","pop","unshift","ElementsArray","_splice","elements","_change","_add","_remove","howMany","_clearObserver","_setObserver","GeometryElementsArray","ElementsArray$$1","isOutOfEndPoint","controlPoint","calculateCurveAt","t1","toCubicPolynomial","ComplexNumber","real","img","add","cNumber","addConstant","negate","multiplyConstant","nthRoot","rad$$1","nthR","isReal","numberSign$1","solveCubicEquation","squareRoot","solveQuadraticEquation","y3","z1","z2","q","Q","b3a","hasRootsInRange","rootField","range","polynomial","roots","lineIntersectionsCount","intersects","inRange","pointAccessor","withPoints","definePointAccessors","Segment","anchor","controlIn","controlOut","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","arrayLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","segment","intersectionsCount","rayIntersection","count","curveIntersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","arr","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","X","Y","removeDuplicates","lineFunction","getControlPoints","tangent","xField","yField","restrict","switchOrientation","calculateFunction","isLine","getTangent","monotonic","isMonotonicByField","invertAxis","numberSign","secondCP","secondControlPoint","oldXField","firstCP","firstControlPoint","restrictControlPoint","cp","xValue","yValue","ShapeMap","l","path","position","isRelative","lineTo","curveTo","v","toLineParamaters","arcTo","lastControlIn","previousCommand","paths","segments","reflectionPoint","cubicControlPoints","quadraticToCubicControlPoints","isVertical","insertPosition","third","scaledPoint","SEGMENT_REGEX","SPLIT_REGEX","parsePath","pathInstance","params","closePath","command","toLowerCase","number","parseParameters","moveTo","close","Error","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","elementsClippedBoundingBox","SPACE","Path","lineJoin","point$$1","lastSegment","arc","_addArcSegments","closed","segmentStart","segmentEnd","currentType","print","len","previous","pathWidth","segmentBox","parse","MultiPath","fromRect","rect","curveFromPoints","pointsIn","initialControlPoint","lastControlPoint","controlPoints","cp0","controlPoints$1","controlPoints$2","tangent$2","pointsToCurve","fromArc","prototypeAccessors$1","toPath","Text","content","font","pos","Image$1","Image","_rect","traversable","childrenField","traverse","callback","children","child","Group","childrenChange","action","items","_reparent","insert","insertAt","remove","removeAt","clear","newParent","translateToPoint","transofrm","alignStart","align","axis","sizeField","alignStartReverse","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","wrap","revers","forEach","forEachReverse","Layout","Group$$1","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","reverse","justifyAlign","reflow","elementStart","group","groupBox","_initGroups","groups","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","arrangeElements","groupIdx","lineSize","bboxes","scaledStart","newStart","this$1$1","_newGroup","addGroup","_addToGroup","Rect$2","Rect$$1","alignElements","alignment","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","wrapElements","stacks","maxSize","stack","stackSize","addElementToStack","getStacks","startElement","elementIdx","StopsArray","optionsAccessor","GradientStop","offset","arg","defineOptionsAccessors","Gradient","stops","_createStops","_userSpace","userSpace","addStop","removeStop","stop","LinearGradient","RadialGradient","_radius","_fallbackFill","fallbackFill","instance","instance$1","easingFunctions","swing","linear","easeOutElastic","time","diff","asin","AnimationFactory","_items","register","Animation","_options","duration","easing","setup","step","play","delay","finish","abort","setTimeout","loop","_stopped","wallTime","easingPosition","animationFrame","destroy","PathParser","BaseNode","srcElement","childNodes","observe","load","node","removeSelf","invalidate","Surface$2","Observable$$1","Surface","_kendoExportVisual","exportVisual","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","draw","unbind","eventTarget","domNode","_kendoNode","currentSize","_resize","resize","force","suspendTracking","_suspendedTracking","resumeTracking","originalEvent","_elementOffset","padding","_surfacePoint","coord","inverseTransform","Observable","renderAttr","renderAllAttr","attrs","renderStyle","NODE_MAP","SVG_NS","NONE","styleAttr","replaceStyleAttr","html","restoreStyleAttr","container","from","querySelectorAll","styleString","getAttribute","removeAttribute","filter","applyStyle","renderSVG","svg","innerHTML","testFragment","testContainer","hasParser","DOMParser","firstChild","namespaceURI","chartDoc","parseFromString","importedDoc","adoptNode","renderSVG$1","TRANSFORM","DefinitionMap","isDefinition","Node","BaseNode$$1","definitions","clearDefinitions","childNode","createDefinitions","attachTo","root","domElement","render","insertBefore","setElement","nodes","childElement","template","renderChildren","css","updateDefinition","attr","removeAttr","accessibilityOptionsChange","setAttribute","allAttr","toggleAttr","allCss","classList","item","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","renderClassName","renderRole","role","renderAriaLabel","ariaLabel","renderAriaRoleDescription","ariaRoleDescription","renderAriaChecked","ariaChecked","hasDefinitions","definition","definitionChange","refUrl","renderDefinitions","mapDefinitions","skipBaseHref","baseHref","baseUrl","base","getElementsByTagName","href","url","msie","hashIndex","GradientStopNode","Node$$1","renderOffset","GradientNode","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","LinearGradientNode","GradientNode$$1","RadialGradientNode","ClipNode","renderClipRule","DefinitionNode","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","RootNode","defs","firstElementChild","DASH_ARRAYS","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","renderData","mapFill","mapStroke","undefined","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","ArcNode","PathNode$$1","CircleNode","GroupNode","ImageNode","mapPosition","mapSource","renderPosition","encode","renderSource","MultiPathNode","RectNode","ENTITY_REGEX","decodeEntities","test","_element","lastIndex","innerText","TextNode","setY","renderContent","renderTextAnchor","rtl","edge","renderPaintOrder","paintOrder","Surface$3","BaseSurface","_root","direction","_template","_rootElement","overflow","ctm","getScreenCTM","alignToScreen","click","mouseover","mouseout","mousemove","viewBox","_offset","visual","svgStyles","NODE_MAP$2","Node$2","initClip","clearClip","setClip","ctx","beginPath","renderPoints","setTransform","loadElements","cors","setOpacity","globalAlpha","opactity","GroupNode$2","renderTo","save","restore","RootNode$2","canvas","getContext","invalidateHandler","_invalidate","throttle","_rescale","_devicePixelRatio","devicePixelRatio","fixedScale","clearRect","QuadRoot","shapes","shape","_quadNode","pointShapes","QuadNode","QuadRoot$$1","inBounds","nodeRect","nodeBottomRight","inserted","_initChildren","halfWidth","halfHeight","ROOT_SIZE","ShapesQuadTree","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","zIndexComparer","zIndex","levelWeight","parents","_zIndex","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","SurfaceCursor","surface","renderPath","prevOut","bezierCurveTo","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","PathNode$2","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","gradient","createLinearGradient","createRadialGradient","parseColor","addColorStop","toCssRgba","addGradientStops","strokeStyle","lineWidth","mozDash","webkitLineDash","ArcNode$2","CircleNode$2","ImageNode$2","onLoad","onError","loading","crossOrigin","complete","onload","onerror","state","drawImage","resolve","reject","MultiPathNode$2","RectNode$2","TextNode$2","textAlign","strokeText","fillText","instance$2","support$1","Surface$4","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","image","rootElement","loadingStates","promise","resolveDataURL","data","toDataURL","then","currentShape","_currentShape","hasDocument","SurfaceFactory","implementation","hasFeature","preferred","logToConsole","navigator","exportGroup","rootGroup","exportRoot","svg$1","slice$1$1","thing","KENDO_PSEUDO_ELEMENT","KENDO_BULLET_TYPE","IMAGE_CACHE","nodeInfo","microsoft","TextRect","Text$$1","_pdfRect","setCSS","el","keys","matches","selector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","closest","cloneNodes","$el","$clone","tagName","checked","selected","nextSibling","dive","canvases","canvas$$1","orig","cache","parseBackgroundImage","tok_linear_gradient","tok_percent","tok_length","tok_keyword","tok_angle","tok_whitespace","tok_popen","tok_pclose","tok_comma","tok_url","tok_content","cache1","cache2","tok","read","token","exec","substr","skip_ws","read_stop","percent","toRGB","propName","to1","to2","num","parseAngle","to","read_linear_gradient","read_url","splitProperty","ret","last$$1","in_paren","in_string","looking_at","getFontURL","getFontHeight","getFontFaces","doc","styleSheets","doStylesheet","ss","rules","cssRules","ex","styleSheet","family","getPropertyValue","bold","italic","findFonts","addRule","addRules","rule","reduce","incCounter","inc","getPrototypeOf","resetCounter","val","doCounters","def","updateCounters","counterReset","counterIncrement","parseColor$1","whenImagesAreActuallyLoaded","pending","done","next","images","cacheImages","urls","getComputedStyle$1","bg","alphaNumeral","pushNodeInfo","decoration","prop","createsStackingContext","_stackingContext","popNodeInfo","updateClipbox","_clipbox","pseudoElt","defa","webkit","mozilla","opera","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","func","prev","getBorderRadius","sanitizeRadius","getContentBox","innerBox","wt","wr","wb","wl","radiansToDegrees","setTransform$1","setClipping","clipPath","addArcToPath","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","tmp","formatCounter","evalPseudoElementContent","displayCounter","getAllCounters","getCounter","getCssText","_renderWithPseudoElements","fake","pseudo","saveClass","_renderElement","kind","place","psel","ownerDocument","backgroundColor","textOverflow","saveTextOverflow","backgroundImage","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","version","currentStyle","boxes","cells","innerbox","display","getClientRects","table","tableBorderLeft","tableBorderTop","tableBox","firstCellBox","rows","adjustBoxes","drawOneBox","_avoidLinks","createRange","selectNodeContents","_pdfLink","listStyleType","listStylePosition","_drawBullet","bullet","boxSizing","renderElement","elementIndex","k","drawBullet","clipit","isFormField","widget","widgetInstance","exportDOMVisual","wrap$$1","maybeRenderWidget","bulletType","rectSize","circle","maybeRenderBullet","renderContents","drawEdge","Wtop","Wleft","Wright","rl","rr","transform$$1","drawRoundCorner","ri","drawOneBackground","background","drawBackgroundImage","pxlen","scaledAngle","atan","tan","implicit","console","log","img_width","img_height","renderBG","aspect_ratio","orgBox","rewX","rewY","repeatX","isFirst","isLast","drawBackground","shouldDrawLeft","shouldDrawRight","inv","renderImage","zIndexSort","sa","sb","za","zb","pa","renderFormField","tag","renderCheckbox","option","whiteSpace","multiple","selectedOptions","selectedIndex","getSelectedOption","xml","serializer","XMLSerializer","serializeToString","svg$$1","serializeSVG","floats","positioned","renderText","floating","cb","search","fontSize","lineHeight","isJustified","columnCount","textTransform","estimateLineLength","prevLineBottom","underline","lineThrough","overline","underlineOffset","forEachRect","underlinePos","drawTextLine","doChunk","selectNode","clientRects","actuallyGetRangeBoundingRect","chrome","safari","rectangles","Infinity","origStart","setStart","setEnd","found","findEOL","eol","startOffset","cc","indent","drawText","textBox","ypos","visibility","getTransform","main","_dom_zIndex","groupInStackingContext","mmul","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","exportImage","defaults","surfaceOptions","exportSVG","raw","vAlign","vStack","vWrap","fit","drawDOM","pdf","defineFont","doOne","cls","avoidLinks","word","removeClass","forceBreak","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","pageWidth","pageHeight","margin","hasMargin","Boolean","multiPage","_ignoreMargin","div","makeTemplate","pages","copy","_destructive","adjust","tfoot","ol","li","paddingRight","beforePageBreak","doPageBreak","splitElement","page","makePage","pageNum","totalPages","keepTogether","tableLayout","bottomPadding","bottomBorder","saveAdjust","breakAtElement","fall","fallsOnMargin","splitText","firstInParent","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","pageClassName","available","nextnode","findEOP","endOffset","handlePageBreaks","progress","canceled","cancel","dataviz","Color","NS","utils","outerWidth","_outerWidth","outerHeight","_outerHeight","TOOLTIP_CLOSE_TEMPLATE","ui","icon","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","Popup","off","clearTimeout","_timeout","shared","_tooltipShape","tooltip","_updateContent","isFunction","_position","tooltipOffset","_instance","surfaceOffset","show","_show","hide","_showTimeout","preventDefault","_autoHide","_measure","open","_closeButton","addClass","_popupRelatedTarget","wrapper","relatedTarget","DrawingSurface","Widget","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","plugin"],"sources":["kendo.drawing.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.color', 'kendo.popup', 'kendo.icons'], factory) :\n factory();\n})((function () {\n (function($) {\n\n function createPromise() {\n return $.Deferred();\n }\n\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n\n function extendStatic(dest, src) {\n if (!src) {\n return;\n }\n\n if (typeof src.__proto__ === 'function') {\n dest.__proto__ = src;\n } else {\n for (var member in src) {\n if (src.hasOwnProperty(member)) {\n dest[member] = src[member];\n }\n }\n }\n }\n\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll,\n extendStatic: extendStatic\n });\n\n })(window.kendo.jQuery);\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo.util = window.kendo.util || {};\n\n var LRUCache = kendo.Class.extend({\n init: function(size) {\n\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n\n put: function(key, value) {\n var map = this._map;\n var entry = { key: key, value: value };\n\n map[key] = entry;\n\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\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\n get: function(key) {\n var entry = this._map[key];\n\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n\n entry.older = this._tail;\n entry.newer = null;\n\n this._tail.newer = entry;\n this._tail = entry;\n }\n\n return entry.value;\n }\n }\n });\n\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n\n return parts.sort().join(\"\");\n }\n\n // Computes FNV-1 hash\n // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\n function hashKey(str) {\n // 32-bit FNV-1 offset basis\n // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\n var hash = 0x811C9DC5;\n\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\n return hash >>> 0;\n }\n\n function zeroSize() {\n return { width: 0, height: 0, baseline: 0 };\n }\n\n var DEFAULT_OPTIONS = {\n baselineMarkerSize: 1\n };\n\n var defaultMeasureBox;\n\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;\" +\n \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\n \"line-height: normal !important; visibility: hidden !important; white-space: pre!important;\";\n }\n\n var TextMetrics = kendo.Class.extend({\n init: function(options) {\n\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n\n measure: function(text, style, options) {\n if (options === void 0) { options = {}; }\n\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n\n if (cachedResult) {\n return cachedResult;\n }\n\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n\n for (var key in style) {\n var value = style[key];\n if (typeof value !== \"undefined\") {\n measureBox.style[key] = value;\n }\n }\n\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n\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\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n\n measureBox.parentNode.removeChild(measureBox);\n\n return size;\n },\n\n _baselineMarker: function() {\n var marker = document.createElement(\"div\");\n marker.style.cssText = \"display: inline-block; vertical-align: baseline;width: \" +\n this.options.baselineMarkerSize + \"px; height: \" + this.options.baselineMarkerSize + \"px;overflow: hidden;\";\n\n return marker;\n }\n });\n\n TextMetrics.current = new TextMetrics();\n\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\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\n })(window.kendo.jQuery);\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var extendStatic = kendoDrawingUtil.extendStatic;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var htmlEncode = kendo.htmlEncode;\n\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n\n var HasObservers = (function (Class$$1) {\n function HasObservers () {\n Class$$1.apply(this, arguments);\n }\n\n extendStatic(HasObservers, Class$$1);\n HasObservers.prototype = Object.create( Class$$1 && Class$$1.prototype );\n HasObservers.prototype.constructor = HasObservers;\n HasObservers.fn = HasObservers.prototype;\n HasObservers.fn.init = HasObservers.fn.constructor;\n\n HasObservers.prototype.observers = function observers () {\n this._observers = this._observers || [];\n return this._observers;\n };\n\n HasObservers.prototype.addObserver = function addObserver (element) {\n if (!this._observers) {\n this._observers = [ element ];\n } else {\n this._observers.push(element);\n }\n return this;\n };\n\n HasObservers.prototype.removeObserver = function removeObserver (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n };\n\n HasObservers.prototype.trigger = function trigger (methodName, event) {\n var observers = this._observers;\n\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\n HasObservers.prototype.optionsChange = function optionsChange (e) {\n if (e === void 0) { e = {}; }\n\n e.element = this;\n this.trigger(\"optionsChange\", e);\n };\n\n HasObservers.prototype.geometryChange = function geometryChange () {\n this.trigger(\"geometryChange\", {\n element: this\n });\n };\n\n HasObservers.prototype.suspend = function suspend () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n };\n\n HasObservers.prototype.resume = function resume () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n };\n\n HasObservers.prototype._observerField = function _observerField (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n };\n\n return HasObservers;\n }(Class));\n\n function append$1$1(first, second) {\n first.push.apply(first, second);\n return first;\n }\n\n /* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\n var literals = {\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n 1000 : \"m\"\n };\n\n function arabicToRoman(n) {\n var values = [ 1000,\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 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\n var UNDEFINED = \"undefined\";\n\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n\n var defId = 1;\n\n function definitionId() {\n return \"kdef\" + defId++;\n }\n\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n\n var fromCharCode = String.fromCharCode;\n\n // Encodes a string as UTF-8\n function encodeUTF8(input) {\n var output = \"\";\n\n for (var i = 0; i < input.length; i++) {\n var code = input.charCodeAt(i);\n\n if (0xD800 <= code && code <= 0xDBFF) {\n var hi = code;\n var low = input.charCodeAt(++i);\n\n if (!isNaN(low)) {\n // Combine high and low surrogate\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n code = (hi - 0xD800) * 0x400 +\n (low - 0xDC00) + 0x10000;\n }\n }\n\n if (code < 0x80) {\n // One byte\n output += fromCharCode(code);\n } else if (code < 0x800) {\n // Two bytes\n output += fromCharCode(0xC0 | (code >>> 6));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n // Three bytes\n output += fromCharCode(0xE0 | (code >>> 12));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10FFFF) {\n // Four bytes\n output += fromCharCode(0xF0 | (code >>> 18));\n output += fromCharCode(0x80 | (code >>> 12 & 0x3f));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n }\n }\n\n return output;\n }\n\n // Encodes a string as UTF-16 big-endian\n\n var KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n function encodeBase64(input) {\n var output = \"\";\n var i = 0;\n\n var utfInput = encodeUTF8(input);\n\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n\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\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n\n return output;\n }\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\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n\n function eventElement(e) {\n if (e === void 0) { e = {}; }\n\n return e.touch ? e.touch.initialTouch : e.target;\n }\n\n function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n }\n\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n // mergeSort is stable.\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\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n\n return 1;\n }\n\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\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\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n\n var documentElement = document.documentElement;\n\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\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [ styles ];\n\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n\n return result;\n }\n\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + \"px\";\n }\n\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n\n } else {\n var size$1 = elementStyles(element, [ 'width', 'height' ]);\n\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n\n function unbindEvents(element, events) {\n if (events === void 0) { 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\n function elementPadding(element) {\n var ref = elementStyles(element, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n }\n\n var Matrix = (function (Class$$1) {\n function Matrix(a, b, c, d, e, f) {\n if (a === void 0) { a = 0; }\n if (b === void 0) { b = 0; }\n if (c === void 0) { c = 0; }\n if (d === void 0) { d = 0; }\n if (e === void 0) { e = 0; }\n if (f === void 0) { f = 0; }\n\n Class$$1.call(this);\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\n extendStatic(Matrix, Class$$1);\n Matrix.prototype = Object.create( Class$$1 && Class$$1.prototype );\n Matrix.prototype.constructor = Matrix;\n Matrix.fn = Matrix.prototype;\n Matrix.fn.init = Matrix.fn.constructor;\n\n Matrix.prototype.multiplyCopy = function multiplyCopy (matrix) {\n return new Matrix(\n this.a * matrix.a + this.c * matrix.b,\n this.b * matrix.a + this.d * matrix.b,\n this.a * matrix.c + this.c * matrix.d,\n this.b * matrix.c + this.d * matrix.d,\n this.a * matrix.e + this.c * matrix.f + this.e,\n this.b * matrix.e + this.d * matrix.f + this.f\n );\n };\n\n Matrix.prototype.invert = function invert () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n\n if (det === 0) {\n return null;\n }\n\n return new Matrix(e / det, -b / det, -d / det, a / det,\n (d * h - e * g) / det, (b * g - a * h) / det);\n };\n\n Matrix.prototype.clone = function clone () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n\n Matrix.prototype.equals = function equals (other) {\n if (!other) {\n return false;\n }\n\n return this.a === other.a && this.b === other.b &&\n this.c === other.c && this.d === other.d &&\n this.e === other.e && this.f === other.f;\n };\n\n Matrix.prototype.round = function round$1 (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n\n return this;\n };\n\n Matrix.prototype.toArray = function toArray (precision) {\n var result = [ this.a, this.b, this.c, this.d, this.e, 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\n return result;\n };\n\n Matrix.prototype.toString = function toString (precision, separator) {\n if (separator === void 0) { separator = \",\"; }\n\n return this.toArray(precision).join(separator);\n };\n\n Matrix.translate = function translate (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n\n Matrix.unit = function unit () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n\n Matrix.rotate = function rotate (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = (x - x * matrix.a + y * matrix.b) || 0;\n matrix.f = (y - y * matrix.a - x * matrix.b) || 0;\n\n return matrix;\n };\n\n Matrix.scale = function scale (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n\n return Matrix;\n }(Class));\n\n Matrix.IDENTITY = Matrix.unit();\n\n var matrixRegexp = /matrix\\((.*)\\)/;\n\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n var members = match[1].split(',').map(function (x) { return parseFloat(x); });\n return new (Function.prototype.bind.apply( Matrix, [ null ].concat( members) ));\n }\n\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n }\n\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\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\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n\n var util = {\n \tappend: append$1$1,\n \tarabicToRoman: arabicToRoman,\n \tcreatePromise: createPromise,\n \tdefined: defined,\n \tdefinitionId: definitionId,\n \tdeg: deg,\n \tencodeBase64: encodeBase64,\n \teventCoordinates: eventCoordinates,\n \teventElement: eventElement,\n \tisTransparent: isTransparent,\n \tlast: last,\n \tlimitValue: limitValue,\n \tmergeSort: mergeSort,\n \tnow: now,\n \tpromiseAll: promiseAll,\n \trad: rad,\n \tround: round,\n \tvalueOrDefault: valueOrDefault,\n \tbindEvents: bindEvents,\n \telementOffset: elementOffset,\n \telementSize: elementSize,\n \telementStyles: elementStyles,\n \tunbindEvents: unbindEvents,\n \telementPadding: elementPadding,\n \telementScale: elementScale,\n \tDEG_TO_RAD: DEG_TO_RAD,\n \tMAX_NUM: MAX_NUM,\n \tMIN_NUM: MIN_NUM\n };\n\n var toString$1 = {}.toString;\n\n var OptionsStore = (function (HasObservers$$1) {\n function OptionsStore(options, prefix) {\n var this$1$1 = this;\n if (prefix === void 0) { prefix = \"\"; }\n\n HasObservers$$1.call(this);\n\n this.prefix = prefix;\n\n for (var field in options) {\n var member = options[field];\n member = this$1$1._wrap(member, field);\n this$1$1[field] = member;\n }\n }\n\n extendStatic(OptionsStore, HasObservers$$1);\n OptionsStore.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n OptionsStore.prototype.constructor = OptionsStore;\n OptionsStore.fn = OptionsStore.prototype;\n OptionsStore.fn.init = OptionsStore.fn.constructor;\n\n OptionsStore.prototype.get = function get (field) {\n var parts = field.split(\".\");\n var result = this;\n\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n\n return result;\n };\n\n OptionsStore.prototype.set = function set (field, value) {\n var current = this.get(field);\n\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\n OptionsStore.prototype._set = function _set (field, value) {\n var this$1$1 = this;\n\n var composite = field.indexOf(\".\") >= 0;\n var parentObj = this;\n var fieldName = field;\n\n if (composite) {\n var parts = fieldName.split(\".\");\n var prefix = this.prefix;\n\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + \".\";\n\n var obj = parentObj[fieldName];\n\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n };\n\n OptionsStore.prototype._clear = function _clear (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n };\n\n OptionsStore.prototype._wrap = function _wrap (object, field) {\n var type = toString$1.call(object);\n var wrapped = object;\n\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\n wrapped.addObserver(this);\n }\n\n return wrapped;\n };\n\n return OptionsStore;\n }(HasObservers));\n\n function setAccessor(field) {\n return function(value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n\n return this;\n };\n }\n\n function getAccessor(field) {\n return function() {\n return this[field];\n };\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() +\n name.substring(1, name.length);\n\n fn[\"set\" + capitalized] = setAccessor(name);\n fn[\"get\" + capitalized] = getAccessor(name);\n }\n }\n\n var withAccessors = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineAccessors(result.prototype, names);\n\n return result;\n };\n\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === \"function\") {\n return transformation.matrix();\n }\n\n return transformation;\n }\n\n var Point = (function (superclass) {\n function Point(x, y) {\n superclass.call(this);\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n extendStatic(Point, superclass);\n Point.prototype = Object.create( superclass && superclass.prototype );\n Point.prototype.constructor = Point;\n Point.fn = Point.prototype;\n Point.fn.init = Point.fn.constructor;\n\n var staticAccessors = { ZERO: {} };\n\n Point.prototype.equals = function equals (other) {\n return other && other.x === this.x && other.y === this.y;\n };\n\n Point.prototype.clone = function clone () {\n return new Point(this.x, this.y);\n };\n\n Point.prototype.rotate = function rotate (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n };\n\n Point.prototype.translate = function translate (x, y) {\n this.x += x;\n this.y += y;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.translateWith = function translateWith (point) {\n return this.translate(point.x, point.y);\n };\n\n Point.prototype.move = function move (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n };\n\n Point.prototype.scale = function scale (scaleX, scaleY) {\n if (scaleY === void 0) { scaleY = scaleX; }\n\n this.x *= scaleX;\n this.y *= scaleY;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.scaleCopy = function scaleCopy (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n };\n\n Point.prototype.transform = function transform (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.transformCopy = function transformCopy (transformation) {\n var point = this.clone();\n\n if (transformation) {\n point.transform(transformation);\n }\n\n return point;\n };\n\n Point.prototype.distanceTo = function distanceTo (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n };\n\n Point.prototype.round = function round$1 (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.toArray = function toArray (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n\n return [ x, y ];\n };\n\n Point.prototype.toString = function toString (digits, separator) {\n if (separator === void 0) { separator = \" \"; }\n\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n\n return x + separator + y;\n };\n\n Point.create = function create (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n\n return new Point(arg0, arg1);\n }\n };\n\n Point.min = function min () {\n var arguments$1 = arguments;\n\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n\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\n return new Point(minX, minY);\n };\n\n Point.max = function max () {\n var arguments$1 = arguments;\n\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n\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\n return new Point(maxX, maxY);\n };\n\n Point.minPoint = function minPoint () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n\n Point.maxPoint = function maxPoint () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n\n staticAccessors.ZERO.get = function () {\n return new Point(0, 0);\n };\n\n Object.defineProperties( Point, staticAccessors );\n\n return Point;\n }(withAccessors(HasObservers, [ \"x\", \"y\" ])));\n\n var Size = (function (superclass) {\n function Size(width, height) {\n superclass.call(this);\n\n this.width = width || 0;\n this.height = height || 0;\n }\n\n extendStatic(Size, superclass);\n Size.prototype = Object.create( superclass && superclass.prototype );\n Size.prototype.constructor = Size;\n Size.fn = Size.prototype;\n Size.fn.init = Size.fn.constructor;\n\n var staticAccessors = { ZERO: {} };\n\n Size.prototype.equals = function equals (other) {\n return other && other.width === this.width && other.height === this.height;\n };\n\n Size.prototype.clone = function clone () {\n return new Size(this.width, this.height);\n };\n\n Size.prototype.toArray = function toArray (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n\n return [ width, height ];\n };\n\n Size.create = function create (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n\n return new Size(arg0, arg1);\n }\n };\n\n staticAccessors.ZERO.get = function () {\n return new Size(0, 0);\n };\n\n Object.defineProperties( Size, staticAccessors );\n\n return Size;\n }(withAccessors(HasObservers, [ \"width\", \"height\" ])));\n\n var Rect = (function (HasObservers$$1) {\n function Rect(origin, size, cornerRadius) {\n if (origin === void 0) { origin = new Point(); }\n if (size === void 0) { size = new Size(); }\n if (cornerRadius === void 0) { cornerRadius = 0; }\n\n HasObservers$$1.call(this);\n\n this.setOrigin(origin);\n this.setSize(size);\n this.setCornerRadius(cornerRadius);\n }\n\n extendStatic(Rect, HasObservers$$1);\n Rect.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Rect.prototype.constructor = Rect;\n Rect.fn = Rect.prototype;\n Rect.fn.init = Rect.fn.constructor;\n\n Rect.prototype.clone = function clone () {\n return new Rect(\n this.origin.clone(),\n this.size.clone()\n );\n };\n\n Rect.prototype.equals = function equals (other) {\n return other &&\n other.origin.equals(this.origin) &&\n other.size.equals(this.size);\n };\n\n Rect.prototype.setOrigin = function setOrigin (value) {\n this._observerField(\"origin\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getOrigin = function getOrigin () {\n return this.origin;\n };\n\n Rect.prototype.setCornerRadius = function setCornerRadius (radius) {\n this.cornerRadius = Array.isArray(radius) ? radius : [ radius, radius ];\n\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getCornerRadius = function getCornerRadius () {\n return this.cornerRadius;\n };\n\n Rect.prototype.setSize = function setSize (value) {\n this._observerField(\"size\", Size.create(value));\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getSize = function getSize () {\n return this.size;\n };\n\n Rect.prototype.width = function width () {\n return this.size.width;\n };\n\n Rect.prototype.height = function height () {\n return this.size.height;\n };\n\n Rect.prototype.topLeft = function topLeft () {\n return this.origin.clone();\n };\n\n Rect.prototype.bottomRight = function bottomRight () {\n return this.origin.clone().translate(this.width(), this.height());\n };\n\n Rect.prototype.topRight = function topRight () {\n return this.origin.clone().translate(this.width(), 0);\n };\n\n Rect.prototype.bottomLeft = function bottomLeft () {\n return this.origin.clone().translate(0, this.height());\n };\n\n Rect.prototype.center = function center () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n };\n\n Rect.prototype.bbox = function bbox (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n\n return Rect.fromPoints(tl, tr, br, bl);\n };\n\n Rect.prototype.transformCopy = function transformCopy (m) {\n return Rect.fromPoints(\n this.topLeft().transform(m),\n this.bottomRight().transform(m)\n );\n };\n\n Rect.prototype.expand = function expand (x, y) {\n if (y === void 0) { y = x; }\n\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n\n this.origin.translate(-x, -y);\n\n return this;\n };\n\n Rect.prototype.expandCopy = function expandCopy (x, y) {\n return this.clone().expand(x, y);\n };\n\n Rect.prototype.containsPoint = function containsPoint (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n };\n\n Rect.prototype._isOnPath = function _isOnPath (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n };\n\n Rect.fromPoints = function fromPoints () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n\n return new Rect(topLeft, size);\n };\n\n Rect.union = function union (a, b) {\n return Rect.fromPoints(\n Point.min(a.topLeft(), b.topLeft()),\n Point.max(a.bottomRight(), b.bottomRight())\n );\n };\n\n Rect.intersect = function intersect (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n\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\n if (rect1.left <= rect2.right &&\n rect2.left <= rect1.right &&\n rect1.top <= rect2.bottom &&\n rect2.top <= rect1.bottom) {\n return Rect.fromPoints(\n new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n );\n }\n };\n\n return Rect;\n }(HasObservers));\n\n var Transformation = (function (HasObservers$$1) {\n function Transformation(matrix) {\n if (matrix === void 0) { matrix = Matrix.unit(); }\n\n HasObservers$$1.call(this);\n\n this._matrix = matrix;\n }\n\n extendStatic(Transformation, HasObservers$$1);\n Transformation.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Transformation.prototype.constructor = Transformation;\n Transformation.fn = Transformation.prototype;\n Transformation.fn.init = Transformation.fn.constructor;\n\n Transformation.prototype.clone = function clone () {\n return new Transformation(\n this._matrix.clone()\n );\n };\n\n Transformation.prototype.equals = function equals (other) {\n return other &&\n other._matrix.equals(this._matrix);\n };\n\n Transformation.prototype.translate = function translate (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.scale = function scale (scaleX, scaleY, origin) {\n if (scaleY === void 0) { scaleY = scaleX; }\n if (origin === void 0) { origin = null; }\n\n var originPoint = origin;\n\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.rotate = function rotate (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.multiply = function multiply (transformation) {\n var matrix = toMatrix(transformation);\n\n this._matrix = this._matrix.multiplyCopy(matrix);\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.matrix = function matrix (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n\n return this._matrix;\n };\n\n Transformation.prototype._optionsChange = function _optionsChange () {\n this.optionsChange({\n field: \"transform\",\n value: this\n });\n };\n\n return Transformation;\n }(HasObservers));\n\n function transform$1(matrix) {\n if (matrix === null) {\n return null;\n }\n\n if (matrix instanceof Transformation) {\n return matrix;\n }\n\n return new Transformation(matrix);\n }\n\n var Element$1 = (function (HasObservers$$1) {\n function Element(options) {\n HasObservers$$1.call(this);\n\n this._initOptions(options);\n }\n\n extendStatic(Element, HasObservers$$1);\n Element.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Element.prototype.constructor = Element;\n Element.fn = Element.prototype;\n Element.fn.init = Element.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Rect\";\n };\n\n Element.prototype._initOptions = function _initOptions (options) {\n if (options === void 0) { options = {}; }\n\n var clip = options.clip;\n var transform = options.transform;\n\n if (transform) {\n options.transform = transform$1(transform);\n }\n\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n };\n\n Element.prototype.transform = function transform (value) {\n if (defined(value)) {\n this.options.set(\"transform\", transform$1(value));\n } else {\n return this.options.get(\"transform\");\n }\n };\n\n Element.prototype.parentTransform = function parentTransform () {\n var element = this;\n var parentMatrix;\n\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\n if (parentMatrix) {\n return transform$1(parentMatrix);\n }\n };\n\n Element.prototype.currentTransform = function currentTransform (parentTransform) {\n if (parentTransform === void 0) { parentTransform = this.parentTransform(); }\n\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n\n if (combinedMatrix) {\n return transform$1(combinedMatrix);\n }\n };\n\n Element.prototype.visible = function visible (value) {\n if (defined(value)) {\n this.options.set(\"visible\", value);\n return this;\n }\n\n return this.options.get(\"visible\") !== false;\n };\n\n Element.prototype.clip = function clip (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set(\"clip\", value);\n return this;\n }\n\n return options.get(\"clip\");\n };\n\n Element.prototype.opacity = function opacity (value) {\n if (defined(value)) {\n this.options.set(\"opacity\", value);\n return this;\n }\n\n return valueOrDefault(this.options.get(\"opacity\"), 1);\n };\n\n Element.prototype.className = function className (value) {\n if (defined(value)) {\n this.options.set(\"className\", value);\n return this;\n }\n\n return this.options.get(\"className\");\n };\n\n Element.prototype.clippedBBox = function clippedBBox (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n };\n\n Element.prototype.containsPoint = function containsPoint (point, parentTransform) {\n if (this.visible()) {\n var transform = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n }\n return false;\n };\n\n Element.prototype._hasFill = function _hasFill () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n };\n\n Element.prototype._hasStroke = function _hasStroke () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n };\n\n Element.prototype._clippedBBox = function _clippedBBox (transformation) {\n return this.bbox(transformation);\n };\n\n Object.defineProperties( Element.prototype, prototypeAccessors );\n\n return Element;\n }(HasObservers));\n\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n\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\n return {\n x: extremeX,\n y: extremeY\n };\n }\n\n var PI_DIV_2 = Math.PI / 2;\n\n var Circle$2 = (function (superclass) {\n function Circle(center, radius) {\n if (center === void 0) { center = new Point(); }\n if (radius === void 0) { radius = 0; }\n\n superclass.call(this);\n\n this.setCenter(center);\n this.setRadius(radius);\n }\n\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create( superclass && superclass.prototype );\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n\n Circle.prototype.setCenter = function setCenter (value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Circle.prototype.getCenter = function getCenter () {\n return this.center;\n };\n\n Circle.prototype.equals = function equals (other) {\n return other &&\n other.center.equals(this.center) &&\n other.radius === this.radius;\n };\n\n Circle.prototype.clone = function clone () {\n return new Circle(this.center.clone(), this.radius);\n };\n\n Circle.prototype.pointAt = function pointAt (angle) {\n return this._pointAt(rad(angle));\n };\n\n Circle.prototype.bbox = function bbox (matrix) {\n var this$1$1 = this;\n\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n };\n\n Circle.prototype._pointAt = function _pointAt (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n\n return new Point(\n center.x + radius * Math.cos(angle),\n center.y + radius * Math.sin(angle)\n );\n };\n\n Circle.prototype.containsPoint = function containsPoint (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) +\n Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n };\n\n Circle.prototype._isOnPath = function _isOnPath (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n\n return radius - width <= pointDistance && pointDistance <= radius + width;\n };\n\n return Circle;\n }(withAccessors(HasObservers, [ \"radius\" ])));\n\n var GRADIENT = \"Gradient\";\n\n var paintable = function (TBase) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.fill = function fill (color, opacity) {\n var options = this.options;\n\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = {\n color: color\n };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set(\"fill\", newFill);\n } else {\n options.set(\"fill\", color);\n }\n\n return this;\n }\n\n return options.get(\"fill\");\n };\n\n anonymous.prototype.stroke = function stroke (color, width, opacity) {\n if (defined(color)) {\n this.options.set(\"stroke.color\", color);\n\n if (defined(width)) {\n this.options.set(\"stroke.width\", width);\n }\n\n if (defined(opacity)) {\n this.options.set(\"stroke.opacity\", opacity);\n }\n\n return this;\n }\n\n return this.options.get(\"stroke\");\n };\n\n return anonymous;\n }(TBase))\n ); };\n\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n\n var measurable = function (TBase) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n\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\n var strokeWidth = this.options.get(\"stroke.width\");\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n\n return bbox;\n };\n\n anonymous.prototype.geometryChange = function geometryChange () {\n delete this._bboxCache;\n this.trigger(\"geometryChange\", {\n element: this\n });\n };\n\n return anonymous;\n }(TBase))\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\n return this[fieldName];\n };\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\n var withGeometry = function (TBase, names) {\n if (names === void 0) { names = [ \"geometry\" ]; }\n\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineGeometryAccessors(result.prototype, names);\n\n return result;\n };\n\n var DEFAULT_STROKE = \"#000\";\n\n var Circle = (function (superclass) {\n function Circle(geometry, options) {\n if (geometry === void 0) { geometry = new Circle$2(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create( superclass && superclass.prototype );\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Circle\";\n };\n\n Circle.prototype.rawBBox = function rawBBox () {\n return this._geometry.bbox();\n };\n\n Circle.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Circle.prototype._containsPoint = function _containsPoint (point) {\n return this.geometry().containsPoint(point);\n };\n\n Circle.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Circle.prototype, prototypeAccessors );\n\n return Circle;\n }(paintable(measurable(withGeometry(Element$1)))));\n\n var PRECISION = 10;\n\n function close$1(a, b, tolerance) {\n if (tolerance === void 0) { tolerance = PRECISION; }\n\n return round(Math.abs(a - b), tolerance) === 0;\n }\n\n function closeOrLess(a, b, tolerance) {\n return a < b || close$1(a, b, tolerance);\n }\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\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\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var accessors = [ \"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\" ];\n\n var Arc$2 = (function (superclass) {\n function Arc(center, options) {\n if (center === void 0) { center = new Point(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this);\n\n this.setCenter(center);\n\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\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create( superclass && superclass.prototype );\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n\n Arc.prototype.clone = function clone () {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n };\n\n Arc.prototype.setCenter = function setCenter (value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Arc.prototype.getCenter = function getCenter () {\n return this.center;\n };\n\n Arc.prototype.pointAt = function pointAt (angle) {\n var center = this.center;\n var radian = rad(angle);\n\n return new Point(\n center.x + this.radiusX * Math.cos(radian),\n center.y + this.radiusY * Math.sin(radian)\n );\n };\n\n Arc.prototype.curvePoints = function curvePoints () {\n var this$1$1 = this;\n\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [ this.pointAt(startAngle) ];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform$1().rotate(this.xRotation, this.center);\n }\n\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n\n return curvePoints;\n };\n\n Arc.prototype.bbox = function bbox (matrix) {\n var this$1$1 = this;\n\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\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = (void 0);\n if (currentAngleX < endAngle) {\n currentPointX = this$1$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n\n var currentPointY = (void 0);\n if (currentAngleY < endAngle) {\n currentPointY = this$1$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n };\n\n Arc.prototype._arcInterval = function _arcInterval () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n endAngle += 360;\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n };\n\n Arc.prototype._intervalCurvePoints = function _intervalCurvePoints (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n };\n\n Arc.prototype._derivativeAt = function _derivativeAt (angle) {\n var radian = rad(angle);\n\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n };\n\n Arc.prototype.containsPoint = function containsPoint (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = (radiusX * radiusY) /\n 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\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\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\n Arc.prototype._isOnPath = function _isOnPath (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n };\n\n Arc.fromPoints = function fromPoints (start, end, rx, ry, largeArc, swipe, rotation) {// eslint-disable-line max-params\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\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\n return Arc;\n }(withAccessors(HasObservers, accessors)));\n\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\n return round(deg(Math.atan2(sin, cos)));\n }\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; if (rotation === void 0) { rotation = 0; }\n\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n\n var sign = largeArc !== swipe ? 1 : -1;\n\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\n var delta = xt2 / rx2 + yt2 / ry2;\n\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n // due to rounding errors the value could become NaN even after radii correction\n if (isNaN(constT)) {\n constT = 0;\n }\n\n var cxT = constT * (rx * yT) / ry;\n var cyT = - constT * (ry * xT) / rx;\n\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n\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\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n\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\n if (!swipe && angle > 0) {\n angle -= 360;\n }\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\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\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n\n while (startAngle < start) {\n startAngle += 90;\n }\n\n return startAngle;\n }\n\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n\n var ElementsArray = (function (HasObservers$$1) {\n function ElementsArray(array) {\n if (array === void 0) { array = []; }\n\n HasObservers$$1.call(this);\n\n this.length = 0;\n this._splice(0, array.length, array);\n }\n\n extendStatic(ElementsArray, HasObservers$$1);\n ElementsArray.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n ElementsArray.prototype.constructor = ElementsArray;\n ElementsArray.fn = ElementsArray.prototype;\n ElementsArray.fn.init = ElementsArray.fn.constructor;\n\n ElementsArray.prototype.elements = function elements (value) {\n if (value) {\n this._splice(0, this.length, value);\n\n this._change();\n return this;\n }\n\n return this.slice(0);\n };\n\n ElementsArray.prototype.push = function push$1 () {\n var elements = arguments;\n var result = push.apply(this, elements);\n\n this._add(elements);\n\n return result;\n };\n\n ElementsArray.prototype.slice = function slice$1 () {\n return slice.call(this);\n };\n\n ElementsArray.prototype.pop = function pop$1 () {\n var length = this.length;\n var result = pop.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n };\n\n ElementsArray.prototype.splice = function splice$1 (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n\n this._change();\n\n return result;\n };\n\n ElementsArray.prototype.shift = function shift$1 () {\n var length = this.length;\n var result = shift.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n };\n\n ElementsArray.prototype.unshift = function unshift$1 () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n\n this._add(elements);\n\n return result;\n };\n\n ElementsArray.prototype.indexOf = function indexOf (element) {\n var this$1$1 = this;\n\n var length = this.length;\n\n for (var idx = 0; idx < length; idx++) {\n if (this$1$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n };\n\n ElementsArray.prototype._splice = function _splice (index, howMany, elements) {\n var result = splice.apply(this, [ index, howMany ].concat(elements));\n\n this._clearObserver(result);\n this._setObserver(elements);\n\n return result;\n };\n\n ElementsArray.prototype._add = function _add (elements) {\n this._setObserver(elements);\n this._change();\n };\n\n ElementsArray.prototype._remove = function _remove (elements) {\n this._clearObserver(elements);\n this._change();\n };\n\n ElementsArray.prototype._setObserver = function _setObserver (elements) {\n var this$1$1 = this;\n\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1$1);\n }\n };\n\n ElementsArray.prototype._clearObserver = function _clearObserver (elements) {\n var this$1$1 = this;\n\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1$1);\n }\n };\n\n ElementsArray.prototype._change = function _change () {};\n\n return ElementsArray;\n }(HasObservers));\n\n var GeometryElementsArray = (function (ElementsArray$$1) {\n function GeometryElementsArray () {\n ElementsArray$$1.apply(this, arguments);\n }\n\n extendStatic(GeometryElementsArray, ElementsArray$$1);\n GeometryElementsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n GeometryElementsArray.prototype.constructor = GeometryElementsArray;\n GeometryElementsArray.fn = GeometryElementsArray.prototype;\n GeometryElementsArray.fn.init = GeometryElementsArray.fn.constructor;\n\n GeometryElementsArray.prototype._change = function _change () {\n this.geometryChange();\n };\n\n return GeometryElementsArray;\n }(ElementsArray));\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$1().rotate(-angle, endPoint));\n\n return rotatedPoint.x < endPoint.x;\n }\n\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] +\n 3 * Math.pow(t1, 2) * t * points[1][field] +\n 3 * Math.pow(t, 2) * t1 * points[2][field] +\n Math.pow(t, 3) * points[3][field];\n }\n\n function toCubicPolynomial(points, field) {\n return [ -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\n var ComplexNumber = (function (Class$$1) {\n function ComplexNumber(real, img) {\n if (real === void 0) { real = 0; }\n if (img === void 0) { img = 0; }\n\n Class$$1.call(this);\n\n this.real = real;\n this.img = img;\n }\n\n extendStatic(ComplexNumber, Class$$1);\n ComplexNumber.prototype = Object.create( Class$$1 && Class$$1.prototype );\n ComplexNumber.prototype.constructor = ComplexNumber;\n ComplexNumber.fn = ComplexNumber.prototype;\n ComplexNumber.fn.init = ComplexNumber.fn.constructor;\n\n ComplexNumber.prototype.add = function add (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n };\n\n ComplexNumber.prototype.addConstant = function addConstant (value) {\n return new ComplexNumber(this.real + value, this.img);\n };\n\n ComplexNumber.prototype.negate = function negate () {\n return new ComplexNumber(-this.real, -this.img);\n };\n\n ComplexNumber.prototype.multiply = function multiply (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img,\n this.real * cNumber.img + this.img * cNumber.real);\n };\n\n ComplexNumber.prototype.multiplyConstant = function multiplyConstant (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n };\n\n ComplexNumber.prototype.nthRoot = function nthRoot (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n)); //Moivre's formula\n };\n\n ComplexNumber.prototype.equals = function equals (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n };\n\n ComplexNumber.prototype.isReal = function isReal () {\n return this.img === 0;\n };\n\n return ComplexNumber;\n }(Class));\n\n function numberSign$1(x) {\n return x < 0 ? -1 : 1;\n }\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\n //Cardano's formula\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\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\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$1(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign$1(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n\n y1 = x1.add(x2);\n\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n\n var result = [];\n\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\n return result;\n }\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\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\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, \"x\");\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], \"y\", points);\n intersectsRay = close$1(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && (((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x) || (0 < roots[i] && roots[i] < 1))) {\n count++;\n }\n }\n\n return count;\n }\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\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\n return intersects ? 1 : 0;\n }\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\n return this[fieldName];\n };\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\n var withPoints = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n definePointAccessors(result.prototype, names);\n\n return result;\n };\n\n var points = [ \"anchor\", \"controlIn\", \"controlOut\" ];\n\n var Segment = (function (superclass) {\n function Segment(anchor, controlIn, controlOut) {\n superclass.call(this);\n\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n\n extendStatic(Segment, superclass);\n Segment.prototype = Object.create( superclass && superclass.prototype );\n Segment.prototype.constructor = Segment;\n Segment.fn = Segment.prototype;\n Segment.fn.init = Segment.fn.constructor;\n\n Segment.prototype.bboxTo = function bboxTo (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(\n segmentAnchor, this.controlOut().transformCopy(matrix),\n toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n );\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n\n return rect;\n };\n\n Segment.prototype._lineBoundingBox = function _lineBoundingBox (p1, p2) {\n return Rect.fromPoints(p1, p2);\n };\n\n Segment.prototype._curveBoundingBox = function _curveBoundingBox (p1, cp1, cp2, p2) {\n var points = [ p1, cp1, cp2, p2 ];\n var extremesX = this._curveExtremesFor(points, \"x\");\n var extremesY = this._curveExtremesFor(points, \"y\");\n var xLimits = arrayLimits([ extremesX.min, extremesX.max, p1.x, p2.x ]);\n var yLimits = arrayLimits([ extremesY.min, extremesY.max, p1.y, p2.y ]);\n\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n };\n\n Segment.prototype._curveExtremesFor = function _curveExtremesFor (points, field) {\n var extremes = this._curveExtremes(\n points[0][field], points[1][field],\n points[2][field], points[3][field]\n );\n\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n };\n\n Segment.prototype._curveExtremes = function _curveExtremes (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = - 2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n\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\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n\n return {\n min: min,\n max: max\n };\n };\n\n Segment.prototype._intersectionsTo = function _intersectionsTo (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([ this.anchor(), this.controlOut(), segment.controlIn(), segment.anchor() ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n };\n\n Segment.prototype._isOnCurveTo = function _isOnCurveTo (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n\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\n //the approach is not entirely correct but is close and the alternatives are solving a 6th degree polynomial or testing the segment points\n var points = [ p1, p2, p3, p4 ];\n if (hasRootsInRange(points, point, \"x\", \"y\", width) || hasRootsInRange(points, point, \"y\", \"x\", width)) {\n return true;\n }\n var rotation = transform$1().rotate(45, point);\n var rotatedPoints = [ p1.transformCopy(rotation), p2.transformCopy(rotation), p3.transformCopy(rotation), p4.transformCopy(rotation) ];\n return hasRootsInRange(rotatedPoints, point, \"x\", \"y\", width) || hasRootsInRange(rotatedPoints, point, \"y\", \"x\", width);\n }\n };\n\n Segment.prototype._isOnLineTo = function _isOnLineTo (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([ p1.x, p1.y - width / 2 ], [ p1.distanceTo(p2), width ]);\n return rect.containsPoint(point.transformCopy(transform$1().rotate(-angle, p1)));\n };\n\n Segment.prototype._isOnPathTo = function _isOnPathTo (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n };\n\n return Segment;\n }(withPoints(HasObservers, points)));\n\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n\n for (var i = 0; i < length; i ++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n var geometry = {\n \tCircle: Circle$2,\n \tArc: Arc$2,\n \tRect: Rect,\n \tPoint: Point,\n \tSegment: Segment,\n \tMatrix: Matrix,\n \tSize: Size,\n \ttoMatrix: toMatrix,\n \tTransformation: Transformation,\n \ttransform: transform$1\n };\n\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var X = \"x\";\n var Y = \"y\";\n\n function pointsToCurve(pointsIn, closed) {\n var points = pointsIn.slice(0);\n var segments = [];\n var length = points.length;\n\n if (length > 2) {\n removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n\n segments.push(new Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n var tangent = getTangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new Segment(\n p1,\n secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n var initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n var controlPoints = getControlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = getTangent(p0, p1, X,Y);\n initialControlPoint = firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n var controlPoints$1 = getControlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n var controlPoints$2 = getControlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p1,\n controlPoints$2[0]\n ));\n\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(\n p2,\n lastControlPoint\n ));\n } else {\n var tangent$2 = getTangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p2,\n secondControlPoint(tangent$2, p1, p2, X, Y)\n ));\n }\n\n return segments;\n }\n\n function removeDuplicates(idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n }\n\n function invertAxis(p0, p1, p2) {\n var invertAxis = false;\n\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n invertAxis = true;\n }\n } else {\n var fn = lineFunction(p0,p1);\n var y2 = calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n }\n\n function isLine(p0, p1, p2) {\n var fn = lineFunction(p0, p1);\n var y2 = calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n }\n\n function lineFunction(p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n\n return [ b, a ];\n }\n\n function getControlPoints(p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n\n if (isLine(p0, p1, p2)) {\n tangent = getTangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: isMonotonicByField(p0, p1, p2, X),\n y: isMonotonicByField(p0, p1, p2, Y)\n };\n\n if (monotonic.x && monotonic.y) {\n tangent = getTangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n var secondCP = secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n var firstCP = firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n restrictControlPoint(p0, p1, secondCP, tangent);\n restrictControlPoint(p1, p2, firstCP, tangent);\n }\n\n return [ secondCP, firstCP ];\n }\n\n function restrictControlPoint(p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n }\n\n function getTangent(p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n }\n\n function isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n }\n\n function firstControlPoint(tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n\n return point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n }\n\n function secondControlPoint(tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n\n return point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n }\n\n function point(xValue, yValue, xField, yField) {\n var controlPoint = new Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n }\n\n function calculateFunction(fn, x) {\n var length = fn.length;\n var result = 0;\n\n for (var i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n }\n\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n\n var ShapeMap = {\n l: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n\n if (options.isRelative) {\n point.translateWith(position);\n }\n\n path.lineTo(point.x, point.y);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n c: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\n path.curveTo(controlOut, controlIn, point);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n v: function(path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n\n h: function(path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n\n a: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\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\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\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\n if (previousCommand === \"s\" || previousCommand === \"c\") {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\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\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n\n lastControlIn = controlIn;\n\n path.curveTo(controlOut, controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n q: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\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\n if (previousCommand === \"q\" || previousCommand === \"t\") {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone()\n .translateWith(position.scaleCopy(-1 / 3))\n .scale(3 / 2);\n }\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\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n\n var third = 1 / 3;\n\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\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\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\n function parsePath(pathInstance, str) {\n var position = new Point();\n var previousCommand;\n\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\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\n pathInstance.moveTo(position.x, position.y);\n\n if (parameters.length > 2) {\n command = \"l\";\n parameters.splice(0, 2);\n }\n }\n\n if (ShapeMap[command]) {\n ShapeMap[command](\n pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n }\n );\n\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.close();\n }\n } else if (command !== MOVE) {\n throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n }\n\n previousCommand = command;\n });\n\n return pathInstance;\n }\n\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n\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\n return boundingBox;\n }\n\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n\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\n return boundingBox;\n }\n\n var SPACE = ' ';\n var printPoints = function (precision) { return function () {\n var points = [], len = arguments.length;\n while ( len-- ) points[ len ] = arguments[ len ];\n\n return points.map(function (p) { return p.toString(precision); }).join(SPACE);\n } };\n var segmentType = function (segmentStart, segmentEnd) { return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L'; };\n\n var Path = (function (superclass) {\n function Path(options) {\n superclass.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n }\n\n extendStatic(Path, superclass);\n Path.prototype = Object.create( superclass && superclass.prototype );\n Path.prototype.constructor = Path;\n Path.fn = Path.prototype;\n Path.fn.init = Path.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return 'Path';\n };\n\n Path.prototype.moveTo = function moveTo (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n\n this.lineTo(x, y);\n\n return this;\n };\n\n Path.prototype.lineTo = function lineTo (x, y) {\n var point$$1 = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point$$1);\n\n this.segments.push(segment);\n\n return this;\n };\n\n Path.prototype.curveTo = function curveTo (controlOut, controlIn, point$$1) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point$$1, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n\n this.segments.push(segment);\n }\n\n return this;\n };\n\n Path.prototype.arc = function arc (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start),\n anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n\n this._addArcSegments(arc);\n }\n\n return this;\n };\n\n Path.prototype.arcTo = function arcTo (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, Point.create(end), rx, ry, largeArc, swipe, rotation);\n\n this._addArcSegments(arc);\n }\n return this;\n };\n\n Path.prototype._addArcSegments = function _addArcSegments (arc) {\n var this$1$1 = this;\n\n this.suspend();\n\n var curvePoints = arc.curvePoints();\n\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n\n this.resume();\n this.geometryChange();\n };\n\n Path.prototype.close = function close () {\n this.options.closed = true;\n this.geometryChange();\n\n return this;\n };\n\n Path.prototype.rawBBox = function rawBBox () {\n return this._bbox();\n };\n\n Path.prototype.toString = function toString (digits) {\n var output = '';\n\n var segments = this.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var print = printPoints(digits);\n var currentType;\n\n for (var i = 1; i < length; i++) {\n var type = segmentType(segments[i - 1], segments[i]);\n if (type !== currentType) {\n currentType = type;\n parts.push(type);\n }\n\n if (type === 'L') {\n parts.push(print(segments[i].anchor()));\n } else {\n parts.push(print(\n segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()\n ));\n }\n }\n\n output = 'M' + print(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (this.options.closed) {\n output += 'Z';\n }\n }\n\n return output;\n };\n\n Path.prototype._containsPoint = function _containsPoint (point$$1) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point$$1);\n }\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$$1);\n }\n\n return intersectionsCount % 2 !== 0;\n };\n\n Path.prototype._isOnPath = function _isOnPath (point$$1, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point$$1, pathWidth, 'start')) {\n return true;\n }\n\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point$$1, pathWidth)) {\n return true;\n }\n }\n\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point$$1, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n };\n\n Path.prototype._bbox = function _bbox (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n\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\n return boundingBox;\n };\n\n Path.parse = function parse (str, options) {\n return MultiPath.parse(str, options);\n };\n\n Path.fromRect = function fromRect (rect, options) {\n var path = new Path(options);\n var ref = rect.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n\n if (rx === 0 && ry === 0) {\n path.moveTo(rect.topLeft())\n .lineTo(rect.topRight())\n .lineTo(rect.bottomRight())\n .lineTo(rect.bottomLeft())\n .close();\n } else {\n var origin = rect.origin;\n var x = origin.x;\n var y = origin.y;\n var width = rect.width();\n var height = rect.height();\n rx = limitValue(rx, 0, width / 2);\n ry = limitValue(ry, 0, height / 2);\n\n path.moveTo(x + rx, y)\n .lineTo(x + width - rx, y)\n .arcTo([ x + width, y + ry ], rx, ry, false)\n .lineTo(x + width, y + height - ry)\n .arcTo([ x + width - rx, y + height ], rx, ry, false)\n .lineTo(x + rx, y + height)\n .arcTo([ x, y + height - ry ], rx, ry, false)\n .lineTo(x, y + ry)\n .arcTo([ x + rx, y ], rx, ry, false);\n }\n\n return path;\n };\n\n Path.fromPoints = function fromPoints (points, options) {\n if (points) {\n var path = new Path(options);\n\n for (var i = 0; i < points.length; i++) {\n var point$$1 = Point.create(points[i]);\n if (point$$1) {\n if (i === 0) {\n path.moveTo(point$$1);\n } else {\n path.lineTo(point$$1);\n }\n }\n }\n\n return path;\n }\n };\n\n Path.curveFromPoints = function curveFromPoints (points, options) {\n if (points) {\n var segments = pointsToCurve(points);\n var path = new Path(options);\n path.segments.push.apply(path.segments, segments);\n\n return path;\n }\n };\n\n Path.fromArc = function fromArc (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n\n Object.defineProperties( Path.prototype, prototypeAccessors );\n\n return Path;\n }(paintable(measurable(Element$1))));\n\n var MultiPath = (function (superclass) {\n function MultiPath(options) {\n superclass.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n\n extendStatic(MultiPath, superclass);\n MultiPath.prototype = Object.create( superclass && superclass.prototype );\n MultiPath.prototype.constructor = MultiPath;\n MultiPath.fn = MultiPath.prototype;\n MultiPath.fn.init = MultiPath.fn.constructor;\n\n var prototypeAccessors$1 = { nodeType: {} };\n\n MultiPath.parse = function parse (str, options) {\n var instance = new MultiPath(options);\n return parsePath(instance, str);\n };\n\n MultiPath.prototype.toString = function toString (digits) {\n var paths = this.paths;\n var output = '';\n\n if (paths.length > 0) {\n var result = [];\n\n for (var i = 0; i < paths.length; i++) {\n result.push(paths[i].toString(digits));\n }\n\n output = result.join(SPACE);\n }\n\n return output;\n };\n\n prototypeAccessors$1.nodeType.get = function () {\n return 'MultiPath';\n };\n\n MultiPath.prototype.moveTo = function moveTo (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n\n this.paths.push(path);\n\n return this;\n };\n\n MultiPath.prototype.lineTo = function lineTo (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n\n return this;\n };\n\n MultiPath.prototype.curveTo = function curveTo (controlOut, controlIn, point$$1) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point$$1);\n }\n\n return this;\n };\n\n MultiPath.prototype.arc = function arc (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n\n return this;\n };\n\n MultiPath.prototype.arcTo = function arcTo (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n\n return this;\n };\n\n MultiPath.prototype.close = function close () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n\n return this;\n };\n\n MultiPath.prototype._bbox = function _bbox (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n };\n\n MultiPath.prototype.rawBBox = function rawBBox () {\n return elementsBoundingBox(this.paths, false);\n };\n\n MultiPath.prototype._containsPoint = function _containsPoint (point$$1) {\n var paths = this.paths;\n\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point$$1)) {\n return true;\n }\n }\n return false;\n };\n\n MultiPath.prototype._isOnPath = function _isOnPath (point$$1) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point$$1, width)) {\n return true;\n }\n }\n return false;\n };\n\n MultiPath.prototype._clippedBBox = function _clippedBBox (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n };\n\n Object.defineProperties( MultiPath.prototype, prototypeAccessors$1 );\n\n return MultiPath;\n }(paintable(measurable(Element$1))));\n\n var DEFAULT_STROKE$1 = \"#000\";\n\n var Arc = (function (superclass) {\n function Arc(geometry, options) {\n if (geometry === void 0) { geometry = new Arc$2(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n }\n\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create( superclass && superclass.prototype );\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Arc\";\n };\n\n Arc.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Arc.prototype.rawBBox = function rawBBox () {\n return this.geometry().bbox();\n };\n\n Arc.prototype.toPath = function toPath () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n\n return path;\n };\n\n Arc.prototype._containsPoint = function _containsPoint (point) {\n return this.geometry().containsPoint(point);\n };\n\n Arc.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Arc.prototype, prototypeAccessors );\n\n return Arc;\n }(paintable(measurable(withGeometry(Element$1)))));\n\n var DEFAULT_FONT = \"12px sans-serif\";\n var DEFAULT_FILL = \"#000\";\n\n var Text = (function (superclass) {\n function Text(content, position, options) {\n if (position === void 0) { position = new Point(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.content(content);\n this.position(position);\n\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n }\n\n extendStatic(Text, superclass);\n Text.prototype = Object.create( superclass && superclass.prototype );\n Text.prototype.constructor = Text;\n Text.fn = Text.prototype;\n Text.fn.init = Text.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Text\";\n };\n\n Text.prototype.content = function content (value) {\n if (defined(value)) {\n this.options.set(\"content\", value);\n return this;\n }\n\n return this.options.get(\"content\");\n };\n\n Text.prototype.measure = function measure () {\n var metrics = kendoUtil.measureText(this.content(), {\n font: this.options.get(\"font\")\n });\n\n return metrics;\n };\n\n Text.prototype.rect = function rect () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [ size.width, size.height ]);\n };\n\n Text.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n };\n\n Text.prototype.rawBBox = function rawBBox () {\n return this.rect().bbox();\n };\n\n Text.prototype._containsPoint = function _containsPoint (point) {\n return this.rect().containsPoint(point);\n };\n\n Object.defineProperties( Text.prototype, prototypeAccessors );\n\n return Text;\n }(paintable(withPoints(Element$1, [ \"position\" ]))));\n\n var Image$1 = (function (superclass) {\n function Image(src, rect, options) {\n if (rect === void 0) { rect = new Rect(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.src(src);\n this.rect(rect);\n }\n\n extendStatic(Image, superclass);\n Image.prototype = Object.create( superclass && superclass.prototype );\n Image.prototype.constructor = Image;\n Image.fn = Image.prototype;\n Image.fn.init = Image.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Image\";\n };\n\n Image.prototype.src = function src (value) {\n if (defined(value)) {\n this.options.set(\"src\", value);\n return this;\n }\n\n return this.options.get(\"src\");\n };\n\n Image.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n };\n\n Image.prototype.rawBBox = function rawBBox () {\n return this._rect.bbox();\n };\n\n Image.prototype._containsPoint = function _containsPoint (point) {\n return this._rect.containsPoint(point);\n };\n\n Image.prototype._hasFill = function _hasFill () {\n return this.src();\n };\n\n Object.defineProperties( Image.prototype, prototypeAccessors );\n\n return Image;\n }(withGeometry(Element$1, [ \"rect\" ])));\n\n var traversable = function (TBase, childrenField) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.traverse = function traverse (callback) {\n var children = this[childrenField];\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n\n return this;\n };\n\n return anonymous;\n }(TBase))\n ); };\n\n var Group = (function (superclass) {\n function Group(options) {\n superclass.call(this, options);\n this.children = [];\n }\n\n extendStatic(Group, superclass);\n Group.prototype = Object.create( superclass && superclass.prototype );\n Group.prototype.constructor = Group;\n Group.fn = Group.prototype;\n Group.fn.init = Group.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Group\";\n };\n\n Group.prototype.childrenChange = function childrenChange (action, items, index) {\n this.trigger(\"childrenChange\",{\n action: action,\n items: items,\n index: index\n });\n };\n\n Group.prototype.append = function append$1 () {\n append$1$1(this.children, arguments);\n this._reparent(arguments, this);\n\n this.childrenChange(\"add\", arguments);\n\n return this;\n };\n\n Group.prototype.insert = function insert (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n\n this.childrenChange(\"add\", [ element ], index);\n\n return this;\n };\n\n Group.prototype.insertAt = function insertAt (element, index) {\n return this.insert(index, element);\n };\n\n Group.prototype.remove = function remove (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n };\n\n Group.prototype.removeAt = function removeAt (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n };\n\n Group.prototype.clear = function clear () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n\n this.childrenChange(\"remove\", items, 0);\n\n return this;\n };\n\n Group.prototype.bbox = function bbox (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n };\n\n Group.prototype.rawBBox = function rawBBox () {\n return elementsBoundingBox(this.children, false);\n };\n\n Group.prototype._clippedBBox = function _clippedBBox (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n };\n\n Group.prototype.currentTransform = function currentTransform (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n };\n\n Group.prototype.containsPoint = function containsPoint (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n };\n\n Group.prototype._reparent = function _reparent (elements, newParent) {\n var this$1$1 = this;\n\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$1 && parent.remove) {\n parent.remove(child);\n }\n\n child.parent = newParent;\n }\n };\n\n Object.defineProperties( Group.prototype, prototypeAccessors );\n\n return Group;\n }(traversable(Element$1, \"children\")));\n\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform$1();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\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\n return start;\n }\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\n return start;\n }\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\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n\n var Layout = (function (Group$$1) {\n function Layout(rect, options) {\n Group$$1.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n\n extendStatic(Layout, Group$$1);\n Layout.prototype = Object.create( Group$$1 && Group$$1.prototype );\n Layout.prototype.constructor = Layout;\n Layout.fn = Layout.prototype;\n Layout.fn.init = Layout.fn.constructor;\n\n Layout.prototype.rect = function rect (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n\n return this._rect;\n };\n\n Layout.prototype._initMap = function _initMap () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === \"horizontal\") {\n fieldMap.sizeField = \"width\";\n fieldMap.groupsSizeField = \"height\";\n fieldMap.groupAxis = \"x\";\n fieldMap.groupsAxis = \"y\";\n } else {\n fieldMap.sizeField = \"height\";\n fieldMap.groupsSizeField = \"width\";\n fieldMap.groupAxis = \"y\";\n fieldMap.groupsAxis = \"x\";\n }\n\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\n Layout.prototype.reflow = function reflow () {\n var this$1$1 = this;\n\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n\n if (this.options.transform) {\n this.transform(null);\n }\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\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n\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\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1$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$1.forEach(group.bboxes, arrangeElements);\n\n groupStart += group.lineSize + options.lineSpacing;\n }\n\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform = transform$1();\n if (groupAxis === \"x\") {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n\n this.transform(transform);\n }\n };\n\n Layout.prototype._initGroups = function _initGroups () {\n var this$1$1 = this;\n\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\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$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1$1._newGroup();\n } else {\n addGroup();\n group = this$1$1._newGroup();\n this$1$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1$1._addToGroup(group, bbox, element);\n }\n }\n }\n\n if (group.bboxes.length) {\n addGroup();\n }\n\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n };\n\n Layout.prototype._addToGroup = function _addToGroup (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n };\n\n Layout.prototype._newGroup = function _newGroup () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n };\n\n return Layout;\n }(Group));\n\n var Rect$2 = (function (superclass) {\n function Rect$$1(geometry, options) {\n if (geometry === void 0) { geometry = new Rect(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(\"#000\");\n }\n }\n\n extendStatic(Rect$$1, superclass);\n Rect$$1.prototype = Object.create( superclass && superclass.prototype );\n Rect$$1.prototype.constructor = Rect$$1;\n Rect$$1.fn = Rect$$1.prototype;\n Rect$$1.fn.init = Rect$$1.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Rect\";\n };\n\n Rect$$1.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Rect$$1.prototype.rawBBox = function rawBBox () {\n return this._geometry.bbox();\n };\n\n Rect$$1.prototype._containsPoint = function _containsPoint (point) {\n return this._geometry.containsPoint(point);\n };\n\n Rect$$1.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Rect$$1.prototype, prototypeAccessors );\n\n return Rect$$1;\n }(paintable(measurable(withGeometry(Element$1)))));\n\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\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"x\", \"width\");\n }\n\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"y\", \"height\");\n }\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\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\n function createStackElements(elements) {\n var stackElements = [];\n\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\n return stackElements;\n }\n\n function stack(elements) {\n stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n }\n\n function vStack(elements) {\n stackElements(createStackElements(elements), \"y\", \"x\", \"height\");\n }\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\n var addElementToStack = function() {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n\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\n if (stack.length) {\n stacks.push(stack);\n }\n\n return stacks;\n }\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\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\n function wrap(elements, rect) {\n return wrapElements(elements, rect, \"x\", \"y\", \"width\");\n }\n\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, \"y\", \"x\", \"height\");\n }\n\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform = element.transform() || transform$1();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n }\n\n var StopsArray = (function (ElementsArray$$1) {\n function StopsArray () {\n ElementsArray$$1.apply(this, arguments);\n }\n\n extendStatic(StopsArray, ElementsArray$$1);\n StopsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n StopsArray.prototype.constructor = StopsArray;\n StopsArray.fn = StopsArray.prototype;\n StopsArray.fn.init = StopsArray.fn.constructor;\n\n StopsArray.prototype._change = function _change () {\n this.optionsChange({\n field: \"stops\"\n });\n };\n\n return StopsArray;\n }(ElementsArray));\n\n function optionsAccessor(name) {\n return function(value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n\n return this.options.get(name);\n };\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\n var withOptions = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineOptionsAccessors(result.prototype, names);\n\n return result;\n };\n\n var options = [ \"offset\", \"color\", \"opacity\" ];\n\n var GradientStop = (function (superclass) {\n function GradientStop(offset, color, opacity) {\n superclass.call(this);\n\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n\n this.options.addObserver(this);\n }\n\n extendStatic(GradientStop, superclass);\n GradientStop.prototype = Object.create( superclass && superclass.prototype );\n GradientStop.prototype.constructor = GradientStop;\n GradientStop.fn = GradientStop.prototype;\n GradientStop.fn.init = GradientStop.fn.constructor;\n\n GradientStop.create = function create (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n\n return stop;\n }\n };\n\n return GradientStop;\n }(withOptions(HasObservers, options)));\n\n var Gradient = (function (HasObservers$$1) {\n function Gradient(options) {\n if (options === void 0) { options = {}; }\n\n HasObservers$$1.call(this);\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\n extendStatic(Gradient, HasObservers$$1);\n Gradient.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Gradient.prototype.constructor = Gradient;\n Gradient.fn = Gradient.prototype;\n Gradient.fn.init = Gradient.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Gradient\";\n };\n\n Gradient.prototype.userSpace = function userSpace (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n\n return this._userSpace;\n };\n\n Gradient.prototype._createStops = function _createStops (stops) {\n if (stops === void 0) { stops = []; }\n\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n\n return result;\n };\n\n Gradient.prototype.addStop = function addStop (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n };\n\n Gradient.prototype.removeStop = function removeStop (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n };\n\n Gradient.prototype.optionsChange = function optionsChange (e) {\n this.trigger(\"optionsChange\", {\n field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n value: this\n });\n };\n\n Gradient.prototype.geometryChange = function geometryChange () {\n this.optionsChange();\n };\n\n Object.defineProperties( Gradient.prototype, prototypeAccessors );\n\n return Gradient;\n }(HasObservers));\n\n var points$1 = [ \"start\", \"end\" ];\n\n var LinearGradient = (function (superclass) {\n function LinearGradient(options) {\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n\n extendStatic(LinearGradient, superclass);\n LinearGradient.prototype = Object.create( superclass && superclass.prototype );\n LinearGradient.prototype.constructor = LinearGradient;\n LinearGradient.fn = LinearGradient.prototype;\n LinearGradient.fn.init = LinearGradient.fn.constructor;\n\n return LinearGradient;\n }(withPoints(Gradient, points$1)));\n\n var RadialGradient = (function (superclass) {\n function RadialGradient(options) {\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n }\n\n extendStatic(RadialGradient, superclass);\n RadialGradient.prototype = Object.create( superclass && superclass.prototype );\n RadialGradient.prototype.constructor = RadialGradient;\n RadialGradient.fn = RadialGradient.prototype;\n RadialGradient.fn.init = RadialGradient.fn.constructor;\n\n RadialGradient.prototype.radius = function radius (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n\n return this._radius;\n };\n\n RadialGradient.prototype.fallbackFill = function fallbackFill (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n\n return this._fallbackFill;\n };\n\n return RadialGradient;\n }(withPoints(Gradient, [ \"center\" ])));\n\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n\n function linear(position) {\n return position;\n }\n\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158,\n p = 0,\n a = diff;\n\n if (position === 0) {\n return start;\n }\n\n if (position === 1) {\n return start + diff;\n }\n\n if (!p) {\n p = 0.5;\n }\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\n return a * Math.pow(2, -10 * position) *\n Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n\n var easingFunctions = {\n \tswing: swing,\n \tlinear: linear,\n \teaseOutElastic: easeOutElastic\n };\n\n var instance;\n\n var AnimationFactory = (function (Class$$1) {\n function AnimationFactory() {\n Class$$1.call(this);\n\n this._items = [];\n }\n\n extendStatic(AnimationFactory, Class$$1);\n AnimationFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n AnimationFactory.prototype.constructor = AnimationFactory;\n AnimationFactory.fn = AnimationFactory.prototype;\n AnimationFactory.fn.init = AnimationFactory.fn.constructor;\n\n var staticAccessors = { current: {} };\n\n staticAccessors.current.get = function () {\n if (!instance) {\n instance = new AnimationFactory();\n }\n\n return instance;\n };\n\n AnimationFactory.prototype.register = function register (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n };\n\n AnimationFactory.prototype.create = function create (element, options) {\n var items = this._items;\n var match;\n\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\n if (match) {\n return new match.type(element, options);\n }\n };\n\n Object.defineProperties( AnimationFactory, staticAccessors );\n\n return AnimationFactory;\n }(Class));\n\n var Animation = (function (Class$$1) {\n function Animation(element, options) {\n Class$$1.call(this);\n\n this.options = $.extend({}, this.options, options);\n this.element = element;\n }\n\n extendStatic(Animation, Class$$1);\n Animation.prototype = Object.create( Class$$1 && Class$$1.prototype );\n Animation.prototype.constructor = Animation;\n Animation.fn = Animation.prototype;\n Animation.fn.init = Animation.fn.constructor;\n\n var prototypeAccessors = { options: {} };\n\n Animation.create = function create (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n\n prototypeAccessors.options.get = function () {\n return this._options || {\n duration: 500,\n easing: \"swing\"\n };\n };\n\n prototypeAccessors.options.set = function (value) {\n this._options = value;\n };\n\n Animation.prototype.setup = function setup () {};\n Animation.prototype.step = function step () {};\n\n Animation.prototype.play = function play () {\n var this$1$1 = this;\n\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay; if (delay === void 0) { delay = 0; }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1$1._stopped) {\n return;\n }\n\n var wallTime = now();\n\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n\n this$1$1.step(easingPosition);\n\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1$1.abort();\n }\n };\n\n loop();\n }, delay);\n }\n };\n\n Animation.prototype.abort = function abort () {\n this._stopped = true;\n };\n\n Animation.prototype.destroy = function destroy () {\n this.abort();\n };\n\n Object.defineProperties( Animation.prototype, prototypeAccessors );\n\n return Animation;\n }(Class));\n\n var instance$1;\n\n var PathParser = (function (Class$$1) {\n function PathParser () {\n Class$$1.apply(this, arguments);\n }\n\n extendStatic(PathParser, Class$$1);\n PathParser.prototype = Object.create( Class$$1 && Class$$1.prototype );\n PathParser.prototype.constructor = PathParser;\n PathParser.fn = PathParser.prototype;\n PathParser.fn.init = PathParser.fn.constructor;\n\n var staticAccessors = { current: {} };\n\n staticAccessors.current.get = function () {\n if (!instance$1) {\n instance$1 = new PathParser();\n }\n\n return instance$1;\n };\n\n PathParser.prototype.parse = function parse (str, options) {\n var multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n };\n\n Object.defineProperties( PathParser, staticAccessors );\n\n return PathParser;\n }(Class));\n\n var BaseNode = (function (Class$$1) {\n function BaseNode(srcElement) {\n Class$$1.call(this);\n\n this.childNodes = [];\n this.parent = null;\n\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n\n extendStatic(BaseNode, Class$$1);\n BaseNode.prototype = Object.create( Class$$1 && Class$$1.prototype );\n BaseNode.prototype.constructor = BaseNode;\n BaseNode.fn = BaseNode.prototype;\n BaseNode.fn.init = BaseNode.fn.constructor;\n\n BaseNode.prototype.destroy = function destroy () {\n var this$1$1 = this;\n\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1$1.childNodes[i].destroy();\n }\n\n this.parent = null;\n };\n\n BaseNode.prototype.load = function load () {};\n\n BaseNode.prototype.observe = function observe () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n };\n\n BaseNode.prototype.append = function append (node) {\n this.childNodes.push(node);\n node.parent = this;\n };\n\n BaseNode.prototype.insertAt = function insertAt (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n };\n\n BaseNode.prototype.remove = function remove (index, count) {\n var this$1$1 = this;\n\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n };\n\n BaseNode.prototype.removeSelf = function removeSelf () {\n this.clear();\n this.destroy();\n };\n\n BaseNode.prototype.clear = function clear () {\n this.remove(0, this.childNodes.length);\n };\n\n BaseNode.prototype.invalidate = function invalidate () {\n if (this.parent) {\n this.parent.invalidate();\n }\n };\n\n BaseNode.prototype.geometryChange = function geometryChange () {\n this.invalidate();\n };\n\n BaseNode.prototype.optionsChange = function optionsChange () {\n this.invalidate();\n };\n\n BaseNode.prototype.childrenChange = function childrenChange (e) {\n if (e.action === \"add\") {\n this.load(e.items, e.index);\n } else if (e.action === \"remove\") {\n this.remove(e.index, e.items.length);\n }\n\n this.invalidate();\n };\n\n return BaseNode;\n }(Class));\n\n var events = [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\"\n ];\n\n var Surface$2 = (function (Observable$$1) {\n function Surface(element, options) {\n Observable$$1.call(this);\n\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n\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\n this._visual = new Group();\n\n elementSize(element, this.options);\n\n this.bind(events, this.options);\n\n this._enableTracking();\n }\n\n extendStatic(Surface, Observable$$1);\n Surface.prototype = Object.create( Observable$$1 && Observable$$1.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n Surface.prototype.draw = function draw (element) {\n this._visual.children.push(element);\n };\n\n Surface.prototype.clear = function clear () {\n this._visual.children = [];\n };\n\n Surface.prototype.destroy = function destroy () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n };\n\n Surface.prototype.eventTarget = function eventTarget (e) {\n var this$1$1 = this;\n\n var domNode = eventElement(e);\n var node;\n\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1$1.element) {\n break;\n }\n\n domNode = domNode.parentElement;\n }\n\n if (node) {\n return node.srcElement;\n }\n };\n\n Surface.prototype.exportVisual = function exportVisual () {\n return this._visual;\n };\n\n Surface.prototype.getSize = function getSize () {\n return elementSize(this.element);\n };\n\n Surface.prototype.currentSize = function currentSize (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n };\n\n Surface.prototype.setSize = function setSize (size) {\n elementSize(this.element, size);\n\n this.currentSize(size);\n this._resize();\n };\n\n Surface.prototype.resize = function resize (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n\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\n Surface.prototype.size = function size (value) {\n if (!value) {\n return this.getSize();\n }\n\n this.setSize(value);\n };\n\n Surface.prototype.suspendTracking = function suspendTracking () {\n this._suspendedTracking = true;\n };\n\n Surface.prototype.resumeTracking = function resumeTracking () {\n this._suspendedTracking = false;\n };\n\n Surface.prototype._enableTracking = function _enableTracking () {};\n\n Surface.prototype._resize = function _resize () {};\n\n Surface.prototype._handler = function _handler (eventName) {\n var this$1$1 = this;\n\n return function (e) {\n var node = this$1$1.eventTarget(e);\n if (node && !this$1$1._suspendedTracking) {\n this$1$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n };\n\n Surface.prototype._elementOffset = function _elementOffset () {\n var element = this.element;\n var padding = elementPadding(element);\n var ref = elementOffset(element);\n var left = ref.left;\n var top = ref.top;\n\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n };\n\n Surface.prototype._surfacePoint = function _surfacePoint (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n\n var inverseTransform = elementScale(this.element).invert();\n var point = new Point(\n x,\n y\n ).transform(inverseTransform);\n\n return point;\n };\n\n return Surface;\n }(kendo.Observable));\n\n function renderAttr(name, value) {\n return (defined(value) && value !== null) ? (\" \" + name + \"=\\\"\" + value + \"\\\" \") : \"\";\n }\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\n return output;\n }\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\n if (output !== \"\") {\n return output;\n }\n }\n\n var NODE_MAP = {};\n\n var SVG_NS = \"http://www.w3.org/2000/svg\";\n var NONE = \"none\";\n var POINT_DIGITS = 3;\n\n var applyStyle = function (styleString, element) { return styleString.split(';').filter(function (s) { return s !== ''; }).forEach(function (s) {\n var parts = s.split(':');\n element.style[parts[0].trim()] = parts[1].trim();\n }); };\n\n var styleAttr = 'data-style';\n var replaceStyleAttr = function (html) { return html.replace(/\\sstyle=/g, ' ' + styleAttr + '='); };\n var restoreStyleAttr = function (container) {\n Array.from(container.querySelectorAll('[' + styleAttr +']')).forEach(function (element) {\n var styleString = element.getAttribute(styleAttr);\n element.removeAttribute(styleAttr);\n applyStyle(styleString, element);\n });\n };\n\n var renderSVG = function(container, svg) {\n container.innerHTML = replaceStyleAttr(svg);\n restoreStyleAttr(container);\n };\n\n if (typeof document !== \"undefined\") {\n var testFragment = \"\";\n var testContainer = document.createElement(\"div\");\n var hasParser = typeof DOMParser !== \"undefined\";\n\n testContainer.innerHTML = testFragment;\n\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function(container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(replaceStyleAttr(svg), \"text/xml\");\n restoreStyleAttr(chartDoc);\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n\n container.innerHTML = \"\";\n container.appendChild(importedDoc);\n };\n }\n }\n\n var renderSVG$1 = renderSVG;\n\n var TRANSFORM = \"transform\";\n var DefinitionMap = {\n clip: \"clip-path\",\n fill: \"fill\"\n };\n\n function isDefinition(type, value) {\n return type === \"clip\" || (type === \"fill\" && (!value || value.nodeType === \"Gradient\"));\n }\n\n function baseUrl() {\n var base = document.getElementsByTagName(\"base\")[0];\n var href = document.location.href;\n var url = \"\";\n\n if (base && !(supportBrowser || {}).msie) {\n var hashIndex = href.indexOf(\"#\");\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n\n url = href;\n }\n\n return url;\n }\n\n var Node = (function (BaseNode$$1) {\n function Node(srcElement, options) {\n BaseNode$$1.call(this, srcElement);\n this.definitions = {};\n\n this.options = options;\n }\n\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n\n Node.prototype.destroy = function destroy () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n\n this.clearDefinitions();\n BaseNode$$1.prototype.destroy.call(this);\n };\n\n Node.prototype.load = function load (elements, pos) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1$1.options);\n\n if (defined(pos)) {\n this$1$1.insertAt(childNode, pos);\n } else {\n this$1$1.append(childNode);\n }\n\n childNode.createDefinitions();\n\n if (children && children.length > 0) {\n childNode.load(children);\n }\n\n var element = this$1$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n };\n\n Node.prototype.root = function root () {\n var root = this;\n\n while (root.parent) {\n root = root.parent;\n }\n\n return root;\n };\n\n Node.prototype.attachTo = function attachTo (domElement, pos) {\n var container = document.createElement(\"div\");\n renderSVG$1(container,\n \"\" +\n this.render() +\n \"\"\n );\n\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\n Node.prototype.setElement = function setElement (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n\n this.element = element;\n this.element._kendoNode = this;\n\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\n Node.prototype.clear = function clear () {\n this.clearDefinitions();\n\n if (this.element) {\n this.element.innerHTML = \"\";\n }\n\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n\n this.childNodes = [];\n };\n\n Node.prototype.removeSelf = function removeSelf () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n\n BaseNode$$1.prototype.removeSelf.call(this);\n };\n\n Node.prototype.template = function template () {\n return this.renderChildren();\n };\n\n Node.prototype.render = function render () {\n return this.template();\n };\n\n Node.prototype.renderChildren = function renderChildren () {\n var nodes = this.childNodes;\n var output = \"\";\n\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n\n return output;\n };\n\n Node.prototype.optionsChange = function optionsChange (e) {\n var field = e.field;\n var value = e.value;\n\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\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n\n Node.prototype.accessibilityOptionsChange = function accessibilityOptionsChange (e) {\n var field = e.field;\n var value = e.value;\n\n if (field === \"role\") {\n if (value) {\n this.attr(\"role\", value);\n } else {\n this.removeAttr(\"role\");\n }\n } else if (field === \"ariaLabel\") {\n if (value) {\n this.attr(\"aria-label\", htmlEncode(value));\n } else {\n this.removeAttr(\"aria-label\");\n }\n } else if (field === \"ariaRoleDescription\") {\n if (value) {\n this.attr(\"aria-roledescription\", htmlEncode(value));\n } else {\n this.removeAttr(\"aria-roledescription\");\n }\n } else if (field === \"ariaChecked\") {\n if (defined(value)) {\n this.attr(\"aria-checked\", value);\n } else {\n this.removeAttr(\"aria-checked\");\n }\n } else if (field === \"className\") {\n this.className(value);\n }\n };\n\n Node.prototype.attr = function attr (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n };\n\n Node.prototype.allAttr = function allAttr (attrs) {\n var this$1$1 = this;\n\n for (var i = 0; i < attrs.length; i++) {\n this$1$1.attr(attrs[i][0], attrs[i][1]);\n }\n };\n\n Node.prototype.toggleAttr = function toggleAttr (name, value) {\n if (value) {\n this.attr(name, value);\n } else {\n this.removeAttr(name);\n }\n };\n\n Node.prototype.css = function css (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n };\n\n Node.prototype.allCss = function allCss (styles) {\n var this$1$1 = this;\n\n for (var i = 0; i < styles.length; i++) {\n this$1$1.css(styles[i][0], styles[i][1]);\n }\n };\n\n Node.prototype.className = function className (value) {\n var this$1$1 = this;\n\n if (this.element) {\n (ref = this.element.classList).remove.apply(ref, this.element.classList);\n value.split(\" \").forEach(function (item) {\n this$1$1.element.classList.add(item);\n });\n }\n var ref;\n };\n\n Node.prototype.removeAttr = function removeAttr (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n };\n\n Node.prototype.mapTransform = function mapTransform (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n \"matrix(\" + transform.matrix().toString(6) + \")\"\n ]);\n }\n\n return attrs;\n };\n\n Node.prototype.renderTransform = function renderTransform () {\n return renderAllAttr(\n this.mapTransform(this.srcElement.transform())\n );\n };\n\n Node.prototype.transformChange = function transformChange (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n };\n\n Node.prototype.mapStyle = function mapStyle () {\n var options = this.srcElement.options;\n var style = [ [ \"cursor\", options.cursor ] ];\n\n if (options.visible === false) {\n style.push([ \"display\", NONE ]);\n }\n\n return style;\n };\n\n Node.prototype.renderStyle = function renderStyle$1 () {\n return renderAttr(\"style\", renderStyle(this.mapStyle(true)));\n };\n\n Node.prototype.renderOpacity = function renderOpacity () {\n return renderAttr(\"opacity\", this.srcElement.options.opacity);\n };\n\n Node.prototype.renderId = function renderId () {\n return renderAttr(\"id\", this.srcElement.options.id);\n };\n\n Node.prototype.renderClassName = function renderClassName () {\n return renderAttr(\"class\", this.srcElement.options.className);\n };\n\n Node.prototype.renderRole = function renderRole () {\n return renderAttr(\"role\", this.srcElement.options.role);\n };\n\n Node.prototype.renderAriaLabel = function renderAriaLabel () {\n var value = this.srcElement.options.ariaLabel;\n if (value) {\n value = htmlEncode(value);\n }\n return renderAttr(\"aria-label\", value);\n };\n\n Node.prototype.renderAriaRoleDescription = function renderAriaRoleDescription () {\n var value = this.srcElement.options.ariaRoleDescription;\n if (value) {\n value = htmlEncode(value);\n }\n return renderAttr(\"aria-roledescription\", value);\n };\n\n Node.prototype.renderAriaChecked = function renderAriaChecked () {\n return renderAttr(\"aria-checked\", this.srcElement.options.ariaChecked);\n };\n\n Node.prototype.createDefinitions = function createDefinitions () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n\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\n Node.prototype.definitionChange = function definitionChange (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n };\n\n Node.prototype.updateDefinition = function updateDefinition (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: \"remove\",\n definitions: definition\n });\n delete definitions[type];\n }\n\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\n Node.prototype.clearDefinitions = function clearDefinitions () {\n var definitions = this.definitions;\n\n this.definitionChange({\n action: \"remove\",\n definitions: definitions\n });\n this.definitions = {};\n };\n\n Node.prototype.renderDefinitions = function renderDefinitions () {\n return renderAllAttr(this.mapDefinitions());\n };\n\n Node.prototype.mapDefinitions = function mapDefinitions () {\n var this$1$1 = this;\n\n var definitions = this.definitions;\n var attrs = [];\n\n for (var field in definitions) {\n attrs.push([ DefinitionMap[field], this$1$1.refUrl(definitions[field].id) ]);\n }\n\n return attrs;\n };\n\n Node.prototype.refUrl = function refUrl (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, \"\\\\'\");\n var base = skipBaseHref ? '' : baseHref;\n return (\"url(\" + base + \"#\" + id + \")\");\n };\n\n Node.prototype.baseUrl = function baseUrl$1 () {\n return baseUrl();\n };\n\n return Node;\n }(BaseNode));\n\n var GradientStopNode = (function (Node$$1) {\n function GradientStopNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(GradientStopNode, Node$$1);\n GradientStopNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GradientStopNode.prototype.constructor = GradientStopNode;\n GradientStopNode.fn = GradientStopNode.prototype;\n GradientStopNode.fn.init = GradientStopNode.fn.constructor;\n\n GradientStopNode.prototype.template = function template () {\n return (\"\");\n };\n\n GradientStopNode.prototype.renderOffset = function renderOffset () {\n return renderAttr(\"offset\", this.srcElement.offset());\n };\n\n GradientStopNode.prototype.mapStyle = function mapStyle () {\n var srcElement = this.srcElement;\n return [\n [ \"stop-color\", srcElement.color() ],\n [ \"stop-opacity\", srcElement.opacity() ]\n ];\n };\n\n GradientStopNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"offset\") {\n this.attr(e.field, e.value);\n } else if (e.field === \"color\" || e.field === \"opacity\") {\n this.css(\"stop-\" + e.field, e.value);\n }\n };\n\n return GradientStopNode;\n }(Node));\n\n var GradientNode = (function (Node$$1) {\n function GradientNode(srcElement) {\n Node$$1.call(this, srcElement);\n\n this.id = srcElement.id;\n\n this.loadStops();\n }\n\n extendStatic(GradientNode, Node$$1);\n GradientNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GradientNode.prototype.constructor = GradientNode;\n GradientNode.fn = GradientNode.prototype;\n GradientNode.fn.init = GradientNode.fn.constructor;\n\n GradientNode.prototype.loadStops = function loadStops () {\n var this$1$1 = this;\n\n var stops = this.srcElement.stops;\n var element = this.element;\n\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n };\n\n GradientNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"gradient.stops\") {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === \"gradient\") {\n this.allAttr(this.mapCoordinates());\n }\n };\n\n GradientNode.prototype.renderCoordinates = function renderCoordinates () {\n return renderAllAttr(this.mapCoordinates());\n };\n\n GradientNode.prototype.mapSpace = function mapSpace () {\n return [ \"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\" ];\n };\n\n return GradientNode;\n }(Node));\n\n var LinearGradientNode = (function (GradientNode$$1) {\n function LinearGradientNode () {\n GradientNode$$1.apply(this, arguments);\n }\n\n extendStatic(LinearGradientNode, GradientNode$$1);\n LinearGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n LinearGradientNode.prototype.constructor = LinearGradientNode;\n LinearGradientNode.fn = LinearGradientNode.prototype;\n LinearGradientNode.fn.init = LinearGradientNode.fn.constructor;\n\n LinearGradientNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n LinearGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [ \"x1\", start.x ],\n [ \"y1\", start.y ],\n [ \"x2\", end.x ],\n [ \"y2\", end.y ],\n this.mapSpace()\n ];\n\n return attrs;\n };\n\n return LinearGradientNode;\n }(GradientNode));\n\n var RadialGradientNode = (function (GradientNode$$1) {\n function RadialGradientNode () {\n GradientNode$$1.apply(this, arguments);\n }\n\n extendStatic(RadialGradientNode, GradientNode$$1);\n RadialGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n RadialGradientNode.prototype.constructor = RadialGradientNode;\n RadialGradientNode.fn = RadialGradientNode.prototype;\n RadialGradientNode.fn.init = RadialGradientNode.fn.constructor;\n\n RadialGradientNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n RadialGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [ \"cx\", center.x ],\n [ \"cy\", center.y ],\n [ \"r\", radius ],\n this.mapSpace()\n ];\n return attrs;\n };\n\n return RadialGradientNode;\n }(GradientNode));\n\n var ClipNode = (function (Node$$1) {\n function ClipNode(srcElement) {\n Node$$1.call(this);\n\n this.srcElement = srcElement;\n this.id = srcElement.id;\n\n this.load([ srcElement ]);\n }\n\n extendStatic(ClipNode, Node$$1);\n ClipNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n ClipNode.prototype.constructor = ClipNode;\n ClipNode.fn = ClipNode.prototype;\n ClipNode.fn.init = ClipNode.fn.constructor;\n\n ClipNode.prototype.renderClipRule = function renderClipRule () {\n return renderAttr(\"clip-rule\", \"evenodd\");\n };\n ClipNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n return ClipNode;\n }(Node));\n\n var DefinitionNode = (function (Node$$1) {\n function DefinitionNode() {\n Node$$1.call(this);\n this.definitionMap = {};\n }\n\n extendStatic(DefinitionNode, Node$$1);\n DefinitionNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n DefinitionNode.prototype.constructor = DefinitionNode;\n DefinitionNode.fn = DefinitionNode.prototype;\n DefinitionNode.fn.init = DefinitionNode.fn.constructor;\n\n DefinitionNode.prototype.attachTo = function attachTo (domElement) {\n this.element = domElement;\n };\n\n DefinitionNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n DefinitionNode.prototype.definitionChange = function definitionChange (e) {\n var definitions = e.definitions;\n var action = e.action;\n\n if (action === \"add\") {\n this.addDefinitions(definitions);\n } else if (action === \"remove\") {\n this.removeDefinitions(definitions);\n }\n };\n\n DefinitionNode.prototype.createDefinition = function createDefinition (type, item) {\n var nodeType;\n if (type === \"clip\") {\n nodeType = ClipNode;\n } else if (type === \"fill\") {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n };\n\n DefinitionNode.prototype.addDefinitions = function addDefinitions (definitions) {\n var this$1$1 = this;\n\n for (var field in definitions) {\n this$1$1.addDefinition(field, definitions[field]);\n }\n };\n\n DefinitionNode.prototype.addDefinition = function addDefinition (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n };\n\n DefinitionNode.prototype.removeDefinitions = function removeDefinitions (definitions) {\n var this$1$1 = this;\n\n for (var field in definitions) {\n this$1$1.removeDefinition(definitions[field]);\n }\n };\n\n DefinitionNode.prototype.removeDefinition = function removeDefinition (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n\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 return DefinitionNode;\n }(Node));\n\n var RootNode = (function (Node$$1) {\n function RootNode(options) {\n Node$$1.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n }\n\n extendStatic(RootNode, Node$$1);\n RootNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n\n RootNode.prototype.attachTo = function attachTo (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n };\n\n RootNode.prototype.clear = function clear () {\n BaseNode.prototype.clear.call(this);\n };\n\n RootNode.prototype.template = function template () {\n return this.defs.render() + this.renderChildren();\n };\n\n RootNode.prototype.definitionChange = function definitionChange (e) {\n this.defs.definitionChange(e);\n };\n\n return RootNode;\n }(Node));\n\n var DASH_ARRAYS = {\n dot: [ 1.5, 3.5 ],\n dash: [ 4, 3.5 ],\n longdash: [ 8, 3.5 ],\n dashdot: [ 3.5, 3.5, 1.5, 3.5 ],\n longdashdot: [ 8, 3.5, 1.5, 3.5 ],\n longdashdotdot: [ 8, 3.5, 1.5, 3.5, 1.5, 3.5 ]\n };\n\n var SOLID = \"solid\";\n var BUTT = \"butt\";\n\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\n var PathNode = (function (Node$$1) {\n function PathNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(PathNode, Node$$1);\n PathNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n\n PathNode.prototype.geometryChange = function geometryChange () {\n this.attr(\"d\", this.renderData());\n this.invalidate();\n };\n\n PathNode.prototype.optionsChange = function optionsChange (e) {\n switch (e.field) {\n case \"fill\":\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr(\"fill\");\n }\n break;\n\n case \"fill.color\":\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n\n case \"stroke\":\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr(\"stroke\");\n }\n break;\n\n case \"transform\":\n this.transformChange(e.value);\n break;\n\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n\n this.accessibilityOptionsChange(e);\n\n Node$$1.prototype.optionsChange.call(this, e);\n };\n\n PathNode.prototype.content = function content () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n };\n\n PathNode.prototype.renderData = function renderData () {\n return this.srcElement.toString(POINT_DIGITS) || undefined;\n };\n\n PathNode.prototype.mapStroke = function mapStroke (stroke) {\n var attrs = [];\n\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([ \"stroke\", stroke.color ]);\n attrs.push([ \"stroke-width\", stroke.width ]);\n attrs.push([ \"stroke-linecap\", this.renderLinecap(stroke) ]);\n attrs.push([ \"stroke-linejoin\", stroke.lineJoin ]);\n\n if (defined(stroke.opacity)) {\n attrs.push([ \"stroke-opacity\", stroke.opacity ]);\n }\n\n if (defined(stroke.dashType)) {\n attrs.push([ \"stroke-dasharray\", this.renderDashType(stroke) ]);\n }\n } else {\n attrs.push([ \"stroke\", NONE ]);\n }\n\n return attrs;\n };\n\n PathNode.prototype.renderStroke = function renderStroke () {\n return renderAllAttr(\n this.mapStroke(this.srcElement.options.stroke)\n );\n };\n\n PathNode.prototype.renderDashType = function renderDashType (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width; if (width === void 0) { width = 1; }\n\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n\n return result.join(\" \");\n }\n };\n\n PathNode.prototype.renderLinecap = function renderLinecap (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n\n return (dashType && dashType !== \"solid\") ? BUTT : lineCap;\n };\n\n PathNode.prototype.mapFill = function mapFill (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === \"Gradient\")) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([ \"fill\", fill.color ]);\n\n if (defined(fill.opacity)) {\n attrs.push([ \"fill-opacity\", fill.opacity ]);\n }\n } else {\n attrs.push([ \"fill\", NONE ]);\n }\n }\n\n return attrs;\n };\n\n PathNode.prototype.renderFill = function renderFill () {\n return renderAllAttr(\n this.mapFill(this.srcElement.options.fill)\n );\n };\n\n PathNode.prototype.template = function template () {\n return \"\";\n };\n\n return PathNode;\n }(Node));\n\n var ArcNode = (function (PathNode$$1) {\n function ArcNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(ArcNode, PathNode$$1);\n ArcNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n\n ArcNode.prototype.renderData = function renderData () {\n return this.srcElement.toPath().toString(POINT_DIGITS);\n };\n\n return ArcNode;\n }(PathNode));\n\n var CircleNode = (function (PathNode$$1) {\n function CircleNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(CircleNode, PathNode$$1);\n CircleNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n\n CircleNode.prototype.geometryChange = function geometryChange () {\n var center = this.center();\n this.attr(\"cx\", center.x);\n this.attr(\"cy\", center.y);\n this.attr(\"r\", this.radius());\n this.invalidate();\n };\n\n CircleNode.prototype.center = function center () {\n return this.srcElement.geometry().center;\n };\n\n CircleNode.prototype.radius = function radius () {\n return this.srcElement.geometry().radius;\n };\n\n CircleNode.prototype.template = function template () {\n return \"\";\n };\n\n return CircleNode;\n }(PathNode));\n\n var GroupNode = (function (Node$$1) {\n function GroupNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(GroupNode, Node$$1);\n GroupNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n\n GroupNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n GroupNode.prototype.optionsChange = function optionsChange (e) {\n var field = e.field;\n var value = e.value;\n\n if (field === \"transform\") {\n this.transformChange(value);\n }\n\n this.accessibilityOptionsChange(e);\n\n Node$$1.prototype.optionsChange.call(this, e);\n };\n\n return GroupNode;\n }(Node));\n\n var ImageNode = (function (PathNode$$1) {\n function ImageNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(ImageNode, PathNode$$1);\n ImageNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n\n ImageNode.prototype.geometryChange = function geometryChange () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n };\n\n ImageNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"src\") {\n this.allAttr(this.mapSource());\n }\n\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n\n ImageNode.prototype.mapPosition = function mapPosition () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n\n return [\n [ \"x\", tl.x ],\n [ \"y\", tl.y ],\n [ \"width\", rect.width() + \"px\" ],\n [ \"height\", rect.height() + \"px\" ]\n ];\n };\n\n ImageNode.prototype.renderPosition = function renderPosition () {\n return renderAllAttr(this.mapPosition());\n };\n\n ImageNode.prototype.mapSource = function mapSource (encode) {\n var src = this.srcElement.src();\n\n if (encode) {\n src = htmlEncode(src);\n }\n\n return [ [ \"xlink:href\", src ] ];\n };\n\n ImageNode.prototype.renderSource = function renderSource () {\n return renderAllAttr(this.mapSource(true));\n };\n\n ImageNode.prototype.template = function template () {\n return \"\" +\n \"\";\n };\n\n return ImageNode;\n }(PathNode));\n\n var MultiPathNode = (function (PathNode$$1) {\n function MultiPathNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(MultiPathNode, PathNode$$1);\n MultiPathNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n MultiPathNode.prototype.renderData = function renderData () {\n return this.srcElement.toString(POINT_DIGITS) || 'undefined';\n };\n\n return MultiPathNode;\n }(PathNode));\n\n var RectNode = (function (PathNode$$1) {\n function RectNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(RectNode, PathNode$$1);\n RectNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n\n RectNode.prototype.geometryChange = function geometryChange () {\n var geometry = this.srcElement.geometry();\n this.attr(\"x\", geometry.origin.x);\n this.attr(\"y\", geometry.origin.y);\n this.attr(\"width\", geometry.size.width);\n this.attr(\"height\", geometry.size.height);\n this.attr(\"rx\", geometry.cornerRadius[0]);\n this.attr(\"ry\", geometry.cornerRadius[1]);\n this.invalidate();\n };\n\n RectNode.prototype.size = function size () {\n return this.srcElement.geometry().size;\n };\n\n RectNode.prototype.origin = function origin () {\n return this.srcElement.geometry().origin;\n };\n\n RectNode.prototype.rx = function rx () {\n return this.srcElement.geometry().cornerRadius[0];\n };\n\n RectNode.prototype.ry = function ry () {\n return this.srcElement.geometry().cornerRadius[1];\n };\n\n RectNode.prototype.template = function template () {\n return \"\";\n };\n\n return RectNode;\n }(PathNode));\n\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n\n function decodeEntities(text) {\n if (!text || typeof text !== \"string\" || !ENTITY_REGEX.test(text)) {\n return text;\n }\n\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n\n return element.textContent || element.innerText;\n });\n }\n\n if (typeof document !== \"undefined\") {\n decodeEntities._element = document.createElement(\"span\");\n }\n\n var TextNode = (function (PathNode$$1) {\n function TextNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(TextNode, PathNode$$1);\n TextNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n\n TextNode.prototype.geometryChange = function geometryChange () {\n var pos = this.pos();\n this.attr(\"x\", pos.x);\n this.attr(\"y\", pos.y);\n this.invalidate();\n };\n\n TextNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"font\") {\n this.attr(\"style\", renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === \"content\") {\n PathNode$$1.prototype.content.call(this, this.srcElement.content());\n }\n\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n\n TextNode.prototype.mapStyle = function mapStyle (encode) {\n var style = PathNode$$1.prototype.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n\n if (encode) {\n font = htmlEncode(font);\n }\n\n style.push([ \"font\", font ], [ \"white-space\", \"pre\" ]);\n\n return style;\n };\n\n TextNode.prototype.pos = function pos () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n };\n\n TextNode.prototype.renderContent = function renderContent () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = htmlEncode(content);\n\n return kendoUtil.normalizeText(content);\n };\n\n TextNode.prototype.renderTextAnchor = function renderTextAnchor () {\n var anchor;\n\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n\n return renderAttr(\"text-anchor\", anchor);\n };\n\n TextNode.prototype.renderPaintOrder = function renderPaintOrder () {\n var paintOrder = this.srcElement.options.paintOrder;\n return paintOrder ? renderAttr(\"paint-order\", paintOrder) : \"\";\n };\n\n TextNode.prototype.template = function template () {\n return \"\" + (this.renderContent()) + \"\";\n };\n\n return TextNode;\n }(PathNode));\n\n NODE_MAP.Arc = ArcNode;\n NODE_MAP.Circle = CircleNode;\n NODE_MAP.Group = GroupNode;\n NODE_MAP.Image = ImageNode;\n NODE_MAP.MultiPath = MultiPathNode;\n NODE_MAP.Path = PathNode;\n NODE_MAP.Rect = RectNode;\n NODE_MAP.Text = TextNode;\n\n var RTL = 'rtl';\n\n function alignToScreen(element) {\n var ctm;\n\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) { } // eslint-disable-line no-empty\n\n if (ctm) {\n var left = - ctm.e % 1;\n var top = - ctm.f % 1;\n var style = element.style;\n\n if (left !== 0 || top !== 0) {\n style.left = left + \"px\";\n style.top = top + \"px\";\n }\n }\n }\n\n var Surface$3 = (function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n\n this._root = new RootNode($.extend({\n rtl: elementStyles(element, 'direction').direction === RTL\n }, this.options));\n\n renderSVG$1(this.element, this._template(''));\n\n this._rootElement = this.element.firstElementChild;\n this._rootElement.style.width = '100%';\n this._rootElement.style.height = '100%';\n this._rootElement.style.overflow = 'hidden';\n\n alignToScreen(this._rootElement);\n\n this._root.attachTo(this._rootElement);\n\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n\n this.resize();\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var prototypeAccessors = { type: {} };\n\n prototypeAccessors.type.get = function () {\n return \"svg\";\n };\n\n Surface.prototype.destroy = function destroy () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n\n BaseSurface.prototype.destroy.call(this);\n };\n\n Surface.prototype.translate = function translate (offset) {\n var viewBox = (Math.round(offset.x)) + \" \" + (Math.round(offset.y)) + \" \" + (this._size.width) + \" \" + (this._size.height);\n\n this._offset = offset;\n this._rootElement.setAttribute(\"viewBox\", viewBox);\n };\n\n Surface.prototype.draw = function draw (element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([ element ]);\n };\n\n Surface.prototype.clear = function clear () {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n };\n\n Surface.prototype.svg = function svg () {\n return \"\" + this._template();\n };\n\n Surface.prototype.exportVisual = function exportVisual () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n\n wrap.transform(\n transform$1().translate(-offset.x, -offset.y)\n );\n\n visual = wrap;\n }\n\n return visual;\n };\n\n Surface.prototype._resize = function _resize () {\n if (this._offset) {\n this.translate(this._offset);\n }\n };\n\n Surface.prototype._template = function _template (svgStyles) {\n var styles = typeof svgStyles === 'string' ? svgStyles :\n \"style='width: 100%; height: 100%; overflow: hidden;' \";\n return (\"\" + (this._root.render()) + \"\");\n };\n\n Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n return Surface;\n }(Surface$2));\n\n var NODE_MAP$2 = {};\n\n var Node$2 = (function (BaseNode$$1) {\n function Node(srcElement) {\n BaseNode$$1.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n\n Node.prototype.initClip = function initClip () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n };\n\n Node.prototype.clear = function clear () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n this.clearClip();\n\n BaseNode$$1.prototype.clear.call(this);\n };\n\n Node.prototype.clearClip = function clearClip () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n };\n\n Node.prototype.setClip = function setClip (ctx) {\n if (this.clip) {\n ctx.beginPath();\n\n var clipNode = new NODE_MAP$2[this.clip.nodeType](this.clip);\n clipNode.renderPoints(ctx, this.clip);\n\n ctx.clip(\"evenodd\");\n }\n };\n\n Node.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"clip\") {\n this.clearClip();\n this.initClip();\n }\n\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n\n Node.prototype.setTransform = function setTransform (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n };\n\n Node.prototype.loadElements = function loadElements (elements, pos, cors) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n\n if (defined(pos)) {\n this$1$1.insertAt(childNode, pos);\n } else {\n this$1$1.append(childNode);\n }\n }\n };\n\n Node.prototype.load = function load (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n\n this.invalidate();\n };\n\n Node.prototype.setOpacity = function setOpacity (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n };\n\n Node.prototype.globalAlpha = function globalAlpha (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n };\n\n Node.prototype.visible = function visible () {\n var src = this.srcElement;\n return !src || (src && src.options.visible !== false);\n };\n\n return Node;\n }(BaseNode));\n\n var GroupNode$2 = (function (superclass) {\n function GroupNode () {\n superclass.apply(this, arguments);\n }\n\n extendStatic(GroupNode, superclass);\n GroupNode.prototype = Object.create( superclass && superclass.prototype );\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n\n GroupNode.prototype.renderTo = function renderTo (ctx) {\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\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\n ctx.restore();\n };\n\n return GroupNode;\n }(traversable(Node$2, \"childNodes\")));\n\n var FRAME_DELAY = 1000 / 60;\n\n var RootNode$2 = (function (superclass) {\n function RootNode(canvas, size) {\n superclass.call(this);\n\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext(\"2d\");\n\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n\n extendStatic(RootNode, superclass);\n RootNode.prototype = Object.create( superclass && superclass.prototype );\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n\n RootNode.prototype.destroy = function destroy () {\n superclass.prototype.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n };\n\n RootNode.prototype.load = function load (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n };\n\n RootNode.prototype._rescale = function _rescale (scale) {\n var ref = this;\n var canvas = ref.canvas;\n var size = ref.size;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n };\n\n RootNode.prototype._devicePixelRatio = function _devicePixelRatio () {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n\n return 1;\n };\n\n RootNode.prototype._invalidate = function _invalidate (options) {\n if (!this.ctx) {\n return;\n }\n\n var fixedScale = options && options.fixedScale;\n var scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n };\n\n return RootNode;\n }(traversable(GroupNode$2, \"childNodes\")));\n\n var QuadRoot = (function (Class$$1) {\n function QuadRoot() {\n Class$$1.call(this);\n\n this.shapes = [];\n }\n\n extendStatic(QuadRoot, Class$$1);\n QuadRoot.prototype = Object.create( Class$$1 && Class$$1.prototype );\n QuadRoot.prototype.constructor = QuadRoot;\n QuadRoot.fn = QuadRoot.prototype;\n QuadRoot.fn.init = QuadRoot.fn.constructor;\n\n QuadRoot.prototype._add = function _add (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n };\n\n QuadRoot.prototype.pointShapes = function pointShapes (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n };\n\n QuadRoot.prototype.insert = function insert (shape, bbox) {\n this._add(shape, bbox);\n };\n\n QuadRoot.prototype.remove = function remove (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n\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 return QuadRoot;\n }(Class));\n\n var QuadNode = (function (QuadRoot$$1) {\n function QuadNode(rect) {\n QuadRoot$$1.call(this);\n this.children = [];\n this.rect = rect;\n }\n\n extendStatic(QuadNode, QuadRoot$$1);\n QuadNode.prototype = Object.create( QuadRoot$$1 && QuadRoot$$1.prototype );\n QuadNode.prototype.constructor = QuadNode;\n QuadNode.fn = QuadNode.prototype;\n QuadNode.fn.init = QuadNode.fn.constructor;\n\n QuadNode.prototype.inBounds = function inBounds (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x &&\n bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n };\n\n QuadNode.prototype.pointShapes = function pointShapes (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot$$1.prototype.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append$1$1(result, children[idx].pointShapes(point));\n }\n return result;\n };\n\n QuadNode.prototype.insert = function insert (shape, bbox) {\n var children = this.children;\n var inserted = false;\n\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\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n\n return inserted;\n };\n\n QuadNode.prototype._initChildren = function _initChildren () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n\n children.push(\n new QuadNode(new Rect([ rect.origin.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ rect.origin.x, center.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, center.y ], [ halfWidth, halfHeight ]))\n );\n };\n\n return QuadNode;\n }(QuadRoot));\n\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n\n var ShapesQuadTree = (function (Class$$1) {\n function ShapesQuadTree() {\n Class$$1.call(this);\n\n this.initRoots();\n }\n\n extendStatic(ShapesQuadTree, Class$$1);\n ShapesQuadTree.prototype = Object.create( Class$$1 && Class$$1.prototype );\n ShapesQuadTree.prototype.constructor = ShapesQuadTree;\n ShapesQuadTree.fn = ShapesQuadTree.prototype;\n ShapesQuadTree.fn.init = ShapesQuadTree.fn.constructor;\n\n ShapesQuadTree.prototype.initRoots = function initRoots () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n };\n\n ShapesQuadTree.prototype.clear = function clear () {\n var this$1$1 = this;\n\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1$1.remove(rootElements[idx]);\n }\n this.initRoots();\n };\n\n ShapesQuadTree.prototype.pointShape = function pointShape (point) {\n var sectorRoot = ( this.rootMap[ Math.floor( point.x / ROOT_SIZE ) ] || {} )[ Math.floor( point.y / ROOT_SIZE ) ];\n var result = this.root.pointShapes(point);\n\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n\n this.assignZindex(result);\n\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\n ShapesQuadTree.prototype.assignZindex = function assignZindex (elements) {\n var this$1$1 = this;\n\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\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n\n elements[idx]._zIndex = zIndex;\n }\n };\n\n ShapesQuadTree.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"transform\" || e.field === \"stroke.width\") {\n this.bboxChange(e.element);\n }\n };\n\n ShapesQuadTree.prototype.geometryChange = function geometryChange (e) {\n this.bboxChange(e.element);\n };\n\n ShapesQuadTree.prototype.bboxChange = function bboxChange (element) {\n var this$1$1 = this;\n\n if (element.nodeType === \"Group\") {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1$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\n ShapesQuadTree.prototype.add = function add (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [ elements ];\n\n append$1$1(this.rootElements, elementsArray);\n this._insert(elementsArray);\n };\n\n ShapesQuadTree.prototype.childrenChange = function childrenChange (e) {\n var this$1$1 = this;\n\n if (e.action === \"remove\") {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n };\n\n ShapesQuadTree.prototype._insert = function _insert (elements) {\n var this$1$1 = this;\n\n var element;\n\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1$1);\n if (element.nodeType === \"Group\") {\n append$1$1(elements, element.children);\n } else {\n this$1$1._insertShape(element);\n }\n }\n };\n\n ShapesQuadTree.prototype._insertShape = function _insertShape (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n\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\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(\n new Rect([ x * ROOT_SIZE, y * ROOT_SIZE ], [ ROOT_SIZE, ROOT_SIZE ])\n );\n }\n\n rootMap[x][y].insert(shape, bbox);\n }\n }\n };\n\n ShapesQuadTree.prototype.remove = function remove (element) {\n var this$1$1 = this;\n\n element.removeObserver(this);\n\n if (element.nodeType === \"Group\") {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n };\n\n ShapesQuadTree.prototype.inRoot = function inRoot (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n };\n\n ShapesQuadTree.prototype.getSectors = function getSectors (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [ [], [] ];\n 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 return ShapesQuadTree;\n }(Class));\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\n return 0;\n }\n\n var SurfaceCursor = function SurfaceCursor(surface) {\n surface.bind(\"mouseenter\", this._mouseenter.bind(this));\n surface.bind(\"mouseleave\", this._mouseleave.bind(this));\n\n this.element = surface.element;\n };\n\n SurfaceCursor.prototype.clear = function clear () {\n this._resetCursor();\n };\n\n SurfaceCursor.prototype.destroy = function destroy () {\n this._resetCursor();\n delete this.element;\n };\n\n SurfaceCursor.prototype._mouseenter = function _mouseenter (e) {\n var cursor = this._shapeCursor(e);\n\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n\n this._setCursor(cursor);\n }\n };\n\n SurfaceCursor.prototype._mouseleave = function _mouseleave () {\n this._resetCursor();\n };\n\n SurfaceCursor.prototype._shapeCursor = function _shapeCursor (e) {\n var shape = e.element;\n\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n\n if (shape) {\n return shape.options.cursor;\n }\n };\n\n SurfaceCursor.prototype._getCursor = function _getCursor () {\n if (this.element) {\n return this.element.style.cursor;\n }\n };\n\n SurfaceCursor.prototype._setCursor = function _setCursor (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n };\n\n SurfaceCursor.prototype._resetCursor = function _resetCursor () {\n if (this._current) {\n this._setCursor(this._defaultCursor || \"\");\n delete this._current;\n }\n };\n\n function renderPath(ctx, path) {\n var segments = path.segments;\n\n if (segments.length === 0) {\n return;\n }\n\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y,\n controlIn.x, controlIn.y,\n anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n\n color.a *= stop.opacity();\n\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n\n var PathNode$2 = (function (Node) {\n function PathNode () {\n Node.apply(this, arguments);\n }\n\n extendStatic(PathNode, Node);\n PathNode.prototype = Object.create( Node && Node.prototype );\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n\n PathNode.prototype.renderTo = function renderTo (ctx) {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n this.renderPoints(ctx, this.srcElement);\n\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n\n this.setFill(ctx);\n this.setStroke(ctx);\n\n ctx.restore();\n };\n\n PathNode.prototype.setFill = function setFill (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n\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\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n\n hasFill = true;\n }\n }\n\n return hasFill;\n };\n\n PathNode.prototype.setGradientFill = function setGradientFill (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n\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\n addGradientStops(gradient, fill.stops);\n\n ctx.save();\n\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\n ctx.restore();\n };\n\n PathNode.prototype.setStroke = function setStroke (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.lineJoin = valueOrDefault(stroke.lineJoin, ctx.lineJoin);\n\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n\n return true;\n }\n };\n\n PathNode.prototype.dashType = function dashType () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n };\n\n PathNode.prototype.setLineDash = function setLineDash (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n };\n\n PathNode.prototype.setLineCap = function setLineCap (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n };\n\n PathNode.prototype.setLineJoin = function setLineJoin (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n };\n\n PathNode.prototype.renderPoints = function renderPoints (ctx, path) {\n renderPath(ctx, path);\n };\n\n return PathNode;\n }(Node$2));\n\n var ArcNode$2 = (function (PathNode) {\n function ArcNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(ArcNode, PathNode);\n ArcNode.prototype = Object.create( PathNode && PathNode.prototype );\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n\n ArcNode.prototype.renderPoints = function renderPoints (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n };\n\n return ArcNode;\n }(PathNode$2));\n\n var CircleNode$2 = (function (PathNode) {\n function CircleNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(CircleNode, PathNode);\n CircleNode.prototype = Object.create( PathNode && PathNode.prototype );\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n\n CircleNode.prototype.renderPoints = function renderPoints (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n };\n\n return CircleNode;\n }(PathNode$2));\n\n var ImageNode$2 = (function (PathNode) {\n function ImageNode(srcElement, cors) {\n PathNode.call(this, srcElement);\n\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n\n this.loading = createPromise();\n\n var img = this.img = new Image();\n var src = srcElement.src();\n\n if (cors && !(/^data:/i.test(src))) {\n img.crossOrigin = cors;\n }\n\n if (src) {\n img.src = src;\n }\n\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n }\n\n extendStatic(ImageNode, PathNode);\n ImageNode.prototype = Object.create( PathNode && PathNode.prototype );\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n\n ImageNode.prototype.renderTo = function renderTo (ctx) {\n if (this.loading.state() === \"resolved\") {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n\n this.drawImage(ctx);\n\n ctx.restore();\n }\n };\n\n ImageNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"src\") {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode.prototype.optionsChange.call(this, e);\n }\n };\n\n ImageNode.prototype.onLoad = function onLoad () {\n this.loading.resolve();\n this.invalidate();\n };\n\n ImageNode.prototype.onError = function onError () {\n this.loading.reject(new Error(\n \"Unable to load image '\" + this.img.src +\n \"'. Check for connectivity and verify CORS headers.\"\n ));\n };\n\n ImageNode.prototype.drawImage = function drawImage (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n\n ctx.drawImage(\n this.img, topLeft.x, topLeft.y, rect.width(), rect.height()\n );\n };\n\n return ImageNode;\n }(PathNode$2));\n\n var MultiPathNode$2 = (function (PathNode) {\n function MultiPathNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(MultiPathNode, PathNode);\n MultiPathNode.prototype = Object.create( PathNode && PathNode.prototype );\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n MultiPathNode.prototype.renderPoints = function renderPoints (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n };\n\n return MultiPathNode;\n }(PathNode$2));\n\n var RectNode$2 = (function (PathNode) {\n function RectNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(RectNode, PathNode);\n RectNode.prototype = Object.create( PathNode && PathNode.prototype );\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n\n RectNode.prototype.renderPoints = function renderPoints (ctx) {\n var geometry = this.srcElement.geometry();\n var ref = geometry.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n\n if (rx === 0 && ry === 0) {\n var origin = geometry.origin;\n var size = geometry.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n } else {\n PathNode.prototype.renderPoints.call(this, ctx, Path.fromRect(geometry));\n }\n };\n\n return RectNode;\n }(PathNode$2));\n\n var TextNode$2 = (function (PathNode) {\n function TextNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(TextNode, PathNode);\n TextNode.prototype = Object.create( PathNode && PathNode.prototype );\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n\n TextNode.prototype.renderTo = function renderTo (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n\n if (text.options.paintOrder === 'stroke') {\n this.stroke(ctx, text, pos, size);\n this.fill(ctx, text, pos, size);\n } else {\n this.fill(ctx, text, pos, size);\n this.stroke(ctx, text, pos, size);\n }\n\n ctx.restore();\n };\n\n TextNode.prototype.stroke = function stroke (ctx, text, pos, size) {\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n };\n\n TextNode.prototype.fill = function fill (ctx, text, pos, size) {\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n };\n\n return TextNode;\n }(PathNode$2));\n\n NODE_MAP$2.Arc = ArcNode$2;\n NODE_MAP$2.Circle = CircleNode$2;\n NODE_MAP$2.Group = GroupNode$2;\n NODE_MAP$2.Image = ImageNode$2;\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n NODE_MAP$2.Path = PathNode$2;\n NODE_MAP$2.Rect = RectNode$2;\n NODE_MAP$2.Text = TextNode$2;\n\n var Surface$4 = (function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n\n this.element.innerHTML = this._template(this);\n\n var canvas = this.element.firstElementChild;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n\n var size = elementSize(element);\n\n canvas.width = size.width;\n canvas.height = size.height;\n\n this._rootElement = canvas;\n\n this._root = new RootNode$2(canvas, size);\n\n this._mouseTrackHandler = this._trackMouse.bind(this);\n\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var prototypeAccessors = { type: {} };\n\n prototypeAccessors.type.get = function () {\n return \"canvas\";\n };\n\n Surface.prototype.destroy = function destroy () {\n BaseSurface.prototype.destroy.call(this);\n\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n };\n\n Surface.prototype.draw = function draw (element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([ element ], undefined, this.options.cors);\n\n if (this._searchTree) {\n this._searchTree.add([ element ]);\n }\n };\n\n Surface.prototype.clear = function clear () {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n\n if (this._searchTree) {\n this._searchTree.clear();\n }\n\n if (this._cursor) {\n this._cursor.clear();\n }\n };\n\n Surface.prototype.eventTarget = function eventTarget (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n };\n\n Surface.prototype.image = function image () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate({ fixedScale: true });\n\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n\n return promise;\n };\n\n Surface.prototype.suspendTracking = function suspendTracking () {\n BaseSurface.prototype.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n };\n\n Surface.prototype.resumeTracking = function resumeTracking () {\n BaseSurface.prototype.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n\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\n Surface.prototype._resize = function _resize () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n\n this._root.size = this._size;\n this._root.invalidate();\n };\n\n Surface.prototype._template = function _template () {\n return \"\";\n };\n\n Surface.prototype._enableTracking = function _enableTracking () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n\n BaseSurface.prototype._enableTracking.call(this);\n };\n\n Surface.prototype._trackMouse = function _trackMouse (e) {\n if (this._suspendedTracking) {\n return;\n }\n\n var shape = this.eventTarget(e);\n\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\n if (shape && currentShape !== shape) {\n this.trigger(\"mouseenter\", {\n element: shape,\n originalEvent: e,\n type: \"mouseenter\"\n });\n }\n\n this.trigger(\"mousemove\", {\n element: shape,\n originalEvent: e,\n type: \"mousemove\"\n });\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 Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n return Surface;\n }(Surface$2));\n\n var instance$2;\n var support$1;\n\n var hasDocument = function () { return typeof document !== \"undefined\"; };\n\n var supportsCanvas = function () { return hasDocument() &&\n document.createElement(\"canvas\").getContext; };\n\n var supportsSVG = function () { return hasDocument() &&\n document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"); };\n\n var SurfaceFactory = (function (Class$$1) {\n function SurfaceFactory() {\n Class$$1.call(this);\n\n this._items = [ {\n name: \"svg\",\n type: Surface$3\n }, {\n name: \"canvas\",\n type: Surface$4\n } ];\n }\n\n extendStatic(SurfaceFactory, Class$$1);\n SurfaceFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n SurfaceFactory.prototype.constructor = SurfaceFactory;\n SurfaceFactory.fn = SurfaceFactory.prototype;\n SurfaceFactory.fn.init = SurfaceFactory.fn.constructor;\n\n var staticAccessors = { support: {},current: {} };\n\n staticAccessors.support.get = function () {\n if (!support$1) {\n support$1 = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n\n return support$1;\n };\n\n staticAccessors.current.get = function () {\n if (!instance$2) {\n instance$2 = new SurfaceFactory();\n }\n\n return instance$2;\n };\n\n SurfaceFactory.prototype.create = function create (element, options) {\n var items = this._items;\n var match = items[0];\n\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\n if (match) {\n return new match.type(element, options);\n }\n\n kendo.logToConsole(\n \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n \"- The browser does not support SVG and Canvas. User agent: \" + (navigator.userAgent));\n };\n\n Object.defineProperties( SurfaceFactory, staticAccessors );\n\n return SurfaceFactory;\n }(Class));\n\n var Surface = (function (BaseSurface) {\n function Surface () {\n BaseSurface.apply(this, arguments);\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var staticAccessors = { support: {} };\n\n staticAccessors.support.get = function () {\n return SurfaceFactory.support;\n };\n\n Surface.create = function create (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n\n Object.defineProperties( Surface, staticAccessors );\n\n return Surface;\n }(Surface$2));\n\n function exportGroup(group) {\n var root = new RootNode({\n skipBaseHref: true\n });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n\n root.load([ rootGroup ]);\n\n var svg = \"\" + (root.render()) + \"\";\n\n root.destroy();\n\n return svg;\n }\n\n var svg$1 = {\n \tSurface: Surface$3,\n \tRootNode: RootNode,\n \tNode: Node,\n \tGroupNode: GroupNode,\n \tArcNode: ArcNode,\n \tCircleNode: CircleNode,\n \tRectNode: RectNode,\n \tImageNode: ImageNode,\n \tTextNode: TextNode,\n \tPathNode: PathNode,\n \tMultiPathNode: MultiPathNode,\n \tDefinitionNode: DefinitionNode,\n \tClipNode: ClipNode,\n \tGradientStopNode: GradientStopNode,\n \tLinearGradientNode: LinearGradientNode,\n \tRadialGradientNode: RadialGradientNode,\n \texportGroup: exportGroup\n };\n\n var canvas = {\n \tSurface: Surface$4,\n \tRootNode: RootNode$2,\n \tNode: Node$2,\n \tGroupNode: GroupNode$2,\n \tArcNode: ArcNode$2,\n \tCircleNode: CircleNode$2,\n \tRectNode: RectNode$2,\n \tImageNode: ImageNode$2,\n \tTextNode: TextNode$2,\n \tPathNode: PathNode$2,\n \tMultiPathNode: MultiPathNode$2\n };\n\n function exportImage(group, options) {\n var defaults = {\n width: \"800px\", height: \"600px\",\n cors: \"Anonymous\"\n };\n\n var exportRoot = group;\n var bbox = group.clippedBBox();\n\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n\n var size = bbox.getSize();\n defaults.width = size.width + \"px\";\n defaults.height = size.height + \"px\";\n }\n\n var surfaceOptions = $.extend(defaults, options);\n\n var container = document.createElement(\"div\");\n var style = container.style;\n\n style.display = \"none\";\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n\n var surface = new Surface$4(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n\n return promise;\n }\n\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n\n if (!options || !options.raw) {\n svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n }\n\n return createPromise().resolve(svg);\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty, yoda */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n var browser = supportBrowser || {};\n /*\n\n XXX: to test:\n\n - cloneNodes function:\n - drawing document containing canvas with page breaking\n - drawing document with named radio -s (should not clear selection)\n - IE9/IE10 don't support el.dataset; do they copy user data?\n\n - repeating table headers/footers on page breaking\n\n - forceBreak, keepTogether\n\n - avoidLinks\n\n */\n\n /* -----[ local vars ]----- */\n\n function slice$1$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n\n var KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n var KENDO_BULLET_TYPE = 'data-kendo-bullet-type';\n\n var IMAGE_CACHE = {};\n\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n\n /* -----[ Custom Text node to speed up rendering in kendo.pdf ]----- */\n\n var inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n\n var TextRect = (function (Text$$1) {\n function TextRect(str, rect, options) {\n Text$$1.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n\n extendStatic(TextRect, Text$$1);\n TextRect.prototype = Object.create( Text$$1 && Text$$1.prototype );\n TextRect.prototype.constructor = TextRect;\n TextRect.fn = TextRect.prototype;\n TextRect.fn.init = TextRect.fn.constructor;\n TextRect.prototype.rect = function rect () {\n // this is the crux of it: we can avoid a call to\n // measure(), which is what the base class does, since we\n // already know the rect. measure() is s-l-o-w.\n return this._pdfRect;\n };\n TextRect.prototype.rawBBox = function rawBBox () {\n // also let's avoid creating a new rectangle.\n return this._pdfRect;\n };\n\n return TextRect;\n }(Text));\n\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += \" \" + cls;\n }\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\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function(key){\n el.style[key] = styles[key];\n });\n }\n\n var matches = typeof Element !== \"undefined\" && Element.prototype && (function(p){\n if (p.matches) {\n return function(el, selector) { return el.matches(selector); };\n }\n if (p.webkitMatchesSelector) {\n return function(el, selector) { return el.webkitMatchesSelector(selector); };\n }\n if (p.mozMatchesSelector) {\n return function(el, selector) { return el.mozMatchesSelector(selector); };\n }\n if (p.msMatchesSelector) {\n return function(el, selector) { return el.msMatchesSelector(selector); };\n }\n return function(s) {\n \treturn [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n })(Element.prototype);\n\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n // IE: stringifying rather than simply comparing with `document`,\n // which is not iframe-proof and fails in editor export —\n // https://github.com/telerik/kendo/issues/6721\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 /* Element */ && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n\n // clone nodes ourselves, so that we redraw (DOM or\n // jQuery clone will not)\n var cloneNodes = (function($){\n if ($) {\n // if we have Kendo and jQuery, use this version as it will\n // maintain proper links between cloned element and Kendo\n // widgets (i.e. it clones jQuery data(), which isn't the same\n // as element's data attributes).\n // https://github.com/telerik/kendo-ui-core/issues/2750\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1 /* Element */) {\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 // drop the name attributes so that we don't affect the selection of the\n // original nodes (i.e. checked status of radio buttons) when we insert our copy\n // into the DOM. https://github.com/telerik/kendo/issues/5409\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 // the no-jQuery version\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\n // re-draw canvases - https://github.com/telerik/kendo/issues/4872\n var canvases = el.querySelectorAll(\"canvas\");\n if (canvases.length) {\n slice$1$1(clone.querySelectorAll(\"canvas\")).forEach(function (canvas$$1, i) {\n canvas$$1.getContext(\"2d\").drawImage(canvases[i], 0, 0);\n });\n }\n\n // remove \"name\" attributes from elements -\n // https://github.com/telerik/kendo/issues/5409\n var orig = el.querySelectorAll(\"input, select, textarea, option\");\n slice$1$1(clone.querySelectorAll(\"input, select, textarea, option\")).forEach(function (el, i) {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n\n return clone;\n };\n }\n })(typeof window !== \"undefined\" && window.kendo && window.kendo.jQuery);\n\n function getXY(thing) {\n if (typeof thing == \"number\") {\n return { x: thing, y: thing };\n }\n if (Array.isArray(thing)) {\n return { x: thing[0], y: thing[1] };\n }\n return { x: thing.x, y: thing.y };\n }\n\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n\n if (!element) {\n return promise.reject(\"No element to export\");\n }\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\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n\n var scale = getXY(options.scale || 1);\n\n function doOne(element) {\n var group = new Group();\n\n // translate to start of page\n var pos = element.getBoundingClientRect();\n setTransform$1(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n (-pos.left * scale.x),\n (-pos.top * scale.y)\n ]);\n\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = \"a\";\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n\n addClass(element, \"k-pdf-export\");\n renderElement(element, group);\n removeClass(element, \"k-pdf-export\");\n\n return group;\n }\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 // PDF.getPaperOptions croaks on \"auto\", just pass dummy A4 as we might\n // still be interested in margins.\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 = { left: 0, top: 0, right: 0, bottom: 0 };\n }\n\n // we want paper size and margin to be unaffected by\n // scaling in the output, so we have to reverse-scale\n // before our calculations begin.\n if (pageWidth) { pageWidth /= scale.x; }\n if (pageHeight) { pageHeight /= scale.y; }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n\n var group = new Group({\n pdf: {\n multiPage : true,\n paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\",\n _ignoreMargin : hasMargin // HACK! see exportPDF in pdf/drawing.js\n }\n });\n handlePageBreaks(\n 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 // XXX: should we also fail() the deferred object?\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 },\n element,\n forceBreak,\n pageWidth ? pageWidth - margin.left - margin.right : null,\n pageHeight ? pageHeight - margin.top - margin.bottom : null,\n margin,\n options\n );\n } else {\n promise.resolve(doOne(element));\n }\n });\n\n function makeTemplate(template) {\n if (template != null) {\n if (typeof template == \"string\") {\n template = kendo.template(template.replace(/^\\s+|\\s+$/g, \"\"));\n }\n if (typeof template == \"function\") {\n return function(data) {\n var el = template(data);\n if (el && typeof el == \"string\") {\n var div = document.createElement(\"div\");\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n // assumed DOM element\n return function() {\n return template.cloneNode(true);\n };\n }\n }\n\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement(\"KENDO-PDF-DOCUMENT\");\n var adjust = 0;\n\n // make sure elements are at the end (Grid widget\n // places TFOOT before TBODY, tricking our algorithm to\n // insert a page break right after the header).\n // https://github.com/telerik/kendo/issues/4699\n slice$1$1(copy.querySelectorAll(\"tfoot\")).forEach(function(tfoot){\n tfoot.parentNode.appendChild(tfoot);\n });\n\n // remember the index of each LI from an ordered list.\n // we'll use it to reconstruct the proper numbering.\n slice$1$1(copy.querySelectorAll(\"ol\")).forEach(function(ol){\n slice$1$1(ol.children).forEach(function(li, index){\n li.setAttribute(\"kendo-split-index\", index);\n });\n });\n\n setCSS(container, {\n display : \"block\",\n position : \"absolute\",\n boxSizing : \"content-box\",\n left : \"-10000px\",\n top : \"-10000px\"\n });\n\n if (pageWidth) {\n // subtle: if we don't set the width *and* margins here, the layout in this\n // container will be different from the one in our final page elements, and we'll\n // split at the wrong places.\n setCSS(container, {\n width : pageWidth + \"px\",\n paddingLeft : margin.left + \"px\",\n paddingRight : margin.right + \"px\"\n });\n\n // when the first element has a margin-top (i.e. a

) the page will be\n // inadvertently enlarged by that number (the browser will report the container's\n // bounding box top to start at the element's top, rather than including its\n // margin). Adding overflow: hidden seems to fix it.\n //\n // to understand the difference, try the following snippets in your browser:\n //\n // 1.
\n //

Foo

\n //
\n //\n // 2.
\n //

Foo

\n //
\n //\n // this detail is not important when automatic page breaking is not requested, hence\n // doing it only if pageWidth is defined.\n setCSS(copy, { overflow: \"hidden\" });\n }\n\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n\n // With cache disabled, images will still have height zero until their `complete` attribute\n // is true. `whenImagesAreActuallyLoaded` will wait for it.\n if (options.beforePageBreak) {\n whenImagesAreActuallyLoaded([ container ], function() {\n options.beforePageBreak(container, doPageBreak);\n });\n } else {\n whenImagesAreActuallyLoaded([ container ], doPageBreak);\n }\n\n function doPageBreak() {\n if (forceBreak != \"-\" || pageHeight) {\n splitElement(copy);\n }\n\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n\n if (template) {\n pages.forEach(function(page, i){\n var el = template({\n element : page,\n pageNum : i + 1,\n totalPages : pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n\n cacheImages(pages, callback.bind(null, { pages: pages, container: container }));\n }\n\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n\n return (el.getAttribute(\"data-kendo-chart\") ||\n /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName));\n }\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 /* Element */) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n // we're in \"manual breaks mode\"\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 // element starts on next page, break before anyway.\n breakAtElement(el);\n }\n else if (fall) {\n // elements ends up on next page, or possibly doesn't fit on a page at\n // all. break before it anyway if it's an or , otherwise\n // attempt to split.\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n }\n else {\n splitElement(el);\n }\n }\n else if (el.nodeType == 3 /* Text */ && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\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 /* comment */ ||\n first.nodeType == 8 /* processing instruction */) {\n return true;\n }\n if (first.nodeType == 3 /* text */) {\n // if whitespace only we can probably consider it's first\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\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\n // If we break page in a Kendo Grid, repeat its header. This ugly hack is\n // necessary because a scrollable grid will keep the header in a separate\n // element from its content.\n //\n // XXX: This is likely to break as soon as the widget HTML is modified.\n grid = closest(el, \".k-grid\");\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\"); // that's the
on next page!\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\");\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\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 \" +\n margin.right + \"px \" +\n margin.bottom + \"px \" +\n margin.left + \"px\"),\n\n // allow absolutely positioned elements to be relative to current page\n position : \"relative\",\n\n // without the following we might affect layout of subsequent pages\n height : pageHeight ? (pageHeight + \"px\") : \"auto\",\n overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\n clear : \"both\"\n });\n\n // debug\n // $(\"
\").css({\n // position : \"absolute\",\n // left : margin.left,\n // top : margin.top,\n // width : pageWidth,\n // height : pageHeight,\n // boxSizing : \"border-box\",\n // background: \"rgba(255, 255, 0, 0.5)\"\n // //border : \"1px solid red\"\n // }).appendTo(page);\n\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n // I'd say an element with dimensions zero fits on current page.\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return (box.height > available) ? 3\n : (box.top - top > available) ? 1\n : (box.bottom - top > available) ? 2\n : 0;\n }\n\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\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; // the whole text fits on current page\n }\n\n var nextnode = node;\n if (fall == 1) {\n // starts on next page, break before anyway.\n if (isFirst) {\n // avoid leaving an empty

,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\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\n if (!/\\S/.test(range.toString()) && isFirst) {\n // avoid leaving an empty

    ,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n // This is only needed for IE, but it feels cleaner to do it anyway. Without\n // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\n nextnode = node.splitText(range.endOffset);\n\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\n splitText(nextnode);\n }\n\n function preventBulletOnListItem(el) {\n // set a hint on continued LI elements, to tell the\n // renderer not to draw the bullet again.\n // https://github.com/telerik/kendo-ui-core/issues/2732\n var li = closest(el, \"li\");\n if (li) {\n li.setAttribute(\"kendo-no-bullet\", \"1\");\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n\n return promise;\n }\n\n // This is needed for the Spreadsheet print functionality. Since\n // there we only need to draw text, this cuts through the ceremony\n // of drawDOM/renderElement and renders the text node directly.\n function drawText(element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle$1(element), group);\n if (element.firstChild.nodeType == 3 /* Text */) {\n // avoid the penalty of renderElement\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n }\n\n var parseBackgroundImage = (function(){\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n //var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-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\n var cache1 = {}, cache2 = {};\n\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\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match =\n /^#[0-9a-f]+/i.exec(input) ||\n /^rgba?\\(.*?\\)/i.exec(input) ||\n /^..*?\\b/.exec(input); // maybe named color\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 { color: color, length: length, 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\n if (read(tok_popen)) {\n // 1. [ || to , ]?\n angle = read(tok_angle);\n if (angle == \"0\") {\n angle = \"0deg\"; // Edge\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n }\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\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\n // 2. color stops\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\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\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 { type: \"url\", url: url };\n }\n }\n\n var tok;\n\n if ((tok = read(tok_linear_gradient))) {\n tok = read_linear_gradient(tok);\n }\n else if ((tok = read(tok_url))) {\n tok = read_url();\n }\n\n return (cache1[orig] = tok || { type: \"none\" });\n }\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\n var splitProperty = (function(){\n var cache = {};\n return function(input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n\n var cacheKey = input + separator;\n\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\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\n function looking_at(rx) {\n return (m = rx.exec(input.substr(pos)));\n }\n\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, \"\");\n }\n\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n }\n else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n pos += 2;\n }\n else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n }\n else if (in_string == \"'\" && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n }\n else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n }\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 }\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\n var getFontURL = (function(cache){\n return function(el){\n // XXX: for IE we get here the whole cssText of the rule,\n // because the computedStyle.src is empty. Next time we need\n // to fix these regexps we better write a CSS parser. :-\\\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\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\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 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 // Internet Explorer\n // XXX: this is gross. should work though for valid CSS.\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: // CSSImportRule\n doStylesheet(r.styleSheet);\n break;\n case 5: // CSSFontFaceRule\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 // We get full resolved absolute URLs in Chrome, but sadly\n // not in Firefox.\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\"); // it's quoted\n if (bold) {\n name += \"|bold\";\n }\n if (italic) {\n name += \"|italic\";\n }\n result[name] = url;\n });\n }\n }\n\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n function getCounter(name) {\n name = \"_counter_\" + name;\n return nodeInfo[name];\n }\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\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\n function resetCounter(name, val) {\n name = \"_counter_\" + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\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\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\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\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n var done = false;\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\n if (!pending) {\n next();\n }\n\n function next() {\n if (!done && --pending <= 0) {\n callback();\n done = true;\n }\n }\n }\n\n function cacheImages(elements, 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\n elements.forEach(function dive(element){\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(\n getPropertyValue(\n getComputedStyle$1(element), \"background-image\"\n )\n ).forEach(function(bg){\n if (bg.type == \"url\") {\n add(bg.url);\n }\n });\n\n if (element.children) {\n slice$1$1(element.children).forEach(dive);\n }\n });\n\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n // Even though we cached them, they simply won't be available immediately in the newly\n // created DOM. Previously we'd allow a 10ms timeout, but that's arbitrary and clearly\n // not working in all cases (https://github.com/telerik/kendo/issues/5399), so this\n // function will wait for their .complete attribute.\n whenImagesAreActuallyLoaded(elements, 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\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\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, \"text-decoration-color\");\n decoration.split(/\\s+/g).forEach(function(name){\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n if (name == \"underline\") {\n var offset = getPropertyValue(style, \"text-underline-offset\");\n if (offset != \"auto\") {\n nodeInfo[\"underline-offset\"] = parseFloat(offset);\n }\n }\n }\n });\n }\n\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\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\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\n function createsStackingContext(style) {\n function prop(name) { return getPropertyValue(style, name); }\n if (prop(\"transform\") != \"none\" ||\n prop(\"position\") != \"static\" ||\n prop(\"z-index\") != \"auto\" ||\n prop(\"opacity\") < 1) {\n return true;\n }\n }\n\n function getComputedStyle$1(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\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\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\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\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\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({ x: r[0], 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\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 }\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\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\n function radiansToDegrees(radians) {\n return ((180 * radians) / Math.PI) % 360;\n }\n\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n }\n else if (/rad$/.test(angle)) {\n return num;\n }\n else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n }\n else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n\n function setTransform$1(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([ x, y ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\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\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n // adjust border radiuses such that the sum of adjacent\n // radiuses is not bigger than the length of the side.\n // seems the correct algorithm is variant (3) from here:\n // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\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\n var f = Math.min(\n box.width / (tl_x + tr_x),\n box.height / (tr_y + br_y),\n box.width / (br_x + bl_x),\n box.height / (bl_y + tl_y)\n );\n\n if (f < 1) {\n tl_x *= f; tl_y *= f;\n tr_x *= f; tr_y *= f;\n br_x *= f; br_y *= f;\n bl_x *= f; bl_y *= f;\n }\n\n return {\n tl: { x: tl_x, y: tl_y },\n tr: { x: tr_x, y: tr_y },\n br: { x: br_x, y: br_y },\n bl: { x: bl_x, y: bl_y }\n };\n }\n\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle$1(element);\n\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\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; rTL.y -= bt.width;\n rTR.x -= br.width; rTR.y -= bt.width;\n rBR.x -= br.width; rBR.y -= bb.width;\n rBL.x -= bl.width; 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; rTL.y -= pt;\n rTR.x -= pr; rTR.y -= pt;\n rBR.x -= pr; rBR.y -= pb;\n rBL.x -= pl; rBL.y -= pb;\n }\n }\n\n if (typeof type == \"number\") {\n rTL.x -= type; rTL.y -= type;\n rTR.x -= type; rTR.y -= type;\n rBR.x -= type; rBR.y -= type;\n rBL.x -= type; rBL.y -= type;\n }\n\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n\n // Create a drawing.Path for a rounded rectangle. Receives the\n // bounding box and the border-radiuses in CSS order (top-left,\n // top-right, bottom-right, bottom-left). The radiuses must be\n // objects containing x (horiz. radius) and y (vertical radius).\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({ fill: null, stroke: null });\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\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\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 }\n else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n }\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 }\n else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n result.push(element.getAttribute(m[1]) || \"\");\n }\n else {\n result.push(el);\n }\n });\n return result.join(\"\");\n }\n\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n // Status: NEW. Report year: 2002. Current year: 2014.\n // Nice played, Mozillians.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\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\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){ element.removeChild(el); });\n } else {\n _renderElement(element, group);\n }\n }\n\n function _renderElement(element, group) {\n var style = getComputedStyle$1(element);\n\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\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\n var dir = getPropertyValue(style, \"direction\");\n\n var backgroundColor = getPropertyValue(style, \"background-color\");\n backgroundColor = parseColor$1(backgroundColor);\n\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\n // IE shrinks the text with text-overflow: ellipsis,\n // apparently because the returned bounding box for the range\n // is limited to the visible area minus space for the dots,\n // instead of being the full width of the text.\n //\n // https://github.com/telerik/kendo/issues/5232\n // https://github.com/telerik/kendo-ui-core/issues/1868\n //\n // We have to test it here rather than in renderText because\n // text-overflow: ellipsis could be set on a parent element (not\n // necessarily the one containing the text); in this case,\n // getComputedStyle(elementWithTheText) will return \"clip\", not\n // \"ellipsis\" (which is probably a bug, but oh well...)\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow; // computed style\n if (textOverflow == \"ellipsis\") {\n saveTextOverflow = element.style.textOverflow; // own style.\n element.style.textOverflow = \"clip\";\n }\n }\n\n if (browser.msie && browser.version < 10) {\n // IE9 hacks. getPropertyValue won't return the correct\n // value. Sucks that we have to do it here, I'd prefer to\n // move it in getPropertyValue, but we don't have the\n // element.\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n\n var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n // CSS \"clip\" property - if present, replace the group with a\n // new one which is clipped. This must happen before drawing\n // the borders and background.\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()\n .moveTo(left, top)\n .lineTo(right, top)\n .lineTo(right, bottom)\n .lineTo(left, bottom)\n .close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n })();\n\n var boxes, i, cells;\n var display = getPropertyValue(style, \"display\");\n\n if (display == \"table-row\") {\n // because of rowspan/colspan, we shouldn't draw background of table row elements on the\n // box given by its getBoundingClientRect, because if we do we risk overwritting a\n // previously rendered cell. https://github.com/telerik/kendo/issues/4881\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 // Workaround the missing borders in Chrome! getClientRects() boxes contains values\n // rounded to integer. getBoundingClientRect() appears to work fine. We still need\n // getClientRects() to support cases where there are more boxes (continued inline\n // elements that might have border/background).\n boxes = [ element.getBoundingClientRect() ];\n }\n }\n\n // This function workarounds another Chrome bug, where boxes returned for a table with\n // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\n // such case anyway, but with this is better than without it.\n boxes = adjustBoxes(boxes);\n\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n\n // Render links as separate groups. We can't use boxes returned by element's getClientRects\n // because if display type is \"inline\" (default for ), boxes will not include the height of\n // images inside. https://github.com/telerik/kendo-ui-core/issues/3359\n if (element.tagName == \"A\" && element.href && !/^#?$/.test(element.getAttribute(\"href\"))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n var r = document.createRange();\n r.selectNodeContents(element);\n slice$1$1(r.getClientRects()).forEach(function(box){\n var g = new Group();\n g._pdfLink = {\n url : element.href,\n top : box.top,\n right : box.right,\n bottom : box.bottom,\n left : box.left\n };\n group.append(g);\n });\n }\n }\n\n if (boxes.length > 0 && display == \"list-item\" && !element.getAttribute(\"kendo-no-bullet\")) {\n drawBullet(boxes[0]);\n }\n\n // overflow: hidden/auto - if present, replace the group with\n // a new one clipped by the inner box.\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\n if (!maybeRenderWidget(element, group) && !maybeRenderBullet(element, group)) {\n renderContents(element, group);\n }\n\n if (microsoft && textOverflow == \"ellipsis\") {\n element.style.textOverflow = saveTextOverflow;\n }\n\n return group; // only utility functions after this line.\n\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 // check if we need to adjust\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes; // nope\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1$1(boxes).map(function(box){\n return {\n left : box.left + tableBorderLeft,\n top : box.top + tableBorderTop,\n right : box.right + tableBorderLeft,\n bottom : box.bottom + tableBorderTop,\n height : box.height,\n width : box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n\n // this function will be called to draw each border. it\n // draws starting at origin and the resulted path must be\n // translated/rotated to be placed in the proper position.\n //\n // arguments are named as if it draws the top border:\n //\n // - `len` the length of the edge\n // - `Wtop` the width of the edge (i.e. border-top-width)\n // - `Wleft` the width of the left edge (border-left-width)\n // - `Wright` the width of the right edge\n // - `rl` and `rl` -- the border radius on the left and right\n // (objects containing x and y, for horiz/vertical radius)\n // - `transform` -- transformation to apply\n //\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n\n var path, edge = new Group();\n setTransform$1(edge, transform$$1);\n group.append(edge);\n\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n\n // draw main border. this is the area without the rounded corners\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)\n .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n .lineTo(len - Math.max(rr.x, Wright), Wtop)\n .lineTo(Math.max(rl.x, Wleft), Wtop)\n .close();\n\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n }\n\n if (rr.x) {\n drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n }\n\n // draws one round corner, starting at origin (needs to be\n // translated/rotated to be placed properly).\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n // not sanitizing this one, because negative values\n // are useful to fill the box correctly.\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n\n setTransform$1(path, transform$$1);\n\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\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 }\n else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop)\n .lineTo(0, Wtop);\n }\n else {\n path.lineTo(ri.x, Wtop)\n .lineTo(ri.x, 0);\n }\n\n edge.append(path.close());\n }\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\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top)\n .lineTo(box.right, box.top)\n .lineTo(box.right, box.bottom)\n .lineTo(box.left, box.bottom)\n .close();\n background.append(path);\n }\n\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(\n background, box,\n backgroundImage[i],\n backgroundRepeat[i % backgroundRepeat.length],\n backgroundPosition[i % backgroundPosition.length],\n backgroundOrigin[i % backgroundOrigin.length],\n backgroundSize[i % backgroundSize.length]\n );\n }\n }\n\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || (background == \"none\")) {\n return;\n }\n\n if (background.type == \"url\") {\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\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n\n // for background-origin: border-box the box is already appropriate\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\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == \"contain\") {\n f = Math.min(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else if (backgroundSize == \"cover\") {\n f = Math.max(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else {\n var size = backgroundSize.split(/\\s+/g);\n // compute width\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n // compute height\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\n var pos = String(backgroundPosition);\n\n // IE sometimes reports single-word positions\n // https://github.com/telerik/kendo-ui-core/issues/2786\n //\n // it seems to switch to percentages when the horizontal\n // position is not \"center\", therefore we don't handle\n // multi-word cases here. All other browsers return\n // percentages or pixels instead of keywords. At least\n // for now...\n switch (pos) {\n case \"bottom\" : pos = \"50% 100%\"; break;\n case \"top\" : pos = \"50% 0\"; break;\n case \"left\" : pos = \"0 50%\"; break;\n case \"right\" : pos = \"100% 50%\"; break;\n case \"center\" : pos = \"50% 50%\"; break;\n }\n\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = \"50%\";\n }\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\n var rect = new Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n // XXX: background-repeat could be implemented more\n // efficiently as a fill pattern (at least for PDF\n // output, probably SVG too).\n\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\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\n if (backgroundRepeat == \"no-repeat\") {\n renderBG(group, rect);\n }\n else if (backgroundRepeat == \"repeat-x\") {\n rewX();\n repeatX();\n }\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 }\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\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\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\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\n switch (listStyleType) {\n case \"circle\":\n case \"disc\":\n case \"square\":\n _drawBullet(function(bullet){\n bullet.innerHTML = ' ';\n bullet.setAttribute(KENDO_BULLET_TYPE, listStyleType);\n });\n break;\n\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\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\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\n // draws a single border box\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n\n drawBackground(box);\n\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\n // The most general case is that the 4 borders have different widths and border\n // radiuses. The way that is handled is by drawing 3 Paths for each border: the\n // straight line, and two round corners which represent half of the entire rounded\n // corner. To simplify code those shapes are drawed at origin (by the drawEdge\n // function), then translated/rotated into the right position.\n //\n // However, this leads to poor results due to rounding in the simpler cases where\n // borders are straight lines. Therefore we handle a few such cases separately with\n // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\n // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n // web dev is still a ghetto.)\n\n // first, just in case there is no border...\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n\n // START paint borders\n // if all borders have equal colors...\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n // if same widths too, we can draw the whole border by stroking a single path.\n if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n {\n if (shouldDrawLeft && shouldDrawRight) {\n // reduce box by half the border width, so we can draw it by stroking.\n box = innerBox(box, top.width/2);\n\n // adjust the border radiuses, again by top.width/2, and make the path element.\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\n // if border radiuses are zero and widths are at most one pixel, we can again use simple\n // paths.\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n // alright, 1.9px will do as well. the difference in color blending should not be\n // noticeable.\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n // top border\n if (top.width > 0) {\n group.append(\n new Path({\n stroke: { width: top.width, color: top.color }\n })\n .moveTo(box.left, box.top + top.width/2)\n .lineTo(box.right, box.top + top.width/2)\n );\n }\n\n // bottom border\n if (bottom.width > 0) {\n group.append(\n new Path({\n stroke: { width: bottom.width, color: bottom.color }\n })\n .moveTo(box.left, box.bottom - bottom.width/2)\n .lineTo(box.right, box.bottom - bottom.width/2)\n );\n }\n\n // left border\n if (shouldDrawLeft) {\n group.append(\n new Path({\n stroke: { width: left.width, color: left.color }\n })\n .moveTo(box.left + left.width/2, box.top)\n .lineTo(box.left + left.width/2, box.bottom)\n );\n }\n\n // right border\n if (shouldDrawRight) {\n group.append(\n new Path({\n stroke: { width: right.width, color: right.color }\n })\n .moveTo(box.right - right.width/2, box.top)\n .lineTo(box.right - right.width/2, box.bottom)\n );\n }\n\n return;\n }\n }\n // END paint borders\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\n // top border\n drawEdge(top.color,\n box.width, top.width, left.width, right.width,\n rTL, rTR,\n [ 1, 0, 0, 1, box.left, box.top ]);\n\n // bottom border\n drawEdge(bottom.color,\n box.width, bottom.width, right.width, left.width,\n rBR, rBL,\n [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n // for left/right borders we need to invert the border-radiuses\n function inv(p) {\n return { x: p.y, y: p.x };\n }\n\n // left border\n drawEdge(left.color,\n box.height, left.width, bottom.width, top.width,\n inv(rBL), inv(rTL),\n [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n // right border\n drawEdge(right.color,\n box.height, right.width, top.width, bottom.width,\n inv(rTR), inv(rBR),\n [ 0, 1, -1, 0, box.right, box.top ]);\n }\n }\n\n function gradientRenderer(gradient) {\n return function(group, rect) {\n var width = rect.width(), height = rect.height();\n\n switch (gradient.type) {\n case \"linear\":\n\n // figure out the angle.\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\": case \"left top\":\n angle = -Math.atan2(height, width);\n break;\n case \"top right\": case \"right top\":\n angle = Math.atan2(height, width);\n break;\n case \"bottom left\": case \"left bottom\":\n angle = Math.PI + Math.atan2(height, width);\n break;\n case \"bottom right\": case \"right bottom\":\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n\n // limit the angle between 0..2PI\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n\n // compute gradient's start/end points. here len is the length of the gradient line\n // and x,y is the end point relative to the center of the rectangle in conventional\n // (math) axis direction.\n\n // this is the original (unscaled) length of the gradient line. needed to deal with\n // absolutely positioned color stops. formula from the CSS spec:\n // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n // The math below is pretty simple, but it took a while to figure out. We compute x\n // and y, the *end* of the gradient line. However, we want to transform them into\n // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\n // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n // bottom edge.\n //\n // A naive approach would use the original angle for these calculations. Say we'd\n // like to draw a gradient angled at 45deg in a 100x400 box. When we use\n // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n // scale that to the desired dimensions. The 45deg angle will look more like 70deg\n // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n // the following:\n //\n // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n // identity matrix, the normal of the linear gradient is perpendicular to the\n // gradient vector in object bounding box space (i.e., the abstract coordinate\n // system where (0,0) is at the top/left of the object bounding box and (1,1) is\n // at the bottom/right of the object bounding box). When the object's bounding\n // box is not square, the gradient normal which is initially perpendicular to\n // the gradient vector within object bounding box space may render\n // non-perpendicular relative to the gradient vector in user space. If the\n // gradient vector is parallel to one of the axes of the bounding box, the\n // gradient normal will remain perpendicular. This transformation is due to\n // application of the non-uniform scaling transformation from bounding box space\n // to user space.\n //\n // which is an extremely long and confusing way to tell what I just said above.\n //\n // For this reason we need to apply the reverse scaling to the original angle, so\n // that when it'll finally be rendered it'll actually be at the desired slope. Now\n // I'll let you figure out the math yourself.\n\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\n // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n // losing the intended direction of the gradient. The following fixes it.\n if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n x = -x;\n y = -y;\n }\n\n // compute the color stops.\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 // fix implicit offsets\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({ left: right, stop: stop });\n }\n return stop;\n });\n\n var start = [ 0.5 - x, 0.5 + y ];\n var end = [ 0.5 + x, 0.5 - y ];\n\n // finally, draw it.\n group.append(\n Path.fromRect(rect)\n .stroke(null)\n .fill(new LinearGradient({\n start : start,\n end : end,\n stops : stops,\n userSpace : false\n }))\n );\n break;\n case \"radial\":\n // XXX:\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\n function maybeRenderWidget(element, group) {\n var visual;\n\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\n if (!visual) {\n return false;\n }\n\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform$1().translate(bbox.left, bbox.top));\n\n group.append(wrap$$1);\n\n return true;\n }\n\n function maybeRenderBullet(element, group) {\n var bulletType = element.getAttribute(KENDO_BULLET_TYPE);\n\n if (!bulletType) {\n return false;\n }\n\n var box = element.getBoundingClientRect();\n var color = getComputedStyle$1(element).color;\n\n if (bulletType === 'square') {\n var rectSize = box.height / 5;\n group.append(new Rect$2(new Rect([\n box.right - rectSize,\n box.top + box.height / 2.1\n ], [rectSize, rectSize])).fill(color).stroke(color));\n } else {\n var radius = box.height / 7;\n var center = [\n box.right - radius,\n box.top + (box.height + radius) / 2\n ];\n var circle = new Circle(new Circle$2(center, radius));\n if (bulletType === 'circle') {\n circle.stroke(color, 0.5);\n } else {\n circle.fill(color).stroke(null);\n }\n group.append(circle);\n }\n\n return true;\n }\n\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([ box.left, box.top ], [ box.width, box.height ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, \"content\"));\n group.append(image);\n }\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\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\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\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(\n Path.fromRect(\n new Rect([ box.left+1, box.top+1 ],\n [ box.width-2, box.height-2 ])\n ).stroke(color, 1)\n );\n if (element.checked) {\n // fill a rectangle inside? looks kinda ugly.\n // group.append(\n // Path.fromRect(\n // new geo.Rect([ box.left+4, box.top+4 ],\n // [ box.width-8, box.height-8])\n // ).fill(color).stroke(null)\n // );\n\n // let's draw a checkmark instead. artistic, eh?\n group.append(\n new Path()\n .stroke(color, 1.2)\n .moveTo(box.left + 0.22 * box.width,\n box.top + 0.55 * box.height)\n .lineTo(box.left + 0.45 * box.width,\n box.top + 0.75 * box.height)\n .lineTo(box.left + 0.78 * box.width,\n box.top + 0.22 * box.width)\n );\n }\n } else {\n group.append(\n new Circle(\n new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-2, box.height-2) / 2)\n ).stroke(color, 1)\n );\n if (element.checked) {\n group.append(\n new Circle(\n new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-8, box.height-8) / 2)\n ).fill(color).stroke(null)\n );\n }\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\"; // IE9 messes up without this\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\n // must temporarily hide the original element, otherwise it\n // may affect layout of the fake element we want to render.\n element.style.display = \"none\";\n\n renderContents(el, group);\n element.style.display = \"\";\n p.removeChild(el);\n }\n\n function serializeSVG(element) {\n var serializer = new window.XMLSerializer();\n var xml = serializer.serializeToString(element);\n\n if (browser.mozilla && !(element.getAttribute(\"width\") && element.getAttribute(\"height\"))) {\n var doc = new window.DOMParser().parseFromString(xml, \"image/svg+xml\");\n var svg$$1 = doc.documentElement;\n var box = getContentBox(element);\n svg$$1.setAttribute(\"width\", box.width);\n svg$$1.setAttribute(\"height\", box.height);\n xml = serializer.serializeToString(svg$$1);\n }\n\n return xml;\n }\n\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n // the group that was set in pushNodeInfo might have\n // changed due to clipping/transforms, update it here.\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case \"img\":\n renderImage(element, element.src, group);\n break;\n\n case \"svg\":\n var xml = serializeSVG(element);\n var dataURL = \"data:image/svg+xml;base64,\" + (encodeBase64(xml));\n renderImage(element, dataURL, group);\n break;\n\n case \"canvas\":\n try {\n renderImage(element, element.toDataURL(\"image/png\"), group);\n } catch (ex) {\n // tainted; can't draw it, ignore.\n }\n break;\n\n case \"textarea\":\n case \"input\":\n case \"select\":\n renderFormField(element, group);\n break;\n\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3: // Text\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1: // Element\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 }\n else if (floating != \"none\") {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n\n mergeSort(children, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(floats, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(positioned, zIndexSort).forEach(function(el){ 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\n if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n // assume it should not be displayed. the slider's\n // draggable handle displays a Drag text for some reason,\n // having text-indent: -3333px.\n return;\n }\n\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n\n if (!end) {\n return; // whitespace-only node\n }\n\n var fontSize = getPropertyValue(style, \"font-size\");\n var lineHeight = getPropertyValue(style, \"line-height\");\n\n // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n var font = [\n getPropertyValue(style, \"font-style\"),\n getPropertyValue(style, \"font-variant\"),\n getPropertyValue(style, \"font-weight\"),\n fontSize, // no need for line height here; it breaks layout in FF\n getPropertyValue(style, \"font-family\")\n ].join(\" \");\n\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n\n if (fontSize === 0 || isNaN(fontSize)) {\n return;\n }\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\n // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\n // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\n // seems to be a good option.\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n\n // we'll maintain this so we can workaround bugs in Chrome's Range.getClientRects\n // https://github.com/telerik/kendo/issues/5740\n var prevLineBottom = null;\n\n var underline = nodeInfo[\"underline\"];\n var lineThrough = nodeInfo[\"line-through\"];\n var overline = nodeInfo[\"overline\"];\n var underlineOffset = nodeInfo[\"underline-offset\"];\n\n if (underline) {\n forEachRect(decorateUnder);\n }\n\n // doChunk returns true when all text has been rendered\n while (!doChunk()) {}\n\n if (lineThrough || overline) {\n forEachRect(decorateOver);\n }\n\n return; // only function declarations after this line\n\n function forEachRect(callback) {\n range.selectNode(node);\n var clientRects = slice$1$1(range.getClientRects());\n\n forEachRect = function (cb) { return clientRects.forEach(cb); };\n forEachRect(callback);\n }\n\n function actuallyGetRangeBoundingRect(range) {\n // XXX: to be revised when this Chrome bug is fixed:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612459\n if (microsoft || browser.chrome || browser.safari) {\n // Workaround browser bugs: IE and Chrome would sometimes\n // return 0 or 1-width rectangles before or after the main\n // one. https://github.com/telerik/kendo/issues/4674\n\n // Actually Chrome 50 got worse, since the rectangles can now have the width of a\n // full character, making it hard to tell whether it's a bogus rectangle or valid\n // selection location. The workaround is to ignore rectangles that fall on the\n // previous line. https://github.com/telerik/kendo/issues/5740\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; // bogus rectangle\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\n // Render a chunk of text, typically one line (but for justified text we render each word as\n // a separate Text object, because spacing is variable). Returns true when it finished the\n // current node. After each chunk it updates `start` to just after the last rendered\n // character.\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\n // Select a single character to determine the height of a line of text. The box.bottom\n // will be essential for us to figure out where the next line begins.\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n\n // for justified text we must split at each space, because space has variable width.\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n // we can only split there if it's on the same line, otherwise we'll fall back\n // to the default mechanism (see findEOL below).\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\n if (!found) {\n // This code does three things: (1) it selects one line of text in `range`, (2) it\n // leaves the bounding rect of that line in `box` and (3) it returns the position\n // just after the EOL. We know where the line starts (`start`) but we don't know\n // where it ends. To figure this out, we select a piece of text and look at the\n // bottom of the bounding box. If it changes, we have more than one line selected\n // and should retry with a smaller selection.\n //\n // To speed things up, we first try to select all text in the node (`start` ->\n // `end`). If there's more than one line there, then select only half of it. And\n // so on. When we find a value for `end` that fits in one line, we try increasing\n // it (also in halves) until we get to the next line. The algorithm stops when the\n // right side of the bounding box does not change.\n //\n // One more thing to note is that everything happens in a single Text DOM node.\n // There's no other tags inside it, therefore the left/top coordinates of the\n // bounding box will not change.\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\n if (pos == start) {\n // if EOL is at the start, then no more text fits on this line. Skip the\n // remainder of this node entirely to avoid a stack overflow.\n return true;\n }\n start = pos;\n\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false; // whitespace only; we should not get here.\n }\n if (pos > 0) {\n // eliminate trailing whitespace\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n\n // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\n // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n // node with non-significant space -- collapse whitespace.\n str = str.replace(/\\s+/g, \" \");\n }\n else if (/\\t/.test(str)) {\n // with significant whitespace we need to do something about literal TAB characters.\n // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\n // and the whole text will stretch to fill the original width. The core PDF lib\n // does not have sufficient context to deal with it.\n\n // calculate the starting column here, since we initially discarded any whitespace.\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n // when we meet a TAB we must round up to the next tab stop.\n // in all browsers TABs seem to be 8 characters.\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n // just in case we meet a newline we must restart.\n cc = 0;\n } else {\n // ordinary character --> advance one column\n cc++;\n }\n }\n\n // based on starting column, replace any TAB characters in the string we actually\n // have to display with spaces so that they align to columns multiple of 8.\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\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n\n function drawText(str, box) {\n // In IE the box height will be approximately lineHeight, while in\n // other browsers it'll (correctly) be the height of the bounding\n // box for the current text/font. Which is to say, IE sucks again.\n // The only good solution I can think of is to measure the text\n // ourselves and center the bounding 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\n // var path = new Path({ stroke: { color: \"red\" }});\n // path.moveTo(box.left, box.top)\n // .lineTo(box.right, box.top)\n // .lineTo(box.right, box.bottom)\n // .lineTo(box.left, box.bottom)\n // .close();\n // group.append(path);\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) { return l.toUpperCase(); });\n break;\n }\n\n var text = new TextRect(\n str, new Rect([ box.left, box.top ],\n [ box.width, box.height ]),\n {\n font: font,\n fill: { color: color }\n }\n );\n group.append(text);\n }\n\n function drawTextLine(lineWidth, textBox, color, ypos) {\n if (color) {\n var path = new Path({ stroke: {\n width: lineWidth,\n color: color\n }});\n\n ypos -= lineWidth;\n path.moveTo(textBox.left, ypos)\n .lineTo(textBox.right, ypos);\n group.append(path);\n }\n }\n\n function decorateOver(box) {\n var width = fontSize / 12;\n drawTextLine(width, box, lineThrough, box.bottom - box.height / 2.7);\n drawTextLine(width, box, overline, box.top);\n }\n\n function decorateUnder(box) {\n var width = fontSize / 12;\n var underlinePos = box.bottom;\n if (underlineOffset != null) {\n underlinePos += underlineOffset;\n } else {\n underlinePos += width; // for \"auto\" it seems better to add line width\n }\n drawTextLine(width, box, underline, underlinePos);\n }\n }\n\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != \"auto\") {\n // use the current stacking context\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n // normal flow — use given container. we still have to\n // figure out where should we insert this element with the\n // assumption that its z-index is zero, as the group might\n // already contain elements with higher z-index.\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\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n\n if (main !== group) {\n // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\n // console.log(a.slice(i+1));\n\n // if (nodeInfo._matrix) {\n // tmp.transform(nodeInfo._matrix);\n // }\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n // console.log(r);\n // tmp.append(Path.fromRect(r));\n // tmp.append(new Text(element.className || element.id, r.topLeft()));\n }\n }\n\n return tmp;\n }\n\n function renderElement(element, container) {\n var style = getComputedStyle$1(element);\n\n updateCounters(style);\n\n if (/^(style|script|link|meta|iframe|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n\n if (nodeInfo._clipbox == null) {\n return;\n }\n\n var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n var visibility = getPropertyValue(style, \"visibility\");\n var display = getPropertyValue(style, \"display\");\n\n if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n return;\n }\n\n var tr = getTransform(style);\n var group;\n\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\n // XXX: remove at some point\n // group._pdfElement = element;\n // group.options._pdfDebug = \"\";\n // if (element.id) {\n // group.options._pdfDebug = \"#\" + element.id;\n // }\n // if (element.className) {\n // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\n // }\n\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n\n pushNodeInfo(element, style, group);\n\n if (!tr) {\n _renderWithPseudoElements(element, group);\n }\n else {\n saveStyle(element, function(){\n // must clear transform, so getBoundingClientRect returns correct values.\n pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n // must also clear transitions, so correct values are returned *immediately*\n pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n // the presence of any transform makes it behave like it had position: relative,\n // because why not.\n // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n if (getPropertyValue(style, \"position\") == \"static\") {\n // but only if it's not already positioned. :-/\n pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n }\n\n // must translate to origin before applying the CSS\n // transformation, then translate back.\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [ 1, 0, 0, 1, -x, -y ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n m = setTransform$1(group, m);\n\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n _renderWithPseudoElements(element, group);\n });\n }\n\n popNodeInfo();\n\n //drawDebugBox(element.getBoundingClientRect(), container);\n }\n\n // function drawDebugBox(box, group, color) {\n // var path = Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n // if (color) {\n // path.stroke(color);\n // }\n // group.append(path);\n // }\n\n // function dumpTextNode(node) {\n // var txt = node.data.replace(/^\\s+/, \"\");\n // if (txt.length < 100) {\n // console.log(node.data.length + \": |\" + txt);\n // } else {\n // console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\n // }\n // }\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, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n }\n\n var drawing = {\n \tsvg: svg$1,\n \tcanvas: canvas,\n \tutil: util,\n \tHasObservers: HasObservers,\n \tPathParser: PathParser,\n \tparsePath: parsePath,\n \tBaseNode: BaseNode,\n \tOptionsStore: OptionsStore,\n \tSurface: Surface,\n \tSurfaceFactory: SurfaceFactory,\n \texportImage: exportImage,\n \texportSVG: exportSVG,\n \tQuadNode: QuadNode,\n \tShapesQuadTree: ShapesQuadTree,\n \tElement: Element$1,\n \tCircle: Circle,\n \tArc: Arc,\n \tPath: Path,\n \tMultiPath: MultiPath,\n \tText: Text,\n \tImage: Image$1,\n \tGroup: Group,\n \tLayout: Layout,\n \tRect: Rect$2,\n \talign: align,\n \tvAlign: vAlign,\n \tstack: stack,\n \tvStack: vStack,\n \twrap: wrap,\n \tvWrap: vWrap,\n \tfit: fit,\n \tLinearGradient: LinearGradient,\n \tRadialGradient: RadialGradient,\n \tGradientStop: GradientStop,\n \tGradient: Gradient,\n \tAnimation: Animation,\n \tAnimationFactory: AnimationFactory,\n \tdrawDOM: drawDOM,\n \tdrawText: drawText,\n \tgetFontFaces: getFontFaces\n };\n\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n\n // Use unique SVG Definition IDs for Kendo UI\n defId = 1000;\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\n })(window.kendo.jQuery);\n\n (function($) {\n\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\n var TOOLTIP_TEMPLATE = '
    ' +\n '
    ' +\n '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = `
    ${kendo.ui.icon($(''), { icon: \"x\" })}
    `;\n\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\n options = options || {};\n\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\n this._openPopupHandler = this._openPopup.bind(this);\n\n this.surface = surface;\n this._bindEvents();\n },\n\n options: {\n position: \"top\",\n showOn: \"mouseenter\",\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n\n _bindEvents: function() {\n this._showHandler = this._showEvent.bind(this);\n this._surfaceLeaveHandler = this._surfaceLeave.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._mousemoveHandler = this._mousemove.bind(this);\n\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\n this.surface.element.on(\"mouseleave\" + NS, this._surfaceLeaveHandler);\n\n this.element.on(\"click\" + NS, \".k-tooltip-button\", this._hideClick.bind(this));\n this.element.on(\"mouseleave\" + NS, this._tooltipLeave.bind(this));\n },\n\n getPopup: function() {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n\n return this.popup;\n },\n\n destroy: function() {\n var popup = this.popup;\n\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\n this.surface.element.off(\"mouseleave\" + NS, this._surfaceLeaveHandler);\n this.element.off(\"click\" + NS);\n this.element.off(\"mouseleave\" + NS);\n\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n\n clearTimeout(this._timeout);\n\n delete this.element;\n delete this.content;\n delete this.surface;\n },\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\n _tooltipShape: function(shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\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\n if (content) {\n this.content.html(content);\n return true;\n }\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\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\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\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\n show: function(shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n\n hide: function() {\n var popup = this.popup;\n var current = this._current;\n\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current &&\n !this.surface.trigger(\"tooltipClose\", { element: current.shape, target: current.target, popup: popup })) {\n popup.close();\n }\n },\n\n _hideClick: function(e) {\n e.preventDefault();\n this.hide();\n },\n\n _show: function(target, shape, options, event, delay) {\n var current = this._current;\n\n clearTimeout(this._timeout);\n\n if (current && ((current.shape === shape && options.shared) || current.target === target)) {\n return;\n }\n\n clearTimeout(this._showTimeout);\n\n var popup = this.getPopup();\n\n if (!this.surface.trigger(\"tooltipOpen\", { element: shape, target: target, popup: popup }) &&\n this._updateContent(target, shape, options)) {\n\n this._autoHide(options);\n var elementSize = this._measure(options);\n\n if (popup.visible()) {\n popup.close(true);\n }\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\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n\n _openPopup: function() {\n var current = this._current;\n var position = current.position;\n\n this.getPopup().open(position.left, position.top);\n },\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\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\n _showEvent: function(e) {\n var shape = this._tooltipShape(e.element);\n\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n\n _measure: function(options) {\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n\n const clone = this.element.clone().appendTo(document.body).css({ visibility: 'hidden' });\n const width = outerWidth(clone);\n const height = outerHeight(clone);\n clone.remove();\n\n this.element.css({\n width: width,\n height: height\n });\n\n return {\n width: width,\n height: height\n };\n },\n\n _mouseleave: function(e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n\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\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({ left: position.left, 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\n _popupRelatedTarget: function(e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n },\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\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n\n })(window.kendo.jQuery);\n\n (function($) {\n\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\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n\n var Surface = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, {});\n\n this.options = deepExtend({}, this.options, options);\n\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n\n this._triggerInstanceHandler = this._triggerInstanceEvent.bind(this);\n this._bindHandler(\"click\");\n this._bindHandler(\"mouseenter\");\n this._bindHandler(\"mouseleave\");\n this._bindHandler(\"mousemove\");\n\n this._enableTracking();\n },\n\n options: {\n name: \"Surface\",\n tooltip: {}\n },\n\n events: [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\",\n \"tooltipOpen\",\n \"tooltipClose\"\n ],\n\n _triggerInstanceEvent: function(e) {\n this.trigger(e.type, e);\n },\n\n _bindHandler: function(event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n\n draw: function(element) {\n this._instance.draw(element);\n },\n\n clear: function() {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n\n destroy: function() {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n\n Widget.fn.destroy.call(this);\n },\n\n exportVisual: function() {\n return this._instance.exportVisual();\n },\n\n eventTarget: function(e) {\n return this._instance.eventTarget(e);\n },\n\n showTooltip: function(shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n\n hideTooltip: function() {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n\n suspendTracking: function() {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n\n resumeTracking: function() {\n this._instance.resumeTracking();\n },\n\n getSize: function() {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n\n setSize: function(size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n\n _resize: function() {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n\n _enableTracking: function() {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n\n kendo.ui.plugin(Surface);\n\n Surface.create = function(element, options) {\n return new Surface(element, options);\n };\n\n kendo.drawing.Surface = Surface;\n\n function translate(offset) {\n this._instance.translate(offset);\n }\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n\n drawing.drawDOM = function(element, options) {\n return drawDOM($(element)[0], options);\n };\n\n // Aliases used by spreadsheet/print.js\n drawing.drawDOM.drawText = drawing.drawText;\n drawing.drawDOM.getFontFaces = drawing.getFontFaces;\n\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"drawing\",\n name: \"Drawing API\",\n category: \"framework\",\n description: \"The Kendo UI low-level drawing API\",\n depends: [ \"core\", \"color\", \"popup\", \"icons\" ]\n };\n\n}));\n"]}