{"version":3,"sources":["kendo.dataviz.core.js"],"names":["f","define","$","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","text","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","box","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","cloneNode","textContent","appendChild","body","String","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","isArray","Array","addClass","element","classes","idx","className","classArray","indexOf","removeClass","replace","SPACE_REGEX","alignPathToPixel","path","offset","stroke","drawing","defined","segments","anchor","round","translate","clockwise","angle1","angle2","x","y","isObject","isString","STRING","isNumber","isNaN","styleValue","isSizeField","field","SIZE_STYLES_REGEX","test","elementStyles","styles","result","field$1","stylesArray","getComputedStyle","parseFloat","getSpacing","defaultSpacing","spacing","top","right","bottom","left","TOP","RIGHT","BOTTOM","LEFT","getTemplate","template","TemplateService","compile","isFunction","content","grep","array","callback","hasClasses","classNames","names","split","inArray","interpolateValue","start","end","progress","COORD_PRECISION","mousewheelDelta","e","delta","wheelDelta","Math","ceil","floor","detail","setDefaultOptions","type","proto","prototype","sparseArrayLimits","arr","min","MAX_VALUE","max","MIN_VALUE","isFinite","undefined","rotatePoint","cx","cy","angle","theta","rad","Point","cos","sin","numericComparer","a","b","boxDiff","r","s","c","d","g","h","boxes","x1","y1","x2","y2","Box","innerRadialStops","currentStop","stops","usedSpace","innerRadius","radius","currentStops","rectToBox","rect","origin","bottomRight","createAxisTick","tickOptions","tickX","tickY","position","tick","Path","color","vertical","moveTo","lineTo","createAxisGridLine","gridLine","lineStart","lineEnd","line","dashType","absoluteDateDiff","diff","getTime","offsetDiff","getTimezoneOffset","TIME_PER_MINUTE","addTicks","date","ticks","Date","toDate","startOfWeek","weekStartDay","daysToSubtract","day","getDay","TIME_PER_DAY","adjustDST","hours","getHours","setHours","addHours","tzDiff","roundedDate","setMinutes","TIME_PER_HOUR","addDuration","dateValue","unit","YEARS","getFullYear","MONTHS","getMonth","WEEKS","DAYS","getDate","HOURS","MINUTES","getSeconds","setSeconds","SECONDS","TIME_PER_SECOND","MILLISECONDS","getMilliseconds","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","TIME_PER_UNIT","dateIndex","baseUnitStep","index","startDate","duration","lteDateIndex","sortedDates","currentDate","low","high","parseDate","intlService","parseDates","dates","autoMajorUnit","scale","relativeValue","scaleMultiplier","DEFAULT_PRECISION","abs","pow","log","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","step","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","axisOptions","userOptions","userSetLimits","minorUnit","divisor","ratio","remainder","threshold","timeUnits","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","totalUnits","unitsToAdd","head","tail","initRange","axisCrossingValue","throwNegativeValuesError","autoAxisMin$1","base","autoAxisMax$1","logMaxRemainder","Error","angularDistance","numberSign","Group","geometry","Rect","Circle","geometryTransform","Segment","dataviz","__common_getter_js","X","Y","CENTER","WIDTH","HEIGHT","DEFAULT_WIDTH","DEFAULT_HEIGHT","WHITE","BLACK","DEFAULT_FONT","AXIS_LABEL_CLICK","NOTE_CLICK","NOTE_HOVER","OUTSIDE","NONE","CIRCLE","TRIANGLE","CROSS","ARC","INSIDE","VALUE","OBJECT","DATE","FORMAT_REGEX","HIGHLIGHT_ZINDEX","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","TRIGGER","InstanceObserver","ref","append","bindEvents","deg","elementOffset","elementSize","eventElement","eventCoordinates","last","limitValue","unbindEvents","valueOrDefault","FontLoader","Ring","Sector","ShapeBuilder","ChartElement","BoxElement","ShapeElement","LINEAR","RADIAL","GRADIENTS","RootElement","FloatElement","DrawingText","Text","ROWS_SPLIT_REGEX","TextBox","Title","AxisLabel","DEFAULT_ICON_SIZE","DEFAULT_LABEL_COLOR","Note","Axis","TIME_PER_MILLISECOND","MIN_CATEGORY_POINTS_RANGE","CategoryAxis","DateLabelFormats","AUTO","BASE_UNITS","FIT","DateCategoryAxis","MIN_VALUE_RANGE","NumericAxis","DateValueAxis","DEFAULT_MAJOR_UNIT","LogarithmicAxis","GridLinesMixin","RadarCategoryAxis","PolarAxis","RadarNumericAxisMixin","RadarNumericAxis","RadarLogarithmicAxis","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","CurveProcessor","transform","getter","Number","format","toString","register","userImplementation","Object","defineProperties","implementation","_intlService","auto","formatString","intl","values","len","arguments","match","apply","concat","localeAuto","locale","placeholderFormat","parseInt","substring","fn","chart","context","sender","rtl","notify","name","args","trigger","create","events","observer","handlers","handlerMap","isDefaultPrevented","callObserver","fnName","requiresHandlers","this$1","fetchFonts","fonts","state","depth","MAX_DEPTH","keys","forEach","loadFonts","promises","font","load","logToConsole","Promise","all","then","preloadFonts","clone","equals","point","rotate","center","degrees","cosT","sinT","multiply","distanceTo","dx","dy","sqrt","onCircle","radians","move","wrap","targetBox","wrapPoint","arrayPoint","snapTo","axis","alignTo","targetCenter","shrink","dw","dh","expand","pad","padding","unpad","containsPoint","points","getHash","overlaps","rotation","r1","r2","r3","r4","toRect","hasSize","align","alignment","c1","c2","sizeFunc","startAngle","middle","setRadius","newRadius","radianAngle","ax","ay","adjacentBox","distance","sector","midAndle","midPoint","hw","hh","sa","ca","p","endAngle","vector","startPoint","startVector","endPoint","endVector","dist","getBBox","angles","allAngles","startAngleIndex","endAngleIndex","slice","call","createRing","innerEnd","arc","Arc","radiusX","radiusY","fromArc","close","pointAt","children","reflow","currentChild","destroy","animation","getRoot","parent","getSender","service","getService","chartService","translateChildren","childrenCount","item","arguments$1","renderVisual","visible","createVisual","addVisual","renderChildren","createAnimation","renderComplete","visual","chartElement","appendVisual","zIndex","Animation","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","pos","sibling","here","visuals","insert","traverse","child","closest","matched","hasHighlight","highlight","createHighlight","toggleHighlight","show","highlightOptions","customVisual","_highlight","fill","opacity","highlightVisualArgs","series","dataItem","category","percentage","runningTotal","total","createGradientOverlay","gradientOptions","overlay","createGradient","closed","elements","margin","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","vAlign","paddingBox","contentBox","hasBox","background","fromRect","visualStyle","cursor","pointData","getElement","halfWidth","fromPoints","MultiPath","visualOptions","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","gradient","LinearGradient","RadialGradient","_initDirection","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupStart","groupIdx","group","groupElements","elementStart","groupElementsCount","elementSize$$1","groupElementStart","elementBox","ref$1","groupOptions","groups","groupsSize","maxGroupElementsSize","groupsCount","groupsStart","alignStart","groupSize","maxSize","groupElementsSize","topLeft","_initContainer","_autoReflow","rowIdx","rows","floatElement","textOptions","container","trim","visualBox","visualFn","_boxReflow","visualContext","clippedBBox","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","buildTitle","defaultOptions","title","titleOptions","culture","click","widget","alignRotation","bbox","matrix","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","topRight","bottomLeft","distanceLeft","distanceRight","alignEnd","alignCenter","transformCopy","fields","render","hide","label","icon","noteTemplate","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","preventDefault","hover","leave","_unsetActivePoint","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","_deferLabels","createLabels","createTitle","createNotes","labelsRange","skip","labelsCount","range","labelOptions","autoRotateLabels","createAxisLabel","lineBox","mirror","axisX","axisY","lineWidth","visualSize","note","notes","items","data","parseNoteValue","reverse","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","tickPositions","skipUnit","count","tickLineOptions","getMajorTickPositions","getMinorTickPositions","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","altAxis","slotX","slotY","bandRect","plotBands","plotArea","_plotbandGroup","pane","axes","getSlot","from","to","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","space","rootBox","boxSize","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","labelPos","labelBox","firstTickPosition","nextTickPosition","labelX","labelY","labelsBetweenTicks","justified","labelOffset","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","limit","lastLabel","limitRange","rangeSize","valueRange","years","months","weeks","days","minutes","seconds","milliseconds","_ticks","_initCategories","categories","definedMin","definedMax","srcCategories","rangeIndices","totalRange","totalRangeIndices","_seriesMax","getScale","getTickPositions","stepSize","positions","unshift","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","cache","_hash","p1","p2","slotBox","singleSlot","categoryIndex","pointCategoryIndex","startValue","getCategory","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","dataItems","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","useDefault","roundToBaseUnit","userSetBaseUnit","userSetBaseUnitStep","toLowerCase","defaultBaseUnit","autoBaseUnit","_groupsStart","groupCategories","rounds","lastCategory","categoryIx","minDiff","_categoryRange","_range","categoryLimits","categoriesRange","minIdx","maxIdx","_roundToTotalStep","currentRange","round$$1","datesRange","totalLimits","panRange","indicesRange","autoBaseUnitSteps","maxDateGroups","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","rangeOptions","autoUnit","stepOptions","unitSteps","nextStep","span","autoUnitIx","units","shift","nextDate","maxCategory","upper","roundToNext","roundedStep","unitFormat","dateFormats","totalOptions","totalMajorUnit","getDivisions","stepValue","lineSize","divisions","dir","startEdge","skipStep","getValue","valueOffset","endValue","isValidRange","newRange","axisCrossingValues","timeRange","exact","limittedRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","power","_lineOptions","minorOptions","ref$2","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","nextValue","difference","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","intervalAngle","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","interval","minorAngle","minorRadius","band","ring","plotBandSlot","slotStart","toValue","slots","totalDivs","slotAngle","fromValue","instanceOptions","tmp","atan2","PI","bandStyle","shape","polarAxis","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","beta","axisType","minorSkipStep","process","dataPoints","p0","tangent","initialControlPoint","lastControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","cp1","controlPoints$2","tangent$2","removeDuplicates","pop","controlOut","firstControlPoint","secondControlPoint","splice","invertAxis","lineFunction","calculateFunction","isLine","monotonic","sign","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","Gradients","draw","ExportMixin","skipLegacy","exportVisual","exportSVG","exportImage","exportPDF","svg","imageDataURL","Surface","exportGroup","surface","image","support","canvas","css","display","appendTo","_rootElement","toDataURL","remove","Point2D","Box2D","mwDelta","originalEvent"],"mappings":"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","file":"kendo.dataviz.core.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n measureBox.textContent = text;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (String(text).length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var X = 'x';\n var Y = 'y';\n var TOP = 'top';\n var BOTTOM = 'bottom';\n var LEFT = 'left';\n var RIGHT = 'right';\n var CENTER = 'center';\n var WIDTH = 'width';\n var HEIGHT = 'height';\n var COORD_PRECISION = 3;\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var DEFAULT_WIDTH = 600;\n var DEFAULT_HEIGHT = 400;\n var WHITE = '#fff';\n var BLACK = '#000';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_PRECISION = 10;\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var OUTSIDE = 'outside';\n var NONE = 'none';\n var CIRCLE = 'circle';\n var TRIANGLE = 'triangle';\n var CROSS = 'cross';\n var ARC = 'arc';\n var INSIDE = 'inside';\n var VALUE = 'value';\n var STRING = 'string';\n var OBJECT = 'object';\n var DATE = 'date';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HIGHLIGHT_ZINDEX = 100;\n var constants = {\n X: X,\n Y: Y,\n WIDTH: WIDTH,\n HEIGHT: HEIGHT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n TOP: TOP,\n LEFT: LEFT,\n BOTTOM: BOTTOM,\n RIGHT: RIGHT,\n CENTER: CENTER,\n COORD_PRECISION: COORD_PRECISION,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n CIRCLE: CIRCLE,\n TRIANGLE: TRIANGLE,\n CROSS: CROSS,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n WHITE: WHITE,\n BLACK: BLACK,\n DEFAULT_FONT: DEFAULT_FONT,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n OUTSIDE: OUTSIDE,\n INSIDE: INSIDE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n VALUE: VALUE,\n STRING: STRING,\n OBJECT: OBJECT,\n DATE: DATE,\n ARC: ARC,\n FORMAT_REGEX: FORMAT_REGEX,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX\n };\n function isArray(value) {\n return Array.isArray(value);\n }\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [classes];\n for (var idx = 0; idx < classArray.length; idx++) {\n var className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += ' ' + className;\n }\n }\n }\n var SPACE_REGEX = /\\s+/g;\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, '').replace(SPACE_REGEX, ' ');\n }\n }\n function alignPathToPixel(path) {\n var offset = 0.5;\n if (path.options.stroke && kendo.drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n return path;\n }\n function clockwise(angle1, angle2) {\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n function isObject(value) {\n return typeof value === 'object';\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function styleValue(value) {\n if (isNumber(value)) {\n return value + 'px';\n }\n return value;\n }\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [styles] : styles;\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n return result;\n } else if (isObject(styles)) {\n for (var field$1 in styles) {\n element.style[field$1] = styleValue(styles[field$1]);\n }\n }\n }\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) {\n defaultSpacing = 0;\n }\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var defaultImplementation = {\n format: function (format, value) {\n return value;\n },\n toString: function (value) {\n return value;\n },\n parseDate: function (value) {\n return new Date(value);\n }\n };\n var current = defaultImplementation;\n var IntlService = Class.extend({});\n IntlService.register = function (userImplementation) {\n current = userImplementation;\n };\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function () {\n return current;\n }\n }\n });\n }\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n var FormatService = Class.extend({\n init: function (intlService) {\n this._intlService = intlService;\n },\n auto: function (formatString) {\n var values = [], len = arguments.length - 1;\n while (len-- > 0)\n values[len] = arguments[len + 1];\n var intl = this.intlService;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [formatString].concat(values));\n }\n return intl.toString(values[0], formatString);\n },\n localeAuto: function (formatString, values, locale) {\n var intl = this.intlService;\n var result;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10)];\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : '', locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n return result;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(FormatService.fn, {\n intlService: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var ChartService = Class.extend({\n init: function (chart, context) {\n if (context === void 0) {\n context = {};\n }\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = context.rtl;\n },\n notify: function (name, args) {\n this.chart.trigger(name, args);\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var current$1;\n var DomEventsBuilder = Class.extend({});\n DomEventsBuilder.register = function (userImplementation) {\n current$1 = userImplementation;\n };\n DomEventsBuilder.create = function (element, events) {\n if (current$1) {\n return current$1.create(element, events);\n }\n };\n var current$2 = {\n compile: function (template) {\n return template;\n }\n };\n var TemplateService = Class.extend({});\n TemplateService.register = function (userImplementation) {\n current$2 = userImplementation;\n };\n TemplateService.compile = function (template) {\n return current$2.compile(template);\n };\n var services = {\n ChartService: ChartService,\n DomEventsBuilder: DomEventsBuilder,\n FormatService: FormatService,\n IntlService: IntlService,\n TemplateService: TemplateService\n };\n function getTemplate(options) {\n if (options === void 0) {\n options = {};\n }\n var template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n return template;\n }\n function grep(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result.push(array[idx]);\n }\n }\n return result;\n }\n function hasClasses(element, classNames) {\n if (element.className) {\n var names = classNames.split(' ');\n for (var idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n }\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n var TRIGGER = 'trigger';\n var InstanceObserver = Class.extend({\n init: function (observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\n trigger: function (name, args) {\n var ref = this;\n var observer = ref.observer;\n var handlerMap = ref.handlerMap;\n var isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n return isDefaultPrevented;\n },\n callObserver: function (fnName) {\n var args = [], len = arguments.length - 1;\n while (len-- > 0)\n args[len] = arguments[len + 1];\n return this.observer[fnName].apply(this.observer, args);\n },\n requiresHandlers: function (names) {\n var this$1 = this;\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n });\n function map(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n var value = callback(array[idx]);\n if (kendo.drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = kendo.drawing.util.round(e.detail / 3);\n }\n return delta;\n }\n var ref = kendo.drawing.util;\n var append = ref.append;\n var bindEvents = ref.bindEvents;\n var defined = ref.defined;\n var deg = ref.deg;\n var elementOffset = ref.elementOffset;\n var elementSize = ref.elementSize;\n var eventElement = ref.eventElement;\n var eventCoordinates = ref.eventCoordinates;\n var last = ref.last;\n var limitValue = ref.limitValue;\n var objectKey = ref.objectKey;\n var rad = ref.rad;\n var round = ref.round;\n var unbindEvents = ref.unbindEvents;\n var valueOrDefault = ref.valueOrDefault;\n var FontLoader = Class.extend({});\n FontLoader.fetchFonts = function (options, fonts, state) {\n if (state === void 0) {\n state = { depth: 0 };\n }\n var MAX_DEPTH = 5;\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n Object.keys(options).forEach(function (key) {\n var value = options[key];\n if (key === 'dataSource' || key[0] === '$' || !value) {\n return;\n }\n if (key === 'font') {\n fonts.push(value);\n } else if (typeof value === 'object') {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n };\n FontLoader.loadFonts = function (fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n FontLoader.preloadFonts = function (options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n FontLoader.loadFonts(fonts, callback);\n };\n function setDefaultOptions(type, options) {\n var proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n }\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var idx = 0, length = arr.length; idx < length; idx++) {\n var value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n equals: function (point) {\n return point && this.x === point.x && this.y === point.y;\n },\n rotate: function (center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n this.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return this;\n },\n multiply: function (a) {\n this.x *= a;\n this.y *= a;\n return this;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n Point.onCircle = function (center, angle, radius) {\n var radians = rad(angle);\n return new Point(center.x - radius * Math.cos(radians), center.y - radius * Math.sin(radians));\n };\n var Box = Class.extend({\n init: function (x1, y1, x2, y2) {\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n move: function (x, y) {\n var height = this.height();\n var width = this.width();\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n return this;\n },\n wrap: function (targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n return this;\n },\n wrapPoint: function (point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n return this;\n },\n alignTo: function (targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n shrink: function (dw, dh) {\n this.x2 -= dw;\n this.y2 -= dh;\n return this;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var spacing = getSpacing(padding);\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n return this;\n },\n unpad: function (padding) {\n var spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return this.pad(spacing);\n },\n clone: function () {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n center: function () {\n return new Point(this.x1 + this.width() / 2, this.y1 + this.height() / 2);\n },\n containsPoint: function (point) {\n return point.x >= this.x1 && point.x <= this.x2 && point.y >= this.y1 && point.y <= this.y2;\n },\n points: function () {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n },\n getHash: function () {\n return [\n this.x1,\n this.y1,\n this.x2,\n this.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n toRect: function () {\n return new Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? WIDTH : HEIGHT;\n var size = this[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n return new Point(cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta), cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta));\n }\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n clone: function () {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n setRadius: function (newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n return this;\n },\n point: function (angle, innerRadius) {\n var radianAngle = rad(angle);\n var ax = Math.cos(radianAngle);\n var ay = Math.sin(radianAngle);\n var radius = innerRadius ? this.innerRadius : this.radius;\n var x = round(this.center.x - ax * radius, COORD_PRECISION);\n var y = round(this.center.y - ay * radius, COORD_PRECISION);\n return new Point(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n var hw = width / 2;\n var hh = height / 2;\n var sa = Math.sin(rad(midAndle));\n var ca = Math.cos(rad(midAndle));\n var x = midPoint.x - hw;\n var y = midPoint.y - hh;\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n return new Box(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var center = this.center;\n var innerRadius = this.innerRadius;\n var radius = this.radius;\n var startAngle = this.startAngle;\n var endAngle = this.startAngle + this.angle;\n var dx = p.x - center.x;\n var dy = p.y - center.y;\n var vector = new Point(dx, dy);\n var startPoint = this.point(startAngle);\n var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n var endPoint = this.point(endAngle);\n var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n getBBox: function () {\n var this$1 = this;\n var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n var startAngle = round(this.startAngle % 360);\n var endAngle = round((startAngle + this.angle) % 360);\n var innerRadius = this.innerRadius;\n var allAngles = [\n 0,\n 90,\n 180,\n 270,\n startAngle,\n endAngle\n ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, endAngleIndex + 1), allAngles.slice(startAngleIndex, allAngles.length));\n }\n }\n for (var i = 0; i < angles.length; i++) {\n var point = this$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n return box;\n },\n expand: function (value) {\n this.radius += value;\n return this;\n }\n });\n function numericComparer(a, b) {\n return a - b;\n }\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n setRadius: function (newRadius) {\n this.radius = newRadius;\n return this;\n }\n });\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n var center = new geometry.Point(sector.center.x, sector.center.y);\n var radius = Math.max(sector.radius, 0);\n var innerRadius = Math.max(sector.innerRadius, 0);\n var arc = new geometry.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n });\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n this.children = [];\n this.options = deepExtend({}, this.options, options);\n },\n reflow: function (targetBox) {\n var children = this.children;\n var box;\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n this.box = box || targetBox;\n },\n destroy: function () {\n var children = this.children;\n if (this.animation) {\n this.animation.destroy();\n }\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getSender: function () {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n getService: function () {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n translateChildren: function (dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n var arguments$1 = arguments;\n var this$1 = this;\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1.children.push(item);\n item.parent = this$1;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual) {\n this.animation = drawing.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insert(pos, childVisual);\n },\n traverse: function (callback) {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: function () {\n },\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var this$1 = this;\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = this._highlight = customVisual($.extend(this.highlightVisualArgs(), {\n createVisual: function () {\n return this$1.createHighlight(highlightOptions);\n },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, HIGHLIGHT_ZINDEX);\n }\n this.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: { color: 'none' },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n ChartElement.prototype.options = {};\n var BoxElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n var reflowPaddingBox = function () {\n this$1.align(targetBox, X, options.align);\n this$1.align(targetBox, Y, options.vAlign);\n this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(this, contentBox);\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n this.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var options = this.options;\n var border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n setDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n BoxElement.fn.init.call(this, options);\n this.pointData = pointData;\n },\n getElement: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n var style = this.visualStyle();\n var element;\n if (type === CIRCLE) {\n element = new drawing.Circle(new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n }\n });\n setDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n });\n function innerRadialStops(options) {\n var stops = options.stops;\n var usedSpace = options.innerRadius / options.radius * 100;\n var length = stops.length;\n var currentStops = [];\n for (var i = 0; i < length; i++) {\n var currentStop = $.extend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var elementAxis = ref.elementAxis;\n var groupAxis = ref.groupAxis;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var ref$1 = this.groupOptions();\n var groups = ref$1.groups;\n var groupsSize = ref$1.groupsSize;\n var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n if (groupsCount) {\n var groupStart = groupsStart;\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var group = groups[groupIdx];\n var groupElements = group.groupElements;\n var elementStart = box[elementAxis + 1];\n var groupElementsCount = groupElements.length;\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1.elementSize(element);\n var groupElementStart = groupStart + this$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n var elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize$$1[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize$$1[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize$$1[elementSizeField] + this$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var children = ref.children;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var elementSpacing = ref.elementSpacing;\n var groupSpacing = ref.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var childrenCount = children.length;\n var groups = [];\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n var elementSize$$1 = this$1.elementSize(element);\n if (this$1.options.wrap && round(groupElementsSize + elementSpacing + elementSize$$1[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize$$1[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize$$1[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n var DrawingText = drawing.Text;\n var Text = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.content = content;\n this.reflow(new Box());\n },\n reflow: function (targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n this.baseline = size.baseline;\n this.box = new Box(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var ref = this.options;\n var font = ref.font;\n var color = ref.color;\n var opacity = ref.opacity;\n var cursor = ref.cursor;\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: {\n color: color,\n opacity: opacity\n },\n cursor: cursor\n });\n }\n });\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n var ROWS_SPLIT_REGEX = /\\n|\\\\n/m;\n var TextBox = BoxElement.extend({\n init: function (content, options) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n },\n _initContainer: function () {\n var options = this.options;\n var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n this.container = floatElement;\n this.append(floatElement);\n for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n var text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n var visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n var visual = this.visual = visualFn(this.visualContext(visualBox));\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n visual.options.zIndex = options.zIndex;\n visual.options.noclip = options.noclip;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n if (!options.visible) {\n return;\n }\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (this.options.visual) {\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n color: options.color,\n font: options.font,\n margin: options.margin,\n padding: options.padding,\n visible: options.visible\n };\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n return {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.visualOptions(),\n createVisual: function () {\n this$1._boxReflow = true;\n this$1.reflow(targetBox);\n this$1._boxReflow = false;\n return this$1.getDefaultVisual();\n }\n };\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n return geometryTransform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.append(new TextBox(this.options.text, $.extend({}, this.options, { vAlign: this.options.position })));\n },\n reflow: function (targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var titleOptions = options;\n if (typeof options === 'string') {\n titleOptions = { text: options };\n }\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n return title;\n };\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart, alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geometryTransform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n setDefaultOptions(AxisLabel, { _autoReflow: false });\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = '#fff';\n var Note = BoxElement.extend({\n init: function (fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n this.fields = fields;\n this.chartService = chartService;\n this.render();\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var options = this.options;\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n if (defined(label) && label.visible) {\n var noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n this.label = new TextBox(text, deepExtend({}, label));\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n var marker = new ShapeElement(deepExtend({}, icon));\n this.marker = marker;\n this.append(marker);\n if (this.label) {\n this.append(this.label);\n }\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var marker = ref.marker;\n var wrapperBox = ref.wrapperBox;\n var center = targetBox.center();\n var length = options.line.length;\n var position = options.position;\n if (options.visible) {\n var lineStart, box, contentBox;\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual($.extend(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var options = this.options;\n return $.extend(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : '',\n visual: this.visual\n });\n }\n });\n setDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = new ChartService();\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n createLabels: function () {\n var this$1 = this;\n var options = this.options;\n var align = options.vertical ? RIGHT : CENTER;\n var labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n var step = Math.max(1, labelOptions.step);\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n if (labelOptions.visible) {\n var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n lineBox: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var axisX = mirror ? box.x1 : box.x2;\n var axisY = mirror ? box.y2 : box.y1;\n var lineWidth = options.line.width || 0;\n return vertical ? new Box(axisX, box.y1, axisX, box.y2 - lineWidth) : new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var options = this.options;\n var titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title);\n if (titleOptions.visible && titleOptions.text) {\n var title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n },\n createNotes: function () {\n var this$1 = this;\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n this.notes = [];\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1.parseNoteValue(item.value);\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1.chartService);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this$1.append(note);\n this$1.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var options = this.options;\n var tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(this._backgroundPath);\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n var altAxis = grep(this.pane.axes, function (axis) {\n return axis.options.vertical !== this$1.options.vertical;\n })[0];\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = void 0, slotY = void 0;\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n }\n this.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = !options.justified;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = tickPositions[idx + 1] - tickPositions[idx];\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n var lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n return box;\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return null;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n if (from < min) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: minValue,\n max: maxValue\n };\n },\n valueRange: function () {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n }\n });\n setDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n });\n var MILLISECONDS = 'milliseconds';\n var SECONDS = 'seconds';\n var MINUTES = 'minutes';\n var HOURS = 'hours';\n var DAYS = 'days';\n var WEEKS = 'weeks';\n var MONTHS = 'months';\n var YEARS = 'years';\n var TIME_PER_MILLISECOND = 1;\n var TIME_PER_SECOND = 1000;\n var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\n var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\n var TIME_PER_DAY = 24 * TIME_PER_HOUR;\n var TIME_PER_WEEK = 7 * TIME_PER_DAY;\n var TIME_PER_MONTH = 31 * TIME_PER_DAY;\n var TIME_PER_YEAR = 365 * TIME_PER_DAY;\n var TIME_PER_UNIT = {\n 'years': TIME_PER_YEAR,\n 'months': TIME_PER_MONTH,\n 'weeks': TIME_PER_WEEK,\n 'days': TIME_PER_DAY,\n 'hours': TIME_PER_HOUR,\n 'minutes': TIME_PER_MINUTE,\n 'seconds': TIME_PER_SECOND,\n 'milliseconds': TIME_PER_MILLISECOND\n };\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n return diff - offsetDiff * TIME_PER_MINUTE;\n }\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n function toDate(value) {\n var result;\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n return result;\n }\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) {\n weekStartDay = 0;\n }\n var daysToSubtract = 0;\n var day = date.getDay();\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n daysToSubtract++;\n }\n }\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function addHours(date, hours) {\n var roundedDate = new Date(date);\n roundedDate.setMinutes(0, 0, 0);\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n return result;\n }\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n return addDuration(date, 1, unit, weekStartDay);\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\n function toTime(value) {\n if (isArray(value)) {\n var result = [];\n for (var idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n return a === b;\n }\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n if (baseUnit === MONTHS) {\n index = date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12 + timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n return index / baseUnitStep;\n }\n function duration(a, b, unit) {\n var diff;\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n return diff;\n }\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n return index;\n }\n if (sortedDates[index] <= date) {\n return index;\n }\n return index - 1;\n }\n function parseDate(intlService, date) {\n var result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n }\n function parseDates(intlService, dates) {\n if (isArray(dates)) {\n var result = [];\n for (var idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n return result;\n }\n return parseDate(intlService, dates);\n }\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n function indexOf(value, arr) {\n if (value instanceof Date) {\n var length = arr.length;\n for (var idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n return -1;\n }\n return arr.indexOf(value);\n }\n var CategoryAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n this._ticks = {};\n this._initCategories(this.options);\n },\n _initCategories: function (options) {\n var categories = (options.categories || []).slice(0);\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\n options.srcCategories = options.categories;\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n options.categories = options.categories.slice(min, max);\n }\n },\n rangeIndices: function () {\n var options = this.options;\n var length = options.categories.length || 1;\n var min = isNumber(options.min) ? options.min % 1 : 0;\n var max;\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n return {\n min: min,\n max: max\n };\n },\n totalRangeIndices: function (limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = (options.srcCategories || options.categories).length - (options.justified ? 1 : 0) || 1;\n }\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n return {\n min: min,\n max: max\n };\n },\n range: function () {\n var options = this.options;\n return {\n min: isNumber(options.min) ? options.min : 0,\n max: isNumber(options.max) ? options.max : options.categories.length\n };\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, (options.srcCategories || options.categories).length) - (options.justified ? 1 : 0)\n };\n },\n getScale: function () {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var lineBox = this.lineBox();\n var size = this.options.vertical ? lineBox.height() : lineBox.width();\n var scale = size / (max - min || 1);\n return scale * (this.options.reverse ? -1 : 1);\n },\n getTickPositions: function (stepSize) {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var ref$1 = this.rangeIndices();\n var min = ref$1.min;\n var max = ref$1.max;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var pos = lineBox[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var positions = [];\n var current = min % 1 !== 0 ? Math.floor(min / 1) + stepSize : min;\n while (current <= max) {\n positions.push(pos + round(scale * (current - min), COORD_PRECISION));\n current += stepSize;\n }\n return positions;\n },\n getLabelsTickPositions: function () {\n var tickPositions = this.getMajorTickPositions().slice(0);\n var range = this.rangeIndices();\n var scale = this.getScale();\n var box = this.lineBox();\n var options = this.options;\n var axis = options.vertical ? Y : X;\n var start = options.reverse ? 2 : 1;\n var end = options.reverse ? 1 : 2;\n if (range.min % 1 !== 0) {\n tickPositions.unshift(box[axis + start] - scale * (range.min % 1));\n }\n if (range.max % 1 !== 0) {\n tickPositions.push(box[axis + end] + scale * (1 - range.max % 1));\n }\n return tickPositions;\n },\n labelTickIndex: function (label) {\n var range = this.rangeIndices();\n var index = label.index;\n if (range.min > 0) {\n index = index - Math.floor(range.min);\n }\n return index;\n },\n arrangeLabels: function () {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n if (labels.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n var firstLabel = labels[0];\n var lastLabel = last(labels);\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n },\n getMajorTickPositions: function () {\n return this.getTicks().majorTicks;\n },\n getMinorTickPositions: function () {\n return this.getTicks().minorTicks;\n },\n getTicks: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + reverse + justified;\n if (cache._hash !== hash) {\n cache._hash = hash;\n cache.majorTicks = this.getTickPositions(1);\n cache.minorTicks = this.getTickPositions(0.5);\n }\n return cache;\n },\n getSlot: function (from, to, limit) {\n var ref = this;\n var options = ref.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref$1 = this.rangeIndices();\n var min = ref$1.min;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var slotBox = lineBox.clone();\n var singleSlot = !defined(to);\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n end = Math.max(start, end);\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n if (singleSlot && justified) {\n p2 = p1;\n }\n if (limit) {\n p1 = limitValue(p1, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n p2 = limitValue(p2, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n slot: function (from, to, limit) {\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n }\n return Axis.fn.slot.call(this, start, end, limit);\n },\n pointCategoryIndex: function (point) {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.rangeIndices();\n var startValue = reverse ? range.max : range.min;\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + 1];\n var lineEnd = lineBox[valueAxis + 2];\n var pos = point[valueAxis];\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n return Math.floor(value);\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.options.categories[index];\n },\n categoryIndex: function (value) {\n var options = this.options;\n var index = indexOf(value, options.srcCategories || options.categories);\n return index - Math.floor(options.min || 0);\n },\n translateRange: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = options.categories.length;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n return {\n min: offset,\n max: range + offset\n };\n },\n zoomRange: function (rate) {\n var rangeIndices = this.totalRangeIndices();\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);\n var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);\n if (max - min > 0) {\n return {\n min: min,\n max: max\n };\n }\n },\n scaleRange: function (scale) {\n var range = this.options.categories.length;\n var delta = scale * range;\n return {\n min: -delta,\n max: range + delta\n };\n },\n labelsCount: function () {\n var labelsRange = this.labelsRange();\n return labelsRange.max - labelsRange.min;\n },\n labelsRange: function () {\n var options = this.options;\n var justified = options.justified;\n var labelOptions = options.labels;\n var ref = this.totalRangeIndices(true);\n var min = ref.min;\n var max = ref.max;\n var start = Math.floor(min);\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n var skip;\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var totalRange = this.totalRange();\n var min = range.min + offset;\n var max = range.max + offset;\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\n pointsRange: function (start, end) {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n var min = range.min + diffStart / scale;\n var max = range.min + diffEnd / scale;\n var rangeMin = Math.min(min, max);\n var rangeMax = Math.max(min, max);\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n valueRange: function () {\n return this.range();\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\n categories: [],\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: { zIndex: 1 },\n justified: false,\n _deferLabels: true\n });\n var COORDINATE_LIMIT = 300000;\n var DateLabelFormats = {\n milliseconds: 'HH:mm:ss.fff',\n seconds: 'HH:mm:ss',\n minutes: 'HH:mm',\n hours: 'HH:mm',\n days: 'M/d',\n weeks: 'M/d',\n months: 'MMM \\'yy',\n years: 'yyyy'\n };\n var ZERO_THRESHOLD = 0.2;\n var AUTO = 'auto';\n var BASE_UNITS = [\n MILLISECONDS,\n SECONDS,\n MINUTES,\n HOURS,\n DAYS,\n WEEKS,\n MONTHS,\n YEARS\n ];\n var FIT = 'fit';\n var DateCategoryAxis = CategoryAxis.extend({\n init: function (axisOptions, chartService) {\n CategoryAxis.fn.init.call(this, axisOptions, chartService);\n var intlService = chartService.intl;\n var options = this.options;\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: parseDates(intlService, options.categories),\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max)\n });\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n if (options.categories && options.categories.length > 0) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n options.baseUnit = this.defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n this.autoBaseUnit(options);\n }\n this._groupsStart = addDuration(options.categories[0], 0, options.baseUnit, options.weekStartDay);\n this.groupCategories(options);\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n }\n this.options = options;\n },\n _initCategories: function () {\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n var categories = this.options.categories || [];\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n parseNoteValue: function (value) {\n return parseDate(this.chartService.intl, value);\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n translateRange: function (delta) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / (range.max - range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if (range.min && range.max) {\n var from = addTicks(options.min || range.min, offset);\n var to = addTicks(options.max || range.max, offset);\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n return range;\n },\n scaleRange: function (delta) {\n var rounds = Math.abs(delta);\n var result = this.range();\n var from = result.min;\n var to = result.max;\n if (from && to) {\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n result = {\n min: from,\n max: to\n };\n }\n return result;\n },\n defaultBaseUnit: function (options) {\n var categories = options.categories;\n var count = defined(categories) ? categories.length : 0;\n var minDiff = MAX_VALUE;\n var lastCategory, unit;\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n lastCategory = category;\n }\n return unit || DAYS;\n },\n _categoryRange: function (categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n }\n return range;\n },\n totalRange: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n rangeIndices: function () {\n var options = this.options;\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var categoryLimits = this.categoriesRange();\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n var minIdx = 0, maxIdx = 0;\n if (categories.length) {\n minIdx = dateIndex(min, categories[0], baseUnit, baseUnitStep);\n maxIdx = dateIndex(max, categories[0], baseUnit, baseUnitStep);\n if (options.roundToBaseUnit) {\n minIdx = Math.floor(minIdx);\n maxIdx = options.justified ? Math.floor(maxIdx) : Math.ceil(maxIdx);\n }\n }\n return {\n min: minIdx,\n max: maxIdx\n };\n },\n labelsRange: function () {\n var options = this.options;\n var labelOptions = options.labels;\n var range = this.rangeIndices();\n var min = Math.floor(range.min);\n var max = Math.ceil(range.max);\n return {\n min: min + labelOptions.skip,\n max: options.categories.length ? max + (options.justified ? 1 : 0) : 0\n };\n },\n categoriesRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n var max = toDate(range.max);\n if (!options.justified && dateEquals(max, this._roundToTotalStep(max, options, false))) {\n max = this._roundToTotalStep(max, options, true, true);\n }\n return {\n min: toDate(range.min),\n max: max\n };\n },\n currentRange: function () {\n var options = this.options;\n var round$$1 = options.roundToBaseUnit !== false;\n var totalRange = this.categoriesRange();\n var min = options.min;\n var max = options.max;\n if (!min) {\n min = round$$1 ? this._roundToTotalStep(totalRange.min, options, false) : totalRange.min;\n }\n if (!max) {\n max = round$$1 ? this._roundToTotalStep(totalRange.max, options, !options.justified) : totalRange.max;\n }\n return {\n min: min,\n max: max\n };\n },\n datesRange: function () {\n var range = this._categoryRange(this.options.srcCategories || this.options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n pan: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.currentRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.totalLimits();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(min, offset);\n var to = addTicks(max, offset);\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n return panRange;\n }\n },\n pointsRange: function (start, end) {\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.currentRange();\n var indicesRange = this.rangeIndices();\n var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n var options = this.options;\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n },\n zoomRange: function (delta) {\n var options = this.options;\n var totalLimits = this.totalLimits();\n var weekStartDay = options.weekStartDay;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var ref = this.currentRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (options.userSetBaseUnit === FIT) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n var rangeDiff = dateDiff(rangeMax, rangeMin);\n var diff = dateDiff(max, min);\n var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n var autoBaseUnitStep, ticks;\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n min = toDate(limitValue(min, totalLimits.min, totalLimits.max));\n max = toDate(limitValue(max, totalLimits.min, totalLimits.max));\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n }\n },\n totalLimits: function () {\n var options = this.options;\n var datesRange = this.datesRange();\n var min = this._roundToTotalStep(toDate(datesRange.min), options, false);\n var max = datesRange.max;\n if (!options.justified) {\n max = this._roundToTotalStep(max, options, true, dateEquals(max, this._roundToTotalStep(max, options, false)));\n }\n return {\n min: min,\n max: max\n };\n },\n range: function (rangeOptions) {\n var options = rangeOptions || this.options;\n var categories = options.categories;\n var autoUnit = options.baseUnit === FIT;\n var baseUnit = autoUnit ? BASE_UNITS[0] : options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var stepOptions = {\n baseUnit: baseUnit,\n baseUnitStep: baseUnitStep,\n weekStartDay: options.weekStartDay\n };\n var categoryLimits = this._categoryRange(categories);\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n return {\n min: this._roundToTotalStep(min, stepOptions, false),\n max: this._roundToTotalStep(max, stepOptions, true, true)\n };\n },\n autoBaseUnit: function (options) {\n var categoryLimits = this._categoryRange(options.categories);\n var span = toDate(options.max || categoryLimits.max) - toDate(options.min || categoryLimits.min);\n var maxDateGroups = options.maxDateGroups || this.options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var autoBaseUnitSteps = deepExtend({}, this.options.autoBaseUnitSteps, options.autoBaseUnitSteps);\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n nextStep = unitSteps.shift();\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n },\n groupCategories: function (options) {\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var maxCategory = toDate(sparseArrayLimits(categories).max);\n var ref = this.range(options);\n var min = ref.min;\n var max = ref.max;\n var groups = [];\n var nextDate;\n for (var date = min; date < max; date = nextDate) {\n groups.push(date);\n nextDate = addDuration(date, baseUnitStep, baseUnit, options.weekStartDay);\n if (nextDate > maxCategory && !options.max) {\n break;\n }\n }\n options.srcCategories = categories;\n options.categories = groups;\n },\n _roundToTotalStep: function (value, axisOptions, upper, roundToNext) {\n var options = axisOptions || this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var start = this._groupsStart;\n if (start) {\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (roundToNext) {\n roundedStep++;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, options.weekStartDay);\n }\n return addDuration(value, upper ? baseUnitStep : 0, baseUnit, options.weekStartDay);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var date = options.categories[index];\n var baseUnit = options.baseUnit;\n var unitFormat = labelOptions.dateFormats[baseUnit];\n var visible = true;\n if (options.justified) {\n var roundedDate = floorDate(date, baseUnit, options.weekStartDay);\n visible = dateEquals(roundedDate, date);\n } else if (!options.roundToBaseUnit) {\n visible = !dateEquals(this.range().max, date);\n }\n if (visible) {\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n }\n },\n categoryIndex: function (value) {\n var options = this.options;\n var categories = options.categories;\n var index = -1;\n if (categories.length) {\n index = Math.floor(dateIndex(toDate(value), categories[0], options.baseUnit, options.baseUnitStep || 1));\n }\n return index;\n },\n getSlot: function (a, b, limit) {\n var start = a;\n var end = b;\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n valueRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n autoBaseUnitSteps: {\n milliseconds: [\n 1,\n 10,\n 100\n ],\n seconds: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n minutes: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n hours: [\n 1,\n 2,\n 3\n ],\n days: [\n 1,\n 2,\n 3\n ],\n weeks: [\n 1,\n 2\n ],\n months: [\n 1,\n 2,\n 3,\n 6\n ],\n years: [\n 1,\n 2,\n 3,\n 5,\n 10,\n 25,\n 50\n ]\n },\n maxDateGroups: 10\n });\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = Math.abs(max);\n }\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round(diff / scale, DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n var axisMin;\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n var diff = (max - minValue) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = Math.max(0, minValue - (max - minValue) / 2);\n } else {\n axisMin = min;\n }\n return axisMin;\n }\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n var axisMax;\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = Math.min(0, maxValue - (min - maxValue) / 2);\n } else {\n axisMax = max;\n }\n return axisMax;\n }\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n var MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var autoOptions = autoAxisOptions(seriesMin, seriesMax, options);\n var totalOptions = totalAxisOptions(autoOptions, options);\n Axis.fn.init.call(this, axisOptions(autoOptions, options), chartService);\n this.totalMin = totalOptions.min;\n this.totalMax = totalOptions.max;\n this.totalMajorUnit = totalOptions.majorUnit;\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n },\n startValue: function () {\n return 0;\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options;\n var range = options.max - options.min;\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var range = options.max - options.min;\n var scale = lineSize / range;\n var step = unit * scale;\n var divisions = this.getDivisions(unit);\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var positions = [];\n var pos = lineBox[(vertical ? Y : X) + startEdge];\n var skipStep = 0;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n if (limit === void 0) {\n limit = false;\n }\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (options.max - options.min));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 0;\n }\n if (!defined(end)) {\n end = start || 0;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n var p1, p2;\n if (vertical) {\n p1 = options.max - Math.max(start, end);\n p2 = options.max - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - options.min;\n p2 = Math.max(start, end) - options.min;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = Number(options.max);\n var min = Number(options.min);\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var offset = dir * (point[valueAxis] - lineStart);\n var step = (max - min) / lineSize;\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = options.max;\n var min = options.min;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = max - min;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: min + offset,\n max: max + offset\n };\n },\n scaleRange: function (delta) {\n var options = this.options;\n var offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n zoomRange: function (delta) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n isValidRange: function (min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n });\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = { majorUnit: majorUnit };\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n return autoOptions;\n }\n function totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n if (userOptions) {\n var userSetLimits = defined(userOptions.min) || defined(userOptions.max);\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n return deepExtend(autoOptions, options);\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n setDefaultOptions(NumericAxis, {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n });\n var DateValueAxis = Axis.extend({\n init: function (seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.seriesMin = min;\n this.seriesMax = max;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit));\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n var options = this.options;\n return Math.floor(duration(options.min, options.max, options.baseUnit) / stepValue + 1);\n },\n getTickPositions: function (step) {\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var start = lineBox[(vertical ? Y : X) + startEdge];\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var scale = lineSize / timeRange;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, toDate(a), toDate(b), limit);\n },\n getValue: function (point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n return value !== null ? toDate(value) : null;\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n if (!exact) {\n from = addDuration(from, 0, baseUnit, weekStartDay);\n to = addDuration(to, 0, baseUnit, weekStartDay);\n }\n return {\n min: from,\n max: to\n };\n },\n scaleRange: function (delta) {\n var ref = this.options;\n var from = ref.min;\n var to = ref.max;\n var rounds = Math.abs(delta);\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n return {\n min: from,\n max: to\n };\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\n pan: function (delta) {\n var range = this.translateRange(delta, true);\n var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax);\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n zoomRange: function (delta) {\n var range = this.scaleRange(delta);\n var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n return {\n min: min,\n max: max\n };\n }\n });\n function timeUnits(delta) {\n var unit = HOURS;\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n return unit;\n }\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n startValue: function () {\n return this.options.min;\n },\n getSlot: function (a, b, limit) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (logMax - logMin));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 1;\n }\n if (!defined(end)) {\n end = start || 1;\n }\n if (start <= 0 || end <= 0) {\n return null;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n start = log(start, base);\n end = log(end, base);\n var p1, p2;\n if (vertical) {\n p1 = logMax - Math.max(start, end);\n p2 = logMax - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - logMin;\n p2 = Math.max(start, end) - logMin;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = (logMax - logMin) / lineSize;\n var valueAxis = vertical ? Y : X;\n var lineStart = lineBox[valueAxis + startEdge];\n var offset = dir * (point[valueAxis] - lineStart);\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = logMin + valueOffset;\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var base = this.options.majorUnit;\n var offset = -delta;\n return {\n min: Math.pow(base, this.logMin - offset),\n max: Math.pow(base, this.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var scale = size / (logMax - logMin);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset)\n };\n },\n labelsCount: function () {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var ticks = [];\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var majorTicks = options.majorTicks;\n var minorTicks = options.minorTicks;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var lineBox = this.lineBox();\n var ticks = [];\n var tickLineOptions = { vertical: vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var vertical = options.vertical;\n var lineBox = altAxis.lineBox();\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var ref = this._lineOptions();\n var lineStart = ref.lineStart;\n var step = ref.step;\n var ref$1 = this;\n var logMin = ref$1.logMin;\n var logMax = ref$1.logMax;\n for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var this$1 = this;\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var ref$1 = this._lineOptions();\n var lineStart = ref$1.lineStart;\n var step = ref$1.step;\n var ref$2 = this;\n var logMin = ref$2.logMin;\n var logMax = ref$2.logMax;\n var start = Math.floor(logMin);\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n var value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, -delta);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (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 invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\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 = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || 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 tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (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 tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\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 dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg.exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('
').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n services.IntlService.register({\n format: function (format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate\n });\n services.TemplateService.register({ compile: kendo.template });\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function (e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'dataviz/core/kendo-core',\n 'dataviz/core/core'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}