{"version":3,"sources":["kendo.dataviz.core.js"],"names":["f","define","$","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","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","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","isArray","Array","addClass","element","classes","idx","className","classArray","indexOf","removeClass","SPACE_REGEX","alignPathToPixel","path","offset","stroke","drawing","defined","segments","anchor","round","translate","clockwise","angle1","angle2","x","y","isNumber","isNaN","isString","STRING","convertableToNumber","isFinite","isObject","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","undefined","find","predicate","item","parseMatrix","matrixString","members","match","matrixRegexp","Matrix","unit","Function","bind","apply","concat","transformMatrix","transform","elementScale","matrix","parent","parentMatrix","parentElement","multiplyCopy","b","c","autoMajorUnit","scale","relativeValue","scaleMultiplier","diff","DEFAULT_PRECISION","abs","pow","log","rotatePoint","cx","cy","angle","theta","rad","Point","cos","sin","numericComparer","a","boxDiff","r","s","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","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","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","firstDay","categoryRange","categories","range","_range","autoBaseUnit","startUnit","startStep","unitSteps","step","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","FIT","autoUnitIx","BASE_UNITS","units","totalUnits","slice","shift","last","defaultBaseUnit","lastCategory","categoryIx","category","count","minDiff","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","initUnit","toLowerCase","useDefault","AUTO","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","clearNullValues","fields","axisOptions","userOptions","userSetMin","userSetMax","userSetLimits","minorUnit","divisor","ratio","remainder","threshold","timeUnits","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","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","ARC","AXIS_LABEL_CLICK","BLACK","CENTER","CIRCLE","CROSS","DATE","DEFAULT_FONT","DEFAULT_HEIGHT","DEFAULT_WIDTH","END","FORMAT_REGEX","HEIGHT","HIGHLIGHT_ZINDEX","INSIDE","NONE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","OBJECT","OUTSIDE","START","TRIANGLE","VALUE","WHITE","WIDTH","X","Y","DEFAULT_SERIES_OPACITY","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","HashMap","TRIGGER","InstanceObserver","ref","append","bindEvents","deg","elementOffset","elementSize","eventElement","eventCoordinates","limitValue","unbindEvents","valueOrDefault","FontLoader","Ring","Sector","DIRECTION_ANGLE","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","EmptyDateRange","DateRange","DateCategoryAxis","MIN_VALUE_RANGE","NumericAxis","DateValueAxis","DEFAULT_MAJOR_UNIT","LogarithmicAxis","GridLinesMixin","RadarCategoryAxis","PolarAxis","RadarNumericAxisMixin","RadarNumericAxis","RadarLogarithmicAxis","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","CurveProcessor","getter","Number","format","toString","register","userImplementation","Object","defineProperties","implementation","_intlService","auto","formatString","intl","values","len","arguments","localeAuto","locale","placeholderFormat","parseInt","substring","fn","set","chart","context","sender","rtl","notify","name","args","trigger","isPannable","axis","pannable","lock","create","events","_key","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","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","call","createRing","arc","innerEnd","Arc","radiusX","radiusY","fromArc","close","pointAt","children","initUserOptions","reflow","currentChild","destroy","animation","getRoot","getSender","service","getService","chartService","translateChildren","childrenCount","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","opacity","highlightOptions","customVisual","_highlight","fill","highlightVisualArgs","series","dataItem","percentage","runningTotal","total","createGradientOverlay","gradientOptions","overlay","createGradient","closed","elements","supportsPointInactiveOpacity","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","cleanGradients","_observers","_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","data","_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","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","topRight","bottomLeft","distanceLeft","distanceRight","alignEnd","alignCenter","transformCopy","render","hide","label","icon","childAlias","noteTemplate","aliasFor","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","preventDefault","over","out","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","skip","labelsCount","normalizeLabelRotation","labelOptions","labelContext","clearLabels","autoRotateLabels","createAxisLabel","clearTitle","clear","lineBox","mirror","axisX","axisY","lineWidth","visualSize","note","notes","items","parseNoteValue","reverse","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","tickPositions","skipUnit","tickLineOptions","getMajorTickPositions","getMinorTickPositions","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","altAxis","slotX","slotY","bandRect","plotBands","plotArea","_plotbandGroup","pane","axes","getSlot","from","to","createPlotBandLabel","textbox","labelTemplate","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","space","rootBox","boxSize","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","labelsBetweenTicks","positionLabel","labelOffset","labelBox","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","templateContext","tmpl","defaultText","lastLabel","maxLabelOffset","startTick","endTick","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","limitRange","rangeSize","valueRange","justified","prepareUserOptions","years","months","weeks","days","minutes","seconds","milliseconds","_ticks","categoriesHash","copy","srcCategories","definedMin","definedMax","rangeIndices","totalRange","totalRangeIndices","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","indices","getTickPositions","positions","hasMinor","cache","_hash","filterOutOfRangePositions","inRange","startIndex","endIndex","p1","p2","slotBox","singleSlot","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","startValue","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","dataItems","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","totalCount","mapCategories","map$$1","displayIndices","displayRange","valueIndex","valuesCount","dateAt","roundToBaseUnit","lowerEnd","expandEnd","next","roundToTotalStep","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","minIdx","maxIdx","_indices","last$$1","_values","upper","roundedStep","dataRange","maxDivisions","divisionOptions","dataRangeOptions","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","divisionRange","rangeLabels","splice","rounds","totalLimits","panRange","isEmpty","datesRange","indicesRange","fit","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","createRangeLabels","arrangeRangeLabels","position$1","autoRotateRangeLabels","hideOverlappingLabels","clip","rangeLabel","firstRangeLabel","lastRangeLabel","i$1","overlaps$1","unitFormat","dateFormats","createLabel","startText","endText","rotateLabel","dateRange","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","invertAxis","lineFunction","calculateFunction","isLine","monotonic","sign","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","Gradients","draw","SASS_THEMES","ExportMixin","skipLegacy","exportVisual","exportSVG","exportImage","exportPDF","svg","imageDataURL","Surface","exportGroup","surface","image","support","canvas","css","display","appendTo","_rootElement","toDataURL","remove","calendars","standard","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 var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('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 ARC = 'arc';\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var BLACK = '#000';\n var BOTTOM = 'bottom';\n var CENTER = 'center';\n var CIRCLE = 'circle';\n var COORD_PRECISION = 3;\n var CROSS = 'cross';\n var DATE = 'date';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_HEIGHT = 400;\n var DEFAULT_PRECISION = 10;\n var DEFAULT_WIDTH = 600;\n var END = 'end';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HEIGHT = 'height';\n var HIGHLIGHT_ZINDEX = 100;\n var INSIDE = 'inside';\n var LEFT = 'left';\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var NONE = 'none';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var NOTE_LEAVE = 'noteLeave';\n var OBJECT = 'object';\n var OUTSIDE = 'outside';\n var RIGHT = 'right';\n var START = 'start';\n var STRING = 'string';\n var TOP = 'top';\n var TRIANGLE = 'triangle';\n var VALUE = 'value';\n var WHITE = '#fff';\n var WIDTH = 'width';\n var X = 'x';\n var Y = 'y';\n var DEFAULT_SERIES_OPACITY = 1;\n var constants = {\n ARC: ARC,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n BLACK: BLACK,\n BOTTOM: BOTTOM,\n CENTER: CENTER,\n CIRCLE: CIRCLE,\n COORD_PRECISION: COORD_PRECISION,\n CROSS: CROSS,\n DATE: DATE,\n DEFAULT_FONT: DEFAULT_FONT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n END: END,\n FORMAT_REGEX: FORMAT_REGEX,\n HEIGHT: HEIGHT,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX,\n INSIDE: INSIDE,\n LEFT: LEFT,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n NOTE_LEAVE: NOTE_LEAVE,\n OBJECT: OBJECT,\n OUTSIDE: OUTSIDE,\n RIGHT: RIGHT,\n START: START,\n STRING: STRING,\n TOP: TOP,\n TRIANGLE: TRIANGLE,\n VALUE: VALUE,\n WHITE: WHITE,\n WIDTH: WIDTH,\n X: X,\n Y: Y,\n DEFAULT_SERIES_OPACITY: DEFAULT_SERIES_OPACITY\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 isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function convertableToNumber(value) {\n return isNumber(value) || isString(value) && isFinite(value);\n }\n function isObject(value) {\n return typeof value === 'object';\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 firstDay: function () {\n return 0;\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.intl;\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.intl;\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 intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\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 = Boolean(context.rtl);\n },\n notify: function (name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n },\n isPannable: function (axis) {\n var pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n this.format.intl = value;\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 var HashMap = function HashMap() {\n this._map = {};\n };\n HashMap.prototype.get = function get(name) {\n return this._map[this._key(name)];\n };\n HashMap.prototype.set = function set(name, value) {\n this._map[this._key(name)] = value;\n };\n HashMap.prototype._key = function _key(name) {\n return name instanceof Date ? name.getTime() : name;\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 function find(array, predicate) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n }\n var Matrix = geometry.Matrix;\n var matrixRegexp = /matrix\\((.*)\\)/;\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n var members = match[1].split(',').map(function (x) {\n return parseFloat(x);\n });\n return new (Function.prototype.bind.apply(Matrix, [null].concat(members)))();\n }\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n if (transform === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform);\n }\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n 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 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 equals: function (box) {\n return this.x1 === box.x1 && this.x2 === box.x2 && this.y1 === box.y1 && this.y2 === box.y2;\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 DIRECTION_ANGLE = 0.001;\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\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, this.initUserOptions(options));\n },\n initUserOptions: function (options) {\n return 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 && this.options.animation) {\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, opacity) {\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: opacity || 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 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, this.options.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 supportsPointInactiveOpacity: function () {\n return true;\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 cleanGradients: function () {\n var gradients = this.gradients;\n for (var hashCode in gradients) {\n gradients[hashCode]._observers = [];\n }\n },\n size: function () {\n var options = this.options;\n return new Box(0, 0, options.width, options.height);\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/m;\n var TextBox = BoxElement.extend({\n init: function (content, options, data) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this.data = data;\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 }\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 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.visible) {\n return;\n }\n if (this.options.visual) {\n var visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n var context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\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 if (this.data) {\n $.extend(context, this.data);\n }\n return context;\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 this$1 = this;\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 childAlias = function () {\n return this$1;\n };\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 this.label.aliasFor = childAlias;\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 marker.aliasFor = childAlias;\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 over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n out: function (widget, e) {\n var args = this.eventArgs(e);\n widget.trigger(NOTE_LEAVE, args);\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 this.initFields();\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n initFields: function () {\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n normalizeLabelRotation: function (labelOptions) {\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\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.clearLabels();\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n var range = this.labelsRange();\n for (var idx = range.min; idx < range.max; idx += step) {\n var labelContext = {\n index: idx,\n count: range.max\n };\n var label = this$1.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n clearLabels: function () {\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n },\n clearTitle: function () {\n var this$1 = this;\n if (this.title) {\n this.children = grep(this.children, function (child) {\n return child !== this$1.title;\n });\n this.title = undefined;\n }\n },\n clear: function () {\n this.clearLabels();\n this.clearTitle();\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 var labelOptions = item.label;\n var label = 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 (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this$1.createPlotBandLabel(labelOptions, item, new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2));\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 if (label) {\n group.append(label);\n }\n }\n }\n this.appendVisual(group);\n },\n createPlotBandLabel: function (label, item, box) {\n if (label.visible === false) {\n return null;\n }\n var text = label.text;\n var textbox;\n if (defined(label) && label.visible) {\n var labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n item: item\n });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n return textbox.visual;\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 = this.labelsBetweenTicks();\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\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 firstTickPosition = tickPositions[tickIx];\n var nextTickPosition = tickPositions[tickIx + 1];\n var positionStart = void 0, positionEnd = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - labelSize / 2;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n }\n positionEnd = positionStart;\n } else {\n if (labelsBetweenTicks) {\n positionStart = firstTickPosition;\n positionEnd = nextTickPosition;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n positionEnd = positionStart + labelSize;\n }\n }\n this$1.positionLabel(label, mirror, positionStart, positionEnd);\n }\n },\n positionLabel: function (label, mirror, positionStart, positionEnd) {\n if (positionEnd === void 0) {\n positionEnd = positionStart;\n }\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var labelOffset = this.getActualTickSize() + options.margin;\n var labelBox;\n if (vertical) {\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, positionStart);\n } else {\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(positionStart, labelY, positionEnd, labelY + label.box.height());\n }\n label.reflow(labelBox);\n },\n autoRotateLabelAngle: function (labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n return -45;\n },\n autoRotateLabels: function () {\n var this$1 = this;\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var limit = Math.min(labels.length, tickPositions.length - 1);\n var angle = 0;\n for (var idx = 0; idx < limit; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n angle = this$1.autoRotateLabelAngle(labelBox, width);\n if (angle === -90) {\n break;\n }\n }\n if (angle !== 0) {\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 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, options, context) {\n var this$1 = this;\n var text;\n var tmpl = getTemplate(options);\n var defaultText = function () {\n if (!options.format) {\n return value;\n }\n return this$1.chartService.format.localeAuto(options.format, [value], options.culture);\n };\n if (tmpl) {\n var templateContext = $.extend({}, context, {\n get text() {\n return defaultText();\n },\n value: value,\n format: options.format,\n culture: options.culture\n });\n text = tmpl(templateContext);\n } else {\n text = defaultText();\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 var axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n var offset = this.maxLabelOffset();\n box[axis + 1] -= offset.start;\n box[axis + 2] += offset.end;\n } else {\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 }\n return box;\n },\n maxLabelOffset: function () {\n var this$1 = this;\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var tickPositions = this.getLabelsTickPositions();\n var offsetField = vertical ? Y : X;\n var labels = this.labels;\n var startPosition = reverse ? 1 : 0;\n var endPosition = reverse ? 0 : 1;\n var maxStartOffset = 0;\n var maxEndOffset = 0;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var startTick = void 0, endTick = void 0;\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\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 && offset < 0) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max && offset > 0) {\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 labelsBetweenTicks: function () {\n return !this.options.justified;\n },\n prepareUserOptions: function () {\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 function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n return 0;\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 initFields: function () {\n this._ticks = {};\n },\n categoriesHash: function () {\n return '';\n },\n clone: function () {\n var copy = new CategoryAxis($.extend({}, this.options, { categories: this.options.srcCategories }), this.chartService);\n copy.createLabels();\n return copy;\n },\n initUserOptions: function (options) {\n var categories = options.categories || [];\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\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 return options;\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 = this.totalRange().max || 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 var min = isNumber(options.min) ? options.min : 0;\n var max = isNumber(options.max) ? options.max : this.totalRange().max;\n return {\n min: min,\n max: max\n };\n },\n roundedRange: function () {\n return this.range();\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0)\n };\n },\n scaleOptions: 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 {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\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 > 0) {\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 getLabelsTickPositions: function () {\n return this.getTicks().labelTicks;\n },\n tickIndices: function (stepSize) {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var limit = Math.ceil(max);\n var current = Math.floor(min);\n var indices = [];\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n return indices;\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.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var indices = this.tickIndices(stepSize);\n var positions = [];\n for (var idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n return positions;\n },\n getTicks: function () {\n var options = this.options;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + options.reverse + options.justified;\n if (cache._hash !== hash) {\n var hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n cache._hash = hash;\n cache.labelTicks = this.getTickPositions(1);\n cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n }\n return cache;\n },\n filterOutOfRangePositions: function (positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n var axis = this.options.vertical ? Y : X;\n var inRange = function (position) {\n return lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n };\n var end = positions.length - 1;\n var startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n var endIndex = end;\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n return positions.slice(startIndex, endIndex + 1);\n },\n getSlot: function (from, to, limit) {\n var options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var box = ref.box;\n var min = ref.min;\n var valueAxis = vertical ? Y : X;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var slotBox = box.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, box[valueAxis + 1], box[valueAxis + 2]);\n p2 = limitValue(p2, box[valueAxis + 1], box[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n limitSlot: function (slot) {\n var vertical = this.options.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var limittedSlot = slot.clone();\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n return limittedSlot;\n },\n slot: function (from, to, limit) {\n var min = Math.floor(this.options.min || 0);\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\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 ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var max = ref$1.max;\n var startValue = reverse ? max : min;\n var lineStart = box[valueAxis + 1];\n var lineEnd = box[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 return this.totalIndex(value) - Math.floor(this.options.min || 0);\n },\n categoryAt: function (index, total) {\n var options = this.options;\n return (total ? options.srcCategories : options.categories)[index];\n },\n categoriesCount: function () {\n return (this.options.categories || []).length;\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, labelContext) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(category, labelOptions, labelContext);\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 ref = this.scaleOptions();\n var scale = ref.scale;\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 range = this.totalRangeIndices(true);\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var lineStart = box[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 totalIndex: function (value) {\n var options = this.options;\n var index = this._categoriesMap ? this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n return index;\n },\n currentRangeIndices: function () {\n var options = this.options;\n var min = 0;\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n var max;\n if (isNumber(options.max)) {\n max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n } else {\n max = this.totalCount() - 1;\n }\n return {\n min: min,\n max: max\n };\n },\n mapCategories: function () {\n if (!this._categoriesMap) {\n var map$$1 = this._categoriesMap = new HashMap();\n var srcCategories = this.options.srcCategories;\n for (var idx = 0; idx < srcCategories.length; idx++) {\n map$$1.set(srcCategories[idx], idx);\n }\n }\n },\n totalCount: function () {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\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 function categoryRange(categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n range.min = toDate(range.min);\n range.max = toDate(range.max);\n }\n return range;\n }\n var EmptyDateRange = Class.extend({\n init: function (options) {\n this.options = options;\n },\n displayIndices: function () {\n return {\n min: 0,\n max: 1\n };\n },\n displayRange: function () {\n return {};\n },\n total: function () {\n return {};\n },\n valueRange: function () {\n return {};\n },\n valueIndex: function () {\n return -1;\n },\n values: function () {\n return [];\n },\n totalIndex: function () {\n return -1;\n },\n valuesCount: function () {\n return 0;\n },\n totalCount: function () {\n return 0;\n },\n dateAt: function () {\n return null;\n }\n });\n var DateRange = Class.extend({\n init: function (start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n var roundToBaseUnit = options.roundToBaseUnit;\n var justified = options.justified;\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n var lowerEnd = this.roundToTotalStep(end);\n var expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n var min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n var max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n var next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n this.valueEnd = this.roundToTotalStep(max, false, next);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\n if (this.valueEnd < this.valueStart) {\n this.valueEnd = this.valueStart;\n }\n if (this.displayEnd <= this.displayStart) {\n this.displayEnd = this.roundToTotalStep(this.displayStart, false, 1);\n }\n },\n displayRange: function () {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n },\n displayIndices: function () {\n if (!this._indices) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep;\n var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n this._indices = {\n min: minIdx,\n max: maxIdx\n };\n }\n return this._indices;\n },\n total: function () {\n return {\n min: this.start,\n max: this.end\n };\n },\n totalCount: function () {\n var last$$1 = this.totalIndex(this.end);\n return last$$1 + (this.options.justified ? 1 : 0);\n },\n valueRange: function () {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n },\n valueIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n },\n totalIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n },\n dateIndex: function (value) {\n var options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n },\n valuesCount: function () {\n var maxIdx = this.valueIndex(this.valueEnd);\n return maxIdx + 1;\n },\n values: function () {\n var values = this._values;\n if (!values) {\n var options = this.options;\n var range = this.valueRange();\n this._values = values = [];\n for (var date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n return values;\n },\n dateAt: function (index, total) {\n var options = this.options;\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n },\n roundToTotalStep: function (value, upper, next) {\n var ref = this.options;\n var baseUnit = ref.baseUnit;\n var baseUnitStep = ref.baseUnitStep;\n var weekStartDay = ref.weekStartDay;\n var start = this.start;\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (next) {\n roundedStep += next;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n });\n function autoBaseUnit(options, startUnit, startStep) {\n var categoryLimits = categoryRange(options.categories);\n var span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\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 function defaultBaseUnit(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 options.baseUnit = unit || DAYS;\n }\n function initUnit(options) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n return options;\n }\n var DateCategoryAxis = CategoryAxis.extend({\n clone: function () {\n var copy = new DateCategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n return copy;\n },\n categoriesHash: function () {\n var start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n },\n initUserOptions: function (options) {\n return options;\n },\n initFields: function () {\n CategoryAxis.fn.initFields.call(this);\n var chartService = this.chartService;\n var intlService = chartService.intl;\n var options = this.options;\n var categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n this.options = options;\n options.srcCategories = categories;\n if (categories.length > 0) {\n var range = categoryRange(categories);\n var maxDivisions = options.maxDivisions;\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n if (maxDivisions) {\n var dataRange = this.dataRange.displayRange();\n var divisionOptions = $.extend({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n var dataRangeOptions = this.dataRange.options;\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n this.rangeLabels = [];\n },\n tickIndices: function (stepSize) {\n var ref = this;\n var dataRange = ref.dataRange;\n var divisionRange = ref.divisionRange;\n var valuesCount = divisionRange.valuesCount();\n if (!this.options.maxDivisions || !valuesCount) {\n return CategoryAxis.fn.tickIndices.call(this, stepSize);\n }\n var indices = [];\n var values = divisionRange.values();\n var offset = 0;\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;\n }\n for (var idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n var last$$1 = indices.length - 1;\n indices.splice(idx, 0, indices[last$$1 - 1] + (indices[last$$1] - indices[last$$1 - 1]) * stepSize);\n }\n }\n return indices;\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 labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n },\n pan: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.dataRange.displayRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.dataRange.total();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\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 if (this.isEmpty()) {\n return null;\n }\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.dataRange.displayRange();\n var indicesRange = this.dataRange.displayIndices();\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 || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n },\n zoomRange: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var fit = options.userSetBaseUnit === FIT;\n var totalLimits = this.dataRange.total();\n var ref = this.dataRange.displayRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var ref$1 = this.dataRange.options;\n var weekStartDay = ref$1.weekStartDay;\n var baseUnit = ref$1.baseUnit;\n var baseUnitStep = ref$1.baseUnitStep;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (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 if (min < totalLimits.min) {\n min = totalLimits.min;\n }\n if (max > totalLimits.max) {\n max = totalLimits.max;\n }\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n },\n range: function () {\n return this.dataRange.displayRange();\n },\n createLabels: function () {\n CategoryAxis.fn.createLabels.call(this);\n this.createRangeLabels();\n },\n clearLabels: function () {\n CategoryAxis.fn.clearLabels.call(this);\n this.rangeLabels = [];\n },\n arrangeLabels: function () {\n this.arrangeRangeLabels();\n CategoryAxis.fn.arrangeLabels.call(this);\n },\n arrangeRangeLabels: function () {\n var ref = this;\n var options = ref.options;\n var rangeLabels = ref.rangeLabels;\n if (rangeLabels.length === 0) {\n return;\n }\n var lineBox = this.lineBox();\n var vertical = options.vertical;\n var mirror = options.rangeLabels.mirror || options.labels.mirror;\n var firstLabel = rangeLabels[0];\n if (firstLabel) {\n var position = vertical ? lineBox.y1 - firstLabel.box.height() / 2 : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n var lastLabel = rangeLabels[1];\n if (lastLabel) {\n var position$1 = vertical ? lineBox.y2 - lastLabel.box.height() / 2 : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position$1);\n }\n },\n autoRotateLabels: function () {\n CategoryAxis.fn.autoRotateLabels.call(this);\n this.autoRotateRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n CategoryAxis.fn.hideOutOfRangeLabels.call(this);\n this.hideOverlappingLabels();\n },\n hideOverlappingLabels: function () {\n var ref = this;\n var rangeLabels = ref.rangeLabels;\n var labels = ref.labels;\n if (rangeLabels.length === 0) {\n return;\n }\n function clip(rangeLabel, label) {\n if (!label.options.visible || label.box.overlaps(rangeLabel.box)) {\n label.options.visible = false;\n return true;\n }\n return false;\n }\n var firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (var i = 0; i < labels.length; i++) {\n var overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n var lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (var i$1 = labels.length - 1; i$1 > 0; --i$1) {\n var overlaps$1 = clip(lastRangeLabel, labels[i$1]);\n if (!overlaps$1) {\n break;\n }\n }\n }\n },\n contentBox: function () {\n var box = CategoryAxis.fn.contentBox.call(this);\n var rangeLabels = this.rangeLabels;\n for (var i = 0; i < rangeLabels.length; i++) {\n var label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n return box;\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n if (labelContext === void 0) {\n labelContext = {};\n }\n var options = this.options;\n var dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n var date = this.divisionRange.dateAt(index);\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n },\n createRangeLabels: function () {\n var this$1 = this;\n var ref = this.divisionRange;\n var displayStart = ref.displayStart;\n var displayEnd = ref.displayEnd;\n var options = this.options;\n var labelOptions = $.extend({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n if (labelOptions.visible !== true) {\n return;\n }\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var createLabel = function (index, date, text) {\n if (text) {\n var label = new AxisLabel(date, text, index, null, labelOptions);\n this$1.append(label);\n this$1.rangeLabels.push(label);\n }\n };\n var startText = this.axisLabelText(displayStart, labelOptions, {\n index: 0,\n count: 2\n });\n createLabel(0, displayStart, startText);\n var endText = this.axisLabelText(displayEnd, labelOptions, {\n index: 1,\n count: 2\n });\n createLabel(1, displayEnd, endText);\n },\n autoRotateRangeLabels: function () {\n var this$1 = this;\n var labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n var rotateLabel = function (label, tickPositions, index) {\n var width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n var angle = this$1.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n var tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n },\n categoryIndex: function (value) {\n return this.dataRange.valueIndex(value);\n },\n slot: function (from, to, limit) {\n var dateRange = this.dataRange;\n var start = from;\n var end = to;\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n var slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\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 = categoryRange(options.srcCategories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n categoryAt: function (index, total) {\n return this.dataRange.dateAt(index, total);\n },\n categoriesCount: function () {\n return this.dataRange.valuesCount();\n },\n rangeIndices: function () {\n return this.dataRange.displayIndices();\n },\n labelsBetweenTicks: function () {\n return !this.divisionRange.options.justified;\n },\n prepareUserOptions: function () {\n if (this.isEmpty()) {\n return;\n }\n this.options.categories = this.dataRange.values();\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.dataRange.dateAt(index);\n },\n totalIndex: function (value) {\n return this.dataRange.totalIndex(value);\n },\n currentRangeIndices: function () {\n var range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n },\n totalRange: function () {\n return this.dataRange.total();\n },\n totalCount: function () {\n return this.dataRange.totalCount();\n },\n isEmpty: function () {\n return !this.options.srcCategories.length;\n },\n roundedRange: function () {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n var options = this.options;\n var datesRange = categoryRange(options.srcCategories);\n var dateRange = new DateRange(datesRange.min, datesRange.max, $.extend({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n return dateRange.displayRange();\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n rangeLabels: { visible: false },\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 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 Axis.fn.init.call(this, $.extend({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n },\n initUserOptions: function (options) {\n var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n return axisOptions(autoOptions, options);\n },\n initFields: function () {\n this.totalMin = this.totalOptions.min;\n this.totalMax = this.totalOptions.max;\n this.totalMajorUnit = this.totalOptions.majorUnit;\n this.seriesMin = this.options.seriesMin;\n this.seriesMax = this.options.seriesMax;\n },\n clone: function () {\n return new NumericAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 offset: 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, labelContext) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, labelOptions, labelContext);\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, range.offset);\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 clearNullValues(options, fields) {\n for (var idx = 0; idx < fields.length; idx++) {\n var field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n if (userOptions) {\n clearNullValues(userOptions, [\n 'min',\n 'max'\n ]);\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n var userSetLimits = userSetMin || userSetMax;\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 var result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n return result;\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 weekStartDay: firstDay(options, intlService)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n var weekStartDay = options.weekStartDay || 0;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n },\n clone: function () {\n return new DateValueAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 weekStartDay = options.weekStartDay || 0;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\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, parseDate(this.intlService, a), parseDate(this.intlService, 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, labelContext) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var weekStartDay = options.weekStartDay || 0;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, labelOptions, labelContext);\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 || 0;\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) * (options.reverse ? -1 : 1);\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 offset: offset\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, range.offset);\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 weekStartDay = options.weekStartDay || 0;\n var autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\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, weekStartDay);\n options.max = options.max || addDuration(autoMax, tail, baseUnit, weekStartDay);\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 clone: function () {\n return new LogarithmicAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 offset: 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, labelContext) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, labelOptions, labelContext);\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, range.offset);\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 convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n HashMap: HashMap,\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 find: find,\n elementScale: elementScale,\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 firstDay: firstDay\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.SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4',\n 'material-v2'\n ];\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 firstDay: function () {\n return kendo.culture().calendars.standard.firstDay;\n }\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}));"]}