{"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","labelOptions","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","labelPos","labelBox","firstTickPosition","nextTickPosition","labelX","labelY","labelsBetweenTicks","labelOffset","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","limit","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","roundToTotalStep","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","minIdx","maxIdx","_indices","last$$1","_values","upper","next","roundedStep","dataRange","maxDivisions","divisionOptions","dataRangeOptions","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","divisionRange","splice","rounds","totalLimits","panRange","isEmpty","datesRange","indicesRange","fit","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","unitFormat","dateFormats","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 (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('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 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 var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n 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 lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n 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) {\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) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var 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 this.valueEnd = this.roundToTotalStep(max, false, !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0);\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 },\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 createAxisLabel: function (index, labelOptions) {\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 var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\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 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) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, 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) {\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, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay || 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) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, 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}));"]}