{"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","autoTextColor","color","isDark","Color","WHITE","BLACK","createHashSet","values","supportsSet","SetWrapper","LegacySet","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","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","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","ROUNDED_RECT","START","TRIANGLE","VALUE","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","DELETED","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","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","_index","_values","filter","has","add","delete","clear","_set","Set","from","supported","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","borderRadius","halfWidth","halfHeight","fromPoints","MultiPath","setCornerRadius","visualOptions","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","gradient","LinearGradient","RadialGradient","cleanGradients","_observers","_initDirection","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupStart","groupIdx","group","groupElements","elementStart","groupElementsCount","elementSize$$1","groupElementStart","elementBox","ref$1","groupOptions","groups","groupsSize","maxGroupElementsSize","groupsCount","groupsStart","alignStart","groupSize","maxSize","groupElementsSize","topLeft","data","_initContainer","_autoReflow","rowIdx","rows","floatElement","textOptions","container","trim","visualBox","visualFn","_boxReflow","visualContext","clippedBBox","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","buildTitle","defaultOptions","title","titleOptions","culture","click","widget","alignRotation","bbox","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","topRight","bottomLeft","distanceLeft","distanceRight","alignEnd","alignCenter","transformCopy","render","hide","label","icon","childAlias","noteTemplate","aliasFor","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","preventDefault","over","out","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","skip","labelsCount","normalizeLabelRotation","labelOptions","labelContext","clearLabels","autoRotateLabels","createAxisLabel","clearTitle","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","to","createPlotBandLabel","textbox","labelTemplate","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","space","rootBox","boxSize","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","labelsBetweenTicks","positionLabel","labelOffset","labelBox","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","labelAngle","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","templateContext","tmpl","defaultText","lastLabel","maxLabelOffset","startTick","endTick","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","limitRange","rangeSize","valueRange","justified","prepareUserOptions","years","months","weeks","days","minutes","seconds","milliseconds","_ticks","categoriesHash","copy","srcCategories","definedMin","definedMax","rangeIndices","totalRange","totalRangeIndices","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","indices","getTickPositions","positions","hasMinor","cache","_hash","filterOutOfRangePositions","inRange","startIndex","endIndex","p1","p2","slotBox","singleSlot","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","startValue","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","dataItems","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","totalCount","mapCategories","map$$1","displayIndices","displayRange","valueIndex","valuesCount","dateAt","roundToBaseUnit","lowerEnd","expandEnd","next","roundToTotalStep","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","minIdx","maxIdx","_indices","last$$1","upper","roundedStep","dataRange","maxDivisions","divisionOptions","dataRangeOptions","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","divisionRange","rangeLabels","splice","rounds","totalLimits","panRange","isEmpty","datesRange","indicesRange","fit","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","createRangeLabels","arrangeRangeLabels","position$1","autoRotateRangeLabels","hideOverlappingLabels","clip","rangeLabel","firstRangeLabel","lastRangeLabel","i$1","overlaps$1","unitFormat","dateFormats","createLabel","startText","endText","rotateLabel","dateRange","totalOptions","totalMajorUnit","getDivisions","stepValue","lineSize","divisions","dir","startEdge","skipStep","getValue","valueOffset","endValue","isValidRange","newRange","axisCrossingValues","timeRange","exact","limittedRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","power","_lineOptions","minorOptions","ref$2","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","nextValue","difference","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","intervalAngle","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","interval","minorAngle","minorRadius","band","ring","plotBandSlot","slotStart","toValue","slots","totalDivs","slotAngle","fromValue","instanceOptions","tmp","atan2","PI","bandStyle","shape","polarAxis","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","beta","axisType","minorSkipStep","process","dataPoints","p0","tangent","initialControlPoint","lastControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","cp1","controlPoints$2","tangent$2","removeDuplicates","pop","controlOut","firstControlPoint","secondControlPoint","invertAxis","lineFunction","calculateFunction","isLine","monotonic","sign","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","Gradients","draw","SASS_THEMES","ExportMixin","skipLegacy","exportVisual","exportSVG","exportImage","exportPDF","svg","imageDataURL","Surface","exportGroup","surface","image","support","canvas","css","display","appendTo","_rootElement","toDataURL","remove","calendars","standard","Point2D","Box2D","mwDelta","originalEvent"],"mappings":"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","file":"kendo.dataviz.core.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var ARC = 'arc';\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var BLACK = '#000';\n var BOTTOM = 'bottom';\n var CENTER = 'center';\n var CIRCLE = 'circle';\n var COORD_PRECISION = 3;\n var CROSS = 'cross';\n var DATE = 'date';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_HEIGHT = 400;\n var DEFAULT_PRECISION = 10;\n var DEFAULT_WIDTH = 600;\n var END = 'end';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HEIGHT = 'height';\n var HIGHLIGHT_ZINDEX = 100;\n var INSIDE = 'inside';\n var LEFT = 'left';\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var NONE = 'none';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var NOTE_LEAVE = 'noteLeave';\n var OBJECT = 'object';\n var OUTSIDE = 'outside';\n var RIGHT = 'right';\n var ROUNDED_RECT = 'roundedRect';\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 ROUNDED_RECT: ROUNDED_RECT,\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 autoTextColor(color) {\n var isDark = new kendo.Color(color).isDark();\n if (isDark) {\n return WHITE;\n }\n return BLACK;\n }\n var DELETED = {};\n var LegacySet = Class.extend({\n init: function (values) {\n var this$1 = this;\n this._index = {};\n this._values = values ? values.slice(0) : [];\n for (var i = 0; i < this._values.length; i++) {\n this$1._index[this$1._values[i]] = i;\n }\n },\n values: function () {\n return this._values.filter(function (item) {\n return item !== DELETED;\n });\n },\n has: function (value) {\n return this._index[value] !== undefined;\n },\n add: function (value) {\n if (!this.has(value)) {\n this._index[value] = this._values.length;\n this._values.push(value);\n }\n },\n delete: function (value) {\n var index = this._index[value];\n if (index !== undefined) {\n this._values[index] = DELETED;\n delete this._index[value];\n }\n },\n clear: function () {\n this._index = {};\n this._values = [];\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(LegacySet.fn, {\n size: {\n get: function () {\n return this._values.length;\n }\n }\n });\n }\n var SetWrapper = Class.extend({\n init: function (values) {\n this._set = new Set(values);\n },\n values: function () {\n return Array.from(this._set);\n },\n has: function (value) {\n return this._set.has(value);\n },\n add: function (value) {\n this._set.add(value);\n },\n delete: function (value) {\n this._set.delete(value);\n },\n clear: function () {\n this._set.clear();\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(SetWrapper.fn, {\n size: {\n get: function () {\n return this._set.size;\n }\n }\n });\n }\n var supportsSet = function () {\n var supported = false;\n if (typeof Set === 'function') {\n var set = new Set([1]);\n supported = set.has(1);\n }\n return supported;\n };\n function createHashSet(values) {\n if (supportsSet()) {\n return new SetWrapper(values);\n }\n return new LegacySet(values);\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 var halfHeight = box.height() / 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 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)), 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 var rect = box.toRect();\n if (type === ROUNDED_RECT) {\n var borderRadius = valueOrDefault(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n element = Path.fromRect(rect, style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n },\n cleanGradients: function () {\n var gradients = this.gradients;\n for (var hashCode in gradients) {\n gradients[hashCode]._observers = [];\n }\n },\n size: function () {\n var options = this.options;\n return new Box(0, 0, options.width, options.height);\n }\n });\n setDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n });\n function innerRadialStops(options) {\n var stops = options.stops;\n var usedSpace = options.innerRadius / options.radius * 100;\n var length = stops.length;\n var currentStops = [];\n for (var i = 0; i < length; i++) {\n var currentStop = $.extend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var elementAxis = ref.elementAxis;\n var groupAxis = ref.groupAxis;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var ref$1 = this.groupOptions();\n var groups = ref$1.groups;\n var groupsSize = ref$1.groupsSize;\n var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n if (groupsCount) {\n var groupStart = groupsStart;\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var group = groups[groupIdx];\n var groupElements = group.groupElements;\n var elementStart = box[elementAxis + 1];\n var groupElementsCount = groupElements.length;\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1.elementSize(element);\n var groupElementStart = groupStart + this$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n var elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize$$1[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize$$1[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize$$1[elementSizeField] + this$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var children = ref.children;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var elementSpacing = ref.elementSpacing;\n var groupSpacing = ref.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var childrenCount = children.length;\n var groups = [];\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n var elementSize$$1 = this$1.elementSize(element);\n if (this$1.options.wrap && round(groupElementsSize + elementSpacing + elementSize$$1[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize$$1[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize$$1[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n var DrawingText = drawing.Text;\n var Text = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.content = content;\n this.reflow(new Box());\n },\n reflow: function (targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n this.baseline = size.baseline;\n this.box = new Box(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var ref = this.options;\n var font = ref.font;\n var color = ref.color;\n var opacity = ref.opacity;\n var cursor = ref.cursor;\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: {\n color: color,\n opacity: opacity\n },\n cursor: cursor\n });\n }\n });\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n var ROWS_SPLIT_REGEX = /\\n/m;\n var TextBox = BoxElement.extend({\n init: function (content, options, data) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this.data = data;\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n },\n _initContainer: function () {\n var options = this.options;\n var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n this.container = floatElement;\n this.append(floatElement);\n for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n var text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n var visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n var visual = this.visual = visualFn(this.visualContext(visualBox));\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n visual.options.zIndex = options.zIndex;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (!this.options.visible) {\n return;\n }\n if (this.options.visual) {\n var visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n var context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\n createVisual: function () {\n this$1._boxReflow = true;\n this$1.reflow(targetBox);\n this$1._boxReflow = false;\n return this$1.getDefaultVisual();\n }\n };\n if (this.data) {\n $.extend(context, this.data);\n }\n return context;\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n return geometryTransform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.append(new TextBox(this.options.text, $.extend({}, this.options, { vAlign: this.options.position })));\n },\n reflow: function (targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var titleOptions = options;\n if (typeof options === 'string') {\n titleOptions = { text: options };\n }\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n return title;\n };\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart, alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geometryTransform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n setDefaultOptions(AxisLabel, { _autoReflow: false });\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = '#fff';\n var Note = BoxElement.extend({\n init: function (fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n this.fields = fields;\n this.chartService = chartService;\n this.render();\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var this$1 = this;\n var options = this.options;\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var childAlias = function () {\n return this$1;\n };\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n if (defined(label) && label.visible) {\n var noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n this.label = new TextBox(text, deepExtend({}, label));\n this.label.aliasFor = childAlias;\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n var marker = new ShapeElement(deepExtend({}, icon));\n marker.aliasFor = childAlias;\n this.marker = marker;\n this.append(marker);\n if (this.label) {\n this.append(this.label);\n }\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var marker = ref.marker;\n var wrapperBox = ref.wrapperBox;\n var center = targetBox.center();\n var length = options.line.length;\n var position = options.position;\n if (options.visible) {\n var lineStart, box, contentBox;\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual($.extend(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n out: function (widget, e) {\n var args = this.eventArgs(e);\n widget.trigger(NOTE_LEAVE, args);\n },\n eventArgs: function (e) {\n var options = this.options;\n return $.extend(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : '',\n visual: this.visual\n });\n }\n });\n setDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = new ChartService();\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n this.initFields();\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n initFields: function () {\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n normalizeLabelRotation: function (labelOptions) {\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n },\n createLabels: function () {\n var this$1 = this;\n var options = this.options;\n var align = options.vertical ? RIGHT : CENTER;\n var labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n var step = Math.max(1, labelOptions.step);\n this.clearLabels();\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n var range = this.labelsRange();\n for (var idx = range.min; idx < range.max; idx += step) {\n var labelContext = {\n index: idx,\n count: range.max\n };\n var label = this$1.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n clearLabels: function () {\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n },\n clearTitle: function () {\n var this$1 = this;\n if (this.title) {\n this.children = grep(this.children, function (child) {\n return child !== this$1.title;\n });\n this.title = undefined;\n }\n },\n clear: function () {\n this.clearLabels();\n this.clearTitle();\n },\n lineBox: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var axisX = mirror ? box.x1 : box.x2;\n var axisY = mirror ? box.y2 : box.y1;\n var lineWidth = options.line.width || 0;\n return vertical ? new Box(axisX, box.y1, axisX, box.y2 - lineWidth) : new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var options = this.options;\n var titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title);\n if (titleOptions.visible && titleOptions.text) {\n var title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n },\n createNotes: function () {\n var this$1 = this;\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n this.notes = [];\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1.parseNoteValue(item.value);\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1.chartService);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this$1.append(note);\n this$1.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var options = this.options;\n var tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(this._backgroundPath);\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n var altAxis = grep(this.pane.axes, function (axis) {\n return axis.options.vertical !== this$1.options.vertical;\n })[0];\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = void 0, slotY = void 0;\n var labelOptions = item.label;\n var label = void 0;\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this$1.createPlotBandLabel(labelOptions, item, new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2));\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n if (label) {\n group.append(label);\n }\n }\n }\n this.appendVisual(group);\n },\n createPlotBandLabel: function (label, item, box) {\n if (label.visible === false) {\n return null;\n }\n var text = label.text;\n var textbox;\n if (defined(label) && label.visible) {\n var labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n item: item\n });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n return textbox.visual;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var firstTickPosition = tickPositions[tickIx];\n var nextTickPosition = tickPositions[tickIx + 1];\n var positionStart = void 0, positionEnd = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - labelSize / 2;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n }\n positionEnd = positionStart;\n } else {\n if (labelsBetweenTicks) {\n positionStart = firstTickPosition;\n positionEnd = nextTickPosition;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n positionEnd = positionStart + labelSize;\n }\n }\n this$1.positionLabel(label, mirror, positionStart, positionEnd);\n }\n },\n positionLabel: function (label, mirror, positionStart, positionEnd) {\n if (positionEnd === void 0) {\n positionEnd = positionStart;\n }\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var labelOffset = this.getActualTickSize() + options.margin;\n var labelBox;\n if (vertical) {\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, positionStart);\n } else {\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(positionStart, labelY, positionEnd, labelY + label.box.height());\n }\n label.reflow(labelBox);\n },\n autoRotateLabelAngle: function (labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n return -45;\n },\n autoRotateLabels: function () {\n var this$1 = this;\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var limit = Math.min(labels.length, tickPositions.length - 1);\n var angle = 0;\n for (var idx = 0; idx < limit; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n var labelAngle = this$1.autoRotateLabelAngle(labelBox, width);\n if (labelAngle !== 0) {\n angle = labelAngle;\n }\n if (angle === -90) {\n break;\n }\n }\n if (angle !== 0) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, options, context) {\n var this$1 = this;\n var text;\n var tmpl = getTemplate(options);\n var defaultText = function () {\n if (!options.format) {\n return value;\n }\n return this$1.chartService.format.localeAuto(options.format, [value], options.culture);\n };\n if (tmpl) {\n var templateContext = $.extend({}, context, {\n get text() {\n return defaultText();\n },\n value: value,\n format: options.format,\n culture: options.culture\n });\n text = tmpl(templateContext);\n } else {\n text = defaultText();\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n var axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n var offset = this.maxLabelOffset();\n box[axis + 1] -= offset.start;\n box[axis + 2] += offset.end;\n } else {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n var lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n }\n return box;\n },\n maxLabelOffset: function () {\n var this$1 = this;\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var tickPositions = this.getLabelsTickPositions();\n var offsetField = vertical ? Y : X;\n var labels = this.labels;\n var startPosition = reverse ? 1 : 0;\n var endPosition = reverse ? 0 : 1;\n var maxStartOffset = 0;\n var maxEndOffset = 0;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var startTick = void 0, endTick = void 0;\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return null;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n if (from < min && offset < 0) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max && offset > 0) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: minValue,\n max: maxValue\n };\n },\n valueRange: function () {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n },\n labelsBetweenTicks: function () {\n return !this.options.justified;\n },\n prepareUserOptions: function () {\n }\n });\n setDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n });\n var MILLISECONDS = 'milliseconds';\n var SECONDS = 'seconds';\n var MINUTES = 'minutes';\n var HOURS = 'hours';\n var DAYS = 'days';\n var WEEKS = 'weeks';\n var MONTHS = 'months';\n var YEARS = 'years';\n var TIME_PER_MILLISECOND = 1;\n var TIME_PER_SECOND = 1000;\n var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\n var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\n var TIME_PER_DAY = 24 * TIME_PER_HOUR;\n var TIME_PER_WEEK = 7 * TIME_PER_DAY;\n var TIME_PER_MONTH = 31 * TIME_PER_DAY;\n var TIME_PER_YEAR = 365 * TIME_PER_DAY;\n var TIME_PER_UNIT = {\n 'years': TIME_PER_YEAR,\n 'months': TIME_PER_MONTH,\n 'weeks': TIME_PER_WEEK,\n 'days': TIME_PER_DAY,\n 'hours': TIME_PER_HOUR,\n 'minutes': TIME_PER_MINUTE,\n 'seconds': TIME_PER_SECOND,\n 'milliseconds': TIME_PER_MILLISECOND\n };\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n return diff - offsetDiff * TIME_PER_MINUTE;\n }\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n function toDate(value) {\n var result;\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n return result;\n }\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) {\n weekStartDay = 0;\n }\n var daysToSubtract = 0;\n var day = date.getDay();\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n daysToSubtract++;\n }\n }\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function addHours(date, hours) {\n var roundedDate = new Date(date);\n roundedDate.setMinutes(0, 0, 0);\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n return result;\n }\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n return addDuration(date, 1, unit, weekStartDay);\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\n function toTime(value) {\n if (isArray(value)) {\n var result = [];\n for (var idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n return a === b;\n }\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n if (baseUnit === MONTHS) {\n index = date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12 + timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n return index / baseUnitStep;\n }\n function duration(a, b, unit) {\n var diff;\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n return diff;\n }\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n return index;\n }\n if (sortedDates[index] <= date) {\n return index;\n }\n return index - 1;\n }\n function parseDate(intlService, date) {\n var result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n }\n function parseDates(intlService, dates) {\n if (isArray(dates)) {\n var result = [];\n for (var idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n return result;\n }\n return parseDate(intlService, dates);\n }\n function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n return 0;\n }\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n function indexOf(value, arr) {\n if (value instanceof Date) {\n var length = arr.length;\n for (var idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n return -1;\n }\n return arr.indexOf(value);\n }\n var CategoryAxis = Axis.extend({\n initFields: function () {\n this._ticks = {};\n },\n categoriesHash: function () {\n return '';\n },\n clone: function () {\n var copy = new CategoryAxis($.extend({}, this.options, { categories: this.options.srcCategories }), this.chartService);\n copy.createLabels();\n return copy;\n },\n initUserOptions: function (options) {\n var categories = options.categories || [];\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n options.categories = options.categories.slice(min, max);\n }\n return options;\n },\n rangeIndices: function () {\n var options = this.options;\n var length = options.categories.length || 1;\n var min = isNumber(options.min) ? options.min % 1 : 0;\n var max;\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n return {\n min: min,\n max: max\n };\n },\n totalRangeIndices: function (limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = this.totalRange().max || 1;\n }\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n return {\n min: min,\n max: max\n };\n },\n range: function () {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max = isNumber(options.max) ? options.max : this.totalRange().max;\n return {\n min: min,\n max: max\n };\n },\n roundedRange: function () {\n return this.range();\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0)\n };\n },\n scaleOptions: function () {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var lineBox = this.lineBox();\n var size = this.options.vertical ? lineBox.height() : lineBox.width();\n var scale = size / (max - min || 1);\n return {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\n },\n arrangeLabels: function () {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n if (labels.length > 0) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n var firstLabel = labels[0];\n var lastLabel = last(labels);\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n },\n getMajorTickPositions: function () {\n return this.getTicks().majorTicks;\n },\n getMinorTickPositions: function () {\n return this.getTicks().minorTicks;\n },\n getLabelsTickPositions: function () {\n return this.getTicks().labelTicks;\n },\n tickIndices: function (stepSize) {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var limit = Math.ceil(max);\n var current = Math.floor(min);\n var indices = [];\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n return indices;\n },\n getTickPositions: function (stepSize) {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var indices = this.tickIndices(stepSize);\n var positions = [];\n for (var idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n return positions;\n },\n getTicks: function () {\n var options = this.options;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + options.reverse + options.justified;\n if (cache._hash !== hash) {\n var hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n cache._hash = hash;\n cache.labelTicks = this.getTickPositions(1);\n cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n }\n return cache;\n },\n filterOutOfRangePositions: function (positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n var axis = this.options.vertical ? Y : X;\n var inRange = function (position) {\n return lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n };\n var end = positions.length - 1;\n var startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n var endIndex = end;\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n return positions.slice(startIndex, endIndex + 1);\n },\n getSlot: function (from, to, limit) {\n var options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var box = ref.box;\n var min = ref.min;\n var valueAxis = vertical ? Y : X;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var slotBox = box.clone();\n var singleSlot = !defined(to);\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n end = Math.max(start, end);\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n if (singleSlot && justified) {\n p2 = p1;\n }\n if (limit) {\n p1 = limitValue(p1, box[valueAxis + 1], box[valueAxis + 2]);\n p2 = limitValue(p2, box[valueAxis + 1], box[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n limitSlot: function (slot) {\n var vertical = this.options.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var limittedSlot = slot.clone();\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n return limittedSlot;\n },\n slot: function (from, to, limit) {\n var min = Math.floor(this.options.min || 0);\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\n }\n return Axis.fn.slot.call(this, start, end, limit);\n },\n pointCategoryIndex: function (point) {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var max = ref$1.max;\n var startValue = reverse ? max : min;\n var lineStart = box[valueAxis + 1];\n var lineEnd = box[valueAxis + 2];\n var pos = point[valueAxis];\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n return Math.floor(value);\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.options.categories[index];\n },\n categoryIndex: function (value) {\n return this.totalIndex(value) - Math.floor(this.options.min || 0);\n },\n categoryAt: function (index, total) {\n var options = this.options;\n return (total ? options.srcCategories : options.categories)[index];\n },\n categoriesCount: function () {\n return (this.options.categories || []).length;\n },\n translateRange: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = options.categories.length;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n return {\n min: offset,\n max: range + offset\n };\n },\n zoomRange: function (rate) {\n var rangeIndices = this.totalRangeIndices();\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);\n var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);\n if (max - min > 0) {\n return {\n min: min,\n max: max\n };\n }\n },\n scaleRange: function (scale) {\n var range = this.options.categories.length;\n var delta = scale * range;\n return {\n min: -delta,\n max: range + delta\n };\n },\n labelsCount: function () {\n var labelsRange = this.labelsRange();\n return labelsRange.max - labelsRange.min;\n },\n labelsRange: function () {\n var options = this.options;\n var justified = options.justified;\n var labelOptions = options.labels;\n var ref = this.totalRangeIndices(true);\n var min = ref.min;\n var max = ref.max;\n var start = Math.floor(min);\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n var skip;\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(category, labelOptions, labelContext);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var totalRange = this.totalRange();\n var min = range.min + offset;\n var max = range.max + offset;\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\n pointsRange: function (start, end) {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var range = this.totalRangeIndices(true);\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n var min = range.min + diffStart / scale;\n var max = range.min + diffEnd / scale;\n var rangeMin = Math.min(min, max);\n var rangeMax = Math.max(min, max);\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n valueRange: function () {\n return this.range();\n },\n totalIndex: function (value) {\n var options = this.options;\n var index = this._categoriesMap ? this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n return index;\n },\n currentRangeIndices: function () {\n var options = this.options;\n var min = 0;\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n var max;\n if (isNumber(options.max)) {\n max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n } else {\n max = this.totalCount() - 1;\n }\n return {\n min: min,\n max: max\n };\n },\n mapCategories: function () {\n if (!this._categoriesMap) {\n var map$$1 = this._categoriesMap = new HashMap();\n var srcCategories = this.options.srcCategories;\n for (var idx = 0; idx < srcCategories.length; idx++) {\n map$$1.set(srcCategories[idx], idx);\n }\n }\n },\n totalCount: function () {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: { zIndex: 1 },\n justified: false,\n _deferLabels: true\n });\n var COORDINATE_LIMIT = 300000;\n var DateLabelFormats = {\n milliseconds: 'HH:mm:ss.fff',\n seconds: 'HH:mm:ss',\n minutes: 'HH:mm',\n hours: 'HH:mm',\n days: 'M/d',\n weeks: 'M/d',\n months: 'MMM \\'yy',\n years: 'yyyy'\n };\n var ZERO_THRESHOLD = 0.2;\n var AUTO = 'auto';\n var BASE_UNITS = [\n MILLISECONDS,\n SECONDS,\n MINUTES,\n HOURS,\n DAYS,\n WEEKS,\n MONTHS,\n YEARS\n ];\n var FIT = 'fit';\n function categoryRange(categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n range.min = toDate(range.min);\n range.max = toDate(range.max);\n }\n return range;\n }\n var EmptyDateRange = Class.extend({\n init: function (options) {\n this.options = options;\n },\n displayIndices: function () {\n return {\n min: 0,\n max: 1\n };\n },\n displayRange: function () {\n return {};\n },\n total: function () {\n return {};\n },\n valueRange: function () {\n return {};\n },\n valueIndex: function () {\n return -1;\n },\n values: function () {\n return [];\n },\n totalIndex: function () {\n return -1;\n },\n valuesCount: function () {\n return 0;\n },\n totalCount: function () {\n return 0;\n },\n dateAt: function () {\n return null;\n }\n });\n var DateRange = Class.extend({\n init: function (start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n var roundToBaseUnit = options.roundToBaseUnit;\n var justified = options.justified;\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n var lowerEnd = this.roundToTotalStep(end);\n var expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n var min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n var max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n var next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n this.valueEnd = this.roundToTotalStep(max, false, next);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\n if (this.valueEnd < this.valueStart) {\n this.valueEnd = this.valueStart;\n }\n if (this.displayEnd <= this.displayStart) {\n this.displayEnd = this.roundToTotalStep(this.displayStart, false, 1);\n }\n },\n displayRange: function () {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n },\n displayIndices: function () {\n if (!this._indices) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep;\n var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n this._indices = {\n min: minIdx,\n max: maxIdx\n };\n }\n return this._indices;\n },\n total: function () {\n return {\n min: this.start,\n max: this.end\n };\n },\n totalCount: function () {\n var last$$1 = this.totalIndex(this.end);\n return last$$1 + (this.options.justified ? 1 : 0);\n },\n valueRange: function () {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n },\n valueIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n },\n totalIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n },\n dateIndex: function (value) {\n var options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n },\n valuesCount: function () {\n var maxIdx = this.valueIndex(this.valueEnd);\n return maxIdx + 1;\n },\n values: function () {\n var values = this._values;\n if (!values) {\n var options = this.options;\n var range = this.valueRange();\n this._values = values = [];\n for (var date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n return values;\n },\n dateAt: function (index, total) {\n var options = this.options;\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n },\n roundToTotalStep: function (value, upper, next) {\n var ref = this.options;\n var baseUnit = ref.baseUnit;\n var baseUnitStep = ref.baseUnitStep;\n var weekStartDay = ref.weekStartDay;\n var start = this.start;\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (next) {\n roundedStep += next;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n });\n function autoBaseUnit(options, startUnit, startStep) {\n var categoryLimits = categoryRange(options.categories);\n var span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n }\n function defaultBaseUnit(options) {\n var categories = options.categories;\n var count = defined(categories) ? categories.length : 0;\n var minDiff = MAX_VALUE;\n var lastCategory, unit;\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n lastCategory = category;\n }\n options.baseUnit = unit || DAYS;\n }\n function initUnit(options) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n return options;\n }\n var DateCategoryAxis = CategoryAxis.extend({\n clone: function () {\n var copy = new DateCategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n return copy;\n },\n categoriesHash: function () {\n var start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n },\n initUserOptions: function (options) {\n return options;\n },\n initFields: function () {\n CategoryAxis.fn.initFields.call(this);\n var chartService = this.chartService;\n var intlService = chartService.intl;\n var options = this.options;\n var categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n this.options = options;\n options.srcCategories = categories;\n if (categories.length > 0) {\n var range = categoryRange(categories);\n var maxDivisions = options.maxDivisions;\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n if (maxDivisions) {\n var dataRange = this.dataRange.displayRange();\n var divisionOptions = $.extend({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n var dataRangeOptions = this.dataRange.options;\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n this.rangeLabels = [];\n },\n tickIndices: function (stepSize) {\n var ref = this;\n var dataRange = ref.dataRange;\n var divisionRange = ref.divisionRange;\n var valuesCount = divisionRange.valuesCount();\n if (!this.options.maxDivisions || !valuesCount) {\n return CategoryAxis.fn.tickIndices.call(this, stepSize);\n }\n var indices = [];\n var values = divisionRange.values();\n var offset = 0;\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;\n }\n for (var idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n var last$$1 = indices.length - 1;\n indices.splice(idx, 0, indices[last$$1 - 1] + (indices[last$$1] - indices[last$$1 - 1]) * stepSize);\n }\n }\n return indices;\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n var categories = this.options.categories || [];\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n parseNoteValue: function (value) {\n return parseDate(this.chartService.intl, value);\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n translateRange: function (delta) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / (range.max - range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if (range.min && range.max) {\n var from = addTicks(options.min || range.min, offset);\n var to = addTicks(options.max || range.max, offset);\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n return range;\n },\n scaleRange: function (delta) {\n var rounds = Math.abs(delta);\n var result = this.range();\n var from = result.min;\n var to = result.max;\n if (from && to) {\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n result = {\n min: from,\n max: to\n };\n }\n return result;\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n },\n pan: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.dataRange.displayRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.dataRange.total();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n var from = addTicks(min, offset);\n var to = addTicks(max, offset);\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n return panRange;\n }\n },\n pointsRange: function (start, end) {\n if (this.isEmpty()) {\n return null;\n }\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.dataRange.displayRange();\n var indicesRange = this.dataRange.displayIndices();\n var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n var options = this.options;\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n },\n zoomRange: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var fit = options.userSetBaseUnit === FIT;\n var totalLimits = this.dataRange.total();\n var ref = this.dataRange.displayRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var ref$1 = this.dataRange.options;\n var weekStartDay = ref$1.weekStartDay;\n var baseUnit = ref$1.baseUnit;\n var baseUnitStep = ref$1.baseUnitStep;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (fit) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n var rangeDiff = dateDiff(rangeMax, rangeMin);\n var diff = dateDiff(max, min);\n var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n var autoBaseUnitStep, ticks;\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n if (min < totalLimits.min) {\n min = totalLimits.min;\n }\n if (max > totalLimits.max) {\n max = totalLimits.max;\n }\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n },\n range: function () {\n return this.dataRange.displayRange();\n },\n createLabels: function () {\n CategoryAxis.fn.createLabels.call(this);\n this.createRangeLabels();\n },\n clearLabels: function () {\n CategoryAxis.fn.clearLabels.call(this);\n this.rangeLabels = [];\n },\n arrangeLabels: function () {\n this.arrangeRangeLabels();\n CategoryAxis.fn.arrangeLabels.call(this);\n },\n arrangeRangeLabels: function () {\n var ref = this;\n var options = ref.options;\n var rangeLabels = ref.rangeLabels;\n if (rangeLabels.length === 0) {\n return;\n }\n var lineBox = this.lineBox();\n var vertical = options.vertical;\n var mirror = options.rangeLabels.mirror || options.labels.mirror;\n var firstLabel = rangeLabels[0];\n if (firstLabel) {\n var position = vertical ? lineBox.y1 - firstLabel.box.height() / 2 : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n var lastLabel = rangeLabels[1];\n if (lastLabel) {\n var position$1 = vertical ? lineBox.y2 - lastLabel.box.height() / 2 : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position$1);\n }\n },\n autoRotateLabels: function () {\n CategoryAxis.fn.autoRotateLabels.call(this);\n this.autoRotateRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n CategoryAxis.fn.hideOutOfRangeLabels.call(this);\n this.hideOverlappingLabels();\n },\n hideOverlappingLabels: function () {\n var ref = this;\n var rangeLabels = ref.rangeLabels;\n var labels = ref.labels;\n if (rangeLabels.length === 0) {\n return;\n }\n function clip(rangeLabel, label) {\n if (!label.options.visible || label.box.overlaps(rangeLabel.box)) {\n label.options.visible = false;\n return true;\n }\n return false;\n }\n var firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (var i = 0; i < labels.length; i++) {\n var overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n var lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (var i$1 = labels.length - 1; i$1 > 0; --i$1) {\n var overlaps$1 = clip(lastRangeLabel, labels[i$1]);\n if (!overlaps$1) {\n break;\n }\n }\n }\n },\n contentBox: function () {\n var box = CategoryAxis.fn.contentBox.call(this);\n var rangeLabels = this.rangeLabels;\n for (var i = 0; i < rangeLabels.length; i++) {\n var label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n return box;\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n if (labelContext === void 0) {\n labelContext = {};\n }\n var options = this.options;\n var dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n var date = this.divisionRange.dateAt(index);\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n },\n createRangeLabels: function () {\n var this$1 = this;\n var ref = this.divisionRange;\n var displayStart = ref.displayStart;\n var displayEnd = ref.displayEnd;\n var options = this.options;\n var labelOptions = $.extend({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n if (labelOptions.visible !== true) {\n return;\n }\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var createLabel = function (index, date, text) {\n if (text) {\n var label = new AxisLabel(date, text, index, null, labelOptions);\n this$1.append(label);\n this$1.rangeLabels.push(label);\n }\n };\n var startText = this.axisLabelText(displayStart, labelOptions, {\n index: 0,\n count: 2\n });\n createLabel(0, displayStart, startText);\n var endText = this.axisLabelText(displayEnd, labelOptions, {\n index: 1,\n count: 2\n });\n createLabel(1, displayEnd, endText);\n },\n autoRotateRangeLabels: function () {\n var this$1 = this;\n var labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n var rotateLabel = function (label, tickPositions, index) {\n var width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n var angle = this$1.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n var tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n },\n categoryIndex: function (value) {\n return this.dataRange.valueIndex(value);\n },\n slot: function (from, to, limit) {\n var dateRange = this.dataRange;\n var start = from;\n var end = to;\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n var slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n getSlot: function (a, b, limit) {\n var start = a;\n var end = b;\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n valueRange: function () {\n var options = this.options;\n var range = categoryRange(options.srcCategories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n categoryAt: function (index, total) {\n return this.dataRange.dateAt(index, total);\n },\n categoriesCount: function () {\n return this.dataRange.valuesCount();\n },\n rangeIndices: function () {\n return this.dataRange.displayIndices();\n },\n labelsBetweenTicks: function () {\n return !this.divisionRange.options.justified;\n },\n prepareUserOptions: function () {\n if (this.isEmpty()) {\n return;\n }\n this.options.categories = this.dataRange.values();\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.dataRange.dateAt(index);\n },\n totalIndex: function (value) {\n return this.dataRange.totalIndex(value);\n },\n currentRangeIndices: function () {\n var range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n },\n totalRange: function () {\n return this.dataRange.total();\n },\n totalCount: function () {\n return this.dataRange.totalCount();\n },\n isEmpty: function () {\n return !this.options.srcCategories.length;\n },\n roundedRange: function () {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n var options = this.options;\n var datesRange = categoryRange(options.srcCategories);\n var dateRange = new DateRange(datesRange.min, datesRange.max, $.extend({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n return dateRange.displayRange();\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n rangeLabels: { visible: false },\n autoBaseUnitSteps: {\n milliseconds: [\n 1,\n 10,\n 100\n ],\n seconds: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n minutes: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n hours: [\n 1,\n 2,\n 3\n ],\n days: [\n 1,\n 2,\n 3\n ],\n weeks: [\n 1,\n 2\n ],\n months: [\n 1,\n 2,\n 3,\n 6\n ],\n years: [\n 1,\n 2,\n 3,\n 5,\n 10,\n 25,\n 50\n ]\n },\n maxDateGroups: 10\n });\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n var axisMin;\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n var diff = (max - minValue) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = Math.max(0, minValue - (max - minValue) / 2);\n } else {\n axisMin = min;\n }\n return axisMin;\n }\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n var axisMax;\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = Math.min(0, maxValue - (min - maxValue) / 2);\n } else {\n axisMax = max;\n }\n return axisMax;\n }\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n var MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n Axis.fn.init.call(this, $.extend({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n },\n initUserOptions: function (options) {\n var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n return axisOptions(autoOptions, options);\n },\n initFields: function () {\n this.totalMin = this.totalOptions.min;\n this.totalMax = this.totalOptions.max;\n this.totalMajorUnit = this.totalOptions.majorUnit;\n this.seriesMin = this.options.seriesMin;\n this.seriesMax = this.options.seriesMax;\n },\n clone: function () {\n return new NumericAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n startValue: function () {\n return 0;\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options;\n var range = options.max - options.min;\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var range = options.max - options.min;\n var scale = lineSize / range;\n var step = unit * scale;\n var divisions = this.getDivisions(unit);\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var positions = [];\n var pos = lineBox[(vertical ? Y : X) + startEdge];\n var skipStep = 0;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n if (limit === void 0) {\n limit = false;\n }\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (options.max - options.min));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 0;\n }\n if (!defined(end)) {\n end = start || 0;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n var p1, p2;\n if (vertical) {\n p1 = options.max - Math.max(start, end);\n p2 = options.max - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - options.min;\n p2 = Math.max(start, end) - options.min;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = Number(options.max);\n var min = Number(options.min);\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var offset = dir * (point[valueAxis] - lineStart);\n var step = (max - min) / lineSize;\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = options.max;\n var min = options.min;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = max - min;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: min + offset,\n max: max + offset,\n offset: offset\n };\n },\n scaleRange: function (delta) {\n var options = this.options;\n var offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, labelOptions, labelContext);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n zoomRange: function (delta) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n isValidRange: function (min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n });\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = { majorUnit: majorUnit };\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n return autoOptions;\n }\n function totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n }\n function clearNullValues(options, fields) {\n for (var idx = 0; idx < fields.length; idx++) {\n var field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n if (userOptions) {\n clearNullValues(userOptions, [\n 'min',\n 'max'\n ]);\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n var userSetLimits = userSetMin || userSetMax;\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n var result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n return result;\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n setDefaultOptions(NumericAxis, {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n });\n var DateValueAxis = Axis.extend({\n init: function (seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue),\n weekStartDay: firstDay(options, intlService)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n var weekStartDay = options.weekStartDay || 0;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n },\n clone: function () {\n return new DateValueAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n var options = this.options;\n return Math.floor(duration(options.min, options.max, options.baseUnit) / stepValue + 1);\n },\n getTickPositions: function (step) {\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var start = lineBox[(vertical ? Y : X) + startEdge];\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var scale = lineSize / timeRange;\n var weekStartDay = options.weekStartDay || 0;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, parseDate(this.intlService, a), parseDate(this.intlService, b), limit);\n },\n getValue: function (point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n return value !== null ? toDate(value) : null;\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var weekStartDay = options.weekStartDay || 0;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, labelOptions, labelContext);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay || 0;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n if (!exact) {\n from = addDuration(from, 0, baseUnit, weekStartDay);\n to = addDuration(to, 0, baseUnit, weekStartDay);\n }\n return {\n min: from,\n max: to,\n offset: offset\n };\n },\n scaleRange: function (delta) {\n var ref = this.options;\n var from = ref.min;\n var to = ref.max;\n var rounds = Math.abs(delta);\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n return {\n min: from,\n max: to\n };\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\n pan: function (delta) {\n var range = this.translateRange(delta, true);\n var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax, range.offset);\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n zoomRange: function (delta) {\n var range = this.scaleRange(delta);\n var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n return {\n min: min,\n max: max\n };\n }\n });\n function timeUnits(delta) {\n var unit = HOURS;\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n return unit;\n }\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var weekStartDay = options.weekStartDay || 0;\n var autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit, weekStartDay);\n options.max = options.max || addDuration(autoMax, tail, baseUnit, weekStartDay);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n clone: function () {\n return new LogarithmicAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n startValue: function () {\n return this.options.min;\n },\n getSlot: function (a, b, limit) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (logMax - logMin));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 1;\n }\n if (!defined(end)) {\n end = start || 1;\n }\n if (start <= 0 || end <= 0) {\n return null;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n start = log(start, base);\n end = log(end, base);\n var p1, p2;\n if (vertical) {\n p1 = logMax - Math.max(start, end);\n p2 = logMax - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - logMin;\n p2 = Math.max(start, end) - logMin;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = (logMax - logMin) / lineSize;\n var valueAxis = vertical ? Y : X;\n var lineStart = lineBox[valueAxis + startEdge];\n var offset = dir * (point[valueAxis] - lineStart);\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = logMin + valueOffset;\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var base = this.options.majorUnit;\n var offset = -delta;\n return {\n min: Math.pow(base, this.logMin - offset),\n max: Math.pow(base, this.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var scale = size / (logMax - logMin);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset),\n offset: offset\n };\n },\n labelsCount: function () {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var ticks = [];\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var majorTicks = options.majorTicks;\n var minorTicks = options.minorTicks;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var lineBox = this.lineBox();\n var ticks = [];\n var tickLineOptions = { vertical: vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var vertical = options.vertical;\n var lineBox = altAxis.lineBox();\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var ref = this._lineOptions();\n var lineStart = ref.lineStart;\n var step = ref.step;\n var ref$1 = this;\n var logMin = ref$1.logMin;\n var logMax = ref$1.logMax;\n for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var this$1 = this;\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var ref$1 = this._lineOptions();\n var lineStart = ref$1.lineStart;\n var step = ref$1.step;\n var ref$2 = this;\n var logMin = ref$2.logMin;\n var logMax = ref$2.logMax;\n var start = Math.floor(logMin);\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n var value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, labelOptions, labelContext);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n });\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n HashMap: HashMap,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n find: find,\n elementScale: elementScale,\n autoTextColor: autoTextColor,\n createHashSet: createHashSet,\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}));"]}