{"version":3,"file":"740.734438d2e457c17a.js","mappings":"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","names":["l","t","ARC","BLACK","BOTTOM","CENTER","CIRCLE","DATE","DEFAULT_FONT","FORMAT_REGEX","HEIGHT","INSIDE","LEFT","MAX_VALUE","Number","MIN_VALUE","NONE","OBJECT","OUTSIDE","RIGHT","ROUNDED_RECT","STRING","TOP","VALUE","WHITE","WIDTH","X","Y","value","Array","isArray","element","classes","classArray","idx","length","className","indexOf","SPACE_REGEX","path","offset","options","stroke","drawing","width","i","segments","anchor","round","translate","angle1","angle2","x","y","isNaN","isNumber","isString","isFinite","fn","destination","source","property","propInit","propValue","propType","s","constructor","Date","getTime","isFunction","clone","destProp","deepExtendOne","arguments","SIZE_STYLES_REGEX","field","test","styles","stylesArray","result","style","window","getComputedStyle","isSizeField","parseFloat","isObject","styleValue","defaultSpacing","spacing","top","right","bottom","left","current","compile","template","static","userImplementation","TemplateService","content","FIELD_REGEX","getterCache","fields","replace","match","index","indexAccessor","push","obj","array","callback","classNames","names","split","undefined","this","_map","get","name","_key","set","start","end","progress","TRIGGER","Tc","observer","handlers","handlerMap","deepExtend","trigger","args","isDefaultPrevented","callObserver","fnName","apply","requiresHandlers","browser","support","e","delta","wheelDelta","webkit","Math","max","devicePixelRatio","detail","ceil","floor","message","console","log","defined","location","pageX","clientX","pageY","clientY","touch","initialTouch","target","now","promises","Promise","all","events","eventName","eventNames","trim","addEventListener","box","getBoundingClientRect","documentElement","document","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","size","elementStyles","parseInt","height","getPixels","removeEventListener","paddingLeft","paddingTop","matrixRegexp","transform","Matrix","matrixString","members","map","parseMatrix","matrix","transformMatrix","parent","parentElement","parentMatrix","multiplyCopy","b","c","f","append","Cn","bindEvents","Gr","w","deg","Ds","elementOffset","Hr","elementSize","Ni","eventCoordinates","Xx","eventElement","We","hashKey","last","xt","limitValue","objectKey","rad","At","k","unbindEvents","Zr","valueOrDefault","fonts","state","depth","MAX_DEPTH","Object","keys","forEach","key","FontLoader","fetchFonts","font","load","logToConsole","then","loadFonts","type","proto","prototype","arr","min","predicate","item","geometry","unit","color","Color","isDark","DELETED","values","_index","_values","slice","filter","has","add","delete","clear","_set","Set","from","supported","supportsSet","SetWrapper","LegacySet","error","diff","DEFAULT_PRECISION","abs","scale","pow","relativeValue","scaleMultiplier","Class","super","Point","equals","point","rotate","center","degrees","theta","cosT","cos","sinT","sin","cx","cy","multiply","a","distanceTo","dx","dy","sqrt","angle","radius","radians","x1","y1","x2","y2","move","wrap","targetBox","wrapPoint","arrayPoint","Box","snapTo","axis","alignTo","targetCenter","shrink","dw","dh","expand","pad","padding","getSpacing","unpad","containsPoint","points","getHash","join","overlaps","rotation","r1","rotatePoint","r2","r3","r4","toRect","geom","hasSize","align","alignment","c1","c2","sizeFunc","inArray","Z","innerRadius","startAngle","Ring","middle","setRadius","newRadius","radianAngle","ax","ay","adjacentBox","distance","sector","midAndle","midPoint","hw","hh","sa","ca","p","endAngle","vector","startPoint","startVector","endPoint","endVector","dist","clockwise","getBBox","allAngles","sort","numericComparer","startAngleIndex","endAngleIndex","angles","r","concat","createRing","arc","radiusX","radiusY","draw","close","innerEnd","pointAt","lineTo","ShapeBuilder","position","PI","time","asin","animationFrameProxy","wnd","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","call","instance","AnimationFactory","_items","register","create","items","toLowerCase","ge","_options","duration","easing","assign","setup","step","play","delay","easingFunctions","finish","abort","loop","_stopped","wallTime","easingPosition","destroy","children","initUserOptions","reflow","currentChild","animation","getRoot","getSender","service","getService","sender","chartService","translateChildren","childrenCount","renderVisual","visible","createVisual","addVisual","renderChildren","createAnimation","renderComplete","visual","chartElement","appendVisual","zIndex","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","pos","here","insert","traverse","child","closest","matched","hasHighlight","highlight","createHighlight","toggleHighlight","show","opacity","customVisual","_highlight","highlightOptions","fill","highlightVisualArgs","series","dataItem","category","percentage","runningTotal","total","createGradientOverlay","gradientOptions","overlay","createGradient","closed","elements","supportsPointInactiveOpacity","ChartElement","margin","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","vAlign","paddingBox","contentBox","n","hasBox","background","visualStyle","dashType","cursor","setDefaultOptions","BoxElement","pointData","getElement","halfWidth","halfHeight","moveTo","rect","borderRadius","setCornerRadius","createElement","visualOptions","ShapeElement","RADIAL","p0","glass","stops","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","d","g","h","boxes","o","grep","rootOptions","gradients","currentBox","boxDiff","createBackground","hashCode","gradient","GRADIENTS","drawingGradient","usedSpace","currentStops","currentStop","innerRadialStops","cleanGradients","_observers","RootElement","_initDirection","vertical","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groups","groupsSize","maxGroupElementsSize","groupOptions","groupsCount","groupsStart","alignStart","groupStart","groupIdx","group","groupElements","elementStart","groupElementsCount","groupElementStart","groupSize","elementBox","maxSize","groupElementsSize","FloatElement","DrawingText","baseline","topLeft","Text","origin","bottomRight","ROWS_SPLIT_REGEX","fe","data","_initContainer","_autoReflow","rows","String","floatElement","textOptions","container","rowIdx","text","visualFn","_boxReflow","visualBox","visualContext","rectToBox","clippedBBox","normalBox","rotatedBox","rotationTransform","context","getDefaultVisual","boxCenter","TextBox","defaultOptions","title","titleOptions","Title","format","culture","click","widget","alignRotation","bbox","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","transformCopy","topRight","bottomLeft","distanceLeft","distanceRight","alignEnd","_","alignCenter","AxisLabel","render","hide","label","icon","childAlias","noteTemplate","getTemplate","auto","aliasFor","marker","wrapperBox","line","lineStart","linePoints","createLine","defaultVisual","alignPathToPixel","eventArgs","preventDefault","over","out","Note","toString","parseDate","firstDay","implementation","FORMAT_REPLACE_REGEX","Vc","chart","_intlService","intlService","intl","IntlService","formatString","localeAuto","locale","placeholderFormat","substring","rtl","Boolean","notify","isPannable","pannable","lock","tickOptions","tickX","tickY","tick","gridLine","lineEnd","ChartService","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","skip","labelsCount","normalizeLabelRotation","labelOptions","clearLabels","autoRotateLabels","range","createAxisLabel","count","clearTitle","lineBox","mirror","axisX","axisY","lineWidth","visualSize","notes","parseNoteValue","note","reverse","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","majorUnit","tickLineOptions","tickPositions","skipUnit","createAxisTick","getMajorTickPositions","getMinorTickPositions","minorUnit","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","plotBands","plotArea","_plotbandGroup","altAxis","pane","axes","slotX","slotY","getSlot","to","createPlotBandLabel","bandRect","textbox","labelTemplate","createGridLines","minorGridLines","majorGridLines","axisLineVisible","linePos","lineOptions","createAxisGridLine","sizeFn","titleSize","space","boxSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","labelsBetweenTicks","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelOffset","labelBox","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","labelAngle","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","defaultText","maxLabelOffset","lastLabel","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","startTick","endTick","limitRange","rangeSize","minValue","maxValue","valueRange","seriesMin","seriesMax","lineDir","lineInfo","lineSize","axisDir","axisOrigin","pointOffset","scaleToDelta","rawScale","MAX_SCALE","justified","prepareUserOptions","Axis","axisCrossingValue","MILLISECONDS","SECONDS","MINUTES","HOURS","DAYS","WEEKS","MONTHS","YEARS","TIME_PER_MINUTE","TIME_PER_HOUR","TIME_PER_DAY","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","TIME_PER_UNIT","years","months","weeks","days","hours","minutes","seconds","milliseconds","getTimezoneOffset","date","ticks","getHours","setHours","dateValue","weekStartDay","toDate","getFullYear","adjustDST","getMonth","addDuration","daysToSubtract","day","getDay","addTicks","startOfWeek","getDate","roundedDate","setMinutes","tzDiff","addHours","getSeconds","setSeconds","getMilliseconds","setMilliseconds","floorDate","toTime","baseUnit","absoluteDateDiff","baseUnitStep","startDate","timeIndex","dateIndex","dateDiff","dates","_ticks","categoriesHash","copy","CategoryAxis","categories","srcCategories","definedMin","definedMax","rangeIndices","totalRange","totalRangeIndices","G","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","indices","getTickPositions","positions","cache","hash","_hash","hasMinor","filterOutOfRangePositions","inRange","startIndex","endIndex","slotBox","singleSlot","p1","p2","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","scaleRange","zoomRange","totalMin","totalMax","labelContext","dataItems","hideOutOfRangeNotes","pan","pointsRange","rangeMin","rangeMax","_categoriesMap","dateEquals","currentRangeIndices","totalCount","mapCategories","HashMap","DateLabelFormats","BASE_UNITS","FIT","_range","sparseArrayLimits","displayIndices","displayRange","valueIndex","valuesCount","dateAt","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","next","valueEnd","displayEnd","_indices","minIdx","maxIdx","upper","roundedStep","startUnit","startStep","categoryLimits","categoryRange","span","autoBaseUnitSteps","maxDateGroups","autoUnit","unitSteps","nextStep","autoUnitIx","units","totalUnits","shift","DateCategoryAxis","dataRange","_parsed","parseDates","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","DateRange","useDefault","lastCategory","minDiff","categoryIx","defaultBaseUnit","autoBaseUnit","initUnit","divisionOptions","dataRangeOptions","divisionRange","EmptyDateRange","rangeLabels","splice","dateComparer","isEmpty","totalLimits","panRange","datesRange","indicesRange","fit","minDelta","maxDelta","maxDiff","rangeDiff","autoBaseUnitStep","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","autoRotateRangeLabels","hideOverlappingLabels","rangeLabel","firstRangeLabel","clip","lastRangeLabel","dateFormats","createLabel","rotateLabel","dateRange","MIN_VALUE_RANGE","autoOptions","narrowRange","autoMin","narrow","axisMin","autoAxisMin","autoMax","axisMax","autoAxisMax","autoMajorUnit","roundToMajorUnit","remainderClose","autoAxisOptions","totalOptions","totalAxisOptions","userOptions","userSetMin","userSetMax","clearNullValues","userSetLimits","axisOptions","totalMajorUnit","NumericAxis","startValue","getDivisions","stepValue","divisions","skipStep","limitCoordinate","getValue","endValue","isValidRange","divisor","ratio","remainder","axisCrossingValues","timeUnits","baseUnitTime","ceilDate","actualUnits","unitsToAdd","head","tail","applyDefaults","DateValueAxis","dir","limittedRange","base","logMaxRemainder","throwNegativeValuesError","initRange","logMin","logMax","LogarithmicAxis","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","power","minorOptions","_minorIntervalOptions","minorStep","info","Error","Uu","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","intervalAngle","reflowLabels","measureBox","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","interval","minorAngle","minorRadius","band","plotBandSlot","ring","totalDivs","slotAngle","fromValue","slotStart","toValue","RadarCategoryAxis","GridLinesMixin","instanceOptions","tmp","atan2","PolarAxis","polarAxis","bandStyle","shape","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","angularDistance","midAngle","gamma","axisType","minorSkipStep","RadarNumericAxis","RadarNumericAxisMixin","RadarLogarithmicAxis","process","dataPoints","removeDuplicates","initialControlPoint","lastControlPoint","pop","tangent","controlOut","firstControlPoint","secondControlPoint","controlPoints","cp0","invertAxis","lineFunction","calculateFunction","isLine","xField","yField","restrict","switchOrientation","monotonic","isMonotonicByField","sign","numberSign","oldXField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","J0","_axis","ChartAxis","chartsVisual","chartContainer","_pane","findAxisByName","ib","_plotArea","backgroundVisual","_bgVisual","Aggregates","sum","sumOrNull","countNumbers","avg","first","sb","row","_valueFields","_otherFields","_nullValue","_undefinedValue","seriesTypes","valueFields","otherFields","_makeValue","canonicalFields","bindPoint","pointIx","fieldData","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","initialValue","object","srcFields","fieldName","srcFieldName","getField","sourceFieldName","SeriesBinder","percentRegex","standardDeviationRegex","RegExp","Ku","errorValue","initGlobalRanges","deviationMatch","exec","valueGetter","createValueGetter","average","getAverage","deviation","getStandardDeviation","multiple","errorRange","low","high","globalRange","standardError","getStandardError","binder","getter","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","INITIAL_ANIMATION_DURATION","FADEIN","START_SCALE","msie","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","ZERO","INTERPOLATE","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HEATMAP","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","SERIES_HOVER","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT","SELECT_END","SHOW_TOOLTIP","HIDE_TOOLTIP","LOGARITHMIC","CATEGORY","INSIDE_END","OUTSIDE_END","MOUSEWHEEL","isVertical","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","ErrorBarBase","Ib","seriesValueAxis","dryRun","defaults","needsEval","excluded","hasOwnProperty","evalOptions","seriesCount","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","bind","pointOptions","seriesIx","pointType","invertAxes","plotValue","isStacked100","otherValues","categorySum","other","stack","otherStack","plotRange","isStacked","positive","prevValue","isStackedBar","otherValue","categoryAxisCrossingValue","convertableToNumber","stackLimits","axisName","stackName","pIx","updateStackRange","chartSeries","limitsCache","limits","errorTotals","negative","addErrorBar","errorBars","lowValue","highValue","seriesErrorRanges","ErrorRangeCalculator","addPointErrorBar","stackedErrorRange","updateRange","errorBar","CategoricalErrorBar","createPoint","owner","noteText","evalPointOptions","_defaults","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","currentSeries","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","crossingValues","axisIndex","_outOfRangeCallback","currentCategory","_bindPoint","outOfRangePoint","_bindCache","bindCache","formatPointValue","CategoricalChart","Ke","hover","originalEvent","ur","createNote","tooltipTracking","markers","_rendered","createMarker","labelText","formatValue","markerBorder","brightness","toHex","markerBox","_childBox","childBox","reflowLabel","noteTargetBox","defaultColor","shadow","highlightVisual","halfSize","tooltipAnchor","clipBox","horizontalAlign","verticalAlign","horizontal","overlapsBox","unclipElements","LinePoint","PointEventsMixin","NoteMixin","toGeometryPoints","segmentVisual","coords","getNearestPoint","LineSegment","lintPoint","stepAxis","stepDir","calculateStepPoints","previousPoint","toGeometryPoint","stepPoint","StepLineSegment","StepLineMixin","Ah","curveProcessor","CurveProcessor","curve","Ih","renderSegments","lastSegment","_segments","sortedPoints","sortPoints","pointCount","seriesMissingValues","createSegment","_addSegment","unshift","segment","missingValues","allPoints","nearestPoint","nearestPointDistance","pointDistance","pointBox","_setEnd","interpolateValue","suspend","setX","resume","ClipAnimation","root","transitions","clipPath","anyHasZIndex","_setChildrenAnimation","animationPoints","SplineSegment","LineChart","LineChartMixin","ClipAnimationMixin","fr","prevSegment","stackPoints","createFill","createStroke","lineCap","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","AreaSegment","StepAreaSegment","Dh","controlIn","Fb","previousSegment","_gapStackPoints","SplineAreaSegment","_stackPoints","stackPoint","startIdx","endIdx","_outOfRangeMinPoint","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","Rl","axisRanges","update","chartAxisRanges","chartRange","reset","query","textBox","alignToClipBox","parentBox","BarLabel","rectVisual","createRect","strokeOpacity","getBorderColor","lineJoin","hasGradientOverlay","baseColor","_brightness","borderColor","Bar","forEachReverse","gap","slots","slotSize","ClusterLayout","positionAxis","StackWrap","clusterType","stackType","negativeColor","cluster","stackWrap","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","stackAxis","childrenLength","_setAnimationOptions","pointVisual","BarChart","ocSlot","open","lhSlot","realBody","mid","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","body","drawLines","lineStyle","normalColor","Candlestick","tooltip","hasValue","areNumbers","splitValue","downColor","parts","CandlestickChart","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","lower","reflowWhiskerSlot","medianSlot","median","mean","meanSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outliers","outerFence","outlierValue","extremes","markersBorder","reflowOutliers","whiskers","BoxPlot","Vb","Hb","VerticalBoxPlot","filterOutliers","Ub","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","ScatterErrorBar","createMissingValue","xAxis","xAxisName","yAxis","yAxisName","xAxisRange","yAxisRange","namedXAxes","namedYAxes","currentSeriesPoints","ScatterChart","highlightGroup","Bubble","_maxSize","negativeValues","updateBubblesSize","animationOptions","minR","minSize","maxR","minArea","areaRatio","area","baseZIndex","BubbleChart","Target","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","Bullet","seriesItem","wrapData","bulletOptions","bullet","BulletChart","getStyle","pointColor","backgroundColor","paddingBottom","paddingRight","tooltipOptions","BaseTooltip","crosshair","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","CrosshairTooltip","moveLine","getBox","dim","axisLineBox","currentAxis","Crosshair","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","j","ChartContainer","id","ID","paneID","Pane","appendAxis","appendAxisAt","appendChart","empty","removeAxis","removeChart","allAxes","vGridLines","hGridLines","refresh","notifyRender","axisValueField","ChartPane","paneIndex","pointVisibility","segmentVisible","types","sampleCategory","dateCategory","equalsIgnoreCase","AREA_REGEX","hasItem","pointHasValue","outPoint","hasMinPoint","hasMaxPoint","minPoint","maxPoint","m","findNext","_outOfRangeMaxPoint","initSeries","legend","crosshairs","originalOptions","createPanes","createCrosshairs","paneDefaults","paneOptions","panes","panesLength","currentPane","crosshairOptions","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","inactiveItems","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","active","groupAxes","xAxes","yAxes","paneIx","paneAxes","axisIx","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","valuesToAdd","defaultValue","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","alignAxes","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","_overlap","_mirrored","shrinkAxisWidth","axisGroupBox","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","offsetX","paneBox","offsetY","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","allPaneAxes","rotated","chartPane","remainingHeight","autoHeightPanes","percents","backgroundBox","axesCount","axisA","axisB","chartsBoxes","addBackgroundPaths","multipath","paths","backgroundContainsPoint","isTransparent","bg","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","edge","some","isSingleAxis","reduce","acc","PlotAreaBase","fa","_dispatchEvent","parentObj","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","aggregatePoints","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","setValue","aggregates","seriesType","DefaultAggregates","fromOptions","toOptions","labelFrom","_createLabel","labelTo","RangeBar","RangeBarChart","plotLimits","jg","initLabelsFormat","fromPoint","RangeLinePoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","RangeAreaPoint","Hh","toPoints","fromSegments","fromPoints","toPath","fromPath","xC","RangeAreaSegment","createCurveSegments","StepRangeAreaSegment","segmentType","SplineRangeAreaSegment","fromSlot","toSlot","RangeAreaChart","wC","oPoints","cPoints","lhPoints","oSlot","cSlot","AC","OHLCPoint","WaterfallSegment","kC","createSegments","totalCategories","summary","prevPoint","AREA_SERIES","OUT_OF_RANGE_SERIES","namedCategoryAxes","valueAxisRangeTracker","AxisGroupRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","filterSeriesByType","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","axisPane","categoryField","aggregateSeries","filterSeries","dataLength","outOfRangePoints","createOutOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","dateAxis","srcData","getFn","getDateField","aggregator","SeriesAggregator","categoryItem","categoryIdx","categoriesToAdd","stackableChartOptions","firstSeries","categoryAxes","unique","axisSeries","groupSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","AreaChart","rangeAreaChart","OHLCChart","BoxPlotChart","waterfallChart","WaterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","aggregatedAxis","definitions","isJustified","Og","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","eventType","_eventCoordinates","pointPane","appendIfNotNull","singleItemOrArray","updateAxisOptions","targetOptions","CategoricalPlotArea","PlotAreaEventsMixin","timeout","lastExecTime","throttled","elapsed","clearTimeout","cancel","_defaultPrevented","_events","one","getArray","handlersIsFunction","handler","original","unbind","Xh","Observable","_kendoExportVisual","exportVisual","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","Group","_enableTracking","eventTarget","node","domNode","_kendoNode","srcElement","getSize","currentSize","_size","setSize","_resize","resize","force","suspendTracking","_suspendedTracking","resumeTracking","_elementOffset","elementPadding","_surfacePoint","coord","inverseTransform","elementScale","invert","ma","childNodes","observe","removeObserver","addObserver","insertAt","remove","removeSelf","invalidate","geometryChange","optionsChange","childrenChange","action","attrs","output","renderAttr","SVG_NS","renderSVG","svg","innerHTML","testFragment","testContainer","hasParser","DOMParser","firstChild","namespaceURI","chartDoc","parser","parseFromString","importedDoc","adoptNode","appendChild","TRANSFORM","DefinitionMap","nodeType","BaseNode","clearDefinitions","childNode","NODE_MAP","createDefinitions","attachTo","domElement","insertBefore","setElement","nodes","parentNode","removeChild","css","Hl","isDefinition","updateDefinition","attr","removeAttr","setAttribute","allAttr","allCss","removeAttribute","mapTransform","renderTransform","renderAllAttr","transformChange","mapStyle","renderStyle","renderOpacity","renderId","hasDefinitions","definition","definitionChange","refUrl","renderDefinitions","mapDefinitions","skipBaseHref","baseHref","baseUrl","getElementsByTagName","href","url","hashIndex","ef","Node","renderOffset","sf","loadStops","stopNode","GradientStopNode","mapCoordinates","renderCoordinates","mapSpace","userSpace","nf","GradientNode","of","rf","af","definitionMap","addDefinitions","removeDefinitions","createDefinition","ClipNode","LinearGradient","LinearGradientNode","RadialGradient","RadialGradientNode","addDefinition","mapItem","removeDefinition","Yh","defs","DefinitionNode","firstElementChild","DASH_ARRAYS","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","SOLID","ATTRIBUTE_MAP","Ns","renderData","mapFill","mapStroke","textContent","printPath","currentType","printPoints","segmentStart","segmentEnd","renderLinecap","renderDashType","renderStroke","dashArray","renderFill","pf","PathNode","df","uf","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","mapPosition","mapSource","tl","renderPosition","encode","src","htmlEncode","renderSource","ff","mf","cornerRadius","rx","ry","ENTITY_REGEX","decodeEntities","_element","lastIndex","innerText","measure","setY","renderContent","normalizeText","renderTextAnchor","ArcNode","CircleNode","GroupNode","ImageNode","MultiPathNode","RectNode","TextNode","BaseSurface","_root","RootNode","direction","_template","_rootElement","ctm","getScreenCTM","alignToScreen","mouseover","mouseout","mousemove","viewBox","_offset","Qi","ctx","prevOut","prevSeg","bezierCurveTo","closePath","initClip","clearClip","setClip","beginPath","renderPath","setTransform","toArray","loadElements","cors","setOpacity","globalAlpha","opactity","traversable","renderTo","save","restore","canvas","getContext","invalidateHandler","_invalidate","throttle","_rescale","_devicePixelRatio","fixedScale","clearRect","Cf","shapes","_add","_quadNode","pointShapes","QuadRoot","inBounds","nodeRect","nodeBottomRight","inserted","_initChildren","QuadNode","Rect","ROOT_SIZE","_zIndex","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","zIndexComparer","levelWeight","parents","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","rawBBox","createLinearGradient","createRadialGradient","stop","parseColor","addColorStop","toCssRgba","addGradientStops","strokeStyle","mozDash","webkitLineDash","Af","If","Tf","onLoad","onError","loading","createPromise","img","Image","crossOrigin","complete","onload","onerror","drawImage","resolve","reject","kf","Df","Path","Ef","textAlign","fillText","strokeText","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","image","rootElement","loadingStates","promise","resolveDataURL","toDataURL","promiseAll","ShapesQuadTree","surface","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","currentShape","_currentShape","hasDocument","hasFeature","SurfaceFactory","SVGSurface","CanvasSurface","preferred","navigator","userAgent","va","_points","arrayPoints","togglePointHighlight","toggleHandler","toggle","isHighlighted","mouseKey","event","ctrlKey","shiftKey","altKey","ranges","_active","acceptKey","_panAxes","toChartAxisRanges","updatedAxes","Pannable","marquee","_marquee","marqueeColor","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","selectionPosition","_updateAxisRanges","zoom","startLocation","ZoomSelection","j_","rate","updateRanges","transofrm","createTransform","sizeField","DEFAULT_OPTIONS","alignContent","justifyContent","alignItems","orientation","lineSpacing","revers","Of","_rect","_fieldMap","_initMap","fieldMap","groupsSizeField","groupsAxis","justifyAlign","alignStartReverse","_initGroups","groupOrigin","elementOrigin","Size","groupBox","arrangeElements","translateToPoint","bboxes","scaledStart","newStart","_newGroup","addGroup","_addToGroup","X_","legendItem","Q_","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","HORIZONTAL","CUSTOM","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","LegendLayout","LegendItem","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","Legend","_registry","registry","entry","PlotAreaFactory","hasClasses","_dateAxis","initOptions","offsetHeight","createElements","onPane","wrapper","createDiv","selection","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","cssText","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","DomEventsBuilder","stopPropagation","_start","_move","_end","tap","_tap","press","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","closestHandle","handle","addClass","oldRange","removeClass","rightClick","which","mousewheelDelta","_toModelCoordinates","touches","_slot","leftMaskWidth","rightMaskWidth","zDir","relative","Selection","ew","tooltipPoints","_slotAnchor","_defaultAnchor","shared","categoryText","categoryFormat","slotCenter","centerPoint","SharedTooltip","fromScale","scaleX","scaleY","BarChartAnimation","BubbleAnimation","fadeTo","FadeInAnimation","PieAnimation","missingValue","ScatterLineChart","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","createXYAxis","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","inferredDate","xAxesOptions","yAxesOptions","xValues","yValues","currentValue","XYPlotArea","autoTextColor","themeLabels","theme","seriesDefaults","animationDelay","labelsOptions","labelsDistance","labelHeight","labelWidth","lp","createSegmentVisual","borderOptions","fallbackFill","singleSegment","tooltipAlignment","RAD_30","RAD_60","sine","cosine","PieSegment","qf","createLegendItem","legendOptions","pointVisible","legendItems","seriesColors","colorsCount","bindSegments","anglePerValue","constantAngle","currentAngle","explode","evalSegmentOptions","segmentOptions","seriesConfigs","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","remaining","_takeDistance","amount","available","labelDistance","boxX","boxY","hAlignLabel","connectors","_connectorLines","connectorsColor","connectorLine","sr","crossing","intersection","pointInCircle","C","find","autoFit","pieCenter","bboxBottom","reverseValue","originalX","a1","a2","b1","b2","ub","ua","PieChart","PieChartMixin","tm","createPieChart","pieChart","DonutSegment","holeSize","totalSize","seriesWithoutSize","DonutChart","sm","createPolarAxis","createValueAxis","valueAxisOptions","axisDefaultRange","valueAxisBox","heightDiff","PolarScatterChart","PolarLineChart","fw","_polarAxisCenter","yw","centerSegment","SplinePolarAreaSegment","PolarAreaSegment","_hasMissingValuesGap","xComparer","PolarPlotAreaBase","scatterChart","PolarAreaChart","PolarPlotArea","valueRadius","seriesSegments","groupBySeriesIx","isLastDataPoint","RadarLineChart","Sw","Iw","kw","SplineRadarAreaSegment","RadarAreaSegment","RadarSegment","slotSector","RadarClusterLayout","Pw","childSector","RadarStackLayout","RadarBarChart","_hasBarCharts","_isStacked100","chartOptions","RadarAreaChart","RadarPlotArea","chartBox","createPath","FunnelSegment","labelPadding","dynamicSlopeReflow","totalHeight","firstSegment","maxSegment","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","finalNarrow","dynamicSlope","FunnelChart","labelColor","isRoundRect","halfBorderWidth","HeatmapPoint","setRange","ut","minLightnessOffset","hsl","toHSL","toCss","indexX","indexY","xRange","yRange","xIndex","yIndex","yIn","HeatmapChart","bindCategories","createAxisLabels","xCategories","createHashSet","yCategories","createHeatmapChart","xAxisOptions","yAxisOptions","HeatmapPlotArea","COLOR","FIRST","MAX","NOTE_TEXT","PiePlotArea","createDonutChart","donutChart","createFunnelChart","funnelChart","errorLow","errorHigh","AXIS_NAMES","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","themeOptions","observers","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","fontLoaded","_destroyed","_redraw","_attachEvents","_setElementClass","seriesCopies","aliases","alias","resolveAxisAliases","applySeriesColors","chartArea","offsetWidth","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","_model","findPaneByName","findPaneByIndex","ChartPlotArea","seriesName","categoryName","pointByCategoryName","togglePointsHighlight","showTooltip","_sharedTooltip","_tooltip","hideTooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","model","_getModel","_destroyView","_createTooltip","Highlight","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","exportOptions","currentOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","_mousewheelZoom","MousewheelZoom","_toggleDragZoomEvents","allowDrag","allowZoom","_dragZoomEnabled","touchAction","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","Tooltip","themeAxisDefaults","axisDefaults","axisColor","mapAxisOptions","applyAxisDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","applySeriesDefaults","colors","seriesColor","_createPlotArea","_modelOptions","skipSeries","selections","select","_selectStart","_select","_selectEnd","_clickHandler","_mouseleaveHandler","_mouseover","_mouseout","_toDocumentCoordinates","_shouldAttachMouseMove","_hoveredPoint","hovered","_stopChartHandlers","_gestureDistance","_zooming","mousewheelZoom","scaleDelta","_drawingChartElement","leave","_startNavigation","_suppressHover","_endNavigation","_mousewheelZoomRate","totalDelta","chartEvent","_getChartElement","coordinates","_elementPadding","_padding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","_activePoint","multipleSeries","hasInactiveOpacity","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","_activeChartInstance","_updateSeriesOpacity","_applySeriesOpacity","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","inactiveOpacity","activeSeries","shouldHighlight","hasDefaultInactiveOpacity","seriesInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","u","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","autoBind","bindCategoryAxisFromSeries","uniqueCategories","bindable","onAxis","isDateAxis","dataIx","dataRow","srcDates","comparer","sortDates","uniqueDates","rowCount","rowIx","colCount","colIx","transpose","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setOptions","setDirection","setIntlService","noTransitionsRedraw","bar","column","rangeColumn","verticalLine","pie","donut","verticalArea","scatter","scatterLine","bubble","candlestick","ohlc","boxPlot","verticalBullet","polarArea","polarLine","radarArea","radarLine","waterfall","DATA_FIELDS","fieldValue","originalValue","nullValue","Chart","e1","ChartSharedTooltip","NO_CROSSHAIR","display","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointsCount","pointWidth","wrapNumber","Sparkline","o1","_initialOpacity","div","chartPadding","scroll","scrollWidth","minPos","maxPos","clearHideTimeout","_visible","visibility","tooltipStyle","marginTop","borderTopWidth","_hideTimeout","_hideAnimation","FadeOutAnimation","hideDelay","NavigatorHint","NAVIGATOR_PANE","NAVIGATOR_AXIS","hint","chartObserver","InstanceObserver","clean","_redrawSelf","initSelection","mainAxis","axisClone","ClonedObject","selectStart","selectEnd","filterAxes","silent","redrawSlaves","slavePanes","_drag","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","_dragEnd","readSelection","_zoom","fromIx","toIx","_zoomEnd","__navi","naviOptions","Navigator","attachAxes","attachSeries","valueAxes","justifyAxis","equallySpacedSeries","_collapse","autoBindElements","user","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","dirty","_seriesCount","copyNavigatorCategories","StockChart","paintable","measurable","withGeometry","Element","GeometryArc","_bbox","_geometry","curvePoints","curveTo","_containsPoint","_isOnPath","Arc","GeometryRect","alignElements","otherAxis","previousBBox","stackElements","createStackElements","stacks","stackSize","addElementToStack","getStacks","startElement","elementIdx","wrapElements","rectSize","PathParser","parse","str","multiPath","MultiPath","parsePath","rootGroup","getOrigin","exportRoot","surfaceOptions","Surface","exportGroup","raw","encodeBase64","ARROW_POINTER","BAR_POINTER","DEGREE","LINEAR","RADIAL_POINTER","RADIAL_RANGE_POINTER","setOrigin","fromRect","geo","styleGeometry","styleBox","L1","contextService","surfaceElement","pointerValue","pointer","pointers","_setValueOptions","_draw","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","Gauge","Pp","tickRenderOptions","tickGroup","renderAxisTick","renderLabels","scaleLine","renderLine","scaleTicks","renderTicks","renderRanges","getRange","buildLabelElement","linePath","LinearScale","newValue","_oldValue","repaint","Pointer","track","trackSize","pointerHalfSize","pointerBox","pointerRangeBox","trackBox","getElementOptions","_margin","LinearPointer","toScale","translateX","translateY","ArrowLinearPointerAnimation","j1","pointerShape","elementOptions","newPoints","oldPoints","speed","setter","toUpperCase","BarLinearPointerAnimation","G1","Z1","minSlot","sizeAxis","p4","pointerPath","oldShape","renderTrack","trackOptions","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","scaleElements","ArrowLinearPointer","BarLinearPointer","plotAreaBox","scaleBox","overflow","Q1","$1","tickAngles","getRadiusX","tickStart","tickEnd","renderArc","labelElements","repositionRanges","hasRanges","ticksSize","labelsGroup","rangeDistance","isInside","hasLabelElements","setRadiusX","setRadiusY","paddingWidth","paddingHeight","labelPos","labelElement","prevLabelPos","labelTransform","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","createRange","rangeGeom","rangePlaceholderColor","rangeSegment","tickArc","majorTickAngles","drawTicks","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","RadialScale","newAngle","oldAngle","RadialPointerAnimation","Circle","tS","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","RadialPointer","arrow","_initialPlotArea","fitScale","alignScale","_buildPointers","getDiff","midDiff","oldDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","rangeLineCap","placeholderRangeAngle","setEndAngle","setStartAngle","addRange","startColor","currentColor","RangePointerAnimation","rangeColor","initProperties","quietZoneLength","addQuietZone","convertedValue","initValue","addData","pattern","invalidCharacterError","character","Encoding","addCheckSum","extend","characterMap","cCheckSumTotal","kCheckSumTotal","kCheckSumMinLength","checkSumMod","DASH_VALUE","DASH","START","STOP","addPattern","addCharacter","charAt","setBaseUnit","cValue","getWeightedSum","checksum","kValue","weightedSum","weightedValue","Code11","minBaseUnitLength","addStart","pushCheckSum","addStop","prepareValues","characterData","addBase","Code39Base","minRatio","maxRatio","gapWidth","splitCharacter","patternMappings","B","W","A","D","E","F","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","$","patternString","minBaseUnit","minHeight","getBaseUnit","toFixed","getBaseWidth","addCharacterGap","Code39","Code39ExtendedBase","charCodeAt","addExtended","code","patterns","extendedMappings","patternIndex","shiftCharacters","fromCharCode","dataCharacter","specialAsciiCodes","shiftValuesAsciiCodes","SHIFT0","SHIFT1","SHIFT2","SHIFT3","TERMINATION_BAR","checkSumLength","charData","checkValues","_getCheckValues","_findCharacterByValue","wightedSum","numberRegex","alphanumericRegex","encoding","is","isCode","pushState","State128","states","_initMoves","FNC4","SHIFT","encodingState","_moves","maxLength","numberMatch","substr","_moveFNC","_shiftState","_moveState","fnc","previousState","shifted","MOVE","states128","State128AB","next4","getSubstring","_initSubStates","dependentStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","startState","startAI","endAI","applicationIdentifiers","multiKey","ids","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","ai","validate","applicationIdentifier","getApplicationIdentifier","unsupportedAIError","_initStates","checkSum","getNextState","temp","checkSumType","checkSums","startStopLength","checkSumFunction","Modulo10","evenSum","oddSum","odd","Modulo11","weight","checkValue","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","keyTable","digits","valueAsString","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","arrToAdd","limitedHeight","even","Encodings","code11","code39","code39extended","code93","Code93","code93extended","characterByValue","code128","Code128Base","code128a","code128b","code128c","Code128c","msimod10","MsiBase","msimod11","msimod1010","msimod1110","postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","ean8","Ean13","ean13","surfaceType","clientWidth","clientHeight","errorHandler","defaultErrorHandler","_setOptions","_initSurfaceElement","_createSurface","_destroySurfaceElement","_render","textMargin","encodedValue","textToDisplay","textHeight","barHeight","_getBackground","_getText","_bandsGroup","_getBands","surfaceSize","stepX","patternItem","_textbox","chunkLength","bitString","startColumn","getNextCell","getNextRemainderCell","dataString","version","getEncodingResult","inputString","errorCorrectionLevel","modes","previousMode","chooseMode","mode","modeString","nextMode","getModes","dataCodewordsCount","DataModeInstances","getStringBitsLength","getDataCodewordsCount","getVersion","getDataString","EncodingResult","modeIndicator","bitsInCharacterCount","getVersionIndex","getBitsCharacterCount","getModeCountString","toBitsString","QRDataMode","splitInto","inputLength","mod3","NumericQRDataMode","characters","AlphaNumericQRDataMode","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","bytesCount","getBytesCount","bc","significantOnes","VersionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","ALPHA_NUMERIC","powersOfTwo","powersOfTwoResult","irregularAlignmentPatternsStartDistance","finderPattern","alignmentPattern","errorCorrectionPatterns","paddingCodewords","maskPatternConditions","alphaPattern","alphaRegex","alphaNumericRegex","byteRegex","generatorPolynomials","matrices","bit","polynomial","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","multiplyByConstant","xorPolynomials","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","codeLength","generatorNumber","toDecimal","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","dividePolynomials","fillFunctionCell","getNumberAt","quotient","mod","modules","nextX","nextY","scores","rowColumn","previousBits","adjacentBits","darkModules","percent","mod5","previous","generatePowersOfTwo","multiplyPolynomials","generateGeneratorPolynomials","crossPattern","squarePattern","elementWidth","elementHeight","quietZoneSize","dataSize","contentSize","encoder","Utf8Encoder","IsoEncoder","createQRCodeDataEncoder","encodingResult","versionInformation","initialDataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","padDataString","blocks","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","blockIdx","codewordIdx","generateErrorCodewords","getBlocks","initMatrices","addCentricPattern","addFinderSeparator","addFinderPatterns","startDistance","addAlignmentPatterns","addTimingFunctions","addVersionInformation","addFormatInformation","block","cell","cellVisitor","FreeCellVisitor","fillDataCell","fillData","adjacentSameBits","modulesLength","rowIndex","columnIndex","matrixIndex","scoreFinderPatternOccurance","scoreAdjacentSameBits","calculateDarkModulesRatioScore","scoreMaskMatrixes","optimalMatrix","encodeBCH","encodeVersionInformation","encodedString","encodeFormatInformation","encodeData","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","imageRect","logoSize","_getLogoSize","logoUrl","imageUrl","crossSize","crossOffset","_renderShape","matrixSize","defautLogoSize","datums","WGS84","math","atan","tan","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","Location","precision","dest","datum","greatCircleTo","initialBearing","initialDatum","bearing","fromLat","fromLng","dToR","initialDest","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","toSquare","sinA","u2","deltao","lngAndLat","fromLatLng","exp","PI_DIV_2","PI_DIV_4","DEG_TO_RAD","_initOptions","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","forward","clamp","proj","lng0","centralMeridian","_projectLat","ecc","ts","con","inverse","_inverseY","ecch","phi","dphi","Mercator","_proj","SphericalMercator","_tm","_itm","toLocation","defineProperty","convertToHtml","html","removeChildren","prepend","originElement","toHyphens","toPixels","endsWith","detectOS","minorVersion","os","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","agent","device","testRegex","majorVersion","flatVersion","regexes","dflt","regex","getEventMap","eventMap","down","up","getSupportedFeatures","mobileOS","msPointers","safari","opera","mozilla","documentMode","detectBrowser","mobileChrome","crios","PointerEvent","MSPointerEvent","mouseAndTouchPresent","eventCapture","table","transforms","prefix","hasTransitions","lowPrefix","delayedClick","meta","querySelector","getAttribute","proxy","method","on","useCapture","addEventListeners","eventFilter","eventHandler","closestMatchingTarget","currentTarget","off","removeEventListeners","applyEventMap","setDefaultEvents","noop","FUNCTION","that","_setEvents","extent","_extent","newItem","itemTemplate","_itemText","appendHtml","separator","showElement","hideElement","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","newMin","newMax","contains","Attribution","directionsMap","iconClass","navigateUpButton","createButton","navigateRightlButton","navigateDownButton","navigateLeftButton","_keyroot","_tabindex","_keydownHandler","_keydown","dispose","targetElement","TABINDEX","tabindex","_pan","panStep","button","matches","zoomInButton","zoomOutButton","_change","zoomStep","PLUS","MINUS","ZoomControl","initialNw","initialSe","nw","se","containsAny","locs","include","includeAll","edges","ne","sw","Extent","World","scrollElement","_beforeReset","_reset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","_readData","_hasData","_data","newSize","Layer","subdomains","viewType","_viewType","_view","locationToLayer","viewOrigin","_updateView","TileView","view","extentToPoint","TileLayer","tileSize","urlTemplate","pool","TilePool","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","boundary","wrapValue","wrappedValue","el","renderSize","urlResult","urlOptions","errorUrl","z","quadkey","q","ImageTile","_remove","_create","maxDist","CHANGE","capture","_release","attachEvent","captureNext","cancelCapture","forcedEnabled","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","enabled","PaneDimension","forcedMinScale","maxScale","newScale","centerCoordinates","dimension","movable","dragMove","dragDelta","resistance","translateAxis","elastic","PaneAxis","dimensions","userEvents","gesture","closestAnchor","previousGesture","previousCenter","scaleWith","tagName","transformStyle","webkitTransformOrigin","_saveCoordinates","by","scaleTo","moveAxis","newCoordinates","_initRoot","Movable","_markers","_translateSurface","_load","features","geometries","_clearMarkers","_loader","GeoJsonLoader","shapeCreated","cancelled","renderPointsAsMarkers","_createMarker","layer","featureCreated","_panning","locationToView","layerIndex","layers","shapeIndex","_panHandler","panHandler","ShapeLayer","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","properties","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","valueField","newData","scaleType","_scaleType","getLocation","locationField","symbol","_createSymbol","_drawSymbol","Scales","Symbols","BubbleLayer","domain","_domain","domainRange","_ratio","rel","square","MOUSE_ENTER","MOUSE_LEAVE","MARKER_CLASS","_markerClickHandler","_markerClick","_addOne","Marker","arg","addTo","getTitle","titleField","markerIndex","_markerMouseEnter","_createMarkerEventArgs","_markerMouseLeave","MarkerLayer","popup","_position","_mouseEnterHandler","_mouseEnter","_mouseLeaveHandler","_mouseLeave","attributes","setAttributett","renderTooltip","_createEventArgs","_tickProxy","_tick","_started","done","onEnd","onCancel","Animation","timePassed","initial","_easeProxy","ease","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","api","mouse","changedTouches","identifier","pointerId","invalidZeroEvents","_updateLocationData","velocity","timeStamp","timeDelta","initialDelta","client","screen","touchInfo","TouchAxis","useClickAsTap","threshold","pressEvent","_clicks","supportDoubleTap","_moved","_finished","_holdTimeout","_hold","minHold","_trigger","_clickTimeout","_shouldNotMove","_withinIgnoreThreshold","UserEvents","endTime","activeTouches","activeTouchIndex","isMoved","startTime","jQueryEvent","xDelta","yDelta","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","global","ownerDocument","pressed","_surfaceMoveHandler","_surfaceEndHandler","_elementStartHandler","_elementClickHandler","defaultAction","preventDragEvent","_elementDragStartHandler","_elementSelectHandler","preventIfMovingProxy","preventIfMoving","withEachUpEvent","_isMoved","_disposeAll","_isMultiTouch","touch1","touch2","touchDelta","_apiCall","_maxTouchesReached","getTouches","Touch","_eachTouch","methodName","matchingTouch","dict","tapCapture","transition","Transition","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","_updateCoordinates","setCoordinates","setCallback","scrollMovable","alwaysVisible","paneSize","sizeRatio","hasScrolling","hasNativeScrolling","_native","useNative","scrollHeader","fixedContainer","wrapInner","inner","TapCapture","PaneDimensions","avoidScrolling","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","ownsElement","verticalSwipe","zoomSnapBack","ZoomSnapBack","animatedScroller","AnimatedScroller","scrollTo","mousewheelScrolling","_wheelScrollHandler","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelTimeout","deltaY","wheelDeltaY","VERTICAL_AXIS","scrollHeight","contentResized","_scale","zoomOut","enable","disable","animatedScrollTo","pullHandled","_paneChange","scrollBar","ScrollBar","visibleScrollHints","DragInertia","Scroller","pullOffset","messages","pullTemplate","releaseTemplate","refreshTemplate","MARKER","LOCATION","layersMap","_init","scroller","zoomControl","Ot","markerLayer","initObserver","initServices","crs","EPSG3857","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","widgetService","_notifyObserver","level","zoomLevel","_setExtent","_getExtent","wraparound","locationObject","_layerSize","layerToLocation","pointObject","translateWith","viewToLocation","pointResult","eventOffset","eventToView","eventToLayer","eventToLocation","viewSize","_setOrigin","originLocation","_origin","newExtent","layerWidth","layerHeight","_zoomAround","pivot","controls","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPosition","posSelector","renderPos","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","_createLayer","layerOptions","markerDefaults","layerDefaults","layerConstructor","_scrollOffset","_panComplete","_panEndTimestamp","_scaleToZoom","gestureCenter","centerLocation","originPoint","tiles","_resetScroller","xBounds","yBounds","_renderLayers","newZoom","toZoom","postZoom","fromZoom","Map","SANS","SANS12","SANS16","TRANSPARENT","rangeArea","verticalRangeArea","outliersField","meanField","heatmap","funnel","horizontalWaterfall","rangeBar","verticalBoxPlot","baseTheme","_c0","ɵngcc0","TooltipPopupComponent_ng_template_0_1_ng_template_0_Template","ctx_r4","seriesTooltipTemplateRef","seriesTooltipContext","TooltipPopupComponent_ng_template_0_2_ng_template_0_Template","ctx_r5","seriesSharedTooltipTemplateRef","seriesSharedTooltipContext","TooltipPopupComponent_ng_template_0_1_Template","TooltipPopupComponent_ng_template_0_2_Template","ctx_r1","popupClasses","point_r15","$implicit","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_1_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_2_Template","TooltipPopupComponent_ng_template_3_tr_4_td_1_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_Template","TooltipPopupComponent_ng_template_3_tr_4_ng_template_4_Template","ctx_r24","colorMarker_r12","colorMarker","nameColumn_r13","nameColumn","TooltipPopupComponent_ng_template_3_tr_4_Template","points_r9","categoryText_r10","colspan_r11","colspan","key_r1","ctx_r0","popupSettings","_c1","ChartComponent_div_5_ng_template_1_Template","donutCenterStyle","donutCenterTemplate","templateRef","packageMetadata","productName","productCodes","publishDate","licensingDocsUrl","configurationService","axisLabelClick","EventEmitter","dragEnd","dragStart","legendItemHover","legendItemLeave","noteClick","noteHover","noteLeave","paneRender","plotAreaClick","plotAreaHover","plotAreaLeave","seriesClick","seriesHover","seriesOver","seriesLeave","zoomEnd","zoomStart","ChartComponentGenerated","ɵfac","ɵdir","inputs","outputs","__decorate","Input","__metadata","Output","THROTTLE_MS","ConfigurationService","ngZone","store","BehaviorSubject","initSource","onFastChange$","asObservable","onChange$","pipe","auditTime","change","runOutsideAngular","ɵprov","token","factory","NgZone","BaseEvent","prevented","PreventableEvent","LegendEvent","_e","EVENT_MAP","NoteEvent","RenderEvent","SeriesEvent","InstanceEventService","DonutCenterTemplateDirective","selectors","__param","Optional","TemplateRef","CollectionService","Subject","onItemChange$","changes","propertyName","SimpleChange","CollectionItemComponent","collectionService","subscription","subscribe","ngOnChanges","copyChanges","notifyChanges","toSimpleChanges","ngOnDestroy","unsubscribe","ItemChange","SeriesItemComponentGenerated","closeField","colorField","currentField","downColorField","errorHighField","errorLowField","explodeField","fromField","lowerField","medianField","noteTextField","openField","q1Field","q3Field","summaryField","toField","upperField","visibleInLegendField","xErrorHighField","xErrorLowField","yErrorHighField","yErrorLowField","Function","SettingsComponent","configKey","markAsVisible","Change","SeriesTooltipComponentGenerated","SeriesTooltipComponent","seriesTooltipTemplate","ɵcmp","contentQueries","dirIndex","_t","decls","vars","encapsulation","changeDetection","ContentChild","flag","SeriesItemComponent","toggleVisibility","togglePointVisibility","pv","seriesTooltip","fontWeight","fontSize","fontFamily","computedBackgroundColor","ThemeService","loaded","loadTheme","isDocumentAvailable","readTheme","readDefaultTheme","queryColor","chartBaseTheme","setColors","setFonts","setSeriesColors","destroyElement","seriesTemplate","setStyle","mapColor","queryStyle","setInactiveOpacity","selector","defaultFont","titleFont","paneTitleFont","labelFont","querySelectorAll","unsetColor","letter","letterPos","num","seriesPos","varName","legendItemClick","init","TooltipTemplateService","setTemplate","seriesTemplates","setSeriesTemplates","setSharedTemplate","sharedTemplate","getSharedTemplate","SeriesTooltipTemplateDirective","SharedTooltipTemplateDirective","xLow","xHigh","yLow","yHigh","COLLISION","popupService","localizationService","popupRef","popupAlign","animate","collision","positionMode","popupElement","onInit","appendTo","nativeElement","scrollOffset","ElementRef","ɵ0$2","bodyFactory","TooltipPopupComponent","templateService","wrapperClass","defaultSharedTooltipTemplate","sharedTemplateContext","TooltipTemplatePoint","pointTemplateRef","containsElement","hasParent","wrapPoints","defaultSeriesTooltipTemplate","mouseleaveSubscription","emit","ɵngcc1","ɵngcc2","viewQuery","PopupService","provide","POPUP_CONTAINER","useFactory","consts","TooltipPopupComponent_ng_template_0_Template","TooltipPopupComponent_ng_template_2_Template","TooltipPopupComponent_ng_template_3_Template","directives","ɵngcc3","ViewChild","LocalizationService","ɵ0$3","CrosshairTooltipComponent","changeDetectorRef","detectChanges","CrosshairTooltipComponent_ng_template_0_Template","AXES","CrosshairTooltipsContainerComponent","tooltipKeys","tooltipsMap","tooltipComponents","crossahirTooltipComponents","createCrosshairTooltips","newMap","mapTooltips","removeTooltip","tooltips","axesCrosshairTooltipOptions","tooltipIdx","CrosshairTooltipsContainerComponent_kendo_chart_crosshair_tooltip_0_Template","ViewChildren","QueryList","getTouch","domEvent","groupNames","eventGroups","hammerInstance","eventHandlers","panstart","panmove","panend","pinchstart","pinchmove","pinchend","previousArgs","xLocation","yLocation","pointer1","pointer2","srcEvent","deltaX","eventGroup","shouldBindGroup","nameIdx","recognizer","instanceRecognizer","dateValueAxisFormats","skeleton","emitter","HAMMER","Hammer","isDevMode","recognizers","Tap","Pan","Pinch","Press","DomEvents","ChartComponent","themeService","instanceEventService","changeDetector","renderer","resizeRateLimit","suppressTransitions","hostClasses","validatePackage","refreshWait","ngOnInit","ngAfterViewInit","canRender","chartMouseleave","listen","domSubscriptions","subscriptions","intlChange","rtlChange","ngAfterViewChecked","autoResize","resizeTimeout","destroyed","redrawTimeout","createInstance","exportImage","exportSVG","getPlotArea","instanceObserver","ChartInstanceObserver","onResize","_event","onLegendItemClick","run","LegendItemClickEvent","seriesComponents","hasObservers","onRender","getDonutCenterStyle","onShowTooltip","crossahirTooltips","tooltipInstance","onHideTooltip","activeEmitter","updateDirection","setChartAreaSize","updateOptions","tooltipMouseleave","relatedTarget","combineLatest","inZone","markForCheck","deferredRedraw","isRTL","ɵngcc4","exportAs","L10N_PREFIX","useValue","$event","ChartComponent_div_5_Template","ɵngcc5","ContentChildren","descendants","ChangeDetectorRef","Renderer2","AxisDefaultsComponentGenerated","AxisDefaultsComponent","AxisDefaultsCrosshairComponentGenerated","AxisDefaultsCrosshairComponent","AxisDefaultsCrosshairTooltipComponentGenerated","AxisDefaultsCrosshairTooltipComponent","AxisDefaultsLabelsComponentGenerated","AxisDefaultsLabelsComponent","AxisDefaultsTitleComponentGenerated","AxisDefaultsTitleComponent","CollectionComponent","processChanges","ngAfterContentInit","readItems","localeId","CategoryAxisItemComponentGenerated","CategoryAxisItemComponent","LOCALE_ID","Inject","CategoryAxisComponentGenerated","CategoryAxisComponent","CategoryAxisCrosshairComponentGenerated","CategoryAxisCrosshairComponent","CategoryAxisCrosshairTooltipComponentGenerated","CategoryAxisCrosshairTooltipComponent","CategoryAxisLabelsComponent","CategoryAxisRangeLabelsComponent","CategoryAxisNotesComponentGenerated","CategoryAxisNotesComponent","CategoryAxisNotesIconComponentGenerated","CategoryAxisNotesIconComponent","CategoryAxisNotesLabelComponentGenerated","CategoryAxisNotesLabelComponent","CategoryAxisSelectComponentGenerated","CategoryAxisSelectComponent","CategoryAxisTitleComponentGenerated","CategoryAxisTitleComponent","ChartAreaComponentGenerated","ChartAreaComponent","LegendComponentGenerated","LegendComponent","LegendInactiveItemsComponentGenerated","LegendInactiveItemsComponent","LegendItemComponentGenerated","LegendItemComponent","PaneComponentGenerated","PaneComponent","PaneDefaultsComponent","PaneDefaultsTitleComponent","PanesComponentGenerated","PanesComponent","PanesTitleComponentGenerated","PanesTitleComponent","PlotAreaComponentGenerated","PlotAreaComponent","SeriesComponentGenerated","SeriesComponent","tooltipTemplateService","ngAfterContentChecked","readTooltipTemplates","templates","SeriesDefaultsComponentGenerated","SeriesDefaultsComponent","SeriesDefaultsLabelsComponentGenerated","SeriesDefaultsLabelsComponent","SeriesDefaultsLabelsFromComponentGenerated","SeriesDefaultsLabelsFromComponent","SeriesDefaultsLabelsToComponentGenerated","SeriesDefaultsLabelsToComponent","SeriesDefaultsNotesComponentGenerated","SeriesDefaultsNotesComponent","SeriesDefaultsNotesIconComponentGenerated","SeriesDefaultsNotesIconComponent","SeriesDefaultsNotesLabelComponentGenerated","SeriesDefaultsNotesLabelComponent","SeriesDefaultsTooltipComponentGenerated","SeriesDefaultsTooltipComponent","SeriesErrorBarsComponentGenerated","SeriesErrorBarsComponent","SeriesExtremesComponentGenerated","SeriesExtremesComponent","SeriesHighlightComponentGenerated","SeriesHighlightComponent","SeriesLabelsComponentGenerated","SeriesLabelsComponent","SeriesLabelsFromComponentGenerated","SeriesLabelsFromComponent","SeriesLabelsToComponentGenerated","SeriesLabelsToComponent","SeriesMarkersComponentGenerated","SeriesMarkersComponent","SeriesNotesComponentGenerated","SeriesNotesComponent","SeriesNotesIconComponentGenerated","SeriesNotesIconComponent","SeriesNotesLabelComponentGenerated","SeriesNotesLabelComponent","SeriesOutliersComponentGenerated","SeriesOutliersComponent","TitleComponentGenerated","TitleComponent","TooltipComponentGenerated","TooltipComponent","sharedTooltipTemplate","ValueAxisItemComponentGenerated","ValueAxisItemComponent","ValueAxisComponentGenerated","ValueAxisComponent","ValueAxisCrosshairComponentGenerated","ValueAxisCrosshairComponent","ValueAxisCrosshairTooltipComponentGenerated","ValueAxisCrosshairTooltipComponent","ValueAxisLabelsComponentGenerated","ValueAxisLabelsComponent","ValueAxisNotesComponentGenerated","ValueAxisNotesComponent","ValueAxisNotesIconComponentGenerated","ValueAxisNotesIconComponent","ValueAxisNotesLabelComponentGenerated","ValueAxisNotesLabelComponent","ValueAxisTitleComponentGenerated","ValueAxisTitleComponent","XAxisItemComponentGenerated","XAxisItemComponent","XAxisComponentGenerated","XAxisComponent","XAxisCrosshairComponentGenerated","XAxisCrosshairComponent","XAxisCrosshairTooltipComponentGenerated","XAxisCrosshairTooltipComponent","XAxisLabelsComponentGenerated","XAxisLabelsComponent","XAxisNotesComponentGenerated","XAxisNotesComponent","XAxisNotesIconComponentGenerated","XAxisNotesIconComponent","XAxisNotesLabelComponentGenerated","XAxisNotesLabelComponent","XAxisTitleComponentGenerated","XAxisTitleComponent","YAxisItemComponentGenerated","YAxisItemComponent","YAxisComponentGenerated","YAxisComponent","YAxisCrosshairComponentGenerated","YAxisCrosshairComponent","YAxisCrosshairTooltipComponentGenerated","YAxisCrosshairTooltipComponent","YAxisLabelsComponentGenerated","YAxisLabelsComponent","YAxisNotesComponentGenerated","YAxisNotesComponent","YAxisNotesIconComponentGenerated","YAxisNotesIconComponent","YAxisNotesLabelComponentGenerated","YAxisNotesLabelComponent","YAxisTitleComponentGenerated","YAxisTitleComponent","ZoomableComponentGenerated","ZoomableComponent","RootConfigurationService","ɵRootConfigurationService_BaseFactory","EVENT_MAP$1","navigatorFilter","StockInstanceEventService","ɵStockInstanceEventService_BaseFactory","NAVIGATOR_DEFAULTS","StockChartComponent","skipNavigatorRedraw","applyNavigatorDefaults","useExisting","PREFIX","InjectionToken","PrefixConfigurationService","rootService","NavigatorComponent","useClass","NavigatorCategoryAxisComponent","NavigatorCategoryAxisCrosshairComponent","NavigatorCategoryAxisCrosshairTooltipComponent","NavigatorCategoryAxisLabelsComponent","NavigatorCategoryAxisNotesComponent","NavigatorCategoryAxisNotesIconComponent","NavigatorCategoryAxisNotesLabelComponent","NavigatorCategoryAxisSelectComponent","NavigatorCategoryAxisTitleComponent","NavigatorHintComponent","NavigatorPaneComponent","NavigatorPaneTitleComponent","NavigatorSelectComponent","NavigatorSeriesItemComponent","NavigatorSeriesComponent","NavigatorSeriesErrorBarsComponent","NavigatorSeriesExtremesComponent","NavigatorSeriesHighlightComponent","NavigatorSeriesLabelsComponent","NavigatorSeriesLabelsFromComponent","NavigatorSeriesLabelsToComponent","NavigatorSeriesMarkersComponent","NavigatorSeriesNotesComponent","NavigatorSeriesNotesIconComponent","NavigatorSeriesNotesLabelComponent","NavigatorSeriesOutliersComponent","NavigatorSeriesTooltipComponent","SparklineComponent","tooltipWrapperClass","tooltipContentClasses","ChartModule","ɵmod","ɵinj","providers","imports","CommonModule","PopupModule","ResizeSensorModule","StockChartModule","SparklineModule","ChartsModule"],"sourceRoot":"webpack:///","sources":["./node_modules/source-map-loader/dist/cjs.js","./node_modules/@progress/kendo-charts/dist/es2015/common/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/add-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/remove-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/align-path-to-pixel.js","./node_modules/@progress/kendo-charts/dist/es2015/common/clockwise.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-string.js","./node_modules/@progress/kendo-charts/dist/es2015/common/convertable-to-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-function.js","./node_modules/@progress/kendo-charts/dist/es2015/common/deep-extend.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-object.js","./node_modules/@progress/kendo-charts/dist/es2015/common/style-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-styles.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-spacing.js","./node_modules/@progress/kendo-charts/dist/es2015/services/template-service.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-template.js","./node_modules/@progress/kendo-charts/dist/es2015/common/getter.js","./node_modules/@progress/kendo-charts/dist/es2015/common/grep.js","./node_modules/@progress/kendo-charts/dist/es2015/common/has-classes.js","./node_modules/@progress/kendo-charts/dist/es2015/common/hash-map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/in-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/interpolate-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/instance-observer.js","./node_modules/@progress/kendo-charts/dist/es2015/common/map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/mousewheel-delta.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/log-to-console.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-coordinates.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-element.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/now.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/promise-all.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/bind-events.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-offset.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-styles.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-size.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/unbind-events.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-padding.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/drawing-utils.js","./node_modules/@progress/kendo-charts/dist/es2015/common/font-loader.js","./node_modules/@progress/kendo-charts/dist/es2015/common/set-default-options.js","./node_modules/@progress/kendo-charts/dist/es2015/common/sparse-array-limits.js","./node_modules/@progress/kendo-charts/dist/es2015/common/find.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/common/auto-text-color.js","./node_modules/@progress/kendo-charts/dist/es2015/common/create-hash-set.js","./node_modules/@progress/kendo-charts/dist/es2015/common/default-error-handler.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-major-unit.js","./node_modules/@progress/kendo-charts/dist/es2015/core/point.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/ring.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-builder.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/easing-functions.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/animation-frame.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation-factory.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation.js","./node_modules/@progress/kendo-charts/dist/es2015/core/chart-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/gradients.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/box-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/core/root-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/float-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/rect-to-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/title.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis-label.js","./node_modules/@progress/kendo-charts/dist/es2015/core/note.js","./node_modules/@progress/kendo-charts/dist/es2015/services/intl-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/format-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/chart-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/dom-events-builder.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-tick.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-grid-line.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/absolute-date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-ticks.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/start-of-week.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/floor-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/ceil-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-comparer.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-time.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-equals.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-index.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-dates.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/first-day.js","./node_modules/@progress/kendo-charts/dist/es2015/core/category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/floor.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/ceil.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/limit-coordinate.js","./node_modules/@progress/kendo-charts/dist/es2015/core/numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-min.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-max.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-value-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/grid-lines-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/polar-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/radar-numeric-axis-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/curve-processor.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/find-axis-by-name.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/count-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/series-binder.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-range-calculator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-bar-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/categorical-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/eval-options.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/categories-count.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/categorical-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/point-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/note-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/spline-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/line-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/clip-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/any-has-z-index.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/clip-animation-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/step-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/spline-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/axis-group-range-tracker.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-label.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-gradient-overlay.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/stack-wrap.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/are-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/vertical-box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/scatter-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-value.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/target.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/base-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart-container.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/append-if-not-null.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/segment-visible.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/bind-segments.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/equals-ignore-case.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/filter-series-by-type.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-date-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/is-date-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/single-item-or-array.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/create-out-of-range-points.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/plotarea-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/series-aggregator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/default-aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/spline-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/step-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/categorical-plotarea.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/throttle.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/observable.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/base-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-attribute.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-all-attributes.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-style.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-svg.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-stop-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/linear-gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/radial-gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/clip-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/definition-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/root-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/arc-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/circle-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/group-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/html-encode.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/image-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/multi-path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/rect-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/utils/render-path.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/group-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/root-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-root.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/shapes-quad-tree.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/arc-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/circle-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/image-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/multi-path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/rect-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface-cursor.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface-factory.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/highlight.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/accept-key.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/to-chart-axis-ranges.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/pannable.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/zoom-selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/mousewheel-zoom.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/translate-to-point.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start-reverse.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-item.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-factory.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bar-chart-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bubble-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/fade-in-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/pie-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/xy-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/pie-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/pie-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-scatter-chart/polar-scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-line-chart/polar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/spline-polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-line-chart/radar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/spline-radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-stack-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/radar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/color-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/heatmap-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/register-charts.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/donut-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/funnel-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/sparkline.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/fade-out-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator-hint.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/stock-chart.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/rect.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-align.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/create-stack-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-stack.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/fit.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/path-parser.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-group.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/export-image.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-svg.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/pad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/build-label-element.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/get-range.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/unpad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/arc-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code11.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/postnet.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code128.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/msi.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean13.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean8.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/main.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/surface-size.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/free-cell-visitor.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding-result.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/iso-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/qr-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/data-mode-instances.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/alpha-numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/byte-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/version-codewords.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/map/datums.js","./node_modules/@progress/kendo-charts/dist/es2015/map/location.js","./node_modules/@progress/kendo-charts/dist/es2015/map/crs.js","./node_modules/@progress/kendo-charts/dist/es2015/map/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/observable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/attribution.js","./node_modules/@progress/kendo-charts/dist/es2015/map/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/common/keys.js","./node_modules/@progress/kendo-charts/dist/es2015/map/zoom.js","./node_modules/@progress/kendo-charts/dist/es2015/map/extent.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/layer.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/tile.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/draggable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/shape.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/marker.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/fx.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/user-events.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/scroller.js","./node_modules/@progress/kendo-charts/dist/es2015/map/map.js","./node_modules/@progress/kendo-charts/dist/es2015/services/map-service.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/base-theme.js","./node_modules/@progress/kendo-angular-charts/__ivy_ngcc__/dist/fesm2015/index.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const ARC = \"arc\";\nexport const AXIS_LABEL_CLICK = \"axisLabelClick\";\nexport const BLACK = \"#000\";\nexport const BOTTOM = \"bottom\";\nexport const CENTER = \"center\";\nexport const CIRCLE = \"circle\";\nexport const COORD_PRECISION = 3;\nexport const CROSS = \"cross\";\nexport const DATE = \"date\";\nexport const DEFAULT_FONT = \"12px sans-serif\";\nexport const DEFAULT_HEIGHT = 400;\nexport const DEFAULT_PRECISION = 10;\nexport const DEFAULT_WIDTH = 600;\nexport const END = \"end\";\nexport const FORMAT_REGEX = /\\{\\d+:?/;\nexport const HEIGHT = \"height\";\nexport const HIGHLIGHT_ZINDEX = 100;\nexport const INSIDE = \"inside\";\nexport const LEFT = \"left\";\nexport const MAX_VALUE = Number.MAX_VALUE;\nexport const MIN_VALUE = -Number.MAX_VALUE;\nexport const NONE = \"none\";\nexport const NOTE_CLICK = \"noteClick\";\nexport const NOTE_HOVER = \"noteHover\";\nexport const NOTE_LEAVE = \"noteLeave\";\nexport const OBJECT = \"object\";\nexport const OUTSIDE = \"outside\";\nexport const RIGHT = \"right\";\nexport const ROUNDED_RECT = \"roundedRect\";\nexport const START = \"start\";\nexport const STRING = \"string\";\nexport const TOP = \"top\";\nexport const TRIANGLE = \"triangle\";\nexport const VALUE = \"value\";\nexport const WHITE = \"#fff\";\nexport const WIDTH = \"width\";\nexport const X = \"x\";\nexport const Y = \"y\";\nexport const DEFAULT_SERIES_OPACITY = 1;\n","export default function isArray(value) {\n return Array.isArray(value);\n}","import isArray from './is-array';\n\nexport default function addClass(element, classes) {\n const classArray = isArray(classes) ? classes : [ classes ];\n\n for (let idx = 0; idx < classArray.length; idx++) {\n const className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += \" \" + className;\n }\n }\n}","const SPACE_REGEX = /\\s+/g;\n\nexport default function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, \"\").replace(SPACE_REGEX, \" \");\n }\n}","import { drawing } from '@progress/kendo-drawing';\n\nexport default function alignPathToPixel(path) {\n let offset = 0.5;\n if (path.options.stroke && drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n\n for (let i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n\n return path;\n}","export default function clockwise(angle1, angle2) {\n // True if angle2 is clockwise of angle1\n // assuming angles grow in clock-wise direction\n // (as in the pie and radar charts)\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n}","export default function isNumber(value) {\n return typeof value === \"number\" && !isNaN(value);\n}","import { STRING } from './constants';\n\nexport default function isString(value) {\n return typeof value === STRING;\n}","import isNumber from './is-number';\nimport isString from './is-string';\n\nexport default function convertableToNumber(value) {\n return isNumber(value) || (isString(value) && isFinite(value));\n}","export default function isFunction(fn) {\n return typeof fn === \"function\";\n}","import isFunction from './is-function';\n\nconst OBJECT = \"object\";\nconst UNDEFINED = \"undefined\";\n\nfunction deepExtendOne(destination, source) {\n\n for (let property in source) {\n let propValue = source[property];\n let propType = typeof propValue;\n\n let propInit;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n\n if (propInit && propInit !== Array) {\n\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n let destProp = destination[property];\n if (typeof (destProp) === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n\n return destination;\n}\n\nexport default function deepExtend(destination) {\n const length = arguments.length;\n\n for (let i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n\n return destination;\n}","export default function isObject(value) {\n return typeof value === \"object\";\n}","import isNumber from './is-number';\n\nexport default function styleValue(value) {\n if (isNumber(value)) {\n return value + \"px\";\n }\n return value;\n}","import isObject from './is-object';\nimport isArray from './is-array';\nimport isString from './is-string';\nimport styleValue from './style-value';\n\nconst SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n\nfunction isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n}\n\nexport default function elementStyles(element, styles) {\n const stylesArray = isString(styles) ? [ styles ] : styles;\n\n if (isArray(stylesArray)) {\n const result = {};\n const style = window.getComputedStyle(element);\n\n for (let idx = 0; idx < stylesArray.length; idx++) {\n let field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n\n return result;\n } else if (isObject(styles)) {\n for (let field in styles) {\n element.style[field] = styleValue(styles[field]);\n }\n }\n}","import { TOP, BOTTOM, LEFT, RIGHT } from './constants';\n\nexport default function getSpacing(value, defaultSpacing = 0) {\n const spacing = { top: 0, right: 0, bottom: 0, 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\n return spacing;\n}","let current = {\n compile: function(template) {\n return template;\n }\n};\n\nclass TemplateService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static compile(template) {\n return current.compile(template);\n }\n}\n\nexport default TemplateService;\n","import TemplateService from '../services/template-service';\nimport isFunction from './is-function';\n\nexport default function getTemplate(options = {}) {\n let 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\n return template;\n}\n","import { drawing } from '@progress/kendo-drawing';\n\nconst FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\nconst getterCache = {};\n\ngetterCache['undefined'] = function(obj) {\n return obj;\n};\n\nexport default function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n\n const fields = [];\n field.replace(FIELD_REGEX, function(match, index, indexAccessor, field) {\n fields.push(drawing.util.defined(index) ? index : (indexAccessor || field));\n });\n\n getterCache[field] = function(obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n\n return result;\n };\n\n return getterCache[field];\n}","export default function grep(array, callback) {\n const length = array.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result .push(array[idx]);\n }\n }\n\n return result;\n}","export default function hasClasses(element, classNames) {\n if (element.className) {\n const names = classNames.split(\" \");\n for (let idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n}","\nexport default class HashMap {\n constructor() {\n this._map = {};\n }\n\n get(name) {\n return this._map[this._key(name)];\n }\n\n set(name, value) {\n this._map[this._key(name)] = value;\n }\n\n _key(name) {\n return name instanceof Date ? name.getTime() : name;\n }\n}","export default function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n}","import { drawing } from '@progress/kendo-drawing';\nimport { COORD_PRECISION } from './constants';\n\nexport default function interpolateValue(start, end, progress) {\n return drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n}","import deepExtend from './deep-extend';\n\nconst TRIGGER = 'trigger';\n\nclass InstanceObserver {\n constructor(observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n }\n\n trigger(name, args) {\n const { observer, handlerMap } = this;\n let 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\n return isDefaultPrevented;\n }\n\n callObserver(fnName, ...args) {\n return this.observer[fnName].apply(this.observer, args);\n }\n\n requiresHandlers(names) {\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n\n for (let idx = 0; idx < names.length; idx++) {\n if (this.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n}\n\nexport default InstanceObserver;","import { drawing } from '@progress/kendo-drawing';\n\nexport default function map(array, callback) {\n const length = array.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n let value = callback(array[idx]);\n if (drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n}","import { support } from '@progress/kendo-drawing';\n\nconst browser = support.browser || {};\n\nexport default function mousewheelDelta(e) {\n let delta = 0;\n\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n\n if (browser.webkit) {\n // Webkit browsers scale the delta by twice the device resolution.\n // Possibly related to https://bugs.webkit.org/show_bug.cgi?id=196339\n //\n // Low device resolutions (e.g. zoom-out to 30%) also behave strangely.\n delta = delta / (2 * Math.max(window.devicePixelRatio, 0.625));\n }\n } else if (e.detail) {\n delta = e.detail / 3;\n }\n\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n\n return delta;\n}\n","/* eslint-disable no-console */\n\nexport default function logToConsole(message) {\n const console = window.console;\n\n if (typeof(console) != \"undefined\" && console.log) {\n console.log(message);\n }\n}","import defined from './defined';\n\nexport default function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n}","export default function eventElement(e = {}) {\n return e.touch ? e.touch.initialTouch : e.target;\n}","const now = Date.now || function() {\n return new Date().getTime();\n};\n\nexport default now;\n","export default function promiseAll(promises) {\n return Promise.all(promises);\n}","export default function bindEvents(element, events) {\n for (let eventName in events) {\n const eventNames = eventName.trim().split(\" \");\n for (let idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n}","export default function elementOffset(element) {\n const box = element.getBoundingClientRect();\n\n const documentElement = document.documentElement;\n\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n}","export default function elementStyles(element, styles) {\n const result = {};\n const style = window.getComputedStyle(element) || {};\n const stylesArray = Array.isArray(styles) ? styles : [ styles ];\n\n for (let idx = 0; idx < stylesArray.length; idx++) {\n let field = stylesArray[idx];\n result[field] = style[field];\n }\n\n return result;\n}","import elementStyles from './element-styles';\nimport defined from './defined';\n\nfunction getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + \"px\";\n}\n\nexport default function elementSize(element, size) {\n if (size) {\n const { width, height } = size;\n\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n\n } else {\n const size = elementStyles(element, [ 'width', 'height' ]);\n\n return {\n width: parseInt(size.width, 10),\n height: parseInt(size.height, 10)\n };\n }\n}","export default function unbindEvents(element, events = {}) {\n for (let name in events) {\n const eventNames = name.trim().split(\" \");\n for (let idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n}","import { default as elementStyles } from './element-styles';\n\nexport default function elementPadding(element) {\n const { paddingLeft, paddingTop } = elementStyles(element, [ \"paddingLeft\", \"paddingTop\" ]);\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n}\n","import Matrix from '../geometry/matrix';\n\nconst matrixRegexp = /matrix\\((.*)\\)/;\n\nfunction parseMatrix(matrixString) {\n const match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n const members = match[1].split(',').map(x => parseFloat(x));\n return new Matrix(...members);\n}\n\nfunction transformMatrix(element) {\n const transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n}\n\nexport default function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n let matrix = transformMatrix(element);\n let parent = element.parentElement;\n while (parent) {\n const parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n}\n","import {\n drawing,\n Class,\n logToConsole\n} from '@progress/kendo-drawing';\n\nconst {\n append,\n bindEvents,\n defined,\n deg,\n elementOffset,\n elementSize,\n eventCoordinates,\n eventElement,\n hashKey,\n last,\n limitValue,\n objectKey,\n rad,\n round,\n unbindEvents,\n valueOrDefault\n} = drawing.util;\n\nexport {\n append,\n bindEvents,\n Class,\n defined,\n deg,\n elementOffset,\n elementSize,\n eventCoordinates,\n eventElement,\n hashKey,\n last,\n limitValue,\n logToConsole,\n objectKey,\n rad,\n round,\n unbindEvents,\n valueOrDefault\n};\n","import { logToConsole } from '../drawing-utils';\n\nclass FontLoader {\n static fetchFonts(options, fonts, state = { depth: 0 }) {\n const MAX_DEPTH = 5;\n\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n\n Object.keys(options).forEach(function(key) {\n const value = options[key];\n if (key === \"dataSource\" || key[0] === \"$\" || !value) {\n return;\n }\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\n static loadFonts(fonts, callback) {\n let promises = [];\n\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 // Silence font-loading errors\n logToConsole(e);\n }\n\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n }\n\n static preloadFonts(options, callback) {\n const fonts = [];\n FontLoader.fetchFonts(options, fonts);\n\n FontLoader.loadFonts(fonts, callback);\n }\n}\n\nexport default FontLoader;","import deepExtend from './deep-extend';\n\nexport default function setDefaultOptions(type, options) {\n const proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n}","import { MIN_VALUE, MAX_VALUE } from './constants';\n\nexport default function sparseArrayLimits(arr) {\n let min = MAX_VALUE;\n let max = MIN_VALUE;\n\n for (let idx = 0, length = arr.length; idx < length; idx++) {\n const value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n}","export default function find(array, predicate) {\n for (let i = 0; i < array.length; i++) {\n const item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n}\n","import { geometry } from '@progress/kendo-drawing';\n\nconst Matrix = geometry.Matrix;\nconst matrixRegexp = /matrix\\((.*)\\)/;\n\nfunction parseMatrix(matrixString) {\n const match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n const members = match[1].split(',').map(x => parseFloat(x));\n return new Matrix(...members);\n}\n\nfunction transformMatrix(element) {\n const transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n}\n\nexport default function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n let matrix = transformMatrix(element);\n let parent = element.parentElement;\n while (parent) {\n const parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n}\n","import { Color } from '@progress/kendo-drawing';\nimport { WHITE, BLACK } from './constants';\n\nfunction autoTextColor(color) {\n const isDark = new Color(color).isDark();\n if (isDark) {\n return WHITE;\n }\n\n return BLACK;\n}\n\nexport default autoTextColor;\n","const DELETED = {};\n\nclass LegacySet {\n constructor(values) {\n this._index = {};\n this._values = values ? values.slice(0) : [];\n\n for (let i = 0; i < this._values.length; i++) {\n this._index[this._values[i]] = i;\n }\n }\n\n values() {\n return this._values.filter(item => item !== DELETED);\n }\n\n has(value) {\n return this._index[value] !== undefined;\n }\n\n add(value) {\n if (!this.has(value)) {\n this._index[value] = this._values.length;\n this._values.push(value);\n }\n }\n\n delete(value) {\n const index = this._index[value];\n if (index !== undefined) {\n this._values[index] = DELETED;\n delete this._index[value];\n }\n }\n\n clear() {\n this._index = {};\n this._values = [];\n }\n\n get size() {\n return this._values.length;\n }\n}\n\nclass SetWrapper {\n constructor(values) {\n this._set = new Set(values);\n }\n\n values() {\n return Array.from(this._set);\n }\n\n has(value) {\n return this._set.has(value);\n }\n\n add(value) {\n this._set.add(value);\n }\n\n delete(value) {\n this._set.delete(value);\n }\n\n clear() {\n this._set.clear();\n }\n\n get size() {\n return this._set.size;\n }\n}\n\n// TODO: Drop LegacySet when removing support for IE10\nlet supportsSet = () => {\n let supported = false;\n\n if (typeof Set === 'function') {\n const set = new Set([1]);\n supported = set.has(1);\n }\n\n return supported;\n};\n\nexport default function createHashSet(values) {\n if (supportsSet()) {\n return new SetWrapper(values);\n }\n\n return new LegacySet(values);\n}\n","export default function defaultErrorHandler(error) {\n throw error;\n}\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function autoMajorUnit(min, max) {\n let diff = round(max - min, DEFAULT_PRECISION - 1);\n\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n\n diff = Math.abs(max);\n }\n\n const scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n const relativeValue = round((diff / scale), DEFAULT_PRECISION);\n let scaleMultiplier = 1;\n\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\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n}","import { COORD_PRECISION } from '../common/constants';\nimport { Class, rad, round } from '../common';\n\nclass Point extends Class {\n constructor(x, y) {\n super();\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n clone() {\n return new Point(this.x, this.y);\n }\n\n equals(point) {\n return point && this.x === point.x && this.y === point.y;\n }\n\n rotate(center, degrees) {\n const theta = rad(degrees);\n const cosT = Math.cos(theta);\n const sinT = Math.sin(theta);\n const { x: cx, y: cy } = center;\n const { x, y } = this;\n\n this.x = round(\n cx + (x - cx) * cosT + (y - cy) * sinT,\n COORD_PRECISION\n );\n\n this.y = round(\n cy + (y - cy) * cosT - (x - cx) * sinT,\n COORD_PRECISION\n );\n\n return this;\n }\n\n multiply(a) {\n\n this.x *= a;\n this.y *= a;\n\n return this;\n }\n\n distanceTo(point) {\n const dx = this.x - point.x;\n const dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n static onCircle(center, angle, radius) {\n const radians = rad(angle);\n\n return new Point(\n center.x - radius * Math.cos(radians),\n center.y - radius * Math.sin(radians)\n );\n }\n}\n\n\nexport default Point;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport Point from './point';\n\nimport { X, Y, TOP, BOTTOM, LEFT, RIGHT, CENTER, WIDTH, HEIGHT } from '../common/constants';\nimport { Class, defined, getSpacing, inArray, isArray, rad } from '../common';\n\nclass Box extends Class {\n constructor(x1, y1, x2, y2) {\n super();\n\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n }\n\n equals(box) {\n return this.x1 === box.x1 && this.x2 === box.x2 &&\n this.y1 === box.y1 && this.y2 === box.y2;\n }\n\n width() {\n return this.x2 - this.x1;\n }\n\n height() {\n return this.y2 - this.y1;\n }\n\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n\n return this;\n }\n\n move(x, y) {\n const height = this.height();\n const width = this.width();\n\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n\n return this;\n }\n\n wrap(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\n return this;\n }\n\n wrapPoint(point) {\n const arrayPoint = isArray(point);\n const x = arrayPoint ? point[0] : point.x;\n const y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n\n return this;\n }\n\n snapTo(targetBox, axis) {\n\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n\n return this;\n }\n\n alignTo(targetBox, anchor) {\n const height = this.height();\n const width = this.width();\n const axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n const offset = axis === Y ? height : width;\n\n if (anchor === CENTER) {\n const targetCenter = targetBox.center();\n const center = this.center();\n\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\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n }\n\n shrink(dw, dh) {\n\n this.x2 -= dw;\n this.y2 -= dh;\n\n return this;\n }\n\n expand(dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n }\n\n pad(padding) {\n const spacing = getSpacing(padding);\n\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n\n return this;\n }\n\n unpad(padding) {\n const spacing = getSpacing(padding);\n\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n\n return this.pad(spacing);\n }\n\n clone() {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n }\n\n center() {\n return new Point(\n this.x1 + this.width() / 2,\n this.y1 + this.height() / 2\n );\n }\n\n containsPoint(point) {\n\n return point.x >= this.x1 && point.x <= this.x2 &&\n point.y >= this.y1 && point.y <= this.y2;\n }\n\n points() {\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\n getHash() {\n return [ this.x1, this.y1, this.x2, this.y2 ].join(\",\");\n }\n\n overlaps(box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n }\n\n rotate(rotation) {\n let width = this.width();\n let height = this.height();\n const { x: cx, y: cy } = this.center();\n\n const r1 = rotatePoint(0, 0, cx, cy, rotation);\n const r2 = rotatePoint(width, 0, cx, cy, rotation);\n const r3 = rotatePoint(width, height, cx, cy, rotation);\n const r4 = rotatePoint(0, height, cx, cy, rotation);\n\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\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n }\n\n toRect() {\n return new geom.Rect([ this.x1, this.y1 ], [ this.width(), this.height() ]);\n }\n\n hasSize() {\n return this.width() !== 0 && this.height() !== 0;\n }\n\n align(targetBox, axis, alignment) {\n const c1 = axis + 1;\n const c2 = axis + 2;\n const sizeFunc = axis === X ? WIDTH : HEIGHT;\n const size = this[sizeFunc]();\n\n if (inArray(alignment, [ LEFT, TOP ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [ RIGHT, BOTTOM ])) {\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\nfunction rotatePoint(x, y, cx, cy, angle) {\n const theta = rad(angle);\n\n return new Point(\n cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta),\n cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta)\n );\n}\n\nexport default Box;\n","import Box from './box';\nimport Point from './point';\nimport { COORD_PRECISION, MAX_VALUE, MIN_VALUE } from '../common/constants';\nimport { Class, clockwise, rad, round } from '../common';\n\nclass Ring extends Class {\n\n constructor(center, innerRadius, radius, startAngle, angle) {\n super();\n\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n }\n\n clone() {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n }\n\n middle() {\n return this.startAngle + this.angle / 2;\n }\n\n setRadius(newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n\n return this;\n }\n\n // TODO: Remove and replace with Point.onCircle\n point(angle, innerRadius) {\n const radianAngle = rad(angle);\n const ax = Math.cos(radianAngle);\n const ay = Math.sin(radianAngle);\n const radius = innerRadius ? this.innerRadius : this.radius;\n const x = round(this.center.x - (ax * radius), COORD_PRECISION);\n const y = round(this.center.y - (ay * radius), COORD_PRECISION);\n\n return new Point(x, y);\n }\n\n adjacentBox(distance, width, height) {\n const sector = this.clone().expand(distance);\n const midAndle = sector.middle();\n const midPoint = sector.point(midAndle);\n const hw = width / 2;\n const hh = height / 2;\n const sa = Math.sin(rad(midAndle));\n const ca = Math.cos(rad(midAndle));\n let x = midPoint.x - hw;\n let y = midPoint.y - hh;\n\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n\n return new Box(x, y, x + width, y + height);\n }\n\n containsPoint(p) {\n const center = this.center;\n const innerRadius = this.innerRadius;\n const radius = this.radius;\n const startAngle = this.startAngle;\n const endAngle = this.startAngle + this.angle;\n const dx = p.x - center.x;\n const dy = p.y - center.y;\n const vector = new Point(dx, dy);\n const startPoint = this.point(startAngle);\n const startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n const endPoint = this.point(endAngle);\n const endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n const dist = round(dx * dx + dy * dy, COORD_PRECISION);\n\n return (startVector.equals(vector) || clockwise(startVector, vector)) &&\n !clockwise(endVector, vector) &&\n dist >= innerRadius * innerRadius && dist <= radius * radius;\n }\n\n getBBox() {\n const box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n const startAngle = round(this.startAngle % 360);\n const endAngle = round((startAngle + this.angle) % 360);\n const innerRadius = this.innerRadius;\n const allAngles = [ 0, 90, 180, 270, startAngle, endAngle ].sort(numericComparer);\n const startAngleIndex = allAngles.indexOf(startAngle);\n const endAngleIndex = allAngles.indexOf(endAngle);\n let angles;\n\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(\n allAngles.slice(0, endAngleIndex + 1),\n allAngles.slice(startAngleIndex, allAngles.length)\n );\n }\n }\n\n for (let i = 0; i < angles.length; i++) {\n let point = this.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n\n return box;\n }\n\n expand(value) {\n this.radius += value;\n return this;\n }\n}\n\nfunction numericComparer(a, b) {\n return a - b;\n}\n\nexport default Ring;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\nimport { Class } from '../common';\n\nconst DIRECTION_ANGLE = 0.001; //any value that will make the endAngle bigger than the start angle will work here.\n\nclass ShapeBuilder extends Class {\n createRing(sector, options) {\n const startAngle = sector.startAngle + 180;\n let endAngle = sector.angle + startAngle;\n\n //required in order to avoid reversing the arc direction in cases like 0.000000000000001 + 100 === 100\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\n\n const center = new geom.Point(sector.center.x, sector.center.y);\n const radius = Math.max(sector.radius, 0);\n const innerRadius = Math.max(sector.innerRadius, 0);\n const arc = new geom.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n const path = draw.Path.fromArc(arc, options).close();\n\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n const 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\n return path;\n }\n}\n\nShapeBuilder.current = new ShapeBuilder();\n\nexport default ShapeBuilder;","export function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n}\n\nexport function linear(position) {\n return position;\n}\n\nexport function easeOutElastic(position, time, start, diff) {\n let s = 1.70158,\n p = 0,\n a = diff;\n\n if (position === 0) {\n return start;\n }\n\n if (position === 1) {\n return start + diff;\n }\n\n if (!p) {\n p = 0.5;\n }\n\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n\n return a * Math.pow(2, -10 * position) *\n Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n}\n","let animationFrameProxy = (callback) => {\n const wnd = typeof window !== \"undefined\" ? window : {};\n const animationFrame = wnd.requestAnimationFrame ||\n wnd.webkitRequestAnimationFrame ||\n wnd.mozRequestAnimationFrame ||\n wnd.oRequestAnimationFrame ||\n wnd.msRequestAnimationFrame ||\n function(callback) { setTimeout(callback, 1000 / 60); };\n\n animationFrameProxy = callback => animationFrame.call(wnd, callback);\n animationFrameProxy(callback);\n};\n\nexport default animationFrameProxy;\n","import { Class } from '../common';\n\nlet instance;\n\nclass AnimationFactory extends Class {\n static get current() {\n if (!instance) {\n instance = new AnimationFactory();\n }\n\n return instance;\n }\n\n constructor() {\n super();\n\n this._items = [];\n }\n\n register(name, type) {\n this._items.push({\n name: name,\n type: type\n });\n }\n\n create(element, options) {\n const items = this._items;\n let match;\n\n if (options && options.type) {\n const type = options.type.toLowerCase();\n for (let i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n\n if (match) {\n return new match.type(element, options);\n }\n }\n}\n\nexport default AnimationFactory;\n","import * as easingFunctions from './easing-functions';\nimport { limitValue, now } from '../util';\nimport { animationFrame, Class } from '../common';\nimport AnimationFactory from './animation-factory';\n\nclass Animation extends Class {\n static create(type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n }\n\n get options() {\n return this._options || {\n duration: 500,\n easing: \"swing\"\n };\n }\n\n set options(value) {\n this._options = value;\n }\n\n constructor(element, options) {\n super();\n\n this.options = Object.assign({}, this.options, options);\n this.element = element;\n }\n\n setup() {}\n step() {}\n\n play() {\n const options = this.options;\n const { duration, delay = 0 } = options;\n const easing = easingFunctions[options.easing];\n const start = now() + delay;\n const finish = start + duration;\n\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(() => {\n const loop = () => {\n if (this._stopped) {\n return;\n }\n\n const wallTime = now();\n\n const time = limitValue(wallTime - start, 0, duration);\n const position = time / duration;\n const easingPosition = easing(position, time, 0, 1, duration);\n\n this.step(easingPosition);\n\n if (wallTime < finish) {\n animationFrame(loop);\n } else {\n this.abort();\n }\n };\n\n loop();\n }, delay);\n }\n }\n\n abort() {\n this._stopped = true;\n }\n\n destroy() {\n this.abort();\n }\n}\n\nexport default Animation;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { WHITE } from '../common/constants';\nimport { Class, deepExtend, defined, valueOrDefault } from '../common';\n\nclass ChartElement extends Class {\n constructor(options) {\n super();\n\n this.children = [];\n\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n }\n\n initUserOptions(options) {\n return options;\n }\n\n reflow(targetBox) {\n const children = this.children;\n let box;\n\n for (let i = 0; i < children.length; i++) {\n let currentChild = children[i];\n currentChild.reflow(targetBox);\n\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n\n this.box = box || targetBox;\n }\n\n destroy() {\n const children = this.children;\n\n if (this.animation) {\n this.animation.destroy();\n }\n\n for (let i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n }\n\n getRoot() {\n const parent = this.parent;\n\n return parent ? parent.getRoot() : null;\n }\n\n getSender() {\n const service = this.getService();\n if (service) {\n return service.sender;\n }\n }\n\n getService() {\n let element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n }\n\n translateChildren(dx, dy) {\n const children = this.children;\n const childrenCount = children.length;\n\n for (let i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n }\n\n append() {\n for (let i = 0; i < arguments.length; i++) {\n let item = arguments[i];\n this.children.push(item);\n item.parent = this;\n }\n }\n\n renderVisual() {\n if (this.options.visible === false) {\n return;\n }\n\n this.createVisual();\n\n this.addVisual();\n\n this.renderChildren();\n\n this.createAnimation();\n this.renderComplete();\n }\n\n addVisual() {\n if (this.visual) {\n this.visual.chartElement = this;\n\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n }\n\n renderChildren() {\n const children = this.children;\n const length = children.length;\n for (let i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n }\n\n createVisual() {\n this.visual = new draw.Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n }\n\n createAnimation() {\n if (this.visual && this.options.animation) {\n this.animation = draw.Animation.create(\n this.visual, this.options.animation\n );\n }\n }\n\n appendVisual(childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\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 // Allow chart elements without visuals to\n // pass through child visuals\n this.parent.appendVisual(childVisual);\n }\n }\n\n clipRoot() {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n\n return this;\n }\n\n stackRoot() {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n\n return this;\n }\n\n stackVisual(childVisual) {\n const zIndex = childVisual.options.zIndex || 0;\n const visuals = this.visual.children;\n const length = visuals.length;\n let pos;\n\n for (pos = 0; pos < length; pos++) {\n let sibling = visuals[pos];\n let here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n\n this.visual.insert(pos, childVisual);\n }\n\n traverse(callback) {\n const children = this.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++) {\n let child = children[i];\n\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n }\n\n closest(match) {\n let element = this;\n let matched = false;\n\n while (element && !matched) {\n matched = match(element);\n\n if (!matched) {\n element = element.parent;\n }\n }\n\n if (matched) {\n return element;\n }\n }\n\n renderComplete() {}\n\n hasHighlight() {\n const options = (this.options || {}).highlight;\n return !(!this.createHighlight || (options && options.visible === false));\n }\n\n toggleHighlight(show, opacity) {\n const options = (this.options || {}).highlight || {};\n const customVisual = options.visual;\n let highlight = this._highlight;\n\n if (!highlight) {\n const 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\n if (customVisual) {\n highlight = this._highlight = customVisual(\n Object.assign(this.highlightVisualArgs(), {\n createVisual: () => this.createHighlight(highlightOptions),\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 ));\n\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n\n this.appendVisual(highlight);\n }\n\n highlight.visible(show);\n }\n\n createGradientOverlay(element, options, gradientOptions) {\n const overlay = new draw.Path(Object.assign({\n stroke: {\n color: \"none\"\n },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n\n overlay.segments.elements(element.segments.elements());\n\n return overlay;\n }\n\n createGradient(options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n\n supportsPointInactiveOpacity() {\n return true;\n }\n}\n\nChartElement.prototype.options = { };\n\nexport default ChartElement;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport Box from './box';\n\nimport { BLACK, LEFT, TOP, X, Y } from '../common/constants';\nimport { getSpacing, setDefaultOptions, valueOrDefault } from '../common';\n\nclass BoxElement extends ChartElement {\n constructor(options) {\n super(options);\n\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n }\n\n reflow(targetBox) {\n const options = this.options;\n const { width, height, shrinkToFit } = options;\n const hasSetSize = width && height;\n const margin = options.margin;\n const padding = options.padding;\n const borderWidth = options.border.width;\n let box;\n\n const reflowPaddingBox = () => {\n this.align(targetBox, X, options.align);\n this.align(targetBox, Y, options.vAlign);\n this.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n\n let contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n\n super.reflow(contentBox);\n\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\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\n this.translateChildren(\n box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\n box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top\n );\n\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n let item = children[i];\n item.reflow(item.box);\n }\n }\n\n align(targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n }\n\n hasBox() {\n const options = this.options;\n return options.border.width || options.background;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(draw.Path.fromRect(\n this.paddingBox.toRect(),\n this.visualStyle()\n ));\n }\n }\n\n visualStyle() {\n const options = this.options;\n const border = options.border || {};\n\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\nsetDefaultOptions(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\nexport default BoxElement;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\nimport { round, setDefaultOptions } from '../common';\nimport { CENTER, CIRCLE, COORD_PRECISION, CROSS, ROUNDED_RECT, TRIANGLE } from '../common/constants';\nimport { valueOrDefault } from '../drawing-utils';\nimport BoxElement from './box-element';\n\nclass ShapeElement extends BoxElement {\n\n constructor(options, pointData) {\n super(options);\n\n this.pointData = pointData;\n }\n\n getElement() {\n const { options, paddingBox: box } = this;\n const { type, rotation } = options;\n const center = box.center();\n const halfWidth = box.width() / 2;\n const halfHeight = box.height() / 2;\n\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n\n const style = this.visualStyle();\n let element;\n\n if (type === CIRCLE) {\n element = new draw.Circle(\n new geom.Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)),\n style\n );\n } else if (type === TRIANGLE) {\n element = draw.Path.fromPoints([\n [ box.x1 + halfWidth, box.y1 ],\n [ box.x1, box.y2 ],\n [ box.x2, box.y2 ]\n ], style).close();\n } else if (type === CROSS) {\n element = new draw.MultiPath(style);\n\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 const rect = box.toRect();\n if (type === ROUNDED_RECT) {\n const borderRadius = valueOrDefault(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n\n element = draw.Path.fromRect(rect, style);\n }\n\n if (rotation) {\n element.transform(geom.transform()\n .rotate(-rotation, [ center.x, center.y ])\n );\n }\n\n element.options.zIndex = options.zIndex;\n\n return element;\n }\n\n createElement() {\n const customVisual = this.options.visual;\n const pointData = this.pointData || {};\n let visual;\n\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: () => this.getElement()\n });\n } else {\n visual = this.getElement();\n }\n\n return visual;\n }\n\n visualOptions() {\n const 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\n createVisual() {\n this.visual = this.createElement();\n }\n}\n\nsetDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n});\n\nexport default ShapeElement;\n","import { WHITE } from '../common/constants';\n\nconst LINEAR = \"linear\";\nconst RADIAL = \"radial\";\n\nconst GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 1,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n }, {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n } ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n }, {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n } ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n }, {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n }, {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [ 0.5, 0.5 ],\n radius: 0.5\n }\n};\n\nexport default GRADIENTS;","import Box from '../box';\nimport { grep } from '../../common';\n\nexport default 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\n const a = Math.min(r.x1, s.x1);\n const b = Math.max(r.x1, s.x1);\n const c = Math.min(r.x2, s.x2);\n const d = Math.max(r.x2, s.x2);\n const e = Math.min(r.y1, s.y1);\n const f = Math.max(r.y1, s.y1);\n const g = Math.min(r.y2, s.y2);\n const h = Math.max(r.y2, s.y2);\n const boxes = [];\n\n // X = intersection, 0-7 = possible difference areas\n // h +-+-+-+\n // . |5|6|7|\n // g +-+-+-+\n // . |3|X|4|\n // f +-+-+-+\n // . |0|1|2|\n // e +-+-+-+\n // . a b c d\n\n // we'll always have rectangles 1, 3, 4 and 6\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\n // decide which corners\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) { // corners 0 and 7\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else { // corners 2 and 5\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n\n return grep(boxes, function(box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n}","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport GRADIENTS from './gradients';\nimport Box from './box';\n\nimport boxDiff from './utils/box-diff';\n\nimport { DEFAULT_WIDTH, DEFAULT_HEIGHT, WHITE, BLACK } from '../common/constants';\nimport { getSpacing, objectKey, setDefaultOptions } from '../common';\n\nclass RootElement extends ChartElement {\n constructor(options) {\n super(options);\n\n const rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n\n this.gradients = {};\n }\n\n reflow() {\n const { options, children } = this;\n let currentBox = new Box(0, 0, options.width, options.height);\n\n this.box = currentBox.unpad(options.margin);\n\n for (let i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n }\n\n createVisual() {\n this.visual = new draw.Group();\n this.createBackground();\n }\n\n createBackground() {\n const options = this.options;\n const border = options.border || {};\n const box = this.box.clone().pad(options.margin).unpad(border.width);\n\n const background = draw.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\n this.visual.append(background);\n }\n\n getRoot() {\n return this;\n }\n\n createGradient(options) {\n const gradients = this.gradients;\n const hashCode = objectKey(options);\n const gradient = GRADIENTS[options.gradient];\n let drawingGradient;\n\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n const gradientOptions = Object.assign({}, gradient, options);\n if (gradient.type === \"linear\") {\n drawingGradient = new draw.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new draw.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n\n return drawingGradient;\n }\n\n cleanGradients() {\n const gradients = this.gradients;\n for (let hashCode in gradients) {\n gradients[hashCode]._observers = [];//add clear observers method in drawing ObserversMixin\n }\n }\n\n size() {\n const options = this.options;\n return new Box(0, 0, options.width, options.height);\n }\n}\n\nsetDefaultOptions(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\nfunction innerRadialStops(options) {\n const stops = options.stops;\n const usedSpace = ((options.innerRadius / options.radius) * 100);\n const length = stops.length;\n const currentStops = [];\n\n for (let i = 0; i < length; i++) {\n let currentStop = Object.assign({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n\n return currentStops;\n}\n\nexport default RootElement;","import ChartElement from './chart-element';\nimport Box from './box';\n\nimport { X, Y, WIDTH, HEIGHT, RIGHT, BOTTOM, CENTER } from '../common/constants';\nimport { round, setDefaultOptions } from '../common';\n\nclass FloatElement extends ChartElement {\n constructor(options) {\n super(options);\n this._initDirection();\n }\n\n _initDirection() {\n const 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\n reflow(targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n }\n\n reflowChildren() {\n const { box, elementAxis, groupAxis, elementSizeField, groupSizeField } = this;\n const { groups, groupsSize, maxGroupElementsSize } = this.groupOptions();\n const groupsCount = groups.length;\n const groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n\n if (groupsCount) {\n let groupStart = groupsStart;\n\n for (let groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n let group = groups[groupIdx];\n let groupElements = group.groupElements;\n let elementStart = box[elementAxis + 1];\n let groupElementsCount = groupElements.length;\n\n for (let idx = 0; idx < groupElementsCount; idx++) {\n let element = groupElements[idx];\n let elementSize = this.elementSize(element);\n let groupElementStart = groupStart + this.alignStart(elementSize[groupSizeField], group.groupSize);\n\n let elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize[elementSizeField];\n\n element.reflow(elementBox);\n\n elementStart += elementSize[elementSizeField] + this.elementSpacing;\n }\n groupStart += group.groupSize + this.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n }\n\n alignStart(size, maxSize) {\n let start = 0;\n const 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\n groupOptions() {\n const { box, children, elementSizeField, groupSizeField, elementSpacing, groupSpacing } = this;\n const maxSize = round(box[elementSizeField]());\n const childrenCount = children.length;\n const groups = [];\n\n let groupSize = 0;\n let groupElementsSize = 0;\n let groupsSize = 0;\n let maxGroupElementsSize = 0;\n let groupElements = [];\n\n for (let idx = 0; idx < childrenCount; idx++) {\n let element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n\n let elementSize = this.elementSize(element);\n if (this.options.wrap && round(groupElementsSize + elementSpacing + elementSize[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[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize[elementSizeField];\n groupElements.push(element);\n }\n\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n }\n\n elementSize(element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n }\n\n createVisual() {}\n}\n\nsetDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n});\n\nexport default FloatElement;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport Box from './box';\n\nimport { DEFAULT_FONT, BLACK } from '../common/constants';\nimport { setDefaultOptions } from '../common';\n\nconst DrawingText = draw.Text;\n\nclass Text extends ChartElement {\n\n constructor(content, options) {\n super(options);\n\n this.content = content;\n\n // Calculate size\n this.reflow(new Box());\n }\n\n reflow(targetBox) {\n const options = this.options;\n const size = options.size = draw.util.measureText(this.content, { font: options.font });\n\n this.baseline = size.baseline;\n\n this.box = new Box(targetBox.x1, targetBox.y1,\n targetBox.x1 + size.width, targetBox.y1 + size.height);\n }\n\n createVisual() {\n const { font, color, opacity, cursor } = this.options;\n\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: { color: color, opacity: opacity },\n cursor: cursor\n });\n }\n}\n\nsetDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n});\n\nexport default Text;\n","import Box from '../box';\n\nexport default function rectToBox(rect) {\n const origin = rect.origin;\n const bottomRight = rect.bottomRight();\n\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n}","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport BoxElement from './box-element';\nimport FloatElement from './float-element';\nimport Text from './text';\nimport Box from './box';\n\nimport rectToBox from './utils/rect-to-box';\n\nimport { getSpacing, deepExtend, defined } from '../common';\nimport { X, Y } from '../common/constants';\n\nconst ROWS_SPLIT_REGEX = /\\n/m;\n\nclass TextBox extends BoxElement {\n\n constructor(content, options, data) {\n super(options);\n this.content = content;\n this.data = data;\n\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n }\n\n _initContainer() {\n const options = this.options;\n const rows = String(this.content).split(ROWS_SPLIT_REGEX);\n const floatElement = new FloatElement({ vertical: true, align: options.align, wrap: false });\n const textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\n\n this.container = floatElement;\n this.append(floatElement);\n\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n let text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n }\n\n reflow(targetBox) {\n const options = this.options;\n const visualFn = options.visual;\n this.container.options.align = options.align;\n\n if (visualFn && !this._boxReflow) {\n let visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n const visual = this.visual = visualFn(this.visualContext(visualBox));\n\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new geom.Rect());\n\n visual.options.zIndex = options.zIndex;\n }\n\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n super.reflow(targetBox);\n\n if (options.rotation) {\n const margin = getSpacing(options.margin);\n let box = this.box.unpad(margin);\n\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n\n this.rotatedBox = box.clone();\n\n box.pad(margin);\n }\n }\n }\n\n createVisual() {\n const options = this.options;\n\n this.visual = new draw.Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n\n if (this.hasBox()) {\n const box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n }\n\n renderVisual() {\n if (!this.options.visible) {\n return;\n }\n\n if (this.options.visual) {\n const 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 super.renderVisual();\n }\n }\n\n visualContext(targetBox) {\n const context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\n createVisual: () => {\n this._boxReflow = true;\n this.reflow(targetBox);\n this._boxReflow = false;\n return this.getDefaultVisual();\n }\n };\n if (this.data) {\n Object.assign(context, this.data);\n }\n\n return context;\n }\n\n getDefaultVisual() {\n this.createVisual();\n this.renderChildren();\n const visual = this.visual;\n delete this.visual;\n return visual;\n }\n\n rotate() {\n const 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\n rotationTransform() {\n const rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n\n const { x: cx, y: cy } = this.normalBox.center();\n const boxCenter = this.rotatedBox.center();\n\n return geom.transform()\n .translate(boxCenter.x - cx, boxCenter.y - cy)\n .rotate(rotation, [ cx, cy ]);\n }\n}\n\nexport default TextBox;","import ChartElement from './chart-element';\nimport TextBox from './text-box';\n\nimport { X, BLACK, TOP, CENTER } from '../common/constants';\nimport { getSpacing, setDefaultOptions } from '../common';\n\nclass Title extends ChartElement {\n constructor(options) {\n super(options);\n\n this.append(\n new TextBox(this.options.text, Object.assign({}, this.options, {\n vAlign: this.options.position\n }))\n );\n }\n\n reflow(targetBox) {\n super.reflow(targetBox);\n this.box.snapTo(targetBox, X);\n }\n\n static buildTitle(options, parent, defaultOptions) {\n let titleOptions = options;\n\n if (typeof options === \"string\") {\n titleOptions = { text: options };\n }\n\n titleOptions = Object.assign({ visible: true }, defaultOptions, titleOptions);\n\n let title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n\n return title;\n }\n}\n\nsetDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n});\n\nexport default Title;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport TextBox from './text-box';\nimport Box from './box';\n\nimport rectToBox from './utils/rect-to-box';\n\nimport { AXIS_LABEL_CLICK, CENTER, TOP, BOTTOM, LEFT, DEFAULT_PRECISION, X, Y } from '../common/constants';\n\nimport { eventElement, round, setDefaultOptions } from '../common';\n\nclass AxisLabel extends TextBox {\n constructor(value, text, index, dataItem, options) {\n super(text, options);\n\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n }\n\n visualContext(targetBox) {\n const context = super.visualContext(targetBox);\n\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n\n return context;\n }\n\n click(widget, e) {\n\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\n rotate() {\n if (this.options.alignRotation !== CENTER) {\n const box = this.normalBox.toRect();\n const transform = this.rotationTransform();\n\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n super.rotate();\n }\n\n return this.box;\n }\n\n rotationTransform() {\n const options = this.options;\n const rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n\n if (options.alignRotation === CENTER) {\n return super.rotationTransform();\n }\n\n const rotationMatrix = geom.transform().rotate(rotation).matrix();\n const box = this.normalBox.toRect();\n const rect = this.targetBox.toRect();\n\n const rotationOrigin = options.rotationOrigin || TOP;\n const alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n const distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n const axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n\n const topLeft = box.topLeft().transformCopy(rotationMatrix);\n const topRight = box.topRight().transformCopy(rotationMatrix);\n const bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n const bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n const rotatedBox = geom.Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n\n const translate = {\n [distanceAxis]: rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis]\n };\n\n const distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n const distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n\n let alignStart, alignEnd;\n\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\n const alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n\n return geom.transform()\n .translate(translate.x, translate.y)\n .rotate(rotation);\n }\n}\n\nsetDefaultOptions(AxisLabel, {\n _autoReflow: false\n});\n\nexport default AxisLabel;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport BoxElement from './box-element';\nimport TextBox from './text-box';\nimport ShapeElement from './shape-element';\nimport Box from './box';\n\nimport { CIRCLE, TOP, BOTTOM, LEFT, RIGHT, CENTER, INSIDE, OUTSIDE, NOTE_CLICK, NOTE_HOVER, NOTE_LEAVE } from '../common/constants';\nimport { alignPathToPixel, defined, deepExtend, eventElement, getTemplate, inArray, setDefaultOptions } from '../common';\n\nconst DEFAULT_ICON_SIZE = 7;\nconst DEFAULT_LABEL_COLOR = \"#fff\";\n\nclass Note extends BoxElement {\n constructor(fields, options, chartService) {\n super(options);\n\n this.fields = fields;\n this.chartService = chartService;\n\n this.render();\n }\n\n hide() {\n this.options.visible = false;\n }\n\n show() {\n this.options.visible = true;\n }\n\n render() {\n const options = this.options;\n\n if (options.visible) {\n const { label, icon } = options;\n const box = new Box();\n const childAlias = () => this;\n let size = icon.size;\n let text = this.fields.text;\n let width, height;\n\n if (defined(label) && label.visible) {\n const 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\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n\n this.label = new TextBox(text, deepExtend({}, label));\n this.label.aliasFor = childAlias;\n\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\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n\n const marker = new ShapeElement(deepExtend({}, icon));\n marker.aliasFor = childAlias;\n\n this.marker = marker;\n this.append(marker);\n\n if (this.label) {\n this.append(this.label);\n }\n\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n }\n\n reflow(targetBox) {\n const { options, label, marker, wrapperBox } = this;\n const center = targetBox.center();\n const length = options.line.length;\n const position = options.position;\n\n // TODO: Review\n if (options.visible) {\n let lineStart, box, contentBox;\n\n if (inArray(position, [ LEFT, RIGHT ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n\n if (options.line.visible) {\n lineStart = [ targetBox.x1, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x2, center.y ]\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\n if (options.line.visible) {\n lineStart = [ targetBox.x2, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x1, center.y ]\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\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y2 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y1 ]\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\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y1 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y2 ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n\n if (marker) {\n marker.reflow(contentBox);\n }\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\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n }\n\n createVisual() {\n super.createVisual();\n this.visual.options.noclip = this.options.noclip;\n\n if (this.options.visible) {\n this.createLine();\n }\n }\n\n renderVisual() {\n const options = this.options;\n const customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual(Object.assign(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: () => {\n this.createVisual();\n this.renderChildren();\n const defaultVisual = this.visual;\n delete this.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n super.renderVisual();\n }\n }\n\n createLine() {\n const options = this.options.line;\n\n if (this.linePoints) {\n const path = draw.Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n\n alignPathToPixel(path);\n this.visual.append(path);\n }\n }\n\n click(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n }\n\n over(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n }\n\n out(widget, e) {\n const args = this.eventArgs(e);\n\n widget.trigger(NOTE_LEAVE, args);\n }\n\n eventArgs(e) {\n const options = this.options;\n\n return Object.assign(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : \"\",\n visual: this.visual\n });\n }\n}\n\nsetDefaultOptions(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: {\n visible: true\n },\n visible: true,\n position: TOP,\n zIndex: 2\n});\n\nexport default Note;","const defaultImplementation = {\n format: (format, value) => value,\n\n toString: (value) => value,\n\n parseDate: (value) => new Date(value),\n\n firstDay: () => 0\n};\n\nlet current = defaultImplementation;\n\nclass IntlService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static get implementation() {\n return current;\n }\n}\n\nexport default IntlService;\n","import IntlService from './intl-service';\nimport { FORMAT_REGEX } from '../common/constants';\nimport { isString } from '../common';\n\nconst FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n\nclass FormatService {\n constructor(intlService) {\n this._intlService = intlService;\n }\n\n get intl() {\n return this._intlService || IntlService.implementation;\n }\n\n set intl(value) {\n this._intlService = value;\n }\n\n auto(formatString, ...values) {\n const intl = this.intl;\n\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format(formatString, ...values);\n }\n\n return intl.toString(values[0], formatString);\n }\n\n localeAuto(formatString, values, locale) {\n const intl = this.intl;\n let result;\n\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function(match, index, placeholderFormat) {\n let value = values[parseInt(index, 10)];\n\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\", locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n\n return result;\n }\n}\n\nexport default FormatService;","import IntlService from './intl-service';\nimport FormatService from './format-service';\n\nclass ChartService {\n constructor(chart, context = {}) {\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\n get intl() {\n return this._intlService || IntlService.implementation;\n }\n\n set intl(value) {\n this._intlService = value;\n this.format.intl = value;\n }\n\n notify(name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n }\n\n isPannable(axis) {\n const pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n}\n\nexport default ChartService;","let current;\n\nclass DomEventsBuilder {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static create(element, events) {\n if (current) {\n return current.create(element, events);\n }\n }\n}\n\nexport default DomEventsBuilder;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { alignPathToPixel } from '../../common';\n\nexport default function createAxisTick(options, tickOptions) {\n const { tickX, tickY, position } = options;\n\n const tick = new draw.Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n\n if (options.vertical) {\n tick.moveTo(tickX, position)\n .lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY)\n .lineTo(position, tickY + tickOptions.size);\n }\n\n alignPathToPixel(tick);\n\n return tick;\n}\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { alignPathToPixel } from '../../common';\n\nexport default function createAxisGridLine(options, gridLine) {\n const { lineStart, lineEnd, position } = options;\n\n const line = new draw.Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n\n if (options.vertical) {\n line.moveTo(lineStart, position)\n .lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart)\n .lineTo(position, lineEnd);\n }\n\n alignPathToPixel(line);\n\n return line;\n}","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport TextBox from './text-box';\nimport AxisLabel from './axis-label';\nimport Note from './note';\nimport Box from './box';\nimport { ChartService } from '../services';\n\nimport createAxisTick from './utils/create-axis-tick';\nimport createAxisGridLine from './utils/create-axis-grid-line';\n\nimport { NONE, BLACK, CENTER, TOP, BOTTOM, LEFT, RIGHT, OUTSIDE, X, Y, WIDTH, HEIGHT } from '../common/constants';\nimport { alignPathToPixel, deepExtend, getTemplate, grep, defined, isObject, inArray, limitValue, round, setDefaultOptions } from '../common';\n\nclass Axis extends ChartElement {\n constructor(options, chartService = new ChartService()) {\n super(options);\n\n this.chartService = chartService;\n\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: {\n visible: false\n },\n line: {\n visible: false\n },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\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\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\n this.initFields();\n\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n\n this.createTitle();\n this.createNotes();\n }\n\n initFields() {\n }\n\n // abstract labelsCount(): Number\n // abstract createAxisLabel(index, options): AxisLabel\n\n labelsRange() {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n }\n\n normalizeLabelRotation(labelOptions) {\n const rotation = labelOptions.rotation;\n\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n }\n\n createLabels() {\n const options = this.options;\n const align = options.vertical ? RIGHT : CENTER;\n const labelOptions = deepExtend({ }, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n const step = Math.max(1, labelOptions.step);\n\n this.clearLabels();\n\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n\n const range = this.labelsRange();\n for (let idx = range.min; idx < range.max; idx += step) {\n const labelContext = { index: idx, count: range.max };\n let label = this.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this.append(label);\n this.labels.push(label);\n }\n }\n }\n }\n\n clearLabels() {\n this.children = grep(this.children, child => !(child instanceof AxisLabel));\n this.labels = [];\n }\n\n clearTitle() {\n if (this.title) {\n this.children = grep(this.children, child => child !== this.title);\n this.title = undefined;\n }\n }\n\n clear() {\n this.clearLabels();\n this.clearTitle();\n }\n\n lineBox() {\n const { options, box } = this;\n const vertical = options.vertical;\n const mirror = options.labels.mirror;\n const axisX = mirror ? box.x1 : box.x2;\n const axisY = mirror ? box.y2 : box.y1;\n const lineWidth = options.line.width || 0;\n\n return vertical ?\n new Box(axisX, box.y1, axisX, box.y2 - lineWidth) :\n new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n }\n\n createTitle() {\n const options = this.options;\n const titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: \"\",\n zIndex: 1,\n visualSize: true\n }, options.title);\n\n if (titleOptions.visible && titleOptions.text) {\n const title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n }\n\n createNotes() {\n const options = this.options;\n const notes = options.notes;\n const items = notes.data || [];\n\n this.notes = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = deepExtend({}, notes, items[i]);\n item.value = this.parseNoteValue(item.value);\n\n const note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this.chartService);\n\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [ LEFT, RIGHT ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [ TOP, BOTTOM ])) {\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.append(note);\n this.notes.push(note);\n }\n }\n }\n\n parseNoteValue(value) {\n return value;\n }\n\n renderVisual() {\n super.renderVisual();\n\n this.createPlotBands();\n }\n\n createVisual() {\n super.createVisual();\n\n this.createBackground();\n this.createLine();\n }\n\n gridLinesVisual() {\n let gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new draw.Group({\n zIndex: -2\n });\n this.appendVisual(this._gridLines);\n }\n\n return gridLines;\n }\n\n createTicks(lineGroup) {\n const options = this.options;\n const lineBox = this.lineBox();\n const mirror = options.labels.mirror;\n const majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n const tickLineOptions = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: options.vertical\n };\n\n function render(tickPositions, tickOptions, skipUnit) {\n const count = tickPositions.length;\n const step = Math.max(1, tickOptions.step);\n\n if (tickOptions.visible) {\n for (let i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && (i % skipUnit === 0)) {\n continue;\n }\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\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n }\n\n createLine() {\n const options = this.options;\n const line = options.line;\n const lineBox = this.lineBox();\n\n if (line.width > 0 && line.visible) {\n const path = new draw.Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n\n /* TODO\n zIndex: line.zIndex,\n */\n });\n\n path.moveTo(lineBox.x1, lineBox.y1)\n .lineTo(lineBox.x2, lineBox.y2);\n\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n\n const group = this._lineGroup = new draw.Group();\n group.append(path);\n\n this.visual.append(group);\n this.createTicks(group);\n }\n }\n\n getActualTickSize() {\n const options = this.options;\n let tickSize = 0;\n\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\n return tickSize;\n }\n\n createBackground() {\n const { options, box } = this;\n const background = options.background;\n\n if (background) {\n this._backgroundPath = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: background\n },\n stroke: null\n });\n\n this.visual.append(this._backgroundPath);\n }\n }\n\n createPlotBands() {\n const options = this.options;\n const plotBands = options.plotBands || [];\n const vertical = options.vertical;\n const plotArea = this.plotArea;\n\n if (plotBands.length === 0) {\n return;\n }\n\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n const altAxis = grep(this.pane.axes, axis => axis.options.vertical !== this.options.vertical)[0];\n\n for (let idx = 0; idx < plotBands.length; idx++) {\n let item = plotBands[idx];\n let slotX, slotY;\n let labelOptions = item.label;\n let label;\n\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this.getSlot(item.from, item.to, true);\n } else {\n slotX = this.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n\n if (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this.createPlotBandLabel(\n labelOptions,\n item,\n new Box(\n slotX.x1,\n slotY.y1,\n slotX.x2,\n slotY.y2\n )\n\n );\n }\n\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n const bandRect = new geom.Rect(\n [ slotX.x1, slotY.y1 ],\n [ slotX.width(), slotY.height() ]\n );\n\n const path = draw.Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n\n group.append(path);\n if (label) {\n group.append(label);\n }\n }\n }\n\n this.appendVisual(group);\n }\n\n createPlotBandLabel(label, item, box) {\n\n if (label.visible === false) {\n return null;\n }\n\n let text = label.text;\n let textbox;\n\n if (defined(label) && label.visible) {\n const labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({ text: text, item: item });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n\n return textbox.visual;\n }\n\n createGridLines(altAxis) {\n const options = this.options;\n const { minorGridLines, majorGridLines, minorUnit, vertical } = options;\n const axisLineVisible = altAxis.options.line.visible;\n const majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n const lineBox = altAxis.lineBox();\n const linePos = lineBox[vertical ? \"y1\" : \"x1\"];\n const lineOptions = {\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n vertical: vertical\n };\n const majorTicks = [];\n\n const container = this.gridLinesVisual();\n\n function render(tickPositions, gridLine, skipUnit) {\n const count = tickPositions.length;\n const step = Math.max(1, gridLine.step);\n\n if (gridLine.visible) {\n for (let i = gridLine.skip; i < count; i += step) {\n let 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\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n\n return container.children;\n }\n\n reflow(box) {\n const { options, labels, title } = this;\n const vertical = options.vertical;\n const count = labels.length;\n const sizeFn = vertical ? WIDTH : HEIGHT;\n const titleSize = title ? title.box[sizeFn]() : 0;\n const space = this.getActualTickSize() + options.margin + titleSize;\n const rootBox = (this.getRoot() || {}).box || box;\n const boxSize = rootBox[sizeFn]();\n let maxLabelSize = 0;\n\n for (let i = 0; i < count; i++) {\n let labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n\n if (vertical) {\n this.box = new Box(\n box.x1, box.y1,\n box.x1 + maxLabelSize + space, box.y2\n );\n } else {\n this.box = new Box(\n box.x1, box.y1,\n box.x2, box.y1 + maxLabelSize + space\n );\n }\n\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n }\n\n getLabelsTickPositions() {\n return this.getMajorTickPositions();\n }\n\n labelTickIndex(label) {\n return label.index;\n }\n\n arrangeLabels() {\n const { options, labels } = this;\n const labelsBetweenTicks = this.labelsBetweenTicks();\n const vertical = options.vertical;\n const mirror = options.labels.mirror;\n const tickPositions = this.getLabelsTickPositions();\n\n for (let idx = 0; idx < labels.length; idx++) {\n const label = labels[idx];\n const tickIx = this.labelTickIndex(label);\n const labelSize = vertical ? label.box.height() : label.box.width();\n const firstTickPosition = tickPositions[tickIx];\n const nextTickPosition = tickPositions[tickIx + 1];\n let positionStart, positionEnd;\n\n if (vertical) {\n if (labelsBetweenTicks) {\n const middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - (labelSize / 2);\n } else {\n positionStart = firstTickPosition - (labelSize / 2);\n }\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\n this.positionLabel(label, mirror, positionStart, positionEnd);\n }\n }\n\n positionLabel(label, mirror, positionStart, positionEnd = positionStart) {\n const options = this.options;\n const vertical = options.vertical;\n const lineBox = this.lineBox();\n const labelOffset = this.getActualTickSize() + options.margin;\n let labelBox;\n\n if (vertical) {\n let labelX = lineBox.x2;\n\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\n labelBox = label.box.move(labelX, positionStart);\n } else {\n let labelY = lineBox.y1;\n\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\n labelBox = new Box(\n positionStart, labelY,\n positionEnd, labelY + label.box.height()\n );\n }\n\n label.reflow(labelBox);\n }\n\n autoRotateLabelAngle(labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n\n return -45;\n }\n\n autoRotateLabels() {\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n\n const tickPositions = this.getMajorTickPositions();\n const labels = this.labels;\n const limit = Math.min(labels.length, tickPositions.length - 1);\n let angle = 0;\n\n for (let idx = 0; idx < limit; idx++) {\n const width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n const labelBox = labels[idx].box;\n const labelAngle = this.autoRotateLabelAngle(labelBox, width);\n\n if (labelAngle !== 0) {\n angle = labelAngle;\n }\n\n if (angle === -90) {\n break;\n }\n }\n\n if (angle !== 0) {\n for (let idx = 0; idx < labels.length; idx++) {\n labels[idx].options.rotation = angle;\n labels[idx].reflow(new Box());\n }\n\n return true;\n }\n }\n\n arrangeTitle() {\n const { options, title } = this;\n const mirror = options.labels.mirror;\n const vertical = options.vertical;\n\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\n title.reflow(this.box);\n }\n }\n\n arrangeNotes() {\n for (let idx = 0; idx < this.notes.length; idx++) {\n const item = this.notes[idx];\n const value = item.options.value;\n let slot;\n\n if (defined(value)) {\n if (this.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n\n slot = this.noteSlot(value);\n } else {\n item.hide();\n }\n\n item.reflow(slot || this.lineBox());\n }\n }\n\n noteSlot(value) {\n return this.getSlot(value);\n }\n\n alignTo(secondAxis) {\n const lineBox = secondAxis.lineBox();\n const vertical = this.options.vertical;\n const pos = vertical ? Y : X;\n\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\n axisLabelText(value, options, context) {\n let text;\n const tmpl = getTemplate(options);\n const defaultText = () => {\n if (!options.format) {\n return value;\n }\n\n return this.chartService.format.localeAuto(\n options.format, [ value ], options.culture\n );\n };\n\n if (tmpl) {\n const templateContext = Object.assign({}, context, {\n get text() { return defaultText(); },\n value,\n format: options.format,\n culture: options.culture\n });\n\n text = tmpl(templateContext);\n } else {\n text = defaultText();\n }\n\n return text;\n }\n\n slot(from , to, limit) {\n const slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n }\n\n contentBox() {\n const box = this.box.clone();\n const labels = this.labels;\n if (labels.length) {\n const axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n const 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 const lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n }\n\n return box;\n }\n\n maxLabelOffset() {\n const { vertical, reverse } = this.options;\n const labelsBetweenTicks = this.labelsBetweenTicks();\n const tickPositions = this.getLabelsTickPositions();\n const offsetField = vertical ? Y : X;\n const labels = this.labels;\n const startPosition = reverse ? 1 : 0;\n const endPosition = reverse ? 0 : 1;\n let maxStartOffset = 0;\n let maxEndOffset = 0;\n\n for (let idx = 0; idx < labels.length; idx++) {\n const label = labels[idx];\n const tickIx = this.labelTickIndex(label);\n let startTick, endTick;\n\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\n }\n\n limitRange(from, to, min, max, offset) {\n const options = this.options;\n\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\n if ((to < min && offset > 0) || (max < from && offset < 0)) {\n return {\n min: from,\n max: to\n };\n }\n\n const rangeSize = to - from;\n let minValue = from;\n let maxValue = to;\n\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\n return {\n min: minValue,\n max: maxValue\n };\n }\n\n valueRange() {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n }\n\n lineDir() {\n /*\n * Axis line direction:\n * * Vertical: up.\n * * Horizontal: right.\n */\n\n const { vertical, reverse } = this.options;\n return (vertical ? -1 : 1) * (reverse ? -1 : 1);\n }\n\n lineInfo() {\n const { vertical } = this.options;\n const lineBox = this.lineBox();\n const lineSize = vertical ? lineBox.height() : lineBox.width();\n const axis = vertical ? Y : X;\n const axisDir = this.lineDir();\n const startEdge = axisDir === 1 ? 1 : 2;\n const axisOrigin = axis + startEdge.toString();\n const lineStart = lineBox[axisOrigin];\n\n return {\n axis,\n axisOrigin,\n axisDir,\n lineBox,\n lineSize,\n lineStart\n };\n }\n\n pointOffset(point) {\n const { axis, axisDir, axisOrigin, lineBox, lineSize } = this.lineInfo();\n const relative = axisDir > 0 ? point[axis] - lineBox[axisOrigin] : lineBox[axisOrigin] - point[axis];\n const offset = relative / lineSize;\n\n return offset;\n }\n\n // Computes the axis range change (delta) for a given scale factor.\n // The delta is subtracted from the axis range:\n // * delta > 0 reduces the axis range (zoom-in)\n // * delta < 0 expands the axis range (zoom-out)\n scaleToDelta(rawScale, range) {\n // Scale >= 1 would result in axis range of 0.\n // Scale <= -1 would reverse the scale direction.\n const MAX_SCALE = 0.999;\n const scale = limitValue(rawScale, -MAX_SCALE, MAX_SCALE);\n\n let delta;\n if (scale > 0) {\n delta = range * Math.min(1, scale);\n } else {\n delta = range - (range / (1 + scale));\n }\n\n return delta;\n }\n\n labelsBetweenTicks() {\n return !this.options.justified;\n }\n\n //add legacy fields to the options that are no longer generated by default\n prepareUserOptions() {\n }\n}\n\nsetDefaultOptions(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 // TODO: Move to line or labels options\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: {\n label: {\n text: \"\"\n }\n },\n\n _alignLines: true,\n _deferLabels: false\n});\n\nexport default Axis;\n","export const MILLISECONDS = \"milliseconds\";\nexport const SECONDS = \"seconds\";\nexport const MINUTES = \"minutes\";\nexport const HOURS = \"hours\";\nexport const DAYS = \"days\";\nexport const WEEKS = \"weeks\";\nexport const MONTHS = \"months\";\nexport const YEARS = \"years\";\n\nexport const TIME_PER_MILLISECOND = 1;\nexport const TIME_PER_SECOND = 1000;\nexport const TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\nexport const TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\nexport const TIME_PER_DAY = 24 * TIME_PER_HOUR;\nexport const TIME_PER_WEEK = 7 * TIME_PER_DAY;\nexport const TIME_PER_MONTH = 31 * TIME_PER_DAY;\nexport const TIME_PER_YEAR = 365 * TIME_PER_DAY;\nexport const 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\n","import { TIME_PER_MINUTE } from './constants';\n\nexport default function absoluteDateDiff(a, b) {\n const diff = a.getTime() - b;\n const offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n\n return diff - (offsetDiff * TIME_PER_MINUTE);\n}","export default function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n}","export default function toDate(value) {\n let result;\n\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n\n return result;\n}","import { MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS,\n TIME_PER_SECOND, TIME_PER_MINUTE, TIME_PER_HOUR } from './constants';\nimport addTicks from './add-ticks';\nimport toDate from './to-date';\nimport startOfWeek from './start-of-week';\n\nfunction adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n}\n\nfunction addHours(date, hours) {\n const roundedDate = new Date(date);\n\n roundedDate.setMinutes(0, 0, 0);\n\n const tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n}\n\nexport default function addDuration(dateValue, value, unit, weekStartDay) {\n let result = dateValue;\n\n if (dateValue) {\n let date = toDate(dateValue);\n const hours = date.getHours();\n\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\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\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n\n return result;\n}","import { TIME_PER_DAY } from './constants';\nimport addTicks from './add-ticks';\n\nexport default function startOfWeek(date, weekStartDay = 0) {\n let daysToSubtract = 0;\n let day = date.getDay();\n\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n\n daysToSubtract++;\n }\n }\n\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n}","import addDuration from './add-duration';\nimport toDate from './to-date';\n\nexport default function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n}","import floorDate from './floor-date';\nimport addDuration from './add-duration';\nimport toDate from './to-date';\n\nexport default function ceilDate(dateValue, unit, weekStartDay) {\n const date = toDate(dateValue);\n\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n\n return addDuration(date, 1, unit, weekStartDay);\n}","export default function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n\n return -1;\n}","export default function dateDiff(a, b) {\n return a.getTime() - b;\n}","import { isArray } from '../common';\nimport toDate from './to-date';\n\nexport default function toTime(value) {\n if (isArray(value)) {\n let result = [];\n for (let idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n}","import toTime from './to-time';\n\nexport default function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n\n return a === b;\n}","import { DAYS, WEEKS, MONTHS, YEARS, TIME_PER_UNIT } from './constants';\nimport dateDiff from './date-diff';\nimport absoluteDateDiff from './absolute-date-diff';\nimport toDate from './to-date';\n\nfunction timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n}\n\nexport default function dateIndex(value, start, baseUnit, baseUnitStep) {\n const date = toDate(value);\n const startDate = toDate(start);\n let index;\n\n if (baseUnit === MONTHS) {\n index = (date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12) +\n 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\n return index / baseUnitStep;\n}\n\n","import { DAYS, MONTHS, YEARS, TIME_PER_DAY, TIME_PER_UNIT } from './constants';\nimport dateDiff from './date-diff';\n\nexport default function duration(a, b, unit) {\n let diff;\n\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\n return diff;\n}","import { isString } from '../common';\nimport toDate from './to-date';\n\nexport default function parseDate(intlService, date) {\n let result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n}\n","import parseDate from './parse-date';\n\nimport { isArray } from '../common';\n\nexport default function parseDates(intlService, dates) {\n if (isArray(dates)) {\n const result = [];\n for (let idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n\n return result;\n }\n\n return parseDate(intlService, dates);\n}","import { isNumber } from '../common';\n\nexport default function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n\n return 0;\n}\n","import Axis from './axis';\nimport AxisLabel from './axis-label';\n\nimport { BLACK, COORD_PRECISION, DEFAULT_PRECISION, X, Y } from '../common/constants';\nimport { defined, isNumber, last, limitValue, round, setDefaultOptions, valueOrDefault, HashMap } from '../common';\nimport { dateEquals } from '../date-utils';\n\nconst MIN_CATEGORY_POINTS_RANGE = 0.01;\nconst MIN_CATEGORY_RANGE = 0.1;\n\nfunction indexOf(value, arr) {\n if (value instanceof Date) {\n const length = arr.length;\n for (let idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n\n return -1;\n }\n\n return arr.indexOf(value);\n}\n\nclass CategoryAxis extends Axis {\n initFields() {\n this._ticks = {};\n }\n\n categoriesHash() {\n return \"\";\n }\n\n clone() {\n const copy = new CategoryAxis(Object.assign({}, this.options, {\n categories: this.options.srcCategories\n }), this.chartService);\n copy.createLabels();\n\n return copy;\n }\n\n initUserOptions(options) {\n const categories = options.categories || [];\n const definedMin = defined(options.min);\n const definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n\n if ((definedMin || definedMax) && categories.length) {\n const min = definedMin ? Math.floor(options.min) : 0;\n let max;\n\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n\n options.categories = options.categories.slice(min, max);\n }\n\n return options;\n }\n\n rangeIndices() {\n const options = this.options;\n const length = options.categories.length || 1;\n const min = isNumber(options.min) ? options.min % 1 : 0;\n let max;\n\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\n return {\n min: min,\n max: max\n };\n }\n\n totalRangeIndices(limit) {\n const options = this.options;\n let min = isNumber(options.min) ? options.min : 0;\n let max;\n\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\n if (limit) {\n const totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n range() {\n const options = this.options;\n const min = isNumber(options.min) ? options.min : 0;\n const max = isNumber(options.max) ? options.max : this.totalRange().max;\n\n return {\n min: min,\n max: max\n };\n }\n\n roundedRange() {\n return this.range();\n }\n\n totalRange() {\n const options = this.options;\n return { min: 0, max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0) };\n }\n\n scaleOptions() {\n const { min, max } = this.rangeIndices();\n const lineBox = this.lineBox();\n const size = this.options.vertical ? lineBox.height() : lineBox.width();\n const scale = size / ((max - min) || 1);\n\n return {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\n }\n\n arrangeLabels() {\n super.arrangeLabels();\n this.hideOutOfRangeLabels();\n }\n\n hideOutOfRangeLabels() {\n const { box, labels } = this;\n\n if (labels.length > 0) {\n const valueAxis = this.options.vertical ? Y : X;\n const start = box[valueAxis + 1];\n const end = box[valueAxis + 2];\n const firstLabel = labels[0];\n const lastLabel = last(labels);\n\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\n getMajorTickPositions() {\n return this.getTicks().majorTicks;\n }\n\n getMinorTickPositions() {\n return this.getTicks().minorTicks;\n }\n\n getLabelsTickPositions() {\n return this.getTicks().labelTicks;\n }\n\n tickIndices(stepSize) {\n const { min, max } = this.rangeIndices();\n const limit = Math.ceil(max);\n let current = Math.floor(min);\n const indices = [];\n\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n\n return indices;\n }\n\n getTickPositions(stepSize) {\n const { vertical, reverse } = this.options;\n const { scale, box, min } = this.scaleOptions();\n const pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n const indices = this.tickIndices(stepSize);\n const positions = [];\n\n for (let idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n\n return positions;\n }\n\n getTicks() {\n const options = this.options;\n const cache = this._ticks;\n const range = this.rangeIndices();\n const lineBox = this.lineBox();\n const hash = lineBox.getHash() + range.min + \",\" + range.max + options.reverse + options.justified;\n\n if (cache._hash !== hash) {\n const 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\n return cache;\n }\n\n filterOutOfRangePositions(positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n\n const axis = this.options.vertical ? Y : X;\n const inRange = (position) => lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n\n const end = positions.length - 1;\n let startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n\n let endIndex = end;\n\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n\n return positions.slice(startIndex, endIndex + 1);\n }\n\n lineInfo() {\n const { vertical, reverse } = this.options;\n const lineBox = this.lineBox();\n const lineSize = vertical ? lineBox.height() : lineBox.width();\n const axis = vertical ? Y : X;\n const axisDir = reverse ? -1 : 1;\n const startEdge = axisDir === 1 ? 1 : 2;\n const axisOrigin = axis + startEdge.toString();\n const lineStart = lineBox[axisOrigin];\n\n return {\n axis,\n axisOrigin,\n axisDir,\n lineBox,\n lineSize,\n lineStart\n };\n }\n\n lineDir() {\n /*\n * Category axis line direction:\n * * Vertical: down.\n * * Horizontal: right.\n */\n\n const { reverse } = this.options;\n return reverse ? -1 : 1;\n }\n\n // TODO: Rename to slotBox, valueSlot, slotByIndex?\n getSlot(from, to, limit) {\n const options = this.options;\n const { reverse, justified } = options;\n const { scale, box, min } = this.scaleOptions();\n const { axis: valueAxis, lineStart } = this.lineInfo();\n\n const slotBox = box.clone();\n const singleSlot = !defined(to);\n\n const start = valueOrDefault(from, 0);\n let end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n\n // Fixes transient bug caused by iOS 6.0 JIT\n // (one can never be too sure)\n end = Math.max(start, end);\n\n let p1 = lineStart + (start - min) * scale;\n let p2 = lineStart + (end + 1 - min) * scale;\n\n if (singleSlot && justified) {\n p2 = p1;\n }\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\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n\n return slotBox;\n }\n\n limitSlot(slot) {\n const vertical = this.options.vertical;\n const valueAxis = vertical ? Y : X;\n const lineBox = this.lineBox();\n const limittedSlot = slot.clone();\n\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\n return limittedSlot;\n }\n\n slot(from, to, limit) {\n const min = Math.floor(this.options.min || 0);\n let start = from;\n let end = to;\n\n if (typeof start === \"string\") {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n\n if (typeof end === \"string\") {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\n }\n\n return super.slot(start, end, limit);\n }\n\n pointCategoryIndex(point) {\n const { reverse, justified, vertical } = this.options;\n const valueAxis = vertical ? Y : X;\n const { scale, box, min, max } = this.scaleOptions();\n const startValue = reverse ? max : min;\n const lineStart = box[valueAxis + 1];\n const lineEnd = box[valueAxis + 2];\n const pos = point[valueAxis];\n\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n\n let value = startValue + (pos - lineStart) / scale;\n const diff = value % 1;\n\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n\n return Math.floor(value);\n }\n\n getCategory(point) {\n const index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.options.categories[index];\n }\n\n categoryIndex(value) {\n return this.totalIndex(value) - Math.floor(this.options.min || 0);\n }\n\n categoryAt(index, total) {\n const options = this.options;\n\n return (total ? options.srcCategories : options.categories)[index];\n }\n\n categoriesCount() {\n return (this.options.categories || []).length;\n }\n\n translateRange(delta) {\n const options = this.options;\n const lineBox = this.lineBox();\n const size = options.vertical ? lineBox.height() : lineBox.width();\n const range = options.categories.length;\n const scale = size / range;\n const offset = round(delta / scale, DEFAULT_PRECISION);\n\n return {\n min: offset,\n max: range + offset\n };\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const rangeIndices = this.totalRangeIndices();\n const range = rangeIndices.max - rangeIndices.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = rangeIndices.min + minDelta;\n let max = rangeIndices.max - maxDelta;\n\n if (max - min < MIN_CATEGORY_RANGE) {\n max = min + MIN_CATEGORY_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const { min: totalMin, max: totalMax } = this.totalRange();\n const range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\n };\n }\n\n labelsCount() {\n const labelsRange = this.labelsRange();\n\n return labelsRange.max - labelsRange.min;\n }\n\n labelsRange() {\n const options = this.options;\n const { justified, labels: labelOptions } = options;\n let { min, max } = this.totalRangeIndices(true);\n const start = Math.floor(min);\n\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\n let skip;\n\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\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const dataItem = options.dataItems ? options.dataItems[index] : null;\n const category = valueOrDefault(options.categories[index], \"\");\n\n labelContext.dataItem = dataItem;\n const text = this.axisLabelText(category, labelOptions, labelContext);\n\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.totalRangeIndices();\n\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n }\n\n noteSlot(value) {\n const options = this.options;\n const index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n }\n\n arrangeNotes() {\n super.arrangeNotes();\n this.hideOutOfRangeNotes();\n }\n\n hideOutOfRangeNotes() {\n const { notes, box } = this;\n if (notes && notes.length) {\n const valueAxis = this.options.vertical ? Y : X;\n const start = box[valueAxis + 1];\n const end = box[valueAxis + 2];\n\n for (let idx = 0; idx < notes.length; idx++) {\n const 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\n pan(delta) {\n const range = this.totalRangeIndices(true);\n const { scale } = this.scaleOptions();\n const offset = round(delta / scale, DEFAULT_PRECISION);\n const totalRange = this.totalRange();\n const min = range.min + offset;\n const max = range.max + offset;\n\n return this.limitRange(min, max, 0, totalRange.max, offset);\n }\n\n pointsRange(start, end) {\n const { reverse, vertical } = this.options;\n const valueAxis = vertical ? Y : X;\n const range = this.totalRangeIndices(true);\n const { scale, box } = this.scaleOptions();\n const lineStart = box[valueAxis + (reverse ? 2 : 1)];\n\n const diffStart = start[valueAxis] - lineStart;\n const diffEnd = end[valueAxis] - lineStart;\n\n const min = range.min + diffStart / scale;\n const max = range.min + diffEnd / scale;\n const rangeMin = Math.min(min, max);\n const rangeMax = Math.max(min, max);\n\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n }\n\n valueRange() {\n return this.range();\n }\n\n totalIndex(value) {\n const options = this.options;\n const index = this._categoriesMap ?\n this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n\n return index;\n }\n\n currentRangeIndices() {\n const options = this.options;\n let min = 0;\n\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n\n let 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\n return {\n min: min,\n max: max\n };\n }\n\n mapCategories() {\n if (!this._categoriesMap) {\n const map = this._categoriesMap = new HashMap();\n const srcCategories = this.options.srcCategories;\n for (let idx = 0; idx < srcCategories.length; idx++) {\n map.set(srcCategories[idx], idx);\n }\n }\n }\n\n totalCount() {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n}\n\nsetDefaultOptions(CategoryAxis, {\n type: \"category\",\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: {\n zIndex: 1\n },\n justified: false,\n _deferLabels: true\n});\n\nexport default CategoryAxis;\n","const COORDINATE_LIMIT = 300000;\n\nconst 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\nconst ZERO_THRESHOLD = 0.2;\n\nexport {\n COORDINATE_LIMIT, DateLabelFormats, ZERO_THRESHOLD\n};","import CategoryAxis from './category-axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport { CENTER, DATE, DEFAULT_PRECISION, MAX_VALUE, OBJECT, X, Y } from '../common/constants';\nimport { deepExtend, defined, inArray, last, limitValue, round, setDefaultOptions, sparseArrayLimits } from '../common';\n\nimport { MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS,\n TIME_PER_MINUTE, TIME_PER_HOUR, TIME_PER_DAY, TIME_PER_WEEK,\n TIME_PER_MONTH, TIME_PER_YEAR, TIME_PER_UNIT } from '../date-utils/constants';\nimport { dateComparer, toDate, addTicks, addDuration, dateDiff, absoluteDateDiff,\n dateIndex, dateEquals, toTime, parseDate, parseDates, firstDay } from '../date-utils';\n\nimport { DateLabelFormats } from './constants';\n\nconst AUTO = \"auto\";\nconst BASE_UNITS = [\n MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\n];\nconst FIT = \"fit\";\n\n\nfunction categoryRange(categories) {\n let 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\n return range;\n}\n\nclass EmptyDateRange {\n constructor(options) {\n this.options = options;\n }\n\n displayIndices() {\n return {\n min: 0,\n max: 1\n };\n }\n\n displayRange() {\n return {};\n }\n\n total() {\n return {};\n }\n\n valueRange() {\n return {};\n }\n\n valueIndex() {\n return -1;\n }\n\n values() {\n return [];\n }\n\n totalIndex() {\n return -1;\n }\n\n valuesCount() {\n return 0;\n }\n\n totalCount() {\n return 0;\n }\n\n dateAt() {\n return null;\n }\n}\n\nclass DateRange {\n constructor(start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n\n const { roundToBaseUnit, justified } = options;\n\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n const lowerEnd = this.roundToTotalStep(end);\n const expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n\n const min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n\n const max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n const 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\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\n displayRange() {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n }\n\n displayIndices() {\n if (!this._indices) {\n const options = this.options;\n\n const { baseUnit, baseUnitStep } = options;\n\n const minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n const maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n\n this._indices = { min: minIdx, max: maxIdx };\n }\n\n return this._indices;\n }\n\n total() {\n return {\n min: this.start,\n max: this.end\n };\n }\n\n totalCount() {\n const last = this.totalIndex(this.end);\n\n return last + (this.options.justified ? 1 : 0);\n }\n\n valueRange() {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n }\n\n valueIndex(value) {\n const options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n }\n\n totalIndex(value) {\n const options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n }\n\n dateIndex(value) {\n const options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n }\n\n valuesCount() {\n const maxIdx = this.valueIndex(this.valueEnd);\n\n return maxIdx + 1;\n }\n\n values() {\n let values = this._values;\n if (!values) {\n const options = this.options;\n const range = this.valueRange();\n this._values = values = [];\n\n for (let date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n\n return values;\n }\n\n dateAt(index, total) {\n const options = this.options;\n\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n }\n\n roundToTotalStep(value, upper, next) {\n const { baseUnit, baseUnitStep, weekStartDay } = this.options;\n const start = this.start;\n\n const step = dateIndex(value, start, baseUnit, baseUnitStep);\n let roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n\n if (next) {\n roundedStep += next;\n }\n\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n\n}\n\nfunction autoBaseUnit(options, startUnit, startStep) {\n const categoryLimits = categoryRange(options.categories);\n const span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n const { autoBaseUnitSteps, maxDateGroups } = options;\n const autoUnit = options.baseUnit === FIT;\n let autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n let baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n let units = span / TIME_PER_UNIT[baseUnit];\n let totalUnits = units;\n let unitSteps, step, nextStep;\n\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\n\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\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n}\n\nfunction defaultBaseUnit(options) {\n const categories = options.categories;\n const count = defined(categories) ? categories.length : 0;\n let minDiff = MAX_VALUE;\n let lastCategory, unit;\n\n for (let categoryIx = 0; categoryIx < count; categoryIx++) {\n const category = categories[categoryIx];\n\n if (category && lastCategory) {\n const diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n\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\n lastCategory = category;\n }\n\n options.baseUnit = unit || DAYS;\n}\n\nfunction initUnit(options) {\n const baseUnit = (options.baseUnit || \"\").toLowerCase();\n const useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n\n if (useDefault) {\n defaultBaseUnit(options);\n }\n\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n\n return options;\n}\n\nclass DateCategoryAxis extends CategoryAxis {\n\n clone() {\n const copy = new DateCategoryAxis(Object.assign({}, this.options), this.chartService);\n copy.createLabels();\n\n return copy;\n }\n\n categoriesHash() {\n const start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n }\n\n initUserOptions(options) {\n return options;\n }\n\n initFields() {\n super.initFields();\n\n const chartService = this.chartService;\n const intlService = chartService.intl;\n let options = this.options;\n\n let categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n\n options = deepExtend({\n roundToBaseUnit: true\n }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n\n this.options = options;\n options.srcCategories = categories;\n\n if (categories.length > 0) {\n const range = categoryRange(categories);\n const maxDivisions = options.maxDivisions;\n\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n\n if (maxDivisions) {\n const dataRange = this.dataRange.displayRange();\n\n const divisionOptions = Object.assign({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n\n const dataRangeOptions = this.dataRange.options;\n\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n\n this.rangeLabels = [];\n }\n\n tickIndices(stepSize) {\n const { dataRange, divisionRange } = this;\n const valuesCount = divisionRange.valuesCount();\n\n if (!this.options.maxDivisions || !valuesCount) {\n return super.tickIndices(stepSize);\n }\n\n const indices = [];\n let values = divisionRange.values();\n let offset = 0;\n\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;//align ticks to the center of not justified categories\n }\n\n for (let idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n const last = indices.length - 1;\n indices.splice(idx, 0, indices[last - 1] + (indices[last] - indices[last - 1]) * stepSize);\n }\n }\n\n return indices;\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n const categories = this.options.categories || [];\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n }\n\n parseNoteValue(value) {\n return parseDate(this.chartService.intl, value);\n }\n\n noteSlot(value) {\n return this.getSlot(value);\n }\n\n translateRange(delta) {\n const options = this.options;\n const { baseUnit, weekStartDay, vertical } = options;\n const lineBox = this.lineBox();\n const size = vertical ? lineBox.height() : lineBox.width();\n let range = this.range();\n const scale = size / (range.max - range.min);\n const offset = round(delta / scale, DEFAULT_PRECISION);\n\n if (range.min && range.max) {\n const from = addTicks(options.min || range.min, offset);\n const to = addTicks(options.max || range.max, offset);\n\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n\n return range;\n }\n\n labelsRange() {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n }\n\n pan(delta) {\n if (this.isEmpty()) {\n return null;\n }\n\n const options = this.options;\n const lineBox = this.lineBox();\n const size = options.vertical ? lineBox.height() : lineBox.width();\n const { min, max } = this.dataRange.displayRange();\n const totalLimits = this.dataRange.total();\n const scale = size / (max - min);\n const offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n const from = addTicks(min, offset);\n const to = addTicks(max, offset);\n\n const panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n\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\n return panRange;\n }\n }\n\n pointsRange(start, end) {\n if (this.isEmpty()) {\n return null;\n }\n\n const pointsRange = super.pointsRange(start, end);\n const datesRange = this.dataRange.displayRange();\n const indicesRange = this.dataRange.displayIndices();\n const scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n const options = this.options;\n\n const min = addTicks(datesRange.min, pointsRange.min * scale);\n const max = addTicks(datesRange.min, pointsRange.max * scale);\n\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n\n scaleRange(scale, cursor) {\n if (this.isEmpty()) {\n return {};\n }\n\n const options = this.options;\n const fit = options.userSetBaseUnit === FIT;\n const totalLimits = this.dataRange.total();\n const { min: rangeMin, max: rangeMax } = this.dataRange.displayRange();\n\n const position = Math.abs(this.pointOffset(cursor));\n const range = rangeMax - rangeMin;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = Math.round(position * delta);\n const maxDelta = Math.round((1 - position) * delta);\n\n let { baseUnit } = this.dataRange.options;\n let min = new Date(rangeMin.getTime() + minDelta);\n let max = new Date(rangeMax.getTime() - maxDelta);\n\n if (fit) {\n const { autoBaseUnitSteps, maxDateGroups } = options;\n\n const maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n const rangeDiff = dateDiff(rangeMax, rangeMin);\n const diff = dateDiff(max, min);\n let baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n let autoBaseUnitStep, ticks;\n\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\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n let stepIndex = 0;\n\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\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\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\n zoomRange(scale, cursor) {\n const totalLimits = this.dataRange.total();\n const range = this.scaleRange(scale, cursor);\n\n if (range) {\n if (range.min < totalLimits.min) {\n range.min = totalLimits.min;\n }\n if (range.max > totalLimits.max) {\n range.max = totalLimits.max;\n }\n }\n\n return range;\n }\n\n range() {\n return this.dataRange.displayRange();\n }\n\n createLabels() {\n super.createLabels();\n this.createRangeLabels();\n }\n\n clearLabels() {\n super.clearLabels();\n this.rangeLabels = [];\n }\n\n arrangeLabels() {\n this.arrangeRangeLabels();\n super.arrangeLabels();\n }\n\n arrangeRangeLabels() {\n const { options, rangeLabels } = this;\n if (rangeLabels.length === 0) {\n return;\n }\n\n const lineBox = this.lineBox();\n const vertical = options.vertical;\n const mirror = options.rangeLabels.mirror || options.labels.mirror;\n\n const firstLabel = rangeLabels[0];\n if (firstLabel) {\n const position = vertical ? lineBox.y1 - (firstLabel.box.height() / 2) : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n\n const lastLabel = rangeLabels[1];\n if (lastLabel) {\n const position = vertical ? lineBox.y2 - (lastLabel.box.height() / 2) : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position);\n }\n }\n\n autoRotateLabels() {\n super.autoRotateLabels();\n this.autoRotateRangeLabels();\n }\n\n hideOutOfRangeLabels() {\n super.hideOutOfRangeLabels();\n this.hideOverlappingLabels();\n }\n\n hideOverlappingLabels() {\n const { rangeLabels, labels } = this;\n if (rangeLabels.length === 0) {\n return;\n }\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\n return false;\n }\n\n const firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (let i = 0; i < labels.length; i++) {\n const overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n\n const lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (let i = labels.length - 1; i > 0; --i) {\n const overlaps = clip(lastRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n }\n\n contentBox() {\n const box = super.contentBox();\n const rangeLabels = this.rangeLabels;\n\n for (let i = 0; i < rangeLabels.length; i++) {\n const label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n\n return box;\n }\n\n createAxisLabel(index, labelOptions, labelContext = {}) {\n const options = this.options;\n const dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n const date = this.divisionRange.dateAt(index);\n const unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n\n const text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n }\n\n createRangeLabels() {\n const { displayStart, displayEnd } = this.divisionRange;\n const options = this.options;\n const labelOptions = Object.assign({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n\n if (labelOptions.visible !== true) {\n return;\n }\n\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n\n const unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n const createLabel = (index, date, text) => {\n if (text) {\n const label = new AxisLabel(date, text, index, null, labelOptions);\n this.append(label);\n this.rangeLabels.push(label);\n }\n };\n\n const startText = this.axisLabelText(displayStart, labelOptions, { index: 0, count: 2 });\n createLabel(0, displayStart, startText);\n\n const endText = this.axisLabelText(displayEnd, labelOptions, { index: 1, count: 2 });\n createLabel(1, displayEnd, endText);\n }\n\n autoRotateRangeLabels() {\n const labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n\n const rotateLabel = (label, tickPositions, index) => {\n const width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n const angle = this.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n\n const tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n }\n\n categoryIndex(value) {\n return this.dataRange.valueIndex(value);\n }\n\n slot(from, to, limit) {\n const dateRange = this.dataRange;\n let start = from;\n let end = to;\n\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n\n const slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\n }\n\n getSlot(a, b, limit) {\n let start = a;\n let end = b;\n\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n\n return super.getSlot(start, end, limit);\n }\n\n valueRange() {\n const options = this.options;\n const range = categoryRange(options.srcCategories);\n\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n }\n\n categoryAt(index, total) {\n return this.dataRange.dateAt(index, total);\n }\n\n categoriesCount() {\n return this.dataRange.valuesCount();\n }\n\n rangeIndices() {\n return this.dataRange.displayIndices();\n }\n\n labelsBetweenTicks() {\n return !this.divisionRange.options.justified;\n }\n\n prepareUserOptions() {\n if (this.isEmpty()) {\n return;\n }\n\n this.options.categories = this.dataRange.values();\n }\n\n getCategory(point) {\n const index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.dataRange.dateAt(index);\n }\n\n totalIndex(value) {\n return this.dataRange.totalIndex(value);\n }\n\n currentRangeIndices() {\n const range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n }\n\n totalRange() {\n return this.dataRange.total();\n }\n\n totalCount() {\n return this.dataRange.totalCount();\n }\n\n isEmpty() {\n return !this.options.srcCategories.length;\n }\n\n roundedRange() {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n\n const options = this.options;\n const datesRange = categoryRange(options.srcCategories);\n\n const dateRange = new DateRange(datesRange.min, datesRange.max, Object.assign({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n\n return dateRange.displayRange();\n }\n}\n\nsetDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: {\n dateFormats: DateLabelFormats\n },\n rangeLabels: {\n visible: false\n },\n autoBaseUnitSteps: {\n milliseconds: [ 1, 10, 100 ],\n seconds: [ 1, 2, 5, 15, 30 ],\n minutes: [ 1, 2, 5, 15, 30 ],\n hours: [ 1, 2, 3 ],\n days: [ 1, 2, 3 ],\n weeks: [ 1, 2 ],\n months: [ 1, 2, 3, 6 ],\n years: [ 1, 2, 3, 5, 10, 25, 50 ]\n },\n maxDateGroups: 10\n});\n\nexport default DateCategoryAxis;\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n}\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n}","import { COORDINATE_LIMIT } from '../constants';\n\nexport default function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n}","\nimport Axis from './axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport { BLACK, DEFAULT_PRECISION, COORD_PRECISION } from '../common/constants';\nimport { deepExtend, defined, limitValue, round, setDefaultOptions, valueOrDefault } from '../common';\n\nimport autoMajorUnit from './utils/auto-major-unit';\nimport autoAxisMin from './utils/auto-axis-min';\nimport autoAxisMax from './utils/auto-axis-max';\nimport floor from './utils/floor';\nimport ceil from './utils/ceil';\nimport limitCoordinate from './utils/limit-coordinate';\n\nconst MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n\nclass NumericAxis extends Axis {\n\n constructor(seriesMin, seriesMax, options, chartService) {\n super(Object.assign({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n }\n\n initUserOptions(options) {\n const autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n\n return axisOptions(autoOptions, options);\n }\n\n initFields() {\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\n clone() {\n return new NumericAxis(\n this.seriesMin,\n this.seriesMax,\n Object.assign({}, this.options),\n this.chartService\n );\n }\n\n startValue() {\n return 0;\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n getDivisions(stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n\n const options = this.options;\n const range = options.max - options.min;\n\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n }\n\n getTickPositions(unit, skipUnit) {\n const options = this.options;\n const { axisDir, axisOrigin, lineBox, lineSize } = this.lineInfo();\n const range = options.max - options.min;\n const scale = lineSize / range;\n const step = unit * scale;\n const divisions = this.getDivisions(unit);\n const positions = [];\n let pos = lineBox[axisOrigin];\n let skipStep = 0;\n\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n\n for (let idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n\n pos = pos + step * axisDir;\n }\n\n return positions;\n }\n\n getMajorTickPositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n getMinorTickPositions() {\n return this.getTickPositions(this.options.minorUnit);\n }\n\n getSlot(a, b, limit = false) {\n const options = this.options;\n const { axis, axisDir, lineBox, lineSize, lineStart } = this.lineInfo();\n const step = axisDir * (lineSize / (options.max - options.min));\n\n let start = valueOrDefault(a, b || 0);\n let end = valueOrDefault(b, a || 0);\n\n if (limit) {\n start = limitValue(start, options.min, options.max);\n end = limitValue(end, options.min, options.max);\n }\n\n const p1 = Math.min(start, end) - options.min;\n const p2 = Math.max(start, end) - options.min;\n\n const slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n }\n\n getValue(point) {\n const options = this.options;\n const max = Number(options.max);\n const min = Number(options.min);\n const offset = this.pointOffset(point);\n const valueOffset = offset * (max - min);\n\n if (offset < 0 || offset > 1) {\n return null;\n }\n\n const value = min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n }\n\n translateRange(delta) {\n const options = this.options;\n const { vertical, reverse, max, min } = options;\n const { lineSize } = this.lineInfo();\n const range = max - min;\n const scale = lineSize / range;\n let offset = round(delta / scale, DEFAULT_PRECISION);\n\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: min + offset,\n max: max + offset,\n offset: offset\n };\n }\n\n labelsCount() {\n return this.getDivisions(this.options.majorUnit);\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION);\n const text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n return range.min <= value && value <= range.max;\n }\n\n pan(delta) {\n const range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const range = this.options.max - this.options.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = round(this.options.min + minDelta, DEFAULT_PRECISION);\n let max = round(this.options.max - maxDelta, DEFAULT_PRECISION);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = min + MIN_VALUE_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const { totalMin, totalMax } = this;\n const range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax),\n narrowRange: false\n };\n }\n\n isValidRange(min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n}\n\nfunction autoAxisOptions(seriesMin, seriesMax, options) {\n const narrowRange = options.narrowRange;\n\n let autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n let autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n\n const majorUnit = autoMajorUnit(autoMin, autoMax);\n const autoOptions = {\n majorUnit: majorUnit\n };\n\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n\n return autoOptions;\n}\n\nfunction 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\nfunction clearNullValues(options, fields) {\n for (let idx = 0; idx < fields.length; idx++) {\n const field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n}\n\nfunction axisOptions(autoOptions, userOptions) {\n let options = userOptions;\n let userSetMin, userSetMax;\n\n if (userOptions) {\n clearNullValues(userOptions, [ 'min', 'max' ]);\n\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n\n const userSetLimits = userSetMin || userSetMax;\n\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\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\n // Determine an auto major unit after min/max have been set\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n\n const 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\n return result;\n}\n\nfunction remainderClose(value, divisor, ratio) {\n const remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n const threshold = divisor * (1 - ratio);\n\n return remainder === 0 || remainder > threshold;\n}\n\nsetDefaultOptions(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: {\n format: \"#.####################\"\n },\n zIndex: 1\n});\n\nexport default NumericAxis;\n","import { ZERO_THRESHOLD } from '../constants';\n\nexport default function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n\n let axisMin;\n\n if (min >= 0 && max >= 0) {\n const minValue = min === max ? 0 : min;\n\n let diff = (max - minValue) / max;\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMin = Math.max(0, minValue - ((max - minValue) / 2));\n } else {\n axisMin = min;\n }\n\n return axisMin;\n}\n","import { ZERO_THRESHOLD } from '../constants';\n\nexport default function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n\n let axisMax;\n\n if (min <= 0 && max <= 0) {\n const maxValue = min === max ? 0 : max;\n\n let diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMax = Math.min(0, maxValue - ((min - maxValue) / 2));\n } else {\n axisMax = max;\n }\n\n return axisMax;\n}","import Axis from './axis';\nimport NumericAxis from './numeric-axis';\nimport AxisLabel from './axis-label';\nimport { DateLabelFormats } from './constants';\n\nimport { BLACK, DATE, COORD_PRECISION, DEFAULT_PRECISION } from '../common/constants';\nimport { setDefaultOptions, deepExtend, limitValue, round } from '../common';\n\nimport autoMajorUnit from './utils/auto-major-unit';\nimport ceil from './utils/ceil';\n\nimport { toDate, toTime, floorDate, ceilDate, duration, addDuration, addTicks, dateDiff, absoluteDateDiff, dateComparer, parseDate, parseDates, firstDay } from '../date-utils';\nimport { HOURS, DAYS, WEEKS, MONTHS, YEARS, TIME_PER_DAY, TIME_PER_WEEK, TIME_PER_MONTH, TIME_PER_YEAR, TIME_PER_UNIT } from '../date-utils/constants';\n\nconst MIN_VALUE_RANGE = 1000;\n\nclass DateValueAxis extends Axis {\n constructor(seriesMin, seriesMax, axisOptions, chartService) {\n const min = toDate(seriesMin);\n const max = toDate(seriesMax);\n\n const intlService = chartService.intl;\n let 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\n super(options, chartService);\n\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n\n const 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\n clone() {\n return new DateValueAxis(this.seriesMin, this.seriesMax, Object.assign({}, this.options), this.chartService);\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n getDivisions(stepValue) {\n const options = this.options;\n\n return Math.floor(\n duration(options.min, options.max, options.baseUnit) / stepValue + 1\n );\n }\n\n getTickPositions(step) {\n const options = this.options;\n const { axisDir: dir, lineSize, lineStart: start } = this.lineInfo();\n const divisions = this.getDivisions(step);\n const timeRange = dateDiff(options.max, options.min);\n const scale = lineSize / timeRange;\n const weekStartDay = options.weekStartDay || 0;\n\n const positions = [ start ];\n for (let i = 1; i < divisions; i++) {\n const date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\n const pos = start + dateDiff(date, options.min) * scale * dir;\n\n positions.push(round(pos, COORD_PRECISION));\n }\n\n return positions;\n }\n\n getMajorTickPositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n getMinorTickPositions() {\n return this.getTickPositions(this.options.minorUnit);\n }\n\n getSlot(a, b, limit) {\n return NumericAxis.prototype.getSlot.call(\n this, parseDate(this.intlService, a), parseDate(this.intlService, b), limit\n );\n }\n\n getValue(point) {\n const value = NumericAxis.prototype.getValue.call(this, point);\n\n return value !== null ? toDate(value) : null;\n }\n\n labelsCount() {\n return this.getDivisions(this.options.majorUnit);\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const offset = index * options.majorUnit;\n const weekStartDay = options.weekStartDay || 0;\n let date = options.min;\n\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n\n const unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n const text = this.axisLabelText(date, labelOptions, labelContext);\n return new AxisLabel(date, text, index, null, labelOptions);\n }\n\n translateRange(delta) {\n const options = this.options;\n const lineBox = this.lineBox();\n const { vertical, reverse } = options;\n const size = vertical ? lineBox.height() : lineBox.width();\n const range = this.range();\n const scale = size / dateDiff(range.max, range.min);\n\n let offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n let from = addTicks(options.min, offset);\n let to = addTicks(options.max, offset);\n\n return {\n min: from,\n max: to,\n offset: offset\n };\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n }\n\n pan(delta) {\n const range = this.translateRange(delta, true);\n const limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax, range.offset);\n\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n return {\n min: toDate(min),\n max: toDate(max)\n };\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const range = this.options.max - this.options.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = toDate(toTime(this.options.min) + minDelta);\n let max = toDate(toTime(this.options.max) - maxDelta);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = toDate(toTime(min) + MIN_VALUE_RANGE);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const range = this.scaleRange(scale, cursor);\n const min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n const max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n\n return {\n min,\n max\n };\n }\n}\n\nfunction timeUnits(delta) {\n let unit = HOURS;\n\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\n return unit;\n}\n\nfunction applyDefaults(seriesMin, seriesMax, options) {\n const min = options.min || seriesMin;\n const max = options.max || seriesMax;\n const baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n const baseUnitTime = TIME_PER_UNIT[baseUnit];\n const weekStartDay = options.weekStartDay || 0;\n const autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n const autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\n const userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n const majorUnit = userMajorUnit || ceil(\n autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\n baseUnitTime\n ) / baseUnitTime;\n const actualUnits = duration(autoMin, autoMax, baseUnit);\n const totalUnits = ceil(actualUnits, majorUnit);\n const unitsToAdd = totalUnits - actualUnits;\n const head = Math.floor(unitsToAdd / 2);\n const tail = unitsToAdd - head;\n\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\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\n return options;\n}\n\nsetDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: {\n dateFormats: DateLabelFormats\n }\n});\n\nexport default DateValueAxis;\n","\nimport Axis from './axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport createAxisTick from './utils/create-axis-tick';\nimport createAxisGridLine from './utils/create-axis-grid-line';\nimport limitCoordinate from './utils/limit-coordinate';\n\nimport { DEFAULT_PRECISION, BLACK } from '../common/constants';\nimport { deepExtend, defined, inArray, limitValue, round, setDefaultOptions, valueOrDefault } from '../common';\n\nconst DEFAULT_MAJOR_UNIT = 10;\nconst MIN_VALUE_RANGE = 1e-6;\n\nclass LogarithmicAxis extends Axis {\n constructor(seriesMin, seriesMax, options, chartService) {\n\n const axisOptions = deepExtend({ majorUnit: DEFAULT_MAJOR_UNIT, min: seriesMin, max: seriesMax }, options);\n const base = axisOptions.majorUnit;\n const autoMax = autoAxisMax(seriesMax, base);\n const autoMin = autoAxisMin(seriesMin, seriesMax, axisOptions);\n const range = initRange(autoMin, autoMax, axisOptions, options);\n\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n\n super(axisOptions, chartService);\n\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\n this.createLabels();\n }\n\n clone() {\n return new LogarithmicAxis(\n this.seriesMin,\n this.seriesMax,\n Object.assign({}, this.options),\n this.chartService\n );\n }\n\n startValue() {\n return this.options.min;\n }\n\n getSlot(a, b, limit) {\n const { options, logMin, logMax } = this;\n const { majorUnit: base, min, max } = options;\n const { axis, axisDir, lineBox, lineSize, lineStart } = this.lineInfo();\n const step = axisDir * (lineSize / (logMax - logMin));\n let start = valueOrDefault(a, b || 1);\n let end = valueOrDefault(b, a || 1);\n\n if (start <= 0 || end <= 0) {\n return null;\n }\n\n if (limit) {\n start = limitValue(start, min, max);\n end = limitValue(end, min, max);\n }\n\n start = log(start, base);\n end = log(end, base);\n\n const p1 = Math.min(start, end) - logMin;\n const p2 = Math.max(start, end) - logMin;\n\n const slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n }\n\n getValue(point) {\n const { options, logMin, logMax } = this;\n const { majorUnit: base } = options;\n const { axis, axisDir, lineStart, lineSize } = this.lineInfo();\n const step = ((logMax - logMin) / lineSize);\n const offset = axisDir * (point[axis] - lineStart);\n const valueOffset = offset * step;\n\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n\n const value = logMin + valueOffset;\n\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n translateRange(delta) {\n const { options, logMin, logMax } = this;\n const { reverse, vertical, majorUnit: base } = options;\n const lineBox = this.lineBox();\n const size = vertical ? lineBox.height() : lineBox.width();\n const scale = size / (logMax - logMin);\n let offset = round(delta / scale, DEFAULT_PRECISION);\n\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset),\n offset: offset\n };\n }\n\n labelsCount() {\n const floorMax = Math.floor(this.logMax);\n const count = Math.floor(floorMax - this.logMin) + 1;\n\n return count;\n }\n\n getMajorTickPositions() {\n const ticks = [];\n\n this.traverseMajorTicksPositions((position) => {\n ticks.push(position);\n }, { step: 1, skip: 0 });\n\n return ticks;\n }\n\n createTicks(lineGroup) {\n const options = this.options;\n const { majorTicks, minorTicks, vertical } = options;\n const mirror = options.labels.mirror;\n const lineBox = this.lineBox();\n const ticks = [];\n const tickLineOptions = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: vertical\n };\n\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\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n\n return ticks;\n }\n\n createGridLines(altAxis) {\n const options = this.options;\n const { minorGridLines, majorGridLines, vertical } = options;\n const lineBox = altAxis.lineBox();\n const lineOptions = {\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n vertical: vertical\n };\n const majorTicks = [];\n\n const container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n\n majorTicks.push(tickPosition);\n }\n }\n\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n\n return container.children;\n }\n\n traverseMajorTicksPositions(callback, tickOptions) {\n const { lineStart, step } = this.lineInfo();\n const { logMin, logMax } = this;\n\n for (let power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n let position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n\n traverseMinorTicksPositions(callback, tickOptions) {\n const { min, max, minorUnit, majorUnit: base } = this.options;\n const { lineStart, step } = this.lineInfo();\n const { logMin, logMax } = this;\n const start = Math.floor(logMin);\n\n for (let power = start; power < logMax; power++) {\n const minorOptions = this._minorIntervalOptions(power);\n for (let idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n const value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n const position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const power = Math.ceil(this.logMin + index);\n const value = Math.pow(this.options.majorUnit, power);\n const text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n return range.min <= value && value <= range.max;\n }\n\n pan(delta) {\n const range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n return {\n min: min,\n max: max\n };\n }\n\n scaleRange(scale, cursor) {\n const { majorUnit: base } = this.options;\n const logMin = log(this.options.min, base);\n const logMax = log(this.options.max, base);\n const position = Math.abs(this.pointOffset(cursor));\n const range = logMax - logMin;\n const delta = this.scaleToDelta(scale, range);\n const min = Math.pow(base, logMin + position * delta);\n let max = Math.pow(base, logMax - (1 - position) * delta);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = min + MIN_VALUE_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const range = this.scaleRange(scale, cursor);\n const { totalMin, totalMax } = this;\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\n };\n }\n\n _minorIntervalOptions(power) {\n const { minorUnit, majorUnit: base } = this.options;\n const value = Math.pow(base, power);\n const nextValue = Math.pow(base, power + 1);\n const difference = nextValue - value;\n const minorStep = difference / minorUnit;\n\n return {\n value: value,\n minorStep: minorStep\n };\n }\n\n lineInfo() {\n const info = super.lineInfo();\n info.step = info.axisDir * (info.lineSize / (this.logMax - this.logMin));\n\n return info;\n }\n}\n\nfunction initRange(autoMin, autoMax, axisOptions, options) {\n let { min, max } = axisOptions;\n\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction autoAxisMin(min, max, options) {\n const base = options.majorUnit;\n let 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\nfunction autoAxisMax(max, base) {\n const logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n let 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\n return autoMax;\n}\n\nfunction throwNegativeValuesError() {\n throw new Error(\"Non positive values cannot be used for a logarithmic axis\");\n}\n\nfunction log(x, base) {\n return Math.log(x) / Math.log(base);\n}\n\nsetDefaultOptions(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\nexport default LogarithmicAxis;\n","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport { append, map } from '../../common';\n\nconst GridLinesMixin = {\n createGridLines: function(altAxis) {\n const options = this.options;\n const radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n let gridLines = [];\n let skipMajor = false;\n let majorAngles, minorAngles;\n\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n\n gridLines = this.renderMajorGridLines(\n majorAngles, radius, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n\n append(gridLines, this.renderMinorGridLines(\n minorAngles, radius, options.minorGridLines, altAxis, skipMajor\n ));\n }\n\n return gridLines;\n },\n\n renderMajorGridLines: function(angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n\n renderMinorGridLines: function(angles, radius, options, altAxis, skipMajor) {\n const radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n\n renderGridLines: function(angles, radius, options, radiusCallback) {\n const style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n\n const center = this.box.center();\n const circle = new geom.Circle([ center.x, center.y ], radius);\n const container = this.gridLinesVisual();\n\n for (let i = 0; i < angles.length; i++) {\n const line = new draw.Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n\n line.moveTo(circle.center)\n .lineTo(circle.pointAt(angles[i] + 180));\n\n container.append(line);\n }\n\n return container.children;\n },\n\n gridLineAngles: function(altAxis, size, skip, step, skipAngles) {\n const divs = this.intervals(size, skip, step, skipAngles);\n const options = altAxis.options;\n const altAxisVisible = options.visible && (options.line || {}).visible !== false;\n\n return map(divs, (d) => {\n const alpha = this.intervalAngle(d);\n\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n};\n\nexport default GridLinesMixin;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport GridLinesMixin from './mixins/grid-lines-mixin';\nimport CategoryAxis from './category-axis';\nimport ShapeBuilder from './shape-builder';\nimport Ring from './ring';\nimport Box from './box';\n\nimport { COORD_PRECISION, ARC } from '../common/constants';\nimport { deepExtend, getSpacing, inArray, limitValue, map, rad, round, setDefaultOptions } from '../common';\n\nclass RadarCategoryAxis extends CategoryAxis {\n range() {\n return { min: 0, max: this.options.categories.length };\n }\n\n reflow(box) {\n this.box = box;\n this.reflowLabels();\n }\n\n lineBox() {\n return this.box;\n }\n\n reflowLabels() {\n const { labels, options: { labels: labelOptions } } = this;\n const skip = labelOptions.skip || 0;\n const step = labelOptions.step || 1;\n const measureBox = new Box();\n\n for (let i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n const labelBox = labels[i].box;\n\n labels[i].reflow(this.getSlot(skip + i * step).adjacentBox(\n 0, labelBox.width(), labelBox.height()\n ));\n }\n }\n\n intervals(size, skipOption, stepOption, skipAngles = false) {\n const options = this.options;\n const categories = options.categories.length;\n const divCount = categories / size || 1;\n const divAngle = 360 / divCount;\n const skip = skipOption || 0;\n const step = stepOption || 1;\n const divs = [];\n let angle = 0;\n\n for (let i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n\n angle = round(angle, COORD_PRECISION) % 360;\n\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n\n return divs;\n }\n\n majorIntervals() {\n return this.intervals(1);\n }\n\n minorIntervals() {\n return this.intervals(0.5);\n }\n\n intervalAngle(interval) {\n return (360 + interval + this.options.startAngle) % 360;\n }\n\n majorAngles() {\n return map(this.majorIntervals(), (interval) => this.intervalAngle(interval));\n }\n\n createLine() {\n return [];\n }\n\n majorGridLineAngles(altAxis) {\n const majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n }\n\n minorGridLineAngles(altAxis, skipMajor) {\n const { minorGridLines, majorGridLines } = this.options;\n const majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n }\n\n radiusCallback(radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n const minorAngle = rad(360 / (this.options.categories.length * 2));\n const minorRadius = Math.cos(minorAngle) * radius;\n const majorAngles = this.majorAngles();\n\n const radiusCallback = function(angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n\n return minorRadius;\n };\n return radiusCallback;\n }\n }\n\n createPlotBands() {\n const plotBands = this.options.plotBands || [];\n\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n for (let i = 0; i < plotBands.length; i++) {\n const band = plotBands[i];\n const slot = this.plotBandSlot(band);\n const singleSlot = this.getSlot(band.from);\n\n const head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n\n const tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n\n const ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: {\n opacity: band.opacity\n }\n });\n group.append(ring);\n }\n\n this.appendVisual(group);\n }\n\n plotBandSlot(band) {\n return this.getSlot(band.from, band.to - 1);\n }\n\n getSlot(from, to) {\n const options = this.options;\n const justified = options.justified;\n const box = this.box;\n const divs = this.majorAngles();\n const totalDivs = divs.length;\n const slotAngle = 360 / totalDivs;\n let fromValue = from;\n\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n let slotStart = divs[fromValue];\n\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n\n const toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n const slots = toValue - fromValue + 1;\n const angle = slotAngle * slots;\n\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n }\n\n slot(from, to) {\n const slot = this.getSlot(from, to);\n const startAngle = slot.startAngle + 180;\n const endAngle = startAngle + slot.angle;\n\n return new geom.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n }\n\n pointCategoryIndex(point) {\n const length = this.options.categories.length;\n let index = null;\n\n for (let i = 0; i < length; i++) {\n const slot = this.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n\n return index;\n }\n}\n\nsetDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n visible: true\n },\n justified: true\n});\ndeepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n\nexport default RadarCategoryAxis;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport GridLinesMixin from './mixins/grid-lines-mixin';\nimport RadarCategoryAxis from './radar-category-axis';\nimport NumericAxis from './numeric-axis';\nimport Axis from './axis';\nimport Ring from './ring';\nimport Box from './box';\n\nimport { BLACK } from '../common/constants';\nimport { deepExtend, deg, getSpacing, inArray, limitValue, setDefaultOptions } from '../common';\n\nclass PolarAxis extends Axis {\n constructor(options, chartService) {\n super(options, chartService);\n\n const instanceOptions = this.options;\n\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n }\n\n getDivisions(stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n }\n\n reflow(box) {\n this.box = box;\n this.reflowLabels();\n }\n\n reflowLabels() {\n const { options, labels, options: { labels: labelOptions } } = this;\n const skip = labelOptions.skip || 0;\n const step = labelOptions.step || 1;\n\n const measureBox = new Box();\n const divs = this.intervals(options.majorUnit, skip, step);\n\n for (let i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n const labelBox = labels[i].box;\n\n labels[i].reflow(this.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n }\n\n lineBox() {\n return this.box;\n }\n\n intervals(size, skipOption, stepOption, skipAngles = false) {\n const min = this.options.min;\n const divisions = this.getDivisions(size);\n const divs = [];\n const skip = skipOption || 0;\n const step = stepOption || 1;\n\n for (let i = skip; i < divisions; i += step) {\n const current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n\n return divs;\n }\n\n majorIntervals() {\n return this.intervals(this.options.majorUnit);\n }\n\n minorIntervals() {\n return this.intervals(this.options.minorUnit);\n }\n\n intervalAngle(i) {\n return (540 - i - this.options.startAngle) % 360;\n }\n\n createLine() {\n return [];\n }\n\n majorGridLineAngles(altAxis) {\n const majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n }\n\n minorGridLineAngles(altAxis, skipMajor) {\n const options = this.options;\n const { minorGridLines, majorGridLines } = options;\n const majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n }\n\n plotBandSlot(band) {\n return this.getSlot(band.from, band.to);\n }\n\n getSlot(a, b) {\n const { options, box } = this;\n const startAngle = options.startAngle;\n let start = limitValue(a, options.min, options.max);\n let end = limitValue(b || start, start, options.max);\n\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n\n if (end < start) {\n const tmp = start;\n start = end;\n end = tmp;\n }\n\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n }\n\n slot(from, to = from) {\n const options = this.options;\n const start = 360 - options.startAngle;\n const slot = this.getSlot(from, to);\n const min = Math.min(from, to);\n const max = Math.max(from, to);\n let startAngle, endAngle;\n\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n\n return new geom.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n }\n\n getValue(point) {\n const options = this.options;\n const center = this.box.center();\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n let theta = Math.round(deg(Math.atan2(dy, dx)));\n let start = options.startAngle;\n\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n\n return (theta + start + 360) % 360;\n }\n\n valueRange() {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n}\n\nsetDefaultOptions(PolarAxis, {\n type: \"polar\",\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: {\n color: \"#aaa\"\n }\n});\n\ndeepExtend(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\nexport default PolarAxis;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport ShapeBuilder from '../shape-builder';\nimport Ring from '../ring';\nimport Point from '../point';\n\nimport { ARC } from '../../common/constants';\nimport { append, deg, rad } from '../../common';\n\nconst RadarNumericAxisMixin = {\n options: {\n majorGridLines: {\n visible: true\n }\n },\n\n createPlotBands: function() {\n const { majorGridLines: { type }, plotBands = [] } = this.options;\n const altAxis = this.plotArea.polarAxis;\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n for (let i = 0; i < plotBands.length; i++) {\n const band = plotBands[i];\n const bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: {\n opacity: band.opacity\n }\n };\n\n const slot = this.getSlot(band.from, band.to, true);\n const ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n\n let shape;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = draw.Path.fromPoints(this.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n\n group.append(shape);\n }\n\n this.appendVisual(group);\n },\n\n plotBandPoints: function(ring, angles) {\n const innerPoints = [];\n const outerPoints = [];\n const center = [ ring.center.x, ring.center.y ];\n const innerCircle = new geom.Circle(center, ring.innerRadius);\n const outerCircle = new geom.Circle(center, ring.radius);\n\n for (let i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n\n return outerPoints.concat(innerPoints);\n },\n\n createGridLines: function(altAxis) {\n const options = this.options;\n const majorTicks = this.radarMajorGridLinePositions();\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n let gridLines = [];\n\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(\n center, majorTicks, majorAngles, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n const minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(\n center, minorTicks, majorAngles, options.minorGridLines\n ));\n }\n\n return gridLines;\n },\n\n renderGridLines: function(center, ticks, angles, options) {\n const style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n const { skip = 0, step = 0 } = options;\n const container = this.gridLinesVisual();\n\n for (let tickIx = skip; tickIx < ticks.length; tickIx += step) {\n const tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n const circle = new geom.Circle([ center.x, center.y ], tickRadius);\n if (options.type === ARC) {\n container.append(new draw.Circle(circle, style));\n } else {\n const line = new draw.Path(style);\n for (let angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n\n line.close();\n container.append(line);\n }\n }\n }\n\n return container.children;\n },\n\n getValue: function(point) {\n const lineBox = this.lineBox();\n const altAxis = this.plotArea.polarAxis;\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n const radius = point.distanceTo(center);\n let distance = radius;\n\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n const theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n\n majorAngles.sort(function(a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n\n // Solve triangle (center, point, axis X) using one side (radius) and two angles.\n // Angles are derived from triangle (center, point, gridline X)\n const midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n const alpha = angularDistance(theta, majorAngles[0]);\n const gamma = 90 - midAngle;\n const beta = 180 - alpha - gamma;\n\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n\n return this.axisType().prototype.getValue.call(\n this, new Point(lineBox.x1, lineBox.y2 - distance)\n );\n }\n};\n\nfunction angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n}\n\nexport default RadarNumericAxisMixin;","import NumericAxis from './numeric-axis';\nimport RadarNumericAxisMixin from './mixins/radar-numeric-axis-mixin';\n\nimport { deepExtend } from '../common';\n\nclass RadarNumericAxis extends NumericAxis {\n radarMajorGridLinePositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n radarMinorGridLinePositions() {\n const options = this.options;\n let minorSkipStep = 0;\n\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n }\n\n axisType() {\n return NumericAxis;\n }\n}\n\ndeepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n\nexport default RadarNumericAxis;","import LogarithmicAxis from './logarithmic-axis';\nimport RadarNumericAxisMixin from './mixins/radar-numeric-axis-mixin';\n\nimport { deepExtend } from '../common';\n\nclass RadarLogarithmicAxis extends LogarithmicAxis {\n radarMajorGridLinePositions() {\n const positions = [];\n\n this.traverseMajorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.majorGridLines);\n\n return positions;\n }\n\n radarMinorGridLinePositions() {\n const positions = [];\n\n this.traverseMinorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.minorGridLines);\n\n return positions;\n }\n\n axisType() {\n return LogarithmicAxis;\n }\n}\n\ndeepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n\nexport default RadarLogarithmicAxis;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { X, Y } from '../common/constants';\nimport { Class, last, round } from '../common';\n\nconst WEIGHT = 0.333;\nconst EXTREMUM_ALLOWED_DEVIATION = 0.01;\n\nclass CurveProcessor extends Class {\n\n constructor(closed) {\n super();\n\n this.closed = closed;\n }\n\n process(dataPoints) {\n const points = dataPoints.slice(0);\n const segments = [];\n let closed = this.closed;\n let length = points.length;\n\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n let p0 = points[0];\n let p1 = points[1];\n let p2 = points[2];\n\n segments.push(new geom.Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n const tangent = this.tangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n this.firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new geom.Segment(\n p1,\n this.secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n let initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n const controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n const tangent = this.tangent(p0, p1, X,Y);\n initialControlPoint = this.firstControlPoint(tangent, p0, p1, X, Y);\n }\n\n let cp0 = initialControlPoint;\n for (let idx = 0; idx <= length - 3; idx++) {\n this.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n const controlPoints = this.controlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints[1];\n\n const cp1 = controlPoints[0];\n segments.push(new geom.Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n const controlPoints = this.controlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new geom.Segment(\n p1,\n controlPoints[0]\n ));\n\n last(segments).controlOut(controlPoints[1]);\n segments.push(new geom.Segment(\n p2,\n lastControlPoint\n ));\n } else {\n const tangent = this.tangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new geom.Segment(\n p2,\n this.secondControlPoint(tangent, p1, p2, X, Y)\n ));\n }\n\n return segments;\n }\n\n removeDuplicates(idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n }\n\n invertAxis(p0, p1, p2) {\n let invertAxis = false;\n\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n invertAxis = true;\n }\n } else {\n const fn = this.lineFunction(p0,p1);\n const y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n }\n\n isLine(p0, p1, p2) {\n const fn = this.lineFunction(p0, p1);\n const y2 = this.calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n }\n\n lineFunction(p1, p2) {\n const a = (p2.y - p1.y) / (p2.x - p1.x);\n const b = p1.y - a * p1.x;\n\n return [ b, a ];\n }\n\n controlPoints(p0, p1, p2) {\n let xField = X;\n let yField = Y;\n let restrict = false;\n let switchOrientation = false;\n let tangent;\n\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n const monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\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\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n let sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n const secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n const oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n const firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n\n return [ secondControlPoint, firstControlPoint ];\n }\n\n restrictControlPoint(p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n }\n\n tangent(p0, p1, xField, yField) {\n const x = p1[xField] - p0[xField];\n const y = p1[yField] - p0[yField];\n let tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n }\n\n isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n }\n\n firstControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n }\n\n secondControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n }\n\n point(xValue, yValue, xField, yField) {\n const controlPoint = new geom.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n }\n\n calculateFunction(fn, x) {\n const length = fn.length;\n let result = 0;\n\n for (let i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n }\n}\n\nfunction numberSign(value) {\n return value <= 0 ? -1 : 1;\n}\n\nexport default CurveProcessor;","import { Class } from '../../common';\n\nclass ChartAxis extends Class {\n constructor(axis) {\n super();\n\n this._axis = axis;\n this.options = axis.options;\n }\n\n value(point) {\n const axis = this._axis;\n const value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n\n return value;\n }\n\n slot(from, to, limit = true) {\n return this._axis.slot(from, to, limit);\n }\n\n range() {\n return this._axis.range();\n }\n\n valueRange() {\n return this._axis.valueRange();\n }\n}\n\nexport default ChartAxis;","import ChartAxis from './chart-axis';\n\nexport default function findAxisByName(name, axes) {\n for (let idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n}","import findAxisByName from './find-axis-by-name';\n\nclass ChartPane {\n constructor(pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n }\n\n findAxisByName(name) {\n return findAxisByName(name, this._pane.axes);\n }\n}\n\nexport default ChartPane;","import { Class } from '../../common';\n\nclass ChartPlotArea extends Class {\n constructor(plotArea) {\n super();\n\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n}\n\nexport default ChartPlotArea;","import { isNumber } from '../../common';\n\nexport default function countNumbers(values) {\n const length = values.length;\n let count = 0;\n\n for (let i = 0; i < length; i++) {\n const num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n\n return count;\n}","import { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { defined, isNumber } from '../../common';\n\nimport countNumbers from '../utils/count-numbers';\n\nconst Aggregates = {\n min: function(values) {\n const length = values.length;\n let min = MAX_VALUE;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n\n return min === MAX_VALUE ? values[0] : min;\n },\n\n max: function(values) {\n const length = values.length;\n let max = MIN_VALUE;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n\n return max === MIN_VALUE ? values[0] : max;\n },\n\n sum: function(values) {\n const length = values.length;\n let sum = 0;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n\n return sum;\n },\n\n sumOrNull: function(values) {\n let result = null;\n\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n\n return result;\n },\n\n count: function(values) {\n const length = values.length;\n let count = 0;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n\n return count;\n },\n\n avg: function(values) {\n const count = countNumbers(values);\n let result = values[0];\n\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n\n return result;\n },\n\n first: function(values) {\n const length = values.length;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n\n return values[0];\n }\n};\n\nexport default Aggregates;","import { getter } from '../../common';\n\nexport default function getField(field, row) {\n if (row === null) {\n return row;\n }\n\n const get = getter(field, true);\n return get(row);\n}","import getField from './utils/get-field';\nimport { VALUE } from '../common/constants';\nimport { Class, defined } from '../common';\n\nclass SeriesBinder extends Class {\n\n constructor() {\n super();\n\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n }\n\n register(seriesTypes, valueFields = [ VALUE ], otherFields = {}) {\n\n for (let i = 0; i < seriesTypes.length; i++) {\n const type = seriesTypes[i];\n\n this._valueFields[type] = valueFields;\n this._otherFields[type] = otherFields;\n this._nullValue[type] = this._makeValue(valueFields, null);\n this._undefinedValue[type] = this._makeValue(valueFields, undefined);\n }\n }\n\n canonicalFields(series) {\n return this.valueFields(series).concat(this.otherFields(series));\n }\n\n valueFields(series) {\n return this._valueFields[series.type] || [ VALUE ];\n }\n\n otherFields(series) {\n return this._otherFields[series.type] || [ VALUE ];\n }\n\n bindPoint(series, pointIx, item) {\n const data = series.data;\n const pointData = defined(item) ? item : data[pointIx];\n const result = { valueFields: { value: pointData } };\n const valueFields = this.valueFields(series);\n const otherFields = this._otherFields[series.type];\n let fields, value;\n\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n const fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === \"object\") {\n const srcValueFields = this.sourceFields(series, valueFields);\n const srcPointFields = this.sourceFields(series, otherFields);\n\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n\n result.fields = fields || {};\n\n return result;\n }\n\n _makeValue(fields, initialValue) {\n const value = {};\n const length = fields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n\n return value;\n }\n\n _bindFromArray(array, fields) {\n const value = {};\n\n if (fields) {\n const length = Math.min(fields.length, array.length);\n\n for (let i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n\n return value;\n }\n\n _bindFromObject(object, fields, srcFields = fields) {\n const value = {};\n\n if (fields) {\n const length = fields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = fields[i];\n const srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n\n return value;\n }\n\n sourceFields(series, canonicalFields) {\n const sourceFields = [];\n\n if (canonicalFields) {\n const length = canonicalFields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = canonicalFields[i];\n const sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\n\n sourceFields.push(series[sourceFieldName] !== null ? (series[sourceFieldName] || fieldName) : null);\n }\n }\n\n return sourceFields;\n }\n}\n\nSeriesBinder.current = new SeriesBinder();\n\nexport default SeriesBinder;","import SeriesBinder from '../series-binder';\n\nimport { OBJECT } from '../../common/constants';\nimport { Class, defined, getter, isArray, isNumber } from '../../common';\n\nconst STD_ERR = \"stderr\";\nconst STD_DEV = \"stddev\";\nconst percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\nconst standardDeviationRegex = new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\");\n\nclass ErrorRangeCalculator extends Class {\n constructor(errorValue, series, field) {\n super();\n\n this.initGlobalRanges(errorValue, series, field);\n }\n\n initGlobalRanges(errorValue, series, field) {\n const data = series.data;\n const deviationMatch = standardDeviationRegex.exec(errorValue);\n\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n\n const average = this.getAverage(data);\n const deviation = this.getStandardDeviation(data, average, false);\n const multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n const errorRange = { low: average.value - deviation * multiple, high: average.value + deviation * multiple };\n\n this.globalRange = function() {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n const standardError = this.getStandardError(data, this.getAverage(data));\n\n this.globalRange = function(value) {\n return { low: value - standardError, high: value + standardError };\n };\n }\n }\n\n createValueGetter(series, field) {\n const data = series.data;\n const binder = SeriesBinder.current;\n const valueFields = binder.valueFields(series);\n const item = defined(data[0]) ? data[0] : {};\n let valueGetter;\n\n if (isArray(item)) {\n const index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter(\"[\" + index + \"]\");\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === OBJECT) {\n const srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n\n return valueGetter;\n }\n\n getErrorRange(pointValue, errorValue) {\n let low, high, value;\n\n if (!defined(errorValue)) {\n return null;\n }\n\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if ((value = percentRegex.exec(errorValue))) {\n const percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error(\"Invalid ErrorBar value: \" + errorValue);\n }\n\n return { low: low, high: high };\n }\n\n getStandardError(data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n }\n\n getStandardDeviation(data, average, isSample) {\n const length = data.length;\n const total = isSample ? average.count - 1 : average.count;\n let squareDifferenceSum = 0;\n\n for (let idx = 0; idx < length; idx++) {\n const value = this.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n\n return Math.sqrt(squareDifferenceSum / total);\n }\n\n getAverage(data) {\n const length = data.length;\n let sum = 0;\n let count = 0;\n\n for (let idx = 0; idx < length; idx++) {\n const value = this.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n\n return {\n value: sum / count,\n count: count\n };\n }\n}\n\nexport default ErrorRangeCalculator;","import { support } from '@progress/kendo-drawing';\n\nconst browser = support.browser || {};\n\nconst INITIAL_ANIMATION_DURATION = 600;\nconst FADEIN = \"fadeIn\";\n\nconst GLASS = \"glass\";\nconst BORDER_BRIGHTNESS = 0.8;\nconst TOOLTIP_OFFSET = 5;\nconst START_SCALE = browser.msie ? 0.001 : 0;\nconst ERROR_LOW_FIELD = \"errorLow\";\nconst ERROR_HIGH_FIELD = \"errorHigh\";\nconst X_ERROR_LOW_FIELD = \"xErrorLow\";\nconst X_ERROR_HIGH_FIELD = \"xErrorHigh\";\nconst Y_ERROR_LOW_FIELD = \"yErrorLow\";\nconst Y_ERROR_HIGH_FIELD = \"yErrorHigh\";\nconst LINE_MARKER_SIZE = 8;\nconst ZERO = \"zero\";\nconst INTERPOLATE = \"interpolate\";\nconst GAP = \"gap\";\nconst ABOVE = \"above\";\nconst BELOW = \"below\";\n\nconst SMOOTH = \"smooth\";\nconst STEP = \"step\";\n\nconst AREA = \"area\";\nconst BAR = \"bar\";\nconst BOX_PLOT = \"boxPlot\";\nconst BUBBLE = \"bubble\";\nconst BULLET = \"bullet\";\nconst CANDLESTICK = \"candlestick\";\nconst COLUMN = \"column\";\nconst DONUT = \"donut\";\nconst FUNNEL = \"funnel\";\nconst HEATMAP = \"heatmap\";\nconst HORIZONTAL_WATERFALL = \"horizontalWaterfall\";\nconst LINE = \"line\";\nconst OHLC = \"ohlc\";\nconst PIE = \"pie\";\nconst POLAR_AREA = \"polarArea\";\nconst POLAR_LINE = \"polarLine\";\nconst POLAR_SCATTER = \"polarScatter\";\nconst RADAR_AREA = \"radarArea\";\nconst RADAR_COLUMN = \"radarColumn\";\nconst RADAR_LINE = \"radarLine\";\nconst RANGE_AREA = \"rangeArea\";\nconst RANGE_BAR = \"rangeBar\";\nconst RANGE_COLUMN = \"rangeColumn\";\nconst SCATTER = \"scatter\";\nconst SCATTER_LINE = \"scatterLine\";\nconst VERTICAL_AREA = \"verticalArea\";\nconst VERTICAL_BOX_PLOT = \"verticalBoxPlot\";\nconst VERTICAL_BULLET = \"verticalBullet\";\nconst VERTICAL_LINE = \"verticalLine\";\nconst VERTICAL_RANGE_AREA = \"verticalRangeArea\";\nconst WATERFALL = \"waterfall\";\nconst EQUALLY_SPACED_SERIES = [\n BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, VERTICAL_BOX_PLOT,\n BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n];\n\nconst LEGEND_ITEM_CLICK = \"legendItemClick\";\nconst LEGEND_ITEM_HOVER = \"legendItemHover\";\nconst LEGEND_ITEM_LEAVE = \"legendItemLeave\";\nconst SERIES_CLICK = \"seriesClick\";\nconst SERIES_HOVER = \"seriesHover\";\nconst SERIES_OVER = \"seriesOver\";\nconst SERIES_LEAVE = \"seriesLeave\";\nconst PLOT_AREA_CLICK = \"plotAreaClick\";\nconst PLOT_AREA_HOVER = \"plotAreaHover\";\nconst PLOT_AREA_LEAVE = \"plotAreaLeave\";\nconst DRAG = \"drag\";\nconst DRAG_END = \"dragEnd\";\nconst DRAG_START = \"dragStart\";\nconst ZOOM_START = \"zoomStart\";\nconst ZOOM = \"zoom\";\nconst ZOOM_END = \"zoomEnd\";\nconst SELECT_START = \"selectStart\";\nconst SELECT = \"select\";\nconst SELECT_END = \"selectEnd\";\nconst RENDER = \"render\";\nconst SHOW_TOOLTIP = \"showTooltip\";\nconst HIDE_TOOLTIP = \"hideTooltip\";\nconst PANE_RENDER = \"paneRender\";\n\nconst LOGARITHMIC = \"log\";\nconst CATEGORY = \"category\";\n\nconst INSIDE_END = \"insideEnd\";\nconst INSIDE_BASE = \"insideBase\";\nconst OUTSIDE_END = \"outsideEnd\";\n\nconst MOUSEWHEEL = \"DOMMouseScroll mousewheel\";\nconst MOUSEWHEEL_DELAY = 150;\nconst MOUSEWHEEL_ZOOM_RATE = 0.3;\n\nexport {\n INITIAL_ANIMATION_DURATION, FADEIN,\n LEGEND_ITEM_CLICK, LEGEND_ITEM_HOVER, LEGEND_ITEM_LEAVE,\n SERIES_CLICK, SERIES_HOVER, SERIES_OVER, SERIES_LEAVE, GLASS,\n BORDER_BRIGHTNESS, TOOLTIP_OFFSET,\n START_SCALE, ERROR_LOW_FIELD, ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE, INTERPOLATE, ZERO,\n SMOOTH, STEP, CATEGORY, FUNNEL,\n BAR, CANDLESTICK, PIE, COLUMN, AREA,\n VERTICAL_BULLET, BOX_PLOT, OHLC, WATERFALL, LINE,\n BULLET, VERTICAL_LINE, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA,\n RANGE_COLUMN, VERTICAL_BOX_PLOT, RANGE_BAR, HORIZONTAL_WATERFALL,\n SCATTER, SCATTER_LINE, BUBBLE, RADAR_AREA, RADAR_LINE,\n RADAR_COLUMN, POLAR_LINE, POLAR_AREA, POLAR_SCATTER,\n RENDER, PLOT_AREA_CLICK, PLOT_AREA_HOVER, PLOT_AREA_LEAVE,\n LOGARITHMIC, DRAG, DRAG_START, DRAG_END, ZOOM_START, ZOOM, ZOOM_END,\n SELECT_START, SELECT, SELECT_END, PANE_RENDER, GAP,\n DONUT, INSIDE_END, INSIDE_BASE, OUTSIDE_END,\n MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE,\n SHOW_TOOLTIP, HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES, ABOVE, BELOW,\n HEATMAP\n};\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point, Box } from '../../core';\n\nimport { FADEIN, INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { setDefaultOptions, alignPathToPixel } from '../../common';\n\nconst DEFAULT_ERROR_BAR_WIDTH = 4;\n\nclass ErrorBarBase extends ChartElement {\n constructor(low, high, isVertical, chart, series, options) {\n super(options);\n\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n }\n\n reflow(targetBox) {\n const endCaps = this.options.endCaps;\n const isVertical = this.isVertical;\n const axis = this.getAxis();\n const valueBox = axis.getSlot(this.low, this.high);\n const centerBox = targetBox.center();\n const capsWidth = this.getCapsWidth(targetBox, isVertical);\n const capValue = isVertical ? centerBox.x : centerBox.y;\n const capStart = capValue - capsWidth;\n const capEnd = capValue + capsWidth;\n let linePoints;\n\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1),\n new Point(capEnd, valueBox.y1),\n new Point(capStart, valueBox.y2),\n new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart),\n new Point(valueBox.x1, capEnd),\n new Point(valueBox.x2, capStart),\n new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n\n this.linePoints = linePoints;\n }\n\n getCapsWidth(box, isVertical) {\n const boxSize = isVertical ? box.width() : box.height();\n const capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n\n return capsWidth;\n }\n\n createVisual() {\n const options = this.options;\n const visual = options.visual;\n\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: () => {\n this.createDefaultVisual();\n const defaultVisual = this.visual;\n delete this.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n }\n\n createDefaultVisual() {\n const { options, linePoints } = this;\n const lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n\n super.createVisual();\n\n for (let idx = 0; idx < linePoints.length; idx += 2) {\n const line = new draw.Path(lineOptions)\n .moveTo(linePoints[idx].x, linePoints[idx].y)\n .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n\n alignPathToPixel(line);\n this.visual.append(line);\n }\n }\n}\n\nsetDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: {\n width: 2\n },\n zIndex: 1\n});\n\nexport default ErrorBarBase;","import ErrorBarBase from './error-bar-base';\n\nclass CategoricalErrorBar extends ErrorBarBase {\n getAxis() {\n const axis = this.chart.seriesValueAxis(this.series);\n\n return axis;\n }\n}\n\nexport default CategoricalErrorBar;","import { inArray, isFunction, isObject, valueOrDefault } from '../../common';\n\nconst MAX_EXPAND_DEPTH = 5;\n\nexport default function evalOptions(options, context, state = {}, dryRun = false) {\n const defaults = state.defaults = state.defaults || {};\n const depth = state.depth = state.depth || 0;\n let needsEval = false;\n\n state.excluded = state.excluded || [];\n\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n\n for (let property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n const propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n\n return needsEval;\n}","export default function categoriesCount(series) {\n const seriesCount = series.length;\n let categories = 0;\n\n for (let i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n\n return categories;\n}","import ErrorRangeCalculator from './error-bars/error-range-calculator';\nimport CategoricalErrorBar from './error-bars/categorical-error-bar';\n\nimport SeriesBinder from './series-binder';\nimport { ERROR_LOW_FIELD, ERROR_HIGH_FIELD } from './constants';\n\nimport evalOptions from './utils/eval-options';\nimport categoriesCount from './utils/categories-count';\n\nimport { ChartElement, Box } from '../core';\n\nimport { VALUE, STRING, MIN_VALUE, MAX_VALUE } from '../common/constants';\nimport { convertableToNumber, deepExtend, defined, isNumber, last, setDefaultOptions, sparseArrayLimits } from '../common';\n\nclass CategoricalChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n\n // Value axis ranges grouped by axis name, e.g.:\n // primary: { min: 0, max: 1 }\n this.valueAxisRanges = {};\n\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n\n this.render();\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({ }, defaults, {\n vertical: !this.options.invertAxes\n }, series);\n }\n\n return options;\n }\n\n plotValue(point) {\n if (!point) {\n return 0;\n }\n\n if (this.options.isStacked100 && isNumber(point.value)) {\n const categoryIx = point.categoryIx;\n const categoryPoints = this.categoryPoints[categoryIx];\n const otherValues = [];\n let categorySum = 0;\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n if (other) {\n const stack = point.series.stack;\n const otherStack = other.series.stack;\n\n if ((stack && otherStack) && stack.group !== otherStack.group) {\n continue;\n }\n\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n\n return point.value;\n }\n\n plotRange(point, startValue = 0) {\n const categoryPoints = this.categoryPoints[point.categoryIx];\n\n if (this.options.isStacked) {\n let plotValue = this.plotValue(point);\n const positive = plotValue >= 0;\n let prevValue = startValue;\n let isStackedBar = false;\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n const stack = point.series.stack;\n const otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === STRING && stack !== otherStack) {\n continue;\n }\n\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n\n const otherValue = this.plotValue(other);\n if ((otherValue >= 0 && positive) ||\n (otherValue < 0 && !positive)) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n\n if (this.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n\n if (isStackedBar) {\n prevValue -= startValue;\n }\n\n return [ prevValue, plotValue ];\n }\n\n const series = point.series;\n const valueAxis = this.seriesValueAxis(series);\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, convertableToNumber(point.value) ? point.value : axisCrossingValue ];\n }\n\n stackLimits(axisName, stackName) {\n let min = MAX_VALUE;\n let max = MIN_VALUE;\n\n for (let i = 0; i < this.categoryPoints.length; i++) {\n const categoryPoints = this.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n\n for (let pIx = 0; pIx < categoryPoints.length; pIx++) {\n const point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n const to = this.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n\n return { min: min, max: max };\n }\n\n updateStackRange() {\n const { isStacked, series: chartSeries } = this.options;\n const limitsCache = {};\n\n if (isStacked) {\n for (let i = 0; i < chartSeries.length; i++) {\n const series = chartSeries[i];\n const axisName = series.axis;\n const key = axisName + series.stack;\n\n let limits = limitsCache[key];\n if (!limits) {\n limits = this.stackLimits(axisName, series.stack);\n\n const errorTotals = this.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, sparseArrayLimits(errorTotals.positive).max);\n }\n }\n\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n\n if (limits) {\n this.valueAxisRanges[axisName] = limits;\n }\n }\n }\n }\n\n addErrorBar(point, data, categoryIx) {\n const { value, series, seriesIx } = point;\n const errorBars = point.options.errorBars;\n const lowValue = data.fields[ERROR_LOW_FIELD];\n const highValue = data.fields[ERROR_HIGH_FIELD];\n let errorRange;\n\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] ||\n new ErrorRangeCalculator(errorBars.value, series, VALUE);\n\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n }\n\n addPointErrorBar(point, categoryIx) {\n const isVertical = !this.options.invertAxes;\n const options = point.options.errorBars;\n let { series, low, high } = point;\n\n if (this.options.isStacked) {\n const stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n const fields = { categoryIx: categoryIx, series: series };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n\n const errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [ errorBar ];\n point.append(errorBar);\n }\n\n stackedErrorRange(point, categoryIx) {\n const plotValue = this.plotRange(point, 0)[1] - point.value;\n const low = point.low + plotValue;\n const high = point.high + plotValue;\n\n this.errorTotals = this.errorTotals || { positive: [], negative: [] };\n\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n\n return { low: low, high: high };\n }\n\n addValue(data, fields) {\n const { categoryIx, series, seriesIx } = fields;\n\n let categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n let seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n\n const point = this.createPoint(data, fields);\n if (point) {\n Object.assign(point, fields);\n\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n\n this.updateRange(data.valueFields, fields);\n }\n\n evalPointOptions(options, value, category, categoryIx, series, seriesIx) {\n const state = { defaults: series._defaults, excluded: [ \"data\", \"aggregate\", \"_events\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\" ] };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n\n return pointOptions;\n }\n\n updateRange(data, fields) {\n const axisName = fields.series.axis;\n const value = data.value;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n }\n\n seriesValueAxis(series) {\n const plotArea = this.plotArea;\n const axisName = series.axis;\n const axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate value axis with name \" + axisName);\n }\n\n return axis;\n }\n\n reflow(targetBox) {\n const categorySlots = this.categorySlots = [];\n const chartPoints = this.points;\n const categoryAxis = this.categoryAxis;\n let pointIx = 0;\n\n this.traverseDataPoints((data, fields) => {\n const { categoryIx, series: currentSeries } = fields;\n\n const valueAxis = this.seriesValueAxis(currentSeries);\n const point = chartPoints[pointIx++];\n\n let categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot =\n this.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n\n if (point) {\n const plotRange = this.plotRange(point, valueAxis.startValue());\n const valueSlot = this.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n const pointSlot = this.pointSlot(categorySlot, valueSlot);\n\n point.aboveAxis = this.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n\n if (this.options.isStacked100) {\n point.percentage = this.plotValue(point);\n }\n\n this.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n\n this.box = targetBox;\n }\n\n valueSlot(valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n }\n\n limitPoints() {\n const categoryPoints = this.categoryPoints;\n const points = categoryPoints[0].concat(last(categoryPoints));\n for (let idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this.limitPoint(points[idx]);\n }\n }\n }\n\n limitPoint(point) {\n const limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\n }\n\n aboveAxis(point, valueAxis) {\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n const value = point.value;\n\n return valueAxis.options.reverse ?\n value < axisCrossingValue : value >= axisCrossingValue;\n }\n\n categoryAxisCrossingValue(valueAxis) {\n const categoryAxis = this.categoryAxis;\n const options = valueAxis.options;\n const crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n }\n\n reflowPoint(point, pointSlot) {\n point.reflow(pointSlot);\n }\n\n reflowCategories() { }\n\n pointSlot(categorySlot, valueSlot) {\n const options = this.options;\n const invertAxes = options.invertAxes;\n const slotX = invertAxes ? valueSlot : categorySlot;\n const slotY = invertAxes ? categorySlot : valueSlot;\n\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n categorySlot(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n }\n\n traverseDataPoints(callback) {\n const series = this.options.series;\n const count = categoriesCount(series);\n const seriesCount = series.length;\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this._outOfRangeCallback(series[seriesIx], \"_outOfRangeMinPoint\", seriesIx, callback);\n }\n\n for (let categoryIx = 0; categoryIx < count; categoryIx++) {\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const currentCategory = this.categoryAxis.categoryAt(categoryIx);\n const pointData = this._bindPoint(currentSeries, seriesIx, categoryIx);\n\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx\n });\n }\n }\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this._outOfRangeCallback(series[seriesIx], \"_outOfRangeMaxPoint\", seriesIx, callback);\n }\n }\n\n _outOfRangeCallback(series, field, seriesIx, callback) {\n const outOfRangePoint = series[field];\n if (outOfRangePoint) {\n const categoryIx = outOfRangePoint.categoryIx;\n const pointData = this._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n }\n\n _bindPoint(series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n\n let bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n\n let data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n\n return data;\n }\n\n formatPointValue(point, format) {\n if (point.value === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value);\n }\n\n pointValue(data) {\n return data.valueFields.value;\n }\n}\n\nsetDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n});\n\nexport default CategoricalChart;\n","import { SERIES_CLICK, SERIES_HOVER, SERIES_LEAVE, SERIES_OVER } from '../constants';\nimport { eventElement } from '../../common';\n\nconst PointEventsMixin = {\n click: function(chart, e) {\n return chart.trigger(\n SERIES_CLICK,\n this.eventArgs(e)\n );\n },\n\n hover: function(chart, e) {\n return chart.trigger(\n SERIES_HOVER,\n this.eventArgs(e)\n );\n },\n\n over: function(chart, e) {\n return chart.trigger(\n SERIES_OVER,\n this.eventArgs(e)\n );\n },\n\n out: function(chart, e) {\n return chart.trigger(\n SERIES_LEAVE,\n this.eventArgs(e)\n );\n },\n\n eventArgs: function(e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n};\n\nexport default PointEventsMixin;","import { Note } from '../../core';\nimport { defined } from '../../common';\n\nconst NoteMixin = {\n createNote: function() {\n const options = this.options.notes;\n const text = this.noteText || options.label.text;\n\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n\n this.append(this.note);\n }\n }\n};\n\nexport default NoteMixin;","import { geometry as geom, Color } from '@progress/kendo-drawing';\n\nimport { ChartElement, TextBox, ShapeElement, Box, Point } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport { LINE_MARKER_SIZE, FADEIN, INITIAL_ANIMATION_DURATION, BORDER_BRIGHTNESS, TOOLTIP_OFFSET, ABOVE, BELOW } from '../constants';\n\nimport { WHITE, CIRCLE, CENTER, TOP, BOTTOM, LEFT, HIGHLIGHT_ZINDEX } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, valueOrDefault, getSpacing } from '../../common';\n\nclass LinePoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n }\n\n render() {\n const { markers, labels } = this.options;\n\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n\n if (labels.visible) {\n const labelTemplate = getTemplate(labels);\n const pointData = this.pointData();\n let labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText,\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels),\n pointData\n );\n this.append(this.label);\n }\n\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n }\n\n markerBorder() {\n const options = this.options.markers;\n const background = options.background;\n const border = deepExtend({ color: this.color }, options.border);\n\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n\n return border;\n }\n\n createVisual() {}\n\n createMarker() {\n const options = this.options.markers;\n const marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n return marker;\n }\n\n markerBox() {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n\n return this.marker.box;\n }\n\n reflow(targetBox) {\n const { options, aboveAxis } = this;\n const vertical = options.vertical;\n\n this.render();\n\n this.box = targetBox;\n const childBox = targetBox.clone();\n\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n\n this.reflowLabel(childBox);\n\n if (this.errorBars) {\n for (let i = 0; i < this.errorBars.length; i++) {\n this.errorBars[i].reflow(childBox);\n }\n }\n\n if (this.note) {\n let noteTargetBox = this.markerBox();\n\n if (!(options.markers.visible && options.markers.size)) {\n const center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n\n this.note.reflow(noteTargetBox);\n }\n }\n\n reflowLabel(box) {\n const { options, label } = this;\n let anchor = options.labels.position;\n\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n }\n\n createHighlight() {\n const markers = this.options.highlight.markers;\n const defaultColor = this.markerBorder().color;\n const options = this.options.markers;\n const size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n\n const shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n\n return shadow.getElement();\n }\n\n highlightVisual() {\n return (this.marker || {}).visual;\n }\n\n highlightVisualArgs() {\n const marker = this.marker;\n let visual, rect;\n\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n const size = this.options.markers.size;\n const halfSize = size / 2;\n const center = this.box.center();\n rect = new geom.Rect([ center.x - halfSize, center.y - halfSize ], [ size, size ]);\n }\n\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n }\n\n tooltipAnchor() {\n const markerBox = this.markerBox();\n const clipBox = this.owner.pane.clipBox();\n const showTooltip = !clipBox || clipBox.overlaps(markerBox);\n\n if (showTooltip) {\n const x = markerBox.x2 + TOOLTIP_OFFSET;\n const horizontalAlign = LEFT;\n let y, verticalAlign;\n\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n const markerBox = this.markerBox();\n return markerBox.overlaps(box);\n }\n\n unclipElements() {\n if (this.label) {\n this.label.options.noclip = true;\n }\n\n if (this.note) {\n this.note.options.noclip = true;\n }\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n };\n }\n}\n\nLinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: \"#fff\",\n width: 2\n }\n },\n zIndex: HIGHLIGHT_ZINDEX\n },\n errorBars: {\n line: {\n width: 1\n }\n }\n};\n\ndeepExtend(LinePoint.prototype, PointEventsMixin);\ndeepExtend(LinePoint.prototype, NoteMixin);\n\nexport default LinePoint;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement } from '../../core';\n\nimport { defined, isFunction, setDefaultOptions } from '../../common';\n\nclass LineSegment extends ChartElement {\n constructor(linePoints, series, seriesIx) {\n super();\n\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n }\n\n points() {\n return this.toGeometryPoints(this.linePoints);\n }\n\n toGeometryPoints(points) {\n const result = [];\n for (let i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n\n return result;\n }\n\n createVisual() {\n const customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: () => {\n this.segmentVisual();\n\n return this.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n }\n\n segmentVisual() {\n const { options, series } = this;\n let { color, _defaults: defaults } = series;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n const line = draw.Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n if (options.closed) {\n line.close();\n }\n\n this.visual = line;\n }\n\n aliasFor(e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n}\n\nsetDefaultOptions(LineSegment, {\n closed: false\n});\n\nexport default LineSegment;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { last } from '../../common';\nimport { X, Y } from '../../common/constants';\n\nconst StepLineMixin = {\n calculateStepPoints: function(points) {\n const categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n const { justified, vertical, reverse } = categoryAxis.options;\n\n const stepAxis = vertical ? X : Y;\n const axis = vertical ? Y : X;\n const stepDir = reverse ? 2 : 1;\n const dir = stepDir;\n\n let previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n const result = [ previousPoint ];\n\n for (let idx = 1; idx < points.length; idx++) {\n const point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n const stepPoint = new geom.Point();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n\n result.push(stepPoint, point);\n }\n\n previousPoint = point;\n }\n\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n\n return result;\n\n }\n};\n\nfunction toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n const box = lintPoint.box;\n const result = new geom.Point();\n\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n\n return result;\n}\n\nexport default StepLineMixin;","import LineSegment from './line-segment';\nimport StepLineMixin from './step-line-mixin';\nimport { deepExtend } from '../../common';\n\nclass StepLineSegment extends LineSegment {\n points() {\n return this.calculateStepPoints(this.linePoints);\n }\n}\n\ndeepExtend(StepLineSegment.prototype, StepLineMixin);\n\nexport default StepLineSegment;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport LineSegment from './line-segment';\n\nimport { CurveProcessor } from '../../core';\n\nimport { isFunction } from '../../common';\n\nclass SplineSegment extends LineSegment {\n segmentVisual() {\n const series = this.series;\n const defaults = series._defaults;\n let color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n const curveProcessor = new CurveProcessor(this.options.closed);\n const segments = curveProcessor.process(this.points());\n const curve = new draw.Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n curve.segments.push.apply(curve.segments, segments);\n\n this.visual = curve;\n }\n}\n\nexport default SplineSegment;","import { ZERO, INTERPOLATE } from '../constants';\n\nimport { Point } from '../../core';\nimport { MAX_VALUE } from '../../common/constants';\nimport { defined } from '../../common';\n\nconst LineChartMixin = {\n renderSegments: function() {\n const { options, seriesPoints } = this;\n const series = options.series;\n const seriesCount = seriesPoints.length;\n let lastSegment;\n\n this._segments = [];\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const sortedPoints = this.sortPoints(seriesPoints[seriesIx]);\n const pointCount = sortedPoints.length;\n let linePoints = [];\n\n for (let pointIx = 0; pointIx < pointCount; pointIx++) {\n const point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n\n if (linePoints.length > 1) {\n lastSegment = this.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this._addSegment(lastSegment);\n }\n }\n\n this.children.unshift.apply(this.children, this._segments);\n },\n\n _addSegment: function(segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n\n sortPoints: function(points) {\n return points;\n },\n\n seriesMissingValues: function(series) {\n const missingValues = series.missingValues;\n const assumeZero = !missingValues && this.options.isStacked;\n\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n\n getNearestPoint: function(x, y, seriesIx) {\n const target = new Point(x, y);\n const allPoints = this.seriesPoints[seriesIx];\n let nearestPointDistance = MAX_VALUE;\n let nearestPoint;\n\n for (let i = 0; i < allPoints.length; i++) {\n const point = allPoints[i];\n\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n const pointBox = point.box;\n const pointDistance = pointBox.center().distanceTo(target);\n\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n\n return nearestPoint;\n }\n};\n\nexport default LineChartMixin;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { interpolateValue, setDefaultOptions } from '../../common';\n\nclass ClipAnimation extends draw.Animation {\n setup() {\n this._setEnd(this.options.box.x1);\n }\n\n step(pos) {\n const box = this.options.box;\n this._setEnd(interpolateValue(box.x1, box.x2, pos));\n }\n\n _setEnd(x) {\n const element = this.element;\n const segments = element.segments;\n const topRight = segments[1].anchor();\n const bottomRight = segments[2].anchor();\n\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n}\n\nsetDefaultOptions(ClipAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(\"clip\", ClipAnimation);\n\nexport default ClipAnimation;","import { defined } from '../../common';\n\nexport default function anyHasZIndex(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n}","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ClipAnimation from '../animations/clip-animation';\nimport anyHasZIndex from '../utils/any-has-z-index';\nimport { defined } from '../../common';\n\nconst ClipAnimationMixin = {\n createAnimation: function() {\n const root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n const box = root.size();\n const clipPath = draw.Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, {\n box: box\n });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n\n _setChildrenAnimation: function(clipPath) {\n const points = this.animationPoints();\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n};\n\nexport default ClipAnimationMixin;","import CategoricalChart from '../categorical-chart';\nimport LinePoint from './line-point';\nimport LineSegment from './line-segment';\nimport StepLineSegment from './step-line-segment';\nimport SplineSegment from './spline-segment';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\n\nimport { ZERO, SMOOTH, STEP } from '../constants';\n\nimport { deepExtend, defined, isFunction } from '../../common';\n\nclass LineChart extends CategoricalChart {\n render() {\n\n super.render();\n\n this.updateStackRange();\n this.renderSegments();\n }\n\n pointType() {\n return LinePoint;\n }\n\n createPoint(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const missingValues = this.seriesMissingValues(series);\n let value = data.valueFields.value;\n\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n\n let pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n let color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n plotRange(point) {\n let plotValue = this.plotValue(point);\n\n if (this.options.isStacked) {\n const categoryIx = point.categoryIx;\n const categoryPoints = this.categoryPoints[categoryIx];\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n plotValue += this.plotValue(other);\n\n if (this.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n\n }\n\n return [ plotValue, plotValue ];\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\ndeepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n\nexport default LineChart;\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\nimport LineSegment from '../line-chart/line-segment';\n\nimport { append, deepExtend, isFunction, last } from '../../common';\n\nclass AreaSegment extends LineSegment {\n constructor(linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n super(linePoints, currentSeries, seriesIx);\n\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n }\n\n createVisual() {\n const series = this.series;\n const defaults = series._defaults;\n const lineOptions = series.line || {};\n let color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n this.visual = new draw.Group({\n zIndex: series.zIndex\n });\n\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: \"butt\"\n }, lineOptions)\n });\n }\n }\n\n strokeSegments() {\n let segments = this._strokeSegments;\n\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n\n return segments;\n }\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.points());\n }\n\n stackSegments() {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n\n return this.createStackSegments(this.stackPoints);\n }\n\n createStackSegments(stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n }\n\n segmentsFromPoints(points) {\n return points.map((point) => new geom.Segment(point));\n }\n\n createStroke(style) {\n const stroke = new draw.Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n\n this.visual.append(stroke);\n }\n\n hasStackSegment() {\n return this.prevSegment || (this.stackPoints && this.stackPoints.length);\n }\n\n createFill(style) {\n const strokeSegments = this.strokeSegments();\n const fillSegments = strokeSegments.slice(0);\n const hasStackSegments = this.hasStackSegment();\n\n if (hasStackSegments) {\n const stackSegments = this.stackSegments();\n\n append(fillSegments, stackSegments);\n }\n\n const fill = new draw.Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n\n this.visual.append(fill);\n }\n\n fillToAxes(fillPath) {\n const chart = this.parent;\n const invertAxes = chart.options.invertAxes;\n const valueAxis = chart.seriesValueAxis(this.series);\n const crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n const endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n const segments = this.strokeSegments();\n const firstPoint = segments[0].anchor();\n const lastPoint = last(segments).anchor();\n let end = invertAxes ? endSlot.x1 : endSlot.y1;\n\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y)\n .lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end)\n .lineTo(firstPoint.x, end);\n }\n }\n}\n\nexport default AreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport AreaSegment from './area-segment';\n\nimport { deepExtend } from '../../common';\n\nclass StepAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n }\n\n createStackSegments(stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n}\n\ndeepExtend(StepAreaSegment.prototype, StepLineMixin);\n\nexport default StepAreaSegment;","import { geometry as geom } from '@progress/kendo-drawing';\nimport { CurveProcessor } from '../../core';\n\nimport AreaSegment from './area-segment';\n\nclass SplineAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n const curveProcessor = new CurveProcessor(this.options.closed);\n const linePoints = this.points();\n\n return curveProcessor.process(linePoints);\n }\n\n createStackSegments() {\n const strokeSegments = this.strokeSegments();\n const stackSegments = [];\n for (let idx = strokeSegments.length - 1; idx >= 0; idx--) {\n const segment = strokeSegments[idx];\n stackSegments.push(new geom.Segment(\n segment.anchor(),\n segment.controlOut(),\n segment.controlIn()\n ));\n }\n\n return stackSegments;\n }\n}\n\nexport default SplineAreaSegment;","import LineChart from '../line-chart/line-chart';\nimport LinePoint from '../line-chart/line-point';\n\nimport AreaSegment from './area-segment';\nimport StepAreaSegment from './step-area-segment';\nimport SplineAreaSegment from './spline-area-segment';\n\nimport { STEP, SMOOTH, ZERO } from '../constants';\n\nclass AreaChart extends LineChart {\n createSegment(linePoints, currentSeries, seriesIx, prevSegment) {\n const isStacked = this.options.isStacked;\n const style = (currentSeries.line || {}).style;\n let previousSegment;\n\n let stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n const missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== \"gap\") {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n\n let pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n\n reflow(targetBox) {\n super.reflow(targetBox);\n\n const stackPoints = this._stackPoints;\n if (stackPoints) {\n for (let idx = 0; idx < stackPoints.length; idx++) {\n const stackPoint = stackPoints[idx];\n const pointSlot = this.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n }\n\n _gapStackPoints(linePoints, seriesIx, style) {\n const seriesPoints = this.seriesPoints;\n let startIdx = linePoints[0].categoryIx;\n let length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n\n const endIdx = startIdx + length;\n const pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n const stackPoints = [];\n\n this._stackPoints = this._stackPoints || [];\n for (let categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n const pointIx = categoryIx + pointOffset;\n let currentSeriesIx = seriesIx;\n let point;\n\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n\n stackPoints.push(point);\n\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n const gapStackPoint = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n\n return stackPoints;\n }\n\n _previousSegmentPoint(categoryIx, pointIx, segmentIx, seriesIdx) {\n const seriesPoints = this.seriesPoints;\n let index = seriesIdx;\n let point;\n\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n\n return point;\n }\n\n _createGapStackPoint(categoryIx) {\n const options = this.pointOptions({}, 0);\n const point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n\n return point;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\nexport default AreaChart;\n","import { MIN_VALUE, MAX_VALUE } from '../common/constants';\nimport { Class } from '../common';\n\nclass AxisGroupRangeTracker extends Class {\n constructor() {\n super();\n\n this.axisRanges = {};\n }\n\n update(chartAxisRanges) {\n const axisRanges = this.axisRanges;\n\n for (let axisName in chartAxisRanges) {\n const chartRange = chartAxisRanges[axisName];\n let range = axisRanges[axisName];\n axisRanges[axisName] = range = range || { min: MAX_VALUE, max: MIN_VALUE };\n\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n }\n\n reset(axisName) {\n this.axisRanges[axisName] = undefined;\n }\n\n query(axisName) {\n return this.axisRanges[axisName];\n }\n}\n\nexport default AxisGroupRangeTracker;","import { ChartElement, TextBox, Box } from '../../core';\nimport { FADEIN, INITIAL_ANIMATION_DURATION, INSIDE_END, INSIDE_BASE, OUTSIDE_END } from '../constants';\n\nimport { CENTER, TOP, BOTTOM, LEFT, RIGHT, X, Y, BLACK } from '../../common/constants';\nimport { getSpacing, setDefaultOptions } from '../../common';\n\nclass BarLabel extends ChartElement {\n constructor(content, options, pointData) {\n super(options);\n\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n }\n\n createVisual() {\n this.textBox.options.noclip = this.options.noclip;\n }\n\n reflow(targetBox) {\n const options = this.options;\n const { vertical, aboveAxis } = options;\n const text = this.children[0];\n const textOptions = text.options;\n const box = text.box;\n const padding = text.options.padding;\n let labelBox = targetBox;\n\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x1, targetBox.y1 - box.height(),\n targetBox.x2, targetBox.y1\n );\n } else {\n labelBox = new Box(\n targetBox.x1, targetBox.y2,\n targetBox.x2, targetBox.y2 + box.height()\n );\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x2, targetBox.y1,\n targetBox.x2 + box.width(), targetBox.y2\n );\n } else {\n labelBox = new Box(\n targetBox.x1 - box.width(), targetBox.y1,\n targetBox.x1, targetBox.y2\n );\n }\n }\n }\n\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right =\n (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom =\n (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n\n text.reflow(labelBox);\n }\n\n alignToClipBox(clipBox) {\n const vertical = this.options.vertical;\n const field = vertical ? Y : X;\n const start = field + \"1\";\n const end = field + \"2\";\n const text = this.children[0];\n const parentBox = this.parent.box;\n\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n const targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n\n this.reflow(targetBox);\n }\n }\n}\n\nsetDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: \"\",\n border: {\n width: 1,\n color: \"\"\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n});\n\nexport default BarLabel;","export default function hasGradientOverlay(options) {\n const overlay = options.overlay;\n\n return overlay && overlay.gradient && overlay.gradient !== \"none\";\n}","import { drawing as draw, Color } from '@progress/kendo-drawing';\n\nimport BarLabel from './bar-label';\n\nimport { BORDER_BRIGHTNESS, TOOLTIP_OFFSET } from '../constants';\n\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { ChartElement, Point } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { WHITE, LEFT, RIGHT, BOTTOM, TOP } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, getTemplate, valueOrDefault } from '../../common';\n\nconst BAR_ALIGN_MIN_WIDTH = 6;\n\nclass Bar extends ChartElement {\n constructor(value, options) {\n super();\n\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createLabel();\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n }\n\n createLabel() {\n const options = this.options;\n const labels = options.labels;\n\n if (labels.visible) {\n const pointData = this.pointData();\n let labelTemplate = getTemplate(labels);\n let labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n this.label = new BarLabel(labelText,\n deepExtend({\n vertical: options.vertical\n },\n labels\n ), pointData);\n this.append(this.label);\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n reflow(targetBox) {\n this.render();\n\n const label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n if (this.errorBars) {\n for (let i = 0; i < this.errorBars.length; i++) {\n this.errorBars[i].reflow(targetBox);\n }\n }\n }\n\n createVisual() {\n const { box, options } = this;\n const customVisual = options.visual;\n\n if (this.visible !== false) {\n super.createVisual();\n\n if (customVisual) {\n const visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: () => {\n const group = new draw.Group();\n this.createRect(group);\n return group;\n },\n options: options\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n }\n\n createRect(visual) {\n const options = this.options;\n const border = options.border;\n const strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n const rect = this.box.toRect();\n\n rect.size.width = Math.round(rect.size.width);\n\n const path = this.rectVisual = draw.Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n\n const width = this.box.width();\n const height = this.box.height();\n\n const size = options.vertical ? width : height;\n\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n\n // Fixes lineJoin issue in firefox when the joined lines are parallel\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = \"round\";\n }\n }\n\n visual.append(path);\n\n if (hasGradientOverlay(options)) {\n const overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay));\n\n visual.append(overlay);\n }\n }\n\n createHighlight(style) {\n const highlight = draw.Path.fromRect(this.box.toRect(), style);\n\n return alignPathToPixel(highlight);\n }\n\n highlightVisual() {\n return this.rectVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n }\n\n getBorderColor() {\n const color = this.color;\n const border = this.options.border;\n const brightness = border._brightness || BORDER_BRIGHTNESS;\n let borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n\n return borderColor;\n }\n\n tooltipAnchor() {\n const { options, box, aboveAxis } = this;\n const clipBox = this.owner.pane.clipBox() || box;\n let horizontalAlign = LEFT;\n let verticalAlign = TOP;\n let x, y;\n\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n const x1 = Math.max(box.x1, clipBox.x1);\n const x2 = Math.min(box.x2, clipBox.x2);\n\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n };\n }\n}\n\ndeepExtend(Bar.prototype, PointEventsMixin);\ndeepExtend(Bar.prototype, NoteMixin);\n\nBar.prototype.defaults = {\n border: {\n width: 1\n },\n vertical: true,\n overlay: {\n gradient: \"glass\"\n },\n labels: {\n visible: false,\n format: \"{0}\"\n },\n opacity: 1,\n notes: {\n label: {}\n }\n};\n\nexport default Bar;","export function forEach(elements, callback) {\n elements.forEach(callback);\n}\n\nexport function forEachReverse(elements, callback) {\n const length = elements.length;\n\n for (let idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n}","import { ChartElement } from '../../core';\n\nimport { X, Y } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\nimport { forEach, forEachReverse } from './utils';\n\nclass ClusterLayout extends ChartElement {\n constructor(options) {\n super(options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n }\n\n reflow(box) {\n const { vertical, gap, spacing } = this.options;\n const children = this.children;\n const count = children.length;\n const axis = vertical ? Y : X;\n const slots = count + gap + (spacing * (count - 1));\n const slotSize = (vertical ? box.height() : box.width()) / slots;\n let position = box[axis + 1] + slotSize * (gap / 2);\n\n this.forEach(children, (child, idx) => {\n const childBox = (child.box || box).clone();\n\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n\n child.reflow(childBox);\n if (idx < count - 1) {\n position += (slotSize * spacing);\n }\n\n position += slotSize;\n });\n }\n}\n\nsetDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n});\n\nexport default ClusterLayout;","import { ChartElement, Box } from '../../core';\n\nimport { X, Y } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\n\nclass StackWrap extends ChartElement {\n reflow(targetBox) {\n const positionAxis = this.options.vertical ? X : Y;\n const children = this.children;\n const childrenCount = children.length;\n let box = this.box = new Box();\n\n for (let i = 0; i < childrenCount; i++) {\n const currentChild = children[i];\n\n if (currentChild.visible !== false) {\n const childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n\n if (i === 0) {\n box = this.box = childBox.clone();\n }\n\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n}\n\nsetDefaultOptions(StackWrap, {\n vertical: true\n});\n\nexport default StackWrap;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport Bar from './bar';\n\nimport CategoricalChart from '../categorical-chart';\nimport ClusterLayout from '../layout/cluster-layout';\nimport StackWrap from '../layout/stack-wrap';\nimport { BAR, OUTSIDE_END, INSIDE_END } from '../constants';\n\nimport anyHasZIndex from '../utils/any-has-z-index';\n\nimport { STRING, X, Y } from '../../common/constants';\nimport { defined, isFunction, setDefaultOptions } from '../../common';\n\nclass BarChart extends CategoricalChart {\n\n render() {\n super.render();\n this.updateStackRange();\n }\n\n pointType() {\n return Bar;\n }\n\n clusterType() {\n return ClusterLayout;\n }\n\n stackType() {\n return StackWrap;\n }\n\n stackLimits(axisName, stackName) {\n const limits = super.stackLimits(axisName, stackName);\n\n return limits;\n }\n\n createPoint(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { options, children } = this;\n const isStacked = options.isStacked;\n const value = this.pointValue(data);\n let pointOptions = this.pointOptions(series, seriesIx);\n\n const labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n\n pointOptions.isStacked = isStacked;\n\n let color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const pointType = this.pointType();\n const point = new pointType(value, pointOptions);\n point.color = color;\n\n let cluster = children[categoryIx];\n if (!cluster) {\n const clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (isStacked) {\n const stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n\n return point;\n }\n\n getStackWrap(series, cluster) {\n const stack = series.stack;\n const stackGroup = stack ? stack.group || stack : stack;\n const wraps = cluster.children;\n let stackWrap;\n\n if (typeof stackGroup === STRING) {\n for (let i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n\n if (!stackWrap) {\n const stackType = this.stackType();\n stackWrap = new stackType({\n vertical: !this.options.invertAxes\n });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n\n return stackWrap;\n }\n\n categorySlot(categoryAxis, categoryIx, valueAxis) {\n const options = this.options;\n const categorySlot = categoryAxis.getSlot(categoryIx);\n const startValue = valueAxis.startValue();\n\n if (options.isStacked) {\n const zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n const stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n\n return categorySlot;\n }\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n createAnimation() {\n this._setAnimationOptions();\n super.createAnimation();\n\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n }\n\n _setChildrenAnimation() {\n const points = this.points;\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n const pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this.options.animation;\n point.createAnimation();\n }\n }\n }\n\n _setAnimationOptions() {\n const options = this.options;\n const animation = options.animation || {};\n let origin;\n\n if (options.isStacked) {\n const valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n\n animation.origin = new geom.Point(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n}\n\nsetDefaultOptions(BarChart, {\n animation: {\n type: BAR\n }\n});\n\nexport default BarChart;","import { drawing as draw, Color } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point } from '../../core';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { TOOLTIP_OFFSET } from '../constants';\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { WHITE, LEFT, TOP } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, setDefaultOptions, valueOrDefault } from '../../common';\n\nclass Candlestick extends ChartElement {\n constructor(value, options) {\n super(options);\n this.value = value;\n }\n\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n const ocSlot = valueAxis.getSlot(value.open, value.close);\n const lhSlot = valueAxis.getSlot(value.low, value.high);\n\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n\n this.realBody = ocSlot;\n\n const mid = lhSlot.center().x;\n const points = [];\n\n points.push([ [ mid, lhSlot.y1 ], [ mid, ocSlot.y1 ] ]);\n points.push([ [ mid, ocSlot.y2 ], [ mid, lhSlot.y2 ] ]);\n\n this.lines = points;\n\n this.box = lhSlot.clone().wrap(ocSlot);\n\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n\n this.reflowNote();\n }\n\n reflowNote() {\n if (this.note) {\n this.note.reflow(this.box);\n }\n }\n\n createVisual() {\n super.createVisual();\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(\n this._mainVisual\n );\n\n this.createOverlay();\n }\n\n mainVisual(options) {\n const group = new draw.Group();\n\n this.createBody(group, options);\n this.createLines(group, options);\n\n return group;\n }\n\n createBody(container, options) {\n const body = draw.Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n alignPathToPixel(body);\n container.append(body);\n\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay)));\n }\n }\n\n createLines(container, options) {\n this.drawLines(container, options, this.lines, options.line);\n }\n\n drawLines(container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n\n const lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: \"butt\"\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = draw.Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n }\n\n getBorderColor() {\n const border = this.options.border;\n let borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n\n return borderColor;\n }\n\n createOverlay() {\n const overlay = draw.Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n\n this.visual.append(overlay);\n }\n\n createHighlight() {\n const highlight = this.options.highlight;\n const normalColor = this.color;\n\n this.color = highlight.color || this.color;\n const overlay = this.mainVisual(\n deepExtend({}, this.options, {\n line: {\n color: this.getBorderColor()\n }\n }, highlight)\n );\n this.color = normalColor;\n\n return overlay;\n }\n\n highlightVisual() {\n return this._mainVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n }\n\n tooltipAnchor() {\n const box = this.box;\n const clipBox = this.owner.pane.clipBox() || box;\n\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n}\n\nsetDefaultOptions(Candlestick, {\n vertical: true,\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"
\" +\n \"{4:d} |
\" +\n \"Open: | {0:C} |
\" +\n \"High: | {1:C} |
\" +\n \"Low: | {2:C} |
\" +\n \"Close: | {3:C} |
\" +\n \"
\"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n }\n});\n\ndeepExtend(Candlestick.prototype, PointEventsMixin);\ndeepExtend(Candlestick.prototype, NoteMixin);\n\nexport default Candlestick;","import countNumbers from './count-numbers';\n\nexport default function areNumbers(values) {\n return countNumbers(values) === values.length;\n}","import CategoricalChart from '../categorical-chart';\nimport ClusterLayout from '../layout/cluster-layout';\nimport Candlestick from './candlestick';\n\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport { CANDLESTICK } from '../constants';\nimport areNumbers from '../utils/are-numbers';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { deepExtend, isFunction } from '../../common';\n\nclass CandlestickChart extends CategoricalChart {\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n addValue(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { children, options } = this;\n const value = data.valueFields;\n const valueParts = this.splitValue(value);\n const hasValue = areNumbers(valueParts);\n const dataItem = series.data[categoryIx];\n let categoryPoints = this.categoryPoints[categoryIx];\n let point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n }\n\n pointType() {\n return Candlestick;\n }\n\n createPoint(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const pointType = this.pointType();\n const value = data.valueFields;\n let pointOptions = deepExtend({}, series);\n let color = data.fields.color || series.color;\n\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.vertical = !this.options.invertAxes;\n\n const point = new pointType(value, pointOptions);\n point.color = color;\n\n return point;\n }\n\n splitValue(value) {\n return [ value.low, value.open, value.close, value.high ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n const parts = this.splitValue(value);\n let axisRange = this.valueAxisRanges[axisName];\n\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format,\n value.open, value.high,\n value.low, value.close, point.category\n );\n }\n\n animationPoints() {\n return this.points;\n }\n}\n\ndeepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n\nexport default CandlestickChart;","import { Color } from '@progress/kendo-drawing';\n\nimport Candlestick from '../candlestick-chart/candlestick';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport { ShapeElement } from '../../core';\n\nimport { LINE_MARKER_SIZE, BORDER_BRIGHTNESS } from '../constants';\n\nimport { CROSS, CIRCLE, WHITE } from '../../common/constants';\nimport { deepExtend, defined, setDefaultOptions } from '../../common';\n\nclass BoxPlot extends Candlestick {\n constructor(value, options) {\n super(value, options);\n\n this.createNote();\n }\n\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n let whiskerSlot, boxSlot;\n\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n\n const medianSlot = valueAxis.getSlot(value.median);\n\n if (value.mean) {\n const meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n }\n\n reflowBoxSlot(box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n }\n\n reflowWhiskerSlot(box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n }\n\n calcMeanPoints(box, meanSlot) {\n return [\n [ [ box.x1, meanSlot.y1 ], [ box.x2, meanSlot.y1 ] ]\n ];\n }\n\n calcWhiskerPoints(boxSlot, whiskerSlot) {\n const mid = whiskerSlot.center().x;\n return [ [\n [ mid - 5, whiskerSlot.y1 ], [ mid + 5, whiskerSlot.y1 ],\n [ mid, whiskerSlot.y1 ], [ mid, boxSlot.y1 ]\n ], [\n [ mid - 5, whiskerSlot.y2 ], [ mid + 5, whiskerSlot.y2 ],\n [ mid, whiskerSlot.y2 ], [ mid, boxSlot.y2 ]\n ] ];\n }\n\n calcMedianPoints(box, medianSlot) {\n return [\n [ [ box.x1, medianSlot.y1 ], [ box.x2, medianSlot.y1 ] ]\n ];\n }\n\n renderOutliers(options) {\n const value = this.value;\n const outliers = value.outliers || [];\n const outerFence = Math.abs(value.q3 - value.q1) * 3;\n const elements = [];\n let markers = options.markers || {};\n\n for (let i = 0; i < outliers.length; i++) {\n const outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n let markersBorder = deepExtend({}, markers.border);\n\n if (!defined(markersBorder.color)) {\n if (defined(this.color)) {\n markersBorder.color = this.color;\n } else {\n markersBorder.color =\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n\n const shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n\n shape.value = outlierValue;\n\n elements.push(shape);\n }\n\n this.reflowOutliers(elements);\n return elements;\n }\n\n reflowOutliers(outliers) {\n const valueAxis = this.owner.seriesValueAxis(this.options);\n const center = this.box.center();\n\n for (let i = 0; i < outliers.length; i++) {\n const outlierValue = outliers[i].value;\n const markerBox = valueAxis.getSlot(outlierValue);\n\n if (this.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n\n this.box = this.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n }\n\n mainVisual(options) {\n const group = super.mainVisual(options);\n const outliers = this.renderOutliers(options);\n\n for (let i = 0; i < outliers.length; i++) {\n const element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n\n return group;\n }\n\n createLines(container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n }\n\n getBorderColor() {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n\n if (this.color) {\n return this.color;\n }\n\n return super.getBorderColor();\n }\n}\n\nsetDefaultOptions(BoxPlot, {\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n median: {\n color: \"#f6f6f6\"\n },\n mean: {\n width: 2,\n dashType: \"dash\",\n color: \"#f6f6f6\"\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"{6:d} |
\" +\n \"Lower: | {0:C} |
\" +\n \"Q1: | {1:C} |
\" +\n \"Median: | {2:C} |
\" +\n \"Mean: | {5:C} |
\" +\n \"Q3: | {3:C} |
\" +\n \"Upper: | {4:C} |
\" +\n \"
\"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n});\n\ndeepExtend(BoxPlot.prototype, PointEventsMixin);\n\nexport default BoxPlot;","import BoxPlot from './box-plot';\n\nclass VerticalBoxPlot extends BoxPlot {\n reflowBoxSlot(box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n }\n\n reflowWhiskerSlot(box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n }\n\n calcMeanPoints(box, meanSlot) {\n return [\n [ [ meanSlot.x1, box.y1 ], [ meanSlot.x1, box.y2 ] ]\n ];\n }\n\n calcWhiskerPoints(boxSlot, whiskerSlot) {\n const mid = whiskerSlot.center().y;\n return [ [\n [ whiskerSlot.x1, mid - 5 ], [ whiskerSlot.x1, mid + 5 ],\n [ whiskerSlot.x1, mid ], [ boxSlot.x1, mid ]\n ], [\n [ whiskerSlot.x2, mid - 5 ], [ whiskerSlot.x2, mid + 5 ],\n [ whiskerSlot.x2, mid ], [ boxSlot.x2, mid ]\n ] ];\n }\n\n calcMedianPoints(box, medianSlot) {\n return [\n [ [ medianSlot.x1, box.y1 ], [ medianSlot.x1, box.y2 ] ]\n ];\n }\n}\n\nexport default VerticalBoxPlot;","import CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport VerticalBoxPlot from './vertical-box-plot';\nimport BoxPlot from './box-plot';\nimport ClusterLayout from '../layout/cluster-layout';\n\nimport areNumbers from '../utils/are-numbers';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { defined } from '../../common';\n\nclass BoxPlotChart extends CandlestickChart {\n addValue(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { children, options } = this;\n const value = data.valueFields;\n const valueParts = this.splitValue(value);\n const hasValue = areNumbers(valueParts);\n const dataItem = series.data[categoryIx];\n let categoryPoints = this.categoryPoints[categoryIx];\n let point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n }\n\n pointType() {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n\n return BoxPlot;\n }\n\n splitValue(value) {\n return [\n value.lower, value.q1, value.median,\n value.q3, value.upper\n ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n let axisRange = this.valueAxisRanges[axisName];\n let parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format,\n value.lower, value.q1, value.median,\n value.q3, value.upper, value.mean, point.category\n );\n }\n\n filterOutliers(items) {\n const length = (items || []).length;\n const result = [];\n\n for (let i = 0; i < length; i++) {\n const item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n\n return result;\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\nexport default BoxPlotChart;\n","import ErrorBarBase from './error-bar-base';\n\nclass ScatterErrorBar extends ErrorBarBase {\n getAxis() {\n const axes = this.chart.seriesAxes(this.series);\n const axis = this.isVertical ? axes.y : axes.x;\n\n return axis;\n }\n}\n\nexport default ScatterErrorBar;","import { defined } from '../../common';\n\nexport default function hasValue(value) {\n return defined(value) && value !== null;\n}","import { ChartElement, Box } from '../../core';\n\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport ErrorRangeCalculator from '../error-bars/error-range-calculator';\nimport ScatterErrorBar from '../error-bars/scatter-error-bar';\nimport LinePoint from '../line-chart/line-point';\nimport CategoricalChart from '../categorical-chart';\n\nimport hasValue from '../utils/has-value';\nimport evalOptions from '../utils/eval-options';\n\nimport { deepExtend, isNumber, isString, defined, isFunction, setDefaultOptions } from '../../common';\nimport { X, Y, MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { parseDate } from '../../date-utils';\n\nclass ScatterChart extends ChartElement {\n constructor(plotArea, options) {\n\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n }\n\n _initFields() {\n // X and Y axis ranges grouped by name, e.g.:\n // primary: { min: 0, max: 1 }\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n addErrorBar(point, field, fields) {\n const value = point.value[field];\n const valueErrorField = field + \"Value\";\n const lowField = field + \"ErrorLow\";\n const highField = field + \"ErrorHigh\";\n const { seriesIx, series } = fields;\n const errorBars = point.options.errorBars;\n const lowValue = fields[lowField];\n const highValue = fields[highField];\n\n if (isNumber(value)) {\n let errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n }\n\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || { x: [], y: [] };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] ||\n new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n }\n\n addPointErrorBar(errorRange, point, field) {\n const { low, high } = errorRange;\n const { series, options: { errorBars: options } } = point;\n const isVertical = field === Y;\n const item = {};\n\n point[field + \"Low\"] = low;\n point[field + \"High\"] = high;\n\n point.errorBars = point.errorBars || [];\n const errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n }\n\n addValue(value, fields) {\n const { x, y } = value;\n const seriesIx = fields.seriesIx;\n const series = this.options.series[seriesIx];\n const missingValues = this.seriesMissingValues(series);\n const seriesPoints = this.seriesPoints[seriesIx];\n\n let pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n\n let point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n Object.assign(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n }\n\n seriesMissingValues(series) {\n return series.missingValues;\n }\n\n createMissingValue() {}\n\n updateRange(value, series) {\n const intlService = this.chartService.intl;\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n let { x, y } = value;\n let xAxisRange = this.xAxisRanges[xAxisName];\n let yAxisRange = this.yAxisRanges[yAxisName];\n\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] =\n xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] =\n yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n }\n\n evalPointOptions(options, value, fields) {\n const { series, seriesIx } = fields;\n const state = { defaults: series._defaults, excluded: [ \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\" ] };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n\n return pointOptions;\n }\n\n pointType() {\n return LinePoint;\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n let pointOptions = this.pointOptions(series, fields.seriesIx);\n let color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n seriesAxes(series) {\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n const plotArea = this.plotArea;\n const xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n const yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return {\n x: xAxis,\n y: yAxis\n };\n }\n\n reflow(targetBox) {\n const chartPoints = this.points;\n const limit = !this.options.clip;\n let pointIx = 0;\n\n\n this.traverseDataPoints((value, fields) => {\n const point = chartPoints[pointIx++];\n const seriesAxes = this.seriesAxes(fields.series);\n const slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n const slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n\n if (point) {\n if (slotX && slotY) {\n const pointSlot = this.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n }\n\n pointSlot(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n traverseDataPoints(callback) {\n const { options: { series }, seriesPoints } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields: value, fields } = this._bindPoint(currentSeries, seriesIx, pointIx);\n\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this\n }, fields));\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n}\nsetDefaultOptions(ScatterChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}\"\n },\n labels: {\n format: \"{0}, {1}\"\n },\n clip: true\n});\ndeepExtend(ScatterChart.prototype, ClipAnimationMixin, {\n _bindPoint: CategoricalChart.prototype._bindPoint\n});\n\nexport default ScatterChart;","import { drawing as draw, geometry as geom, Color } from '@progress/kendo-drawing';\n\nimport LinePoint from '../line-chart/line-point';\nimport { BORDER_BRIGHTNESS } from '../constants';\n\nimport { CENTER } from '../../common/constants';\nimport { deepExtend } from '../../common';\n\nclass Bubble extends LinePoint {\n constructor(value, options) {\n super(value, options);\n\n this.category = value.category;\n }\n\n createHighlight() {\n const highlight = this.options.highlight;\n const border = highlight.border;\n const markers = this.options.markers;\n const center = this.box.center();\n const radius = (markers.size + markers.border.width + border.width) / 2;\n const highlightGroup = new draw.Group();\n const shadow = new draw.Circle(new geom.Circle([ center.x, center.y + radius / 5 + border.width / 2 ], radius + border.width / 2), {\n stroke: {\n color: 'none'\n },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [ {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n }, {\n offset: 1,\n color: markers.background,\n opacity: 0\n } ]\n })\n });\n const overlay = new draw.Circle(new geom.Circle([ center.x, center.y ], radius), {\n stroke: {\n color: border.color ||\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n\n highlightGroup.append(shadow, overlay);\n\n return highlightGroup;\n }\n}\n\nBubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: {\n position: CENTER\n },\n highlight: {\n opacity: 1,\n border: {\n color: \"#fff\",\n width: 2,\n opacity: 1\n }\n }\n});\n\nBubble.prototype.defaults.highlight.zIndex = undefined;\n\nexport default Bubble;","import ScatterChart from '../scatter-charts/scatter-chart';\nimport Bubble from './bubble';\n\nimport { INITIAL_ANIMATION_DURATION, BUBBLE } from '../constants';\n\nimport { MIN_VALUE, CIRCLE } from '../../common/constants';\nimport { deepExtend, isFunction, setDefaultOptions, valueOrDefault } from '../../common';\n\nclass BubbleChart extends ScatterChart {\n _initFields() {\n this._maxSize = MIN_VALUE;\n super._initFields();\n }\n\n addValue(value, fields) {\n if (value.size !== null && (value.size > 0 || (value.size < 0 && fields.series.negativeValues.visible))) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n super.addValue(value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n }\n\n reflow(box) {\n this.updateBubblesSize(box);\n super.reflow(box);\n }\n\n pointType() {\n return Bubble;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n const pointsCount = series.data.length;\n const delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n const animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n\n let color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(\n series.negativeValues.color, color\n );\n }\n\n let pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.markers.background = color;\n\n const point = new Bubble(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n updateBubblesSize(box) {\n const { options: { series } } = this;\n const boxSize = Math.min(box.width(), box.height());\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesPoints = this.seriesPoints[seriesIx];\n const minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n const maxSize = currentSeries.maxSize || boxSize * 0.2;\n const minR = minSize / 2;\n const maxR = maxSize / 2;\n const minArea = Math.PI * minR * minR;\n const maxArea = Math.PI * maxR * maxR;\n const areaRange = maxArea - minArea;\n const areaRatio = areaRange / this._maxSize;\n\n for (let pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n const point = seriesPoints[pointIx];\n if (point) {\n const area = Math.abs(point.value.size) * areaRatio;\n const radius = Math.sqrt((minArea + area) / Math.PI);\n const baseZIndex = valueOrDefault(point.options.zIndex, 0);\n const zIndex = baseZIndex + (1 - radius / maxR);\n\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: {\n zIndex: zIndex + 1\n }\n });\n }\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n }\n\n createAnimation() {}\n createVisual() {}\n}\n\nsetDefaultOptions(BubbleChart, {\n tooltip: {\n format: \"{3}\"\n },\n labels: {\n format: \"{3}\"\n }\n});\n\nexport default BubbleChart;","import { ShapeElement } from '../../core';\nimport { deepExtend } from '../../common';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nclass Target extends ShapeElement { }\n\ndeepExtend(Target.prototype, PointEventsMixin);\n\nexport default Target;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport Target from './target';\n\nimport { ChartElement, Box } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport Bar from '../bar-chart/bar';\n\nimport { WHITE, TOP, RIGHT } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, setDefaultOptions, valueOrDefault } from '../../common';\n\nclass Bullet extends ChartElement {\n constructor(value, options) {\n super(options);\n\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n }\n\n render() {\n const options = this.options;\n\n if (!this._rendered) {\n this._rendered = true;\n\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n\n this.append(this.target);\n }\n\n this.createNote();\n }\n }\n\n reflow(box) {\n this.render();\n\n const { options, target, owner: chart } = this;\n const invertAxes = options.invertAxes;\n const valueAxis = chart.seriesValueAxis(this.options);\n const categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n const targetValueSlot = valueAxis.getSlot(this.value.target);\n const targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n const targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n\n if (target) {\n const targetSlot = new Box(\n targetSlotX.x1, targetSlotY.y1,\n targetSlotX.x2, targetSlotY.y2\n );\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n\n if (this.note) {\n this.note.reflow(box);\n }\n\n this.box = box;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n const body = draw.Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n this.bodyVisual = body;\n\n alignPathToPixel(body);\n this.visual.append(body);\n }\n\n createAnimation() {\n if (this.bodyVisual) {\n this.animation = draw.Animation.create(\n this.bodyVisual, this.options.animation\n );\n }\n }\n\n createHighlight(style) {\n return draw.Path.fromRect(this.box.toRect(), style);\n }\n\n highlightVisual() {\n return this.bodyVisual;\n }\n\n highlightVisualArgs() {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n}\n\nBullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n\nsetDefaultOptions(Bullet, {\n border: {\n width: 1\n },\n vertical: false,\n opacity: 1,\n target: {\n shape: \"\",\n border: {\n width: 0,\n color: \"green\"\n },\n line: {\n width: 2\n }\n },\n tooltip: {\n format: \"Current: {0}
Target: {1}\"\n }\n});\n\ndeepExtend(Bullet.prototype, PointEventsMixin);\ndeepExtend(Bullet.prototype, NoteMixin);\n\nexport default Bullet;","\nimport CategoricalChart from '../categorical-chart';\nimport BarChart from '../bar-chart/bar-chart';\nimport Bullet from './bullet';\nimport ClusterLayout from '../layout/cluster-layout';\nimport { BAR } from '../constants';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { deepExtend, defined, isArray, isFunction, isObject, setDefaultOptions } from '../../common';\n\nclass BulletChart extends CategoricalChart {\n constructor(plotArea, options) {\n\n wrapData(options);\n\n super(plotArea, options);\n }\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n plotRange(point) {\n const series = point.series;\n const valueAxis = this.seriesValueAxis(series);\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, point.value.current || axisCrossingValue ];\n }\n\n createPoint(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { options, children } = this;\n const value = data.valueFields;\n\n let bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n\n let color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(\n bulletOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n\n const bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n cluster.append(bullet);\n\n return bullet;\n }\n\n updateRange(value, fields) {\n const { current, target } = value;\n const axisName = fields.series.axis;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n }\n\n pointValue(data) {\n return data.valueFields.current;\n }\n\n aboveAxis(point) {\n const value = point.value.current;\n\n return value > 0;\n }\n\n createAnimation() {\n const points = this.points;\n\n this._setAnimationOptions();\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n point.options.animation = this.options.animation;\n point.createAnimation();\n }\n }\n}\n\nBulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n\nsetDefaultOptions(BulletChart, {\n animation: {\n type: BAR\n }\n});\n\nfunction wrapData(options) {\n const series = options.series;\n\n for (let i = 0; i < series.length; i++) {\n const seriesItem = series[i];\n const data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [ data ];\n }\n }\n}\n\nexport default BulletChart;","import { Color } from '@progress/kendo-drawing';\n\nimport { Class, defined, deepExtend, setDefaultOptions, valueOrDefault, getSpacing, styleValue } from '../../common';\nimport { SHOW_TOOLTIP, HIDE_TOOLTIP } from '../constants';\n\nclass BaseTooltip extends Class {\n constructor(chartService, options) {\n super();\n\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n }\n\n getStyle(options, point) {\n let { background, border: { color: border } } = options;\n\n if (point) {\n const pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n\n const padding = getSpacing(options.padding || {}, \"auto\");\n\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n }\n\n show(options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n\n const style = this.getStyle(tooltipOptions, point);\n options.style = style;\n\n const background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\n options.className = \"k-chart-tooltip-inverse\";\n }\n\n this.chartService.notify(SHOW_TOOLTIP, options);\n\n this.visible = true;\n }\n\n hide() {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n\n this.visible = false;\n }\n\n destroy() {\n delete this.chartService;\n }\n}\n\nsetDefaultOptions(BaseTooltip, {\n border: {\n width: 1\n },\n opacity: 1\n});\n\nexport default BaseTooltip;\n","import BaseTooltip from '../tooltip/base-tooltip';\n\nimport { HIDE_TOOLTIP } from '../constants';\nimport { TOP, BOTTOM, LEFT, RIGHT, CENTER, DATE } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\n\nclass CrosshairTooltip extends BaseTooltip {\n constructor(chartService, crosshair, options) {\n super(chartService, options);\n\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n }\n\n initAxisName() {\n const axis = this.crosshair.axis;\n const plotArea = axis.plotArea;\n let name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? \"categoryAxis\" : \"valueAxis\";\n } else {\n name = axis.options.vertical ? \"yAxis\" : \"xAxis\";\n }\n this.axisName = name;\n }\n\n showAt(point) {\n const { crosshair: { axis }, options } = this;\n let value = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\n let formattedValue = value;\n\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n }\n\n hide() {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n }\n\n getAnchor() {\n const { crosshair, options: { position, padding } } = this;\n const vertical = !crosshair.axis.options.vertical;\n const lineBox = crosshair.line.bbox();\n let horizontalAlign, verticalAlign, point;\n\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n}\n\nsetDefaultOptions(CrosshairTooltip, {\n padding: 10\n});\n\nexport default CrosshairTooltip;\n\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, CategoryAxis } from '../../core';\nimport CrosshairTooltip from './crosshair-tooltip';\n\nimport { BLACK, X, Y } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass Crosshair extends ChartElement {\n constructor(chartService, axis, options) {\n super(options);\n\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n\n const tooltipOptions = this.options.tooltip;\n\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this,\n deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\n );\n }\n }\n\n showAt(point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n }\n\n hide() {\n this.line.visible(false);\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\n }\n\n moveLine() {\n const { axis, point } = this;\n const vertical = axis.options.vertical;\n const box = this.getBox();\n const dim = vertical ? Y : X;\n const lineStart = new geom.Point(box.x1, box.y1);\n let lineEnd;\n\n if (vertical) {\n lineEnd = new geom.Point(box.x2, box.y1);\n } else {\n lineEnd = new geom.Point(box.x1, box.y2);\n }\n\n if (point) {\n if (this.stickyMode) {\n const slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n\n this.box = box;\n\n this.line.moveTo(lineStart).lineTo(lineEnd);\n }\n\n getBox() {\n const axis = this.axis;\n const axes = axis.pane.axes;\n const length = axes.length;\n const vertical = axis.options.vertical;\n const box = axis.lineBox().clone();\n const dim = vertical ? X : Y;\n let axisLineBox;\n\n for (let i = 0; i < length; i++) {\n const currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n\n return box;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n this.line = new draw.Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n\n this.moveLine();\n this.visual.append(this.line);\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n super.destroy();\n }\n}\n\nsetDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: {\n visible: false\n }\n});\n\nexport default Crosshair;","import { drawing as draw } from '@progress/kendo-drawing';\nimport { alignPathToPixel } from '../common';\n\nimport { ChartElement } from '../core';\n\nclass ChartContainer extends ChartElement {\n constructor(options, pane) {\n super(options);\n this.pane = pane;\n }\n\n shouldClip() {\n const children = this.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n }\n\n _clipBox() {\n return this.pane.chartsBox();\n }\n\n createVisual() {\n this.visual = new draw.Group({\n zIndex: 0\n });\n\n if (this.shouldClip()) {\n const clipBox = this.clipBox = this._clipBox();\n const clipRect = clipBox.toRect();\n const clipPath = draw.Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n }\n\n stackRoot() {\n return this;\n }\n\n unclipLabels() {\n const { children: charts, clipBox } = this;\n\n for (let i = 0; i < charts.length; i++) {\n const points = charts[i].points || {};\n const length = points.length;\n\n for (let j = 0; j < length; j++) {\n const point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n const { label, note } = point;\n\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n }\n\n destroy() {\n super.destroy();\n\n delete this.parent;\n }\n}\n\nChartContainer.prototype.isStackRoot = true;\n\nexport default ChartContainer;","import { ChartElement, BoxElement, Title, Box } from '../core';\nimport { ChartPane } from './api-elements';\nimport ChartContainer from './chart-container';\n\nimport { PANE_RENDER } from './constants';\nimport { TOP, LEFT, X, Y } from '../common/constants';\nimport { append, deepExtend, isObject, last, setDefaultOptions } from '../common';\n\nclass Pane extends BoxElement {\n constructor(options) {\n super(options);\n\n this.id = paneID();\n\n this.createTitle();\n\n this.content = new ChartElement();\n\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n\n this.axes = [];\n this.charts = [];\n }\n\n createTitle() {\n let titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n\n this.title = Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n }\n\n appendAxis(axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n }\n\n appendAxisAt(axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n }\n\n appendChart(chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n }\n\n empty() {\n const plotArea = this.parent;\n\n if (plotArea) {\n for (let i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this.axes[i]);\n }\n\n for (let i = 0; i < this.charts.length; i++) {\n plotArea.removeChart(this.charts[i]);\n }\n }\n\n this.axes = [];\n this.charts = [];\n\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n }\n\n reflow(targetBox) {\n // Content (such as charts) is rendered, but excluded from reflows\n let content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n\n super.reflow(targetBox);\n\n if (content) {\n this.children.push(content);\n }\n\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n }\n\n visualStyle() {\n const style = super.visualStyle();\n style.zIndex = -10;\n\n return style;\n }\n\n renderComplete() {\n if (this.options.visible) {\n this.createGridLines();\n }\n }\n\n stackRoot() {\n return this;\n }\n\n clipRoot() {\n return this;\n }\n\n createGridLines() {\n const axes = this.axes;\n const allAxes = axes.concat(this.parent.axes);\n const vGridLines = [];\n const hGridLines = [];\n\n // TODO\n // Is full combination really necessary?\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const vertical = axis.options.vertical;\n const gridLines = vertical ? vGridLines : hGridLines;\n for (let j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n const altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n }\n\n refresh() {\n this.visual.clear();\n\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n\n this.visual.append(this.content.visual);\n\n this.renderComplete();\n this.notifyRender();\n }\n\n chartsBox() {\n const axes = this.axes;\n const length = axes.length;\n const chartsBox = new Box();\n\n for (let idx = 0; idx < length; idx++) {\n const axis = axes[idx];\n const axisValueField = axis.options.vertical ? Y : X;\n const lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n\n if (chartsBox.x2 === 0) {\n const allAxes = this.parent.axes;\n const length = allAxes.length;\n\n for (let idx = 0; idx < length; idx++) {\n const axis = allAxes[idx];\n if (!axis.options.vertical) {\n const lineBox = axis.lineBox();\n chartsBox.x1 = lineBox.x1;\n chartsBox.x2 = lineBox.x2;\n }\n }\n }\n return chartsBox;\n }\n\n clipBox() {\n return this.chartContainer.clipBox;\n }\n\n notifyRender() {\n const service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\n }\n}\n\nlet ID = 1;\n\nfunction paneID() {\n return \"pane\" + ID++;\n}\n\nPane.prototype.isStackRoot = true;\n\nsetDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: {\n align: LEFT\n },\n visible: true\n});\n\nexport default Pane;\n","export default function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n}","import { defined } from '../../common';\n\nexport default function segmentVisible(series, fields, index) {\n const visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n\n const pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n}\n\n","import { isNumber, isString } from '../../common';\nimport SeriesBinder from '../series-binder';\nimport segmentVisible from './segment-visible';\n\nexport default function bindSegments(series) {\n const data = series.data;\n const points = [];\n let sum = 0;\n let count = 0;\n\n for (let idx = 0; idx < data.length; idx++) {\n const pointData = SeriesBinder.current.bindPoint(series, idx);\n let value = pointData.valueFields.value;\n\n\n if (isString(value)) {\n value = parseFloat(value);\n }\n\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n\n pointData.value = Math.abs(value);\n points.push(pointData);\n\n if (pointData.visible) {\n sum += pointData.value;\n }\n\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n\n return {\n total: sum,\n points: points,\n count: count\n };\n}","export default function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n\n return a === b;\n}","import { inArray } from '../../common';\n\nexport default function filterSeriesByType(series, types) {\n const result = [];\n\n const seriesTypes = [].concat(types);\n for (let idx = 0; idx < series.length; idx++) {\n const currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n\n return result;\n}","import { parseDate } from '../../date-utils';\nimport { getter } from '../../common';\n\nexport default function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n\n const key = \"_date_\" + field;\n let value = row[key];\n\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n\n return value;\n}","import equalsIgnoreCase from './equals-ignore-case';\n\nimport { DATE } from '../../common/constants';\n\nexport default function isDateAxis(axisOptions, sampleCategory) {\n const type = axisOptions.type;\n const dateCategory = sampleCategory instanceof Date;\n\n return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\n}","export default function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n}","import { INTERPOLATE, ZERO } from '../constants';\nimport { convertableToNumber } from '../../common';\nimport SeriesBinder from '../series-binder';\n\nconst AREA_REGEX = /area/i;\n\nfunction seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n}\n\nfunction hasValue(series, item) {\n const fields = SeriesBinder.current.bindPoint(series, null, item);\n const valueFields = fields.valueFields;\n\n for (let field in valueFields) {\n if (convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n}\n\nfunction findNext({ start, dir, min, max, getter, hasItem, series }) {\n let pointHasValue, outPoint;\n let idx = start;\n do {\n idx += dir;\n //aggregating and binding the item takes too much time for large number of categories\n //will assume that if the aggregation does not create value for a missing item for one it will not create for others\n if (hasItem(idx)) {\n outPoint = getter(idx);\n pointHasValue = hasValue(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n\n if (pointHasValue) {\n return outPoint;\n }\n}\n\nexport default function createOutOfRangePoints(series, range, count, getter, hasItem) {\n const { min, max } = range;\n const hasMinPoint = min > 0 && min < count;\n const hasMaxPoint = max + 1 < count;\n\n if (hasMinPoint || hasMaxPoint) {\n const missingValues = seriesMissingValues(series);\n let minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter(min - 1);\n }\n\n if (hasMaxPoint) {\n maxPoint = getter(max + 1);\n }\n } else {\n let outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter(min - 1);\n pointHasValue = hasValue(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n\n if (hasMaxPoint) {\n outPoint = getter(max + 1);\n pointHasValue = hasValue(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n}","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box } from '../../core';\nimport Crosshair from '../crosshair/crosshair';\nimport Pane from '../pane';\nimport { hasValue } from '../utils';\n\nimport { WHITE, BLACK, X, Y, COORD_PRECISION, TOP, BOTTOM, LEFT, RIGHT, START, END } from '../../common/constants';\nimport { append, deepExtend, defined, getSpacing, getTemplate, inArray, isFunction, isString, limitValue, round, setDefaultOptions } from '../../common';\n\nclass PlotAreaBase extends ChartElement {\n constructor(series, options, chartService) {\n super(options);\n\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend = this.options.legend || {};\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n\n this.createPanes();\n this.render();\n this.createCrosshairs();\n }\n\n initFields() { }\n\n initSeries() {\n const series = this.series;\n\n for (let i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n }\n\n createPanes() {\n const titleOptions = this.options.title || {};\n const paneDefaults = this.options.paneDefaults;\n const paneOptions = this.options.panes || [];\n const panesLength = Math.max(paneOptions.length, 1);\n const panes = [];\n\n const defaults = deepExtend({\n title: {\n color: titleOptions.color\n }\n }, paneDefaults);\n\n for (let i = 0; i < panesLength; i++) {\n const options = deepExtend({}, defaults, paneOptions[i]);\n if (isString(options.title)) {\n options.title = deepExtend({ text: options.title }, defaults.title);\n }\n\n const currentPane = new Pane(options);\n currentPane.paneIndex = i;\n\n panes.push(currentPane);\n this.append(currentPane);\n }\n\n this.panes = panes;\n }\n\n crosshairOptions(axis) {\n return axis.options.crosshair;\n }\n\n createCrosshairs(panes = this.panes) {\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n for (let j = 0; j < pane.axes.length; j++) {\n const axis = pane.axes[j];\n const options = this.crosshairOptions(axis);\n if (options && options.visible) {\n const currentCrosshair = new Crosshair(this.chartService, axis, options);\n\n this.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n }\n\n removeCrosshairs(pane) {\n const crosshairs = this.crosshairs;\n const axes = pane.axes;\n\n for (let i = crosshairs.length - 1; i >= 0; i--) {\n for (let j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n }\n\n hideCrosshairs() {\n const crosshairs = this.crosshairs;\n for (let idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n }\n\n findPane(name) {\n const panes = this.panes;\n let matchingPane;\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane || panes[0];\n }\n\n findPointPane(point) {\n const panes = this.panes;\n let matchingPane;\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane;\n }\n\n appendAxis(axis) {\n const pane = this.findPane(axis.options.pane);\n\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n }\n\n removeAxis(axisToRemove) {\n const filteredAxes = [];\n\n for (let i = 0; i < this.axes.length; i++) {\n const axis = this.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n\n this.axes = filteredAxes;\n }\n\n appendChart(chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n }\n\n removeChart(chartToRemove) {\n const filteredCharts = [];\n\n for (let i = 0; i < this.charts.length; i++) {\n const chart = this.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n\n this.charts = filteredCharts;\n }\n\n addToLegend(series) {\n const count = series.length;\n const legend = this.options.legend;\n const labels = legend.labels || {};\n const inactiveItems = legend.inactiveItems || {};\n const inactiveItemsLabels = inactiveItems.labels || {};\n const data = [];\n\n for (let i = 0; i < count; i++) {\n const currentSeries = series[i];\n const seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n\n let text = currentSeries.name;\n const labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : \"\",\n series: currentSeries\n });\n }\n\n const defaults = currentSeries._defaults;\n let color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n let itemLabelOptions, markerColor;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n\n if (hasValue(text) && text !== \"\") {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n\n append(legend.items, data);\n }\n\n groupAxes(panes) {\n const xAxes = [];\n const yAxes = [];\n\n for (let paneIx = 0; paneIx < panes.length; paneIx++) {\n const paneAxes = panes[paneIx].axes;\n for (let axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n const axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n\n return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\n }\n\n groupSeriesByPane() {\n const series = this.series;\n const seriesByPane = {};\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const pane = this.seriesPaneName(currentSeries);\n\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [ currentSeries ];\n }\n }\n\n return seriesByPane;\n }\n\n filterVisibleSeries(series) {\n const result = [];\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n\n return result;\n }\n\n reflow(targetBox) {\n const options = this.options.plotArea;\n const panes = this.panes;\n const margin = getSpacing(options.margin);\n\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n }\n\n redraw(panes) {\n const panesArray = [].concat(panes);\n this.initSeries();\n\n //prevents leak during partial redraws. the cached gradients observers retain reference to the destroyed elements.\n const root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n\n for (let i = 0; i < panesArray.length; i++) {\n this.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n\n this.createCrosshairs(panesArray);\n\n for (let i = 0; i < panesArray.length; i++) {\n panesArray[i].refresh();\n }\n }\n\n axisCrossingValues(axis, crossingAxes) {\n const options = axis.options;\n const crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n const valuesToAdd = crossingAxes.length - crossingValues.length;\n const defaultValue = crossingValues[0] || 0;\n\n for (let i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n\n return crossingValues;\n }\n\n alignAxisTo(axis, targetAxis, crossingValue, targetCrossingValue) {\n const slot = axis.getSlot(crossingValue, crossingValue, true);\n const slotEdge = axis.options.reverse ? 2 : 1;\n const targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n const targetEdge = targetAxis.options.reverse ? 2 : 1;\n const axisBox = axis.box.translate(\n targetSlot[X + targetEdge] - slot[X + slotEdge],\n targetSlot[Y + targetEdge] - slot[Y + slotEdge]\n );\n\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n\n axis.reflow(axisBox);\n }\n\n alignAxes(xAxes, yAxes) {\n const xAnchor = xAxes[0];\n const yAnchor = yAxes[0];\n const xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n const yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n const leftAnchors = {};\n const rightAnchors = {};\n const topAnchors = {};\n const bottomAnchors = {};\n\n for (let i = 0; i < yAxes.length; i++) {\n const axis = yAxes[i];\n const pane = axis.pane;\n const paneId = pane.id;\n const visible = axis.options.visible !== false;\n\n // Locate pane anchor, if any, and use its axisCrossingValues\n const anchor = paneAnchor(xAxes, pane) || xAnchor;\n let anchorCrossings = xAnchorCrossings;\n\n if (anchor !== xAnchor) {\n anchorCrossings = this.axisCrossingValues(anchor, yAxes);\n }\n\n this.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n // Push the axis to the left the previous y-axis so they don't overlap\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(leftAnchors[paneId].box, LEFT)\n .translate(-axis.options.margin, 0)\n );\n }\n\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n // Flip the labels on the right if we're at the right end of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n\n this.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis to the right the previous y-axis so they don't overlap\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(rightAnchors[paneId].box, RIGHT)\n .translate(axis.options.margin, 0)\n );\n }\n\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\n }\n\n for (let i = 0; i < xAxes.length; i++) {\n const axis = xAxes[i];\n const pane = axis.pane;\n const paneId = pane.id;\n const visible = axis.options.visible !== false;\n\n // Locate pane anchor and use its axisCrossingValues\n const anchor = paneAnchor(yAxes, pane) || yAnchor;\n let anchorCrossings = yAnchorCrossings;\n if (anchor !== yAnchor) {\n anchorCrossings = this.axisCrossingValues(anchor, xAxes);\n }\n\n this.alignAxisTo(axis, anchor, xAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().y1) === round(anchor.lineBox().y1)) {\n // Flip the labels on top if we're at the top of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this.alignAxisTo(axis, anchor, xAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis above the previous x-axis so they don't overlap\n if (topAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(topAnchors[paneId].box, TOP)\n .translate(0, -axis.options.margin)\n );\n }\n\n if (visible) {\n topAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().y2, COORD_PRECISION) === round(anchor.lineBox().y2, COORD_PRECISION)) {\n // Push the axis below the previous x-axis so they don't overlap\n if (bottomAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(bottomAnchors[paneId].box, BOTTOM)\n .translate(0, axis.options.margin)\n );\n }\n\n if (visible) {\n bottomAnchors[paneId] = axis;\n }\n }\n\n if (i !== 0) {\n axis.alignTo(xAnchor);\n axis.reflow(axis.box);\n }\n }\n }\n\n shrinkAxisWidth(panes) {\n const axes = this.groupAxes(panes).any;\n const axisBox = axisGroupBox(axes);\n let overflowX = 0;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(\n overflowX,\n axisBox.width() - currentPane.contentBox.width()\n );\n }\n }\n\n if (overflowX !== 0) {\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n }\n\n shrinkAxisHeight(panes) {\n let shrinked;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n const axes = currentPane.axes;\n const overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n\n if (overflowY !== 0) {\n for (let j = 0; j < axes.length; j++) {\n const currentAxis = axes[j];\n\n if (currentAxis.options.vertical) {\n currentAxis.reflow(\n currentAxis.box.shrink(0, overflowY)\n );\n }\n }\n shrinked = true;\n }\n }\n\n return shrinked;\n }\n\n fitAxes(panes) {\n const axes = this.groupAxes(panes).any;\n let offsetX = 0;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n const paneAxes = currentPane.axes;\n const paneBox = currentPane.contentBox;\n\n if (paneAxes.length > 0) {\n const axisBox = axisGroupBox(paneAxes);\n // OffsetY is calculated and applied per pane\n const offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n\n // OffsetX is calculated and applied globally\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n\n\n for (let j = 0; j < paneAxes.length; j++) {\n const currentAxis = paneAxes[j];\n\n currentAxis.reflow(\n currentAxis.box.translate(0, offsetY)\n );\n }\n }\n }\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n\n currentAxis.reflow(\n currentAxis.box.translate(offsetX, 0)\n );\n }\n }\n\n reflowAxes(panes) {\n const axes = this.groupAxes(panes);\n\n for (let i = 0; i < panes.length; i++) {\n this.reflowPaneAxes(panes[i]);\n }\n\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n\n this.autoRotateAxisLabels(axes);\n\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.fitAxes(panes);\n }\n }\n\n autoRotateAxisLabels(groupedAxes) {\n const { panes } = this;\n const axes = allPaneAxes(panes);\n let rotated;\n\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n\n if (rotated) {\n for (let idx = 0; idx < panes.length; idx++) {\n this.reflowPaneAxes(panes[idx]);\n }\n\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n }\n\n reflowPaneAxes(pane) {\n const axes = pane.axes;\n const length = axes.length;\n\n if (length > 0) {\n for (let i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n }\n\n reflowCharts(panes) {\n const charts = this.charts;\n const count = charts.length;\n const box = this.box;\n\n for (let i = 0; i < count; i++) {\n const chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n }\n\n reflowPanes() {\n const { box, panes } = this;\n const panesLength = panes.length;\n let remainingHeight = box.height();\n let remainingPanes = panesLength;\n let autoHeightPanes = 0;\n let top = box.y1;\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n const height = currentPane.options.height;\n\n currentPane.options.width = box.width();\n\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf(\"%\")) {\n const percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n\n currentPane.reflow(box.clone());\n\n remainingHeight -= currentPane.options.height;\n }\n }\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n\n if (!currentPane.options.height) {\n currentPane.options.height = remainingHeight / autoHeightPanes;\n }\n }\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n const paneBox = box\n .clone()\n .move(box.x1, top);\n\n currentPane.reflow(paneBox);\n\n remainingPanes--;\n top += currentPane.options.height;\n }\n }\n\n backgroundBox() {\n const axes = this.axes;\n const axesCount = axes.length;\n let box;\n\n for (let i = 0; i < axesCount; i++) {\n const axisA = axes[i];\n\n for (let j = 0; j < axesCount; j++) {\n const axisB = axes[j];\n\n if (axisA.options.vertical !== axisB.options.vertical) {\n const lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n\n return box || this.box;\n }\n\n chartsBoxes() {\n const panes = this.panes;\n const boxes = [];\n\n for (let idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n\n return boxes;\n }\n\n addBackgroundPaths(multipath) {\n const boxes = this.chartsBoxes();\n for (let idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(draw.Path.fromRect(boxes[idx].toRect()));\n }\n }\n\n backgroundContainsPoint(point) {\n const boxes = this.chartsBoxes();\n for (let idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options.plotArea;\n let { opacity, background, border = {} } = options;\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n\n const bg = this._bgVisual = new draw.MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n\n this.addBackgroundPaths(bg);\n\n this.appendVisual(bg);\n }\n\n pointsByCategoryIndex(categoryIndex) {\n const charts = this.charts;\n const result = [];\n\n if (categoryIndex !== null) {\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n if (chart.pane.options.name === \"_navigator\") {\n continue;\n }\n\n const points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n\n return result;\n }\n\n pointsBySeriesIndex(seriesIndex) {\n return this.filterPoints(function(point) {\n return point.series.index === seriesIndex;\n });\n }\n\n pointsBySeriesName(name) {\n return this.filterPoints(function(point) {\n return point.series.name === name;\n });\n }\n\n filterPoints(callback) {\n const charts = this.charts;\n const result = [];\n\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n const points = chart.points;\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && point.visible !== false && callback(point)) {\n result.push(point);\n }\n }\n }\n\n return result;\n }\n\n findPoint(callback) {\n const charts = this.charts;\n\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n const points = chart.points;\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && point.visible !== false && callback(point)) {\n return point;\n }\n }\n }\n }\n\n paneByPoint(point) {\n const panes = this.panes;\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n }\n\n detachLabels() {\n const axes = this.groupAxes(this.panes);\n const xAxes = axes.x;\n const yAxes = axes.y;\n\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n }\n\n detachAxisGroupLabels(axes, crossingAxes) {\n let labelAxisCount = 0;\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const pane = axis.pane;\n const anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n const axisIndex = i + labelAxisCount;\n const labelAxis = this.createLabelAxis(axis, axisIndex, anchor);\n\n if (labelAxis) {\n labelAxisCount++;\n\n const pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n }\n\n createLabelAxis(axis, axisIndex, anchor) {\n const labelOptions = axis.options.labels;\n const position = labelOptions.position;\n const onAxis = position !== END && position !== START;\n const visible = labelOptions.visible;\n\n if (onAxis || visible === false) {\n return null;\n }\n\n const allAxes = this.groupAxes(this.panes);\n const crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n const anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n const end = position === END;\n const range = anchor.range();\n const edge = end ? range.max : range.min;\n const crossingValue = limitValue(anchorCrossings[axisIndex], range.min, range.max);\n\n if (crossingValue - edge === 0) {\n return null;\n }\n\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n\n const labelAxis = axis.clone();\n axis.clear();\n\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n\n return labelAxis;\n }\n}\n\nfunction isSingleAxis(axis) {\n return !axis.pane.axes.some((a) =>\n a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false\n );\n}\n\nfunction axisGroupBox(axes) {\n const length = axes.length;\n let box;\n\n for (let i = 0; i < length; i++) {\n const axis = axes[i];\n const visible = axis.options.visible !== false;\n if (visible || isSingleAxis(axis)) {\n const axisBox = visible ? axis.contentBox() : axis.lineBox();\n\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n\n return box || new Box();\n}\n\nfunction paneAnchor(axes, pane) {\n for (let i = 0; i < axes.length; i++) {\n const anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n}\n\nfunction isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n}\n\nconst allPaneAxes = (panes) => panes.reduce((acc, pane) => acc.concat(pane.axes), []);\n\nsetDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: {\n margin: {}\n },\n background: \"\",\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: {\n title: {}\n },\n legend: {\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n }\n});\n\nexport default PlotAreaBase;\n","import { PLOT_AREA_HOVER, PLOT_AREA_CLICK } from '../constants';\n\nconst PlotAreaEventsMixin = {\n hover: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n\n click: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n};\n\nexport default PlotAreaEventsMixin;","import Aggregates from './aggregates';\n\nimport { Class, defined, inArray, isArray, isFunction, isNumber, isObject } from '../../common';\n\nclass SeriesAggregator extends Class {\n constructor(series, binder, defaultAggregates) {\n super();\n\n const canonicalFields = binder.canonicalFields(series);\n const valueFields = binder.valueFields(series);\n const sourceFields = binder.sourceFields(series, canonicalFields);\n const seriesFields = this._seriesFields = [];\n const defaults = defaultAggregates.query(series.type);\n const rootAggregate = series.aggregate || defaults;\n\n this._series = series;\n this._binder = binder;\n\n for (let i = 0; i < canonicalFields.length; i++) {\n const field = canonicalFields[i];\n let fieldAggregate;\n\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n }\n\n aggregatePoints(srcPoints, group) {\n const { _series: series, _seriesFields: seriesFields } = this;\n const data = this._bindPoints(srcPoints || []);\n const firstDataItem = data.dataItems[0];\n let result = {};\n\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n const fn = function() {};\n fn.prototype = firstDataItem;\n result = new fn();\n }\n\n for (let i = 0; i < seriesFields.length; i++) {\n const field = seriesFields[i];\n const srcValues = this._bindField(data.values, field.canonicalName);\n const value = field.transform(srcValues, series, data.dataItems, group);\n\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n\n return result;\n }\n\n _bindPoints(points) {\n const { _binder: binder, _series: series } = this;\n const values = [];\n const dataItems = [];\n\n for (let i = 0; i < points.length; i++) {\n const pointIx = points[i];\n\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n\n return {\n values: values,\n dataItems: dataItems\n };\n }\n\n _bindField(data, field) {\n const values = [];\n const count = data.length;\n\n for (let i = 0; i < count; i++) {\n const item = data[i];\n const valueFields = item.valueFields;\n let value;\n\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n\n values.push(value);\n }\n\n return values;\n }\n}\n\nfunction setValue(fieldName, target, value) {\n let parentObj = target;\n let field = fieldName;\n\n if (fieldName.indexOf(\".\") > -1) {\n const parts = fieldName.split(\".\");\n\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n\n parentObj[field] = value;\n}\n\nexport default SeriesAggregator;","import { Class } from '../../common';\n\nclass DefaultAggregates extends Class {\n constructor() {\n super();\n\n this._defaults = {};\n }\n\n register(seriesTypes, aggregates) {\n for (let i = 0; i < seriesTypes.length; i++) {\n this._defaults[seriesTypes[i]] = aggregates;\n }\n }\n\n query(seriesType) {\n return this._defaults[seriesType];\n }\n}\n\nDefaultAggregates.current = new DefaultAggregates();\n\nexport default DefaultAggregates;","import Bar from '../bar-chart/bar';\nimport BarLabel from '../bar-chart/bar-label';\n\nimport { deepExtend, getTemplate } from '../../common';\n\nclass RangeBar extends Bar {\n createLabel() {\n const labels = this.options.labels;\n const fromOptions = deepExtend({}, labels, labels.from);\n const toOptions = deepExtend({}, labels, labels.to);\n\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n }\n\n _createLabel(options) {\n const labelTemplate = getTemplate(options);\n const pointData = this.pointData();\n\n let labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n\n return new BarLabel(labelText,\n deepExtend({\n vertical: this.options.vertical\n },\n options\n ), pointData);\n }\n\n reflow(targetBox) {\n this.render();\n\n const { labelFrom, labelTo, value } = this;\n\n this.box = targetBox;\n\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n}\n\nRangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: {\n format: \"{0} - {1}\"\n },\n tooltip: {\n format: \"{1}\"\n }\n});\n\nexport default RangeBar;","import BarChart from '../bar-chart/bar-chart';\nimport RangeBar from './range-bar';\nimport CategoricalChart from '../categorical-chart';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { isNumber } from '../../common';\n\nclass RangeBarChart extends BarChart {\n pointType() {\n return RangeBar;\n }\n\n pointValue(data) {\n return data.valueFields;\n }\n\n formatPointValue(point, format) {\n if (point.value.from === null && point.value.to === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n }\n\n plotRange(point) {\n if (!point) {\n return 0;\n }\n\n return [ point.value.from, point.value.to ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n const { from, to } = value;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n }\n\n aboveAxis(point) {\n const value = point.value;\n return value.from < value.to;\n }\n}\n\nRangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n\nexport default RangeBarChart;","import LinePoint from '../line-chart/line-point';\n\nclass RangeLinePoint extends LinePoint {\n aliasFor() {\n return this.parent;\n }\n}\n\nexport default RangeLinePoint;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point } from '../../core';\nimport RangeLinePoint from './range-line-point';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { LINE_MARKER_SIZE, FADEIN, INITIAL_ANIMATION_DURATION, TOOLTIP_OFFSET, ABOVE, BELOW } from '../constants';\nimport { WHITE, CIRCLE, HIGHLIGHT_ZINDEX, LEFT, RIGHT, BOTTOM, CENTER } from '../../common/constants';\nimport { deepExtend, valueOrDefault, getSpacing } from '../../common';\n\nconst AUTO = 'auto';\nconst DEFAULT_FROM_FORMAT = '{0}';\nconst DEFAULT_TO_FORMAT = '{1}';\n\nclass RangeAreaPoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this.initLabelsFormat();\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n const { markers, labels } = this.options;\n const value = this.value;\n\n const fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n\n const toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n\n this.append(fromPoint);\n this.append(toPoint);\n }\n\n reflow(targetBox) {\n this.render();\n\n const { from: fromBox, to: toBox } = targetBox;\n\n this.positionLabels(fromBox, toBox);\n\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n }\n\n createHighlight() {\n const group = new draw.Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n\n return group;\n }\n\n highlightVisual() {\n return this.visual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n }\n\n tooltipAnchor() {\n const clipBox = this.owner.pane.clipBox();\n const showTooltip = !clipBox || clipBox.overlaps(this.box);\n\n if (showTooltip) {\n const box = this.box;\n const center = box.center();\n const horizontalAlign = LEFT;\n let x, y, verticalAlign;\n\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n unclipElements() {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n }\n\n initLabelsFormat() {\n const labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = Object.assign({}, labels.from, {\n format: DEFAULT_FROM_FORMAT\n });\n }\n\n if (!labels.to || !labels.to.format) {\n labels.to = Object.assign({}, labels.to, {\n format: DEFAULT_TO_FORMAT\n });\n }\n }\n }\n\n positionLabels(fromBox, toBox) {\n const { labels, vertical } = this.options;\n\n if (labels.position === AUTO) {\n let fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n }\n\n copyFields(point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n }\n}\n\ndeepExtend(RangeAreaPoint.prototype, PointEventsMixin);\ndeepExtend(RangeAreaPoint.prototype, NoteMixin);\n\nRangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: HIGHLIGHT_ZINDEX\n },\n tooltip: {\n format: '{0} - {1}'\n }\n};\n\nexport default RangeAreaPoint;\n","import { drawing as draw } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nclass RangeAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n\n return fromSegments;\n }\n\n createStroke(style) {\n const toPath = new draw.Path(style);\n const fromPath = new draw.Path(style);\n\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n\n this.visual.append(toPath);\n this.visual.append(fromPath);\n }\n\n hasStackSegment() {\n return true;\n }\n\n fromPoints() {\n return this.linePoints.map(point => point.fromPoint);\n }\n\n toPoints() {\n return this.linePoints.map(point => point.toPoint);\n }\n}\n\nexport default RangeAreaSegment;","import { CurveProcessor } from '../../core';\n\nimport RangeAreaSegment from './range-area-segment';\n\nclass SplineRangeAreaSegment extends RangeAreaSegment {\n\n createStrokeSegments() {\n return this.createCurveSegments(this.toPoints());\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n\n return fromSegments;\n }\n\n createCurveSegments(points) {\n const curveProcessor = new CurveProcessor();\n\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n\n\n}\n\nexport default SplineRangeAreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport RangeAreaSegment from './range-area-segment';\nimport { deepExtend } from '../../common';\n\nclass StepRangeAreaSegment extends RangeAreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n\n return fromSegments;\n }\n}\n\ndeepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n\nexport default StepRangeAreaSegment;","import CategoricalChart from '../categorical-chart';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport RangeAreaPoint from './range-area-point';\nimport RangeAreaSegment from './range-area-segment';\nimport SplineRangeAreaSegment from './spline-range-area-segment';\nimport StepRangeAreaSegment from './step-range-area-segment';\n\nimport { Box } from '../../core';\nimport { ZERO } from '../constants';\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { isNumber } from '../../common';\nimport { deepExtend, isFunction } from '../../common';\nimport { hasValue } from '../utils';\n\nclass RangeAreaChart extends CategoricalChart {\n\n render() {\n super.render();\n\n this.renderSegments();\n }\n\n pointType() {\n return RangeAreaPoint;\n }\n\n createPoint(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n let value = data.valueFields;\n\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\n } else {\n return null;\n }\n }\n\n let pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n let color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = (currentSeries.line || {}).style;\n let segmentType;\n if (style === \"smooth\") {\n segmentType = SplineRangeAreaSegment;\n } else if (style === \"step\") {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n\n return new segmentType(linePoints, currentSeries, seriesIx);\n }\n\n plotRange(point, startValue) {\n if (!point) {\n return [ startValue, startValue ];\n }\n\n return [ point.value.from, point.value.to ];\n }\n\n valueSlot(valueAxis, plotRange) {\n const fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n const toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n }\n\n pointSlot(categorySlot, valueSlot) {\n const { from, to } = valueSlot;\n let fromSlot, toSlot;\n\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n\n addValue(data, fields) {\n const valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n\n super.addValue(data, fields);\n }\n\n updateRange(value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n const axisName = fields.series.axis;\n const axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n const { from, to } = value;\n\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format, value.from, value.to);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n\n return result.concat(this._segments);\n }\n}\n\ndeepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n\nexport default RangeAreaChart;\n","import Candlestick from '../candlestick-chart/candlestick';\n\nclass OHLCPoint extends Candlestick {\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n const oPoints = [];\n const cPoints = [];\n const lhPoints = [];\n\n const lhSlot = valueAxis.getSlot(value.low, value.high);\n const oSlot = valueAxis.getSlot(value.open, value.open);\n const cSlot = valueAxis.getSlot(value.close, value.close);\n\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n\n const mid = lhSlot.center().x;\n\n oPoints.push([ oSlot.x1, oSlot.y1 ]);\n oPoints.push([ mid, oSlot.y1 ]);\n cPoints.push([ mid, cSlot.y1 ]);\n cPoints.push([ cSlot.x2, cSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y2 ]);\n\n this.lines = [\n oPoints, cPoints, lhPoints\n ];\n\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n\n this.reflowNote();\n }\n\n createBody() {}\n}\n\nexport default OHLCPoint;","import CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport OHLCPoint from './ohlc-point';\n\nclass OHLCChart extends CandlestickChart {\n pointType() {\n return OHLCPoint;\n }\n}\n\nexport default OHLCChart;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement } from '../../core';\n\nimport { FADEIN, INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { alignPathToPixel, setDefaultOptions } from '../../common';\n\nclass WaterfallSegment extends ChartElement {\n constructor(from, to, series) {\n super();\n\n this.from = from;\n this.to = to;\n this.series = series;\n }\n\n linePoints() {\n const from = this.from;\n const { from: { box: fromBox }, to: { box: toBox } } = this;\n const points = [];\n\n if (from.isVertical) {\n const y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push(\n [ fromBox.x1, y ],\n [ toBox.x2, y ]\n );\n } else {\n const x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push(\n [ x, fromBox.y1 ],\n [ x, toBox.y2 ]\n );\n }\n\n return points;\n }\n\n createVisual() {\n super.createVisual();\n\n const line = this.series.line || {};\n\n const path = draw.Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n\n alignPathToPixel(path);\n this.visual.append(path);\n }\n}\n\nsetDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n});\n\nexport default WaterfallSegment;","import BarChart from '../bar-chart/bar-chart';\nimport SeriesBinder from '../series-binder';\nimport WaterfallSegment from './waterfall-segment';\n\nimport categoriesCount from '../utils/categories-count';\n\nimport { isNumber } from '../../common';\n\nclass WaterfallChart extends BarChart {\n render() {\n super.render();\n this.createSegments();\n }\n\n traverseDataPoints(callback) {\n const series = this.options.series;\n const totalCategories = categoriesCount(series);\n const isVertical = !this.options.invertAxes;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n let total = 0;\n let runningTotal = 0;\n\n for (let categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n const data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n const value = data.valueFields.value;\n const summary = data.fields.summary;\n let from = total;\n let to;\n\n if (summary) {\n if (summary.toLowerCase() === \"total\") {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n\n callback(data, {\n category: this.categoryAxis.categoryAt(categoryIx),\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n }\n\n updateRange(value, fields) {\n super.updateRange({ value: fields.to }, fields);\n }\n\n aboveAxis(point) {\n return point.value >= 0;\n }\n\n plotRange(point) {\n return [ point.from, point.to ];\n }\n\n createSegments() {\n const series = this.options.series;\n const seriesPoints = this.seriesPoints;\n const segments = this.segments = [];\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const points = seriesPoints[seriesIx];\n\n if (points) {\n let prevPoint;\n for (let pointIx = 0; pointIx < points.length; pointIx++) {\n const point = points[pointIx];\n\n if (point && prevPoint) {\n const segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this.append(segment);\n }\n\n prevPoint = point;\n }\n }\n }\n }\n}\n\nexport default WaterfallChart;","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport SeriesAggregator from '../aggregates/series-aggregator';\nimport DefaultAggregates from '../aggregates/default-aggregates';\nimport SeriesBinder from '../series-binder';\nimport BarChart from '../bar-chart/bar-chart';\nimport RangeBarChart from '../range-bar-chart/range-bar-chart';\nimport BulletChart from '../bullet-chart/bullet-chart';\nimport LineChart from '../line-chart/line-chart';\nimport AreaChart from '../area-chart/area-chart';\nimport RangeAreaChart from '../range-area-chart/range-area-chart';\nimport OHLCChart from '../ohlc-chart/ohlc-chart';\nimport CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport BoxPlotChart from '../box-plot-chart/box-plot-chart';\nimport WaterfallChart from '../waterfall-chart/waterfall-chart';\n\nimport { CategoryAxis, DateCategoryAxis, NumericAxis, LogarithmicAxis, Point } from '../../core';\n\nimport { appendIfNotNull, categoriesCount, createOutOfRangePoints, equalsIgnoreCase, filterSeriesByType,\n getDateField, getField, isDateAxis, singleItemOrArray } from '../utils';\n\nimport { BAR, COLUMN, BULLET, VERTICAL_BULLET, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n RANGE_AREA, VERTICAL_RANGE_AREA, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL,\n BOX_PLOT, VERTICAL_BOX_PLOT, OHLC, CANDLESTICK, LOGARITHMIC, STEP, EQUALLY_SPACED_SERIES } from '../constants';\n\nimport { DATE, MAX_VALUE } from '../../common/constants';\nimport { setDefaultOptions, inArray, isNumber, deepExtend, defined, eventElement, grep } from '../../common';\n\nconst AREA_SERIES = [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA ];\nconst OUT_OF_RANGE_SERIES = [ LINE, VERTICAL_LINE ].concat(AREA_SERIES);\n\nclass CategoricalPlotArea extends PlotAreaBase {\n\n initFields(series) {\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n\n if (series.length > 0) {\n this.invertAxes = inArray(\n series[0].type, [ BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, VERTICAL_RANGE_AREA,\n RANGE_BAR, HORIZONTAL_WATERFALL, VERTICAL_BOX_PLOT ]\n );\n\n for (let i = 0; i < series.length; i++) {\n const stack = series[i].stack;\n if (stack && stack.type === \"100%\") {\n this.stack100 = true;\n break;\n }\n }\n }\n\n }\n\n render(panes = this.panes) {\n this.createCategoryAxes(panes);\n this.aggregateCategories(panes);\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n }\n\n createCharts(panes) {\n const seriesByPane = this.groupSeriesByPane();\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n\n const visibleSeries = this.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n\n const groups = this.groupSeriesByCategoryAxis(visibleSeries);\n for (let groupIx = 0; groupIx < groups.length; groupIx++) {\n this.createChartGroup(groups[groupIx], pane);\n }\n }\n }\n\n createChartGroup(series, pane) {\n this.createAreaChart(\n filterSeriesByType(series, [ AREA, VERTICAL_AREA ]), pane\n );\n\n this.createRangeAreaChart(\n filterSeriesByType(series, [ RANGE_AREA, VERTICAL_RANGE_AREA ]), pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ COLUMN, BAR ]), pane\n );\n\n this.createRangeBarChart(\n filterSeriesByType(series, [ RANGE_COLUMN, RANGE_BAR ]), pane\n );\n\n this.createBulletChart(\n filterSeriesByType(series, [ BULLET, VERTICAL_BULLET ]), pane\n );\n\n this.createCandlestickChart(\n filterSeriesByType(series, CANDLESTICK), pane\n );\n\n this.createBoxPlotChart(\n filterSeriesByType(series, [ BOX_PLOT, VERTICAL_BOX_PLOT ]), pane\n );\n\n this.createOHLCChart(\n filterSeriesByType(series, OHLC), pane\n );\n\n this.createWaterfallChart(\n filterSeriesByType(series, [ WATERFALL, HORIZONTAL_WATERFALL ]), pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ LINE, VERTICAL_LINE ]), pane\n );\n }\n\n aggregateCategories(panes) {\n const series = this.srcSeries || this.series;\n const processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n\n for (let i = 0; i < series.length; i++) {\n let currentSeries = series[i];\n const categoryAxis = this.seriesCategoryAxis(currentSeries);\n const axisPane = this.findPane(categoryAxis.options.pane);\n const dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this.aggregateSeries(currentSeries, categoryAxis);\n } else {\n currentSeries = this.filterSeries(currentSeries, categoryAxis);\n }\n\n processedSeries.push(currentSeries);\n }\n\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n\n this.srcSeries = series;\n this.series = processedSeries;\n }\n\n filterSeries(series, categoryAxis) {\n const dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n\n if (!(isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max))) {\n return series;\n }\n\n const range = categoryAxis.currentRangeIndices();\n const outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n const currentSeries = deepExtend({}, series);\n\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, (idx) => ({\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n }), (idx) => defined(series.data[idx]));\n }\n\n return currentSeries;\n }\n\n clearSeriesPointsCache() {\n this._seriesPointsCache = {};\n }\n\n seriesSourcePoints(series, categoryAxis) {\n const key = `${ series.index };${ categoryAxis.categoriesHash() }`;\n if (this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\n }\n\n const axisOptions = categoryAxis.options;\n const srcCategories = axisOptions.srcCategories;\n const dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n const srcData = series.data;\n const getFn = dateAxis ? getDateField : getField;\n const result = [];\n if (!dateAxis) {\n categoryAxis.mapCategories();//fixes major performance issue caused by searching for the index for large data\n }\n\n for (let idx = 0; idx < srcData.length; idx++) {\n let category;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[idx], this.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n\n if (defined(category) && category !== null) {\n const categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || { items: [], category: category };\n result[categoryIx].items.push(idx);\n }\n }\n\n this._currentPointsCache[key] = result;\n\n return result;\n }\n\n aggregateSeries(series, categoryAxis) {\n const srcData = series.data;\n if (!srcData.length) {\n return series;\n }\n\n const srcPoints = this.seriesSourcePoints(series, categoryAxis);\n const result = deepExtend({}, series);\n const aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n const data = result.data = [];\n const dataItems = categoryAxis.options.dataItems || [];\n\n const range = categoryAxis.currentRangeIndices();\n const categoryItem = (idx) => {\n const categoryIdx = idx - range.min;\n let point = srcPoints[idx];\n if (!point) {\n point = srcPoints[idx] = {};\n }\n\n point.categoryIx = categoryIdx;\n\n if (!point.item) {\n const category = categoryAxis.categoryAt(idx, true);\n point.category = category;\n point.item = aggregator.aggregatePoints(point.items, category);\n }\n\n return point;\n };\n\n for (let idx = range.min; idx <= range.max; idx++) {\n const point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, (idx) => srcPoints[idx]);\n }\n\n categoryAxis.options.dataItems = dataItems;\n\n return result;\n }\n\n appendChart(chart, pane) {\n const series = chart.options.series;\n const categoryAxis = this.seriesCategoryAxis(series[0]);\n let categories = categoryAxis.options.categories;\n let categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n\n if (categoriesToAdd > 0) {//consider setting an option to axis instead of adding fake categories\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push(\"\");\n }\n }\n\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n\n super.appendChart(chart, pane);\n }\n\n // TODO: Refactor, optionally use series.pane option\n seriesPaneName(series) {\n const options = this.options;\n const axisName = series.axis;\n const axisOptions = [].concat(options.valueAxis);\n const axis = grep(axisOptions, function(a) { return a.name === axisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = (panes[0] || {}).name || \"default\";\n const paneName = (axis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n seriesCategoryAxis(series) {\n const axisName = series.categoryAxis;\n const axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate category axis with name \" + axisName);\n }\n\n return axis;\n }\n\n stackableChartOptions(firstSeries, pane) {\n const stack = firstSeries.stack;\n const isStacked100 = stack && stack.type === \"100%\";\n const clip = pane.options.clip;\n\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\n }\n\n groupSeriesByCategoryAxis(series) {\n const categoryAxes = [];\n const unique = {};\n for (let idx = 0; idx < series.length; idx++) {\n const name = series[idx].categoryAxis || \"$$default$$\";\n if (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n\n const groups = [];\n for (let axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n const axis = categoryAxes[axisIx];\n const axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n\n groups.push(axisSeries);\n }\n\n return groups;\n }\n\n createBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const barChart = new BarChart(this, Object.assign({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(barChart, pane);\n }\n\n createRangeBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(rangeColumnChart, pane);\n }\n\n createBulletChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(bulletChart, pane);\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const lineChart = new LineChart(this, Object.assign({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(lineChart, pane);\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const areaChart = new AreaChart(this, Object.assign({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(areaChart, pane);\n }\n\n createRangeAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n\n this.appendChart(rangeAreaChart, pane);\n }\n\n createOHLCChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createCandlestickChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createBoxPlotChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createWaterfallChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(waterfallChart, pane);\n }\n\n axisRequiresRounding(categoryAxisName, categoryAxisIndex) {\n const centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n\n for (let seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n const currentSeries = this.series[seriesIx];\n if (inArray(currentSeries.type, AREA_SERIES)) {\n const line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n\n for (let seriesIx = 0; seriesIx < centeredSeries.length; seriesIx++) {\n const seriesAxis = centeredSeries[seriesIx].categoryAxis || \"\";\n if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\n return true;\n }\n }\n }\n\n aggregatedAxis(categoryAxisName, categoryAxisIndex) {\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const seriesAxis = series[seriesIx].categoryAxis || \"\";\n if ((seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) && series[seriesIx].categoryField) {\n return true;\n }\n }\n }\n\n createCategoryAxesLabels() {\n const axes = this.axes;\n for (let i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n }\n\n createCategoryAxes(panes) {\n const invertAxes = this.invertAxes;\n const definitions = [].concat(this.options.categoryAxis);\n const axes = [];\n\n for (let i = 0; i < definitions.length; i++) {\n let axisOptions = definitions[i];\n const axisPane = this.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n const { name, categories = [] } = axisOptions;\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this.isJustified();\n }\n\n if (this.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n\n let categoryAxis;\n\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new DateCategoryAxis(axisOptions, this.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this.chartService);\n }\n\n definitions[i].categories = categoryAxis.options.srcCategories;\n\n if (name) {\n if (this.namedCategoryAxes[name]) {\n throw new Error(`Category axis with name ${ name } is already defined`);\n }\n this.namedCategoryAxes[name] = categoryAxis;\n }\n\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this.appendAxis(categoryAxis);\n }\n }\n\n const primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n }\n\n isJustified() {\n const series = this.series;\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n if (!inArray(currentSeries.type, AREA_SERIES)) {\n return false;\n }\n }\n\n return true;\n }\n\n createValueAxes(panes) {\n const tracker = this.valueAxisRangeTracker;\n const defaultRange = tracker.query();\n const definitions = [].concat(this.options.valueAxis);\n const invertAxes = this.invertAxes;\n const baseOptions = { vertical: !invertAxes, reverse: invertAxes && this.chartService.rtl };\n const axes = [];\n\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: \"P0\" };\n }\n\n for (let i = 0; i < definitions.length; i++) {\n const axisOptions = definitions[i];\n const axisPane = this.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n const name = axisOptions.name;\n const defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n const range = tracker.query(name) || defaultRange || defaultAxisRange;\n\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = LogarithmicAxis;\n } else {\n axisType = NumericAxis;\n }\n\n const valueAxis = new axisType(range.min, range.max,\n deepExtend({}, baseOptions, axisOptions),\n this.chartService\n );\n\n if (name) {\n if (this.namedValueAxes[name]) {\n throw new Error(`Value axis with name ${ name } is already defined`);\n }\n this.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n\n axes.push(valueAxis);\n this.appendAxis(valueAxis);\n }\n }\n\n const primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const pane = this.pointPane(point);\n const categories = [];\n const values = [];\n\n if (!pane) {\n return;\n }\n\n const allAxes = pane.axes;\n for (let i = 0; i < allAxes.length; i++) {\n const axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n }\n\n pointPane(point) {\n const panes = this.panes;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n }\n\n updateAxisOptions(axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\n}\n\nfunction updateAxisOptions(targetOptions, axis, options) {\n const axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n}\n\nfunction groupSeries(series, axis, axisIx) {\n return grep(series, function(s) {\n return (axisIx === 0 && !s.categoryAxis) || (s.categoryAxis === axis);\n });\n}\n\nsetDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n});\n\ndeepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default CategoricalPlotArea;","import now from '../util/now';\n\nexport default function throttle(fn, delay) {\n let lastExecTime = 0;\n let timeout;\n\n if (!delay || delay <= 0) {\n return fn;\n }\n\n const throttled = function() {\n const elapsed = now() - lastExecTime;\n const args = arguments;\n\n const exec = function() {\n fn.apply(null, args);\n lastExecTime = now();\n };\n\n // first execution\n if (!lastExecTime) {\n return exec();\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n };\n\n return throttled;\n}\n","import Class from './class';\n\nclass Observable extends Class {\n constructor() {\n super();\n\n this._events = {};\n }\n\n bind(eventName, handlers, one) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n const length = eventNames.length;\n\n if (handlers === undefined) {\n for (let field in eventName) {\n this.bind(field, eventName[field]);\n }\n return this;\n }\n\n for (let idx = 0; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n let handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n const original = handler;\n handler = () => { // eslint-disable-line no-loop-func\n this.unbind(eventName, handler);\n original.apply(this, arguments);\n };\n handler.original = original;\n }\n let events = this._events[eventName] = this._events[eventName] || [];\n events.push(handler);\n }\n }\n\n return this;\n }\n\n one(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n }\n\n first(eventName, handlers) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n\n for (let idx = 0, length = eventNames.length; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n const handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n const events = this._events[eventName] = this._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return this;\n }\n\n trigger(eventName, e = {}) {\n let events = this._events[eventName];\n\n if (events) {\n const length = events.length;\n\n e.sender = this;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (let idx = 0; idx < length; idx++) {\n events[idx].call(this, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n }\n\n unbind(eventName, handler) {\n const events = this._events[eventName];\n\n if (eventName === undefined) {\n this._events = {};\n } else if (events) {\n if (handler) {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n this._events[eventName] = [];\n }\n }\n\n return this;\n }\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction getArray(value) {\n return typeof value === \"string\" ? [ value ] : value;\n}\n\nfunction preventDefault() {\n this._defaultPrevented = true;\n}\n\nfunction isDefaultPrevented() {\n return this._defaultPrevented === true;\n}\n\nexport default Observable;","import Group from '../shapes/group';\nimport Point from '../geometry/point';\nimport { Observable } from '../common';\nimport { eventElement, eventCoordinates, elementPadding, elementScale, elementSize, elementOffset } from '../util';\n\nconst events = [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\"\n];\n\nclass Surface extends Observable {\n constructor(element, options) {\n super();\n\n this.options = Object.assign({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n\n this._click = this._handler(\"click\");\n this._mouseenter = this._handler(\"mouseenter\");\n this._mouseleave = this._handler(\"mouseleave\");\n this._mousemove = this._handler(\"mousemove\");\n\n this._visual = new Group();\n\n elementSize(element, this.options);\n\n this.bind(events, this.options);\n\n this._enableTracking();\n }\n\n draw(element) {\n this._visual.children.push(element);\n }\n\n clear() {\n this._visual.children = [];\n }\n\n destroy() {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n }\n\n eventTarget(e) {\n let domNode = eventElement(e);\n let node;\n\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this.element) {\n break;\n }\n\n domNode = domNode.parentElement;\n }\n\n if (node) {\n return node.srcElement;\n }\n }\n\n exportVisual() {\n return this._visual;\n }\n\n getSize() {\n return elementSize(this.element);\n }\n\n currentSize(size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n }\n\n setSize(size) {\n elementSize(this.element, size);\n\n this.currentSize(size);\n this._resize();\n }\n\n resize(force) {\n const size = this.getSize();\n const currentSize = this.currentSize();\n\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger(\"resize\", size);\n }\n }\n\n size(value) {\n if (!value) {\n return this.getSize();\n }\n\n this.setSize(value);\n }\n\n suspendTracking() {\n this._suspendedTracking = true;\n }\n\n resumeTracking() {\n this._suspendedTracking = false;\n }\n\n _enableTracking() {}\n\n _resize() {}\n\n _handler(eventName) {\n return (e) => {\n const node = this.eventTarget(e);\n if (node && !this._suspendedTracking) {\n this.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n }\n\n _elementOffset() {\n const element = this.element;\n const padding = elementPadding(element);\n const { left, top } = elementOffset(element);\n\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n }\n\n _surfacePoint(e) {\n const offset = this._elementOffset();\n const coord = eventCoordinates(e);\n const x = coord.x - offset.left;\n const y = coord.y - offset.top;\n\n const inverseTransform = elementScale(this.element).invert();\n const point = new Point(\n x,\n y\n ).transform(inverseTransform);\n\n return point;\n }\n}\n\nexport default Surface;\n","import { Class } from '../common';\n\nclass BaseNode extends Class {\n constructor(srcElement) {\n super();\n\n this.childNodes = [];\n this.parent = null;\n\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n\n destroy() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n const children = this.childNodes;\n for (let i = 0; i < children.length; i++) {\n this.childNodes[i].destroy();\n }\n\n this.parent = null;\n }\n\n load() {}\n\n observe() {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n }\n\n append(node) {\n this.childNodes.push(node);\n node.parent = this;\n }\n\n insertAt(node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n }\n\n remove(index, count) {\n const end = index + count;\n for (let i = index; i < end; i++) {\n this.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n }\n\n removeSelf() {\n this.clear();\n this.destroy();\n }\n\n clear() {\n this.remove(0, this.childNodes.length);\n }\n\n invalidate() {\n if (this.parent) {\n this.parent.invalidate();\n }\n }\n\n geometryChange() {\n this.invalidate();\n }\n\n optionsChange() {\n this.invalidate();\n }\n\n childrenChange(e) {\n if (e.action === \"add\") {\n this.load(e.items, e.index);\n } else if (e.action === \"remove\") {\n this.remove(e.index, e.items.length);\n }\n\n this.invalidate();\n }\n}\n\nexport default BaseNode;","import { defined } from '../../util';\n\nexport default function renderAttr(name, value) {\n return (defined(value) && value !== null) ? ` ${ name }=\"${ value }\" ` : \"\";\n}","import renderAttr from './render-attribute';\n\nexport default function renderAllAttr(attrs) {\n let output = \"\";\n for (let i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n\n return output;\n}","import { defined } from '../../util';\n\nexport default function renderStyle(attrs) {\n let output = \"\";\n for (let i = 0; i < attrs.length; i++) {\n let value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + \":\" + value + \";\";\n }\n }\n\n if (output !== \"\") {\n return output;\n }\n}","const NODE_MAP = {};\n\nexport default NODE_MAP;","const SVG_NS = \"http://www.w3.org/2000/svg\";\nconst NONE = \"none\";\n\nexport { SVG_NS, NONE };","import { SVG_NS } from '../constants';\n\nlet renderSVG = function(container, svg) {\n container.innerHTML = svg;\n};\n\nif (typeof document !== \"undefined\") {\n const testFragment = \"\";\n const testContainer = document.createElement(\"div\");\n const hasParser = typeof DOMParser !== \"undefined\";\n\n testContainer.innerHTML = testFragment;\n\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function(container, svg) {\n const parser = new DOMParser();\n const chartDoc = parser.parseFromString(svg, \"text/xml\");\n const importedDoc = document.adoptNode(chartDoc.documentElement);\n\n container.innerHTML = \"\";\n container.appendChild(importedDoc);\n };\n }\n}\n\nexport default renderSVG;","import BaseNode from '../core/base-node';\nimport renderAllAttr from './utils/render-all-attributes';\nimport renderAttr from './utils/render-attribute';\nimport renderStyle from './utils/render-style';\nimport NODE_MAP from './node-map';\nimport renderSVG from './utils/render-svg';\nimport { SVG_NS, NONE } from './constants';\nimport { support } from '../common';\nimport { defined } from '../util';\n\nconst TRANSFORM = \"transform\";\nconst DefinitionMap = {\n clip: \"clip-path\",\n fill: \"fill\"\n};\n\nfunction isDefinition(type, value) {\n return type === \"clip\" || (type === \"fill\" && (!value || value.nodeType === \"Gradient\"));\n}\n\nfunction baseUrl() {\n const base = document.getElementsByTagName(\"base\")[0];\n let href = document.location.href;\n let url = \"\";\n\n if (base && !(support.browser || {}).msie) {\n const hashIndex = href.indexOf(\"#\");\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n\n url = href;\n }\n\n return url;\n}\n\nclass Node extends BaseNode {\n\n constructor(srcElement, options) {\n super(srcElement);\n this.definitions = {};\n\n this.options = options;\n }\n\n destroy() {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n\n this.clearDefinitions();\n super.destroy();\n }\n\n load(elements, pos) {\n for (let i = 0; i < elements.length; i++) {\n const srcElement = elements[i];\n const children = srcElement.children;\n\n const childNode = new NODE_MAP[srcElement.nodeType](srcElement, this.options);\n\n if (defined(pos)) {\n this.insertAt(childNode, pos);\n } else {\n this.append(childNode);\n }\n\n childNode.createDefinitions();\n\n if (children && children.length > 0) {\n childNode.load(children);\n }\n\n const element = this.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n }\n\n root() {\n let root = this;\n\n while (root.parent) {\n root = root.parent;\n }\n\n return root;\n }\n\n attachTo(domElement, pos) {\n const container = document.createElement(\"div\");\n renderSVG(container,\n \"\"\n );\n\n const element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n }\n\n setElement(element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n\n this.element = element;\n this.element._kendoNode = this;\n\n const nodes = this.childNodes;\n for (let i = 0; i < nodes.length; i++) {\n let childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n }\n\n clear() {\n this.clearDefinitions();\n\n if (this.element) {\n this.element.innerHTML = \"\";\n }\n\n const children = this.childNodes;\n for (let i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n\n this.childNodes = [];\n }\n\n removeSelf() {\n if (this.element) {\n const parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n\n super.removeSelf();\n }\n\n template() {\n return this.renderChildren();\n }\n\n render() {\n return this.template();\n }\n\n renderChildren() {\n const nodes = this.childNodes;\n let output = \"\";\n\n for (let i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n\n return output;\n }\n\n optionsChange(e) {\n const { field, value } = e;\n\n if (field === \"visible\") {\n this.css(\"display\", value ? \"\" : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === \"opacity\") {\n this.attr(\"opacity\", value);\n } else if (field === \"cursor\") {\n this.css(\"cursor\", value);\n } else if (field === \"id\") {\n if (value) {\n this.attr(\"id\", value);\n } else {\n this.removeAttr(\"id\");\n }\n }\n\n super.optionsChange(e);\n }\n\n attr(name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n }\n\n allAttr(attrs) {\n for (let i = 0; i < attrs.length; i++) {\n this.attr(attrs[i][0], attrs[i][1]);\n }\n }\n\n css(name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n }\n\n allCss(styles) {\n for (let i = 0; i < styles.length; i++) {\n this.css(styles[i][0], styles[i][1]);\n }\n }\n\n removeAttr(name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n }\n\n mapTransform(transform) {\n const attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n \"matrix(\" + transform.matrix().toString(6) + \")\"\n ]);\n }\n\n return attrs;\n }\n\n renderTransform() {\n return renderAllAttr(\n this.mapTransform(this.srcElement.transform())\n );\n }\n\n transformChange(value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n }\n\n mapStyle() {\n const options = this.srcElement.options;\n const style = [ [ \"cursor\", options.cursor ] ];\n\n if (options.visible === false) {\n style.push([ \"display\", NONE ]);\n }\n\n return style;\n }\n\n renderStyle() {\n return renderAttr(\"style\", renderStyle(this.mapStyle(true)));\n }\n\n renderOpacity() {\n return renderAttr(\"opacity\", this.srcElement.options.opacity);\n }\n\n renderId() {\n return renderAttr(\"id\", this.srcElement.options.id);\n }\n\n createDefinitions() {\n const srcElement = this.srcElement;\n const definitions = this.definitions;\n if (srcElement) {\n const options = srcElement.options;\n let hasDefinitions;\n\n for (let field in DefinitionMap) {\n let definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: \"add\",\n definitions: definitions\n });\n }\n }\n }\n\n definitionChange(e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n }\n\n updateDefinition(type, value) {\n const definitions = this.definitions;\n const current = definitions[type];\n const attr = DefinitionMap[type];\n const definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: \"remove\",\n definitions: definition\n });\n delete definitions[type];\n }\n\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: \"add\",\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n }\n\n clearDefinitions() {\n const definitions = this.definitions;\n\n this.definitionChange({\n action: \"remove\",\n definitions: definitions\n });\n this.definitions = {};\n }\n\n renderDefinitions() {\n return renderAllAttr(this.mapDefinitions());\n }\n\n mapDefinitions() {\n const definitions = this.definitions;\n const attrs = [];\n\n for (let field in definitions) {\n attrs.push([ DefinitionMap[field], this.refUrl(definitions[field].id) ]);\n }\n\n return attrs;\n }\n\n refUrl(id) {\n const skipBaseHref = (this.options || {}).skipBaseHref;\n const baseHref = this.baseUrl().replace(/'/g, \"\\\\'\");\n const base = skipBaseHref ? '' : baseHref;\n return `url(${ base }#${ id })`;\n }\n\n baseUrl() {\n return baseUrl();\n }\n}\n\nexport default Node;\n","import Node from './node';\nimport renderAttr from './utils/render-attribute';\n\nclass GradientStopNode extends Node {\n template() {\n return ``;\n }\n\n renderOffset() {\n return renderAttr(\"offset\", this.srcElement.offset());\n }\n\n mapStyle() {\n const srcElement = this.srcElement;\n return [\n [ \"stop-color\", srcElement.color() ],\n [ \"stop-opacity\", srcElement.opacity() ]\n ];\n }\n\n optionsChange(e) {\n if (e.field === \"offset\") {\n this.attr(e.field, e.value);\n } else if (e.field === \"color\" || e.field === \"opacity\") {\n this.css(\"stop-\" + e.field, e.value);\n }\n }\n}\n\nexport default GradientStopNode;","import GradientStopNode from './gradient-stop-node';\nimport BaseNode from '../core/base-node';\nimport Node from './node';\nimport renderAllAttr from './utils/render-all-attributes';\n\nclass GradientNode extends Node {\n constructor(srcElement) {\n super(srcElement);\n\n this.id = srcElement.id;\n\n this.loadStops();\n }\n\n loadStops() {\n const stops = this.srcElement.stops;\n const element = this.element;\n\n for (let idx = 0; idx < stops.length; idx++) {\n let stopNode = new GradientStopNode(stops[idx]);\n this.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n }\n\n optionsChange(e) {\n if (e.field === \"gradient.stops\") {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === \"gradient\") {\n this.allAttr(this.mapCoordinates());\n }\n }\n\n renderCoordinates() {\n return renderAllAttr(this.mapCoordinates());\n }\n\n mapSpace() {\n return [ \"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\" ];\n }\n}\n\nexport default GradientNode;","import GradientNode from './gradient-node';\n\nclass LinearGradientNode extends GradientNode {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n mapCoordinates() {\n const srcElement = this.srcElement;\n const start = srcElement.start();\n const end = srcElement.end();\n const attrs = [\n [ \"x1\", start.x ],\n [ \"y1\", start.y ],\n [ \"x2\", end.x ],\n [ \"y2\", end.y ],\n this.mapSpace()\n ];\n\n return attrs;\n }\n}\n\nexport default LinearGradientNode;","import GradientNode from './gradient-node';\n\nclass RadialGradientNode extends GradientNode {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n mapCoordinates() {\n const srcElement = this.srcElement;\n const center = srcElement.center();\n const radius = srcElement.radius();\n const attrs = [\n [ \"cx\", center.x ],\n [ \"cy\", center.y ],\n [ \"r\", radius ],\n this.mapSpace()\n ];\n return attrs;\n }\n}\n\nexport default RadialGradientNode;","import Node from './node';\n\nclass ClipNode extends Node {\n constructor(srcElement) {\n super();\n\n this.srcElement = srcElement;\n this.id = srcElement.id;\n\n this.load([ srcElement ]);\n }\n\n template() {\n return `${ this.renderChildren() }`;\n }\n}\n\nexport default ClipNode;","import LinearGradient from '../gradients/linear-gradient';\nimport RadialGradient from '../gradients/radial-gradient';\nimport LinearGradientNode from './linear-gradient-node';\nimport RadialGradientNode from './radial-gradient-node';\nimport Node from './node';\nimport ClipNode from './clip-node';\n\nclass DefinitionNode extends Node {\n constructor() {\n super();\n this.definitionMap = {};\n }\n\n attachTo(domElement) {\n this.element = domElement;\n }\n\n template() {\n return `${ this.renderChildren() }`;\n }\n\n definitionChange(e) {\n const { definitions, action } = e;\n\n if (action === \"add\") {\n this.addDefinitions(definitions);\n } else if (action === \"remove\") {\n this.removeDefinitions(definitions);\n }\n }\n\n createDefinition(type, item) {\n let nodeType;\n if (type === \"clip\") {\n nodeType = ClipNode;\n } else if (type === \"fill\") {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n }\n\n addDefinitions(definitions) {\n for (let field in definitions) {\n this.addDefinition(field, definitions[field]);\n }\n }\n\n addDefinition(type, srcElement) {\n const { element, definitionMap } = this;\n const id = srcElement.id;\n const mapItem = definitionMap[id];\n if (!mapItem) {\n const node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n }\n\n removeDefinitions(definitions) {\n for (let field in definitions) {\n this.removeDefinition(definitions[field]);\n }\n }\n\n removeDefinition(srcElement) {\n const definitionMap = this.definitionMap;\n const id = srcElement.id;\n const mapItem = definitionMap[id];\n\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n}\n\nexport default DefinitionNode;","import BaseNode from '../core/base-node';\nimport Node from './node';\nimport DefinitionNode from './definition-node';\n\nclass RootNode extends Node {\n constructor(options) {\n super();\n this.options = options;\n this.defs = new DefinitionNode();\n }\n\n attachTo(domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n }\n\n clear() {\n BaseNode.prototype.clear.call(this);\n }\n\n template() {\n return this.defs.render() + this.renderChildren();\n }\n\n definitionChange(e) {\n this.defs.definitionChange(e);\n }\n}\n\nexport default RootNode;","const DASH_ARRAYS = {\n dot: [ 1.5, 3.5 ],\n dash: [ 4, 3.5 ],\n longdash: [ 8, 3.5 ],\n dashdot: [ 3.5, 3.5, 1.5, 3.5 ],\n longdashdot: [ 8, 3.5, 1.5, 3.5 ],\n longdashdotdot: [ 8, 3.5, 1.5, 3.5, 1.5, 3.5 ]\n};\n\nconst SOLID = \"solid\";\nconst BUTT = \"butt\";\n\nexport { DASH_ARRAYS, SOLID, BUTT };","import Node from './node';\nimport { defined, isTransparent } from '../util';\nimport { DASH_ARRAYS, SOLID, BUTT } from '../core/constants';\nimport { NONE } from './constants';\nimport renderAllAttr from './utils/render-all-attributes';\nimport renderAttr from './utils/render-attribute';\n\nconst ATTRIBUTE_MAP = {\n \"fill.opacity\": \"fill-opacity\",\n \"stroke.color\": \"stroke\",\n \"stroke.width\": \"stroke-width\",\n \"stroke.opacity\": \"stroke-opacity\"\n};\nconst SPACE = \" \";\n\nclass PathNode extends Node {\n\n geometryChange() {\n this.attr(\"d\", this.renderData());\n this.invalidate();\n }\n\n optionsChange(e) {\n switch (e.field) {\n case \"fill\":\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr(\"fill\");\n }\n break;\n\n case \"fill.color\":\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n\n case \"stroke\":\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr(\"stroke\");\n }\n break;\n\n case \"transform\":\n this.transformChange(e.value);\n break;\n\n default:\n const name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n\n super.optionsChange(e);\n }\n\n content() {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n }\n\n renderData() {\n return this.printPath(this.srcElement);\n }\n\n printPath(path) {\n const segments = path.segments;\n const length = segments.length;\n if (length > 0) {\n const parts = [];\n let output, currentType;\n\n for (let i = 1; i < length; i++) {\n let segmentType = this.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n\n if (segmentType === \"L\") {\n parts.push(this.printPoints(segments[i].anchor()));\n } else {\n parts.push(this.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n\n output = \"M\" + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += \"Z\";\n }\n\n return output;\n }\n }\n\n printPoints() {\n const points = arguments;\n const length = points.length;\n const result = [];\n\n for (let i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n\n return result.join(\" \");\n }\n\n segmentType(segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? \"C\" : \"L\";\n }\n\n mapStroke(stroke) {\n const attrs = [];\n\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([ \"stroke\", stroke.color ]);\n attrs.push([ \"stroke-width\", stroke.width ]);\n attrs.push([ \"stroke-linecap\", this.renderLinecap(stroke) ]);\n attrs.push([ \"stroke-linejoin\", stroke.lineJoin ]);\n\n if (defined(stroke.opacity)) {\n attrs.push([ \"stroke-opacity\", stroke.opacity ]);\n }\n\n if (defined(stroke.dashType)) {\n attrs.push([ \"stroke-dasharray\", this.renderDashType(stroke) ]);\n }\n } else {\n attrs.push([ \"stroke\", NONE ]);\n }\n\n return attrs;\n }\n\n renderStroke() {\n return renderAllAttr(\n this.mapStroke(this.srcElement.options.stroke)\n );\n }\n\n renderDashType(stroke) {\n const { dashType, width = 1 } = stroke;\n\n if (dashType && dashType !== SOLID) {\n const dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n const result = [];\n\n for (let i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n\n return result.join(\" \");\n }\n }\n\n renderLinecap(stroke) {\n const { dashType, lineCap } = stroke;\n\n return (dashType && dashType !== \"solid\") ? BUTT : lineCap;\n }\n\n mapFill(fill) {\n const attrs = [];\n if (!(fill && fill.nodeType === \"Gradient\")) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([ \"fill\", fill.color ]);\n\n if (defined(fill.opacity)) {\n attrs.push([ \"fill-opacity\", fill.opacity ]);\n }\n } else {\n attrs.push([ \"fill\", NONE ]);\n }\n }\n\n return attrs;\n }\n\n renderFill() {\n return renderAllAttr(\n this.mapFill(this.srcElement.options.fill)\n );\n }\n\n template() {\n return ``;\n }\n}\n\nexport default PathNode;\n","import PathNode from './path-node';\n\nclass ArcNode extends PathNode {\n renderData() {\n return this.printPath(this.srcElement.toPath());\n }\n}\n\nexport default ArcNode;\n","import PathNode from './path-node';\n\nclass CircleNode extends PathNode {\n\n geometryChange() {\n const center = this.center();\n this.attr(\"cx\", center.x);\n this.attr(\"cy\", center.y);\n this.attr(\"r\", this.radius());\n this.invalidate();\n }\n\n center() {\n return this.srcElement.geometry().center;\n }\n\n radius() {\n return this.srcElement.geometry().radius;\n }\n\n template() {\n return ``;\n }\n}\n\nexport default CircleNode;\n","import Node from './node';\n\nclass GroupNode extends Node {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n optionsChange(e) {\n if (e.field === \"transform\") {\n this.transformChange(e.value);\n }\n\n super.optionsChange(e);\n }\n}\n\nexport default GroupNode;\n","const ampRegExp = /&/g;\nconst ltRegExp = //g;\n\nexport default function htmlEncode(value) {\n return String(value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n}","import PathNode from './path-node';\nimport renderAllAttr from './utils/render-all-attributes';\nimport { htmlEncode } from '../common';\n\nclass ImageNode extends PathNode {\n\n geometryChange() {\n this.allAttr(this.mapPosition());\n this.invalidate();\n }\n\n optionsChange(e) {\n if (e.field === \"src\") {\n this.allAttr(this.mapSource());\n }\n\n super.optionsChange(e);\n }\n\n mapPosition() {\n const rect = this.srcElement.rect();\n const tl = rect.topLeft();\n\n return [\n [ \"x\", tl.x ],\n [ \"y\", tl.y ],\n [ \"width\", rect.width() + \"px\" ],\n [ \"height\", rect.height() + \"px\" ]\n ];\n }\n\n renderPosition() {\n return renderAllAttr(this.mapPosition());\n }\n\n mapSource(encode) {\n let src = this.srcElement.src();\n\n if (encode) {\n src = htmlEncode(src);\n }\n\n return [ [ \"xlink:href\", src ] ];\n }\n\n renderSource() {\n return renderAllAttr(this.mapSource(true));\n }\n\n template() {\n return `` +\n ``;\n }\n}\n\nexport default ImageNode;\n","import PathNode from './path-node';\n\nclass MultiPathNode extends PathNode {\n renderData() {\n const paths = this.srcElement.paths;\n\n if (paths.length > 0) {\n const result = [];\n\n for (let i = 0; i < paths.length; i++) {\n result.push(this.printPath(paths[i]));\n }\n\n return result.join(\" \");\n }\n }\n}\n\nexport default MultiPathNode;\n","import PathNode from './path-node';\n\nclass RectNode extends PathNode {\n\n geometryChange() {\n const geometry = this.srcElement.geometry();\n this.attr(\"x\", geometry.origin.x);\n this.attr(\"y\", geometry.origin.y);\n this.attr(\"width\", geometry.size.width);\n this.attr(\"height\", geometry.size.height);\n this.attr(\"rx\", geometry.cornerRadius[0]);\n this.attr(\"ry\", geometry.cornerRadius[1]);\n this.invalidate();\n }\n\n size() {\n return this.srcElement.geometry().size;\n }\n\n origin() {\n return this.srcElement.geometry().origin;\n }\n\n rx() {\n return this.srcElement.geometry().cornerRadius[0];\n }\n\n ry() {\n return this.srcElement.geometry().cornerRadius[1];\n }\n\n template() {\n return ``;\n }\n}\n\nexport default RectNode;\n","import PathNode from './path-node';\nimport renderStyle from './utils/render-style';\nimport renderAttr from './utils/render-attribute';\nimport { htmlEncode, support } from '../common';\nimport { normalizeText } from '../text-metrics';\n\nconst ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n\nfunction decodeEntities(text) {\n if (!text || typeof text !== \"string\" || !ENTITY_REGEX.test(text)) {\n return text;\n }\n\n const element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n\n return text.replace(ENTITY_REGEX, (match) => {\n element.innerHTML = match;\n\n return element.textContent || element.innerText;\n });\n}\n\nif (typeof document !== \"undefined\") {\n decodeEntities._element = document.createElement(\"span\");\n}\n\nclass TextNode extends PathNode {\n\n geometryChange() {\n const pos = this.pos();\n this.attr(\"x\", pos.x);\n this.attr(\"y\", pos.y);\n this.invalidate();\n }\n\n optionsChange(e) {\n if (e.field === \"font\") {\n this.attr(\"style\", renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === \"content\") {\n super.content(this.srcElement.content());\n }\n\n super.optionsChange(e);\n }\n\n mapStyle(encode) {\n const style = super.mapStyle(encode);\n let font = this.srcElement.options.font;\n\n if (encode) {\n font = htmlEncode(font);\n }\n\n style.push([ \"font\", font ], [ \"white-space\", \"pre\" ]);\n\n return style;\n }\n\n pos() {\n const pos = this.srcElement.position();\n const size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n }\n\n renderContent() {\n let content = this.srcElement.content();\n content = decodeEntities(content);\n content = htmlEncode(content);\n\n return normalizeText(content);\n }\n\n renderTextAnchor() {\n let anchor;\n\n if ((this.options || {}).rtl && !(support.browser.msie || support.browser.edge)) {\n anchor = 'end';\n }\n\n return renderAttr(\"text-anchor\", anchor);\n }\n\n template() {\n return `${ this.renderContent() }`;\n }\n}\n\nexport default TextNode;\n","import BaseSurface from '../core/surface';\nimport RootNode from './root-node';\nimport Group from '../shapes/group';\nimport transform from '../geometry/transform';\nimport renderSVG from './utils/render-svg';\nimport { SVG_NS } from './constants';\nimport { bindEvents, unbindEvents, elementStyles } from '../util';\n\nimport ArcNode from './arc-node';\nimport CircleNode from './circle-node';\nimport GroupNode from './group-node';\nimport ImageNode from './image-node';\nimport MultiPathNode from './multi-path-node';\nimport PathNode from './path-node';\nimport RectNode from './rect-node';\nimport TextNode from './text-node';\nimport NODE_MAP from './node-map';\n\nNODE_MAP.Arc = ArcNode;\nNODE_MAP.Circle = CircleNode;\nNODE_MAP.Group = GroupNode;\nNODE_MAP.Image = ImageNode;\nNODE_MAP.MultiPath = MultiPathNode;\nNODE_MAP.Path = PathNode;\nNODE_MAP.Rect = RectNode;\nNODE_MAP.Text = TextNode;\n\nconst RTL = 'rtl';\n\nfunction alignToScreen(element) {\n let ctm;\n\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) { } // eslint-disable-line no-empty\n\n if (ctm) {\n const left = - ctm.e % 1;\n const top = - ctm.f % 1;\n const style = element.style;\n\n if (left !== 0 || top !== 0) {\n style.left = left + \"px\";\n style.top = top + \"px\";\n }\n }\n}\n\nclass Surface extends BaseSurface {\n get type() {\n return \"svg\";\n }\n\n constructor(element, options) {\n super(element, options);\n\n this._root = new RootNode(Object.assign({\n rtl: elementStyles(element, 'direction').direction === RTL\n }, this.options));\n\n renderSVG(this.element, this._template());\n\n this._rootElement = this.element.firstElementChild;\n\n alignToScreen(this._rootElement);\n\n this._root.attachTo(this._rootElement);\n\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n\n this.resize();\n }\n\n destroy() {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n\n super.destroy();\n }\n\n translate(offset) {\n const viewBox = `${ Math.round(offset.x) } ${ Math.round(offset.y) } ${ this._size.width } ${ this._size.height }`;\n\n this._offset = offset;\n this._rootElement.setAttribute(\"viewBox\", viewBox);\n }\n\n draw(element) {\n super.draw(element);\n this._root.load([ element ]);\n }\n\n clear() {\n super.clear();\n this._root.clear();\n }\n\n svg() {\n return \"\" + this._template();\n }\n\n exportVisual() {\n let { _visual: visual, _offset: offset } = this;\n\n if (offset) {\n const wrap = new Group();\n wrap.children.push(visual);\n\n wrap.transform(\n transform().translate(-offset.x, -offset.y)\n );\n\n visual = wrap;\n }\n\n return visual;\n }\n\n _resize() {\n if (this._offset) {\n this.translate(this._offset);\n }\n }\n\n _template() {\n return ``;\n }\n}\n\nexport default Surface;\n","const NODE_MAP = {};\n\nexport default NODE_MAP;","\nexport default function renderPath(ctx, path) {\n const segments = path.segments;\n\n if (segments.length === 0) {\n return;\n }\n\n let segment = segments[0];\n let anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n\n for (let i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n\n let prevSeg = segments[i - 1];\n let prevOut = prevSeg.controlOut();\n let controlIn = segment.controlIn();\n\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y,\n controlIn.x, controlIn.y,\n anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n\n if (path.options.closed) {\n ctx.closePath();\n }\n}","import BaseNode from '../core/base-node';\nimport NODE_MAP from './node-map';\nimport renderPath from './utils/render-path';\nimport { defined } from '../util';\n\nclass Node extends BaseNode {\n constructor(srcElement) {\n super(srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n\n initClip() {\n const clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n }\n\n clear() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n this.clearClip();\n\n super.clear();\n }\n\n clearClip() {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n }\n\n setClip(ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n }\n\n optionsChange(e) {\n if (e.field === \"clip\") {\n this.clearClip();\n this.initClip();\n }\n\n super.optionsChange(e);\n }\n\n setTransform(ctx) {\n if (this.srcElement) {\n const transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n }\n\n loadElements(elements, pos, cors) {\n for (let i = 0; i < elements.length; i++) {\n let srcElement = elements[i];\n let children = srcElement.children;\n\n let childNode = new NODE_MAP[srcElement.nodeType](srcElement, cors);\n\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n\n if (defined(pos)) {\n this.insertAt(childNode, pos);\n } else {\n this.append(childNode);\n }\n }\n }\n\n load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n\n this.invalidate();\n }\n\n setOpacity(ctx) {\n if (this.srcElement) {\n const opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n }\n\n globalAlpha(ctx, value) {\n let opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n }\n\n visible() {\n const src = this.srcElement;\n return !src || (src && src.options.visible !== false);\n }\n}\n\nexport default Node;","import Node from './node';\nimport traversable from '../mixins/traversable';\n\n\nclass GroupNode extends traversable(Node, \"childNodes\") {\n renderTo(ctx) {\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n const childNodes = this.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n let child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n\n ctx.restore();\n }\n}\n\nexport default GroupNode;\n","import GroupNode from './group-node';\nimport traversable from '../mixins/traversable';\nimport { animationFrame, throttle } from '../common';\n\n\nconst FRAME_DELAY = 1000 / 60;\n\nclass RootNode extends traversable(GroupNode, \"childNodes\") {\n constructor(canvas, size) {\n super();\n\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext(\"2d\");\n\n const invalidateHandler = this._invalidate.bind(this);\n this.invalidate = throttle(() => {\n animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n\n destroy() {\n super.destroy();\n this.canvas = null;\n this.ctx = null;\n }\n\n load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n }\n\n _rescale(scale) {\n const { canvas, size } = this;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n }\n\n _devicePixelRatio() {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n\n return 1;\n }\n\n _invalidate(options) {\n if (!this.ctx) {\n return;\n }\n\n const fixedScale = options && options.fixedScale;\n const scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n}\n\nexport default RootNode;\n","import { Class } from '../common';\n\nclass QuadRoot extends Class {\n constructor() {\n super();\n\n this.shapes = [];\n }\n\n _add(shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n }\n\n pointShapes(point) {\n const shapes = this.shapes;\n const length = shapes.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n }\n\n insert(shape, bbox) {\n this._add(shape, bbox);\n }\n\n remove(shape) {\n const shapes = this.shapes;\n const length = shapes.length;\n\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n}\n\nexport default QuadRoot;","import QuadRoot from './quad-root';\nimport { Rect } from '../geometry';\nimport { append } from '../util';\n\nclass QuadNode extends QuadRoot {\n constructor(rect) {\n super();\n this.children = [];\n this.rect = rect;\n }\n\n inBounds(rect) {\n const nodeRect = this.rect;\n const nodeBottomRight = nodeRect.bottomRight();\n const bottomRight = rect.bottomRight();\n const inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x &&\n bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n }\n\n pointShapes(point) {\n const children = this.children;\n const length = children.length;\n const result = super.pointShapes(point);\n for (let idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n }\n\n insert(shape, bbox) {\n const children = this.children;\n let inserted = false;\n\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n\n for (let idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n\n return inserted;\n }\n\n _initChildren() {\n const { rect, children } = this;\n const center = rect.center();\n const halfWidth = rect.width() / 2;\n const halfHeight = rect.height() / 2;\n\n children.push(\n new QuadNode(new Rect([ rect.origin.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ rect.origin.x, center.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, center.y ], [ halfWidth, halfHeight ]))\n );\n }\n}\n\nexport default QuadNode;","import QuadRoot from './quad-root';\nimport QuadNode from './quad-node';\nimport { Rect } from '../geometry';\nimport { Class } from '../common';\nimport { append } from '../util';\n\nconst ROOT_SIZE = 3000;\nconst LEVEL_STEP = 10000;\nconst MAX_LEVEL = 75;\n\nclass ShapesQuadTree extends Class {\n\n constructor() {\n super();\n\n this.initRoots();\n }\n\n initRoots() {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n }\n\n clear() {\n const rootElements = this.rootElements;\n for (let idx = 0; idx < rootElements.length; idx++) {\n this.remove(rootElements[idx]);\n }\n this.initRoots();\n }\n\n pointShape(point) {\n const sectorRoot = ( this.rootMap[ Math.floor( point.x / ROOT_SIZE ) ] || {} )[ Math.floor( point.y / ROOT_SIZE ) ];\n let result = this.root.pointShapes(point);\n\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n\n this.assignZindex(result);\n\n result.sort(zIndexComparer);\n for (let idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n }\n\n assignZindex(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n let element = elements[idx];\n let zIndex = 0;\n let levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n let parents = [];\n\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n\n elements[idx]._zIndex = zIndex;\n }\n }\n\n optionsChange(e) {\n if (e.field === \"transform\" || e.field === \"stroke.width\") {\n this.bboxChange(e.element);\n }\n }\n\n geometryChange(e) {\n this.bboxChange(e.element);\n }\n\n bboxChange(element) {\n if (element.nodeType === \"Group\") {\n for (let idx = 0; idx < element.children.length; idx++) {\n this.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n }\n\n add(elements) {\n const elementsArray = Array.isArray(elements) ? elements.slice(0) : [ elements ];\n\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n }\n\n childrenChange(e) {\n if (e.action === \"remove\") {\n for (let idx = 0; idx < e.items.length; idx++) {\n this.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n }\n\n _insert(elements) {\n let element;\n\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this);\n if (element.nodeType === \"Group\") {\n append(elements, element.children);\n } else {\n this._insertShape(element);\n }\n }\n }\n\n _insertShape(shape) {\n const bbox = shape.bbox();\n if (bbox) {\n const sectors = this.getSectors(bbox);\n const x = sectors[0][0];\n const y = sectors[1][0];\n\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n const rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(\n new Rect([ x * ROOT_SIZE, y * ROOT_SIZE ], [ ROOT_SIZE, ROOT_SIZE ])\n );\n }\n\n rootMap[x][y].insert(shape, bbox);\n }\n }\n }\n\n remove(element) {\n element.removeObserver(this);\n\n if (element.nodeType === \"Group\") {\n const children = element.children;\n for (let idx = 0; idx < children.length; idx++) {\n this.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n }\n\n inRoot(sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n }\n\n getSectors(rect) {\n const bottomRight = rect.bottomRight();\n const bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n const bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n const sectors = [ [], [] ];\n for (let x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (let y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n}\n\nfunction zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n\n return 0;\n}\n\nexport default ShapesQuadTree;","import Node from './node';\nimport { parseColor } from '../common';\nimport { isTransparent, valueOrDefault } from '../util';\nimport LinearGradient from '../gradients/linear-gradient';\nimport RadialGradient from '../gradients/radial-gradient';\nimport { DASH_ARRAYS, SOLID, BUTT } from '../core/constants';\nimport renderPath from './utils/render-path';\n\nfunction addGradientStops(gradient, stops) {\n for (let idx = 0; idx < stops.length; idx++) {\n let stop = stops[idx];\n let color = parseColor(stop.color());\n\n color.a *= stop.opacity();\n\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n}\n\nclass PathNode extends Node {\n\n renderTo(ctx) {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n this.renderPoints(ctx, this.srcElement);\n\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n\n this.setFill(ctx);\n this.setStroke(ctx);\n\n ctx.restore();\n }\n\n setFill(ctx) {\n const fill = this.srcElement.options.fill;\n let hasFill = false;\n\n if (fill) {\n if (fill.nodeType === \"Gradient\") {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n\n hasFill = true;\n }\n }\n\n return hasFill;\n }\n\n setGradientFill(ctx, fill) {\n const bbox = this.srcElement.rawBBox();\n let gradient;\n\n if (fill instanceof LinearGradient) {\n let start = fill.start();\n let end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n let center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n\n addGradientStops(gradient, fill.stops);\n\n ctx.save();\n\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n\n ctx.restore();\n }\n\n setStroke(ctx) {\n const stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n\n return true;\n }\n }\n\n dashType() {\n const stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n }\n\n setLineDash(ctx) {\n const dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n const dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n }\n\n setLineCap(ctx) {\n const dashType = this.dashType();\n const stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n }\n\n setLineJoin(ctx) {\n const stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n }\n\n renderPoints(ctx, path) {\n renderPath(ctx, path);\n }\n}\n\nexport default PathNode;\n","import PathNode from './path-node';\nimport renderPath from './utils/render-path';\n\nclass ArcNode extends PathNode {\n renderPoints(ctx) {\n const path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n}\n\nexport default ArcNode;\n","import PathNode from './path-node';\n\nclass CircleNode extends PathNode {\n renderPoints(ctx) {\n const { center, radius } = this.srcElement.geometry();\n\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n}\n\nexport default CircleNode;\n","import PathNode from './path-node';\nimport { createPromise } from '../util';\n\nclass ImageNode extends PathNode {\n constructor(srcElement, cors) {\n super(srcElement);\n\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n\n this.loading = createPromise();\n\n const img = this.img = new Image();\n\n if (cors && !(/^data:/i.test(srcElement.src()))) {\n img.crossOrigin = cors;\n }\n\n img.src = srcElement.src();\n\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n }\n\n renderTo(ctx) {\n if (this.loading.state() === \"resolved\") {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n\n this.drawImage(ctx);\n\n ctx.restore();\n }\n }\n\n optionsChange(e) {\n if (e.field === \"src\") {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n super.optionsChange(e);\n }\n }\n\n onLoad() {\n this.loading.resolve();\n this.invalidate();\n }\n\n onError() {\n this.loading.reject(new Error(\n \"Unable to load image '\" + this.img.src +\n \"'. Check for connectivity and verify CORS headers.\"\n ));\n }\n\n drawImage(ctx) {\n const rect = this.srcElement.rect();\n const topLeft = rect.topLeft();\n\n ctx.drawImage(\n this.img, topLeft.x, topLeft.y, rect.width(), rect.height()\n );\n }\n}\n\nexport default ImageNode;\n","import PathNode from './path-node';\nimport renderPath from './utils/render-path';\n\nclass MultiPathNode extends PathNode {\n renderPoints(ctx) {\n const paths = this.srcElement.paths;\n for (let i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n}\n\nexport default MultiPathNode;\n","import { Path } from '../shapes/path';\nimport PathNode from './path-node';\n\nclass RectNode extends PathNode {\n renderPoints(ctx) {\n const geometry = this.srcElement.geometry();\n const [ rx, ry ] = geometry.cornerRadius;\n\n if (rx === 0 && ry === 0) {\n const { origin, size } = geometry;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n } else {\n super.renderPoints(ctx, Path.fromRect(geometry));\n }\n }\n}\n\nexport default RectNode;\n","import PathNode from './path-node';\n\nclass TextNode extends PathNode {\n renderTo(ctx) {\n const text = this.srcElement;\n const pos = text.position();\n const size = text.measure();\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n ctx.restore();\n }\n}\n\n\nexport default TextNode;\n","import BaseSurface from '../core/surface';\nimport { createPromise, promiseAll, bindEvents, elementSize, unbindEvents } from '../util';\nimport RootNode from './root-node';\nimport ShapesQuadTree from '../search/shapes-quad-tree';\nimport SurfaceCursor from './surface-cursor';\n\nimport ArcNode from './arc-node';\nimport CircleNode from './circle-node';\nimport GroupNode from './group-node';\nimport ImageNode from './image-node';\nimport MultiPathNode from './multi-path-node';\nimport PathNode from './path-node';\nimport RectNode from './rect-node';\nimport TextNode from './text-node';\nimport NODE_MAP from './node-map';\n\nNODE_MAP.Arc = ArcNode;\nNODE_MAP.Circle = CircleNode;\nNODE_MAP.Group = GroupNode;\nNODE_MAP.Image = ImageNode;\nNODE_MAP.MultiPath = MultiPathNode;\nNODE_MAP.Path = PathNode;\nNODE_MAP.Rect = RectNode;\nNODE_MAP.Text = TextNode;\n\n\nclass Surface extends BaseSurface {\n get type() {\n return \"canvas\";\n }\n\n constructor(element, options) {\n super(element, options);\n\n this.element.innerHTML = this._template(this);\n\n const canvas = this.element.firstElementChild;\n const size = elementSize(element);\n\n canvas.width = size.width;\n canvas.height = size.height;\n\n this._rootElement = canvas;\n\n this._root = new RootNode(canvas, size);\n\n this._mouseTrackHandler = this._trackMouse.bind(this);\n\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n destroy() {\n super.destroy();\n\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n draw(element) {\n super.draw(element);\n this._root.load([ element ], undefined, this.options.cors);\n\n if (this._searchTree) {\n this._searchTree.add([ element ]);\n }\n }\n\n clear() {\n super.clear();\n this._root.clear();\n\n if (this._searchTree) {\n this._searchTree.clear();\n }\n\n if (this._cursor) {\n this._cursor.clear();\n }\n }\n\n eventTarget(e) {\n if (this._searchTree) {\n const point = this._surfacePoint(e);\n const shape = this._searchTree.pointShape(point);\n return shape;\n }\n }\n\n image() {\n const { _root: root, _rootElement: rootElement } = this;\n const loadingStates = [];\n\n root.traverse((childNode) => {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n\n const promise = createPromise();\n const resolveDataURL = () => {\n root._invalidate({ fixedScale: true });\n\n try {\n const data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n\n return promise;\n }\n\n suspendTracking() {\n super.suspendTracking();\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n }\n\n resumeTracking() {\n super.resumeTracking();\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n\n const childNodes = this._root.childNodes;\n const rootElements = [];\n for (let idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n }\n\n _resize() {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n\n this._root.size = this._size;\n this._root.invalidate();\n }\n\n _template() {\n return \"\";\n }\n\n _enableTracking() {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n\n super._enableTracking();\n }\n\n _trackMouse(e) {\n if (this._suspendedTracking) {\n return;\n }\n\n const shape = this.eventTarget(e);\n\n if (e.type !== \"click\") {\n const currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger(\"mouseleave\", {\n element: currentShape,\n originalEvent: e,\n type: \"mouseleave\"\n });\n }\n\n if (shape && currentShape !== shape) {\n this.trigger(\"mouseenter\", {\n element: shape,\n originalEvent: e,\n type: \"mouseenter\"\n });\n }\n\n this.trigger(\"mousemove\", {\n element: shape,\n originalEvent: e,\n type: \"mousemove\"\n });\n\n this._currentShape = shape;\n } else if (shape) {\n this.trigger(\"click\", {\n element: shape,\n originalEvent: e,\n type: \"click\"\n });\n }\n }\n}\n\nexport default Surface;\n","import { defined } from '../util';\n\nclass SurfaceCursor {\n\n constructor(surface) {\n surface.bind(\"mouseenter\", this._mouseenter.bind(this));\n surface.bind(\"mouseleave\", this._mouseleave.bind(this));\n\n this.element = surface.element;\n }\n\n clear() {\n this._resetCursor();\n }\n\n destroy() {\n this._resetCursor();\n delete this.element;\n }\n\n _mouseenter(e) {\n const cursor = this._shapeCursor(e);\n\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n\n this._setCursor(cursor);\n }\n }\n\n _mouseleave() {\n this._resetCursor();\n }\n\n _shapeCursor(e) {\n let shape = e.element;\n\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n\n if (shape) {\n return shape.options.cursor;\n }\n }\n\n _getCursor() {\n if (this.element) {\n return this.element.style.cursor;\n }\n }\n\n _setCursor(cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n }\n\n _resetCursor() {\n if (this._current) {\n this._setCursor(this._defaultCursor || \"\");\n delete this._current;\n }\n }\n}\n\nexport default SurfaceCursor;\n\n","import { Class, logToConsole } from './common';\nimport SVGSurface from './svg/surface';\nimport CanvasSurface from './canvas/surface';\n\nlet instance;\nlet support;\n\nconst hasDocument = () => typeof document !== \"undefined\";\n\nconst supportsCanvas = () => hasDocument() &&\n document.createElement(\"canvas\").getContext;\n\nconst supportsSVG = () => hasDocument() &&\n document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\");\n\nclass SurfaceFactory extends Class {\n static get support() {\n if (!support) {\n support = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n\n return support;\n }\n\n static get current() {\n if (!instance) {\n instance = new SurfaceFactory();\n }\n\n return instance;\n }\n\n constructor() {\n super();\n\n this._items = [ {\n name: \"svg\",\n type: SVGSurface\n }, {\n name: \"canvas\",\n type: CanvasSurface\n } ];\n }\n\n create(element, options) {\n const items = this._items;\n let match = items[0];\n\n if (options && options.type) {\n const preferred = options.type.toLowerCase();\n for (let i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n\n if (match) {\n return new match.type(element, options);\n }\n\n logToConsole(\n \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n `- The browser does not support SVG and Canvas. User agent: ${ navigator.userAgent }`);\n }\n}\n\nexport default SurfaceFactory;\n\n","import BaseSurface from './core/surface';\nimport SurfaceFactory from './surface-factory';\n\nclass Surface extends BaseSurface {\n static get support() {\n return SurfaceFactory.support;\n }\n\n static create(element, options) {\n return SurfaceFactory.current.create(element, options);\n }\n}\n\nexport default Surface;\n\n","import { Class } from '../common';\n\nclass Highlight extends Class {\n constructor() {\n super();\n\n this._points = [];\n }\n\n destroy() {\n this._points = [];\n }\n\n show(points, opacity) {\n const arrayPoints = [].concat(points);\n this.hide();\n\n for (let i = 0; i < arrayPoints.length; i++) {\n const point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this.togglePointHighlight(point, true, opacity);\n this._points.push(point);\n }\n }\n }\n\n togglePointHighlight(point, show, opacity) {\n const toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n const eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show, opacity);\n }\n } else {\n point.toggleHighlight(show, opacity);\n }\n }\n\n hide() {\n const points = this._points;\n while (points.length) {\n this.togglePointHighlight(points.pop(), false);\n }\n }\n\n isHighlighted(element) {\n const points = this._points;\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n if (element === point) {\n return true;\n }\n }\n\n return false;\n }\n}\n\nfunction preventDefault() {\n this._defaultPrevented = true;\n}\n\nexport default Highlight;","export default function acceptKey(e, mouseKey) {\n const key = (mouseKey || \"\").toLowerCase();\n const event = e.event;\n const accept = (key === \"none\" && !(event.ctrlKey || event.shiftKey || event.altKey)) || event[key + \"Key\"];\n\n return accept;\n}","export default function toChartAxisRanges(axisRanges) {\n const ranges = {};\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n}","import acceptKey from './accept-key';\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend } from '../../common';\n\nclass Pannable extends Class {\n constructor(plotArea, options) {\n super();\n\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n }\n\n start(e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n }\n\n move(e) {\n if (this._active) {\n const axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n }\n\n end() {\n const active = this._active;\n this._active = false;\n\n return active;\n }\n\n pan() {\n const { plotArea, axisRanges } = this;\n if (axisRanges.length) {\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n delete this.plotArea;\n }\n\n _panAxes(e, position) {\n const plotArea = this.plotArea;\n const delta = -e[position].delta;\n const lock = (this.options.lock || \"\").toLowerCase();\n const updatedAxes = [];\n\n if (delta !== 0 && (lock || \"\").toLowerCase() !== position) {\n const axes = plotArea.axes;\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n const range = axis.pan(delta);\n\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n\n return updatedAxes;\n }\n}\n\nPannable.prototype.options = {\n key: \"none\",\n lock: \"none\"\n};\n\nexport default Pannable;","import acceptKey from './accept-key';\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend, elementStyles, elementOffset, defined } from '../../common';\n\nclass ZoomSelection extends Class {\n constructor(chart, options) {\n super();\n\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n }\n\n createElement() {\n const marquee = this._marquee = document.createElement(\"div\");\n marquee.className = \"k-marquee\";\n const marqueeColor = document.createElement(\"div\");\n marqueeColor.className = \"k-marquee-color\";\n marquee.appendChild(marqueeColor);\n }\n\n removeElement() {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n }\n\n setStyles(styles) {\n elementStyles(this._marquee, styles);\n }\n\n start(e) {\n if (acceptKey(e, this.options.key)) {\n const chart = this.chart;\n const point = chart._eventCoordinates(e);\n const zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n const clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n\n if (zoomPane && clipBox) {\n const offset = this._elementOffset();\n\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n\n return true;\n }\n }\n return false;\n }\n\n _elementOffset() {\n const chartElement = this.chart.element;\n const { paddingLeft, paddingTop } = elementStyles(chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n const offset = elementOffset(chartElement);\n\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n }\n\n move(e) {\n const zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n }\n\n end(e) {\n const zoomPane = this._zoomPane;\n if (zoomPane) {\n const elementOffset = this._elementOffset();\n const selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset.left;\n selectionPosition.top -= elementOffset.top;\n\n const start = { x: selectionPosition.left, y: selectionPosition.top };\n const end = { x: selectionPosition.left + selectionPosition.width, y: selectionPosition.top + selectionPosition.height };\n this._updateAxisRanges(start, end);\n\n this.removeElement();\n delete this._zoomPane;\n\n return toChartAxisRanges(this.axisRanges);\n }\n }\n\n zoom() {\n const axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n const plotArea = this.chart._plotArea;\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n }\n\n _updateAxisRanges(start, end) {\n const lock = (this.options.lock || \"\").toLowerCase();\n const axisRanges = [];\n\n const axes = this._zoomPane.axes;\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n const vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n const range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n }\n\n _selectionPosition(e) {\n const clipBox = this._zoomPaneClipBox;\n const startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n const { x: { location: pageX }, y: { location: pageY } } = e;\n const lock = (this.options.lock || \"\").toLowerCase();\n let left = Math.min(startLocation.x, pageX);\n let top = Math.min(startLocation.y, pageY);\n let width = Math.abs(startLocation.x - pageX);\n let height = Math.abs(startLocation.y - pageY);\n\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n}\n\nZoomSelection.prototype.options = {\n key: \"shift\",\n lock: \"none\"\n};\n\nexport default ZoomSelection;","\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend } from '../../common';\nimport { limitValue } from '../../drawing-utils';\n\n// Limit the zoom rate between 1% and 90% per mousewheel event.\n// At zoom rates close to 100% the axis range quickly becomes 0.\nconst MIN_RATE = 0.01;\nconst MAX_RATE = 0.9;\nconst DEFAULT_RATE = 0.3;\n\nclass MousewheelZoom extends Class {\n constructor(chart, options) {\n super();\n\n this.chart = chart;\n this.options = deepExtend({\n rate: DEFAULT_RATE\n }, this.options, options);\n }\n\n updateRanges(delta, coords) {\n const lock = (this.options.lock || \"\").toLowerCase();\n const axisRanges = [];\n const axes = this.chart._plotArea.axes;\n\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n const vertical = axis.options.vertical;\n\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n const rate = limitValue(this.options.rate, MIN_RATE, MAX_RATE);\n const range = axis.zoomRange(-delta * rate, coords);\n\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n\n zoom() {\n const axisRanges = this.axisRanges;\n const plotArea = this.chart._plotArea;\n\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n delete this.chart;\n }\n}\n\nexport default MousewheelZoom;\n","import createTransform from '../geometry/transform';\n\nexport default function translateToPoint(point, bbox, element) {\n const transofrm = element.transform() || createTransform();\n const matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n\n transofrm.matrix(matrix);\n element.transform(transofrm);\n}","\nexport default function alignStart(size, rect, align, axis, sizeField) {\n let start;\n if (align === \"start\") {\n start = rect.origin[axis];\n } else if (align === \"end\") {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n\n return start;\n}","\nexport default function alignStartReverse(size, rect, align, axis, sizeField) {\n let start;\n if (align === \"start\") {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === \"end\") {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n\n return start;\n}","import Group from './group';\nimport Size from '../geometry/size';\nimport Rect from '../geometry/rect';\nimport Point from '../geometry/point';\nimport createTransform from '../geometry/transform';\nimport translateToPoint from '../alignment/translate-to-point';\nimport alignStart from '../alignment/align-start';\nimport alignStartReverse from '../alignment/align-start-reverse';\n\nconst DEFAULT_OPTIONS = {\n alignContent: \"start\",\n justifyContent: \"start\",\n alignItems: \"start\",\n spacing: 0,\n orientation: \"horizontal\",\n lineSpacing: 0,\n wrap: true,\n revers: false\n};\n\nconst forEach = (elements, callback) => {\n elements.forEach(callback);\n};\n\nconst forEachReverse = (elements, callback) => {\n const length = elements.length;\n\n for (let idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n};\n\nclass Layout extends Group {\n\n constructor(rect, options) {\n super(Object.assign({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n\n rect(value) {\n if (value) {\n this._rect = value;\n return this;\n }\n\n return this._rect;\n }\n\n _initMap() {\n const options = this.options;\n const fieldMap = this._fieldMap;\n if (options.orientation === \"horizontal\") {\n fieldMap.sizeField = \"width\";\n fieldMap.groupsSizeField = \"height\";\n fieldMap.groupAxis = \"x\";\n fieldMap.groupsAxis = \"y\";\n } else {\n fieldMap.sizeField = \"height\";\n fieldMap.groupsSizeField = \"width\";\n fieldMap.groupAxis = \"y\";\n fieldMap.groupsAxis = \"x\";\n }\n\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n }\n\n reflow() {\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n\n if (this.options.transform) {\n this.transform(null);\n }\n\n const options = this.options;\n const rect = this._rect;\n const { groups, groupsSize } = this._initGroups();\n const { sizeField, groupsSizeField, groupAxis, groupsAxis } = this._fieldMap;\n const groupOrigin = new Point();\n const elementOrigin = new Point();\n const size = new Size();\n let groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n let elementStart, group, groupBox;\n\n const arrangeElements = (bbox, idx) => {\n const element = group.elements[idx];\n\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n\n for (let groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this.forEach(group.bboxes, arrangeElements);\n\n groupStart += group.lineSize + options.lineSpacing;\n }\n\n if (!options.wrap && group.size > rect.size[sizeField]) {\n const scale = rect.size[sizeField] / groupBox.size[sizeField];\n const scaledStart = groupBox.topLeft().scale(scale, scale);\n const scaledSize = groupBox.size[groupsSizeField] * scale;\n const newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n const transform = createTransform();\n if (groupAxis === \"x\") {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n\n this.transform(transform);\n }\n }\n\n _initGroups() {\n const { options, children } = this;\n const { lineSpacing, wrap, spacing } = options;\n const sizeField = this._fieldMap.sizeField;\n let group = this._newGroup();\n const groups = [];\n const addGroup = function() {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n let groupsSize = -lineSpacing;\n\n for (let idx = 0; idx < children.length; idx++) {\n let element = children[idx];\n let bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this._addToGroup(group, bbox, element);\n addGroup();\n group = this._newGroup();\n } else {\n addGroup();\n group = this._newGroup();\n this._addToGroup(group, bbox, element);\n }\n } else {\n this._addToGroup(group, bbox, element);\n }\n }\n }\n\n if (group.bboxes.length) {\n addGroup();\n }\n\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n }\n\n _addToGroup(group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n }\n\n _newGroup() {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n}\n\nexport default Layout;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box, rectToBox } from '../../core';\n\nclass LegendLayout extends ChartElement {\n\n constructor(options, chartService) {\n super(options);\n\n this.chartService = chartService;\n }\n\n render() {\n const { children, options } = this;\n const vertical = options.vertical;\n\n this.visual = new draw.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? \"vertical\" : \"horizontal\",\n reverse: options.rtl,\n alignItems: vertical ? \"start\" : \"center\"\n });\n\n for (let idx = 0; idx < children.length; idx++) {\n let legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n }\n\n reflow(box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n const bbox = this.visual.clippedBBox();\n\n if (bbox) {\n this.box = rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n }\n\n renderVisual() {\n this.addVisual();\n }\n\n createVisual() {}\n}\n\nexport default LegendLayout;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { BoxElement, FloatElement, ShapeElement, TextBox } from '../../core';\nimport { LEGEND_ITEM_CLICK, LEGEND_ITEM_HOVER, LEGEND_ITEM_LEAVE } from '../constants';\nimport { CENTER, WHITE } from '../../common/constants';\nimport { deepExtend, eventElement } from '../../common';\n\nclass LegendItem extends BoxElement {\n constructor(options) {\n super(options);\n\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n }\n\n createContainer() {\n this.container = new FloatElement({ vertical: false, wrap: false, align: CENTER, spacing: this.options.spacing });\n this.append(this.container);\n }\n\n createMarker() {\n this.container.append(new ShapeElement(this.markerOptions()));\n }\n\n markerOptions() {\n const options = this.options;\n const markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: {\n color: markerColor\n }\n });\n }\n\n createLabel() {\n const options = this.options;\n const labelOptions = deepExtend({}, options.labels);\n\n this.container.append(new TextBox(options.text, labelOptions));\n }\n\n renderComplete() {\n super.renderComplete();\n\n const cursor = this.options.cursor || {};\n const eventSink = this._itemOverlay = draw.Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n\n this.appendVisual(eventSink);\n }\n\n click(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n }\n\n over(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n\n // Don't trigger point hover for legend items\n return true;\n }\n\n out(widget, e) {\n widget._unsetActivePoint();\n\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n }\n\n eventArgs(e) {\n const options = this.options;\n\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n }\n\n renderVisual() {\n const options = this.options;\n const customVisual = options.visual;\n\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: () => {\n this.createVisual();\n this.renderChildren();\n this.renderComplete();\n\n const defaultVisual = this.visual;\n\n delete this.visual;\n\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n super.renderVisual();\n }\n }\n}\n\nexport default LegendItem;\n","\nimport { ChartElement, BoxElement, Box, TextBox, FloatElement } from '../../core';\nimport LegendLayout from './legend-layout';\nimport LegendItem from './legend-item';\n\nimport { TOP, RIGHT, BOTTOM, LEFT, CENTER, X, Y, BLACK } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, getSpacing, inArray, setDefaultOptions } from '../../common';\n\nconst HORIZONTAL = \"horizontal\";\nconst POINTER = \"pointer\";\nconst CUSTOM = \"custom\";\n\nclass Legend extends ChartElement {\n constructor(options, chartService = {}) {\n super(options);\n\n this.chartService = chartService;\n\n if (!inArray(this.options.position, [ TOP, RIGHT, BOTTOM, LEFT, CUSTOM ])) {\n this.options.position = RIGHT;\n }\n\n this.createContainers();\n\n this.createLegendTitle(options.title);\n\n this.createItems();\n }\n\n createContainers() {\n const options = this.options;\n const { position, align: userAlign } = options;\n let align = position;\n let vAlign = CENTER;\n\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [ TOP, BOTTOM ])) {\n if (userAlign === \"start\") {\n align = LEFT;\n } else if (userAlign === \"end\") {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === \"start\") {\n vAlign = TOP;\n } else if (userAlign === \"end\") {\n vAlign = BOTTOM;\n }\n }\n\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n\n if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\n }\n\n this.append(this.container);\n }\n\n createItems() {\n const chartService = this.getService();\n const options = this.options;\n const vertical = this.isVertical();\n const innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n let items = options.items;\n\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n\n const count = items.length;\n\n for (let i = 0; i < count; i++) {\n let item = items[i];\n\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n\n innerElement.render();\n this.itemsContainer.append(innerElement);\n }\n\n isVertical() {\n const { orientation, position } = this.options;\n const vertical = (position === CUSTOM && orientation !== HORIZONTAL) ||\n (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\n\n return vertical;\n }\n\n hasItems() {\n return this.container.children[0].children.length > 0;\n }\n\n reflow(targetBox) {\n const options = this.options;\n const legendBox = targetBox.clone();\n\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n\n if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\n }\n }\n\n containerReflow(targetBox) {\n const { options, container } = this;\n const { position, width, height } = options;\n const pos = position === TOP || position === BOTTOM ? X : Y;\n const vertical = this.isVertical();\n const alignTarget = targetBox.clone();\n let containerBox = targetBox.clone();\n\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n\n container.reflow(containerBox);\n containerBox = container.box;\n\n const box = containerBox.clone();\n\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n\n this.box = box;\n }\n\n containerCustomReflow(targetBox) {\n const { options, container } = this;\n const { offsetX, offsetY, width, height } = options;\n const vertical = this.isVertical();\n let containerBox = targetBox.clone();\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n\n container.reflow(new Box(\n offsetX, offsetY,\n offsetX + containerBox.width(), offsetY + containerBox.height()\n ));\n }\n\n renderVisual() {\n if (this.hasItems()) {\n super.renderVisual();\n }\n }\n\n createLegendTitle(title) {\n let titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n let text = titleOptions.text;\n\n if (!title || title.visible === false) {\n return;\n }\n\n if (defined(titleOptions) && titleOptions.visible) {\n const labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n\n this.title = new TextBox(text, titleOptions);\n\n this.createTitleLayout();\n\n this.appendTitleLayoutContent();\n }\n\n createTitleLayout() {\n this.layout = new FloatElement({\n vertical: true,\n wrap: false\n });\n\n this.container.append(this.layout);\n }\n\n hasTitle() {\n return Boolean(this.options.title && this.options.title.visible !== false);\n }\n\n appendTitleLayoutContent() {\n const options = this.options;\n\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\n }\n }\n}\n\nsetDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: \"\",\n zIndex: 1,\n markers: {\n border: {\n width: 0\n },\n width: 15,\n height: 3,\n type: \"rect\",\n align: LEFT,\n vAlign: CENTER\n }\n});\n\nexport default Legend;\n","import filterSeriesByType from '../utils/filter-series-by-type';\nimport { Class } from '../../common';\n\nclass PlotAreaFactory extends Class {\n\n constructor() {\n super();\n\n this._registry = [];\n }\n\n register(type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n }\n\n create(srcSeries, options, chartService) {\n const registry = this._registry;\n let match = registry[0];\n let series;\n\n for (let idx = 0; idx < registry.length; idx++) {\n const entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n\n return new match.type(series, options, chartService);\n }\n}\n\nPlotAreaFactory.current = new PlotAreaFactory();\n\nexport default PlotAreaFactory;","import { DomEventsBuilder } from '../services';\n\nimport { DateCategoryAxis, Point } from '../core';\n\nimport { MOUSEWHEEL_DELAY, MOUSEWHEEL, SELECT_START, SELECT, SELECT_END } from './constants';\n\nimport { LEFT, RIGHT, MIN_VALUE, MAX_VALUE, X } from '../common/constants';\nimport { addClass, Class, removeClass, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';\nimport { parseDate } from '../date-utils';\n\nconst ZOOM_ACCELERATION = 3;\nconst SELECTOR_HEIGHT_ADJUST = 0.1;\n\nfunction createDiv(className) {\n const element = document.createElement(\"div\");\n if (className) {\n element.className = className;\n }\n\n return element;\n}\n\nfunction closestHandle(element) {\n let current = element;\n while (current && !hasClasses(current, \"k-handle\")) {\n current = current.parentNode;\n }\n\n return current;\n}\n\nclass Selection extends Class {\n constructor(chart, categoryAxis, options, observer) {\n super();\n\n const chartElement = chart.element;\n\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof DateCategoryAxis;\n\n this.initOptions();\n\n this.visible = this.options.visible && chartElement.offsetHeight;\n\n if (this.visible) {\n this.createElements();\n\n this.set(this._index(this.options.from), this._index(this.options.to));\n\n this.bindEvents();\n }\n }\n\n onPane(pane) {\n return this.categoryAxis.pane === pane;\n }\n\n createElements() {\n const options = this.options;\n const wrapper = this.wrapper = createDiv(\"k-selector\");\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n const selection = this.selection = createDiv(\"k-selection\");\n this.leftMask = createDiv(\"k-mask\");\n this.rightMask = createDiv(\"k-mask\");\n\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n\n selection.appendChild(createDiv(\"k-selection-bg\"));\n\n const leftHandle = this.leftHandle = createDiv(\"k-handle k-left-handle\");\n const rightHandle = this.rightHandle = createDiv(\"k-handle k-right-handle\");\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n\n this.chartElement.appendChild(wrapper);\n const selectionStyles = elementStyles(selection, [ \"borderLeftWidth\", \"borderRightWidth\", \"height\" ]);\n const leftHandleHeight = elementStyles(leftHandle, \"height\").height;\n const rightHandleHeight = elementStyles(rightHandle, \"height\").height;\n\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n\n elementStyles(leftHandle, {\n top: (selectionStyles.height - leftHandleHeight) / 2\n });\n\n elementStyles(rightHandle, {\n top: (selectionStyles.height - rightHandleHeight) / 2\n });\n\n wrapper.style.cssText = wrapper.style.cssText;\n }\n\n bindEvents() {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n bindEvents(this.wrapper, {\n [ MOUSEWHEEL ]: this._mousewheelHandler\n });\n }\n\n this._domEvents = DomEventsBuilder.create(this.wrapper, {\n stopPropagation: true, // applicable for the jQuery UserEvents\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n }\n\n initOptions() {\n const { options, categoryAxis } = this;\n const box = categoryAxis.pane.chartsBox();\n const intlService = this.chart.chartService.intl;\n\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n\n const { paddingLeft, paddingTop } = elementStyles(this.chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST, //workaround for sub-pixel hover on the paths in chrome\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n }\n\n destroy() {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n\n clearTimeout(this._mwTimeout);\n this._state = null;\n\n if (this.wrapper) {\n if (this._mousewheelHandler) {\n unbindEvents(this.wrapper, {\n [ MOUSEWHEEL ]: this._mousewheelHandler\n });\n this._mousewheelHandler = null;\n }\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n _rangeEventArgs(range) {\n\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n }\n\n _start(e) {\n const options = this.options;\n const target = eventElement(e);\n\n if (this._state || !target) {\n return;\n }\n\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: closestHandle(target) || target,\n startLocation: e.x ? e.x.location : 0,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n\n const args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n }\n\n _press(e) {\n let handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n addClass(handle, \"k-handle-active\");\n }\n }\n\n _move(e) {\n if (!this._state) {\n return;\n }\n\n const { _state: state, options, categoryAxis } = this;\n const { range, moveTarget: target } = state;\n const reverse = categoryAxis.options.reverse;\n const from = this._index(options.from);\n const to = this._index(options.to);\n const min = this._index(options.min);\n const max = this._index(options.max);\n const delta = state.startLocation - e.x.location;\n const oldRange = { from: range.from, to: range.to };\n const span = range.to - range.from;\n const scale = elementStyles(this.wrapper, \"width\").width / (categoryAxis.categoriesCount() - 1);\n const offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n\n if (!target) {\n return;\n }\n\n const leftHandle = hasClasses(target, \"k-left-handle\");\n const rightHandle = hasClasses(target, \"k-right-handle\");\n\n if (hasClasses(target, \"k-selection k-selection-bg\")) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n range.to = Math.min(\n range.from + span,\n max\n );\n } else if ((leftHandle && !reverse) || (rightHandle && reverse)) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - 1\n );\n range.to = Math.max(range.from + 1, range.to);\n } else if ((leftHandle && reverse) || (rightHandle && !reverse)) {\n range.to = Math.min(\n Math.max(min + 1, to - offset),\n max\n );\n range.from = Math.min(range.to - 1, range.from);\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n }\n\n _end() {\n if (this._state) {\n const moveTarget = this._state.moveTarget;\n if (moveTarget) {\n removeClass(moveTarget, \"k-handle-active\");\n }\n\n const range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n\n delete this._state;\n }\n }\n\n _tap(e) {\n const { options, categoryAxis } = this;\n const coords = this.chart._eventCoordinates(e);\n const categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n const from = this._index(options.from);\n const to = this._index(options.to);\n const min = this._index(options.min);\n const max = this._index(options.max);\n const span = to - from;\n const mid = from + span / 2;\n const range = {};\n const rightClick = e.event.which === 3;\n let offset = Math.round(mid - categoryIx);\n\n if (this._state || rightClick) {\n return;\n }\n\n\n this.chart._unsetActivePoint();\n\n if (!categoryAxis.options.justified) {\n offset--;\n }\n\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n\n range.to = Math.min(range.from + span, max);\n\n this._start(e);\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n }\n\n _mousewheel(e) {\n let delta = mousewheelDelta(e);\n\n this._start({ target: this.selection });\n\n if (this._state) {\n const range = this._state.range;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(() => {\n this._end();\n }, MOUSEWHEEL_DELAY);\n }\n }\n\n _gesturestart(e) {\n const options = this.options;\n\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n const args = this._rangeEventArgs(this._state.range);\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n }\n\n _gestureend() {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n }\n\n _gesturechange(e) {\n const { chart, _state: state, options, categoryAxis } = this;\n const range = state.range;\n const p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n const p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n const left = Math.min(p0, p1);\n const right = Math.max(p0, p1);\n\n e.preventDefault();\n\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n\n this.move(range.from, range.to);\n\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n\n _index(value) {\n let index = value;\n\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n\n return index;\n }\n\n _value(index) {\n let value = index;\n if (this._dateAxis) {\n value = this.categoryAxis.categoryAt(index);\n if (value > this.options.max) {\n value = this.options.max;\n }\n }\n\n return value;\n }\n\n _slot(value) {\n const categoryAxis = this.categoryAxis;\n const index = this._index(value);\n\n return categoryAxis.getSlot(index, index, true);\n }\n\n move(from, to) {\n const options = this.options;\n const reverse = this.categoryAxis.options.reverse;\n const { offset, padding, selection: { border } } = options;\n const left = reverse ? to : from;\n const right = reverse ? from : to;\n const edge = 'x' + (reverse ? 2 : 1);\n\n let box = this._slot(left);\n const leftMaskWidth = round(box[edge] - offset.left + padding.left);\n\n elementStyles(this.leftMask, {\n width: leftMaskWidth\n });\n elementStyles(this.selection, {\n left: leftMaskWidth\n });\n\n box = this._slot(right);\n\n const rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, {\n width: rightMaskWidth\n });\n\n let distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n\n elementStyles(this.rightMask, {\n left: distance\n });\n elementStyles(this.selection, {\n width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0)\n });\n }\n\n set(from, to) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const fromValue = limitValue(this._index(from), min, max);\n const toValue = limitValue(this._index(to), fromValue + 1, max);\n\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n }\n\n expand(delta) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const zDir = options.mousewheel.zoom;\n const from = this._index(options.from);\n const to = this._index(options.to);\n let range = { from: from, to: to };\n const oldRange = deepExtend({}, range);\n\n if (this._state) {\n range = this._state.range;\n }\n\n if (zDir !== RIGHT) {\n range.from = limitValue(\n limitValue(from - delta, 0, to - 1),\n min, max\n );\n }\n\n if (zDir !== LEFT) {\n range.to = limitValue(\n limitValue(to + delta, range.from + 1, max),\n min,\n max\n );\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n }\n\n zoom(delta, coords) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const from = this._index(options.from);\n const to = this._index(options.to);\n let range = { from: from, to: to };\n const oldRange = deepExtend({}, range);\n\n const { reverse } = this.categoryAxis.options;\n const origin = X + (reverse ? '2' : '1');\n const lineBox = this.categoryAxis.lineBox();\n const relative = Math.abs(lineBox[origin] - coords[X]);\n const size = lineBox.width();\n const position = round(relative / size, 2);\n const minDelta = round(position * delta);\n const maxDelta = round((1 - position) * delta);\n\n if (this._state) {\n range = this._state.range;\n }\n\n range.from = limitValue(\n limitValue(from - minDelta, 0, to - 1),\n min, max\n );\n\n range.to = limitValue(\n limitValue(to + maxDelta, range.from + 1, max),\n min,\n max\n );\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n }\n\n trigger(name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n}\n\nsetDefaultOptions(Selection, {\n visible: true,\n mousewheel: {\n zoom: \"both\"\n },\n min: MIN_VALUE,\n max: MAX_VALUE\n});\n\nexport default Selection;\n","import BaseTooltip from './base-tooltip';\n\nimport { deepExtend } from '../../common';\n\nclass Tooltip extends BaseTooltip {\n show(point) {\n if (!point || !point.tooltipAnchor || (this._current && this._current === point)) {\n return;\n }\n\n const options = deepExtend({}, this.options, point.options.tooltip);\n const anchor = point.tooltipAnchor();\n\n if (anchor) {\n this._current = point;\n super.show({\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n }\n\n hide() {\n delete this._current;\n super.hide();\n }\n}\n\nexport default Tooltip;","import BaseTooltip from './base-tooltip';\nimport { Point } from '../../core';\n\nimport { grep, setDefaultOptions } from '../../common';\n\nclass SharedTooltip extends BaseTooltip {\n constructor(plotArea, options) {\n super(plotArea.chartService, options);\n\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n }\n\n showAt(points, coords) {\n const tooltipPoints = grep(points, function(point) {\n const tooltip = point.series.tooltip;\n const excluded = tooltip && tooltip.visible === false;\n\n return !excluded;\n });\n\n if (tooltipPoints.length > 0) {\n const point = tooltipPoints[0];\n const slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n\n const anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n }\n\n _slotAnchor(point, slot) {\n const axis = this.plotArea.categoryAxis;\n const align = {\n horizontal: \"left\",\n vertical: \"center\"\n };\n\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n\n return {\n point: point,\n align: align\n };\n }\n\n _defaultAnchor(point, slot) {\n const box = point.owner.pane.chartsBox();\n const vertical = this.plotArea.categoryAxis.options.vertical;\n const center = box.center();\n const slotCenter = slot.center();\n const align = {\n horizontal: \"center\",\n vertical: \"center\"\n };\n\n let centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n\n return {\n point: centerPoint,\n align: align\n };\n }\n}\n\nsetDefaultOptions(SharedTooltip, {\n categoryFormat: '{0:d}'\n});\n\nexport default SharedTooltip;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { INITIAL_ANIMATION_DURATION, BAR, START_SCALE } from '../constants';\n\nimport { X, Y } from '../../common/constants';\nimport { interpolateValue, setDefaultOptions } from '../../common';\n\nclass BarChartAnimation extends draw.Animation {\n\n setup() {\n const { element, options } = this;\n const bbox = element.bbox();\n\n if (bbox) {\n this.origin = options.origin;\n const axis = options.vertical ? Y : X;\n\n const fromScale = this.fromScale = new geom.Point(1, 1);\n fromScale[axis] = START_SCALE;\n\n element.transform(geom.transform()\n .scale(fromScale.x, fromScale.y)\n );\n } else {\n this.abort();\n }\n }\n\n step(pos) {\n const scaleX = interpolateValue(this.fromScale.x, 1, pos);\n const scaleY = interpolateValue(this.fromScale.y, 1, pos);\n\n this.element.transform(geom.transform()\n .scale(scaleX, scaleY, this.origin)\n );\n }\n\n abort() {\n super.abort();\n this.element.transform(null);\n }\n}\n\nsetDefaultOptions(BarChartAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(BAR, BarChartAnimation);\n\nexport default BarChartAnimation;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { START_SCALE, BUBBLE } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass BubbleAnimation extends draw.Animation {\n setup() {\n const center = this.center = this.element.bbox().center();\n this.element.transform(geom.transform()\n .scale(START_SCALE, START_SCALE, center)\n );\n }\n\n step(pos) {\n this.element.transform(geom.transform()\n .scale(pos, pos, this.center)\n );\n }\n}\n\nsetDefaultOptions(BubbleAnimation, {\n easing: \"easeOutElastic\"\n});\n\ndraw.AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n\nexport default BubbleAnimation;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { FADEIN } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass FadeInAnimation extends draw.Animation {\n setup() {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n }\n\n step(pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n}\n\nsetDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: \"linear\"\n});\n\ndraw.AnimationFactory.current.register(FADEIN, FadeInAnimation);\n\nexport default FadeInAnimation;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { START_SCALE, INITIAL_ANIMATION_DURATION, PIE } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PieAnimation extends draw.Animation {\n setup() {\n this.element.transform(geom.transform()\n .scale(START_SCALE, START_SCALE, this.options.center)\n );\n }\n\n step(pos) {\n this.element.transform(geom.transform()\n .scale(pos, pos, this.options.center)\n );\n }\n}\n\nsetDefaultOptions(PieAnimation, {\n easing: \"easeOutElastic\",\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(PIE, PieAnimation);\n\nexport default PieAnimation;","import ScatterChart from './scatter-chart';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport LineSegment from '../line-chart/line-segment';\nimport SplineSegment from '../line-chart/spline-segment';\n\nimport { SMOOTH, ZERO } from '../constants';\n\nimport hasValue from '../utils/has-value';\n\nimport { deepExtend } from '../../common';\n\nclass ScatterLineChart extends ScatterChart {\n render() {\n super.render();\n\n this.renderSegments();\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n }\n\n animationPoints() {\n const points = super.animationPoints();\n return points.concat(this._segments);\n }\n\n createMissingValue(value, missingValues) {\n if (missingValues === ZERO) {\n const missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n}\n\ndeepExtend(ScatterLineChart.prototype, LineChartMixin);\n\nexport default ScatterLineChart;","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport ScatterChart from '../scatter-charts/scatter-chart';\nimport ScatterLineChart from '../scatter-charts/scatter-line-chart';\nimport BubbleChart from '../bubble-chart/bubble-chart';\nimport SeriesBinder from '../series-binder';\n\nimport { NumericAxis, LogarithmicAxis, DateValueAxis, Point } from '../../core';\n\nimport filterSeriesByType from '../utils/filter-series-by-type';\nimport equalsIgnoreCase from '../utils/equals-ignore-case';\nimport singleItemOrArray from '../utils/single-item-or-array';\n\nimport { SCATTER, SCATTER_LINE, BUBBLE, LOGARITHMIC } from '../constants';\n\nimport { DATE } from '../../common/constants';\nimport { deepExtend, eventElement, grep, inArray, setDefaultOptions } from '../../common';\n\nclass XYPlotArea extends PlotAreaBase {\n initFields() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n }\n\n render(panes = this.panes) {\n const seriesByPane = this.groupSeriesByPane();\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n const filteredSeries = this.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this.createScatterChart(\n filterSeriesByType(filteredSeries, SCATTER),\n pane\n );\n\n this.createScatterLineChart(\n filterSeriesByType(filteredSeries, SCATTER_LINE),\n pane\n );\n\n this.createBubbleChart(\n filterSeriesByType(filteredSeries, BUBBLE),\n pane\n );\n }\n\n this.createAxes(panes);\n }\n\n appendChart(chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n\n super.appendChart(chart, pane);\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n }\n\n // TODO: Refactor, optionally use series.pane option\n seriesPaneName(series) {\n const options = this.options;\n const xAxisName = series.xAxis;\n const xAxisOptions = [].concat(options.xAxis);\n const xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n const yAxisName = series.yAxis;\n const yAxisOptions = [].concat(options.yAxis);\n const yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = panes[0].name || \"default\";\n const paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n createScatterChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createScatterLineChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterLineChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createBubbleChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new BubbleChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createXYAxis(options, vertical, axisIndex) {\n const axisName = options.name;\n const namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n const tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n const axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n const isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n const defaultRange = tracker.query();\n const defaultAxisRange = isLog ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n const range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n const typeSamples = [ axisOptions.min, axisOptions.max ];\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n const firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n let inferredDate;\n\n for (let i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = DateValueAxis;\n } else if (isLog) {\n axisType = LogarithmicAxis;\n } else {\n axisType = NumericAxis;\n }\n\n const axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(`${ vertical ? \"Y\" : \"X\" } axis with name ${ axisName } is already defined`);\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n\n return axis;\n }\n\n createAxes(panes) {\n const options = this.options;\n const xAxesOptions = [].concat(options.xAxis);\n const xAxes = [];\n const yAxesOptions = [].concat(options.yAxis);\n const yAxes = [];\n\n for (let idx = 0; idx < xAxesOptions.length; idx++) {\n const axisPane = this.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (let idx = 0; idx < yAxesOptions.length; idx++) {\n const axisPane = this.findPane(yAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n yAxes.push(this.createXYAxis(yAxesOptions[idx], true, idx));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const allAxes = this.axes;\n const length = allAxes.length;\n const xValues = [];\n const yValues = [];\n\n for (let i = 0; i < length; i++) {\n const axis = allAxes[i];\n const values = axis.options.vertical ? yValues : xValues;\n const currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n }\n\n updateAxisOptions(axis, options) {\n const vertical = axis.options.vertical;\n const axes = this.groupAxes(this.panes);\n const index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions(this.options, index, vertical, options);\n updateAxisOptions(this.originalOptions, index, vertical, options);\n }\n}\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n const axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n}\n\nsetDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default XYPlotArea;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, ShapeBuilder, TextBox, Box } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { OUTSIDE_END, INSIDE_END, PIE, FADEIN, TOOLTIP_OFFSET } from '../constants';\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { TOP, BOTTOM, LEFT, RIGHT, DEFAULT_FONT, CIRCLE, WHITE, CENTER, DEFAULT_PRECISION } from '../../common/constants';\nimport { autoTextColor, setDefaultOptions, getSpacing, getTemplate, deepExtend, round, rad } from '../../common';\n\nclass PieSegment extends ChartElement {\n constructor(value, sector, options) {\n super(options);\n\n this.value = value;\n this.sector = sector;\n }\n\n render() {\n const labels = this.options.labels;\n const chartService = this.owner.chartService;\n let labelText = this.value;\n\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n\n const labelTemplate = getTemplate(labels);\n const pointData = this.pointData();\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n labels.color = autoTextColor(this.options.color);\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n const themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n\n\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: \"\",\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), pointData);\n\n this.append(this.label);\n }\n }\n\n reflow(targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n }\n\n reflowLabel() {\n const { options: { labels: labelsOptions }, label } = this;\n const sector = this.sector.clone();\n const labelsDistance = labelsOptions.distance;\n const angle = sector.middle();\n\n if (label) {\n const labelHeight = label.box.height();\n const labelWidth = label.box.width();\n let lp;\n\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n let x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n }\n\n createVisual() {\n const { sector, options } = this;\n\n super.createVisual();\n\n if (this.value) {\n if (options.visual) {\n const startAngle = (sector.startAngle + 180) % 360;\n const visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new geom.Point(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: () => {\n const group = new draw.Group();\n this.createSegmentVisual(group);\n\n return group;\n }\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n }\n\n createSegmentVisual(group) {\n const { sector, options } = this;\n const borderOptions = options.border || {};\n const border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n const color = options.color;\n const fill = {\n color: color,\n opacity: options.opacity\n };\n const visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: {\n opacity: options.opacity\n },\n zIndex: options.zIndex\n }, border));\n\n group.append(visual);\n\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [ sector.center.x, sector.center.y ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n }\n\n createSegment(sector, options) {\n if (options.singleSegment) {\n return new draw.Circle(new geom.Circle(new geom.Point(sector.center.x, sector.center.y), sector.radius), options);\n }\n\n return ShapeBuilder.current.createRing(sector, options);\n }\n\n createAnimation() {\n const { options, sector: { center } } = this;\n\n deepExtend(options, {\n animation: {\n center: [ center.x, center.y ],\n delay: this.animationDelay\n }\n });\n\n super.createAnimation();\n }\n\n createHighlight(options) {\n const highlight = this.options.highlight || {};\n const border = highlight.border || {};\n\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n }\n\n highlightVisual() {\n return this.visual.children[0];\n }\n\n highlightVisualArgs() {\n const sector = this.sector;\n\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new geom.Point(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n }\n\n tooltipAnchor() {\n const sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n const midAndle = sector.middle();\n const midPoint = sector.point(midAndle);\n\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n }\n}\n\nconst RAD_30 = round(rad(30), DEFAULT_PRECISION);\nconst RAD_60 = round(rad(60), DEFAULT_PRECISION);\n\nfunction tooltipAlignment(angle) {\n const radians = rad(angle);\n const sine = round(Math.sin(radians), DEFAULT_PRECISION);\n const cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n\n\n let horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n\n let vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n}\n\nsetDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: {\n gradient: \"roundedBevel\"\n },\n border: {\n width: 0.5\n },\n labels: {\n visible: false,\n distance: 35,\n font: DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: {\n type: PIE\n },\n highlight: {\n visible: true,\n border: {\n width: 1\n }\n },\n visible: true\n});\n\ndeepExtend(PieSegment.prototype, PointEventsMixin);\n\nexport default PieSegment;\n","import { getTemplate } from '../../common';\nimport { hasValue } from '../utils';\n\nconst PieChartMixin = {\n createLegendItem: function(value, point, options) {\n const legendOptions = this.options.legend || {};\n const labelsOptions = legendOptions.labels || {};\n const inactiveItems = legendOptions.inactiveItems || {};\n const inactiveItemsLabels = inactiveItems.labels || {};\n\n if (options && options.visibleInLegend !== false) {\n const pointVisible = options.visible !== false;\n const labelTemplate = pointVisible ? getTemplate(labelsOptions) :\n getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n let text = options.category;\n\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n\n let itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n\n if (hasValue(text) && text !== \"\") {\n this.legendItems.push({\n active: pointVisible,\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n};\n\nexport default PieChartMixin;","import { drawing as draw, geometry } from '@progress/kendo-drawing';\n\nimport PieSegment from './pie-segment';\nimport PieChartMixin from '../mixins/pie-chart-mixin';\nimport { ChartElement, Ring, Box, Point } from '../../core';\n\nimport { OUTSIDE_END, FADEIN, COLUMN } from '../constants';\nimport { bindSegments, evalOptions } from '../utils';\n\nimport { CIRCLE, RIGHT, CENTER } from '../../common/constants';\nimport { deepExtend, defined, find, isFunction, last, round, setDefaultOptions, valueOrDefault } from '../../common';\n\nconst PIE_SECTOR_ANIM_DELAY = 70;\n\nclass PieChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n traverseDataPoints(callback) {\n const { options, plotArea: { options: { seriesColors = [] } } } = this;\n const colorsCount = seriesColors.length;\n const series = options.series;\n const seriesCount = series.length;\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const data = currentSeries.data;\n const { total, points, count } = bindSegments(currentSeries);\n const anglePerValue = 360 / total;\n let constantAngle;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n let currentAngle;\n\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n if (!pointData) {\n continue;\n }\n\n const { fields, value, visible } = pointData;\n const angle = value !== 0 ? (constantAngle || (value * anglePerValue)) : 0;\n const explode = data.length !== 1 && Boolean(fields.explode);\n\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n\n callback(pointData.valueFields.value, new Ring(null, 0, 0, currentAngle, angle), {\n owner: this,\n category: defined(fields.category) ? fields.category : \"\",\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this.animationDelay(i, seriesIx, seriesCount)\n });\n\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n }\n\n evalSegmentOptions(options, value, fields) {\n const series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"visual\", \"toggle\" ] });\n }\n\n addValue(value, sector, fields) {\n const segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n const segment = new PieSegment(value, sector, segmentOptions);\n Object.assign(segment, fields);\n this.append(segment);\n this.points.push(segment);\n }\n\n reflow(targetBox) {\n const { options, points, seriesConfigs = [] } = this;\n const count = points.length;\n const box = targetBox.clone();\n const space = 5;\n const minWidth = Math.min(box.width(), box.height());\n const halfMinWidth = minWidth / 2;\n const defaultPadding = minWidth - minWidth * 0.85;\n const newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n const newBoxCenter = newBox.center();\n const boxCenter = box.center();\n const seriesCount = options.series.length;\n const leftSideLabels = [];\n const rightSideLabels = [];\n let padding = valueOrDefault(options.padding, defaultPadding);\n\n this.targetBox = targetBox;\n\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n\n const radius = halfMinWidth - padding;\n const center = new Point(\n radius + newBox.x1 + padding,\n radius + newBox.y1 + padding\n );\n\n for (let i = 0; i < count; i++) {\n const segment = points[i];\n const sector = segment.sector;\n const seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n\n if (seriesConfigs.length) {\n const seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n\n segment.reflow(newBox);\n\n const label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n\n this.box = newBox;\n }\n\n leftLabelsReflow(labels) {\n const distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n }\n\n rightLabelsReflow(labels) {\n const distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n }\n\n distanceBetweenLabels(labels) {\n const segment = last(this.points);\n const sector = segment.sector;\n const count = labels.length - 1;\n const lr = sector.radius + segment.options.labels.distance;\n const distances = [];\n let firstBox = labels[0].box;\n let distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n\n distances.push(distance);\n\n for (let i = 0; i < count; i++) {\n const secondBox = labels[i + 1].box;\n\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n\n return distances;\n }\n\n distributeLabels(distances, labels) {\n const count = distances.length;\n let left, right, remaining;\n\n for (let i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this._takeDistance(distances, i, --left, remaining);\n remaining = this._takeDistance(distances, i, ++right, remaining);\n }\n }\n\n this.reflowLabels(distances, labels);\n }\n\n _takeDistance(distances, anchor, position, amount) {\n let result = amount;\n if (distances[position] > 0) {\n const available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n\n return result;\n }\n\n reflowLabels(distances, labels) {\n const segment = last(this.points);\n const sector = segment.sector;\n const labelOptions = segment.options.labels;\n const labelsCount = labels.length;\n const labelDistance = labelOptions.distance;\n let boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n let boxX;\n\n distances[0] += 2;\n for (let i = 0; i < labelsCount; i++) {\n const label = labels[i];\n const box = label.box;\n\n boxY += distances[i];\n boxX = this.hAlignLabel(\n box.x2,\n sector.clone().expand(labelDistance),\n boxY,\n boxY + box.height(),\n label.orientation === RIGHT);\n\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n\n boxY += box.height();\n }\n }\n\n createVisual() {\n const { options: { connectors }, points } = this;\n const count = points.length;\n const space = 4;\n\n super.createVisual();\n\n this._connectorLines = [];\n\n for (let i = 0; i < count; i++) {\n const segment = points[i];\n const { sector, label } = segment;\n const angle = sector.middle();\n const connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n\n if (label) {\n const connectorLine = new draw.Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n\n if (label.options.position === OUTSIDE_END) {\n const box = label.box;\n const centerPoint = sector.center;\n let start = sector.point(angle);\n let middle = new Point(box.x1, box.center().y);\n let sr, end, crossing;\n\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n // TODO: Extract into a method to remove duplication\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n\n if (this.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n\n if (this.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n\n connectorLine.lineTo(end.x, end.y);\n\n this._connectorLines.push(connectorLine);\n this.visual.append(connectorLine);\n }\n }\n }\n }\n\n renderVisual() {\n super.renderVisual();\n\n if (find(this.options.series, options => options.autoFit)) {\n const targetBox = this.targetBox;\n const pieCenter = this.box.center();\n const bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n\n const bboxBottom = bbox.bottomRight();\n\n const scale = Math.min(\n (pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y),\n (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y),\n (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x),\n (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x)\n );\n\n if (scale < 1) {\n this.visual.transform(geometry.transform().scale(scale, scale, [ pieCenter.x, pieCenter.y ]));\n }\n }\n }\n\n labelComparator(reverse) {\n const reverseValue = reverse ? -1 : 1;\n\n return function(a, b) {\n const first = (a.parent.sector.middle() + 270) % 360;\n const second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n }\n\n hAlignLabel(originalX, sector, y1, y2, direction) {\n const { radius, center: { x: cx, y: cy } } = sector;\n const t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n\n if (t > radius) {\n return originalX;\n }\n\n return cx + Math.sqrt((radius * radius) - (t * t)) * (direction ? 1 : -1);\n }\n\n pointInCircle(point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format, point.value);\n }\n\n animationDelay(categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n\n stackRoot() {\n return this;\n }\n}\n\nfunction intersection(a1, a2, b1, b2) {\n const uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n let result;\n if (ub !== 0) {\n const ua = (uat / ub);\n\n result = new Point(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n );\n }\n\n return result;\n}\n\nsetDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n});\n\ndeepExtend(PieChart.prototype, PieChartMixin);\n\nPieChart.prototype.isStackRoot = true;\n\nexport default PieChart;\n","import PlotAreaBase from './plotarea-base';\nimport PieChart from '../pie-chart/pie-chart';\n\nimport { append } from '../../common';\n\nclass PiePlotArea extends PlotAreaBase {\n render() {\n this.createPieChart(this.series);\n }\n\n createPieChart(series) {\n const firstSeries = series[0];\n const pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(pieChart);\n }\n\n appendChart(chart, pane) {\n super.appendChart(chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n}\n\nexport default PiePlotArea;","import PieSegment from '../pie-chart/pie-segment';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { PIE } from '../constants';\n\nimport { ShapeBuilder, Box } from '../../core';\n\nimport { CENTER } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass DonutSegment extends PieSegment {\n reflowLabel() {\n const { options: { labels: labelsOptions }, label } = this;\n const sector = this.sector.clone();\n const angle = sector.middle();\n\n if (label) {\n const labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n\n const lp = sector.point(angle);\n\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n super.reflowLabel();\n }\n }\n }\n\n createSegment(sector, options) {\n return ShapeBuilder.current.createRing(sector, options);\n }\n}\n\nsetDefaultOptions(DonutSegment, {\n overlay: {\n gradient: \"roundedGlass\"\n },\n labels: {\n position: CENTER\n },\n animation: {\n type: PIE\n }\n});\n\ndeepExtend(DonutSegment.prototype, PointEventsMixin);\n\n\nexport default DonutSegment;\n","import PieChart from '../pie-chart/pie-chart';\nimport DonutSegment from './donut-segment';\n\nimport { INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { deepExtend, defined, setDefaultOptions, valueOrDefault } from '../../common';\n\nconst DONUT_SECTOR_ANIM_DELAY = 50;\n\nclass DonutChart extends PieChart {\n addValue(value, sector, fields) {\n const segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (!value || fields.visible === false) {\n return;\n }\n\n const segment = new DonutSegment(value, sector, segmentOptions);\n\n Object.assign(segment, fields);\n this.append(segment);\n this.points.push(segment);\n }\n\n reflow(targetBox) {\n const options = this.options;\n const box = targetBox.clone();\n const space = 5;\n const minWidth = Math.min(box.width(), box.height());\n const halfMinWidth = minWidth / 2;\n const defaultPadding = minWidth - minWidth * 0.85;\n const series = options.series;\n const seriesCount = series.length;\n\n let padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n\n let totalSize = halfMinWidth - padding;\n let seriesWithoutSize = 0;\n let holeSize;\n\n for (let i = 0; i < seriesCount; i++) {\n const currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n\n if (!defined(holeSize)) {\n const currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n\n let innerRadius = holeSize;\n let margin = 0;\n let size, radius;\n\n this.seriesConfigs = [];\n\n for (let i = 0; i < seriesCount; i++) {\n const currentSeries = series[i];\n size = valueOrDefault(currentSeries.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this.seriesConfigs.push({ innerRadius: innerRadius, radius: radius });\n margin = currentSeries.margin || 0;\n innerRadius = radius;\n }\n\n super.reflow(targetBox);\n }\n\n animationDelay(categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n }\n}\n\n\nsetDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n }\n});\n\nexport default DonutChart;","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport { RadarLogarithmicAxis, RadarNumericAxis } from '../../core';\n\nimport { LOGARITHMIC } from '../constants';\n\nimport { getSpacing } from '../../common';\nimport { Y, CENTER } from '../../common/constants';\n\nconst DEFAULT_PADDING = 0.15;\n\nclass PolarPlotAreaBase extends PlotAreaBase {\n initFields() {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n }\n\n render() {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n }\n\n alignAxes() {\n const axis = this.valueAxis;\n const range = axis.range();\n const crossingValue = axis.options.reverse ? range.max : range.min;\n const slot = axis.getSlot(crossingValue);\n const center = this.polarAxis.getSlot(0).center;\n const axisBox = axis.box.translate(\n center.x - slot.x1,\n center.y - slot.y1\n );\n\n axis.reflow(axisBox);\n }\n\n createValueAxis() {\n const tracker = this.valueAxisRangeTracker;\n const defaultRange = tracker.query();\n const axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n let axisType, axisDefaultRange;\n\n if (axisOptions.type === LOGARITHMIC) {\n axisType = RadarLogarithmicAxis;\n axisDefaultRange = { min: 0.1, max: 1 };\n } else {\n axisType = RadarNumericAxis;\n axisDefaultRange = { min: 0, max: 1 };\n }\n\n const range = tracker.query(name) || defaultRange || axisDefaultRange;\n\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n const valueAxis = new axisType(\n range.min, range.max,\n axisOptions,\n this.chartService\n );\n\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n }\n\n reflowAxes() {\n const { options: { plotArea: options }, valueAxis, polarAxis, box } = this;\n const defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n const padding = getSpacing(options.padding || {}, defaultPadding);\n const paddingBox = box.clone().unpad(padding);\n const axisBox = paddingBox.clone();\n\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n\n const valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n const heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n }\n\n backgroundBox() {\n return this.box;\n }\n\n detachLabels() {}\n}\n\nexport default PolarPlotAreaBase;\n","import ScatterChart from '../scatter-charts/scatter-chart';\n\nimport { Point, Box } from '../../core';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PolarScatterChart extends ScatterChart {\n pointSlot(slotX, slotY) {\n const valueRadius = slotX.center.y - slotY.y1;\n const slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n}\n\nsetDefaultOptions(PolarScatterChart, {\n clip: false\n});\n\nexport default PolarScatterChart;","import ScatterLineChart from '../scatter-charts/scatter-line-chart';\nimport PolarScatterChart from '../polar-scatter-chart/polar-scatter-chart';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PolarLineChart extends ScatterLineChart {\n}\n\nPolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n\nsetDefaultOptions(PolarLineChart, {\n clip: false\n});\n\nexport default PolarLineChart;","import SplineAreaSegment from '../area-chart/spline-area-segment';\nimport { CurveProcessor } from '../../core';\n\nclass SplinePolarAreaSegment extends SplineAreaSegment {\n fillToAxes(fillPath) {\n const center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n }\n\n _polarAxisCenter() {\n const polarAxis = this.parent.plotArea.polarAxis;\n const center = polarAxis.box.center();\n return center;\n }\n\n strokeSegments() {\n let segments = this._strokeSegments;\n\n if (!segments) {\n const center = this._polarAxisCenter();\n const curveProcessor = new CurveProcessor(false);\n const linePoints = this.points();\n\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n\n return segments;\n }\n}\n\nexport default SplinePolarAreaSegment;","import { geometry as geom } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nclass PolarAreaSegment extends AreaSegment {\n fillToAxes(fillPath) {\n const polarAxis = this.parent.plotArea.polarAxis;\n const center = polarAxis.box.center();\n const centerSegment = new geom.Segment([ center.x, center.y ]);\n\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n}\n\nexport default PolarAreaSegment;","import PolarLineChart from '../polar-line-chart/polar-line-chart';\nimport SplinePolarAreaSegment from './spline-polar-area-segment';\nimport PolarAreaSegment from './polar-area-segment';\n\nimport { SMOOTH, INTERPOLATE, ZERO, GAP } from '../constants';\n\nimport hasValue from '../utils/has-value';\n\nclass PolarAreaChart extends PolarLineChart {\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = (currentSeries.line || {}).style;\n let segment;\n\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n }\n\n createMissingValue(value, missingValues) {\n let missingValue;\n\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n\n return missingValue;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n\n _hasMissingValuesGap() {\n const series = this.options.series;\n\n for (let idx = 0; idx < series.length; idx++) {\n if (this.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n }\n\n sortPoints(points) {\n points.sort(xComparer);\n\n if (this._hasMissingValuesGap()) {\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point) {\n const value = point.value;\n if (!hasValue(value.y) && this.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n\n return points;\n }\n}\n\nfunction xComparer(a, b) {\n return a.value.x - b.value.x;\n}\n\nexport default PolarAreaChart;","import PolarPlotAreaBase from './polar-plotarea-base';\nimport PlotAreaBase from './plotarea-base';\nimport PolarLineChart from '../polar-line-chart/polar-line-chart';\nimport PolarScatterChart from '../polar-scatter-chart/polar-scatter-chart';\nimport PolarAreaChart from '../polar-area-chart/polar-area-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\n\nimport { PolarAxis, Point } from '../../core';\n\nimport { POLAR_AREA, POLAR_LINE, POLAR_SCATTER } from '../constants';\n\nimport filterSeriesByType from '../utils/filter-series-by-type';\n\nimport { ARC } from '../../common/constants';\nimport { deepExtend, eventElement, setDefaultOptions } from '../../common';\n\nclass PolarPlotArea extends PolarPlotAreaBase {\n createPolarAxis() {\n const polarAxis = new PolarAxis(this.options.xAxis, this.chartService);\n\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n }\n\n valueAxisOptions(defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n }\n\n createValueAxis() {\n super.createValueAxis();\n this.axisY = this.valueAxis;\n }\n\n appendChart(chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n }\n\n createCharts() {\n const series = this.filterVisibleSeries(this.series);\n const pane = this.panes[0];\n\n this.createLineChart(\n filterSeriesByType(series, [ POLAR_LINE ]),\n pane\n );\n\n this.createScatterChart(\n filterSeriesByType(series, [ POLAR_SCATTER ]),\n pane\n );\n\n this.createAreaChart(\n filterSeriesByType(series, [ POLAR_AREA ]),\n pane\n );\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const lineChart = new PolarLineChart(this, { series: series });\n\n this.appendChart(lineChart, pane);\n }\n\n createScatterChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const scatterChart = new PolarScatterChart(this, { series: series });\n\n this.appendChart(scatterChart, pane);\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const areaChart = new PolarAreaChart(this, { series: series });\n\n this.appendChart(areaChart, pane);\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const xValue = this.axisX.getValue(point);\n const yValue = this.axisY.getValue(point);\n\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n }\n\n createCrosshairs() {}\n}\n\nsetDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default PolarPlotArea;","import LineChart from '../line-chart/line-chart';\nimport SplineSegment from '../line-chart/spline-segment';\nimport LineSegment from '../line-chart/line-segment';\n\nimport { Point, Box } from '../../core';\n\nimport { SMOOTH, INTERPOLATE } from '../constants';\n\nimport { setDefaultOptions, last } from '../../common';\n\nfunction groupBySeriesIx(segments) {\n const seriesSegments = [];\n for (let idx = 0; idx < segments.length; idx++) {\n const segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n\n return seriesSegments;\n}\n\nclass RadarLineChart extends LineChart {\n\n pointSlot(categorySlot, valueSlot) {\n const valueRadius = categorySlot.center.y - valueSlot.y1;\n const slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n\n renderSegments() {\n super.renderSegments();\n\n if (this._segments && this._segments.length > 1) {\n const seriesSegments = groupBySeriesIx(this._segments);\n\n for (let idx = 0; idx < seriesSegments.length; idx++) {\n const segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n const firstPoint = segments[0].linePoints[0];\n const lastSegment = last(segments);\n const lastPoint = last(lastSegment.linePoints);\n const isFirstDataPoint = firstPoint.categoryIx === 0;\n const isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n const segment = new pointType(linePoints, currentSeries, seriesIx);\n const missingValues = this.seriesMissingValues(currentSeries);\n\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n\n return segment;\n }\n}\n\nsetDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n});\n\nexport default RadarLineChart;\n","import SplineAreaSegment from '../area-chart/spline-area-segment';\n\nclass SplineRadarAreaSegment extends SplineAreaSegment {\n fillToAxes() {}\n}\n\nexport default SplineRadarAreaSegment;","import AreaSegment from '../area-chart/area-segment';\n\nclass RadarAreaSegment extends AreaSegment {\n fillToAxes() {}\n}\n\nexport default RadarAreaSegment;","import RadarLineChart from '../radar-line-chart/radar-line-chart';\nimport SplineRadarAreaSegment from './spline-radar-area-segment';\nimport RadarAreaSegment from './radar-area-segment';\n\nimport { SMOOTH, ZERO } from '../constants';\n\nclass RadarAreaChart extends RadarLineChart {\n createSegment(linePoints, currentSeries, seriesIx, prevSegment) {\n const isStacked = this.options.isStacked;\n const style = (currentSeries.line || {}).style;\n let previousSegment;\n let stackPoints;\n let segment;\n\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n\n return segment;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n}\n\nexport default RadarAreaChart;","import DonutSegment from '../donut-chart/donut-segment';\n\nimport { setDefaultOptions } from '../../common';\n\nclass RadarSegment extends DonutSegment {\n constructor(value, options) {\n super(value, null, options);\n }\n}\n\nsetDefaultOptions(RadarSegment, {\n overlay: {\n gradient: \"none\"\n },\n labels: {\n distance: 10\n }\n});\n\nexport default RadarSegment;","import { ChartElement } from '../../core';\n\nimport { setDefaultOptions } from '../../common';\n\nimport { forEach, forEachReverse } from './utils';\n\nclass RadarClusterLayout extends ChartElement {\n constructor(options) {\n super(options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n }\n\n reflow(sector) {\n const { options, children } = this;\n const { gap, spacing } = options;\n const count = children.length;\n const slots = count + gap + (spacing * (count - 1));\n const slotAngle = sector.angle / slots;\n let angle = sector.startAngle + slotAngle * (gap / 2);\n\n this.forEach(children, (child) => {\n const slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n\n child.reflow(slotSector);\n child.sector = slotSector;\n\n angle += slotAngle + (slotAngle * spacing);\n });\n }\n}\n\nsetDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n});\n\nexport default RadarClusterLayout;","import { ChartElement, Box } from '../../core';\n\nclass RadarStackLayout extends ChartElement {\n reflow(sector) {\n const { options: { reverse }, children } = this;\n const childrenCount = children.length;\n const first = reverse ? childrenCount - 1 : 0;\n const step = reverse ? -1 : 1;\n\n this.box = new Box();\n\n for (let i = first; i >= 0 && i < childrenCount; i += step) {\n const childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n}\n\nexport default RadarStackLayout;","import BarChart from '../bar-chart/bar-chart';\nimport RadarSegment from './radar-segment';\nimport RadarClusterLayout from '../layout/radar-cluster-layout';\nimport RadarStackLayout from '../layout/radar-stack-layout';\nimport CategoricalChart from '../categorical-chart';\n\nimport { setDefaultOptions } from '../../common';\n\nclass RadarBarChart extends BarChart {\n pointType() {\n return RadarSegment;\n }\n\n clusterType() {\n return RadarClusterLayout;\n }\n\n stackType() {\n return RadarStackLayout;\n }\n\n categorySlot(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n }\n\n pointSlot(categorySlot, valueSlot) {\n const slot = categorySlot.clone();\n const y = categorySlot.center.y;\n\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n\n return slot;\n }\n\n reflowPoint(point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n }\n\n createAnimation() {\n this.options.animation.center = this.box.toRect().center();\n super.createAnimation();\n }\n}\n\nRadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n\nsetDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: {\n type: \"pie\"\n }\n});\n\nexport default RadarBarChart;","import PolarPlotAreaBase from './polar-plotarea-base';\nimport CategoricalPlotArea from './categorical-plotarea';\nimport RadarAreaChart from '../radar-area-chart/radar-area-chart';\nimport RadarLineChart from '../radar-line-chart/radar-line-chart';\nimport RadarBarChart from '../radar-bar-chart/radar-bar-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\n\nimport { RadarCategoryAxis, Point } from '../../core';\n\nimport { RADAR_AREA, RADAR_LINE, RADAR_COLUMN } from '../constants';\n\nimport filterSeriesByType from '../utils/filter-series-by-type';\n\nimport { ARC } from '../../common/constants';\nimport { eventElement, deepExtend, setDefaultOptions } from '../../common';\n\nclass RadarPlotArea extends PolarPlotAreaBase {\n createPolarAxis() {\n const categoryAxis = new RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n }\n\n valueAxisOptions(defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: \"P0\" }\n });\n }\n\n return deepExtend(defaults, this.options.valueAxis);\n }\n\n aggregateCategories() {\n // No separate panes in radar charts\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n }\n\n createCategoryAxesLabels() {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n }\n\n filterSeries(currentSeries) {\n // Not supported for radar charts\n return currentSeries;\n }\n\n createCharts() {\n const series = this.filterVisibleSeries(this.series);\n const pane = this.panes[0];\n\n this.createAreaChart(\n filterSeriesByType(series, [ RADAR_AREA ]),\n pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ RADAR_LINE ]),\n pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ RADAR_COLUMN ]),\n pane\n );\n }\n\n chartOptions(series) {\n const options = { series: series };\n const firstSeries = series[0];\n if (firstSeries) {\n const filteredSeries = this.filterVisibleSeries(series);\n const stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === \"100%\" && filteredSeries.length > 1;\n\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n\n return options;\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n }\n\n createBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n\n const barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n\n this._hasBarCharts = true;\n }\n\n seriesCategoryAxis() {\n return this.categoryAxis;\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const category = this.categoryAxis.getCategory(point);\n const value = this.valueAxis.getValue(point);\n\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n }\n\n createCrosshairs() {}\n}\n\ndeepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints\n});\n\nsetDefaultOptions(RadarPlotArea, {\n categoryAxis: {\n categories: []\n },\n valueAxis: {}\n});\n\nexport default RadarPlotArea;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box, Point } from '../../core';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { WHITE } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass FunnelSegment extends ChartElement {\n constructor(value, options, segmentOptions) {\n super(options);\n\n this.value = value;\n this.options.index = segmentOptions.index;\n }\n\n reflow(chartBox) {\n const points = this.points;\n const label = this.children[0];\n\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n }\n\n createVisual() {\n const options = this.options;\n let visual;\n\n super.createVisual();\n\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: () => this.createPath()\n });\n } else {\n visual = this.createPath();\n }\n\n if (visual) {\n this.visual.append(visual);\n }\n }\n\n createPath() {\n const options = this.options;\n const border = options.border;\n const path = draw.Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n\n return path;\n }\n\n createHighlight(style) {\n return draw.Path.fromPoints(this.points, style);\n }\n\n highlightVisual() {\n return this.visual.children[0];\n }\n\n highlightVisualArgs() {\n const path = draw.Path.fromPoints(this.points).close();\n\n return {\n options: this.options,\n path: path\n };\n }\n\n tooltipAnchor() {\n const box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: \"center\",\n vertical: \"top\"\n }\n };\n }\n\n formatValue(format) {\n const point = this;\n return point.owner.formatPointValue(point, format);\n }\n}\n\nsetDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: {\n width: 1\n }\n});\n\ndeepExtend(FunnelSegment.prototype, PointEventsMixin);\n\nexport default FunnelSegment;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, TextBox } from '../../core';\nimport PieChartMixin from '../mixins/pie-chart-mixin';\nimport FunnelSegment from './funnel-segment';\n\nimport { bindSegments, evalOptions } from '../utils';\n\nimport { CENTER, LEFT } from '../../common/constants';\nimport { autoTextColor, deepExtend, isFunction, getTemplate, limitValue, setDefaultOptions } from '../../common';\n\nclass FunnelChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format,point.value);\n }\n\n render() {\n const { options, plotArea: { options: { seriesColors = [] } } } = this;\n const series = options.series[0];\n const data = series.data;\n\n if (!data) {\n return;\n }\n\n const { total, points } = bindSegments(series);\n\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n\n if (!pointData) {\n continue;\n }\n\n let fields = pointData.fields;\n\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n\n fields = deepExtend({\n index: i,\n owner: this,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n\n const value = pointData.valueFields.value;\n const segment = this.createSegment(value, fields);\n const label = this.createLabel(value, fields);\n\n if (segment && label) {\n segment.append(label);\n }\n }\n }\n\n evalSegmentOptions(options, value, fields) {\n const series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"toggle\", \"visual\" ] });\n }\n\n createSegment(value, fields) {\n const seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n\n this.createLegendItem(value, seriesOptions, fields);\n\n if (fields.visible !== false) {\n\n const segment = new FunnelSegment(value, seriesOptions, fields);\n Object.assign(segment, fields);\n\n this.append(segment);\n this.points.push(segment);\n\n return segment;\n }\n }\n\n createLabel(value, fields) {\n const { series, dataItem } = fields;\n const labels = deepExtend({}, this.options.labels, series.labels);\n let text = value;\n\n if (labels.visible) {\n const labelTemplate = getTemplate(labels);\n const data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n\n if (!labels.color) {\n labels.color = autoTextColor(series.color);\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n\n this.evalSegmentOptions(labels, value, fields);\n const textBox = new TextBox(text, deepExtend({\n vAlign: labels.position\n }, labels), data);\n\n this.labels.push(textBox);\n\n return textBox;\n }\n }\n\n labelPadding() {\n const labels = this.labels;\n const padding = { left: 0, right: 0 };\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n const align = label.options.align;\n if (align !== CENTER) {\n const width = labels[i].box.width();\n\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n\n return padding;\n }\n\n dynamicSlopeReflow(box, width, totalHeight) {\n const { options, points: segments } = this;\n const count = segments.length;\n const firstSegment = segments[0];\n let maxSegment = firstSegment;\n\n for (let idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n\n let lastUpperSide = (firstSegment.percentage / maxSegment.percentage) * width;\n let previousOffset = (width - lastUpperSide) / 2;\n let previousHeight = 0;\n\n for (let idx = 0; idx < count; idx++) {\n const percentage = segments[idx].percentage;\n const nextSegment = segments[idx + 1];\n const nextPercentage = (nextSegment ? nextSegment.percentage : percentage);\n const points = segments[idx].points = [];\n const height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n let offset;\n\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n\n offset = limitValue(offset, 0, width);\n\n points.push(new geom.Point(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new geom.Point(box.x1 + offset, box.y1 + height + previousHeight));\n\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n }\n\n constantSlopeReflow(box, width, totalHeight) {\n const { options, points: segments } = this;\n const count = segments.length;\n const decreasingWidth = options.neckRatio <= 1;\n const neckRatio = decreasingWidth ? options.neckRatio * width : width;\n let previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n const topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n const finalNarrow = (topMostWidth - neckRatio) / 2;\n let previousHeight = 0;\n\n for (let idx = 0; idx < count; idx++) {\n const points = segments[idx].points = [];\n const percentage = segments[idx].percentage;\n const offset = (options.dynamicHeight) ? (finalNarrow * percentage) : (finalNarrow / count);\n const height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n\n points.push(new geom.Point(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new geom.Point(box.x1 + previousOffset + offset,box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n }\n\n reflow(chartBox) {\n const points = this.points;\n const count = points.length;\n\n if (!count) {\n return;\n }\n\n const options = this.options;\n const box = chartBox.clone().unpad(this.labelPadding());\n const totalHeight = box.height() - options.segmentSpacing * (count - 1);\n const width = box.width();\n\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n\n for (let idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n}\n\nsetDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n});\n\ndeepExtend(FunnelChart.prototype, PieChartMixin);\n\nexport default FunnelChart;\n","import { autoTextColor, deepExtend, getTemplate, valueOrDefault } from '../../common';\nimport { CENTER, ROUNDED_RECT, BOTTOM, WHITE } from '../../common/constants';\nimport { ChartElement, Point, rectToBox, ShapeElement, TextBox } from '../../core';\nimport { TOOLTIP_OFFSET } from '../constants';\nimport NoteMixin from '../mixins/note-mixin';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nclass HeatmapPoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.options = options;\n this.color = options.color || WHITE;\n this.value = value;\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createMarker();\n this.createLabel();\n this.createNote();\n }\n\n createLabel() {\n const options = this.options;\n const labels = options.labels;\n\n if (labels.visible) {\n const pointData = this.pointData();\n let labelTemplate = getTemplate(labels);\n let labelText;\n let labelColor = labels.color;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n if (!labelColor) {\n labelColor = autoTextColor(this.color);\n }\n\n this.label = new TextBox(labelText,\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n },\n labels, {\n color: labelColor\n }),\n pointData\n );\n this.append(this.label);\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n reflow(targetBox) {\n this.render();\n\n const label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.reflow(this.markerBox());\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n this.marker.reflow(this.markerBox());\n }\n\n markerBox() {\n const options = this.options;\n const markers = options.markers;\n const border = markers.border;\n const rect = this.box.toRect();\n const type = valueOrDefault(markers.type, 'rect');\n const isRoundRect = type === ROUNDED_RECT;\n let borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n const halfBorderWidth = Math.round(borderWidth / 2);\n\n if (markers.size) {\n const center = rect.center();\n rect.size.width = rect.size.height = markers.size;\n rect.origin.x = Math.round(center.x - rect.size.width / 2);\n rect.origin.y = Math.round(center.y - rect.size.height / 2);\n }\n\n rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n\n return rectToBox(rect);\n }\n\n markerBorder() {\n const options = this.options;\n const markers = options.markers;\n const border = markers.border;\n const opacity = valueOrDefault(border.opacity, options.opacity);\n\n return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\n };\n }\n\n createMarker() {\n const options = this.options;\n const markerOptions = options.markers;\n const marker = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n this.marker = marker;\n this.append(marker);\n }\n\n createHighlight(style) {\n const options = this.options;\n const markerOptions = this.options.highlight.markers || this.options.markers;\n\n const highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: markerOptions.color || this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n });\n\n highlight.reflow(this.markerBox());\n const visual = highlight.getElement();\n\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n\n return visual;\n }\n\n highlightVisual() {\n return this.rectVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n }\n\n tooltipAnchor() {\n const left = this.box.center().x;\n const top = this.box.y1 - TOOLTIP_OFFSET;\n\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n unclipElements() {\n /* noop, clip labels */\n }\n\n pointData() {\n return {\n x: this.value.x,\n y: this.value.y,\n value: this.value.value,\n dataItem: this.dataItem,\n series: this.series\n };\n }\n}\n\ndeepExtend(HeatmapPoint.prototype, PointEventsMixin);\ndeepExtend(HeatmapPoint.prototype, NoteMixin);\n\nHeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: {\n color: 'transparent'\n }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: {\n label: {}\n }\n};\n\nexport default HeatmapPoint;\n","import { deepExtend, defined, isFunction, setDefaultOptions } from '../../common';\nimport { MAX_VALUE, MIN_VALUE } from '../../common/constants';\nimport { Box, ChartElement } from '../../core';\nimport CategoricalChart from '../categorical-chart';\nimport evalOptions from '../utils/eval-options';\nimport colorScale from './color-scale';\nimport HeatmapPoint from './heatmap-point';\n\nclass HeatmapChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n }\n\n _initFields() {\n this.points = [];\n this.seriesOptions = [];\n this.valueRange = { min: MAX_VALUE, max: MIN_VALUE };\n this._evalSeries = [];\n }\n\n render() {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n setRange() {\n const { options: { series } } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields } = this._bindPoint(currentSeries, seriesIx, pointIx);\n if (defined(valueFields.value) && valueFields.value !== null) {\n this.valueRange.min = Math.min(this.valueRange.min, valueFields.value);\n this.valueRange.max = Math.max(this.valueRange.max, valueFields.value);\n }\n }\n }\n }\n\n addValue(value, fields) {\n let point;\n if (value && defined(value.value) && value.value !== null) {\n point = this.createPoint(value, fields);\n if (point) {\n Object.assign(point, fields);\n }\n }\n\n this.points.push(point);\n }\n\n evalPointOptions(options, value, fields) {\n const { series, seriesIx } = fields;\n const state = { defaults: series._defaults, excluded: [ \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\" ] };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n min: this.valueRange.min,\n max: this.valueRange.max\n }, state);\n }\n\n return pointOptions;\n }\n\n pointType() {\n return HeatmapPoint;\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n let pointOptions = this.pointOptions(series, fields.seriesIx);\n let color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n } else if (this.valueRange.max !== 0) {\n const scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n\n const point = new HeatmapPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n seriesAxes(series) {\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n const plotArea = this.plotArea;\n const xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n const yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis, yAxis };\n }\n\n reflow(targetBox) {\n const chartPoints = this.points;\n const limit = !this.options.clip;\n let pointIx = 0;\n\n\n this.traverseDataPoints((value, fields) => {\n const point = chartPoints[pointIx++];\n const { xAxis, yAxis } = this.seriesAxes(fields.series);\n const indexX = xAxis.categoryIndex(value.x);\n const indexY = yAxis.categoryIndex(value.y);\n const slotX = xAxis.getSlot(indexX, indexX, limit);\n const slotY = yAxis.getSlot(indexY, indexY, limit);\n\n if (point) {\n if (slotX && slotY) {\n const pointSlot = this.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n }\n\n pointSlot(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n traverseDataPoints(callback) {\n const { options: { series } } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const { xAxis, yAxis } = this.seriesAxes(currentSeries);\n const xRange = xAxis.currentRangeIndices();\n const yRange = yAxis.currentRangeIndices();\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields: value, fields } = this._bindPoint(currentSeries, seriesIx, pointIx);\n const xIndex = xAxis.totalIndex(value.x);\n const yIndex = yAxis.totalIndex(value.y);\n const xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n const yIn = yRange.min <= yIndex && yIndex <= yRange.max;\n\n if (xIn && yIn) {\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this\n }, fields));\n }\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.value);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n}\nsetDefaultOptions(HeatmapChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}: {2}\"\n },\n labels: {\n format: \"{2}\"\n },\n clip: true\n});\ndeepExtend(HeatmapChart.prototype, {\n _bindPoint: CategoricalChart.prototype._bindPoint\n});\n\nexport default HeatmapChart;\n","import { parseColor } from '@progress/kendo-drawing';\n\n// Linear color scale from the given color to white minus minimum lightness offset.\nconst colorScale = (color, minLightnessOffset = 0.05) => {\n const baseColor = parseColor(color);\n const offset = 1 - minLightnessOffset;\n\n return (value) => {\n const hsl = baseColor.toHSL();\n const range = 100 - hsl.l;\n const point = offset - value;\n hsl.l += Math.min(point * range, range);\n\n return hsl.toCss();\n };\n};\n\nexport default colorScale;\n","import { deepExtend, eventElement, grep, inArray, setDefaultOptions, createHashSet } from '../../common';\nimport { DATE } from '../../common/constants';\nimport { CategoryAxis, DateCategoryAxis, Point } from '../../core';\nimport { HEATMAP } from '../constants';\nimport HeatmapChart from '../heatmap-chart/heatmap-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport SeriesBinder from '../series-binder';\nimport { appendIfNotNull, equalsIgnoreCase, filterSeriesByType, singleItemOrArray } from '../utils';\nimport PlotAreaBase from './plotarea-base';\n\n\nclass HeatmapPlotArea extends PlotAreaBase {\n initFields() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n }\n\n render(panes = this.panes) {\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n }\n\n bindCategories() {\n const series = this.srcSeries || this.series;\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const data = currentSeries.data || [];\n const { xAxis, yAxis } = this.seriesAxes(currentSeries);\n\n const xCategories = createHashSet(xAxis.categories || []);\n const yCategories = createHashSet(yAxis.categories || []);\n\n for (let pointIndex = 0; pointIndex < data.length; pointIndex++) {\n const { x, y } = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n\n if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\n }\n }\n\n createCharts(panes) {\n const seriesByPane = this.groupSeriesByPane();\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n const filteredSeries = this.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this.createHeatmapChart(\n filterSeriesByType(filteredSeries, [ HEATMAP ]),\n pane\n );\n }\n }\n\n createHeatmapChart(series, pane) {\n const chart = new HeatmapChart(this, {\n series: series\n });\n\n this.appendChart(chart, pane);\n }\n\n seriesPaneName(series) {\n const options = this.options;\n const xAxisName = series.xAxis;\n const xAxisOptions = [].concat(options.xAxis);\n const xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n const yAxisName = series.yAxis;\n const yAxisOptions = [].concat(options.yAxis);\n const yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = panes[0].name || \"default\";\n const paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n seriesAxes(series) {\n let xAxis;\n let yAxis;\n\n const options = this.options;\n\n const xAxisOptions = [].concat(options.xAxis);\n const xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(axis => axis.name === xAxisName);\n } else {\n xAxis = xAxisOptions[0];\n }\n\n const yAxisOptions = [].concat(options.yAxis);\n const yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(axis => axis.name === yAxisName);\n } else {\n yAxis = yAxisOptions[0];\n }\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis, yAxis };\n }\n\n createAxisLabels() {\n const axes = this.axes;\n for (let i = 0; i < axes.length; i++) {\n axes[i].createLabels();\n }\n }\n\n createXYAxis(options, vertical, axisIndex) {\n const axisName = options.name;\n const namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n const axisOptions = Object.assign({\n axisCrossingValue: 0\n }, options, {\n vertical: vertical,\n reverse: (vertical || this.chartService.rtl) ? !options.reverse : options.reverse,\n justified: false\n });\n const firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n const typeSamples = [ axisOptions.min, axisOptions.max, firstCategory ];\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n const firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n let inferredDate;\n\n for (let i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = DateCategoryAxis;\n } else {\n axisType = CategoryAxis;\n }\n\n const axis = new axisType(axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(`${ vertical ? \"Y\" : \"X\" } axis with name ${ axisName } is already defined`);\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n axis.mapCategories();\n\n return axis;\n }\n\n createAxes(panes) {\n const options = this.options;\n const xAxesOptions = [].concat(options.xAxis);\n const xAxes = [];\n const yAxesOptions = [].concat(options.yAxis);\n const yAxes = [];\n\n for (let idx = 0; idx < xAxesOptions.length; idx++) {\n const axisPane = this.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (let idx = 0; idx < yAxesOptions.length; idx++) {\n const axisPane = this.findPane(yAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n yAxes.push(this.createXYAxis(yAxesOptions[idx], true, idx));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const allAxes = this.axes;\n const length = allAxes.length;\n const xValues = [];\n const yValues = [];\n\n for (let i = 0; i < length; i++) {\n const axis = allAxes[i];\n const values = axis.options.vertical ? yValues : xValues;\n appendIfNotNull(values, axis.getCategory(point));\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n }\n\n updateAxisOptions(axis, options) {\n const vertical = axis.options.vertical;\n const axes = this.groupAxes(this.panes);\n const index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions(this.options, index, vertical, options);\n updateAxisOptions(this.originalOptions, index, vertical, options);\n }\n\n crosshairOptions(axis) {\n // Stack the crosshair above the series points.\n return Object.assign({}, axis.options.crosshair, { zIndex: 0 });\n }\n}\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n const axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n}\n\nsetDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default HeatmapPlotArea;\n","import PlotAreaFactory from './plotarea/plotarea-factory';\nimport SeriesBinder from './series-binder';\nimport DefaultAggregates from './aggregates/default-aggregates';\nimport CategoricalPlotArea from './plotarea/categorical-plotarea';\nimport XYPlotArea from './plotarea/xy-plotarea';\nimport PiePlotArea from './plotarea/pie-plotarea';\nimport DonutPlotArea from './plotarea/donut-plotarea';\nimport PolarPlotArea from './plotarea/polar-plotarea';\nimport RadarPlotArea from './plotarea/radar-plotarea';\nimport FunnelPlotArea from './plotarea/funnel-plotarea';\nimport HeatmapPlotArea from './plotarea/heatmap-plotarea';\n\nimport { COLUMN, DONUT, PIE, FUNNEL, BAR, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT, RANGE_COLUMN,\n RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, SCATTER, SCATTER_LINE, BUBBLE,\n POLAR_AREA, POLAR_LINE, POLAR_SCATTER, RADAR_AREA, RADAR_COLUMN, RADAR_LINE, CATEGORY,\n RANGE_AREA, VERTICAL_RANGE_AREA, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD,\n ERROR_LOW_FIELD, ERROR_HIGH_FIELD, HEATMAP } from './constants';\nimport { X, Y, VALUE } from '../common/constants';\n\nconst COLOR = \"color\";\nconst FIRST = \"first\";\nconst FROM = \"from\";\nconst MAX = \"max\";\nconst MIN = \"min\";\nconst NOTE_TEXT = \"noteText\";\nconst SUMMARY_FIELD = \"summary\";\nconst TO = \"to\";\n\nPlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT,\n RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, RANGE_AREA, VERTICAL_RANGE_AREA\n]);\n\nPlotAreaFactory.current.register(XYPlotArea, [\n SCATTER, SCATTER_LINE, BUBBLE\n]);\n\nPlotAreaFactory.current.register(PiePlotArea, [ PIE ]);\nPlotAreaFactory.current.register(DonutPlotArea, [ DONUT ]);\nPlotAreaFactory.current.register(FunnelPlotArea, [ FUNNEL ]);\n\nPlotAreaFactory.current.register(PolarPlotArea, [ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ]);\nPlotAreaFactory.current.register(RadarPlotArea, [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ]);\n\nPlotAreaFactory.current.register(HeatmapPlotArea, [ HEATMAP ]);\n\nSeriesBinder.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD ]\n);\n\nSeriesBinder.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n [ FROM, TO ], [ CATEGORY, COLOR, NOTE_TEXT ]\n);\n\nSeriesBinder.current.register(\n [ WATERFALL, HORIZONTAL_WATERFALL ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD ]\n);\n\nSeriesBinder.current.register([ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ], [ X, Y ], [ COLOR ]);\nSeriesBinder.current.register([ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ], [ VALUE ], [ COLOR ]);\n\nSeriesBinder.current.register(\n [ FUNNEL ],\n [ VALUE ], [ CATEGORY, COLOR, \"visibleInLegend\", \"visible\" ]\n);\n\nDefaultAggregates.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL ],\n { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\n);\n\nDefaultAggregates.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\n);\n\nDefaultAggregates.current.register(\n [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ],\n { value: MAX, color: FIRST }\n);\n\nSeriesBinder.current.register(\n [ SCATTER, SCATTER_LINE, BUBBLE ],\n [ X, Y ], [ COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD ]\n);\n\nSeriesBinder.current.register(\n [ BUBBLE ], [ X, Y, \"size\" ], [ COLOR, CATEGORY, NOTE_TEXT ]\n);\n\nSeriesBinder.current.register(\n [ HEATMAP ],\n [ X, Y, VALUE ], [ COLOR, NOTE_TEXT ]\n);\n\nSeriesBinder.current.register(\n [ CANDLESTICK, OHLC ],\n [ \"open\", \"high\", \"low\", \"close\" ], [ CATEGORY, COLOR, \"downColor\", NOTE_TEXT ]\n);\n\nDefaultAggregates.current.register(\n [ CANDLESTICK, OHLC ],\n { open: MAX, high: MAX, low: MIN, close: MAX,\n color: FIRST, downColor: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n [ \"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\" ], [ CATEGORY, COLOR, NOTE_TEXT ]\n);\n\nDefaultAggregates.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\n color: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ BULLET, VERTICAL_BULLET ],\n [ \"current\", \"target\" ], [ CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT ]\n);\n\nDefaultAggregates.current.register(\n [ BULLET, VERTICAL_BULLET ],\n { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ PIE, DONUT ],\n [ VALUE ], [ CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\" ]\n);\n","import PiePlotArea from './pie-plotarea';\nimport DonutChart from '../donut-chart/donut-chart';\n\nclass DonutPlotArea extends PiePlotArea {\n render() {\n this.createDonutChart(this.series);\n }\n\n createDonutChart(series) {\n const firstSeries = series[0];\n const donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(donutChart);\n }\n}\n\nexport default DonutPlotArea;","import PlotAreaBase from './plotarea-base';\nimport FunnelChart from '../funnel-chart/funnel-chart';\n\nimport { append } from '../../common';\n\nclass FunnelPlotArea extends PlotAreaBase {\n render() {\n this.createFunnelChart(this.series);\n }\n\n createFunnelChart(series) {\n const firstSeries = series[0];\n const funnelChart = new FunnelChart(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n\n this.appendChart(funnelChart);\n }\n\n appendChart(chart, pane) {\n super.appendChart(chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n}\n\nexport default FunnelPlotArea;","import { drawing as draw, throttle, geometry } from '@progress/kendo-drawing';\n\nimport { RootElement, Title, CategoryAxis, Point } from '../core';\n\nimport Highlight from './highlight';\nimport Pannable from './pan-and-zoom/pannable';\nimport ZoomSelection from './pan-and-zoom/zoom-selection';\nimport MousewheelZoom from './pan-and-zoom/mousewheel-zoom';\nimport Legend from './legend/legend';\nimport PlotAreaFactory from './plotarea/plotarea-factory';\nimport Selection from './selection';\nimport SeriesBinder from './series-binder';\nimport Tooltip from './tooltip/tooltip';\nimport SharedTooltip from './tooltip/shared-tooltip';\nimport CategoricalPlotArea from './plotarea/categorical-plotarea';\nimport PlotAreaBase from './plotarea/plotarea-base';\nimport { ChartService, DomEventsBuilder } from '../services';\nimport getField from './utils/get-field';\nimport isDateAxis from './utils/is-date-axis';\nimport getDateField from './utils/get-date-field';\nimport { ChartPane, ChartPlotArea, findAxisByName } from './api-elements';\n\nimport { X, Y, VALUE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SERIES_OPACITY } from '../common/constants';\nimport { addClass, Class, setDefaultOptions, deepExtend, defined, find, isObject, isFunction, elementSize, elementOffset,\n elementScale, elementStyles, eventCoordinates, bindEvents, unbindEvents, mousewheelDelta, FontLoader, inArray, last, round,\n HashMap, valueOrDefault } from '../common';\n\nimport { dateComparer } from '../date-utils';\n\nimport { DRAG_START, DRAG, DRAG_END, ZOOM_START, ZOOM, ZOOM_END, SELECT_START, SELECT, SELECT_END, PLOT_AREA_HOVER, PLOT_AREA_LEAVE,\n RENDER, CATEGORY, PIE, DONUT, FUNNEL, COLUMN, MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE, SHOW_TOOLTIP, SERIES_HOVER } from './constants';\n\nimport './animations';\nimport './register-charts';\n\nconst AXIS_NAMES = [ CATEGORY, VALUE, X, Y ];\n\nconst MOUSEMOVE = \"mousemove\";\nconst CONTEXTMENU = \"contextmenu\";\nconst MOUSELEAVE = \"mouseleave\";\nconst MOUSEMOVE_DELAY = 20;\n\nclass Chart extends Class {\n constructor(element, userOptions, themeOptions, context = {}) {\n super();\n\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new ChartService(this, context);\n this.chartService.theme = themeOptions;\n\n this._initElement(element);\n\n const options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n\n this._initHandlers();\n this._initSurface();\n\n this.bindCategories();\n FontLoader.preloadFonts(userOptions, () => {\n this.fontLoaded = true;\n if (!this._destroyed) {\n this.trigger('init');\n this._redraw();\n this._attachEvents();\n }\n });\n }\n\n _initElement(element) {\n this._setElementClass(element);\n element.style.position = \"relative\";\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n }\n\n _setElementClass(element) {\n addClass(element, \"k-chart\");\n }\n\n _initTheme(options, themeOptions) {\n const seriesCopies = [];\n const series = options.series || [];\n\n for (let i = 0; i < series.length; i++) {\n seriesCopies.push(Object.assign({}, series[i]));\n }\n options.series = seriesCopies;\n\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n\n // Clean up default if not overriden by data attributes\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n }\n\n getSize() {\n const chartArea = this.options.chartArea || {};\n const width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n const height = chartArea.height ? parseInt(chartArea.height, 10) : Math.floor(this.element.offsetHeight);\n\n return {\n width: width,\n height: height\n };\n }\n\n resize(force) {\n const size = this.getSize();\n const currentSize = this._size;\n const hasSize = size.width > 0 || size.height > 0;\n\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger(\"resize\", size);\n } else if (hasSize && this._selections && find(this._selections, s => !s.visible)) {\n this._destroySelections();\n this._setupSelection();\n }\n }\n\n _resize() {\n this._noTransitionsRedraw();\n }\n\n redraw(paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n\n if (paneName) {\n const plotArea = this._model._plotArea;\n const pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n }\n\n getAxis(name) {\n return findAxisByName(name, this._plotArea.axes);\n }\n\n findAxisByName(name) {\n return this.getAxis(name);\n }\n\n findPaneByName(name) {\n const panes = this._plotArea.panes;\n\n for (let idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(panes[idx]);\n }\n }\n }\n\n findPaneByIndex(idx) {\n const panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n }\n\n plotArea() {\n return new ChartPlotArea(this._plotArea);\n }\n\n toggleHighlight(show, filter) {\n const plotArea = this._plotArea;\n const firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n let points;\n\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n let seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n }\n\n togglePointsHighlight(show, points) {\n const highlight = this._highlight;\n for (let idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n }\n\n showTooltip(filter) {\n const shared = this._sharedTooltip();\n const { _tooltip: tooltip, _plotArea: plotArea } = this;\n let point, categoryIndex;\n\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n\n if (shared) {\n if (categoryIndex >= 0) {\n const points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n }\n\n hideTooltip() {\n this._tooltip.hide();\n }\n\n _initSurface() {\n const surface = this.surface;\n const wrap = this._surfaceWrap();\n\n const chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n elementSize(wrap, { height: chartArea.height });\n }\n\n if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n\n this.surface = draw.Surface.create(wrap, {\n type: this.options.renderAs\n });\n\n this.surface.bind(\"mouseenter\", this._surfaceMouseenterHandler);\n this.surface.bind(\"mouseleave\", this._surfaceMouseleaveHandler);\n\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n }\n\n _surfaceWrap() {\n return this.element;\n }\n\n _redraw() {\n const model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n\n this._destroyView();\n\n this._model = model;\n this._plotArea = model._plotArea;\n\n model.renderVisual();\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n\n this._initSurface();\n this.surface.draw(model.visual);\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n\n this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n\n if (!this._navState) {\n this._cancelDomEvents();\n }\n }\n\n exportVisual(exportOptions) {\n let visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n const currentOptions = this.options;\n const options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n\n const model = this._getModel();\n\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n\n visual = model.visual;\n\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n\n return visual;\n }\n\n _sharedTooltip() {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n }\n\n _createPannable() {\n const options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n }\n\n _createZoomSelection() {\n const zoomable = this.options.zoomable;\n const selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n }\n\n _createMousewheelZoom() {\n const zoomable = this.options.zoomable;\n const mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n }\n\n _toggleDragZoomEvents() {\n const pannable = this.options.pannable;\n const zoomable = this.options.zoomable;\n const selection = (zoomable || {}).selection;\n const mousewheel = (zoomable || {}).mousewheel;\n const allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ]);\n const allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([ ZOOM_START, ZOOM, ZOOM_END ]);\n const element = this.element;\n\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n\n this._toggleDomEvents(!allowDrag, !allowZoom);\n }\n\n _toggleDomEvents(drag, zoom) {\n const domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n }\n\n _createTooltip() {\n const { options: { tooltip: tooltipOptions } } = this;\n let tooltip;\n\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n\n return tooltip;\n }\n\n _createSharedTooltip(options) {\n return new SharedTooltip(this._plotArea, options);\n }\n\n applyDefaults(options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n }\n\n applySeriesColors() {\n const options = this.options;\n const series = options.series;\n const colors = options.seriesColors || [];\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const seriesColor = colors[i % colors.length];\n const defaults = currentSeries._defaults;\n\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n }\n\n _getModel() {\n const options = this.options;\n const plotArea = this._createPlotArea();\n const model = new RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n\n Title.buildTitle(options.title, model);\n\n if (options.legend && options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n\n return model;\n }\n\n _modelOptions() {\n const options = this.options;\n const size = this.getSize();\n\n return deepExtend({\n transitions: options.transitions,\n width: size.width || DEFAULT_WIDTH,\n height: size.height || DEFAULT_HEIGHT\n }, options.chartArea);\n }\n\n _createPlotArea(skipSeries) {\n const options = this.options;\n\n const plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n\n return plotArea;\n }\n\n _setupSelection() {\n const { _plotArea: { axes } } = this;\n const selections = this._selections = [];\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n const range = axis.range();\n\n const selection = new Selection(this, axis,\n deepExtend({ min: range.min, max: range.max }, options.select)\n );\n\n selections.push(selection);\n }\n }\n }\n\n _selectStart(e) {\n return this.trigger(SELECT_START, e);\n }\n\n _select(e) {\n return this.trigger(SELECT, e);\n }\n\n _selectEnd(e) {\n return this.trigger(SELECT_END, e);\n }\n\n _initHandlers() {\n this._clickHandler = this._click.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n\n this._mousemove = throttle(\n this._mousemove.bind(this),\n MOUSEMOVE_DELAY\n );\n }\n\n addObserver(observer) {\n if (observer) {\n this.observers.push(observer);\n }\n }\n\n removeObserver(observer) {\n const index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n }\n\n requiresHandlers(eventNames) {\n const observers = this.observers;\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n }\n\n trigger(name, args = {}) {\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n return isDefaultPrevented;\n }\n\n _attachEvents() {\n const element = this.element;\n\n this._touchAction = element.style.touchAction;\n\n bindEvents(element, {\n [ CONTEXTMENU ]: this._clickHandler,\n [ MOUSEWHEEL ]: this._mousewheelHandler,\n [ MOUSELEAVE ]: this._mouseleaveHandler\n });\n\n if (this._shouldAttachMouseMove()) {\n bindEvents(element, { [ MOUSEMOVE ]: this._mousemove });\n }\n\n this.domEvents = DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n\n this._toggleDragZoomEvents();\n }\n\n _mouseleave(e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (this._plotArea.hovered) {\n this.trigger(PLOT_AREA_LEAVE);\n this._plotArea.hovered = false;\n }\n }\n\n _cancelDomEvents() {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n }\n\n _gesturestart(e) {\n if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n }\n\n _gestureend(e) {\n if (this._zooming && !this._stopChartHandlers(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n }\n\n _gesturechange(e) {\n const mousewheelZoom = this._mousewheelZoom;\n\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n const previousGestureDistance = this._gestureDistance;\n let scaleDelta = -e.distance / previousGestureDistance + 1;\n\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n\n this._gestureDistance = e.distance;\n const args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n const coords = this._eventCoordinates(e);\n\n if (!this._zooming) {\n this._zooming = true;\n }\n\n const ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n }\n\n _mouseout(e) {\n if (e.element) {\n const element = this._drawingChartElement(e.element, e);\n\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n }\n\n _start(e) {\n const coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n\n if (this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n this.chartService.panning = true;\n }\n\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, { axisRanges: axisRanges(this._plotArea.axes), originalEvent: e });\n }\n }\n }\n\n _move(e) {\n let { _navState: state, _pannable: pannable } = this;\n\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n if (pannable) {\n const ranges = pannable.move(e);\n\n if (ranges && !this.trigger(DRAG, { axisRanges: ranges, originalEvent: e })) {\n pannable.pan();\n }\n } else if (state) {\n const ranges = {};\n const axes = state.axes;\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n const axisName = currentAxis.options.name;\n if (axisName) {\n const axis = currentAxis.options.vertical ? e.y : e.x;\n const delta = axis.startLocation - axis.location;\n\n if (delta !== 0) {\n ranges[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n\n state.axisRanges = ranges;\n this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n }\n\n _end(e) {\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n const pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n this.chartService.panning = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n\n if (this._zoomSelection) {\n const ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, { axisRanges: ranges, originalEvent: e })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, { axisRanges: ranges, originalEvent: e });\n }\n }\n }\n\n _stopChartHandlers(e) {\n const selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\n\n const coords = this._eventCoordinates(e);\n const pane = this._plotArea.paneByPoint(coords);\n if (pane) {\n for (let idx = 0; idx < selections.length; idx++) {\n if (selections[idx].onPane(pane)) {\n return true;\n }\n }\n }\n }\n\n _mousewheelZoomRate() {\n const zoomable = this.options.zoomable;\n const mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n }\n\n _mousewheel(e) {\n const delta = mousewheelDelta(e);\n const mousewheelZoom = this._mousewheelZoom;\n const coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (mousewheelZoom) {\n const args = { delta: delta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n args.axisRanges = mousewheelZoom.updateRanges(delta, coords);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n\n this._mwTimeout = setTimeout(() => {\n this.trigger(ZOOM_END, args);\n this._zooming = false;\n if (this.surface) {\n this.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n let state = this._navState;\n if (!state) {\n const prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n\n if (state) {\n const totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n\n const axes = this._navState.axes;\n const ranges = {};\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n const axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta * this._mousewheelZoomRate(), coords);\n }\n }\n\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(() => {\n this._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n }\n\n _startNavigation(e, coords, chartEvent) {\n const plotArea = this._model._plotArea;\n const pane = plotArea.findPointPane(coords);\n const axes = plotArea.axes.slice(0);\n\n if (!pane) {\n return;\n }\n\n const ranges = axisRanges(axes);\n\n const prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n }\n\n _endNavigation(e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n }\n\n _getChartElement(e, match) {\n const element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n }\n\n _drawingChartElement(element, e, match) {\n let current = element;\n let chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n\n return chartElement;\n }\n }\n\n _eventCoordinates(e) {\n const coordinates = eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n }\n\n _elementPadding() {\n if (!this._padding) {\n const { paddingLeft, paddingTop } = elementStyles(this.element, [ \"paddingLeft\", \"paddingTop\" ]);\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n\n return this._padding;\n }\n\n _toDocumentCoordinates(point) {\n const padding = this._elementPadding();\n const offset = elementOffset(this.element);\n\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n }\n\n // TODO: Breaking change due to peer version change\n // Reuse by exposing _surfacePoint on Surface\n _toModelCoordinates(clientX, clientY) {\n const element = this.element;\n const offset = elementOffset(element);\n const padding = this._elementPadding();\n const inverseTransform = elementScale(element).invert();\n const point = new geometry.Point(\n clientX - offset.left - padding.left,\n clientY - offset.top - padding.top\n ).transform(inverseTransform);\n\n return new Point(point.x, point.y);\n }\n\n _tap(e) {\n const drawingElement = this.surface.eventTarget(e);\n const element = this._drawingChartElement(drawingElement, e);\n const sharedTooltip = this._sharedTooltip();\n\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n\n this._propagateClick(element, e);\n\n //part of fix for hover issue on windows touch\n this.handlingTap = true;\n setTimeout(() => {\n this.handlingTap = false;\n }, 0);\n }\n\n _click(e) {\n const element = this._getChartElement(e);\n this._propagateClick(element, e);\n }\n\n _propagateClick(element, e) {\n let current = element;\n while (current) {\n if (current.click) {\n current.click(this, e);\n }\n\n current = current.parent;\n }\n }\n\n _startHover(element, e) {\n if (this._suppressHover) {\n return false;\n }\n\n let point = this._drawingChartElement(element, e, function(element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n\n const activePoint = this._activePoint;\n const multipleSeries = this._plotArea.series.length > 1;\n const hasInactiveOpacity = this._hasInactiveOpacity();\n\n this._updateHoveredPoint(point, e);\n\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n }\n } else if (!point && hasInactiveOpacity) {\n if (multipleSeries && this._activeChartInstance) {\n this._updateSeriesOpacity(point, true);\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._activeChartInstance = null;\n }\n this._highlight && this._highlight.hide();\n this._activePoint = null;\n }\n\n return point;\n }\n\n _displayTooltip(point) {\n const tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n }\n\n _displayInactiveOpacity(activePoint, multipleSeries, highlightPoints) {\n const chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (!chartInstance) {\n return;\n }\n\n if (multipleSeries) {\n this._updateSeriesOpacity(activePoint);\n this._applySeriesOpacity(chartInstance.children, null, true);\n this._applySeriesOpacity(chartInstance.children, activePoint.series);\n this._highlight.show(highlightPoints || activePoint);\n } else {\n let inactivePoints;\n\n if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n }\n\n _getInactivePoints(activePoint, chartInstance) {\n let allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n\n return allPoints.filter(point => point !== activePoint);\n }\n\n _getAllPointsOfType(container, type) {\n let points = [];\n\n for (let i = 0; i < container.children.length; i++) {\n const element = container.children[i];\n\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this._getAllPointsOfType(element, type));\n }\n }\n\n return points;\n }\n\n _updateHoveredPoint(point, e) {\n const hoveredPoint = this._hoveredPoint;\n\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n }\n\n _updateSeriesOpacity(point, resetOpacity) {\n const plotArea = this._plotArea;\n const length = plotArea.series.length;\n\n for (let i = 0; i < length; i++) {\n const currSeries = plotArea.series[i];\n const defaultOpacity = this._getDefaultOpacityForSeries(currSeries);\n const inactiveOpacity = this._getInactiveOpacityForSeries(currSeries);\n\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n }\n\n _applySeriesOpacity(elements, activeSeries, reset, series) {\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n const currSeries = element.series || series;\n const shouldHighlight = currSeries && (currSeries.highlight || {}).visible;\n\n if (shouldHighlight && element.visual) {\n const opacity = series ? series.opacity : element.series.opacity;\n if (currSeries !== activeSeries || reset) {\n element.visual.opacity(reset ? 1 : opacity);\n }\n }\n\n if (element.children && element.children.length) {\n this._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n }\n\n _chartInstanceFromPoint(point) {\n let chartInstance = point.parent;\n\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n\n return chartInstance;\n }\n\n _hasInactiveOpacity() {\n let hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n let hasInactiveOpacity = this.options.series.filter(s => s.highlight.inactiveOpacity !== undefined ).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\n }\n\n _getInactiveOpacityForSeries(series) {\n let defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n let seriesInactiveOpacity = series.highlight.inactiveOpacity;\n return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n }\n\n _getDefaultOpacityForSeries(series) {\n return series.defaultOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n }\n\n _mouseover(e) {\n const point = this._startHover(e.element, e.originalEvent);\n\n if (point && point.tooltipTracking && !this._mouseMoveTrackHandler && !this._sharedTooltip()) {\n this._mouseMoveTrackHandler = this._mouseMoveTracking.bind(this);\n bindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n }\n }\n\n _mouseMoveTracking(e) {\n const { options, _tooltip: tooltip, _highlight: highlight, _activePoint: point } = this;\n const coords = this._eventCoordinates(e);\n\n if (this._plotArea.box.containsPoint(coords)) {\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n const seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n if (seriesPoint && seriesPoint !== point) {\n this._activePoint = seriesPoint;\n\n if (!seriesPoint.hover(this, e)) {\n const tooltipOptions = deepExtend({}, options.tooltip, seriesPoint.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n\n highlight.show(seriesPoint);\n }\n }\n }\n } else {\n unbindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n this._unsetActivePoint();\n this._mouseMoveTrackHandler = null;\n }\n }\n\n _mousemove(e) {\n const coords = this._eventCoordinates(e);\n const plotArea = this._plotArea;\n\n this._trackCrosshairs(coords);\n\n if (plotArea.hover) {\n const overPlotArea = plotArea.backgroundContainsPoint(coords);\n if (overPlotArea) {\n plotArea.hovered = true;\n this._plotArea.hover(this, e);\n } else if (plotArea.hovered && !overPlotArea) {\n this.trigger(PLOT_AREA_LEAVE);\n plotArea.hovered = false;\n }\n }\n\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n }\n\n _trackCrosshairs(coords) {\n const crosshairs = this._plotArea.crosshairs;\n\n for (let i = 0; i < crosshairs.length; i++) {\n const current = crosshairs[i];\n\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n }\n\n _trackSharedTooltip(coords, e, toggle) {\n if (this._suppressHover) {\n return;\n }\n\n const { options: { tooltip: tooltipOptions }, _plotArea: plotArea, _plotArea: { categoryAxis }, _tooltip: tooltip, _highlight: highlight } = this;\n\n if (plotArea.backgroundContainsPoint(coords)) {\n const index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx || (!this._sharedHighlight && toggle)) {\n const points = plotArea.pointsByCategoryIndex(index);\n const pointArgs = points.map(function(point) {\n return point.eventArgs(e);\n });\n const hoverArgs = pointArgs[0] || {};\n hoverArgs.categoryPoints = pointArgs;\n\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n\n highlight.show(points);\n\n this._sharedHighlight = true;\n } else {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = index;\n } else if (toggle && this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._sharedHighlight = false;\n }\n } else if (this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n }\n }\n\n hideElements(options) {\n const plotArea = this._plotArea;\n this._mousemove.cancel();\n\n plotArea.hideCrosshairs();\n\n this._unsetActivePoint(options);\n }\n\n _unsetActivePoint(options) {\n const { _tooltip: tooltip, _highlight: highlight } = this;\n\n this._activePoint = null;\n this._hoveredPoint = null;\n\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n\n if (highlight) {\n highlight.hide();\n }\n }\n\n _deferRedraw() {\n this._redraw();\n }\n\n _clearRedrawTimeout() {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n }\n\n bindCategories() {\n const options = this.options;\n const definitions = [].concat(options.categoryAxis);\n\n for (let axisIx = 0; axisIx < definitions.length; axisIx++) {\n const axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n }\n\n bindCategoryAxisFromSeries(axis, axisIx) {\n const series = this.options.series;\n const seriesLength = series.length;\n const uniqueCategories = new HashMap();//perf improvement in case type category with dates\n let items = [];\n let bindable = false;\n let dateAxis;\n\n for (let seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n const s = series[seriesIx];\n const onAxis = s.categoryAxis === axis.name || (!s.categoryAxis && axisIx === 0);\n const data = s.data;\n const dataLength = data.length;\n const bind = s.categoryField && onAxis;\n bindable = bind || bindable;\n\n if (bind && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n\n const getFn = dateAxis ? getDateField : getField;\n\n for (let dataIx = 0; dataIx < dataLength; dataIx++) {\n const dataRow = data[dataIx];\n const category = getFn(s.categoryField, dataRow, this.chartService.intl);\n\n if (dateAxis || !uniqueCategories.get(category)) {\n items.push([ category, dataRow ]);\n\n if (!dateAxis) {\n uniqueCategories.set(category, true);\n }\n }\n }\n }\n }\n\n if (items.length > 0) {\n if (dateAxis) {\n items = uniqueDates(items, function(a, b) {\n return dateComparer(a[0], b[0]);\n });\n }\n\n const result = transpose(items);\n axis.categories = result[0];\n } else if (bindable) {\n axis.categories = [];\n }\n }\n\n _isBindable(series) {\n const valueFields = SeriesBinder.current.valueFields(series);\n let result = true;\n\n for (let i = 0; i < valueFields.length; i++) {\n let field = valueFields[i];\n if (field === VALUE) {\n field = \"field\";\n } else {\n field = field + \"Field\";\n }\n\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n\n return result;\n }\n\n _noTransitionsRedraw() {\n const options = this.options;\n let transitionsState;\n\n if (options.transitions !== false) {\n options.transitions = false;\n transitionsState = true;\n }\n\n this._redraw();\n\n if (transitionsState) {\n options.transitions = true;\n }\n }\n\n _legendItemHover(seriesIndex, pointIndex) {\n const { _plotArea: plotArea, _highlight: highlight } = this;\n const currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n let items;\n\n if (inArray(currentSeries.type, [ PIE, DONUT, FUNNEL ])) {\n items = plotArea.findPoint(function(point) {\n return point.series.index === seriesIndex && point.index === pointIndex;\n });\n } else {\n items = plotArea.pointsBySeriesIndex(seriesIndex);\n }\n\n if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n const multipleSeries = plotArea.series.length > 1;\n const point = items.length ? items[0] : items;\n\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n }\n\n _shouldAttachMouseMove() {\n return this._plotArea.crosshairs.length || (this._tooltip && this._sharedTooltip()) || this.requiresHandlers([ PLOT_AREA_HOVER, PLOT_AREA_LEAVE ]);\n }\n\n updateMouseMoveHandler() {\n unbindEvents(this.element, {\n [ MOUSEMOVE ]: this._mousemove\n });\n\n if (this._shouldAttachMouseMove()) {\n bindEvents(this.element, {\n [ MOUSEMOVE ]: this._mousemove\n });\n }\n }\n\n applyOptions(options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n\n this._toggleDragZoomEvents();\n }\n\n setOptions(options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n }\n\n setDirection(rtl) {\n this.chartService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this._destroySurface();\n }\n }\n\n setIntlService(intl) {\n this.chartService.intl = intl;\n }\n\n noTransitionsRedraw() {\n this._noTransitionsRedraw();\n }\n\n destroy() {\n this._destroyed = true;\n\n unbindEvents(this.element, {\n [ CONTEXTMENU ]: this._clickHandler,\n [ MOUSEWHEEL ]: this._mousewheelHandler,\n [ MOUSEMOVE ]: this._mousemove,\n [ MOUSELEAVE ]: this._mouseleaveHandler\n });\n\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n\n if (this._mouseMoveTrackHandler) {\n unbindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n }\n\n this._destroyView();\n\n this._destroySurface();\n\n this._clearRedrawTimeout();\n }\n\n _destroySurface() {\n const surface = this.surface;\n if (surface) {\n surface.unbind(\"mouseenter\", this._surfaceMouseenterHandler);\n surface.unbind(\"mouseleave\", this._surfaceMouseleaveHandler);\n surface.destroy();\n\n this.surface = null;\n }\n }\n\n _destroySelections() {\n const selections = this._selections;\n\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n }\n\n _destroyView() {\n const model = this._model;\n\n if (model) {\n model.destroy();\n this._model = null;\n }\n\n this._unsetActivePoint();\n\n this._destroySelections();\n\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n\n if (this._highlight) {\n this._highlight.destroy();\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n}\n\nfunction resolveAxisAliases(options) {\n const aliases = AXIS_NAMES;\n\n for (let idx = 0; idx < aliases.length; idx++) {\n const alias = aliases[idx] + \"Axes\";\n if (options[alias]) {\n options[aliases[idx] + \"Axis\"] = options[alias];\n delete options[alias];\n }\n }\n}\n\nfunction pointByCategoryName(points, name) {\n if (points) {\n for (let idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [ points[idx] ];\n }\n }\n }\n}\n\nfunction applyAxisDefaults(options, themeOptions) {\n const themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n let axisName, axisDefaults, axes;\n\n function mapAxisOptions(axisOptions) {\n const axisColor = (axisOptions || {}).color || axisDefaults.color;\n const result = deepExtend({},\n themeAxisDefaults,\n themeAxisDefaults[axisName],\n axisDefaults,\n axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n },\n axisOptions\n );\n\n delete result[axisName];\n\n return result;\n }\n\n for (let idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + \"Axis\";\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n\n axes = axes.map(mapAxisOptions);\n\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n}\n\nfunction applySeriesDefaults(options, themeOptions) {\n const series = options.series;\n const seriesLength = series.length;\n const seriesDefaults = options.seriesDefaults;\n const commonDefaults = deepExtend({}, options.seriesDefaults);\n const themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n const commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n for (let i = 0; i < seriesLength; i++) {\n const seriesType = series[i].type || options.seriesDefaults.type;\n\n const baseOptions = deepExtend(\n { data: [] },\n commonThemeDefaults,\n themeSeriesDefaults[seriesType],\n { tooltip: options.tooltip },\n commonDefaults,\n seriesDefaults[seriesType]\n );\n\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\n }\n}\n\nfunction cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n}\n\n\nfunction axisRanges(axes) {\n const ranges = {};\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n\n return ranges;\n}\n\nfunction sortDates(dates, comparer = dateComparer) {\n for (let i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n\n return dates;\n}\n\nfunction uniqueDates(srcDates, comparer = dateComparer) {\n const dates = sortDates(srcDates, comparer);\n const length = dates.length;\n const result = length > 0 ? [ dates[0] ] : [];\n\n for (let i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n\n return result;\n}\n\nfunction transpose(rows) {\n const rowCount = rows.length;\n const result = [];\n\n for (let rowIx = 0; rowIx < rowCount; rowIx++) {\n const row = rows[rowIx];\n const colCount = row.length;\n\n for (let colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n\n return result;\n}\n\nconst DATA_FIELDS = [ 'data', 'categories' ];\n\nfunction clearMissingValues(originalOptions, options) {\n for (let field in options) {\n if (!inArray(field, DATA_FIELDS) && options.hasOwnProperty(field)) {\n const fieldValue = options[field];\n const originalValue = originalOptions[field];\n if (defined(originalValue)) {\n const nullValue = fieldValue === null;\n if ((nullValue || !defined(fieldValue))) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n}\n\nfunction triggerPaneRender(panes) {\n for (let idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n}\n\nsetDefaultOptions(Chart, {\n renderAs: \"\",\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: {\n visible: true\n },\n labels: {},\n negativeValues: {\n visible: false\n }\n },\n series: [],\n seriesColors: null,\n tooltip: {\n visible: false\n },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [ {} ],\n pannable: false,\n zoomable: false\n});\n\nexport default Chart;\n","import { SharedTooltip as ChartSharedTooltip } from '../chart';\nimport { Point } from '../core';\nconst TOP_OFFSET = -2;\n\nclass SharedTooltip extends ChartSharedTooltip {\n _slotAnchor(coords, slot) {\n const axis = this.plotArea.categoryAxis;\n const vertical = axis.options.vertical;\n const align = vertical ? {\n horizontal: \"left\",\n vertical: \"center\"\n } : {\n horizontal: \"center\",\n vertical: \"bottom\"\n };\n\n let point;\n\n if (vertical) {\n point = new Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new Point(slot.center().x, TOP_OFFSET);\n }\n\n return {\n point: point,\n align: align\n };\n }\n\n _defaultAnchor(point, slot) {\n return this._slotAnchor({}, slot);\n }\n}\n\nexport default SharedTooltip;","import { Chart } from '../chart';\nimport { BAR, BULLET, PIE, COLUMN, VERTICAL_BULLET } from '../chart/constants';\nimport{ addClass, deepExtend, elementSize, getSpacing, inArray, isArray, isNumber, setDefaultOptions } from '../common';\nimport SharedTooltip from './shared-tooltip';\n\nconst DEAULT_BAR_WIDTH = 150;\nconst DEAULT_BULLET_WIDTH = 150;\nconst NO_CROSSHAIR = [ BAR, BULLET ];\n\nfunction hide(children) {\n const state = [];\n for (let idx = 0; idx < children.length; idx++) {\n const child = children[idx];\n state[idx] = child.style.display;\n child.style.display = \"none\";\n }\n\n return state;\n}\n\nfunction show(children, state) {\n for (let idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n}\n\nfunction wrapNumber(value) {\n return isNumber(value) ? [ value ] : value;\n}\n\nclass Sparkline extends Chart {\n _setElementClass(element) {\n addClass(element, 'k-sparkline');\n }\n\n _initElement(element) {\n super._initElement(element);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n }\n\n _resize() {\n const element = this.element;\n const state = hide(element.childNodes);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n\n show(element.childNodes, state);\n\n super._resize();\n }\n\n _modelOptions() {\n const chartOptions = this.options;\n const stage = this._surfaceWrap();\n const displayState = hide(stage.childNodes);\n\n const space = document.createElement('span');\n space.innerHTML = ' ';\n\n stage.appendChild(space);\n\n const options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n\n stage.removeChild(space);\n\n show(stage.childNodes, displayState);\n\n if (this.surface) {\n this.surface.resize();\n }\n\n return options;\n }\n\n _surfaceWrap() {\n if (!this.stage) {\n const stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n }\n\n _createPlotArea(skipSeries) {\n const plotArea = super._createPlotArea(skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n\n return plotArea;\n }\n\n _calculateWidth(plotArea) {\n const options = this.options;\n const margin = getSpacing(options.chartArea.margin);\n const charts = plotArea.charts;\n const stage = this._surfaceWrap();\n let total = 0;\n\n\n for (let i = 0; i < charts.length; i++) {\n const currentChart = charts[i];\n const firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n\n if (firstSeries.type === BAR) {\n return DEAULT_BAR_WIDTH;\n }\n\n if (firstSeries.type === BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n\n if (firstSeries.type === PIE) {\n return elementSize(stage).height;\n }\n\n const categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n const pointsCount = categoryAxis.categoriesCount() *\n (!currentChart.options.isStacked && inArray(firstSeries.type, [ COLUMN, VERTICAL_BULLET ]) ? currentChart.seriesOptions.length : 1);\n\n total = Math.max(total, pointsCount);\n }\n }\n\n let size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n\n return size;\n }\n\n _createSharedTooltip(options) {\n return new SharedTooltip(this._plotArea, options);\n }\n\n static normalizeOptions(userOptions) {\n let options = wrapNumber(userOptions);\n\n if (isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n\n if (!options.series) {\n options.series = [ { data: wrapNumber(options.data) } ];\n }\n\n deepExtend(options, {\n seriesDefaults: {\n type: options.type\n }\n });\n\n if (inArray(options.series[0].type, NO_CROSSHAIR) ||\n inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, {\n categoryAxis: {\n crosshair: {\n visible: false\n }\n }\n }, options);\n }\n\n return options;\n }\n}\n\nsetDefaultOptions(Sparkline, {\n chartArea: {\n margin: 2\n },\n axisDefaults: {\n visible: false,\n majorGridLines: {\n visible: false\n },\n valueAxis: {\n narrowRange: true\n }\n },\n seriesDefaults: {\n type: \"line\",\n area: {\n line: {\n width: 0.5\n }\n },\n bar: {\n stack: true\n },\n padding: 2,\n width: 0.5,\n overlay: {\n gradient: null\n },\n highlight: {\n visible: false\n },\n border: {\n width: 0\n },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: {\n visible: false\n }\n }\n },\n legend: {\n visible: false\n },\n transitions: false,\n\n pointWidth: 5,\n\n panes: [ { clip: false } ]\n});\n\nexport default Sparkline;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { interpolateValue, elementStyles } from '../common';\n\nclass FadeOutAnimation extends draw.Animation {\n\n setup() {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n }\n\n step(pos) {\n elementStyles(this.element, {\n opacity: String(interpolateValue(this._initialOpacity, 0, pos))\n });\n }\n\n abort() {\n super.abort();\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n }\n\n cancel() {\n super.abort();\n elementStyles(this.element, {\n opacity: String(this._initialOpacity)\n });\n }\n}\n\nexport default FadeOutAnimation;","import { Class, deepExtend, elementStyles, getTemplate, setDefaultOptions } from '../common';\nimport { toDate, toTime } from '../date-utils';\nimport FadeOutAnimation from './fade-out-animation';\n\nfunction createDiv(className, style) {\n const div = document.createElement(\"div\");\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n\n return div;\n}\n\nclass NavigatorHint extends Class {\n constructor(container, chartService, options) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n\n const padding = elementStyles(container, [ \"paddingLeft\", \"paddingTop\" ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n\n this.createElements();\n container.appendChild(this.element);\n }\n\n createElements() {\n const element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n const tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n const scroll = this.scroll = createDiv('k-scroll');\n\n tooltip.innerHTML = ' ';\n\n element.appendChild(tooltip);\n element.appendChild(scroll);\n }\n\n show(from, to, bbox) {\n const { element, options, scroll, tooltip } = this;\n const middle = toDate(toTime(from) + toTime(to - from) / 2);\n const scrollWidth = bbox.width() * 0.4;\n const minPos = bbox.center().x - scrollWidth;\n const maxPos = bbox.center().x;\n const posRange = maxPos - minPos;\n const range = options.max - options.min;\n const scale = posRange / range;\n const offset = middle - options.min;\n let text = this.chartService.intl.format(options.format, from, to);\n const template = getTemplate(options);\n\n this.clearHideTimeout();\n\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n\n const tooltipStyle = elementStyles(tooltip, [ 'marginTop', 'borderTopWidth', 'height' ]);\n\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n\n elementStyles(element, {\n visibility: 'visible'\n });\n }\n\n clearHideTimeout() {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n }\n\n hide() {\n this.clearHideTimeout();\n\n this._hideTimeout = setTimeout(() => {\n this._visible = false;\n this._hideAnimation = new FadeOutAnimation(this.element);\n this._hideAnimation.setup();\n this._hideAnimation.play();\n }, this.options.hideDelay);\n }\n\n destroy() {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n}\n\nsetDefaultOptions(NavigatorHint, {\n format: \"{0:d} - {1:d}\",\n hideDelay: 500\n});\n\nexport default NavigatorHint;","const NAVIGATOR_PANE = \"_navigator\";\nconst NAVIGATOR_AXIS = NAVIGATOR_PANE;\n\nexport { NAVIGATOR_AXIS, NAVIGATOR_PANE };","import NavigatorHint from './navigator-hint';\nimport { Selection, filterSeriesByType } from '../chart';\nimport { DRAG, DRAG_END, EQUALLY_SPACED_SERIES, ZOOM, ZOOM_END } from '../chart/constants';\nimport { DateCategoryAxis } from '../core';\nimport { addDuration, parseDate, toDate, toTime } from '../date-utils';\nimport { Class, deepExtend, defined, getTemplate, InstanceObserver, last, limitValue, valueOrDefault } from '../common';\nimport { NAVIGATOR_AXIS, NAVIGATOR_PANE } from './constants';\n\nconst ZOOM_ACCELERATION = 3;\n\nclass Navigator extends Class {\n constructor(chart) {\n super();\n\n this.chart = chart;\n const options = this.options = deepExtend({}, this.options, chart.options.navigator);\n const select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n\n if (!defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n\n this.chartObserver = new InstanceObserver(this, {\n [DRAG]: '_drag',\n [DRAG_END]: '_dragEnd',\n [ZOOM]: '_zoom',\n [ZOOM_END]: '_zoomEnd'\n });\n chart.addObserver(this.chartObserver);\n }\n\n parseDate(value) {\n return parseDate(this.chart.chartService.intl, value);\n }\n\n clean() {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n }\n\n destroy() {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n\n this.clean();\n }\n\n redraw() {\n this._redrawSelf();\n this.initSelection();\n }\n\n initSelection() {\n const { chart, options } = this;\n const axis = this.mainAxis();\n const { min, max } = axis.roundedRange();\n const { from, to, mousewheel } = options.select;\n const axisClone = clone(axis);\n\n if (axis.categoriesCount() === 0) {\n return;\n }\n\n this.clean();\n\n // \"Freeze\" the selection axis position until the next redraw\n axisClone.box = axis.box;\n\n this.selection = new Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: valueOrDefault(mousewheel, { zoom: \"left\" }),\n visible: options.visible\n }, new InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: getTemplate(options.hint),\n format: options.hint.format\n });\n }\n }\n\n setRange() {\n const plotArea = this.chart._createPlotArea(true);\n const axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n\n const { min, max } = axis.roundedRange();\n\n const select = this.options.select || {};\n let from = select.from || min;\n if (from < min) {\n from = min;\n }\n\n let to = select.to || max;\n if (to > max) {\n to = max;\n }\n\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n\n this.filterAxes();\n }\n\n _redrawSelf(silent) {\n const plotArea = this.chart._plotArea;\n\n if (plotArea) {\n plotArea.redraw(last(plotArea.panes), silent);\n }\n }\n\n redrawSlaves() {\n const chart = this.chart;\n const plotArea = chart._plotArea;\n const slavePanes = plotArea.panes.slice(0, -1);\n\n // Update the original series and categoryAxis before partial refresh.\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n\n plotArea.redraw(slavePanes);\n }\n\n _drag(e) {\n const { chart, selection } = this;\n const coords = chart._eventCoordinates(e.originalEvent);\n const navigatorAxis = this.mainAxis();\n const naviRange = navigatorAxis.roundedRange();\n const inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n const axis = chart._plotArea.categoryAxis;\n const range = e.axisRanges[axis.options.name];\n const select = this.options.select;\n let duration;\n\n if (!range || inNavigator || !selection) {\n return;\n }\n\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n\n const from = toDate(limitValue(\n toTime(range.min),\n naviRange.min, toTime(naviRange.max) - duration\n ));\n\n const to = toDate(limitValue(\n toTime(from) + duration,\n toTime(naviRange.min) + duration, naviRange.max\n ));\n\n this.options.select = { from: from, to: to };\n\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(from, to);\n\n this.showHint(from, to);\n }\n\n _dragEnd() {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n if (this.hint) {\n this.hint.hide();\n }\n }\n\n readSelection() {\n const { selection: { options: { from, to } }, options: { select } } = this;\n\n select.from = from;\n select.to = to;\n }\n\n filterAxes() {\n const { options: { select = { } }, chart } = this;\n const allAxes = chart.options.categoryAxis;\n const { from, to } = select;\n\n for (let idx = 0; idx < allAxes.length; idx++) {\n const axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n }\n\n filter() {\n const { chart, options: { select } } = this;\n\n if (!chart.requiresHandlers([ \"navigatorFilter\" ])) {\n return;\n }\n\n const mainAxis = this.mainAxis();\n const args = {\n from: select.from,\n to: select.to\n };\n\n if (mainAxis.options.type !== 'category') {\n const axisOptions = new DateCategoryAxis(deepExtend({\n baseUnit: \"fit\"\n }, chart.options.categoryAxis[0], {\n categories: [ select.from, select.to ]\n }), chart.chartService).options;\n\n args.from = addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n\n this.chart.trigger(\"navigatorFilter\", args);\n }\n\n _zoom(e) {\n const { chart: { _plotArea: { categoryAxis: axis } }, selection, options: { select, liveDrag } } = this;\n const mainAxis = this.mainAxis();\n let delta = e.delta;\n\n if (!selection) {\n return;\n }\n\n const fromIx = mainAxis.categoryIndex(selection.options.from);\n const toIx = mainAxis.categoryIndex(selection.options.to);\n const coords = this.chart._eventCoordinates(e.originalEvent);\n\n e.originalEvent.preventDefault();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (toIx - fromIx > 1) {\n selection.zoom(delta, coords);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta * this.chart._mousewheelZoomRate(), coords).min;\n }\n\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(select.from, select.to);\n\n this.showHint(this.options.select.from, this.options.select.to);\n }\n\n _zoomEnd(e) {\n this._dragEnd(e);\n }\n\n showHint(from, to) {\n const plotArea = this.chart._plotArea;\n\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n }\n\n _selectStart(e) {\n return this.chart._selectStart(e);\n }\n\n _select(e) {\n this.showHint(e.from, e.to);\n\n return this.chart._select(e);\n }\n\n _selectEnd(e) {\n if (this.hint) {\n this.hint.hide();\n }\n\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n return this.chart._selectEnd(e);\n }\n\n mainAxis() {\n const plotArea = this.chart._plotArea;\n\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n }\n\n select(from, to) {\n const select = this.options.select;\n\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n this.selection.set(from, to);\n }\n\n return {\n from: select.from,\n to: select.to\n };\n }\n\n static setup(options = {}, themeOptions = {}) {\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n\n const naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n const panes = options.panes = [].concat(options.panes);\n const paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n\n panes.push(paneOptions);\n\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n }\n\n static attachAxes(options, naviOptions) {\n const series = naviOptions.series || [];\n const categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n const valueAxes = options.valueAxis = [].concat(options.valueAxis);\n\n const equallySpacedSeries = filterSeriesByType(series, EQUALLY_SPACED_SERIES);\n const justifyAxis = equallySpacedSeries.length === 0;\n\n const base = deepExtend({\n type: \"date\",\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [ 1 ],\n hours: [ 1, 2 ],\n days: [ 1, 2 ],\n weeks: [],\n months: [ 1 ],\n years: [ 1 ]\n }\n });\n const user = naviOptions.categoryAxis;\n\n categoryAxes.push(\n deepExtend({}, base, {\n maxDateGroups: 200\n }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: \"fit\",\n baseUnitStep: \"auto\",\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + \"_labels\",\n maxDateGroups: 20,\n baseUnitStep: \"auto\",\n labels: { position: \"\" },\n plotBands: [],\n autoBaseUnitSteps: {\n minutes: []\n },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + \"_ticks\",\n maxDateGroups: 200,\n majorTicks: {\n width: 0.5\n },\n plotBands: [],\n title: null,\n labels: { visible: false, mirror: true },\n _overlap: true\n })\n );\n\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: {\n visible: false\n },\n visible: false\n }, naviOptions.valueAxis));\n }\n\n static attachSeries(options, naviOptions, themeOptions) {\n const series = options.series = options.series || [];\n const navigatorSeries = [].concat(naviOptions.series || []);\n const seriesColors = themeOptions.seriesColors;\n const defaults = naviOptions.seriesDefaults;\n\n for (let idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(\n deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: {\n visible: false\n }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n })\n );\n }\n }\n}\n\nfunction ClonedObject() { }\nfunction clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n}\n\nexport default Navigator;\n","import { Chart } from '../chart';\n\nimport Navigator from './navigator';\nimport { DEFAULT_WIDTH } from '../common/constants';\nimport { addClass, deepExtend, elementSize, grep, setDefaultOptions } from '../common';\nimport { NAVIGATOR_AXIS, NAVIGATOR_PANE } from './constants';\n\nconst AUTO_CATEGORY_WIDTH = 28;\n\nclass StockChart extends Chart {\n\n applyDefaults(options, themeOptions) {\n const width = elementSize(this.element).width || DEFAULT_WIDTH;\n let theme = themeOptions;\n\n const stockDefaults = {\n seriesDefaults: {\n categoryField: options.dateField\n },\n axisDefaults: {\n categoryAxis: {\n name: \"default\",\n majorGridLines: {\n visible: false\n },\n labels: {\n step: 2\n },\n majorTicks: {\n visible: false\n },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n\n Navigator.setup(options, theme);\n\n super.applyDefaults(options, theme);\n }\n\n _setElementClass(element) {\n addClass(element, 'k-chart k-stockchart');\n }\n\n setOptions(options) {\n this.destroyNavigator();\n super.setOptions(options);\n }\n\n noTransitionsRedraw() {\n const transitions = this.options.transitions;\n\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n }\n\n _resize() {\n this.noTransitionsRedraw();\n }\n\n _redraw() {\n const navigator = this.navigator;\n\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n }\n\n _dirty() {\n const options = this.options;\n const series = [].concat(options.series, options.navigator.series);\n const seriesCount = grep(series, function(s) { return s && s.visible; }).length;\n const dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n\n return dirty;\n }\n\n _fullRedraw() {\n let navigator = this.navigator;\n\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger(\"navigatorCreated\", { navigator: navigator });\n }\n\n navigator.clean();\n navigator.setRange();\n\n super._redraw();\n\n navigator.initSelection();\n }\n\n _trackSharedTooltip(coords) {\n const plotArea = this._plotArea;\n const pane = plotArea.paneByPoint(coords);\n\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n super._trackSharedTooltip(coords);\n }\n }\n\n bindCategories() {\n super.bindCategories();\n this.copyNavigatorCategories();\n }\n\n copyNavigatorCategories() {\n const definitions = [].concat(this.options.categoryAxis);\n let categories;\n\n for (let axisIx = 0; axisIx < definitions.length; axisIx++) {\n const axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n }\n\n destroyNavigator() {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n }\n\n destroy() {\n this.destroyNavigator();\n super.destroy();\n }\n\n _stopChartHandlers(e) {\n const coords = this._eventCoordinates(e);\n const pane = this._plotArea.paneByPoint(coords);\n\n return super._stopChartHandlers(e) || (pane && pane.options.name === NAVIGATOR_PANE);\n }\n\n _toggleDragZoomEvents() {\n if (!this._dragZoomEnabled) {\n this.element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n }\n}\n\nsetDefaultOptions(StockChart, {\n dateField: \"date\",\n axisDefaults: {\n categoryAxis: {\n type: \"date\",\n baseUnit: \"fit\",\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: {\n format: \"C\"\n }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: {\n visible: false\n },\n tooltip: {\n visible: true\n },\n line: {\n width: 2\n }\n },\n hint: {},\n visible: true\n },\n tooltip: {\n visible: true\n },\n legend: {\n visible: false\n }\n});\n\nexport default StockChart;","import GeometryArc from '../geometry/arc';\nimport Element from './element';\nimport { Path } from './path';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport withGeometry from '../mixins/with-geometry';\nimport { defined } from '../util';\n\n\nconst DEFAULT_STROKE = \"#000\";\n\nclass Arc extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Arc\";\n }\n\n constructor(geometry = new GeometryArc(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n rawBBox() {\n return this.geometry().bbox();\n }\n\n toPath() {\n const path = new Path();\n const curvePoints = this.geometry().curvePoints();\n\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n for (let i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n\n return path;\n }\n\n _containsPoint(point) {\n return this.geometry().containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Arc;\n","import withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport GeometryRect from '../geometry/rect';\nimport { defined } from '../util';\n\n\nclass Rect extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Rect\";\n }\n\n constructor(geometry = new GeometryRect(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(\"#000\");\n }\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n rawBBox() {\n return this._geometry.bbox();\n }\n\n _containsPoint(point) {\n return this._geometry.containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Rect;\n","import translateToPoint from './translate-to-point';\nimport alignStart from './align-start';\n\nexport default function alignElements(elements, rect, alignment, axis, sizeField) {\n for (let idx = 0; idx < elements.length; idx++) {\n const bbox = elements[idx].clippedBBox();\n if (bbox) {\n const point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || \"start\", axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n}","\nimport alignElements from './align-elements';\n\nexport default function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"x\", \"width\");\n}","import alignElements from './align-elements';\n\nexport default function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"y\", \"height\");\n}","import Point from '../geometry/point';\nimport translateToPoint from './translate-to-point';\n\nexport default function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n const origin = new Point();\n let previousBBox = elements[0].bbox;\n\n for (let idx = 1; idx < elements.length; idx++) {\n let element = elements[idx].element;\n let bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n}","export default function createStackElements(elements) {\n const stackElements = [];\n\n for (let idx = 0; idx < elements.length; idx++) {\n let element = elements[idx];\n let bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n\n return stackElements;\n}","import stackElements from './stack-elements';\nimport createStackElements from './create-stack-elements';\n\nexport default function stack(elements) {\n stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n}","import stackElements from './stack-elements';\nimport createStackElements from './create-stack-elements';\n\nexport default function vStack(elements) {\n stackElements(createStackElements(elements), \"y\", \"x\", \"height\");\n}","import translateToPoint from './translate-to-point';\nimport stackElements from './stack-elements';\n\nfunction getStacks(elements, rect, sizeField) {\n const maxSize = rect.size[sizeField];\n const stacks = [];\n let stack = [];\n let stackSize = 0;\n let element, bbox;\n\n const addElementToStack = function() {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n\n for (let idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n\n bbox = element.clippedBBox();\n if (bbox) {\n let size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n\n if (stack.length) {\n stacks.push(stack);\n }\n\n return stacks;\n}\n\nexport default function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n const stacks = getStacks(elements, rect, sizeField);\n const origin = rect.origin.clone();\n const result = [];\n\n for (let idx = 0; idx < stacks.length; idx++) {\n let stack = stacks[idx];\n let startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (let elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n}","import wrapElements from './wrap-elements';\n\nexport default function wrap(elements, rect) {\n return wrapElements(elements, rect, \"x\", \"y\", \"width\");\n}","import wrapElements from './wrap-elements';\n\nexport default function vWrap(elements, rect) {\n return wrapElements(elements, rect, \"y\", \"x\", \"height\");\n}","import createTransform from '../geometry/transform';\n\nexport default function fit(element, rect) {\n const bbox = element.clippedBBox();\n if (bbox) {\n const elementSize = bbox.size;\n const rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n const scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n const transform = element.transform() || createTransform();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n}","import { Class } from '../common';\nimport { MultiPath } from '../shapes/path';\nimport parsePath from './parse-path';\n\nlet instance;\n\nclass PathParser extends Class {\n static get current() {\n if (!instance) {\n instance = new PathParser();\n }\n\n return instance;\n }\n\n parse(str, options) {\n const multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n }\n}\n\nexport default PathParser;\n\n","import RootNode from './root-node';\nimport { Group } from '../shapes';\nimport { transform } from '../geometry';\nimport { SVG_NS } from './constants';\n\nexport default function exportGroup(group) {\n const root = new RootNode({\n skipBaseHref: true\n });\n const bbox = group.clippedBBox();\n let rootGroup = group;\n\n if (bbox) {\n const origin = bbox.getOrigin();\n const exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n\n root.load([ rootGroup ]);\n\n const svg = ``;\n\n root.destroy();\n\n return svg;\n}","import Surface from './surface';\nimport { transform } from '../geometry';\nimport Group from '../shapes/group';\n\nexport default function exportImage(group, options) {\n const defaults = {\n width: \"800px\", height: \"600px\",\n cors: \"Anonymous\"\n };\n\n let exportRoot = group;\n const bbox = group.clippedBBox();\n\n\n if (bbox) {\n const origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n\n const size = bbox.getSize();\n defaults.width = size.width + \"px\";\n defaults.height = size.height + \"px\";\n }\n\n const surfaceOptions = Object.assign(defaults, options);\n\n const container = document.createElement(\"div\");\n const style = container.style;\n\n style.display = \"none\";\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n\n const surface = new Surface(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n\n const promise = surface.image();\n const destroy = () => {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n\n return promise;\n}","import { createPromise, encodeBase64 } from '../util';\nimport exportGroup from './export-group';\n\nexport default function exportSVG(group, options) {\n let svg = exportGroup(group);\n\n if (!options || !options.raw) {\n svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n }\n\n return createPromise().resolve(svg);\n}\n","const ANGULAR_SPEED = 150;\nconst LINEAR_SPEED = 250;\nconst ARROW = \"arrow\";\nconst ARROW_POINTER = \"arrowPointer\";\nconst BAR_POINTER = \"barPointer\";\nconst DEFAULT_HEIGHT = 200;\nconst DEFAULT_LINE_WIDTH = 0.5;\nconst DEFAULT_WIDTH = 200;\nconst DEGREE = Math.PI / 180;\nconst INSIDE = \"inside\";\nconst LINEAR = \"linear\";\nconst OUTSIDE = \"outside\";\nconst RADIAL_POINTER = \"radialPointer\";\nconst RADIAL_RANGE_POINTER = \"radialRangePointer\";\n\nexport {\n ANGULAR_SPEED, LINEAR_SPEED, ARROW, ARROW_POINTER, BAR_POINTER,\n DEFAULT_HEIGHT, DEFAULT_LINE_WIDTH, DEFAULT_WIDTH,\n DEGREE, INSIDE, LINEAR, OUTSIDE, RADIAL_POINTER, RADIAL_RANGE_POINTER\n};","import { getSpacing } from '../../common';\n\nexport default function pad(bbox, value) {\n const origin = bbox.getOrigin();\n const size = bbox.getSize();\n const spacing = getSpacing(value);\n\n bbox.setOrigin([ origin.x - spacing.left, origin.y - spacing.top ]);\n bbox.setSize([ size.width + (spacing.left + spacing.right), size.height + (spacing.top + spacing.bottom) ]);\n\n return bbox;\n}","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport pad from './pad';\n\nconst { Group, Path, Text } = drawing;\n\nexport default function buildLabelElement(label, options) {\n const labelBox = label.box;\n const textBox = label.children[0].box;\n const border = options.border || {};\n const background = options.background || \"\";\n\n const wrapper = Path.fromRect(new geo.Rect([ labelBox.x1, labelBox.y1 ], [ labelBox.width(), labelBox.height() ]), {\n stroke: {}\n });\n\n const text = new Text(label.text, new geo.Point(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n\n const styleGeometry = pad(text.bbox().clone(), options.padding);\n\n const styleBox = Path.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n opacity: border.opacity,\n dashType: border.dashType,\n lineJoin: \"round\",\n lineCap: \"round\"\n },\n fill: {\n color: background\n }\n });\n\n const elements = new Group();\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n\n return elements;\n}","import { defined } from '../../common';\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\n\nexport default function getRange(range, min, max) {\n const from = defined(range.from) ? range.from : MIN_VALUE;\n const to = defined(range.to) ? range.to : MAX_VALUE;\n\n range.from = Math.max(Math.min(to, from), min);\n range.to = Math.min(Math.max(to, from), max);\n\n return range;\n}","import { getSpacing } from '../../common';\nimport pad from './pad';\n\nexport default function unpad(bbox, value) {\n const spacing = getSpacing(value);\n\n spacing.left = -spacing.left; spacing.top = -spacing.top;\n spacing.right = -spacing.right; spacing.bottom = -spacing.bottom;\n\n return pad(bbox, spacing);\n}","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { Class, elementSize, setDefaultOptions, deepExtend, isArray, isNumber } from '../common';\nimport { DEFAULT_WIDTH, DEFAULT_HEIGHT } from './constants';\nimport { ChartService } from '../services';\nimport { unpad } from './utils';\n\nconst DEFAULT_MARGIN = 5;\nconst { Path, Surface } = drawing;\n\nclass Gauge extends Class {\n\n constructor(element, userOptions, theme, context = {}) {\n super();\n\n this.element = element;\n this.theme = theme;\n this.contextService = new ChartService(this, context);\n this._originalOptions = deepExtend({}, this.options, userOptions);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n\n this.redraw();\n }\n\n destroy() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n\n delete this.element;\n delete this.surfaceElement;\n }\n\n value(pointerValue) {\n const pointer = this.pointers[0];\n\n if (arguments.length === 0) {\n return pointer.value();\n }\n\n pointer.value(pointerValue);\n this._setValueOptions(pointerValue);\n }\n\n _draw() {\n const surface = this.surface;\n\n surface.clear();\n surface.draw(this._visuals);\n }\n\n exportVisual() {\n return this._visuals;\n }\n\n allValues(values) {\n const pointers = this.pointers;\n const allValues = [];\n\n if (arguments.length === 0) {\n for (let i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n\n return allValues;\n }\n\n if (isArray(values)) {\n for (let i = 0; i < values.length; i++) {\n if (isNumber(values[i])) {\n pointers[i].value(values[i]);\n }\n }\n }\n\n this._setValueOptions(values);\n }\n\n _setValueOptions(values) {\n const pointers = [].concat(this.options.pointer);\n const arrayValues = [].concat(values);\n\n for (let i = 0; i < arrayValues.length; i++) {\n pointers[i].value = arrayValues[i];\n }\n }\n\n resize() {\n this.noTransitionsRedraw();\n }\n\n noTransitionsRedraw() {\n const transitions = this.options.transitions;\n\n this._toggleTransitions(false);\n\n this.redraw();\n\n this._toggleTransitions(transitions);\n }\n\n redraw() {\n const size = this._surfaceSize();\n const wrapper = new geo.Rect([ 0, 0 ], [ size.width, size.height ]);\n\n this._initSurface();\n\n this.gaugeArea = this._createGaugeArea();\n\n this._createModel();\n\n const bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n this.reflow(bbox);\n }\n\n setOptions(options, theme) {\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n this._initTheme(theme);\n\n this.redraw();\n }\n\n setDirection(rtl) {\n this.contextService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this.surface.destroy();\n this.surface = null;\n }\n }\n\n setIntlService(intl) {\n this.contextService.intl = intl;\n }\n\n _initTheme(theme) {\n let currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n\n this.options = deepExtend({}, currentTheme, this.options);\n const options = this.options;\n const pointer = options.pointer;\n\n if (isArray(pointer)) {\n const pointers = [];\n for (let i = 0; i < pointer.length; i++) {\n pointers.push(deepExtend({}, currentTheme.pointer, pointer[i]));\n }\n options.pointer = pointers;\n }\n }\n\n _createGaugeArea() {\n const options = this.options.gaugeArea;\n const size = this.surface.size();\n const border = options.border || {};\n let areaGeometry = new geo.Rect([ 0, 0 ], [ size.width, size.height ]);\n\n this._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n\n if (border.width > 0) {\n areaGeometry = unpad(areaGeometry, border.width);\n }\n\n const gaugeArea = Path.fromRect(areaGeometry, {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType,\n lineJoin: \"round\",\n lineCap: \"round\"\n },\n fill: {\n color: options.background\n }\n });\n\n return gaugeArea;\n }\n\n _initSurface() {\n const { options, surface } = this;\n const element = this._surfaceElement();\n const size = this._surfaceSize();\n\n elementSize(element, size);\n\n if (!surface || surface.options.type !== options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n\n this.surface = Surface.create(element, {\n type: options.renderAs\n });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n }\n\n _surfaceSize() {\n const options = this.options;\n const size = this._getSize();\n\n if (options.gaugeArea) {\n deepExtend(size, options.gaugeArea);\n }\n\n return size;\n }\n\n _surfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n\n return this.surfaceElement;\n }\n\n getSize() {\n return this._getSize();\n }\n\n _getSize() {\n const element = this.element;\n const defaultSize = this._defaultSize();\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n\n if (!width) {\n width = defaultSize.width;\n }\n\n if (!height) {\n height = defaultSize.height;\n }\n\n return { width: width, height: height };\n }\n\n _defaultSize() {\n return {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT\n };\n }\n\n _toggleTransitions(value) {\n this.options.transitions = value;\n for (let i = 0; i < this.pointers.length; i++) {\n this.pointers[i].options.animation.transitions = value;\n }\n }\n}\n\nsetDefaultOptions(Gauge, {\n plotArea: {},\n theme: \"default\",\n renderAs: \"\",\n pointer: {},\n scale: {},\n gaugeArea: {}\n});\n\nexport default Gauge;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, defined } from '../../common';\nimport { BLACK } from '../../common/constants';\nimport { NumericAxis } from '../../core';\nimport { DEFAULT_LINE_WIDTH, INSIDE } from '../constants';\nimport { autoMajorUnit } from '../../core';\nimport { buildLabelElement, getRange } from '../utils';\n\nconst { Path, Group } = drawing;\nconst Point = geo.Point;\n\nfunction renderAxisTick(tickRenderOptions, tickOptions) {\n const { position, tickX, tickY } = tickRenderOptions;\n let start, end;\n\n if (tickRenderOptions.vertical) {\n start = new Point(tickX, position);\n end = new Point(tickX + tickOptions.size, position);\n } else {\n start = new Point(position, tickY);\n end = new Point(position, tickY + tickOptions.size);\n }\n\n const tickPath = new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n\n return tickPath;\n}\n\nfunction renderTicks(tickGroup, tickPositions, tickRenderOptions, tickOptions) {\n const count = tickPositions.length;\n\n if (tickOptions.visible) {\n const { mirror, lineBox } = tickRenderOptions;\n for (let i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n\n tickRenderOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickRenderOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickRenderOptions.position = tickPositions[i];\n\n tickGroup.append(renderAxisTick(tickRenderOptions, tickOptions));\n }\n }\n}\n\nclass LinearScale extends NumericAxis {\n constructor(options, service) {\n let scaleOptions = options || {};\n if (!defined(scaleOptions.reverse) && scaleOptions.vertical === false && (service || {}).rtl) {\n scaleOptions = Object.assign({}, scaleOptions, {\n reverse: true\n });\n }\n\n super(0, 1, scaleOptions, service);\n\n this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n }\n\n initUserOptions(options) {\n let scaleOptions = deepExtend({}, this.options, options);\n scaleOptions = deepExtend({}, scaleOptions , { labels: { mirror: scaleOptions.mirror } });\n scaleOptions.majorUnit = scaleOptions.majorUnit || autoMajorUnit(scaleOptions.min, scaleOptions.max);\n\n return scaleOptions;\n }\n\n initFields() {\n }\n\n render() {\n const elements = this.elements = new Group();\n const labels = this.renderLabels();\n const scaleLine = this.renderLine();\n const scaleTicks = this.renderTicks();\n const ranges = this.renderRanges();\n\n elements.append(scaleLine, labels, scaleTicks, ranges);\n\n return elements;\n }\n\n renderRanges() {\n const options = this.options;\n const { min, max, vertical, labels: { mirror } } = options;\n const ranges = options.ranges || [];\n const elements = new Group();\n const count = ranges.length;\n const rangeSize = options.rangeSize || options.minorTicks.size / 2;\n\n for (let i = 0; i < count; i++) {\n const range = getRange(ranges[i], min, max);\n const slot = this.getSlot(range.from, range.to);\n const slotX = vertical ? this.lineBox() : slot;\n const slotY = vertical ? slot : this.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n\n elements.append(Path.fromRect(new geo.Rect([ slotX.x1, slotY.y1 ], [ slotX.x2 - slotX.x1, slotY.y2 - slotY.y1 ]), {\n fill: { color: range.color, opacity: range.opacity },\n stroke: { }\n }));\n }\n\n return elements;\n }\n\n renderLabels() {\n const { labels, options } = this;\n const elements = new Group();\n\n for (let i = 0; i < labels.length; i++) {\n elements.append(buildLabelElement(labels[i], options.labels));\n }\n\n return elements;\n }\n\n renderLine() {\n const line = this.options.line;\n const lineBox = this.lineBox();\n const elements = new Group();\n\n if (line.width > 0 && line.visible) {\n const linePath = new Path({\n stroke: {\n color: line.color,\n dashType: line.dashType,\n width: line.width\n }\n });\n\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n\n return elements;\n }\n\n renderTicks() {\n const ticks = new Group();\n const options = this.options;\n const majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n const tickRenderOptions = {\n vertical: options.vertical,\n mirror: options.labels.mirror,\n lineBox: this.lineBox()\n };\n\n renderTicks(ticks, this.getMajorTickPositions(), tickRenderOptions, options.majorTicks);\n renderTicks(ticks, this.getMinorTickPositions(), tickRenderOptions, deepExtend({}, {\n skipUnit: majorUnit / options.minorUnit\n }, options.minorTicks));\n\n return ticks;\n }\n}\n\nsetDefaultOptions(LinearScale, {\n min: 0,\n max: 50,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n line: {\n width: DEFAULT_LINE_WIDTH\n },\n\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n});\n\nexport default LinearScale;","import { Class, setDefaultOptions, defined, deepExtend, limitValue } from '../common';\nimport { BLACK } from '../common/constants';\n\nclass Pointer extends Class {\n constructor(scale, userOptions) {\n super();\n\n const { min, max } = scale.options;\n const options = this.options = deepExtend({}, this.options, userOptions);\n\n options.fill = options.color;\n\n this.scale = scale;\n\n if (defined(options.value)) {\n options.value = limitValue(options.value, min, max);\n } else {\n options.value = min;\n }\n }\n\n value(newValue) {\n const options = this.options;\n const value = options.value;\n\n if (arguments.length === 0) {\n return value;\n }\n\n const { min, max } = this.scale.options;\n\n options._oldValue = defined(options._oldValue) ? options.value : min;\n options.value = limitValue(newValue, min, max);\n\n if (this.elements) {\n this.repaint();\n }\n }\n}\n\nsetDefaultOptions(Pointer, {\n color: BLACK\n});\n\nexport default Pointer;","import { setDefaultOptions, deepExtend, defined, getSpacing } from '../../common';\nimport { Box } from '../../core';\nimport { BLACK } from '../../common/constants';\nimport { BAR_POINTER } from '../constants';\nimport Pointer from '../pointer';\n\nclass LinearPointer extends Pointer {\n constructor(scale, options) {\n super(scale, options);\n\n this.options = deepExtend({\n track: {\n visible: defined(options.track)\n }\n }, this.options);\n }\n\n reflow() {\n const { options, scale } = this;\n const { mirror, vertical } = scale.options;\n const scaleLine = scale.lineBox();\n const trackSize = options.track.size || options.size;\n const pointerHalfSize = options.size / 2;\n const margin = getSpacing(options.margin);\n let space = vertical ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n let pointerBox, pointerRangeBox, trackBox;\n\n space = mirror ? -space : space;\n\n if (vertical) {\n trackBox = new Box(\n scaleLine.x1 + space, scaleLine.y1,\n scaleLine.x1 + space, scaleLine.y2);\n\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize,\n scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize\n );\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box(\n scaleLine.x1, scaleLine.y1 - space,\n scaleLine.x2, scaleLine.y1 - space);\n\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space,\n scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space\n );\n pointerBox = pointerRangeBox;\n }\n }\n\n this.trackBox = trackBox;\n this.pointerRangeBox = pointerRangeBox;\n this.box = pointerBox || trackBox.clone().pad(options.border.width);\n }\n\n getElementOptions() {\n const options = this.options;\n\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: defined(options.border) ? {\n color: options.border.width ? options.border.color || options.color : \"\",\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: options.opacity\n } : null\n };\n }\n\n _margin() {\n const { scale, options } = this;\n const { mirror, vertical } = scale.options;\n const margin = getSpacing(options.margin);\n\n const space = vertical ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n\n return space;\n }\n}\n\nsetDefaultOptions(LinearPointer, {\n shape: BAR_POINTER,\n\n track: {\n border: {\n width: 1\n }\n },\n\n color: BLACK,\n border: {\n width: 1\n },\n opacity: 1,\n\n margin: getSpacing(3),\n animation: {\n type: BAR_POINTER\n },\n visible: true\n});\n\nexport default LinearPointer;","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { ARROW_POINTER, LINEAR_SPEED, LINEAR } from '../constants';\n\nclass ArrowLinearPointerAnimation extends drawing.Animation {\n\n setup() {\n const options = this.options;\n const { margin, from, to, vertical } = options;\n const axis = vertical ? \"x1\" : \"y1\";\n\n if (options.mirror === vertical) {\n from[axis] -= margin; to[axis] -= margin;\n } else {\n from[axis] += margin; to[axis] += margin;\n }\n\n const fromScale = this.fromScale = new geometry.Point(from.x1, from.y1);\n const toScale = this.toScale = new geometry.Point(to.x1, to.y1);\n\n if (options.duration !== 0) {\n options.duration = Math.max((fromScale.distanceTo(toScale) / options.duration) * 1000, 1);\n }\n }\n\n step(pos) {\n const translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n const translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n\n this.element.transform(geometry.transform().translate(translateX, translateY));\n }\n}\n\nsetDefaultOptions(ArrowLinearPointerAnimation, {\n easing: LINEAR,\n duration: LINEAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n\nexport default ArrowLinearPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { deepExtend, defined } from '../../common';\nimport { ARROW_POINTER } from '../constants';\nimport LinearPointer from './linear-pointer';\nimport ArrowLinearPointerAnimation from './arrow-linear-pointer-animation';\n\nconst Point = geo.Point;\nconst Path = drawing.Path;\n\nclass ArrowLinearPointer extends LinearPointer {\n constructor(scale, options) {\n super(scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n }\n\n pointerShape() {\n const { scale, options: { size } } = this;\n const halfSize = size / 2;\n const sign = (scale.options.mirror ? -1 : 1);\n let shape;\n\n if (scale.options.vertical) {\n shape = [\n new Point(0, 0 - halfSize), new Point(0 - sign * size, 0), new Point(0, 0 + halfSize)\n ];\n } else {\n shape = [\n new Point(0 - halfSize, 0), new Point(0, 0 + sign * size), new Point(0 + halfSize, 0)\n ];\n }\n\n return shape;\n }\n\n repaint() {\n const { scale, options } = this;\n const animation = new ArrowLinearPointerAnimation(this.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: this._margin(options.margin),\n from: scale.getSlot(options._oldValue),\n to: scale.getSlot(options.value)\n }));\n\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n }\n\n render() {\n const { scale, options } = this;\n const elementOptions = this.getElementOptions();\n const shape = this.pointerShape(options.value);\n\n options.animation.type = ARROW_POINTER;\n\n const elements = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n\n const slot = scale.getSlot(options.value);\n elements.transform(geo.transform().translate(slot.x1, slot.y1));\n\n this.elements = elements;\n\n return elements;\n }\n}\n\nexport default ArrowLinearPointer;","import { drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { X, Y } from '../../common/constants';\nimport { BAR_POINTER, LINEAR_SPEED, LINEAR } from '../constants';\n\nclass BarLinearPointerAnimation extends drawing.Animation {\n\n setup() {\n const options = this.options;\n const axis = this.axis = options.vertical ? Y : X;\n const to = this.to = options.newPoints[0][axis];\n const from = this.from = options.oldPoints[0][axis];\n\n if (options.duration !== 0) {\n options.duration = Math.max((Math.abs(to - from) / options.speed) * 1000, 1);\n }\n\n this._set(from);\n }\n\n step(pos) {\n const value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n }\n\n _set(value) {\n const setter = \"set\" + this.axis.toUpperCase();\n const points = this.options.newPoints;\n\n points[0][setter](value);\n points[1][setter](value);\n }\n}\n\nsetDefaultOptions(BarLinearPointerAnimation, {\n easing: LINEAR,\n speed: LINEAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n\nexport default BarLinearPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { deepExtend, defined } from '../../common';\nimport { X, Y } from '../../common/constants';\nimport LinearPointer from './linear-pointer';\nimport BarLinearPointerAnimation from './bar-linear-pointer-animation';\n\nconst { Group, Path } = drawing;\n\nclass BarLinearPointer extends LinearPointer {\n constructor(scale, options) {\n super(scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n }\n\n pointerShape(value) {\n const { scale, options } = this;\n const { mirror, vertical } = scale.options;\n const dir = mirror === vertical ? -1 : 1;\n const size = options.size * dir;\n const minSlot = scale.getSlot(scale.options.min);\n const slot = scale.getSlot(value);\n const axis = vertical ? Y : X;\n const sizeAxis = vertical ? X : Y;\n const margin = this._margin() * dir;\n\n const p1 = new geo.Point();\n p1[axis] = minSlot[axis + \"1\"];\n p1[sizeAxis] = minSlot[sizeAxis + \"1\"];\n\n const p2 = new geo.Point();\n p2[axis] = slot[axis + \"1\"];\n p2[sizeAxis] = slot[sizeAxis + \"1\"];\n\n if (vertical) {\n p1.translate(margin, 0);\n p2.translate(margin, 0);\n } else {\n p1.translate(0, margin);\n p2.translate(0, margin);\n }\n\n const p3 = p2.clone();\n const p4 = p1.clone();\n\n if (vertical) {\n p3.translate(size, 0);\n p4.translate(size, 0);\n } else {\n p3.translate(0, size);\n p4.translate(0, size);\n }\n\n return [ p1, p2, p3, p4 ];\n }\n\n repaint() {\n const { scale, options } = this;\n const shape = this.pointerShape(options.value);\n const pointerPath = this.pointerPath;\n const oldShape = this.pointerShape(options._oldValue);\n\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n\n const animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [ oldShape[1], oldShape[2] ],\n newPoints: [ shape[1], shape[2] ]\n }));\n\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n }\n\n render() {\n const group = new Group();\n const elementOptions = this.getElementOptions();\n\n if (this.options.track.visible) {\n group.append(this.renderTrack());\n }\n\n const pointer = this.pointerPath = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n\n group.append(pointer);\n\n this.elements = group;\n\n return group;\n }\n\n renderTrack() {\n const trackOptions = this.options.track;\n const border = trackOptions.border || {};\n const trackBox = this.trackBox.clone().pad(border.width || 0);\n\n return new Path.fromRect(trackBox.toRect(), {\n fill: {\n color: trackOptions.color,\n opacity: trackOptions.opacity\n },\n stroke: {\n color: border.width ? border.color || trackOptions.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n }\n}\n\nexport default BarLinearPointer;","import { drawing } from '@progress/kendo-drawing';\nimport { Box } from '../../core';\nimport { setDefaultOptions, deepExtend, isArray } from '../../common';\nimport { ARROW, DEFAULT_WIDTH, DEFAULT_HEIGHT } from '../constants';\nimport Gauge from '../gauge';\nimport LinearScale from './linear-scale';\nimport ArrowLinearPointer from './arrow-linear-pointer';\nimport BarLinearPointer from './bar-linear-pointer';\n\nconst DEFAULT_MIN_WIDTH = 60;\nconst DEFAULT_MIN_HEIGHT = 60;\n\nconst Group = drawing.Group;\n\nclass LinearGauge extends Gauge {\n\n reflow(bbox) {\n const pointers = this.pointers;\n const bboxX = bbox.origin.x;\n const bboxY = bbox.origin.y;\n\n const box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n\n this.scale.reflow(box);\n this._shrinkScaleWidth(box);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n\n this.bbox = this._getBox(box);\n this._alignElements();\n this._shrinkElements();\n this._buildVisual();\n this._draw();\n }\n\n _buildVisual() {\n const visuals = new Group();\n const scaleElements = this.scale.render();\n const pointers = this.pointers;\n\n visuals.append(this.gaugeArea);\n visuals.append(scaleElements);\n\n for (let i = 0; i < pointers.length; i++) {\n const current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n\n this._visuals = visuals;\n }\n\n _createModel() {\n const options = this.options;\n const scale = this.scale = new LinearScale(options.scale, this.contextService);\n\n this.pointers = [];\n\n let pointers = options.pointer;\n pointers = isArray(pointers) ? pointers : [ pointers ];\n\n for (let i = 0; i < pointers.length; i++) {\n const currentOptions = deepExtend({}, pointers[i], {\n animation: {\n transitions: options.transitions\n }\n });\n const pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n\n this.pointers.push(new pointerType(scale, currentOptions));\n }\n }\n\n _defaultSize() {\n const vertical = this.options.scale.vertical;\n\n return {\n width: vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH,\n height: vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT\n };\n }\n\n _getBox(box) {\n const { scale, pointers } = this;\n const boxCenter = box.center();\n let plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n\n for (let i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n\n let size;\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box(\n boxCenter.x - size, box.y1,\n boxCenter.x + size, box.y2\n );\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box(\n box.x1, boxCenter.y - size,\n box.x2, boxCenter.y + size\n );\n }\n\n return plotAreaBox;\n }\n\n _alignElements() {\n const { scale, pointers } = this;\n const scaleBox = scale.box;\n const box = pointers[0].box.clone().wrap(scale.box);\n const plotAreaBox = this.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n\n let diff;\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box(\n scaleBox.x1 + diff, plotAreaBox.y1,\n scaleBox.x2 + diff, plotAreaBox.y2\n ));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box(\n scaleBox.x1, scaleBox.y1 + diff,\n scaleBox.x2, scaleBox.y2 + diff\n ));\n }\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.bbox);\n }\n }\n\n _shrinkScaleWidth(bbox) {\n const { scale } = this;\n if (!scale.options.vertical) {\n const overflow = scale.contentBox().width() - bbox.width();\n if (overflow > 0) {\n scale.box.shrink(overflow, 0);\n scale.box.alignTo(bbox, 'center');\n scale.reflow(scale.box);\n }\n }\n }\n\n _shrinkElements() {\n const { scale, pointers } = this;\n const scaleBox = scale.box.clone();\n const pos = scale.options.vertical ? \"y\" : \"x\";\n const pointerBox = pointers[0].box;\n\n for (let i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\n\n scaleBox[pos + 1] += Math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n scaleBox[pos + 2] -= Math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n\n scale.reflow(scaleBox);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.bbox);\n }\n }\n}\n\nsetDefaultOptions(LinearGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n },\n scale: {\n vertical: true\n }\n});\n\nexport default LinearGauge;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, defined, round, getSpacing } from '../../common';\nimport { BLACK, COORD_PRECISION } from '../../common/constants';\nimport { autoMajorUnit, Box, NumericAxis } from '../../core';\nimport { buildLabelElement, getRange } from '../utils';\n\nimport { DEGREE, DEFAULT_LINE_WIDTH, INSIDE, OUTSIDE } from '../constants';\n\nconst GEO_ARC_ADJUST_ANGLE = 180;\n\nconst { Arc, Path, Group } = drawing;\n\nfunction drawTicks(arc, tickAngles, unit, tickOptions) {\n const ticks = new Group();\n const center = arc.center;\n const radius = arc.getRadiusX();\n\n if (tickOptions.visible) {\n for (let i = 0; i < tickAngles.length; i++) {\n const tickStart = arc.pointAt(tickAngles[i]);\n const tickEnd = new geo.Point(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n\n ticks.append(new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n\n return ticks;\n}\n\nfunction rangeSegment(from, to, color, opacity) {\n return { from: from, to: to, color: color, opacity: opacity };\n}\n\nclass RadialScale extends NumericAxis {\n constructor(options, service) {\n super(0, 1, options, service);\n }\n\n initUserOptions(options) {\n const scaleOptions = deepExtend({}, this.options, options);\n scaleOptions.majorUnit = scaleOptions.majorUnit || autoMajorUnit(scaleOptions.min, scaleOptions.max);\n scaleOptions.minorUnit = scaleOptions.minorUnit || scaleOptions.majorUnit / 10;\n\n return scaleOptions;\n }\n\n initFields() {\n }\n\n render(center, radius) {\n const arc = this.renderArc(center, radius);\n\n this.bbox = arc.bbox();\n this.labelElements = this.renderLabels();\n this.ticks = this.renderTicks();\n this.ranges = this.renderRanges();\n }\n\n reflow(bbox) {\n const center = bbox.center();\n const radius = Math.min(bbox.height(), bbox.width()) / 2;\n\n if (defined(this.bbox)) {\n this.bbox = this.arc.bbox();\n this.radius(this.arc.getRadiusX());\n this.repositionRanges();\n this.renderLabels();\n } else {\n return this.render(center, radius);\n }\n }\n\n slotAngle(value) {\n const { min, max, reverse, startAngle, endAngle } = this.options;\n const angle = endAngle - startAngle;\n let result;\n\n if (reverse) {\n result = endAngle - (value - min) / (max - min) * angle;\n } else {\n result = ((value - min) / (max - min) * angle) + startAngle;\n }\n\n return result + GEO_ARC_ADJUST_ANGLE;\n }\n\n hasRanges() {\n const ranges = this.options.ranges;\n\n return ranges && ranges.length;\n }\n\n ticksSize() {\n const { majorTicks, minorTicks } = this.options;\n let size = 0;\n if (majorTicks.visible) {\n size = majorTicks.size;\n }\n\n if (minorTicks.visible) {\n size = Math.max(minorTicks.size, size);\n }\n\n return size;\n }\n\n labelsCount() {\n let count = super.labelsCount();\n const options = this.options;\n const angle = options.endAngle - options.startAngle;\n\n if (angle >= 360 && (options.max % options.majorUnit === 0)) {\n count -= 1;\n }\n\n return count;\n }\n\n renderLabels() {\n const options = this.options;\n const arc = this.arc.clone();\n let radius = arc.getRadiusX();\n const tickAngles = this.tickAngles(arc, options.majorUnit);\n const rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n const labelsGroup = new Group();\n\n let rangeDistance = radius * 0.05;\n if (defined(options.rangeDistance)) {\n rangeDistance = options.rangeDistance;\n } else {\n options.rangeDistance = rangeDistance;\n }\n\n const labelsOptions = options.labels;\n const isInside = labelsOptions.position === INSIDE;\n const hasLabelElements = defined(this.labelElements);\n\n if (isInside) {\n radius -= this.ticksSize();\n\n if (this.hasRanges() && !hasLabelElements) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n\n const labels = this.labels;\n const count = labels.length;\n const padding = getSpacing(labelsOptions.padding);\n const paddingWidth = (padding.left + padding.right) / 2;\n const paddingHeight = (padding.top + padding.bottom) / 2;\n\n for (let i = 0; i < count; i++) {\n const label = labels[i];\n const halfWidth = label.box.width() / 2;\n const halfHeight = label.box.height() / 2;\n const angle = tickAngles[i];\n const labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n\n const lp = arc.pointAt(angle);\n const cx = lp.x + (Math.cos(labelAngle) * (halfWidth + paddingWidth) * (isInside ? 1 : -1));\n const cy = lp.y + (Math.sin(labelAngle) * (halfHeight + paddingHeight) * (isInside ? 1 : -1));\n\n label.reflow(new Box(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n const labelPos = new geo.Point(label.box.x1, label.box.y1);\n\n let labelElement;\n if (!hasLabelElements) {\n labelElement = buildLabelElement(label, options.labels);\n labelsGroup.append(labelElement);\n } else {\n labelElement = this.labelElements.children[i];\n const prevLabelPos = labelElement.bbox().origin;\n\n const labelTransform = labelElement.transform() || geo.transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n labelElement.transform(labelTransform);\n }\n\n this.bbox = geo.Rect.union(this.bbox, labelElement.bbox());\n }\n\n return labelsGroup;\n }\n\n repositionRanges() {\n const ranges = this.ranges.children;\n\n if (ranges.length > 0) {\n const { rangeDistance, rangeSize } = this.options;\n let rangeRadius = this.getRangeRadius();\n\n if (this.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n\n const newRadius = rangeRadius + (rangeSize / 2);\n\n for (let i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n\n this.bbox = geo.Rect.union(this.bbox, this.ranges.bbox());\n }\n }\n\n renderRanges() {\n const segments = this.rangeSegments();\n const segmentsCount = segments.length;\n const result = new Group();\n\n if (segmentsCount) {\n const { rangeSize, reverse, rangeDistance } = this.options;\n const rangeRadius = this.getRangeRadius();\n\n // move the ticks with a range distance and a range size\n this.radius(this.radius() - rangeSize - rangeDistance);\n\n for (let i = 0; i < segmentsCount; i++) {\n const segment = segments[i];\n const from = this.slotAngle(segment[reverse ? \"to\" : \"from\"]);\n const to = this.slotAngle(segment[!reverse ? \"to\" : \"from\"]);\n\n if (to - from !== 0) {\n result.append(this.createRange(from, to, rangeRadius, segment));\n }\n }\n }\n\n return result;\n }\n\n createRange(startAngle, endAngle, rangeRadius, options) {\n const rangeSize = this.options.rangeSize;\n const rangeGeom = new geo.Arc(this.arc.center, {\n radiusX: rangeRadius + (rangeSize / 2),\n radiusY: rangeRadius + (rangeSize / 2),\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n return new Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: options.color,\n opacity: options.opacity,\n lineCap: options.lineCap\n }\n });\n }\n\n rangeSegments() {\n const options = this.options;\n const ranges = options.ranges || [];\n const count = ranges.length;\n const segments = [];\n\n if (count) {\n const { min, max, rangePlaceholderColor: defaultColor } = options;\n segments.push(rangeSegment(min, max, defaultColor));\n\n for (let i = 0; i < count; i++) {\n const range = getRange(ranges[i], min, max);\n const segmentsCount = segments.length;\n\n for (let j = 0; j < segmentsCount; j++) {\n const segment = segments[j];\n\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n\n segment.to = range.from;\n\n break;\n }\n }\n }\n }\n\n return segments;\n }\n\n getRangeRadius() {\n const { arc, options } = this;\n const { rangeSize, rangeDistance, majorTicks: { size: majorTickSize } } = options;\n let radius;\n\n if (options.labels.position === OUTSIDE) {\n radius = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n radius = arc.getRadiusX() - rangeSize;\n }\n\n return radius;\n }\n\n renderArc(center, radius) {\n const options = this.options;\n\n const arc = this.arc = new geo.Arc(center, {\n radiusX: radius,\n radiusY: radius,\n startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n });\n\n return arc;\n }\n\n renderTicks() {\n const { arc, options } = this;\n const tickArc = arc.clone();\n\n this.majorTickAngles = this.tickAngles(arc, options.majorUnit);\n this.majorTicks = drawTicks(tickArc, this.majorTickAngles, options.majorUnit, options.majorTicks);\n\n const allTicks = new Group();\n allTicks.append(this.majorTicks);\n\n const majorTickSize = options.majorTicks.size;\n const minorTickSize = options.minorTicks.size;\n\n this._tickDifference = majorTickSize - minorTickSize;\n\n if (options.labels.position === OUTSIDE) {\n const radius = tickArc.getRadiusX();\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize)\n .setRadiusY(radius - majorTickSize + minorTickSize);\n }\n\n this.minorTickAngles = this.normalizeTickAngles(this.tickAngles(arc, options.minorUnit));\n this.minorTicks = drawTicks(tickArc, this.minorTickAngles, options.minorUnit, options.minorTicks);\n allTicks.append(this.minorTicks);\n\n return allTicks;\n }\n\n normalizeTickAngles(angles) {\n const options = this.options;\n const skip = options.majorUnit / options.minorUnit;\n\n for (let i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n\n return angles;\n }\n\n tickAngles(ring, stepValue) {\n const options = this.options;\n const reverse = options.reverse;\n const range = options.max - options.min;\n const angle = ring.endAngle - ring.startAngle;\n let tickCount = range / stepValue;\n let pos = ring.startAngle;\n let step = angle / tickCount;\n\n if (reverse) {\n pos += angle;\n step = -step;\n }\n\n if (angle >= 360 && (options.max % stepValue === 0)) {\n tickCount -= 1;\n }\n\n const positions = [];\n for (let i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n\n return positions;\n }\n\n radius(value) {\n if (value) {\n this.arc.setRadiusX(value).setRadiusY(value);\n this.repositionTicks(this.majorTicks.children, this.majorTickAngles);\n this.repositionTicks(this.minorTicks.children, this.minorTickAngles, true);\n } else {\n return this.arc.getRadiusX();\n }\n }\n\n repositionTicks(ticks, tickAngles, minor) {\n const diff = minor ? (this._tickDifference || 0) : 0;\n let tickArc = this.arc;\n const radius = tickArc.getRadiusX();\n\n if (minor && this.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = this.arc.clone();\n tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n }\n\n for (let i = 0; i < ticks.length; i++) {\n const newPoint = tickArc.pointAt(tickAngles[i]);\n const segments = ticks[i].segments;\n const xDiff = newPoint.x - segments[0].anchor().x;\n const yDiff = newPoint.y - segments[0].anchor().y;\n\n ticks[i].transform(new geo.transform().translate(xDiff, yDiff));\n }\n }\n}\n\nsetDefaultOptions(RadialScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n startAngle: -30,\n endAngle: 210,\n\n labels: {\n position: INSIDE,\n padding: 2\n }\n});\n\nexport default RadialScale;\n","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { ANGULAR_SPEED, LINEAR, RADIAL_POINTER } from '../constants';\n\nclass RadialPointerAnimation extends drawing.Animation {\n constructor(element, options) {\n super(element, options);\n\n const animationOptions = this.options;\n\n animationOptions.duration = Math.max((Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000, 1);\n }\n\n step(pos) {\n const options = this.options;\n const angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n\n this.element.transform(geometry.transform().rotate(angle, options.center));\n }\n}\n\nsetDefaultOptions(RadialPointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n\nexport default RadialPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\n\nimport { setDefaultOptions, deepExtend, limitValue } from '../../common';\nimport { ANGULAR_SPEED, DEGREE, DEFAULT_LINE_WIDTH, RADIAL_POINTER } from '../constants';\nimport Pointer from '../pointer';\nimport RadialPointerAnimation from './radial-pointer-animation';\n\nconst CAP_SIZE = 0.05;\nconst { Circle, Group, Path } = drawing;\n\nclass RadialPointer extends Pointer {\n\n setAngle(angle) {\n this.elements.transform(geo.transform().rotate(angle, this.center));\n }\n\n repaint() {\n const { scale, options } = this;\n const oldAngle = scale.slotAngle(options._oldValue);\n const newAngle = scale.slotAngle(options.value);\n\n if (options.animation.transitions === false) {\n this.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(this.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n }\n\n render() {\n const { scale, options } = this;\n const elements = new Group();\n\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n\n elements.append(this._renderNeedle(), this._renderCap());\n\n this.elements = elements;\n this.setAngle(DEGREE);\n\n return elements;\n }\n\n reflow(arc) {\n const center = this.center = arc.center;\n const length = limitValue(this.options.length || 1, 0.1, 1.5);\n const radius = this.radius = arc.getRadiusX() * length;\n const capSize = this.capSize = Math.round(radius * this.options.cap.size);\n\n this.bbox = geo.Rect.fromPoints(new geo.Point(center.x - capSize, center.y - capSize),\n new geo.Point(center.x + capSize, center.y + capSize));\n }\n\n _renderNeedle() {\n const minorTickSize = this.scale.options.minorTicks.size;\n const center = this.center;\n const needleColor = this.options.color;\n\n const needlePath = new Path({\n fill: { color: needleColor },\n stroke: { color: needleColor, width: DEFAULT_LINE_WIDTH }\n });\n\n needlePath.moveTo(center.x + this.radius - minorTickSize, center.y)\n .lineTo(center.x, center.y - (this.capSize / 2))\n .lineTo(center.x, center.y + (this.capSize / 2))\n .close();\n\n return needlePath;\n }\n\n _renderCap() {\n const options = this.options;\n const capColor = options.cap.color || options.color;\n const circle = new geo.Circle(this.center, this.capSize);\n\n const cap = new Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n\n return cap;\n }\n}\n\nsetDefaultOptions(RadialPointer, {\n cap: {\n size: CAP_SIZE\n },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n});\n\nexport default RadialPointer;\n","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, round, isArray } from '../../common';\nimport { COORD_PRECISION } from '../../common/constants';\nimport Gauge from '../gauge';\nimport RadialScale from './radial-scale';\nimport RadialPointer from './radial-pointer';\n\nconst Group = drawing.Group;\n\nclass RadialGauge extends Gauge {\n\n reflow(bbox) {\n const pointers = this.pointers;\n this.scale.reflow(bbox);\n this._initialPlotArea = this.scale.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.scale.arc);\n this._initialPlotArea = geo.Rect.union(this._initialPlotArea, pointers[i].bbox);\n }\n\n this.fitScale(bbox);\n this.alignScale(bbox);\n this._buildVisual(this.gaugeArea, pointers, this.scale);\n this._draw();\n }\n\n _buildVisual(gaugeArea, pointers, scale) {\n const visuals = this._visuals = new Group();\n\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n this._buildPointers(pointers);\n visuals.append(scale.labelElements);\n }\n\n _buildPointers(pointers) {\n for (let i = 0; i < pointers.length; i++) {\n const current = pointers[i];\n current.render();\n this._visuals.append(current.elements);\n\n current.value(current.options.value);\n }\n }\n\n fitScale(bbox) {\n const arc = this.scale.arc;\n const plotAreaBox = this._initialPlotArea;\n const step = Math.abs(this.getDiff(plotAreaBox, bbox));\n let min = round(step, COORD_PRECISION);\n let max = round(-step, COORD_PRECISION);\n let minDiff, midDiff, maxDiff, mid, oldDiff;\n let staleFlag = 0;\n let i = 0;\n\n while (i++ < 100) {\n staleFlag = (oldDiff === maxDiff) ? (staleFlag + 1) : 0;\n\n if (staleFlag > 5) {\n break;\n }\n\n if (min !== mid) {\n minDiff = this.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n\n if (max !== mid) {\n maxDiff = this.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\n }\n\n if (minDiff > 0 && maxDiff > 0) {\n mid = min * 2;\n } else if (minDiff < 0 && maxDiff < 0) {\n mid = max * 2;\n } else {\n mid = round(((min + max) / 2) || 1, COORD_PRECISION);\n }\n\n midDiff = this.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n\n oldDiff = maxDiff;\n\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n }\n\n getPlotBox(step, bbox, arc) {\n const scale = this.scale;\n const pointers = this.pointers;\n const radius = arc.getRadiusX();\n const scaleArc = arc.clone();\n\n scaleArc.setRadiusX(radius + step).setRadiusY(radius + step);\n\n scale.arc = scaleArc;\n scale.reflow(bbox);\n this.plotBbox = scale.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scaleArc);\n this.plotBbox = geo.Rect.union(this.plotBbox, pointers[i].bbox);\n }\n\n return this.getDiff(this.plotBbox, bbox);\n }\n\n getDiff(plotBox, box) {\n return Math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n }\n\n alignScale(bbox) {\n const plotBoxCenter = this.plotBbox.center();\n const boxCenter = bbox.center();\n const paddingX = plotBoxCenter.x - boxCenter.x;\n const paddingY = plotBoxCenter.y - boxCenter.y;\n const { scale, pointers } = this;\n\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n\n scale.reflow(bbox);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n this.plotBbox = geo.Rect.union(scale.bbox, pointers[i].bbox);\n }\n }\n\n _createModel() {\n const options = this.options;\n const pointers = options.pointer;\n const scale = this.scale = new RadialScale(options.scale, this.contextService);\n\n this.pointers = [];\n\n const pointersArr = isArray(pointers) ? pointers : [ pointers ];\n for (let i = 0; i < pointersArr.length; i++) {\n const current = new RadialPointer(scale, deepExtend({}, pointersArr[i], {\n animation: {\n transitions: options.transitions\n }\n }));\n\n this.pointers.push(current);\n }\n }\n}\n\nsetDefaultOptions(RadialGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n }\n});\n\nexport default RadialGauge;","import RadialScale from '../radial/radial-scale';\nimport { setDefaultOptions } from '../../common';\n\nclass ArcScale extends RadialScale {\n\n rangeSegments() {\n const { min, max, rangePlaceholderColor, rangeLineCap } = this.options;\n\n return [ { from: min, to: max, color: rangePlaceholderColor, lineCap: rangeLineCap } ];\n }\n\n hasRanges() {\n return true;\n }\n\n placeholderRangeAngle(angle) {\n const geometry = this.ranges.children[0].geometry();\n\n if (this.options.reverse) {\n geometry.setEndAngle(angle);\n } else {\n geometry.setStartAngle(angle);\n }\n }\n\n addRange(from, to, options) {\n const reverse = this.options.reverse;\n\n const startAngle = this.slotAngle(reverse ? to : from);\n const endAngle = this.slotAngle(reverse ? from : to);\n\n const range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n\n this.ranges.append(range);\n\n return range;\n }\n}\n\nsetDefaultOptions(ArcScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n visible: false\n },\n\n minorTicks: {\n visible: false\n },\n\n labels: {\n visible: false\n },\n\n startAngle: 0,\n endAngle: 180,\n rangeLineCap: 'round'\n});\n\nexport default ArcScale;","import { drawing, Color } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions, round, limitValue } from '../../common';\nimport { ANGULAR_SPEED, LINEAR, RADIAL_RANGE_POINTER } from '../constants';\n\nconst MAX_DURATION = 800;\n\nclass RangePointerAnimation extends drawing.Animation {\n constructor(element, options) {\n super(element, options);\n\n const animationOptions = this.options;\n const duration = (Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000;\n animationOptions.duration = limitValue(duration, ANGULAR_SPEED, MAX_DURATION);\n\n const startColor = element.elements.options.get(\"stroke.color\");\n const color = element.currentColor();\n if (startColor !== color) {\n this.startColor = new Color(startColor);\n this.color = new Color(color);\n }\n }\n\n step(pos) {\n const { options, startColor, color } = this;\n const angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.angle(angle);\n\n if (color) {\n const r = round(interpolateValue(startColor.r, color.r, pos));\n const g = round(interpolateValue(startColor.g, color.g, pos));\n const b = round(interpolateValue(startColor.b, color.b, pos));\n\n this.element.stroke(new Color(r, g, b).toHex());\n }\n }\n}\n\nsetDefaultOptions(RangePointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(RADIAL_RANGE_POINTER, RangePointerAnimation);\n\nexport default RangePointerAnimation;","import { setDefaultOptions, deepExtend, isNumber } from '../../common';\nimport { ANGULAR_SPEED, RADIAL_RANGE_POINTER } from '../constants';\nimport Pointer from '../pointer';\nimport RangePointerAnimation from './range-pointer-animation';\n\nclass RangePointer extends Pointer {\n\n repaint() {\n const { scale, options } = this;\n const oldAngle = scale.slotAngle(options._oldValue);\n const newAngle = scale.slotAngle(options.value);\n\n if (this.animation) {\n this.animation.abort();\n }\n\n if (options.animation.transitions === false) {\n this.angle(newAngle);\n this.stroke(this.currentColor());\n } else {\n this.animation = new RangePointerAnimation(this, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n }));\n\n this.animation.play();\n }\n }\n\n angle(value) {\n const geometry = this.elements.geometry();\n if (this.scale.options.reverse) {\n geometry.setStartAngle(value);\n } else {\n geometry.setEndAngle(value);\n }\n this.scale.placeholderRangeAngle(value);\n }\n\n stroke(value) {\n this.elements.stroke(value);\n }\n\n render() {\n if (this.elements) {\n return;\n }\n\n const { scale, options } = this;\n\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n\n this.elements = scale.addRange(scale.options.min, this.options.value, {\n color: this.currentColor(),\n opacity: options.opacity,\n lineCap: scale.options.rangeLineCap\n });\n }\n\n currentColor() {\n const { min, max } = this.scale.options;\n const { colors, color, value } = this.options;\n const currentValue = isNumber(value) ? value : min;\n\n if (colors) {\n for (let idx = 0; idx < colors.length; idx++) {\n const { color: rangeColor, from = min, to = max } = colors[idx];\n\n if (from <= currentValue && currentValue <= to) {\n return rangeColor;\n }\n }\n }\n\n return color;\n }\n\n reflow() {\n this.render();\n\n this.bbox = this.elements.bbox();\n }\n}\n\nsetDefaultOptions(RangePointer, {\n animation: {\n type: RADIAL_RANGE_POINTER,\n duration: ANGULAR_SPEED\n }\n});\n\nexport default RangePointer;\n","import {\n Class,\n defined,\n setDefaultOptions\n} from '../../common';\n\nconst DEFAULT_QUIET_ZONE_LENGTH = 10;\n\nexport class Encoding extends Class {\n constructor(options) {\n super();\n this.setOptions(options);\n this.initProperties();\n }\n\n initProperties() { }\n\n setOptions(options) {\n this.options = Object.assign({}, this.options, options);\n this.quietZoneLength = this.options.addQuietZone ? 2 * this.options.quietZoneLength : 0;\n }\n\n encode(value, width, height) {\n const convertedValue = defined(value) ? String(value) : value;\n\n this.initValue(convertedValue, width, height);\n\n if (this.options.addQuietZone) {\n this.addQuietZone();\n }\n\n this.addData();\n\n if (this.options.addQuietZone) {\n this.addQuietZone();\n }\n\n return {\n baseUnit: this.baseUnit,\n pattern: this.pattern\n };\n }\n\n initValue() { }\n\n addQuietZone() {\n this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIET_ZONE_LENGTH);\n }\n\n addData() { }\n\n invalidCharacterError(character) {\n throw new Error(`Character \"${character}\" is not valid for symbology ${this.name}.`);\n }\n}\n\nsetDefaultOptions(Encoding, {\n quietZoneLength: DEFAULT_QUIET_ZONE_LENGTH,\n addQuietZone: true,\n addCheckSum: true\n});\n","import { Encoding } from './encoding';\nimport { setDefaultOptions } from '../../common';\n\nconst extend = Object.assign;\n\nexport class Code11 extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 11\",\n characterMap: [\"111121\", \"211121\", \"121121\", \"221111\", \"112121\", \"212111\", \"122111\", \"111221\", \"211211\", \"211111\", \"112111\"],\n cCheckSumTotal: 10,\n kCheckSumTotal: 9,\n kCheckSumMinLength: 10,\n checkSumMod: 11,\n DASH_VALUE: 10,\n DASH: \"-\",\n START: \"112211\",\n STOP: \"11221\"\n });\n }\n\n initValue(value, width) {\n this.pattern = [];\n this.value = value;\n this.width = width;\n this.totalUnits = 0;\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.STOP);\n this.setBaseUnit();\n }\n\n setBaseUnit() {\n this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n }\n\n addCheckSum() {\n const value = this.value;\n let length = value.length;\n const cValue = this.getWeightedSum(value, length, this.cCheckSumTotal) % this.checkSumMod;\n\n this.checksum = String(cValue);\n this.addPattern(this.characterMap[cValue]);\n\n length++;\n\n if (length >= this.kCheckSumMinLength) {\n let kValue = (cValue + this.getWeightedSum(value, length, this.kCheckSumTotal)) % this.checkSumMod;\n this.checksum += kValue;\n this.addPattern(this.characterMap[kValue]);\n }\n }\n\n getWeightedSum(value, length, total) {\n let weightedSum = 0;\n\n for (let i = 0; i < value.length; i++) {\n weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n }\n\n return weightedSum;\n }\n\n weightedValue(value, length, index, total) {\n const weight = (length - index) % total || total;\n return weight * value;\n }\n\n getValue(character) {\n if (!isNaN(character)) {\n return parseInt(character, 10);\n } else if (character !== this.DASH) {\n this.invalidCharacterError(character);\n }\n\n return this.DASH_VALUE;\n }\n\n addCharacter(character) {\n const value = this.getValue(character);\n const pattern = this.characterMap[value];\n\n this.addPattern(pattern);\n }\n\n addPattern(pattern) {\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n }\n}\n\nsetDefaultOptions(Code11, {\n addCheckSum: true\n});\n","import { setDefaultOptions } from '../../common';\nimport { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class Code39Base extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n minBaseUnitLength: 0.7\n });\n }\n\n addData() {\n const value = this.value;\n\n this.addStart();\n\n for (let idx = 0; idx < value.length; idx++) {\n this.addCharacter(value.charAt(idx));\n }\n\n if (this.options.addCheckSum) {\n this.pushCheckSum();\n }\n\n this.addStop();\n this.prepareValues();\n }\n\n addCharacter(character) {\n const characterData = this.characterMap[character];\n\n if (!characterData) {\n this.invalidCharacterError(character);\n }\n\n this.addBase(characterData);\n }\n\n addBase() { }\n}\n\nexport class Code39 extends Code39Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 39\",\n checkSumMod: 43,\n minRatio: 2.5,\n maxRatio: 3,\n gapWidth: 1,\n splitCharacter: \"|\",\n patternMappings: {\n \"b\": \"1|\",\n \"w\": \"1|\",\n \"B\": \"ratio|\",\n \"W\": \"ratio|\"\n },\n characterMap: {\n \"0\": { \"pattern\": \"bwbWBwBwb\", \"value\": 0 },\n \"1\": { \"pattern\": \"BwbWbwbwB\", \"value\": 1 },\n \"2\": { \"pattern\": \"bwBWbwbwB\", \"value\": 2 },\n \"3\": { \"pattern\": \"BwBWbwbwb\", \"value\": 3 },\n \"4\": { \"pattern\": \"bwbWBwbwB\", \"value\": 4 },\n \"5\": { \"pattern\": \"BwbWBwbwb\", \"value\": 5 },\n \"6\": { \"pattern\": \"bwBWBwbwb\", \"value\": 6 },\n \"7\": { \"pattern\": \"bwbWbwBwB\", \"value\": 7 },\n \"8\": { \"pattern\": \"BwbWbwBwb\", \"value\": 8 },\n \"9\": { \"pattern\": \"bwBWbwBwb\", \"value\": 9 },\n \"A\": { \"pattern\": \"BwbwbWbwB\", \"value\": 10 },\n \"B\": { \"pattern\": \"bwBwbWbwB\", \"value\": 11 },\n \"C\": { \"pattern\": \"BwBwbWbwb\", \"value\": 12 },\n \"D\": { \"pattern\": \"bwbwBWbwB\", \"value\": 13 },\n \"E\": { \"pattern\": \"BwbwBWbwb\", \"value\": 14 },\n \"F\": { \"pattern\": \"bwBwBWbwb\", \"value\": 15 },\n \"G\": { \"pattern\": \"bwbwbWBwB\", \"value\": 16 },\n \"H\": { \"pattern\": \"BwbwbWBwb\", \"value\": 17 },\n \"I\": { \"pattern\": \"bwBwbWBwb\", \"value\": 18 },\n \"J\": { \"pattern\": \"bwbwBWBwb\", \"value\": 19 },\n \"K\": { \"pattern\": \"BwbwbwbWB\", \"value\": 20 },\n \"L\": { \"pattern\": \"bwBwbwbWB\", \"value\": 21 },\n \"M\": { \"pattern\": \"BwBwbwbWb\", \"value\": 22 },\n \"N\": { \"pattern\": \"bwbwBwbWB\", \"value\": 23 },\n \"O\": { \"pattern\": \"BwbwBwbWb\", \"value\": 24 },\n \"P\": { \"pattern\": \"bwBwBwbWb\", \"value\": 25 },\n \"Q\": { \"pattern\": \"bwbwbwBWB\", \"value\": 26 },\n \"R\": { \"pattern\": \"BwbwbwBWb\", \"value\": 27 },\n \"S\": { \"pattern\": \"bwBwbwBWb\", \"value\": 28 },\n \"T\": { \"pattern\": \"bwbwBwBWb\", \"value\": 29 },\n \"U\": { \"pattern\": \"BWbwbwbwB\", \"value\": 30 },\n \"V\": { \"pattern\": \"bWBwbwbwB\", \"value\": 31 },\n \"W\": { \"pattern\": \"BWBwbwbwb\", \"value\": 32 },\n \"X\": { \"pattern\": \"bWbwBwbwB\", \"value\": 33 },\n \"Y\": { \"pattern\": \"BWbwBwbwb\", \"value\": 34 },\n \"Z\": { \"pattern\": \"bWBwBwbwb\", \"value\": 35 },\n \"-\": { \"pattern\": \"bWbwbwBwB\", \"value\": 36 },\n \".\": { \"pattern\": \"BWbwbwBwb\", \"value\": 37 },\n \" \": { \"pattern\": \"bWBwbwBwb\", \"value\": 38 },\n \"$\": { \"pattern\": \"bWbWbWbwb\", \"value\": 39 },\n \"/\": { \"pattern\": \"bWbWbwbWb\", \"value\": 40 },\n \"+\": { \"pattern\": \"bWbwbWbWb\", \"value\": 41 },\n \"%\": { \"pattern\": \"bwbWbWbWb\", \"value\": 42 },\n START: { pattern: \"bWbwBwBwb\" }\n }\n });\n }\n\n initValue(value, width, height) {\n this.width = width;\n this.height = height;\n this.value = value;\n this.dataLength = value.length;\n this.pattern = [];\n this.patternString = \"\";\n }\n\n prepareValues() {\n const minBaseUnit = this.minBaseUnitLength;\n const minRatio = this.minRatio;\n const minHeight = Math.ceil(Math.max(0.15 * this.width, 24));\n let baseUnit;\n let ratio = this.maxRatio;\n\n if (this.height < minHeight) {\n throw new Error(`Insufficient height for Code39 encoding: the current height is ${this.height}px and the minimum height is ${minHeight}px.`);\n }\n\n baseUnit = this.getBaseUnit(ratio);\n\n while (baseUnit < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n baseUnit = this.getBaseUnit(ratio);\n }\n\n if (baseUnit < minBaseUnit) {\n let minWidth = Math.ceil(this.getBaseWidth(minRatio) * minBaseUnit);\n throw new Error(`Insufficient width for Code39 encoding: the current width is ${this.width}px and the minimum width for value \"${this.value}\" is ${minWidth}px.`);\n }\n\n this.ratio = ratio;\n this.baseUnit = baseUnit;\n this.patternString = this.patternString.substring(0, this.patternString.length - 1);\n this.pattern = this.pattern.concat(this.patternString.replace(/ratio/g, ratio).split(this.splitCharacter));\n }\n\n getBaseUnit(ratio) {\n return this.width / this.getBaseWidth(ratio);\n }\n\n getBaseWidth(ratio) {\n const characterLength = 3 * (ratio + 2);\n return this.quietZoneLength + characterLength * (this.dataLength + 2) + this.gapWidth * (this.dataLength + 1);\n }\n\n addStart() {\n this.addPattern(this.characterMap.START.pattern);\n this.addCharacterGap();\n }\n\n addBase(character) {\n this.addPattern(character.pattern);\n this.addCharacterGap();\n }\n\n addStop() {\n this.addPattern(this.characterMap.START.pattern);\n }\n\n addPattern(pattern) {\n for (let i = 0; i < pattern.length; i++) {\n this.patternString += this.patternMappings[pattern.charAt(i)];\n }\n }\n\n addCharacterGap() {\n this.patternString += this.gapWidth + this.splitCharacter;\n }\n}\n\nsetDefaultOptions(Code39, {\n addCheckSum: false\n});\n","import { Code39 } from './code39';\nimport deepExtend from '../../common/deep-extend';\n\nexport const Code39ExtendedBase = {\n addCharacter(character) {\n if (this.characterMap[character]) {\n this.addBase(this.characterMap[character]);\n } else if (character.charCodeAt(0) > 127) {\n this.invalidCharacterError(character);\n } else {\n this.addExtended(character.charCodeAt(0));\n }\n },\n\n addExtended(code) {\n let patterns;\n\n for (let i = 0; i < this.extendedMappings.length; i++) {\n patterns = this.extendedMappings[i].call(this, code);\n\n if (patterns) {\n for (let patternIndex = 0; patternIndex < patterns.length; patternIndex++) {\n const pattern = patterns[patternIndex];\n this.addBase(pattern);\n }\n\n this.dataLength += patterns.length - 1;\n return;\n }\n }\n },\n\n extendedMappings: [\n function(code) {\n if (97 <= code && code <= 122) {\n return [this.characterMap[this.shiftCharacters[0]], this.characterMap[String.fromCharCode(code - 32)]];\n }\n },\n function(code) {\n if (33 <= code && code <= 58) {\n return [this.characterMap[this.shiftCharacters[1]], this.characterMap[String.fromCharCode(code + 32)]];\n }\n },\n function(code) {\n if (1 <= code && code <= 26) {\n return [this.characterMap[this.shiftCharacters[2]], this.characterMap[String.fromCharCode(code + 64)]];\n }\n },\n function(code) {\n let result;\n let dataCharacter;\n\n if (!this.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [this.characterMap[this.shiftCharacters[3]], this.characterMap[String.fromCharCode(dataCharacter)]];\n } else {\n result = [];\n\n for (let i = 0; i < this.specialAsciiCodes[code].length; i++) {\n result.push(this.characterMap[this.shiftCharacters[3]]);\n result.push(this.characterMap[this.specialAsciiCodes[code][i]]);\n }\n }\n\n return result;\n }\n ],\n specialAsciiCodes: {\n \"0\": [\"U\"],\n \"64\": [\"V\"],\n \"96\": [\"W\"],\n \"127\": [\"T\", \"X\", \"Y\", \"Z\"]\n },\n shiftValuesAsciiCodes: {\n \"39\": 36,\n \"40\": 47,\n \"41\": 43,\n \"42\": 37\n },\n characterMap: {\n \"+\": false,\n \"/\": false,\n \"$\": false,\n \"%\": false\n },\n shiftCharacters: [\"SHIFT0\", \"SHIFT1\", \"SHIFT2\", \"SHIFT3\"]\n};\n\nexport class Code39Extended extends Code39 {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, Code39ExtendedBase, {\n name: \"Code 39 extended\",\n characterMap: {\n SHIFT0: { \"pattern\": \"bWbwbWbWb\", \"value\": 41 },\n SHIFT1: { \"pattern\": \"bWbWbwbWb\", \"value\": 40 },\n SHIFT2: { \"pattern\": \"bWbWbWbwb\", \"value\": 39 },\n SHIFT3: { \"pattern\": \"bwbWbWbWb\", \"value\": 42 }\n }\n });\n }\n}\n","import { Code39Base } from './code39';\n\nconst extend = Object.assign;\n\nexport class Code93 extends Code39Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 93\",\n cCheckSumTotal: 20,\n kCheckSumTotal: 15,\n checkSumMod: 47,\n characterMap: {\n \"0\": { \"pattern\": \"131112\", \"value\": 0 },\n \"1\": { \"pattern\": \"111213\", \"value\": 1 },\n \"2\": { \"pattern\": \"111312\", \"value\": 2 },\n \"3\": { \"pattern\": \"111411\", \"value\": 3 },\n \"4\": { \"pattern\": \"121113\", \"value\": 4 },\n \"5\": { \"pattern\": \"121212\", \"value\": 5 },\n \"6\": { \"pattern\": \"121311\", \"value\": 6 },\n \"7\": { \"pattern\": \"111114\", \"value\": 7 },\n \"8\": { \"pattern\": \"131211\", \"value\": 8 },\n \"9\": { \"pattern\": \"141111\", \"value\": 9 },\n \"A\": { \"pattern\": \"211113\", \"value\": 10 },\n \"B\": { \"pattern\": \"211212\", \"value\": 11 },\n \"C\": { \"pattern\": \"211311\", \"value\": 12 },\n \"D\": { \"pattern\": \"221112\", \"value\": 13 },\n \"E\": { \"pattern\": \"221211\", \"value\": 14 },\n \"F\": { \"pattern\": \"231111\", \"value\": 15 },\n \"G\": { \"pattern\": \"112113\", \"value\": 16 },\n \"H\": { \"pattern\": \"112212\", \"value\": 17 },\n \"I\": { \"pattern\": \"112311\", \"value\": 18 },\n \"J\": { \"pattern\": \"122112\", \"value\": 19 },\n \"K\": { \"pattern\": \"132111\", \"value\": 20 },\n \"L\": { \"pattern\": \"111123\", \"value\": 21 },\n \"M\": { \"pattern\": \"111222\", \"value\": 22 },\n \"N\": { \"pattern\": \"111321\", \"value\": 23 },\n \"O\": { \"pattern\": \"121122\", \"value\": 24 },\n \"P\": { \"pattern\": \"131121\", \"value\": 25 },\n \"Q\": { \"pattern\": \"212112\", \"value\": 26 },\n \"R\": { \"pattern\": \"212211\", \"value\": 27 },\n \"S\": { \"pattern\": \"211122\", \"value\": 28 },\n \"T\": { \"pattern\": \"211221\", \"value\": 29 },\n \"U\": { \"pattern\": \"221121\", \"value\": 30 },\n \"V\": { \"pattern\": \"222111\", \"value\": 31 },\n \"W\": { \"pattern\": \"112122\", \"value\": 32 },\n \"X\": { \"pattern\": \"112221\", \"value\": 33 },\n \"Y\": { \"pattern\": \"122121\", \"value\": 34 },\n \"Z\": { \"pattern\": \"123111\", \"value\": 35 },\n \"-\": { \"pattern\": \"121131\", \"value\": 36 },\n \".\": { \"pattern\": \"311112\", \"value\": 37 },\n \" \": { \"pattern\": \"311211\", \"value\": 38 },\n \"$\": { \"pattern\": \"321111\", \"value\": 39 },\n \"/\": { \"pattern\": \"112131\", \"value\": 40 },\n \"+\": { \"pattern\": \"113121\", \"value\": 41 },\n \"%\": { \"pattern\": \"211131\", \"value\": 42 },\n SHIFT0: { \"pattern\": \"122211\", \"value\": 46 },\n SHIFT1: { \"pattern\": \"311121\", \"value\": 45 },\n SHIFT2: { \"pattern\": \"121221\", \"value\": 43 },\n SHIFT3: { \"pattern\": \"312111\", \"value\": 44 },\n START: { \"pattern\": \"111141\" },\n TERMINATION_BAR: \"1\"\n }\n });\n }\n\n initValue(value, width, height) {\n this.value = value;\n this.width = width;\n this.height = height;\n this.pattern = [];\n this.values = [];\n this.dataLength = value.length;\n }\n\n prepareValues() {\n let minHeight = Math.ceil(Math.max(0.15 * this.width, 24));\n\n if (this.height < minHeight) {\n throw new Error(`Insufficient height for Code93 encoding: the current height is ${this.height}px, the minimum required height is ${minHeight}px.`);\n }\n\n this.setBaseUnit();\n\n if (this.baseUnit < this.minBaseUnitLength) {\n const minWidth = Math.ceil(this.minBaseUnitLength * (this.width / this.baseUnit));\n throw new Error(`Insufficient width for Code93 encoding: the current width is ${this.width}px and the minimum required width for value \"${this.value}\" is ${minWidth}px.`);\n }\n }\n\n setBaseUnit() {\n const checkSumLength = 2;\n\n this.baseUnit = this.width / (9 * (this.dataLength + 2 + checkSumLength) + this.quietZoneLength + 1);\n }\n\n addStart() {\n let pattern = this.characterMap.START.pattern;\n this.addPattern(pattern);\n }\n\n addStop() {\n this.addStart();\n this.pattern.push(this.characterMap.TERMINATION_BAR);\n }\n\n addBase(charData) {\n this.addPattern(charData.pattern);\n this.values.push(charData.value);\n }\n\n pushCheckSum() {\n const checkValues = this._getCheckValues();\n let charData;\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n charData = this.characterMap[this._findCharacterByValue(checkValues[i])];\n this.addPattern(charData.pattern);\n }\n }\n\n _getCheckValues() {\n const values = this.values;\n const length = values.length;\n let wightedSum = 0;\n let cValue;\n let kValue;\n let idx;\n\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += this.weightedValue(values[idx], length - idx, this.cCheckSumTotal);\n }\n\n cValue = wightedSum % this.checkSumMod;\n\n wightedSum = this.weightedValue(cValue, 1, this.kCheckSumTotal);\n\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += this.weightedValue(values[idx], length - idx + 1, this.kCheckSumTotal);\n }\n\n kValue = wightedSum % this.checkSumMod;\n return [cValue, kValue];\n }\n\n _findCharacterByValue(value) {\n for (let character in this.characterMap) {\n if (this.characterMap[character].value === value) {\n return character;\n }\n }\n }\n\n weightedValue(value, index, total) {\n return (index % total || total) * value;\n }\n\n addPattern(pattern) {\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n }\n }\n}\n","import { Encoding } from './encoding';\nimport inArray from '../../common/in-array';\n\nconst numberRegex = /^\\d+$/;\nconst extend = Object.assign;\n\nexport class Postnet extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Postnet\",\n START: \"2\",\n VALID_CODE_LENGTHS: [5, 9, 11],\n DIGIT_SEPARATOR: \"-\",\n characterMap: [\"22111\", \"11122\", \"11212\", \"11221\", \"12112\", \"12121\", \"12211\", \"21112\", \"21121\", \"21211\"]\n });\n }\n\n initValue(value, width, height) {\n this.height = height;\n this.width = width;\n this.baseHeight = height / 2;\n this.value = value.replace(new RegExp(this.DIGIT_SEPARATOR, \"g\"), \"\");\n this.pattern = [];\n this.validate(this.value);\n this.checkSum = 0;\n this.setBaseUnit();\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.START);\n this.pattern.pop();\n }\n\n addCharacter(character) {\n const pattern = this.characterMap[character];\n this.checkSum += parseInt(character, 10);\n this.addPattern(pattern);\n }\n\n addCheckSum() {\n this.checksum = (10 - (this.checkSum % 10)) % 10;\n this.addCharacter(this.checksum);\n }\n\n setBaseUnit() {\n const startStopLength = 3;\n\n this.baseUnit = this.width / ((this.value.length + 1) * 10 + startStopLength + this.quietZoneLength);\n }\n\n validate(value) {\n if (!numberRegex.test(value)) {\n this.invalidCharacterError(value.match(/[^0-9]/)[0]);\n }\n\n if (!inArray(value.length, this.VALID_CODE_LENGTHS)) {\n throw new Error(\"Invalid value length. Valid lengths for the Postnet symbology are \" + this.VALID_CODE_LENGTHS.join(\",\") + \".\");\n }\n }\n\n addPattern(pattern) {\n let y1;\n\n for (let i = 0; i < pattern.length; i++) {\n y1 = this.height - this.baseHeight * pattern.charAt(i);\n this.pattern.push({ width: 1, y1: y1, y2: this.height });\n this.pattern.push(1);\n }\n }\n}\n","import { Class } from '../../common';\nimport { Encoding } from './encoding';\nimport deepExtend from '../../common/deep-extend';\nimport inArray from '../../common/in-array';\n\nconst numberRegex = /^\\d+$/;\nconst alphanumericRegex = /^[a-z0-9]+$/i;\nconst extend = Object.assign;\n\nexport class State128 extends Class {\n constructor(encoding) {\n super();\n this.encoding = encoding;\n this.initProperties();\n }\n\n initProperties() { }\n\n addStart() { }\n\n is() { }\n\n isCode() {\n return false;\n }\n\n move() { }\n\n pushState() { }\n}\n\nexport class State128AB extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this.states = states;\n this._initMoves(states);\n }\n\n initProperties() {\n super.initProperties();\n\n deepExtend(this, {\n FNC4: \"FNC4\",\n SHIFT: 98\n });\n }\n\n addStart() {\n this.encoding.addPattern(this.START);\n }\n\n is(value, index) {\n let code = value.charCodeAt(index);\n return this.isCode(code);\n }\n\n move(encodingState) {\n let idx = 0;\n\n while (!this._moves[idx].call(this, encodingState) && idx < this._moves.length) {\n idx++;\n }\n }\n\n pushState(encodingState) {\n let states = this.states,\n value = encodingState.value,\n maxLength = value.length,\n code;\n\n if (inArray(\"C\", states)) {\n let numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n\n if (numberMatch) {\n maxLength = value.indexOf(numberMatch[0], encodingState.index);\n }\n }\n\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 &&\n this.isCode(code) &&\n encodingState.index < maxLength) {\n this.encoding.addPattern(this.getValue(code));\n encodingState.index++;\n }\n }\n\n _initMoves(states) {\n this._moves = [];\n\n if (inArray(this.FNC4, states)) {\n this._moves.push(this._moveFNC);\n }\n\n if (inArray(this.shiftKey, states)) {\n this._moves.push(this._shiftState);\n }\n\n this._moves.push(this._moveState);\n }\n\n _moveFNC(encodingState) {\n if (encodingState.fnc) {\n encodingState.fnc = false;\n return encodingState.previousState === this.key;\n }\n }\n\n _shiftState(encodingState) {\n if (encodingState.previousState === this.shiftKey &&\n (encodingState.index + 1 >= encodingState.value.length ||\n this.encoding[this.shiftKey].is(encodingState.value, encodingState.index + 1))) {\n this.encoding.addPattern(this.SHIFT);\n encodingState.shifted = true;\n return true;\n }\n }\n\n _moveState() {\n this.encoding.addPattern(this.MOVE);\n return true;\n }\n}\n\nconst states128 = {};\n\nstates128.A = class State128A extends State128AB {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"A\",\n shiftKey: \"B\",\n MOVE: 101,\n START: 103\n });\n }\n\n isCode(code) {\n return 0 <= code && code < 96;\n }\n\n getValue(code) {\n if (code < 32) {\n return code + 64;\n }\n\n return code - 32;\n }\n};\n\nstates128.B = class State128B extends State128AB {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"B\",\n shiftKey: \"A\",\n MOVE: 100,\n START: 104\n });\n }\n\n isCode(code) {\n return 32 <= code && code < 128;\n }\n\n getValue(code) {\n return code - 32;\n }\n};\n\nstates128.C = class State128C extends State128 {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"C\",\n MOVE: 99,\n START: 105\n });\n }\n\n addStart() {\n this.encoding.addPattern(this.START);\n }\n\n is(value, index) {\n let next4 = getSubstring(value, index, 4);\n return (index + 4 <= value.length || value.length === 2) && numberRegex.test(next4);\n }\n\n move() {\n this.encoding.addPattern(this.MOVE);\n }\n\n pushState(encodingState) {\n let code;\n\n while ((code = getSubstring(encodingState.value, encodingState.index, 2)) &&\n numberRegex.test(code) && code.length === 2) {\n this.encoding.addPattern(parseInt(code, 10));\n encodingState.index += 2;\n }\n }\n\n getValue(code) {\n return code;\n }\n};\n\nstates128.FNC4 = class State128FNC4 extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this._initSubStates(states);\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"FNC4\",\n dependentStates: [\"A\", \"B\"]\n });\n }\n\n addStart(encodingState) {\n let code = encodingState.value.charCodeAt(0) - 128,\n subState = this._getSubState(code);\n\n this.encoding[subState].addStart();\n }\n\n is(value, index) {\n let code = value.charCodeAt(index);\n return this.isCode(code);\n }\n\n isCode(code) {\n return 128 <= code && code < 256;\n }\n\n pushState(encodingState) {\n let subState = this._initSubState(encodingState),\n encoding = this.encoding,\n length = subState.value.length;\n let code;\n\n encodingState.index += length;\n\n if (length < 3) {\n for (; subState.index < length; subState.index++) {\n code = subState.value.charCodeAt(subState.index);\n subState.state = this._getSubState(code);\n\n if (subState.previousState !== subState.state) {\n subState.previousState = subState.state;\n encoding[subState.state].move(subState);\n }\n\n encoding.addPattern(encoding[subState.state].MOVE);\n encoding.addPattern(encoding[subState.state].getValue(code));\n }\n } else {\n if (subState.state !== subState.previousState) {\n encoding[subState.state].move(subState);\n }\n\n this._pushStart(subState);\n encoding.pushData(subState, this.subStates);\n\n if (encodingState.index < encodingState.value.length) {\n this._pushStart(subState);\n }\n }\n\n encodingState.fnc = true;\n encodingState.state = subState.state;\n }\n\n _pushStart(subState) {\n this.encoding.addPattern(this.encoding[subState.state].MOVE);\n this.encoding.addPattern(this.encoding[subState.state].MOVE);\n }\n\n _initSubState(encodingState) {\n const subState = {\n value: this._getAll(encodingState.value, encodingState.index),\n index: 0\n };\n\n subState.state = this._getSubState(subState.value.charCodeAt(0));\n subState.previousState = encodingState.previousState === this.key ?\n subState.state :\n encodingState.previousState;\n\n return subState;\n }\n\n _initSubStates(states) {\n this.subStates = [];\n\n for (let i = 0; i < states.length; i++) {\n if (inArray(states[i], this.dependentStates)) {\n this.subStates.push(states[i]);\n }\n }\n }\n\n _getSubState(code) {\n for (let i = 0; i < this.subStates.length; i++) {\n if (this.encoding[this.subStates[i]].isCode(code)) {\n return this.subStates[i];\n }\n }\n }\n\n _getAll(value, index) {\n let code;\n let result = \"\";\n let i = index;\n\n while ((code = value.charCodeAt(i++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n\n return result;\n }\n};\n\nstates128.FNC1 = class States128FNC1 extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this.states = states;\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"FNC1\",\n startState: \"C\",\n startAI: \"(\",\n endAI: \")\",\n dependentStates: [\"C\", \"B\"],\n applicationIdentifiers: {\n \"22\": { max: 29, type: \"alphanumeric\" },\n \"402\": { length: 17 },\n \"7004\": { max: 4, type: \"alphanumeric\" },\n \"242\": { max: 6, type: \"alphanumeric\" },\n \"8020\": { max: 25, type: \"alphanumeric\" },\n \"703\": { min: 3, max: 30, type: \"alphanumeric\" },\n \"8008\": { min: 8, max: 12, type: \"alphanumeric\" },\n \"253\": { min: 13, max: 17, type: \"alphanumeric\" },\n \"8003\": { min: 14, max: 30, type: \"alphanumeric\" },\n multiKey: [{\n ids: [\"15\", \"17\", \"8005\", \"8100\"],\n ranges: [\n [11, 13],\n [310, 316],\n [320, 336],\n [340, 369]\n ],\n type: { length: 6 }\n }, {\n ids: [\"240\", \"241\", \"250\", \"251\", \"400\", \"401\", \"403\", \"7002\", \"8004\", \"8007\", \"8110\"],\n ranges: [[90 - 99]],\n type: { max: 30, type: \"alphanumeric\" }\n }, {\n ids: [\"7001\"],\n ranges: [[410, 414]],\n type: { length: 13 }\n }, {\n ids: [\"10\", \"21\", \"254\", \"420\", \"8002\"],\n type: { max: 20, type: \"alphanumeric\" }\n }, {\n ids: [\"00\", \"8006\", \"8017\", \"8018\"],\n type: { length: 18 }\n }, {\n ids: [\"01\", \"02\", \"8001\"],\n type: { length: 14 }\n }, {\n ids: [\"422\"],\n ranges: [\n [424, 426]\n ],\n type: { length: 3 }\n }, {\n ids: [\"20\", \"8102\"],\n type: { length: 2 }\n }, {\n ids: [\"30\", \"37\"],\n type: { max: 8, type: \"alphanumeric\" }\n }, {\n ids: [\"390\", \"392\"],\n type: { max: 15, type: \"alphanumeric\" }\n }, {\n ids: [\"421\", \"423\"],\n type: { min: 3, max: 15, type: \"alphanumeric\" }\n }, {\n ids: [\"391\", \"393\"],\n type: { min: 3, max: 18, type: \"alphanumeric\" }\n }, {\n ids: [\"7003\", \"8101\"],\n type: { length: 10 }\n }]\n },\n START: 102\n });\n }\n\n\n addStart() {\n this.encoding[this.startState].addStart();\n }\n\n is() {\n return inArray(this.key, this.states);\n }\n\n pushState(encodingState) {\n let encoding = this.encoding,\n value = encodingState.value.replace(/\\s/g, \"\"),\n regexSeparators = new RegExp(\"[\" + this.startAI + this.endAI + \"]\", \"g\"),\n index = encodingState.index,\n subState = {\n state: this.startState\n },\n current,\n nextStart,\n separatorLength;\n\n encoding.addPattern(this.START);\n\n const trueCondition = true;\n\n while (trueCondition) {\n subState.index = 0;\n\n separatorLength = value.charAt(index) === this.startAI ? 2 : 0;\n current = separatorLength > 0 ? this.getBySeparator(value, index) : this.getByLength(value, index);\n\n if (current.ai.length) {\n nextStart = index + separatorLength + current.id.length + current.ai.length;\n } else {\n nextStart = value.indexOf(this.startAI, index + 1);\n\n if (nextStart < 0) {\n if (index + current.ai.max + current.id.length + separatorLength < value.length) {\n throw new Error(\"Separators are required after variable length identifiers\");\n }\n\n nextStart = value.length;\n }\n }\n\n subState.value = value.substring(index, nextStart).replace(regexSeparators, \"\");\n this.validate(current, subState.value);\n encoding.pushData(subState, this.dependentStates);\n\n if (nextStart >= value.length) {\n break;\n }\n\n index = nextStart;\n\n if (subState.state !== this.startState) {\n encoding[this.startState].move(subState);\n subState.state = this.startState;\n }\n\n if (!current.ai.length) {\n encoding.addPattern(this.START);\n }\n }\n\n encodingState.index = encodingState.value.length;\n }\n\n validate(current, value) {\n let code = value.substr(current.id.length),\n ai = current.ai;\n\n if (!ai.type && !numberRegex.test(code)) {\n throw new Error(\"Application identifier \" + current.id + \" is numeric only but contains non numeric character(s).\");\n }\n\n if (ai.type === \"alphanumeric\" && !alphanumericRegex.test(code)) {\n throw new Error(\"Application identifier \" + current.id + \" is alphanumeric only but contains non alphanumeric character(s).\");\n }\n\n if (ai.length && ai.length !== code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be \" + ai.length + \" characters long.\");\n }\n\n if (ai.min && ai.min > code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be at least \" + ai.min + \" characters long.\");\n }\n\n if (ai.max && ai.max < code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be at most \" + ai.max + \" characters long.\");\n }\n }\n\n getByLength(value, index) {\n let id;\n let applicationIdentifier;\n\n for (let i = 2; i <= 4; i++) {\n id = getSubstring(value, index, i);\n applicationIdentifier = this.getApplicationIdentifier(id) || this.getApplicationIdentifier(id.substring(0, id.length - 1));\n if (applicationIdentifier) {\n return {\n id: id,\n ai: applicationIdentifier\n };\n }\n }\n this.unsupportedAIError(id);\n }\n\n unsupportedAIError(id) {\n throw new Error(\"'\" + id + \"' is not a supported Application Identifier\");\n }\n\n getBySeparator(value, index) {\n let start = value.indexOf(this.startAI, index),\n end = value.indexOf(this.endAI, start),\n id = value.substring(start + 1, end),\n ai = this.getApplicationIdentifier(id) || this.getApplicationIdentifier(id.substr(id.length - 1));\n\n if (!ai) {\n this.unsupportedAIError(id);\n }\n\n return {\n ai: ai,\n id: id\n };\n }\n\n getApplicationIdentifier(id) {\n let applicationIdentifier = this.applicationIdentifiers,\n multiKey = applicationIdentifier.multiKey;\n\n if (applicationIdentifier[id]) {\n return applicationIdentifier[id];\n }\n\n for (let i = 0; i < multiKey.length; i++) {\n if (multiKey[i].ids && inArray(id, multiKey[i].ids)) {\n return multiKey[i].type;\n } else if (multiKey[i].ranges) {\n let ranges = multiKey[i].ranges;\n\n for (let j = 0; j < ranges.length; j++) {\n if (ranges[j][0] <= id && id <= ranges[j][1]) {\n return multiKey[i].type;\n }\n }\n }\n }\n }\n};\n\nexport class Code128Base extends Encoding {\n constructor(options) {\n super(options);\n this._initStates();\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characterMap: [\n 212222, 222122, 222221, 121223, 121322, 131222, 122213, 122312, 132212, 221213,\n 221312, 231212, 112232, 122132, 122231, 113222, 123122, 123221, 223211, 221132,\n 221231, 213212, 223112, 312131, 311222, 321122, 321221, 312212, 322112, 322211,\n 212123, 212321, 232121, 111323, 131123, 131321, 112313, 132113, 132311, 211313,\n 231113, 231311, 112133, 112331, 132131, 113123, 113321, 133121, 313121, 211331,\n 231131, 213113, 213311, 213131, 311123, 311321, 331121, 312113, 312311, 332111,\n 314111, 221411, 431111, 111224, 111422, 121124, 121421, 141122, 141221, 112214,\n 112412, 122114, 122411, 142112, 142211, 241211, 221114, 413111, 241112, 134111,\n 111242, 121142, 121241, 114212, 124112, 124211, 411212, 421112, 421211, 212141,\n 214121, 412121, 111143, 111341, 131141, 114113, 114311, 411113, 411311, 113141,\n 114131, 311141, 411131, 211412, 211214, 211232, 2331112\n ],\n STOP: 106\n });\n }\n\n _initStates() {\n for (let i = 0; i < this.states.length; i++) {\n this[this.states[i]] = new states128[this.states[i]](this, this.states);\n }\n }\n\n initValue(value, width, height) {\n this.pattern = [];\n this.value = value;\n this.width = width;\n this.height = height;\n this.checkSum = 0;\n this.totalUnits = 0;\n this.index = 0;\n this.position = 1;\n }\n\n addData() {\n let encodingState = {\n value: this.value,\n index: 0,\n state: \"\"\n };\n\n if (this.value.length === 0) {\n return;\n }\n\n encodingState.state =\n encodingState.previousState = this.getNextState(encodingState, this.states);\n\n this.addStart(encodingState);\n\n this.pushData(encodingState, this.states);\n\n this.addCheckSum();\n this.addStop();\n this.setBaseUnit();\n }\n\n pushData(encodingState, states) {\n const trueCondition = true;\n\n while (trueCondition) {\n this[encodingState.state].pushState(encodingState);\n\n if (encodingState.index >= encodingState.value.length) {\n break;\n }\n\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = this.getNextState(encodingState, states);\n this[encodingState.state].move(encodingState);\n } else {\n let temp = encodingState.state;\n encodingState.state = encodingState.previousState;\n encodingState.previousState = temp;\n encodingState.shifted = false;\n }\n }\n }\n\n addStart(encodingState) {\n this[encodingState.state].addStart(encodingState);\n this.position = 1;\n }\n\n addCheckSum() {\n this.checksum = this.checkSum % 103;\n this.addPattern(this.checksum);\n }\n\n addStop() {\n this.addPattern(this.STOP);\n }\n\n setBaseUnit() {\n this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n }\n\n addPattern(code) {\n const pattern = this.characterMap[code].toString();\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n this.checkSum += code * this.position++;\n }\n\n getNextState(encodingState, states) {\n for (let i = 0; i < states.length; i++) {\n if (this[states[i]].is(encodingState.value, encodingState.index)) {\n return states[i];\n }\n }\n\n this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n }\n}\n\nexport class Code128a extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 A\",\n states: [\"A\"]\n });\n }\n}\n\nexport class Code128b extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 B\",\n states: [\"B\"]\n });\n }\n}\n\nexport class Code128c extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 C\",\n states: [\"C\"]\n });\n }\n}\n\nexport class Code128 extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128\",\n states: [\"C\", \"B\", \"A\", \"FNC4\"]\n });\n }\n}\n\nexport class CodeGS1128 extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code GS1-128\",\n states: [\"FNC1\", \"C\", \"B\"]\n });\n }\n}\n\nfunction getSubstring(value, index, count) {\n return value.substring(index, index + count);\n}\n","import { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class MsiBase extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characterMap: [\n \"12121212\",\n \"12121221\",\n \"12122112\",\n \"12122121\",\n \"12211212\",\n \"12211221\",\n \"12212112\",\n \"12212121\",\n \"21121212\",\n \"21121221\"\n ],\n START: \"21\",\n STOP: \"121\",\n checkSumType: \"\",\n checkSums: checkSums\n });\n }\n\n initValue(value, width) {\n this.pattern = [];\n this.value = value;\n this.checkSumLength = 0;\n this.width = width;\n }\n\n setBaseUnit() {\n const startStopLength = 7;\n\n this.baseUnit = this.width /\n (12 * (this.value.length + this.checkSumLength) + this.quietZoneLength + startStopLength);\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.STOP);\n this.setBaseUnit();\n }\n\n addCharacter(character) {\n const pattern = this.characterMap[character];\n\n if (!pattern) {\n this.invalidCharacterError(character);\n }\n\n this.addPattern(pattern);\n }\n\n addPattern(pattern) {\n for (let i = 0; i < pattern.length; i++) {\n this.pattern.push(parseInt(pattern.charAt(i), 10));\n }\n }\n\n addCheckSum() {\n const checkSumFunction = this.checkSums[this.checkSumType];\n const checkValues = checkSumFunction.call(this.checkSums, this.value);\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n this.checkSumLength++;\n this.addPattern(this.characterMap[checkValues[i]]);\n }\n }\n}\n\nexport class MsiMod10 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo10\",\n checkSumType: \"Modulo10\"\n });\n }\n}\n\nexport class MsiMod11 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo11\",\n checkSumType: \"Modulo11\"\n });\n }\n}\n\nexport class MsiMod1010 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo10 Modulo10\",\n checkSumType: \"Modulo10Modulo10\"\n });\n }\n}\n\nexport class MsiMod1110 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo11 Modulo10\",\n checkSumType: \"Modulo11Modulo10\"\n });\n }\n}\n\nconst checkSums = {\n Modulo10(value) {\n let checkValues = [0, \"\"],\n odd = value.length % 2,\n idx,\n evenSum,\n oddSum;\n\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx), 10);\n }\n\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx), 10);\n }\n\n return [(10 - (oddSum % 10)) % 10];\n },\n Modulo11(value) {\n let weightedSum = 0,\n mod = 11,\n length = value.length,\n weight,\n checkValue;\n\n for (let i = 0; i < length; i++) {\n weight = ((length - i) % 6 || 6) + 1;\n weightedSum += weight * value.charAt(i);\n }\n\n checkValue = (mod - weightedSum % mod) % mod;\n\n if (checkValue !== 10) {\n return [checkValue];\n }\n\n return [1, 0];\n },\n Modulo11Modulo10(value) {\n let checkValues = this.Modulo11(value),\n mod11Value;\n mod11Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10(value) {\n let checkValues = this.Modulo10(value),\n mod10Value;\n mod10Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n};\n","import { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class Ean13 extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"EAN 13\",\n keyTable: [\n '000000',\n '001011',\n '001101',\n '001110',\n '010011',\n '011001',\n '011100',\n '010101',\n '010110',\n '011010'\n ],\n characterMap: {\n digits: [\n [3, 2, 1, 1],\n [2, 2, 2, 1],\n [2, 1, 2, 2],\n [1, 4, 1, 1],\n [1, 1, 3, 2],\n [1, 2, 3, 1],\n [1, 1, 1, 4],\n [1, 3, 1, 2],\n [1, 2, 1, 3],\n [3, 1, 1, 2]\n ],\n start: [1, 1, 1],\n middle: [1, 1, 1, 1, 1]\n }\n });\n }\n\n initValue(value, width, height) {\n const valueAsString = String(value);\n\n if (valueAsString.length !== 12 || /\\D/.test(valueAsString)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\n\n this.pattern = [];\n this.options.height = height;\n this.baseUnit = width / (95 + this.quietZoneLength);\n this.value = valueAsString;\n this.checksum = this.calculateChecksum();\n this.leftKey = valueAsString[0];\n this.leftPart = valueAsString.substr(1, 6);\n this.rightPart = valueAsString.substr(7) + this.checksum;\n }\n\n addData() {\n this.addPieces(this.characterMap.start);\n this.addSide(this.leftPart, this.leftKey);\n this.addPieces(this.characterMap.middle);\n this.addSide(this.rightPart);\n this.addPieces(this.characterMap.start);\n }\n\n addSide(leftPart, key) {\n for (let i = 0; i < leftPart.length; i++) {\n if (key && parseInt(this.keyTable[key].charAt(i), 10)) {\n this.addPieces(Array.prototype.slice.call(this.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n } else {\n this.addPieces(this.characterMap.digits[leftPart.charAt(i)], true);\n }\n }\n }\n\n addPieces(arrToAdd, limitedHeight) {\n for (let i = 0; i < arrToAdd.length; i++) {\n if (limitedHeight) {\n this.pattern.push({\n y1: 0,\n y2: this.options.height * 0.95,\n width: arrToAdd[i]\n });\n } else {\n this.pattern.push(arrToAdd[i]);\n }\n }\n }\n\n calculateChecksum() {\n let odd = 0,\n even = 0,\n value = this.value.split(\"\").reverse().join(\"\");\n\n for (let i = 0; i < value.length; i++) {\n if (i % 2) {\n even += parseInt(value.charAt(i), 10);\n } else {\n odd += parseInt(value.charAt(i), 10);\n }\n }\n\n let checksum = (10 - ((3 * odd + even) % 10)) % 10;\n\n return checksum;\n }\n}\n","import { Ean13 } from './ean13';\n\nconst extend = Object.assign;\n\nexport class Ean8 extends Ean13 {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"EAN 8\"\n });\n }\n\n initValue(value, width, height) {\n if (value.length !== 7 || /\\D/.test(value)) {\n throw new Error('Invalid value provided');\n }\n\n this.value = value;\n this.options.height = height;\n this.checksum = this.calculateChecksum(this.value);\n this.leftPart = this.value.substr(0, 4);\n this.rightPart = this.value.substr(4) + this.checksum;\n this.pattern = [];\n this.baseUnit = width / (67 + this.quietZoneLength);\n }\n}\n","import { Code11 } from './code11';\nimport { Code39 } from './code39';\nimport { Code39Extended } from './code39-extended';\nimport { Code93 } from './code93';\nimport { Code93Extended } from './code93-extended';\nimport { Postnet } from './postnet';\n\nimport {\n Code128,\n Code128a,\n Code128b,\n Code128c,\n CodeGS1128\n} from './code128';\n\nimport {\n MsiMod10,\n MsiMod11,\n MsiMod1010,\n MsiMod1110\n} from './msi';\n\nimport { Ean8 } from './ean8';\nimport { Ean13 } from './ean13';\n\nexport const Encodings = {\n code11: Code11,\n\n code39: Code39,\n code39extended: Code39Extended,\n\n code93: Code93,\n code93extended: Code93Extended,\n\n code128: Code128,\n code128a: Code128a,\n code128b: Code128b,\n code128c: Code128c,\n [\"gs1-128\"]: CodeGS1128,\n\n msimod10: MsiMod10,\n msimod11: MsiMod11,\n msimod1010: MsiMod1010,\n msimod1110: MsiMod1110,\n\n postnet: Postnet,\n\n ean8: Ean8,\n ean13: Ean13\n};\n","import { Code93 } from './code93';\nimport { Code39ExtendedBase } from './code39-extended';\nimport deepExtend from '../../common/deep-extend';\n\nexport class Code93Extended extends Code93 {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, Code39ExtendedBase, {\n name: \"Code 93 extended\",\n pushCheckSum: function() {\n const checkValues = this._getCheckValues();\n let value;\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n value = checkValues[i];\n\n if (this.shiftValuesAsciiCodes[value]) {\n this.addExtended(this.shiftValuesAsciiCodes[value]);\n } else {\n const characterByValue = this._findCharacterByValue(value);\n this.addPattern(this.characterMap[characterByValue].pattern);\n }\n }\n }\n });\n }\n}\n","export function surfaceSize(element, surfaceType) {\n const display = element.style.display;\n if (surfaceType === 'canvas') {\n // The Canvas default size is different from SVG for\n // inline-block containers such as the Barcode and QR Code.\n //\n // Switch to display: block to get same dimensions.\n element.style.display = 'block';\n }\n\n const size = {\n width: element.clientWidth,\n height: element.clientHeight\n };\n\n element.style.display = display;\n\n return size;\n}\n","import {\n geometry as geom,\n drawing as draw\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n addClass,\n setDefaultOptions,\n deepExtend,\n getSpacing,\n isObject,\n defaultErrorHandler\n} from '../common';\n\nimport {\n Box,\n TextBox\n} from '../core';\n\nimport { Encodings } from './encodings/main';\nimport { surfaceSize } from './surface-size';\n\nconst DEFAULT_BARCODE_WIDTH = 300;\nconst DEFAULT_BARCODE_HEIGHT = 100;\n\nclass Barcode extends Class {\n constructor(element, options, errorHandler = defaultErrorHandler) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.element = element;\n this.onError = errorHandler;\n\n this._initElement();\n this._initSurface();\n this._setOptions(options);\n\n if (options && defined(options.value)) {\n this.redraw();\n }\n }\n\n destroy() {\n this._destroySurface();\n }\n\n _initElement() {\n addClass(this.element, \"k-barcode\");\n }\n\n _initSurface() {\n const { options, surface } = this;\n\n if (!surface || surface.options.type !== options.renderAs) {\n this._destroySurface();\n this._initSurfaceElement();\n this.surface = this._createSurface();\n }\n }\n\n _createSurface() {\n return draw.Surface.create(this.surfaceElement, {\n type: this.options.renderAs\n });\n }\n\n _destroySurface() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n this._destroySurfaceElement();\n }\n }\n\n _initSurfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.surfaceElement.style.position = 'relative';\n this.element.appendChild(this.surfaceElement);\n }\n }\n\n _destroySurfaceElement() {\n if (this.surfaceElement && this.surfaceElement.parentNode) {\n this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n this.surfaceElement = null;\n }\n }\n\n setOptions(options) {\n this._setOptions(options);\n this._initSurface();\n this.redraw();\n }\n\n redraw() {\n let size = this._getSize();\n\n this.surface.clear();\n\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n\n this.createVisual();\n\n this.surface.draw(this.visual);\n }\n\n getSize() {\n return {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n };\n }\n\n _resize() {\n this.redraw();\n }\n\n createVisual() {\n this.visual = this._render();\n }\n\n _render() {\n const options = this.options;\n const value = options.value;\n const textOptions = options.text;\n const textMargin = getSpacing(textOptions.margin);\n const size = this._getSize();\n const border = options.border || {};\n const encoding = this.encoding;\n const contentBox = new Box(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding);\n let barHeight = contentBox.height();\n let encodedValue;\n let textToDisplay;\n let textHeight;\n const visual = new draw.Group();\n\n this.contentBox = contentBox;\n visual.append(this._getBackground(size));\n\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n\n try {\n encodedValue = encoding.encode(value, contentBox.width(), barHeight);\n } catch (error) {\n this.onError(error);\n return visual;\n }\n\n if (textOptions.visible) {\n textToDisplay = value;\n\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += \" \" + encoding.checksum;\n }\n\n visual.append(this._getText(textToDisplay));\n }\n\n this.barHeight = barHeight;\n this._bandsGroup = this._getBands(encodedValue.pattern, encodedValue.baseUnit);\n visual.append(this._bandsGroup);\n\n return visual;\n }\n\n exportVisual() {\n return this._render();\n }\n\n _getSize() {\n const element = this.element;\n const elementSize = surfaceSize(element, this.options.renderAs);\n const size = new geom.Size(DEFAULT_BARCODE_WIDTH, DEFAULT_BARCODE_HEIGHT);\n\n if (elementSize.width > 0) {\n size.width = elementSize.width;\n }\n\n if (elementSize.height > 0) {\n size.height = elementSize.height;\n }\n\n if (this.options.width) {\n size.width = this.options.width;\n }\n\n if (this.options.height) {\n size.height = this.options.height;\n }\n\n return size;\n }\n\n value(value) {\n if (!defined(value)) {\n return this.options.value;\n }\n\n this.options.value = String(value);\n this.redraw();\n }\n\n _getBands(pattern, baseUnit) {\n const contentBox = this.contentBox;\n let offsetX = contentBox.x1;\n let stepX;\n let patternItem;\n const group = new draw.Group();\n\n for (let i = 0; i < pattern.length; i++) {\n patternItem = isObject(pattern[i]) ? pattern[i] : {\n width: pattern[i],\n y1: 0,\n y2: this.barHeight\n };\n\n stepX = patternItem.width * baseUnit;\n\n if (i % 2) {\n const rect = geom.Rect.fromPoints(\n new geom.Point(offsetX, patternItem.y1 + contentBox.y1),\n new geom.Point(offsetX + stepX, patternItem.y2 + contentBox.y1)\n );\n\n const path = draw.Path.fromRect(rect, {\n fill: {\n color: this.options.color\n },\n stroke: null\n });\n\n group.append(path);\n }\n\n offsetX += stepX;\n }\n\n return group;\n }\n\n _getBackground(size) {\n const options = this.options;\n const border = options.border || {};\n const box = new Box(0, 0, size.width, size.height).unpad(border.width / 2);\n const path = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: options.background\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n\n return path;\n }\n\n _getText(value) {\n const textOptions = this.options.text;\n const text = this._textbox = new TextBox(value, {\n font: textOptions.font,\n color: textOptions.color,\n align: \"center\",\n vAlign: \"bottom\",\n margin: textOptions.margin\n });\n\n text.reflow(this.contentBox);\n text.renderVisual();\n\n return text.visual;\n }\n\n _setOptions(options) {\n this.type = (options.type || this.options.type).toLowerCase();\n\n if (this.type === \"upca\") {\n this.type = \"ean13\";\n options.value = '0' + options.value;\n }\n\n if (this.type === \"upce\") {\n this.type = \"ean8\";\n options.value = '0' + options.value;\n }\n\n if (!Encodings[this.type]) {\n throw new Error(`Encoding '${this.type}' is not supported.`);\n }\n\n this.encoding = new Encodings[this.type]();\n\n this.options = deepExtend({}, this.options, options);\n }\n}\n\nsetDefaultOptions(Barcode, {\n name: \"Barcode\",\n renderAs: \"svg\",\n value: \"\",\n type: \"code39\",\n checksum: false,\n width: 0,\n height: 0,\n color: \"black\",\n background: \"white\",\n text: {\n visible: true,\n font: \"16px Consolas, Monaco, Sans Mono, monospace, sans-serif\",\n color: \"black\",\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n },\n border: {\n width: 0,\n dashType: \"solid\",\n color: \"black\"\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n});\n\nexport default Barcode;\n","import { Encodings } from './encodings/main';\n\nconst validate = (encoding, size, prefix) => (value) => {\n try {\n encoding.encode(\n prefix + value,\n size.width,\n size.height\n );\n } catch (error) {\n return {\n valid: false,\n error\n };\n }\n\n return {\n valid: true\n };\n};\n\n// A default size for encodings, so the validator can check only the value if no size is provided.\nconst fallbackSize = { width: 500, height: 100 };\n\nfunction barcodeValidator(type, size = fallbackSize) {\n if (!type) {\n throw new Error(`Please specify barcode type to validate.`);\n }\n\n let resolvedType = type.toLowerCase();\n let prefix = '';\n if (resolvedType === 'upca') {\n resolvedType = 'ean13';\n prefix = '0';\n } else if (resolvedType === 'upce') {\n resolvedType = 'ean8';\n prefix = '0';\n }\n\n if (!Encodings[resolvedType]) {\n throw new Error(`Encoding '${type}' is not supported.`);\n }\n\n const encoding = new Encodings[resolvedType]();\n return validate(encoding, size, prefix);\n}\n\nexport default barcodeValidator;\n","export const extend = Object.assign;\n\nexport function splitInto(str, chunkLength) {\n let result = [];\n let idx = 0;\n\n while (idx < str.length) {\n result.push(str.substring(idx, idx + chunkLength));\n idx += chunkLength;\n }\n\n return result;\n}\n\nexport function toBitsString(value, length) {\n let bitString = Number(value).toString(2);\n\n if (bitString.length < length) {\n bitString = new Array(length - bitString.length + 1).join(0) + bitString;\n }\n\n return bitString;\n}\n\nexport function toDecimal(value) {\n return parseInt(value, 2);\n}\n\n","import { Class } from '../../common';\n\nexport class FreeCellVisitor extends Class {\n constructor(matrix) {\n super();\n\n this.matrix = matrix;\n this.row = matrix.length - 1;\n this.column = matrix.length - 1;\n this.startColumn = this.column;\n this.dir = -1;\n this.c = 0;\n }\n\n move() {\n this.row += this.dir * this.c;\n this.c ^= 1;\n this.column = this.startColumn - this.c;\n }\n\n getNextCell() {\n while (this.matrix[this.row][this.column] !== undefined) {\n this.move();\n\n if (this.row < 0 || this.row >= this.matrix.length) {\n this.dir = -this.dir;\n this.startColumn -= this.startColumn !== 8 ? 2 : 3;\n this.column = this.startColumn;\n this.row = this.dir < 0 ? this.matrix.length - 1 : 0;\n }\n }\n\n return {\n row: this.row,\n column: this.column\n };\n }\n\n getNextRemainderCell() {\n this.move();\n\n if (this.matrix[this.row][this.column] === undefined) {\n return {\n row: this.row,\n column: this.column\n };\n }\n }\n}\n","import { Class } from '../../common';\n\nexport class EncodingResult extends Class {\n constructor(dataString, version) {\n super();\n\n this.dataString = dataString;\n this.version = version;\n }\n}\n","import { Class } from '../../../common';\nimport { EncodingResult } from '../encoding-result';\nimport {\n getModes,\n getVersion,\n getDataCodewordsCount,\n getDataString\n} from '../encoding';\n\nexport class IsoEncoder extends Class {\n getEncodingResult(inputString, errorCorrectionLevel) {\n let modes = getModes(inputString),\n dataCodewordsCount = getDataCodewordsCount(modes),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = getDataString(modes, version);\n\n return new EncodingResult(dataString, version);\n }\n}\n","import {\n toBitsString,\n toDecimal\n} from '../utils';\nimport { FreeCellVisitor } from './free-cell-visitor';\nimport { IsoEncoder } from './encoders/iso-encoder';\nimport { Utf8Encoder } from './encoders/utf8-encoder';\nimport { VersionsCodewordsInformation } from './version-codewords';\nimport { DataModeInstances } from './data-modes/data-mode-instances';\n\nlet terminator = \"0000\",\n NUMERIC = \"numeric\",\n ALPHA_NUMERIC = \"alphanumeric\",\n BYTE = \"byte\",\n powersOfTwo = { \"1\": 0 },\n powersOfTwoResult = { \"0\": 1 },\n irregularAlignmentPatternsStartDistance = {\n 15: 20, 16: 20, 18: 24, 19: 24, 22: 20,\n 24: 22, 26: 24, 28: 20, 30: 20, 31: 24,\n 32: 28, 33: 24, 36: 18, 37: 22, 39: 20, 40: 24\n },\n finderPattern = [1, 0, 1, 1, 1],\n alignmentPattern = [1, 0, 1],\n errorCorrectionPatterns = { L: \"01\", M: \"00\", Q: \"11\", H: \"10\" },\n formatMaskPattern = \"101010000010010\",\n formatGeneratorPolynomial = \"10100110111\",\n versionGeneratorPolynomial = \"1111100100101\",\n paddingCodewords = [\"11101100\", \"00010001\"],\n finderPatternValue = 93,\n /* eslint-disable arrow-body-style */\n /* eslint-disable no-unused-vars */\n maskPatternConditions = [\n (row, column) => { return (row + column) % 2 === 0; },\n (row, column) => { return row % 2 === 0; },\n (row, column) => { return column % 3 === 0; },\n (row, column) => { return (row + column) % 3 === 0; },\n (row, column) => { return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0; },\n (row, column) => { return ((row * column) % 2) + ((row * column) % 3) === 0; },\n (row, column) => { return (((row * column) % 2) + ((row * column) % 3)) % 2 === 0; },\n (row, column) => { return (((row + column) % 2) + ((row * column) % 3)) % 2 === 0; }\n ],\n /* eslint-enable no-unused-vars */\n /* eslint-enable arrow-body-style */\n numberRegex = /^\\d+/,\n alphaPattern = \"A-Z0-9 $%*+./:-\",\n alphaExclusiveSet = \"A-Z $%*+./:-\",\n alphaRegex = new RegExp(\"^[\" + alphaExclusiveSet + \"]+\"),\n alphaNumericRegex = new RegExp(\"^[\" + alphaPattern + \"]+\"),\n byteRegex = new RegExp(\"^[^\" + alphaPattern + \"]+\"),\n initMinNumericBeforeAlpha = 8,\n initMinNumericBeforeByte = 5,\n initMinAlphaBeforeByte = 8,\n minNumericBeforeAlpha = 17,\n minNumericBeforeByte = 9,\n minAlphaBeforeByte = 16;\n\nexport const generatorPolynomials = [[1, 0], [1, 25, 0]];\n\nexport function fillFunctionCell(matrices, bit, x, y) {\n for (let i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n}\n\nexport function fillDataCell(matrices, bit, x, y) {\n for (let i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n}\n\nexport function fillData(matrices, blocks) {\n let cellVisitor = new FreeCellVisitor(matrices[0]),\n block,\n codewordIdx,\n cell;\n\n for (let blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n\n while (block.length > 0) {\n for (let i = 0; i < block.length; i++) {\n for (let j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n\n codewordIdx++;\n\n while (block[0] && codewordIdx === block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n\n while ((cell = cellVisitor.getNextRemainderCell())) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n}\n\nexport function padDataString(initialDataString, totalDataCodewords) {\n let dataBitsCount = totalDataCodewords * 8,\n terminatorIndex = 0,\n paddingCodewordIndex = 0;\n let dataString = initialDataString;\n\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join(\"0\");\n }\n\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n\n return dataString;\n}\n\nexport function generatePowersOfTwo() {\n let result;\n let power;\n\n for (power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n\n result = (powersOfTwoResult[power - 1] * 2) ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n}\n\nexport function xorPolynomials(x, y) {\n let result = [],\n idx = x.length - 2;\n\n for (let i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n\n return result;\n}\n\nexport function multiplyPolynomials(x, y) {\n let result = [];\n\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n\n return result;\n}\n\nexport function generateGeneratorPolynomials() {\n let maxErrorCorrectionCodeWordsCount = 68;\n\n for (let idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n let firstPolynomial = generatorPolynomials[idx - 1],\n secondPolynomial = [idx, 0];\n\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n}\n\n//possibly generate on demand\ngeneratePowersOfTwo();\ngenerateGeneratorPolynomials();\n\nexport function multiplyByConstant(polynomial, power) {\n let result = [],\n idx = polynomial.length - 1;\n\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n }\n while (polynomial[idx] !== undefined);\n\n return result;\n}\n\nexport function generateErrorCodewords(data, errorCodewordsCount) {\n let generator = generatorPolynomials[errorCodewordsCount - 1],\n result = new Array(errorCodewordsCount).concat(data),\n generatorPolynomial = new Array(result.length - generator.length).concat(generator),\n steps = data.length,\n errorCodewords = [],\n divisor,\n idx;\n\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n\n result = xorPolynomials(divisor, result);\n }\n\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n\n return errorCodewords;\n}\n\nexport function getBlocks(dataStream, versionCodewordsInformation) {\n let codewordStart = 0,\n dataBlocks = [],\n errorBlocks = [],\n dataBlock,\n versionGroups = versionCodewordsInformation.groups,\n blockCodewordsCount,\n groupBlocksCount,\n messagePolynomial,\n codeword;\n\n for (let groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n\n for (let blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n\n for (let codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial,\n versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [dataBlocks, errorBlocks];\n}\n\nexport function chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n let numeric = numberRegex.exec(str),\n numericMatch = numeric ? numeric[0] : \"\",\n alpha = alphaRegex.exec(str),\n alphaMatch = alpha ? alpha[0] : \"\",\n alphaNumeric = alphaNumericRegex.exec(str),\n alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : \"\",\n mode,\n modeString;\n\n if (numericMatch &&\n (numericMatch.length >= minNumericBeforeAlpha || str.length === numericMatch.length ||\n (numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length))))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length === alphaNumericMatch.length ||\n alphaNumericMatch.length >= minAlphaBeforeByte || previousMode === ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n\n return {\n mode: mode,\n modeString: modeString\n };\n}\n\nexport function getModes(inputString) {\n let modes = [],\n previousMode,\n idx = 0;\n let str = inputString;\n\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n\n while (str.length > 0) {\n let nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n\n if (nextMode.mode !== previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n\n str = str.substr(nextMode.modeString.length);\n }\n\n return modes;\n}\n\nexport function getDataCodewordsCount(modes) {\n let length = 0,\n mode;\n\n for (let i = 0; i < modes.length; i++) {\n mode = DataModeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n\n return Math.ceil(length / 8);\n}\n\nexport function getVersion(dataCodewordsCount, errorCorrectionLevel) {\n let x = 0,\n y = VersionsCodewordsInformation.length - 1,\n version = Math.floor(VersionsCodewordsInformation.length / 2);\n\n do {\n if (dataCodewordsCount < VersionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n\n if (dataCodewordsCount <= VersionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n\n return y + 1;\n}\n\nexport function getDataString(modes, version) {\n let dataString = \"\",\n mode;\n\n for (let i = 0; i < modes.length; i++) {\n mode = DataModeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n\n return dataString;\n}\n\n//fix case all zeros\nexport function encodeFormatInformation(format) {\n let formatNumber = toDecimal(format),\n encodedString,\n result = \"\";\n\n if (formatNumber === 0) {\n return \"101010000010010\";\n }\n\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n\n for (let i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n\n return result;\n}\n\nexport function encodeBCH(value, generatorPolynomial, codeLength) {\n let generatorNumber = toDecimal(generatorPolynomial),\n polynomialLength = generatorPolynomial.length - 1,\n valueNumber = value << polynomialLength,\n length = codeLength - polynomialLength,\n valueString = toBitsString(value, length),\n result = dividePolynomials(valueNumber, generatorNumber);\n\n result = valueString + toBitsString(result, polynomialLength);\n\n return result;\n}\n\nexport function dividePolynomials(numberX, numberY) {\n let yLength = numberY.toString(2).length,\n xLength = numberX.toString(2).length;\n let x = numberX;\n\n do {\n x ^= numberY << xLength - yLength;\n xLength = x.toString(2).length;\n }\n while (xLength >= yLength);\n\n return x;\n}\n\nexport function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n}\n\nexport function initMatrices(version) {\n let matrices = [],\n modules = 17 + 4 * version;\n\n for (let i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n\n for (let j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n\n return matrices;\n}\n\nexport function addFormatInformation(matrices, formatString) {\n let matrix = matrices[0],\n x,\n y,\n idx = 0,\n length = formatString.length;\n\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n\n idx = 0;\n\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n}\n\nexport function encodeVersionInformation(version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n}\n\nexport function addVersionInformation(matrices, dataString) {\n let matrix = matrices[0],\n modules = matrix.length,\n x1 = 0,\n y1 = modules - 11,\n x2 = modules - 11,\n y2 = 0,\n quotient,\n mod,\n value;\n\n for (let idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n}\n\nexport function addCentricPattern(matrices, pattern, x, y) {\n let size = pattern.length + 2,\n length = pattern.length + 1,\n value;\n\n for (let i = 0; i < pattern.length; i++) {\n for (let j = i; j < size - i; j++) {\n value = pattern[i];\n\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n}\n\nexport function addFinderSeparator(matrices, direction, x, y) {\n let nextX = x,\n nextY = y,\n matrix = matrices[0];\n\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n }\n while (nextX >= 0 && nextX < matrix.length);\n}\n\nexport function addFinderPatterns(matrices) {\n let modules = matrices[0].length;\n\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [-1, -1], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [1, -1], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [-1, 1], 7, modules - 8);\n}\n\nexport function addAlignmentPatterns(matrices, version) {\n if (version < 2) {\n return;\n }\n\n let matrix = matrices[0],\n modules = matrix.length,\n pointsCount = Math.floor(version / 7),\n points = [6],\n startDistance,\n distance,\n idx = 0;\n\n if ((startDistance = irregularAlignmentPatternsStartDistance[version])) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n\n points.push(points[idx++] + startDistance);\n\n while ((points[idx] + distance) < modules) {\n points.push(points[idx++] + distance);\n }\n\n for (let i = 0; i < points.length; i++) {\n for (let j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n}\n\nexport function addTimingFunctions(matrices) {\n let row = 6,\n column = 6,\n value = 1,\n modules = matrices[0].length;\n\n for (let i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n}\n\nexport function scoreMaskMatrixes(matrices) {\n let scores = [],\n previousBits = [],\n darkModules = [],\n patterns = [],\n adjacentSameBits = [],\n matrix,\n i,\n row = 0,\n column = 1,\n modulesLength = matrices[0].length;\n\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [0, 0];\n patterns[i] = [0, 0];\n previousBits[i] = [];\n }\n\n for (let rowIndex = 0; rowIndex < modulesLength; rowIndex++) {\n for (let columnIndex = 0; columnIndex < modulesLength; columnIndex++) {\n for (let matrixIndex = 0; matrixIndex < matrices.length; matrixIndex++) {\n matrix = matrices[matrixIndex];\n darkModules[matrixIndex] += parseInt(matrix[rowIndex][columnIndex], 10);\n\n if (previousBits[matrixIndex][row] === matrix[rowIndex][columnIndex] &&\n rowIndex + 1 < modulesLength &&\n columnIndex - 1 >= 0 &&\n matrix[rowIndex + 1][columnIndex] === previousBits[matrixIndex][row] &&\n matrix[rowIndex + 1][columnIndex - 1] === previousBits[matrixIndex][row]) {\n scores[matrixIndex] += 3;\n }\n\n scoreFinderPatternOccurance(matrixIndex, patterns, scores, row, matrix[rowIndex][columnIndex]);\n scoreFinderPatternOccurance(matrixIndex, patterns, scores, column, matrix[columnIndex][rowIndex]);\n scoreAdjacentSameBits(matrixIndex, scores, previousBits, matrix[rowIndex][columnIndex], adjacentSameBits, row);\n scoreAdjacentSameBits(matrixIndex, scores, previousBits, matrix[columnIndex][rowIndex], adjacentSameBits, column);\n }\n }\n }\n\n let total = modulesLength * modulesLength,\n minIdx,\n min = Number.MAX_VALUE;\n\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n\n return minIdx;\n}\n\nexport function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = ((patterns[idx][rowColumn] << 1) ^ bit) % 128;\n\n if (patterns[idx][rowColumn] === finderPatternValue) {\n scores[idx] += 40;\n }\n}\n\nexport function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] === bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n\n adjacentBits[idx][rowColumn] = 1;\n }\n}\n\nexport function calculateDarkModulesRatioScore(darkModules, total) {\n let percent = Math.floor((darkModules / total) * 100),\n mod5 = percent % 5,\n previous = Math.abs(percent - mod5 - 50),\n next = Math.abs(percent + 5 - mod5 - 50),\n score = 10 * Math.min(previous / 5, next / 5);\n\n return score;\n}\n\nexport function createQRCodeDataEncoder(encoding) {\n if (encoding && encoding.toLowerCase().indexOf(\"utf_8\") >= 0) {\n return new Utf8Encoder();\n }\n\n return new IsoEncoder();\n}\n\nexport function encodeData(inputString, errorCorrectionLevel, encoding) {\n let encoder = createQRCodeDataEncoder(encoding),\n encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel),\n version = encodingResult.version,\n versionInformation = VersionsCodewordsInformation[version - 1][errorCorrectionLevel],\n dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords),\n blocks = getBlocks(dataString, versionInformation),\n matrices = initMatrices(version);\n\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n\n let minIdx = scoreMaskMatrixes(matrices),\n optimalMatrix = matrices[minIdx];\n\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n\n let formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n\n return optimalMatrix;\n}\n","import { Class } from '../../../common';\nimport { extend } from '../../utils';\nimport {\n toBitsString\n} from '../../utils';\n\nexport class QRDataMode extends Class {\n constructor() {\n super();\n\n this.initProperties();\n }\n\n initProperties() {\n extend(this, {\n modeIndicator: \"\",\n bitsInCharacterCount: []\n });\n }\n\n getVersionIndex(version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n\n return 1;\n }\n\n getBitsCharacterCount(version) {\n return this.bitsInCharacterCount[this.getVersionIndex(version || 40)];\n }\n\n getModeCountString(length, version) {\n return this.modeIndicator + toBitsString(length, this.getBitsCharacterCount(version));\n }\n\n encode() { }\n\n getStringBitsLength() { }\n\n getValue() { }\n}\n","import { NumericQRDataMode } from './numeric-data-mode';\nimport { AlphaNumericQRDataMode } from './alpha-numeric-data-mode';\nimport { ByteQRDataMode } from './byte-data-mode';\n\nconst NUMERIC = \"numeric\";\nconst ALPHA_NUMERIC = \"alphanumeric\";\nconst BYTE = \"byte\";\n\nexport let DataModeInstances = {\n [NUMERIC]: new NumericQRDataMode(),\n [ALPHA_NUMERIC]: new AlphaNumericQRDataMode(),\n [BYTE]: new ByteQRDataMode()\n};\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString,\n splitInto\n} from '../../utils';\n\nexport class NumericQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n bitsInCharacterCount: [10, 12, 14],\n modeIndicator: \"0001\"\n });\n }\n\n getValue(character) {\n return parseInt(character, 10);\n }\n\n encode(str, version) {\n let mode = this,\n parts = splitInto(str, 3),\n result = mode.getModeCountString(str.length, version);\n let i;\n\n for (i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n }\n\n getStringBitsLength(inputLength, version) {\n let mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n}\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString,\n splitInto\n} from '../../utils';\n\nexport class AlphaNumericQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characters: {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"A\": 10,\n \"B\": 11,\n \"C\": 12,\n \"D\": 13,\n \"E\": 14,\n \"F\": 15,\n \"G\": 16,\n \"H\": 17,\n \"I\": 18,\n \"J\": 19,\n \"K\": 20,\n \"L\": 21,\n \"M\": 22,\n \"N\": 23,\n \"O\": 24,\n \"P\": 25,\n \"Q\": 26,\n \"R\": 27,\n \"S\": 28,\n \"T\": 29,\n \"U\": 30,\n \"V\": 31,\n \"W\": 32,\n \"X\": 33,\n \"Y\": 34,\n \"Z\": 35,\n \" \": 36,\n \"$\": 37,\n \"%\": 38,\n \"*\": 39,\n \"+\": 40,\n \"-\": 41,\n \".\": 42,\n \"/\": 43,\n \":\": 44\n },\n bitsInCharacterCount: [9, 11, 13],\n modeIndicator: \"0010\"\n });\n }\n\n getValue(character) {\n return this.characters[character];\n }\n\n encode(str, version) {\n let\n parts = splitInto(str, 2),\n result = this.getModeCountString(str.length, version),\n value;\n let i;\n\n for (i = 0; i < parts.length - 1; i++) {\n value = 45 * this.getValue(parts[i].charAt(0)) + this.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n\n value = parts[i].length === 2 ?\n 45 * this.getValue(parts[i].charAt(0)) + this.getValue(parts[i].charAt(1)) :\n this.getValue(parts[i].charAt(0));\n\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n }\n\n getStringBitsLength(inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n}\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString\n} from '../../utils';\n\nexport class ByteQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n bitsInCharacterCount: [8, 16, 16],\n modeIndicator: \"0100\"\n });\n }\n\n getValue(character) {\n let code = character.charCodeAt(0);\n\n if (code <= 127 || (160 <= code && code <= 255)) {\n return code;\n }\n\n throw new Error(`Unsupported character in QR Code: \"${character}\".`);\n }\n\n encode(str, version) {\n let mode = this,\n result = mode.getModeCountString(str.length, version);\n\n for (let i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n\n return result;\n }\n\n getStringBitsLength(inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n}\n","import { Class } from '../../../common';\nimport { EncodingResult } from '../encoding-result';\nimport { DataModeInstances } from '../data-modes/data-mode-instances';\nimport { extend } from '../../utils';\nimport { toBitsString } from '../../utils';\nimport { getVersion } from '../encoding';\n\nconst BYTE = \"byte\";\n\nexport class Utf8Encoder extends Class {\n constructor() {\n super();\n\n this.initProperties();\n\n this.mode = DataModeInstances[this.encodingMode];\n }\n\n initProperties() {\n extend(this, {\n encodingMode: BYTE,\n utfBOM: \"111011111011101110111111\",\n initialModeCountStringLength: 20,\n ranges: [128, 2048, 65536, 2097152, 67108864]\n });\n }\n\n getEncodingResult(inputString, errorCorrectionLevel) {\n let data = this.encode(inputString),\n dataCodewordsCount = this.getDataCodewordsCount(data),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = this.mode.getModeCountString(data.length / 8, version) + data;\n\n return new EncodingResult(dataString, version);\n }\n\n getDataCodewordsCount(data) {\n let dataLength = data.length,\n dataCodewordsCount = Math.ceil((this.initialModeCountStringLength + dataLength) / 8);\n\n return dataCodewordsCount;\n }\n\n encode(str) {\n let result = this.utfBOM;\n\n for (let i = 0; i < str.length; i++) {\n result += this.encodeCharacter(str.charCodeAt(i));\n }\n\n return result;\n }\n\n encodeCharacter(code) {\n let bytesCount = this.getBytesCount(code),\n bc = bytesCount - 1,\n result = \"\";\n\n if (bytesCount === 1) {\n result = toBitsString(code, 8);\n } else {\n let significantOnes = 8 - bytesCount;\n\n for (let i = 0; i < bc; i++) {\n result = toBitsString(code >> (i * 6) & 63 | 128, 8) + result;\n }\n\n result = ((code >> bc * 6) | ((255 >> significantOnes) << significantOnes)).toString(2) + result;\n }\n\n return result;\n }\n\n getBytesCount(code) {\n let ranges = this.ranges;\n\n for (let i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n }\n}\n","export const VersionsCodewordsInformation = [{\n L: {\n groups: [\n [1, 19]\n ],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [\n [1, 16]\n ],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [\n [1, 13]\n ],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [\n [1, 9]\n ],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n}, {\n L: {\n groups: [\n [1, 34]\n ],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [\n [1, 28]\n ],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [\n [1, 22]\n ],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [1, 16]\n ],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [1, 55]\n ],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [\n [1, 44]\n ],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [2, 17]\n ],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [2, 13]\n ],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [1, 80]\n ],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [2, 32]\n ],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [2, 24]\n ],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [4, 9]\n ],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n}, {\n L: {\n groups: [\n [1, 108]\n ],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [2, 43]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [2, 15],\n [2, 16]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [2, 11],\n [2, 12]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [2, 68]\n ],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [4, 27]\n ],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [\n [4, 19]\n ],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [4, 15]\n ],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [2, 78]\n ],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [4, 31]\n ],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [2, 14],\n [4, 15]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [4, 13],\n [1, 14]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [2, 97]\n ],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [2, 38],\n [2, 39]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 18],\n [2, 19]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [4, 14],\n [2, 15]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [2, 116]\n ],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [3, 36],\n [2, 37]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 16],\n [4, 17]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [4, 12],\n [4, 13]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [2, 68],\n [2, 69]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [4, 43],\n [1, 44]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [6, 19],\n [2, 20]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [6, 15],\n [2, 16]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 81]\n ],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [1, 50],\n [4, 51]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [4, 22],\n [4, 23]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [3, 12],\n [8, 13]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [2, 92],\n [2, 93]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [6, 36],\n [2, 37]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 20],\n [6, 21]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [7, 14],\n [4, 15]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 107]\n ],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [8, 37],\n [1, 38]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [8, 20],\n [4, 21]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [12, 11],\n [4, 12]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [3, 115],\n [1, 116]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [4, 40],\n [5, 41]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [11, 16],\n [5, 17]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [11, 12],\n [5, 13]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [5, 87],\n [1, 88]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [5, 41],\n [5, 42]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [5, 24],\n [7, 25]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 12],\n [7, 13]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [5, 98],\n [1, 99]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [7, 45],\n [3, 46]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [15, 19],\n [2, 20]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [3, 15],\n [13, 16]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [1, 107],\n [5, 108]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [10, 46],\n [1, 47]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [1, 22],\n [15, 23]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [2, 14],\n [17, 15]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [5, 120],\n [1, 121]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [9, 43],\n [4, 44]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 22],\n [1, 23]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [2, 14],\n [19, 15]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [3, 113],\n [4, 114]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [3, 44],\n [11, 45]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 21],\n [4, 22]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [9, 13],\n [16, 14]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [3, 107],\n [5, 108]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [3, 41],\n [13, 42]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [15, 24],\n [5, 25]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [15, 15],\n [10, 16]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 116],\n [4, 117]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [17, 42]\n ],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 22],\n [6, 23]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [19, 16],\n [6, 17]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [2, 111],\n [7, 112]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [17, 46]\n ],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [7, 24],\n [16, 25]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [34, 13]\n ],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [4, 121],\n [5, 122]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [4, 47],\n [14, 48]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [11, 24],\n [14, 25]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [16, 15],\n [14, 16]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [6, 117],\n [4, 118]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [6, 45],\n [14, 46]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [11, 24],\n [16, 25]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [30, 16],\n [2, 17]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [8, 106],\n [4, 107]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [8, 47],\n [13, 48]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [7, 24],\n [22, 25]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [22, 15],\n [13, 16]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [10, 114],\n [2, 115]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [19, 46],\n [4, 47]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [28, 22],\n [6, 23]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [33, 16],\n [4, 17]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [8, 122],\n [4, 123]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [22, 45],\n [3, 46]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [8, 23],\n [26, 24]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [12, 15],\n [28, 16]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [3, 117],\n [10, 118]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [3, 45],\n [23, 46]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [4, 24],\n [31, 25]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 15],\n [31, 16]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [7, 116],\n [7, 117]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [21, 45],\n [7, 46]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [1, 23],\n [37, 24]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [19, 15],\n [26, 16]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [5, 115],\n [10, 116]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [19, 47],\n [10, 48]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [15, 24],\n [25, 25]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [23, 15],\n [25, 16]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [13, 115],\n [3, 116]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [2, 46],\n [29, 47]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [42, 24],\n [1, 25]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [23, 15],\n [28, 16]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 115]\n ],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [10, 46],\n [23, 47]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [10, 24],\n [35, 25]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [19, 15],\n [35, 16]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 115],\n [1, 116]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [14, 46],\n [21, 47]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [29, 24],\n [19, 25]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 15],\n [46, 16]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [13, 115],\n [6, 116]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [14, 46],\n [23, 47]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [44, 24],\n [7, 25]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [59, 16],\n [1, 17]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [12, 121],\n [7, 122]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [12, 47],\n [26, 48]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [39, 24],\n [14, 25]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [22, 15],\n [41, 16]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [6, 121],\n [14, 122]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [6, 47],\n [34, 48]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [46, 24],\n [10, 25]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [2, 15],\n [64, 16]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 122],\n [4, 123]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [29, 46],\n [14, 47]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [49, 24],\n [10, 25]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [24, 15],\n [46, 16]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [4, 122],\n [18, 123]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [13, 46],\n [32, 47]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [48, 24],\n [14, 25]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [42, 15],\n [32, 16]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [20, 117],\n [4, 118]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [40, 47],\n [7, 48]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [43, 24],\n [22, 25]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [10, 15],\n [67, 16]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [19, 118],\n [6, 119]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [18, 47],\n [31, 48]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [34, 24],\n [34, 25]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [20, 15],\n [61, 16]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n}];\n","import {\n geometry as geom,\n drawing as draw\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n addClass,\n setDefaultOptions,\n deepExtend,\n defaultErrorHandler\n} from '../common';\n\nimport { Box } from '../core';\nimport { encodeData } from './encodings/encoding';\nimport { extend } from './utils';\n\nimport { surfaceSize } from '../barcode/surface-size';\n\nconst round = Math.round;\nconst crossPattern = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 1], [3, 1], [3, 0], [2, 0], [2, -1], [1, -1], [1, 0]];\nconst squarePattern = [[0, 1], [1, 1], [1, 0]];\n\nconst QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: \"L\",\n DEFAULT_BACKGROUND: \"#fff\",\n DEFAULT_DARK_MODULE_COLOR: \"#000\",\n MIN_BASE_UNIT_SIZE: 1,\n DEFAULT_LOGO_SIZE: 7\n};\n\nclass QRCode extends Class {\n constructor(element, options, errorHandler = defaultErrorHandler) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.element = element;\n this.wrapper = this.element;\n this.onError = errorHandler;\n\n this._initElement();\n this._initSurface();\n\n this.setOptions(options);\n }\n\n destroy() {\n this._destroySurface();\n }\n\n _initElement() {\n addClass(this.element, \"k-qrcode\");\n }\n\n _initSurface() {\n const { options, surface } = this;\n\n if (!surface || surface.options.type !== options.renderAs) {\n this._destroySurface();\n this._initSurfaceElement();\n this.surface = this._createSurface();\n }\n }\n\n _createSurface() {\n return draw.Surface.create(this.surfaceElement, {\n type: this.options.renderAs\n });\n }\n\n _destroySurface() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n this._destroySurfaceElement();\n }\n }\n\n _initSurfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.surfaceElement.style.position = \"relative\";\n this.element.appendChild(this.surfaceElement);\n }\n }\n\n _destroySurfaceElement() {\n if (this.surfaceElement && this.surfaceElement.parentNode) {\n this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n this.surfaceElement = null;\n }\n }\n\n redraw() {\n let size = this._getSize();\n\n this.surface.clear();\n\n this.surface.setSize({\n width: size,\n height: size\n });\n\n this.createVisual();\n\n this.surface.draw(this.visual);\n }\n\n getSize() {\n const element = this.element;\n const elementWidth = element.clientWidth;\n const elementHeight = element.clientHeight;\n const size = { width: 0, height: 0 };\n\n if (elementWidth > 0) {\n size.width = elementWidth;\n }\n\n if (elementHeight) {\n size.height = elementHeight;\n }\n\n return size;\n }\n\n _resize() {\n this.redraw();\n }\n\n createVisual() {\n this.visual = this._render();\n }\n\n exportVisual() {\n return this._render();\n }\n\n _render() {\n let value = this._value,\n baseUnit,\n border = this.options.border || {},\n padding = this.options.padding || 0,\n borderWidth = border.width || 0,\n quietZoneSize,\n matrix,\n size,\n dataSize,\n contentSize;\n\n border.width = borderWidth;\n\n let visual = new draw.Group();\n\n try {\n if (value) {\n matrix = encodeData(value, this.options.errorCorrection, this.options.encoding);\n size = this._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = this._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n\n visual.append(this._renderBackground(size, border));\n visual.append(this._renderMatrix(matrix, baseUnit, quietZoneSize));\n\n if (this._hasCustomLogo()) {\n visual.append(this._renderLogo(size, baseUnit));\n } else if (this._isSwiss()) {\n visual.append(this._renderSwissCode(size, baseUnit));\n }\n }\n } catch (error) {\n this.onError(error);\n }\n\n return visual;\n }\n\n _renderLogo(qrSize, baseUnit) {\n let image;\n let imageRect;\n let center = round(qrSize / 2);\n let logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n let logoUrl = this.options.overlay.imageUrl;\n let position = {\n x: center - logoSize.width / 2,\n y: center - logoSize.height / 2\n };\n\n imageRect = new geom.Rect(\n new geom.Point(position.x, position.y),\n new geom.Size(logoSize.width, logoSize.height)\n );\n\n image = new draw.Image(logoUrl, imageRect);\n\n return image;\n }\n\n _renderSwissCode(qrSize, baseUnit) {\n let logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n logoSize = Math.max(logoSize.width, logoSize.height);\n let crossSize = logoSize / 4;\n let crossOffset = crossSize / 2;\n let center = qrSize / 2;\n let start = {};\n let visual = new draw.Group();\n\n start.x = start.y = Math.ceil(center - baseUnit - logoSize / 2);\n visual.append(this._renderShape(start, Math.ceil(logoSize + baseUnit * 2), squarePattern, \"#fff\"));\n\n start.x = start.y = center - logoSize / 2;\n visual.append(this._renderShape(start, logoSize, squarePattern, this.options.color));\n\n start.x = center + crossOffset - logoSize / 2;\n start.y = center + crossOffset + crossSize - logoSize / 2;\n visual.append(this._renderShape(start, crossSize, crossPattern, \"#fff\"));\n\n return visual;\n }\n\n _renderShape(start, step, pattern, color) {\n let path = new draw.MultiPath({\n fill: {\n color: color\n },\n stroke: null\n });\n\n path.moveTo(start.x, start.y);\n\n for (let i = 0; i < pattern.length; i++) {\n path.lineTo(start.x + step * pattern[i][0], start.y + step * pattern[i][1]);\n }\n\n path.close();\n\n return path;\n }\n\n _getSize() {\n let size;\n\n if (this.options.size) {\n size = parseInt(this.options.size, 10);\n } else {\n const element = this.element;\n const elementSize = surfaceSize(element, this.options.renderAs);\n const min = Math.min(elementSize.width, elementSize.height);\n\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n\n return size;\n }\n\n _calculateBaseUnit(size, matrixSize) {\n let baseUnit = Math.floor(size / matrixSize);\n\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n const minSize = Math.ceil(matrixSize * QRCodeDefaults.MIN_BASE_UNIT_SIZE);\n this.onError(new Error(\n `Insufficient size for QR Code: the current size is ${size}px and the minimum size is ${minSize}px.`\n ));\n } else if (baseUnit * matrixSize >= size &&\n baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n\n return baseUnit;\n }\n\n _renderMatrix(matrix, baseUnit, quietZoneSize) {\n let path = new draw.MultiPath({\n fill: {\n color: this.options.color\n },\n stroke: null\n });\n\n for (let row = 0; row < matrix.length; row++) {\n let y = quietZoneSize + row * baseUnit;\n let column = 0;\n\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n\n if (column < matrix.length) {\n let x = column;\n while (matrix[row][column] === 1) {\n column++;\n }\n\n let x1 = round(quietZoneSize + x * baseUnit);\n let y1 = round(y);\n let x2 = round(quietZoneSize + column * baseUnit);\n let y2 = round(y + baseUnit);\n\n path.moveTo(x1, y1)\n .lineTo(x1, y2)\n .lineTo(x2, y2)\n .lineTo(x2, y1)\n .close();\n }\n }\n }\n\n return path;\n }\n\n _renderBackground(size, border) {\n const box = new Box(0, 0, size, size).unpad(border.width / 2);\n const background = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: this.options.background\n },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n\n return background;\n }\n\n setOptions(options) {\n let newOptions = options || {};\n this.options = extend(this.options, newOptions);\n\n if (options.value !== undefined) {\n this._value = String(this.options.value);\n }\n\n this._initSurface();\n this.redraw();\n }\n\n value(value) {\n if (value === undefined) {\n return this._value;\n }\n\n this._value = String(value);\n\n this.redraw();\n }\n\n _hasCustomLogo() {\n return Boolean(this.options.overlay.imageUrl);\n }\n\n _isSwiss() {\n return this.options.overlay.type === \"swiss\";\n }\n\n _getLogoSize(defautLogoSize) {\n let width = this.options.overlay.width;\n let height = this.options.overlay.height;\n\n if (!width && !height) {\n width = height = defautLogoSize;\n } else if (width && !height) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n\n return {\n width: width,\n height: height\n };\n }\n}\n\nsetDefaultOptions(QRCode, {\n name: \"QRCode\",\n renderAs: \"svg\",\n encoding: \"ISO_8859_1\",\n value: \"\",\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: \"\",\n padding: 0,\n border: {\n color: \"\",\n width: 0\n },\n overlay: {\n type: \"image\",\n imageUrl: \"\",\n width: 0,\n height: 0\n }\n});\n\nexport default QRCode;\n","import { encodeData } from './encodings/encoding';\n\nconst ISO = 'ISO_8859_1';\n\nfunction qrcodeValidator(encoding = ISO) {\n return function(value) {\n try {\n encodeData(value, 'L', encoding);\n } catch (error) {\n return {\n valid: false,\n error\n };\n }\n\n return {\n valid: true\n };\n };\n}\n\nexport default qrcodeValidator;\n","// Coordinate reference system\n// World Geodetic System of 1984\nconst WGS84 = {\n a: 6378137, // Semi-major radius\n b: 6356752.314245179, // Semi-minor radius\n f: 0.0033528106647474805, // Flattening\n e: 0.08181919084262149 // Eccentricity\n};\n\n// Geographic coordinate systems use a spheroid to calculate positions on the earth.\n// A datum defines the position of the spheroid relative to the center of the earth\n// it provides a frame of reference for measuring locations on the surface of the earth\n// and defines the origin and orientation of latitude and longitude lines.\nexport const datums = {\n WGS84\n};\n","import {\n Class,\n deepExtend,\n deg,\n rad,\n round,\n defined\n} from '../common';\n\nimport {\n datums\n} from './datums';\n\nfunction toSquare(value) {\n return value * value;\n}\n\n\nlet math = Math,\n abs = math.abs,\n atan = math.atan,\n atan2 = math.atan2,\n cos = math.cos,\n sin = math.sin,\n tan = math.tan;\n\nexport class Location extends Class {\n constructor(lat, lng) {\n super();\n\n this.initProperties();\n\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n }\n\n initProperties() {\n deepExtend(this, {\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6}{1:N6}'\n });\n }\n\n toArray() {\n return [\n this.lat,\n this.lng\n ];\n }\n\n equals(loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n }\n\n clone() {\n return new Location(this.lat, this.lng);\n }\n\n round(precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n }\n\n wrap() {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n }\n\n distanceTo(dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n }\n\n destination(distance, initialBearing, initialDatum) {\n let bearing = rad(initialBearing);\n let datum = initialDatum || datums.WGS84;\n let fromLat = rad(this.lat);\n let fromLng = rad(this.lng);\n let dToR = distance / datum.a;\n let lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n let lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n\n return new Location(deg(lat), deg(lng));\n }\n\n greatCircleTo(initialDest, initialDatum) {\n let dest = Location.create(dest);\n let datum = initialDatum || datums.WGS84;\n\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n\n // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n // o == sigma\n // A == alpha\n\n let a = datum.a;\n let b = datum.b;\n let f = datum.f;\n let L = rad(dest.lng - this.lng);\n let U1 = atan((1 - f) * tan(rad(this.lat)));\n let sinU1 = sin(U1);\n let cosU1 = cos(U1);\n let U2 = atan((1 - f) * tan(rad(dest.lat)));\n let sinU2 = sin(U2);\n let cosU2 = cos(U2);\n let lambda = L;\n let prevLambda;\n let i = this.DISTANCE_ITERATIONS;\n let converged = false;\n let sinLambda;\n let cosLambda;\n let sino;\n let cosA2;\n let coso;\n let cos2om;\n let sigma;\n\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(toSquare(cosU2 * sinLambda) + toSquare(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n\n let sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - toSquare(sinA);\n cos2om = 0;\n\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n\n prevLambda = lambda;\n let C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * toSquare(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n\n let u2 = cosA2 * (toSquare(a) - toSquare(b)) / toSquare(b);\n let A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n let B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n let deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * toSquare(cos2om)) - B / 6 * cos2om * (-3 + 4 * toSquare(sino)) * (-3 + 4 * toSquare(cos2om))));\n\n let azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n let azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n\n // IE < 9 doesn't allow to override toString on definition\n toString() {\n // return kendo.format(this.FORMAT, this.lat, this.lng);\n return String(this.lat) + \",\" + String(this.lng);\n }\n\n static fromLngLat(lngAndLat) {\n return new Location(lngAndLat[1], lngAndLat[0]);\n }\n\n static fromLatLng(lngAndLat) {\n return new Location(lngAndLat[0], lngAndLat[1]);\n }\n\n static create(a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n }\n\n return new Location(a, b);\n }\n }\n}\n","import {\n geometry as g\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n setDefaultOptions,\n limitValue,\n rad,\n deg,\n deepExtend\n} from '../common';\n\nimport {\n Location\n} from './location';\n\nimport {\n datums\n} from './datums';\n\n\nlet math = Math,\n atan = math.atan,\n exp = math.exp,\n pow = math.pow,\n sin = math.sin,\n log = math.log,\n tan = math.tan,\n Point = g.Point;\n\nlet PI = math.PI,\n PI_DIV_2 = PI / 2,\n PI_DIV_4 = PI / 4,\n DEG_TO_RAD = PI / 180;\n\nlet WGS84 = datums.WGS84;\n\n// WGS 84 / World Mercator\nexport class Mercator extends Class {\n constructor(options) {\n super();\n this.initProperties();\n this._initOptions(options);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n initProperties() {\n // super.initProperties();\n\n deepExtend(this, {\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12\n });\n }\n\n forward(loc, clamp) {\n let proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lat = limitValue(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n lng = clamp ? limitValue(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n x = rad(lng - lng0) * r,\n y = proj._projectLat(lat);\n return new Point(x, y);\n }\n _projectLat(lat) {\n let datum = this.options.datum,\n ecc = datum.e,\n r = datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2),\n con = ecc * sin(y),\n p = pow((1 - con) / (1 + con), ecc / 2);\n\n // See: http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n return r * log(ts * p);\n }\n inverse(point, clamp) {\n let proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lng = point.x / (DEG_TO_RAD * r) + lng0,\n lat = limitValue(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limitValue(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n }\n _inverseY(y) {\n let proj = this,\n datum = proj.options.datum,\n r = datum.a,\n ecc = datum.e,\n ecch = ecc / 2,\n ts = exp(-y / r),\n phi = PI_DIV_2 - 2 * atan(ts),\n i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n let con = ecc * sin(phi),\n p = pow((1 - con) / (1 + con), ecch),\n dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n}\n\nsetDefaultOptions(Mercator, {\n centralMeridian: 0,\n datum: WGS84\n});\n\n\n// WGS 84 / Pseudo-Mercator\n// Used by Google Maps, Bing, OSM, etc.\n// Spherical projection of ellipsoidal coordinates.\nexport class SphericalMercator extends Mercator {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, {\n MAX_LAT: 85.0511287798\n });\n }\n\n _projectLat(lat) {\n let r = this.options.datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n }\n\n _inverseY(y) {\n let r = this.options.datum.a,\n ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n}\n\nexport class Equirectangular extends Class {\n forward(loc) {\n return new Point(loc.lng, loc.lat);\n }\n inverse(point) {\n return new Location(point.y, point.x);\n }\n}\n\n// This is the projected coordinate system used for rendering maps in Google Maps, OpenStreetMap, etc\n// Unit: metre\n// Geodetic CRS: WGS 84\n// Scope: Certain Web mapping and visualisation applications. It is not a recognised geodetic system: for that see ellipsoidal Mercator CRS code 3395 (WGS 84 / World Mercator).\n// Remarks: Uses spherical development of ellipsoidal coordinates. Relative to WGS 84 / World Mercator (CRS code 3395) errors of 0.7 percent in scale and differences in northing of up to 43km in the map (equivalent to 21km on the ground) may arise.\n// Area of use: World between 85.06°S and 85.06°N.\n// Coordinate system: Cartesian 2D CS. Axes: easting, northing (X,Y). Orientations: east, north. UoM: m.\n// https://epsg.io/3857\nexport class EPSG3857 extends Class {\n constructor() {\n super();\n let crs = this,\n proj = crs._proj = new SphericalMercator();\n let c = this.c = 2 * PI * proj.options.datum.a;\n\n // transfrom matrix\n // Scale circumference to 1, mirror Y and shift origin to top left\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n\n // Inverse transform matrix\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n }\n\n // Location <-> Point (screen coordinates for a given scale)\n toPoint(loc, scale, clamp) {\n let point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n }\n toLocation(point, scale, clamp) {\n let newPoint = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(newPoint, clamp);\n }\n}\n\n// Unit: metre\n// Geodetic CRS: WGS 84\n// Scope: Very small scale mapping.\n// Remarks: Euro-centric view of world excluding polar areas.\n// Area of use: World between 80°S and 84°N.\n// Coordinate system: Cartesian 2D CS. Axes: easting, northing (E,N). Orientations: east, north. UoM: m.\n// https://epsg.io/3395\nexport class EPSG3395 extends Class {\n constructor() {\n super();\n this._proj = new Mercator();\n }\n toPoint(loc) {\n return this._proj.forward(loc);\n }\n toLocation(point) {\n return this._proj.inverse(point);\n }\n}\n\n// Unit: degree\n// Geodetic CRS: WGS 84\n// Scope: Horizontal component of 3D system. Used by the GPS satellite navigation system and for NATO military geodetic surveying.\n// Area of use: World.\n// Coordinate system: Ellipsoidal 2D CS. Axes: latitude, longitude. Orientations: north, east. UoM: degree\n// https://epsg.io/4326\nexport class EPSG4326 extends Class {\n constructor() {\n super();\n this._proj = new Equirectangular();\n }\n toPoint(loc) {\n return this._proj.forward(loc);\n }\n toLocation(point) {\n return this._proj.inverse(point);\n }\n}\n","import {\n isFunction,\n isArray\n} from '../common';\n\n/* eslint-disable arrow-body-style */\n\nconst defineProperty = Object.defineProperty;\n\nexport const extend = Object.assign;\n\nexport let convertToHtml = (html) => {\n const div = document.createElement(\"div\");\n div.innerHTML = html;\n return div.firstChild;\n};\n\nexport let appendHtml = (html, element) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n\n // use childNodes instead of children\n // to cover text nodes as well\n while (div.childNodes.length > 0) {\n element.appendChild(div.childNodes[0]);\n }\n};\n\nexport let removeChildren = (element) => {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n};\n\nexport let prepend = (element, originElement) => {\n originElement.insertBefore(element, originElement.firstChild);\n};\n\nexport let wrapInner = (parent, wrapper) => {\n parent.appendChild(wrapper);\n\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n};\n\nexport let toHyphens = (str) => {\n const result = str.replace(/([a-z][A-Z])/g, function(g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n\n return result;\n};\n\nexport let toPixels = (value) => {\n let result;\n\n if (value && String(value).endsWith(\"px\")) {\n result = value;\n } else {\n result = String(value) + \"px\";\n }\n\n return result;\n};\n\nconst detectOS = (ua) => {\n let os = false, minorVersion, match = [],\n // notAndroidPhone = !/mobile safari/i.test(ua),\n agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n },\n osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n },\n formFactorRxs = {\n tablet: /playbook|ipad|fire/i\n },\n browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n\n for (let agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent === \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n os = {};\n os.device = agent;\n os.tablet = testRegex(agent, formFactorRxs, false);\n os.browser = testRegex(ua, browserRxs, \"default\");\n os.name = testRegex(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || \"0\").replace(\"_\", \".\");\n minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n\n\n break;\n }\n }\n }\n\n return os;\n};\n\nfunction testRegex(agent, regexes, dflt) {\n for (let regex in regexes) {\n if (regexes.hasOwnProperty(regex) && regexes[regex].test(agent)) {\n return regex;\n }\n }\n return dflt !== undefined ? dflt : agent;\n}\n\nexport let hasNativeScrolling = (userAgent) => {\n const os = detectOS(userAgent);\n return os.ios || os.android;\n};\n\nconst detectBrowser = (userAgent) => {\n let browser = false,\n match = [],\n browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n\n for (let agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = userAgent.match(browserRxs[agent]);\n\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n break;\n }\n }\n }\n\n return browser;\n};\n\nexport let getEventMap = () => {\n let eventMap = {\n down: \"touchstart mousedown\",\n move: \"mousemove touchmove\",\n up: \"mouseup touchend touchcancel\",\n cancel: \"mouseleave touchcancel\"\n };\n\n const support = getSupportedFeatures();\n\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: \"touchstart\",\n move: \"touchmove\",\n up: \"touchend touchcancel\",\n cancel: \"touchcancel\"\n };\n } else if (support.pointers) {\n eventMap = {\n down: \"pointerdown\",\n move: \"pointermove\",\n up: \"pointerup\",\n cancel: \"pointercancel pointerleave\"\n };\n } else if (support.msPointers) {\n eventMap = {\n down: \"MSPointerDown\",\n move: \"MSPointerMove\",\n up: \"MSPointerUp\",\n cancel: \"MSPointerCancel MSPointerLeave\"\n };\n }\n\n return eventMap;\n};\n\nexport const getSupportedFeatures = () => {\n const os = detectOS(navigator.userAgent);\n const browser = detectBrowser(navigator.userAgent);\n\n let chrome = browser.chrome,\n mobileChrome = browser.crios,\n mozilla = browser.mozilla,\n safari = browser.safari;\n\n const support = {};\n\n support.mobileOS = os;\n support.touch = \"ontouchstart\" in window;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.eventCapture = document.documentElement.addEventListener;\n\n let table = document.createElement(\"table\");\n\n let transitions = support.transitions = false,\n transforms = support.transforms = false;\n\n const STRING = \"string\";\n\n [\"Moz\", \"webkit\", \"O\", \"ms\"].forEach(function(prefix) {\n let hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n let lowPrefix = prefix.toLowerCase();\n\n transforms = {\n css: (lowPrefix !== \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n prefix: prefix,\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n };\n\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n }\n\n return false;\n }\n });\n\n table = null;\n\n support.transforms = transforms;\n support.transitions = transitions;\n\n support.delayedClick = function() {\n // only the mobile devices with touch events do this.\n if (support.touch) {\n // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n // delay their click events.\n if (support.mobileOS.ios) {\n return true;\n }\n\n if (support.mobileOS.android) {\n\n if (!support.browser.chrome) { // older webkits and webviews delay the click\n return true;\n }\n\n // from here on, we deal with Chrome on Android.\n if (support.browser.version < 32) {\n return false;\n }\n\n // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n const meta = document.querySelector(\"meta[name=viewport]\");\n const contentAttr = meta ? meta.getAttribute(\"content\") : \"\";\n return !contentAttr.match(/user-scalable=no/i);\n }\n }\n\n return false;\n };\n\n return support;\n};\n\nexport const ownsElement = (parent, element) => {\n if (!element) {\n return false;\n }\n\n let node = element.parentNode;\n\n while (node !== null) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n};\n\nexport const contains = (parent, element) => {\n return parent === element || ownsElement(parent, element);\n};\n\nexport const proxy = (method, context) => {\n return method.bind(context);\n};\n\nfunction isString(value) {\n return typeof(value) === \"string\";\n}\n\nexport const on = (element, events, filter, handler, useCapture) => {\n addEventListeners(element, events, filter, handler, useCapture);\n};\n\nexport const addEventListeners = (element, events, filter, handler, useCapture) => {\n const eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n eventNames.forEach(function(eventName) {\n addEventListener(element, eventName, filter, handler, useCapture);\n });\n};\n\nexport const addEventListener = (element, event, filter, handler, useCapture) => {\n let eventHandler = handler;\n let eventFilter;\n\n if (filter && isFunction(filter) && !handler) {\n eventHandler = filter;\n } else if (filter && isString(filter) && isFunction(eventHandler)) {\n eventFilter = filter;\n }\n\n element.addEventListener(event, function(e) {\n const closestMatchingTarget = e.target ? e.target.closest(eventFilter) : null;\n\n if (!eventFilter ||\n (eventFilter && e.target && closestMatchingTarget)) {\n const currentTarget = eventFilter ? closestMatchingTarget : e.currentTarget;\n\n // reassign the property as it is a getters only\n defineProperty(e, \"currentTarget\", { value: currentTarget });\n // keep a reference to the top-level target\n defineProperty(e, \"delegateTarget\", { value: element });\n\n eventHandler(e);\n }\n }, Boolean(useCapture));\n};\n\nexport const off = (element, events, filter, handler, useCapture) => {\n removeEventListeners(element, events, filter, handler, useCapture);\n};\n\nexport const removeEventListeners = (element, events, handler, useCapture) => {\n const eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n eventNames.forEach(function(eventName) {\n removeEventListener(element, eventName, handler, useCapture);\n });\n};\n\nexport const removeEventListener = (element, event, handler, useCapture) => {\n element.removeEventListener(event, handler, Boolean(useCapture));\n};\n\nexport const applyEventMap = (events) => {\n const eventMap = getEventMap(navigator.userAgent);\n function queryEventMap(e) {\n return eventMap[e] || e;\n }\n\n const eventRegEx = /([^ ]+)/g;\n const appliedEvents = events.replace(eventRegEx, queryEventMap);\n\n return appliedEvents;\n};\n\nexport const setDefaultEvents = (type, events) => {\n const proto = type.prototype;\n\n if (proto.events) {\n events.forEach(event => {\n if (proto.events.indexOf(event) < 0) {\n proto.events.push(event);\n }\n });\n } else {\n proto.events = events;\n }\n};\n\nexport const wheelDeltaY = (jQueryEvent) => {\n const e = jQueryEvent.originalEvent || jQueryEvent;\n const deltaY = e.wheelDeltaY;\n let delta;\n\n if (e.wheelDelta) { // Webkit and IE\n if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n delta = (-e.detail) * 10;\n }\n\n return delta;\n};\n\nexport const guid = () => {\n let id = \"\";\n let i;\n let random;\n\n for (i = 0; i < 32; i++) {\n random = Math.random() * 16 | 0;\n\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16); // eslint-disable-line no-nested-ternary\n }\n\n return id;\n};\n\nexport const now = () => {\n return Number(new Date());\n};\n\nexport const noop = () => {};\n\n/* eslint-enable arrow-body-style */\n","import {\n Class\n} from '../../common';\n\nconst STRING = \"string\";\nconst FUNCTION = \"function\";\n\nlet preventDefault = function() {\n this._defaultPrevented = true;\n};\n\nlet isDefaultPrevented = function() {\n return this._defaultPrevented === true;\n};\n\nexport class Observable extends Class {\n constructor() {\n super();\n this._events = {};\n }\n\n destroy() {\n this.unbind();\n }\n\n bind(event, handlers, one) {\n let that = this,\n idx,\n eventNames = typeof event === STRING ? [event] : event || [],\n length,\n original,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n if (handlers === undefined) {\n for (idx in event) {\n that.bind(idx, event[idx]);\n }\n\n return that;\n }\n\n /* eslint-disable no-loop-func */\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n let eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n original = handler;\n handler = function() {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n\n handler.original = original;\n }\n\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n /* eslint-enable no-loop-func */\n\n return that;\n }\n\n one(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n }\n\n first(eventName, handlers) {\n let that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n let eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return that;\n }\n\n trigger(eventName, eventArgs) {\n let that = this,\n events = that._events[eventName],\n idx,\n length;\n\n if (events) {\n let e = eventArgs || {};\n\n e.sender = that;\n\n e._defaultPrevented = false;\n\n e.preventDefault = preventDefault;\n\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n }\n\n unbind(eventName, handler) {\n let that = this,\n events = that._events[eventName],\n idx;\n\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n\n return that;\n }\n\n _setEvents(options) {\n const length = (this.events || []).length;\n\n for (let idx = 0; idx < length; idx ++) {\n let e = this.events[idx];\n\n if (this.options[e] && options[e]) {\n this.unbind(e, this.options[e]);\n\n if (this._events && this._events[e]) {\n delete this._events[e];\n }\n }\n }\n\n this.bind(this.events, options);\n }\n}\n","import {\n addClass,\n defined,\n valueOrDefault,\n deepExtend,\n setDefaultOptions\n} from '../common';\n\nimport TemplateService from '../services/template-service';\n\nimport {\n appendHtml,\n removeChildren\n} from './utils';\n\nimport { Observable } from './scroller/observable';\n\nlet template = TemplateService.compile;\n\nexport class Attribution extends Observable {\n constructor(element, options) {\n super();\n this.element = element;\n\n this._initOptions(options);\n this.items = [];\n\n addClass(this.element, 'k-widget k-attribution');\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n filter(extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n }\n\n add(item) {\n let newItem = item;\n\n if (defined(item)) {\n if (typeof item === 'string') {\n newItem = {\n text: item\n };\n }\n\n this.items.push(newItem);\n this._render();\n }\n }\n\n remove(text) {\n let result = [];\n\n for (let i = 0; i < this.items.length; i++) {\n let item = this.items[i];\n\n if (item.text !== text) {\n result.push(item);\n }\n }\n\n this.items = result;\n this._render();\n }\n\n clear() {\n this.items = [];\n removeChildren(this.element);\n }\n\n _render() {\n let result = [];\n let itemTemplate = template(this.options.itemTemplate);\n\n for (let i = 0; i < this.items.length; i++) {\n let item = this.items[i];\n let text = this._itemText(item);\n\n if (text !== '') {\n result.push(itemTemplate({\n text: text\n }));\n }\n }\n\n if (result.length > 0) {\n removeChildren(this.element);\n\n const html = result.join(this.options.separator);\n appendHtml(html, this.element);\n\n this.showElement();\n } else {\n this.hideElement();\n }\n }\n\n hideElement() {\n this.element.style.display = \"none\";\n }\n\n showElement() {\n this.element.style.display = \"\";\n }\n\n _itemText(item) {\n let text = '';\n let inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n let inArea = this._inArea(item.extent);\n\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n\n return text;\n }\n\n _inZoomLevel(min, max) {\n let result = true;\n let newMin = valueOrDefault(min, -Number.MAX_VALUE);\n let newMax = valueOrDefault(max, Number.MAX_VALUE);\n\n result = this._zoom > newMin && this._zoom < newMax;\n return result;\n }\n\n _inArea(area) {\n let result = true;\n\n if (area) {\n result = area.contains(this._extent);\n }\n\n return result;\n }\n}\n\nsetDefaultOptions(Attribution, {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n});\n\n","import {\n deepExtend,\n addClass,\n keys,\n setDefaultOptions\n} from '../common';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport {\n proxy,\n on,\n off,\n setDefaultEvents,\n convertToHtml\n} from './utils';\n\nconst PAN = \"pan\";\n\nconst directionsMap = {\n up: {\n className: \"k-navigator-n\",\n iconClass: \"k-i-arrow-n\"\n },\n down: {\n className: \"k-navigator-s\",\n iconClass: \"k-i-arrow-s\"\n },\n right: {\n className: \"k-navigator-e\",\n iconClass: \"k-i-arrow-e\"\n },\n left: {\n className: \"k-navigator-w\",\n iconClass: \"k-i-arrow-w\"\n }\n};\n\nfunction createButton(direction) {\n const html =\n '';\n\n return convertToHtml(html);\n}\n\nexport class Navigator extends Observable {\n constructor(element, options) {\n super();\n\n this.element = element;\n this._initOptions(options);\n\n const navigateUpButton = createButton(\"up\");\n const navigateRightlButton = createButton(\"right\");\n const navigateDownButton = createButton(\"down\");\n const navigateLeftButton = createButton(\"left\");\n\n this.element.appendChild(navigateUpButton);\n this.element.appendChild(navigateRightlButton);\n this.element.appendChild(navigateDownButton);\n this.element.appendChild(navigateLeftButton);\n\n addClass(this.element, 'k-widget k-navigator');\n\n on(this.element, \"click\", \".k-button\", proxy(this._click, this));\n\n let parentElement = this.element.parentNode.closest(\"[data-role]\");\n\n this._keyroot = parentElement ? parentElement : this.element;\n this._tabindex(this._keyroot);\n\n this._keydownHandler = proxy(this._keydown, this);\n on(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n destroy() {\n this.dispose();\n }\n\n // originates from the kendo.jquery version\n dispose() {\n off(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n _tabindex(target) {\n const targetElement = target || this.wrapper || this.element;\n\n let element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = targetElement.getAttribute(TABINDEX) || element.getAttribute(TABINDEX);\n\n element.removeAttribute(TABINDEX);\n\n targetElement.setAttribute(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _pan(x, y) {\n let panStep = this.options.panStep;\n\n this.trigger(PAN, {\n x: x * panStep,\n y: y * panStep\n });\n }\n\n _click(e) {\n let x = 0;\n let y = 0;\n let button = e.currentTarget;\n\n if (button.matches('.k-navigator-n')) {\n y = 1;\n } else if (button.matches('.k-navigator-s')) {\n y = -1;\n } else if (button.matches('.k-navigator-e')) {\n x = 1;\n } else if (button.matches('.k-navigator-w')) {\n x = -1;\n }\n\n this._pan(x, y);\n\n e.preventDefault();\n }\n\n /* eslint-disable indent */\n _keydown(e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n default:\n break;\n }\n }\n /* eslint-enable indent */\n}\n\nsetDefaultOptions(Navigator, {\n name: 'Navigator',\n panStep: 1\n});\n\n\nsetDefaultEvents(Navigator, [\n PAN\n]);\n","let keys = {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n};\n\nexport default keys;\n","import {\n deepExtend,\n addClass,\n keys,\n hasClasses,\n setDefaultOptions\n} from '../common';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport {\n on,\n off,\n setDefaultEvents,\n convertToHtml\n} from './utils';\n\nfunction createButton(direction, iconClass) {\n const html =\n '';\n\n return convertToHtml(html);\n}\n\nlet PLUS = 187;\nlet MINUS = 189;\nlet FF_PLUS = 61;\nlet FF_MINUS = 173;\nconst CHANGE = \"change\";\n\nexport class ZoomControl extends Observable {\n constructor(element, options) {\n super();\n this.element = element;\n this._initOptions(options);\n\n const zoomInButton = createButton('in', 'k-i-plus');\n const zoomOutButton = createButton('out', 'k-i-minus');\n\n this.element.appendChild(zoomInButton);\n this.element.appendChild(zoomOutButton);\n\n addClass(this.element, 'k-widget k-zoom-control k-button-group k-group-horizontal');\n\n this._clickHandler = this._click.bind(this);\n on(this.element, \"click\", \".k-button\", this._clickHandler);\n\n let parentElement = this.element.parentNode.closest(\"[data-role]\");\n\n this._keyroot = parentElement ? parentElement : this.element;\n\n this._tabindex(this._keyroot);\n\n this._keydownHandler = this._keydown.bind(this);\n on(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n destroy() {\n if (this.element) {\n off(this.element, \"click\", this._clickHandler);\n }\n\n if (this._keyroot) {\n off(this._keyroot, 'keydown', this._keydownHandler);\n }\n }\n\n _tabindex(target) {\n const targetElement = target || this.wrapper || this.element;\n\n let element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = targetElement.getAttribute(TABINDEX) || element.getAttribute(TABINDEX);\n\n element.removeAttribute(TABINDEX);\n\n targetElement.setAttribute(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _change(direction) {\n let zoomStep = this.options.zoomStep;\n this.trigger(CHANGE, { delta: direction * zoomStep });\n }\n\n _click(e) {\n let button = e.currentTarget;\n let direction = 1;\n\n if (hasClasses(button, 'k-zoom-out')) {\n direction = -1;\n }\n\n this._change(direction);\n e.preventDefault();\n }\n\n /* eslint-disable indent */\n _keydown(e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n default:\n break;\n }\n }\n /* eslint-enable indent */\n}\n\nsetDefaultOptions(ZoomControl, {\n name: 'ZoomControl',\n zoomStep: 1\n});\n\nsetDefaultEvents(ZoomControl, [\n CHANGE\n]);\n","import {\n Class,\n valueOrDefault\n} from '../common';\n\nimport { Location } from './location';\n\nlet math = Math,\n max = math.max,\n min = math.min;\n\nexport class Extent extends Class {\n constructor(initialNw, initialSe) {\n super();\n let nw = Location.create(initialNw);\n let se = Location.create(initialSe);\n\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n }\n\n contains(loc) {\n let nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n\n return loc &&\n lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 &&\n lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n }\n\n center() {\n let nw = this.nw;\n let se = this.se;\n let lng = nw.lng + (se.lng - nw.lng) / 2;\n let lat = nw.lat + (se.lat - nw.lat) / 2;\n\n return new Location(lat, lng);\n }\n\n containsAny(locs) {\n let result = false;\n\n for (let i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n\n return result;\n }\n\n include(loc) {\n let nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n }\n\n includeAll(locs) {\n for (let i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n }\n\n edges() {\n let nw = this.nw, se = this.se;\n\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n }\n\n toArray() {\n let nw = this.nw, se = this.se;\n\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n }\n\n overlaps(extent) {\n return this.containsAny(extent.toArray()) ||\n extent.containsAny(this.toArray());\n }\n\n static create(a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n }\n\n static get World() {\n return new Extent([ 90, -180 ], [ -90, 180 ]);\n }\n}\n","import {\n Class,\n addClass,\n deepExtend,\n defined\n} from '../../common';\n\nimport {\n Extent\n} from './../extent';\n\nimport {\n getSupportedFeatures\n} from '../utils';\n\nexport class Layer extends Class {\n constructor(map, options) {\n super();\n\n this.support = getSupportedFeatures();\n\n this._initOptions(options);\n this.map = map;\n\n let element = document.createElement(\"div\");\n addClass(element, \"k-layer\");\n element.style.zIndex = this.options.zIndex;\n element.style.opacity = this.options.opacity;\n\n this.element = element;\n\n map.scrollElement.appendChild(this.element);\n\n this._beforeReset = this._beforeReset.bind(this);\n this._reset = this._reset.bind(this);\n this._resize = this._resize.bind(this);\n this._panEnd = this._panEnd.bind(this);\n\n this._activate();\n this._updateAttribution();\n }\n\n destroy() {\n this._deactivate();\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n show() {\n this.reset();\n this._activate();\n this._applyExtent(true);\n }\n\n hide() {\n this._deactivate();\n this._setVisibility(false);\n }\n\n reset() {\n this._beforeReset();\n this._reset();\n }\n\n _reset() {\n this._applyExtent();\n }\n\n _beforeReset() {\n\n }\n\n _resize() {\n\n }\n\n _panEnd() {\n this._applyExtent();\n }\n\n _applyExtent() {\n let options = this.options;\n let zoom = this.map.zoom();\n let matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n let matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n let extent = Extent.create(options.extent);\n let inside = !extent || extent.overlaps(this.map.extent());\n\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n }\n\n _setVisibility(visible) {\n this.element.style.display = visible ? '' : 'none';\n }\n\n _activate() {\n let map = this.map;\n\n this._deactivate();\n\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n }\n\n _deactivate() {\n let map = this.map;\n\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n }\n\n _updateAttribution() {\n const attribution = this.map.attribution;\n\n if (attribution) {\n attribution.add(this.options.attribution);\n }\n }\n\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _hasData() {\n return this._data && this._data.length > 0;\n }\n}\n","import {\n geometry as g,\n throttle\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n addClass,\n deepExtend,\n round,\n limitValue,\n hashKey,\n setDefaultOptions\n} from '../../common';\n\nimport { removeChildren } from '../utils';\n\nimport { Layer } from './layer';\n\nimport TemplateService from '../../services/template-service';\n\nlet math = Math,\n template = TemplateService.compile,\n Point = g.Point;\n\nfunction roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n}\n\nfunction renderSize(size) {\n let newSize = size;\n\n if (typeof(size) !== \"string\") {\n newSize += \"px\";\n }\n\n return newSize;\n}\n\nexport class TileLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n\n let viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n }\n\n destroy() {\n super.destroy();\n this._view.destroy();\n this._view = null;\n }\n\n _beforeReset() {\n let map = this.map;\n let origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n }\n\n _reset() {\n super._reset();\n this._updateView();\n this._view.reset();\n }\n\n _viewType() {\n return TileView;\n }\n\n _activate() {\n super._activate();\n\n if (!this.support.mobileOS) {\n if (!this._pan) {\n this._pan = throttle(this._render.bind(this), 100);\n }\n\n this.map.bind('pan', this._pan);\n }\n }\n\n _deactivate() {\n super._deactivate();\n\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n }\n\n _updateView() {\n let view = this._view,\n map = this.map,\n extent = map.extent(),\n extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n }\n\n _resize() {\n this._render();\n }\n\n _panEnd(e) {\n super._panEnd(e);\n this._render();\n }\n\n _render() {\n this._updateView();\n this._view.render();\n }\n}\n\nsetDefaultOptions(TileLayer, {\n tileSize: 256,\n subdomains: ['a', 'b', 'c'],\n urlTemplate: '',\n zIndex: 1\n});\n\nexport class TileView extends Class {\n constructor(element, options) {\n super();\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n center(center) {\n this._center = center;\n }\n\n extent(extent) {\n this._extent = extent;\n }\n\n viewOrigin(origin) {\n this._viewOrigin = origin;\n }\n\n zoom(zoom) {\n this._zoom = zoom;\n }\n\n pointToTileIndex(point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n }\n\n tileCount() {\n let size = this.size(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n nw = this._extent.nw,\n point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n }\n\n size() {\n let nw = this._extent.nw,\n se = this._extent.se,\n diff = se.clone().translate(-nw.x, -nw.y);\n\n return {\n width: diff.x,\n height: diff.y\n };\n }\n\n indexToPoint(index) {\n let x = index.x,\n y = index.y;\n\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n }\n\n subdomainText() {\n let subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n }\n\n destroy() {\n removeChildren(this.element);\n this.pool.empty();\n }\n\n reset() {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n }\n\n render() {\n let size = this.tileCount(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n tile, x, y;\n\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n }\n\n createTile(currentIndex) {\n let options = this.tileOptions(currentIndex);\n let tile = this.pool.get(this._center, options);\n\n if (!tile.element.parentNode) {\n this.element.append(tile.element);\n }\n\n return tile;\n }\n\n tileOptions(currentIndex) {\n let index = this.wrapIndex(currentIndex),\n point = this.indexToPoint(currentIndex),\n origin = this._viewOrigin,\n offset = point.clone().translate(-origin.x, -origin.y);\n\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n }\n\n wrapIndex(index) {\n let boundary = math.pow(2, this._zoom);\n\n return {\n x: this.wrapValue(index.x, boundary),\n y: limitValue(index.y, 0, boundary - 1)\n };\n }\n\n wrapValue(value, boundary) {\n let remainder = math.abs(value) % boundary;\n let wrappedValue = value;\n\n if (value >= 0) {\n wrappedValue = remainder;\n } else {\n wrappedValue = boundary - (remainder === 0 ? boundary : remainder);\n }\n\n return wrappedValue;\n }\n}\n\nexport class ImageTile extends Class {\n constructor(id, options) {\n super();\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n }\n\n destroy() {\n const element = this.element;\n const parentNode = element ? element.parentNode : null;\n\n if (element) {\n if (parentNode) {\n parentNode.removeChild(element);\n }\n\n this.element = null;\n }\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n createElement() {\n let el = document.createElement(\"img\");\n addClass(el, \"k-layer\");\n el.style.position = \"absolute\";\n el.style.display = \"block\";\n el.style.width = this.options.size;\n el.style.height = this.options.size;\n\n this.element = el;\n\n // todo\n // add on error handler\n\n // this.element =\n // $('
')\n // .css({\n // width: this.options.size,\n // height: this.options.size\n // })\n // .on('error', proxy(function(e) {\n // if (this.errorUrl()) {\n // e.target.setAttribute('src', this.errorUrl());\n // } else {\n // e.target.removeAttribute('src');\n // }\n // }, this));\n }\n\n show() {\n let element = this.element;\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n\n let url = this.url();\n\n if (url) {\n element.setAttribute('src', url);\n }\n\n element.style.visibility = 'visible';\n this.visible = true;\n }\n\n hide() {\n this.element.style.visibility = 'hidden';\n this.visible = false;\n }\n\n url() {\n let urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n }\n\n errorUrl() {\n let urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n }\n\n urlOptions() {\n let options = this.options;\n\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n }\n}\n\nsetDefaultOptions(ImageTile, {\n urlTemplate: '',\n errorUrlTemplate: ''\n});\n\nexport class TilePool extends Class {\n constructor() {\n super();\n this._items = [];\n }\n\n get(center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n\n return this._create(options);\n }\n\n empty() {\n let items = this._items;\n\n for (let i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n\n this._items = [];\n }\n\n reset() {\n let items = this._items;\n\n for (let i = 0; i < items.length; i++) {\n items[i].hide();\n }\n }\n\n _create(options) {\n let items = this._items;\n let tile;\n let id = hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n\n return tile;\n }\n\n _remove(center) {\n let items = this._items;\n let maxDist = -1;\n let index = -1;\n\n for (let i = 0; i < items.length; i++) {\n let dist = items[i].options.point.distanceTo(center);\n\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n}\n\nsetDefaultOptions(TilePool, {\n maxSize: 100\n});\n","import {\n Class,\n elementOffset\n} from '../../common';\n\nimport {\n Observable\n} from './observable';\n\nimport {\n getEventMap,\n proxy,\n getSupportedFeatures\n} from '../utils';\n\nconst extend = Object.assign;\n\nconst CHANGE = 'change';\n\nexport class TapCapture extends Observable {\n constructor(element, options) {\n super();\n let that = this,\n domElement = element[0] || element;\n\n that.capture = false;\n\n const eventMap = getEventMap(navigator.userAgent);\n\n if (domElement.addEventListener) {\n eventMap.down.split(' ').forEach(function(event) {\n domElement.addEventListener(event, proxy(that._press, that), true);\n });\n eventMap.up.split(' ').forEach(function(event) {\n domElement.addEventListener(event, proxy(that._release, that), true);\n });\n } else {\n eventMap.down.split(' ').forEach(function(event) {\n domElement.attachEvent(event, proxy(that._press, that));\n });\n eventMap.up.split(' ').forEach(function(event) {\n domElement.attachEvent(event, proxy(that._release, that));\n });\n }\n\n that.bind([\n 'press',\n 'release'\n ], options || {});\n }\n\n captureNext() {\n this.capture = true;\n }\n\n cancelCapture() {\n this.capture = false;\n }\n\n _press(e) {\n let that = this;\n\n that.trigger('press');\n\n if (that.capture) {\n e.preventDefault();\n }\n }\n\n _release(e) {\n let that = this;\n\n that.trigger('release');\n\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n}\n\nexport class PaneDimension extends Observable {\n constructor(options) {\n super();\n let that = this;\n that.forcedEnabled = false;\n extend(that, options);\n that.scale = 1;\n\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n }\n\n makeVirtual() {\n extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n }\n\n virtualSize(min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n }\n\n outOfBounds(offset) {\n return offset > this.max || offset < this.min;\n }\n\n forceEnabled() {\n this.forcedEnabled = true;\n }\n\n getSize() {\n return this.container[this.measure];\n }\n\n getTotal() {\n return this.element[this.scrollSize];\n }\n\n rescale(scale) {\n this.scale = scale;\n }\n\n update(silent) {\n let that = this,\n total = that.virtual ? that._virtualMax : that.getTotal(),\n scaledTotal = total * that.scale,\n size = that.getSize();\n\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n}\n\nexport class PaneDimensions extends Observable {\n constructor(options) {\n super();\n let that = this;\n\n that.x = new PaneDimension(extend({\n horizontal: true\n }, options));\n\n that.y = new PaneDimension(extend({\n horizontal: false\n }, options));\n\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n }\n\n rescale(newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n }\n\n centerCoordinates() {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n }\n\n refresh() {\n let that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n}\n\nexport class PaneAxis extends Observable {\n constructor(options) {\n super();\n extend(this, options);\n }\n\n outOfBounds() {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n }\n\n dragMove(delta) {\n let that = this,\n dimension = that.dimension,\n axis = that.axis,\n movable = that.movable,\n position = movable[axis] + delta;\n\n if (!dimension.enabled) {\n return;\n }\n\n let dragDelta = delta;\n\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n dragDelta *= that.resistance;\n }\n\n movable.translateAxis(axis, dragDelta);\n that.trigger(CHANGE, that);\n }\n}\n\nexport class Pane extends Class {\n constructor(options) {\n super();\n\n let that = this,\n x, y,\n resistance,\n movable;\n\n extend(that, {\n elastic: true\n }, options);\n\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart(e) {\n that.gesture = e;\n\n that.offset = elementOffset(that.dimensions.container);\n },\n press(e) {\n const closestAnchor = e.event.target.closest('a');\n\n if (closestAnchor && closestAnchor.matches('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange(e) {\n let previousGesture = that.gesture,\n previousCenter = previousGesture.center,\n center = e.center,\n scaleDelta = e.distance / previousGesture.distance,\n minScale = that.dimensions.minScale,\n maxScale = that.dimensions.maxScale,\n coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n\n let offsetX = movable.x + that.offset.left,\n offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n\n movable.scaleWith(scaleDelta);\n\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n\n e.preventDefault();\n },\n move(e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end(e) {\n e.preventDefault();\n }\n });\n }\n}\n\nlet translate = function(x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n};\n\nexport class Movable extends Observable {\n constructor(element) {\n super();\n\n let that = this;\n\n that.support = getSupportedFeatures();\n this.transformStyle = this.support.transitions.prefix + 'Transform';\n that.element = element;\n that.element.style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n\n const coordinates = translate(that.x, that.y, that.scale);\n that.element.style[this.transformStyle] = coordinates;\n\n that._saveCoordinates(coordinates);\n }\n\n translateAxis(axis, by) {\n this[axis] += by;\n this.refresh();\n }\n\n scaleTo(scale) {\n this.scale = scale;\n this.refresh();\n }\n\n scaleWith(scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n }\n\n translate(coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n }\n\n moveAxis(axis, value) {\n this[axis] = value;\n this.refresh();\n }\n\n moveTo(coordinates) {\n extend(this, coordinates);\n this.refresh();\n }\n\n refresh() {\n let that = this,\n x = that.x,\n y = that.y,\n newCoordinates;\n\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n\n newCoordinates = translate(x, y, that.scale);\n\n if (newCoordinates !== that.coordinates) {\n that.element.style[this.transformStyle] = newCoordinates;\n\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n }\n\n _saveCoordinates(coordinates) {\n this.coordinates = coordinates;\n }\n}\n","import {\n geometry as g,\n drawing as d\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n last,\n setDefaultOptions\n} from '../../common';\n\nimport {\n proxy\n} from '../utils';\n\nimport {\n Layer\n} from './layer';\n\nimport {\n Movable\n} from '../scroller/draggable';\n\nimport {\n Location\n} from '../location';\n\nconst Group = d.Group;\n\nexport class ShapeLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n this._pan = proxy(this._pan, this);\n\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.clientWidth,\n height: map.scrollElement.clientHeight\n });\n\n this._initRoot();\n this.movable = new Movable(this.surface.element);\n this._markers = [];\n\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n }\n\n destroy() {\n super.destroy();\n\n this.surface.destroy();\n }\n\n _reset() {\n super._reset();\n\n this._translateSurface();\n\n this._data = this._readData();\n\n if (this._hasData()) {\n this._load(this._data);\n }\n }\n\n _initRoot() {\n this._root = new Group();\n this.surface.draw(this._root);\n }\n\n _beforeReset() {\n this.surface.clear();\n this._initRoot();\n }\n\n _resize() {\n this.surface.size(this.map.size());\n }\n\n _readData() {\n const data = super._readData();\n\n if (data.type === \"FeatureCollection\") {\n return data.features;\n }\n\n if (data.type === \"GeometryCollection\") {\n return data.geometries;\n }\n\n return data;\n }\n\n _load(data) {\n this._data = data;\n this._clearMarkers();\n\n if (!this._loader) {\n this._loader = new GeoJsonLoader(this.map, this.options.style, this);\n }\n\n let container = new Group();\n\n for (let i = 0; i < data.length; i++) {\n let shape = this._loader.parse(data[i]);\n\n if (shape) {\n container.append(shape);\n }\n }\n\n this._root.clear();\n this._root.append(container);\n }\n\n shapeCreated(shape) {\n let cancelled = false;\n\n // the GeoJSON loader builds \"Point\" type as a circle\n // use the circle shape type as and indicator for rendering a marker\n // keep the behavior under a setting as this is supported by kendo jQuery Map\n // but we opted out of this in blazor\n if (shape instanceof d.Circle && this.map.options.renderPointsAsMarkers) {\n cancelled = defined(this._createMarker(shape));\n }\n\n if (!cancelled) {\n let args = {\n layer: this,\n shape: shape\n };\n\n cancelled = this.map.trigger('shapeCreated', args);\n }\n\n return cancelled;\n }\n\n featureCreated(e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n }\n\n _createMarker(shape) {\n let marker = this.map.markers.bind({\n location: shape.location\n }, shape.dataItem);\n\n if (marker) {\n this._markers.push(marker);\n }\n\n return marker;\n }\n\n _clearMarkers() {\n for (let i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n\n this._markers = [];\n }\n\n _pan() {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n }\n\n _panEnd(e) {\n super._panEnd(e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n }\n\n _translateSurface() {\n let map = this.map;\n let nw = map.locationToView(map.extent().nw);\n\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n }\n\n _handler(event) {\n let layer = this;\n\n return function(e) {\n if (e.element) {\n let args = {\n layer: layer,\n layerIndex: (layer.map.layers || []).indexOf(layer),\n shape: e.element,\n shapeIndex: (layer._data || []).indexOf(e.element.dataItem),\n originalEvent: e.originalEvent\n };\n\n layer.map.trigger(event, args);\n }\n };\n }\n\n _activate() {\n super._activate();\n this._panHandler = proxy(this._pan, this);\n this.map.bind('pan', this.panHandler);\n }\n\n _deactivate() {\n super._deactivate();\n this.map.unbind('pan', this._panHandler);\n }\n}\n\nsetDefaultOptions(ShapeLayer, {\n autoBind: true,\n zIndex: 100\n});\n\nclass GeoJsonLoader extends Class {\n constructor(locator, defaultStyle, observer) {\n super();\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n }\n\n parse(item) {\n let root = new Group();\n let unwrap = true;\n\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n\n return root;\n }\n\n _shapeCreated(shape) {\n let cancelled = false;\n\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n\n return cancelled;\n }\n\n _featureCreated(group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n }\n\n /* eslint-disable indent */\n _loadGeometryTo(container, geometry, dataItem) {\n let coords = geometry.coordinates;\n let i;\n let path;\n\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n default:\n break;\n }\n }\n /* eslint-disable indent */\n\n _setLineFill(path) {\n let segments = path.segments;\n\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n }\n\n _loadShape(container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n\n return shape;\n }\n\n _loadPolygon(container, rings, dataItem) {\n let shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n }\n\n _buildPolygon(rings) {\n let type = rings.length > 1 ? d.MultiPath : d.Path;\n let path = new type(this.style);\n\n for (let i = 0; i < rings.length; i++) {\n for (let j = 0; j < rings[i].length; j++) {\n let point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n\n return path;\n }\n\n _loadPoint(container, coords, dataItem) {\n let location = Location.fromLngLat(coords);\n let point = this.locator.locationToView(location);\n let circle = new g.Circle(point, 10);\n let shape = new d.Circle(circle, this.style);\n\n shape.dataItem = dataItem;\n shape.location = location;\n\n return this._loadShape(container, shape);\n }\n}\n","import {\n geometry as g,\n drawing as d\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n isFunction,\n getter,\n setDefaultOptions\n} from '../../common';\n\nimport {\n ShapeLayer\n} from './shape';\n\nimport {\n Location\n} from '../location';\n\nexport class BubbleLayer extends ShapeLayer {\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _load(data) {\n this._data = data;\n this.surface.clear();\n\n if (data.length === 0) {\n return;\n }\n\n let options = this.options;\n let getValue = getter(options.valueField);\n\n let newData = data.slice(0);\n newData.sort(function(a, b) {\n return getValue(b) - getValue(a);\n });\n\n let scaleType = this._scaleType();\n let scale;\n let getLocation = getter(this.options.locationField);\n\n for (let i = 0; i < newData.length; i++) {\n let dataItem = newData[i];\n let location = getLocation(dataItem);\n let value = getValue(dataItem);\n\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n options.minSize,\n options.maxSize\n ]);\n }\n\n location = Location.create(location);\n\n let center = this.map.locationToView(location);\n let size = scale.map(value);\n let symbol = this._createSymbol({\n center: center,\n size: size,\n style: options.style,\n dataItem: dataItem,\n location: location\n });\n\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n\n this._drawSymbol(symbol);\n }\n }\n }\n\n _scaleType() {\n let scale = this.options.scale;\n\n if (isFunction(scale)) {\n return scale;\n }\n\n return Scales[scale];\n }\n\n _createSymbol(args) {\n let symbol = this.options.symbol;\n\n if (!isFunction(symbol)) {\n symbol = Symbols[symbol];\n }\n\n return symbol(args);\n }\n\n _drawSymbol(shape) {\n let args = {\n layer: this,\n shape: shape\n };\n\n let cancelled = this.map.trigger('shapeCreated', args);\n\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n}\n\nsetDefaultOptions(BubbleLayer, {\n // autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle',\n // ensure bubble layers are displayed over tile and shape layers\n zIndex: 200\n});\n\nclass SqrtScale extends Class {\n constructor(domain, range) {\n super();\n\n this._domain = domain;\n this._range = range;\n\n let domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n let outputRange = range[1] - range[0];\n\n this._ratio = outputRange / domainRange;\n }\n\n map(value) {\n let rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n}\n\nlet Scales = {\n sqrt: SqrtScale\n};\n\nlet Symbols = {\n circle: function(args) {\n let geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n\n square: function(args) {\n let path = new d.Path(args.style);\n let halfSize = args.size / 2;\n let center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n};\n","import {\n Class,\n addClass,\n isArray,\n getter,\n deepExtend,\n setDefaultOptions\n} from '../../common';\n\nimport { Layer } from './layer';\nimport { Location } from '../location';\n\nimport {\n proxy,\n on,\n off,\n toHyphens,\n toPixels\n} from '../utils';\n\nconst CLICK = \"click\";\nconst MOUSE_ENTER = \"mouseenter\";\nconst MOUSE_LEAVE = \"mouseleave\";\n\nconst extend = Object.assign;\nconst MARKER_CLASS = \".k-marker\";\n\nexport class MarkerLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n this._markerClickHandler = proxy(this._markerClick, this);\n on(this.element, CLICK, MARKER_CLASS, this._markerClickHandler);\n\n this.items = [];\n\n this._load(this._readData());\n }\n\n destroy() {\n super.destroy();\n off(this.element, CLICK, this._markerClickHandler);\n this.clear();\n }\n\n add(args) {\n if (isArray(args)) {\n for (let i = 0; i < args.length; i++) {\n this._addOne(args[i]);\n }\n } else {\n return this._addOne(args);\n }\n }\n\n remove(marker) {\n marker.destroy();\n let index = (this.items || []).indexOf(marker);\n\n if (index > -1) {\n this.items.splice(index, 1);\n }\n }\n\n clear() {\n for (let i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n\n this.items = [];\n }\n\n update(marker) {\n let location = marker.location();\n\n if (location) {\n marker.showAt(this.map.locationToView(location));\n\n let args = {\n marker: marker,\n layer: this\n };\n\n this.map.trigger('markerActivate', args);\n }\n }\n\n _reset() {\n super._reset();\n\n let items = this.items;\n\n for (let i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n }\n\n bind(options, dataItem) {\n let marker = Marker.create(options, this.options);\n marker.dataItem = dataItem;\n\n let args = {\n marker: marker,\n layer: this\n };\n\n let cancelled = this.map.trigger('markerCreated', args);\n\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n }\n\n _addOne(arg) {\n let marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n }\n\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _load(data) {\n this._data = data;\n this.clear();\n\n let getLocation = getter(this.options.locationField);\n let getTitle = getter(this.options.titleField);\n\n for (let i = 0; i < data.length; i++) {\n let dataItem = data[i];\n\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n }\n\n _markerClick(e) {\n const layers = this.map.layers || [];\n const marker = e.target._kendoNode;\n\n let args = {\n // marker: $(e.target).data('kendoMarker'),\n // marker: e.target.getAttribute(\"data-kendoMarker\"),\n layer: this,\n layerIndex: layers.indexOf(this),\n marker: marker,\n markerIndex: (this.items || []).indexOf(marker),\n originalEvent: e\n };\n\n this.map.trigger('markerClick', args);\n }\n\n _markerMouseEnter(e) {\n const args = this._createMarkerEventArgs(e);\n this.map.trigger(\"markerMouseEnter\", args);\n }\n\n _markerMouseLeave(e) {\n const args = this._createMarkerEventArgs(e);\n this.map.trigger(\"markerMouseLeave\", args);\n }\n\n _createMarkerEventArgs(e) {\n const marker = e.marker;\n\n let args = extend({}, {\n layer: this,\n layerIndex: this.map.layers.indexOf(this),\n marker: marker,\n markerIndex: (this.items || []).indexOf(marker)\n }, e);\n\n return args;\n }\n}\n\nsetDefaultOptions(MarkerLayer, {\n zIndex: 1000,\n autoBind: true,\n locationField: 'location',\n titleField: 'title'\n});\n\nexport class Marker extends Class {\n constructor(options) {\n super();\n this.options = options || {};\n }\n\n destroy() {\n this.layer = null;\n this.unbindEvents();\n this.hide();\n }\n\n addTo(parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n }\n\n location(value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n\n if (this.layer) {\n this.layer.update(this);\n }\n\n return this;\n }\n\n return Location.create(this.options.location);\n }\n\n showAt(point) {\n this.render();\n\n this.element.style.left = toPixels(Math.round(point.x));\n this.element.style.top = toPixels(Math.round(point.y));\n\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n }\n\n hide() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n }\n\n bindEvents() {\n if (!this.element) {\n return;\n }\n\n this._mouseEnterHandler = proxy(this._mouseEnter, this);\n on(this.element, MOUSE_ENTER, MARKER_CLASS, this._mouseEnterHandler);\n this._mouseLeaveHandler = proxy(this._mouseLeave, this);\n on(this.element, MOUSE_LEAVE, MARKER_CLASS, this._mouseLeaveHandler);\n }\n\n unbindEvents() {\n if (!this.element) {\n return;\n }\n\n off(this.element, MOUSE_ENTER, this._mouseEnterHandler);\n off(this.element, MOUSE_LEAVE, this._mouseLeaveHandler);\n }\n\n render() {\n if (!this.element) {\n let options = this.options;\n let layer = this.layer;\n\n const element = document.createElement('span');\n addClass(element, 'k-marker k-icon k-i-marker-' + toHyphens(options.shape || 'pin'));\n\n element.setAttribute(\"title\", options.title);\n\n const attributes = options.attributes || {};\n Object.keys(attributes).forEach(function(key) {\n element.setAttributett(key, attributes[key]);\n });\n\n element._kendoNode = this;\n element.style.zIndex = options.zIndex;\n\n this.element = element;\n\n if (layer) {\n layer.element.appendChild(this.element);\n }\n\n this.bindEvents();\n\n this.renderTooltip();\n }\n }\n\n _mouseEnter(e) {\n const args = this._createEventArgs(e);\n this.layer._markerMouseEnter(args);\n }\n\n _mouseLeave(e) {\n const args = this._createEventArgs(e);\n this.layer._markerMouseLeave(args);\n }\n\n _createEventArgs(e) {\n let args = {\n marker: this,\n originalEvent: e\n };\n\n return args;\n }\n\n renderTooltip() {\n }\n\n static create(arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n\n return new Marker(deepExtend({}, defaults, arg));\n }\n}\n","import {\n Class\n} from '../../common';\n\nimport {\n proxy,\n now\n} from '../utils';\n\nconst extend = Object.assign;\n\nfunction animationFrame(callback) {\n window.requestAnimationFrame(callback);\n}\n\nexport class Animation extends Class {\n constructor() {\n super();\n let that = this;\n\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n }\n\n tick() { }\n done() { }\n onEnd() { }\n onCancel() { }\n\n start() {\n if (!this.enabled()) {\n return;\n }\n\n if (!this.done()) {\n this._started = true;\n animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n }\n\n enabled() {\n return true;\n }\n\n cancel() {\n this._started = false;\n this.onCancel();\n }\n\n _tick() {\n let that = this;\n\n if (!that._started) {\n return;\n }\n\n that.tick();\n\n if (!that.done()) {\n animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n}\n\nexport class Transition extends Animation {\n constructor(options) {\n super();\n extend(this, options);\n }\n\n done() {\n return this.timePassed() >= this.duration;\n }\n\n timePassed() {\n return Math.min(this.duration, now() - this.startDate);\n }\n\n moveTo(options) {\n let that = this,\n movable = that.movable;\n\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration === 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = now();\n that.start();\n }\n\n _easeProxy(ease) {\n let that = this;\n\n return function() {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n\n static easeOutExpo(t, b, c, d) {\n return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n\n // static easeOutBack(t, b, c, d) {\n // let s = 1.70158;\n // return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n // }\n}\n","import {\n Class,\n grep\n} from '../../common';\n\nimport {\n proxy,\n noop,\n applyEventMap,\n getEventMap,\n on,\n off,\n now,\n getSupportedFeatures\n} from '../utils';\n\nimport {\n Observable\n} from './observable';\n\nconst extend = Object.assign;\n\nconst preventDefault = (e) => {\n e.preventDefault();\n};\n\nlet\n DEFAULT_MIN_HOLD = 800,\n CLICK_DELAY = 300,\n // DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0,\n DEFAULT_THRESHOLD = 0,\n PRESS = 'press',\n HOLD = 'hold',\n SELECT = 'select',\n START = 'start',\n MOVE = 'move',\n END = 'end',\n CANCEL = 'cancel',\n TAP = 'tap',\n DOUBLETAP = 'doubleTap',\n RELEASE = 'release',\n GESTURESTART = 'gesturestart',\n GESTURECHANGE = 'gesturechange',\n GESTUREEND = 'gestureend',\n GESTURETAP = 'gesturetap';\n\nlet THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n};\n\nfunction touchDelta(touch1, touch2) {\n let x1 = touch1.x.location,\n y1 = touch1.y.location,\n x2 = touch2.x.location,\n y2 = touch2.y.location,\n dx = x1 - x2,\n dy = y1 - y2;\n\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n}\n\nfunction getTouches(e) {\n const support = getSupportedFeatures();\n let touches = [],\n originalEvent = e.originalEvent || e,\n currentTarget = e.currentTarget,\n idx = 0,\n length, changedTouches, touch;\n\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n\n return touches;\n}\nexport class TouchAxis extends Class {\n constructor(axis, location) {\n super();\n let that = this;\n\n that.support = getSupportedFeatures();\n that.invalidZeroEvents = this.support.mobileOS && this.support.mobileOS.android;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n }\n\n move(location) {\n let that = this,\n offset = location['page' + that.axis],\n timeStamp = now(),\n timeDelta = timeStamp - that.timeStamp || 1;\n\n if (!offset && this.invalidZeroEvents) {\n return;\n }\n\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n }\n\n _updateLocationData(location) {\n let that = this,\n axis = that.axis;\n\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n}\n\nexport class Touch extends Class {\n constructor(userEvents, target, touchInfo) {\n super();\n\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n }\n\n press() {\n // this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._holdTimeout = setTimeout(proxy(this._hold, this), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n }\n\n _tap(touchInfo) {\n let that = this;\n\n that.userEvents._clicks++;\n\n if (that.userEvents._clicks === 1) {\n that._clickTimeout = setTimeout(function() {\n if (that.userEvents._clicks === 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n }\n\n _hold() {\n this._trigger(HOLD, this.pressEvent);\n }\n\n /* eslint-disable consistent-return */\n move(touchInfo) {\n let that = this;\n let preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n\n if (that._finished || preventMove) {\n return;\n }\n\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n }\n /* eslint-enable consistent-return */\n\n end(touchInfo) {\n this.endTime = now();\n\n if (this._finished) {\n return;\n }\n\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n\n clearTimeout(this._holdTimeout);\n this.dispose();\n }\n\n dispose() {\n let userEvents = this.userEvents,\n activeTouches = userEvents.touches || [];\n\n this._finished = true;\n this.pressEvent = null;\n\n clearTimeout(this._holdTimeout);\n // activeTouches.splice($.inArray(this, activeTouches), 1);\n const activeTouchIndex = activeTouches.indexOf(this);\n activeTouches.splice(activeTouchIndex, 1);\n }\n\n skip() {\n this.dispose();\n }\n\n cancel() {\n this.dispose();\n }\n\n isMoved() {\n return this._moved;\n }\n\n _start(touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n }\n\n _trigger(name, touchInfo) {\n let that = this,\n jQueryEvent = touchInfo.event,\n data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n }\n\n _withinIgnoreThreshold() {\n let xDelta = this.x.initialDelta,\n yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n}\n\nfunction withEachUpEvent(callback) {\n const eventMap = getEventMap(navigator.userAgent);\n let downEvents = eventMap.up.split(' '),\n idx = 0,\n length = downEvents.length;\n\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n}\n\nexport class UserEvents extends Observable {\n constructor(element, options) {\n super();\n let that = this;\n let filter;\n\n const support = getSupportedFeatures();\n this.support = support;\n\n /* eslint-disable no-param-reassign */\n options = options || {};\n /* eslint-enable no-param-reassign */\n this.options = options;\n\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n\n const enableGlobalSurface = !support.touch || support.mouseAndTouchPresent;\n\n extend(that, {\n element: element,\n surface: options.global && enableGlobalSurface ?\n element.ownerDocument.documentElement :\n options.surface || element,\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n this._surfaceMoveHandler = proxy(this._move, this);\n on(that.surface, applyEventMap('move'), this._surfaceMoveHandler);\n\n this._surfaceEndHandler = proxy(this._end, this);\n on(that.surface, applyEventMap('up cancel'), this._surfaceEndHandler);\n\n this._elementStartHandler = proxy(this._start, this);\n on(element, applyEventMap('down'), filter, this._elementStartHandler);\n\n if (that.useClickAsTap) {\n this._elementClickHandler = proxy(this._click, this);\n on(element, applyEventMap('click'), filter, this._elementClickHandler);\n }\n\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n let defaultAction = 'pinch-zoom double-tap-zoom';\n\n element.style['-ms-touch-action'] =\n options.touchAction && options.touchAction !== 'none' ?\n defaultAction + ' ' + options.touchAction :\n defaultAction;\n\n } else {\n element.style['touch-action'] = options.touchAction || 'none';\n }\n }\n if (options.preventDragEvent) {\n this._elementDragStartHandler = preventDefault;\n on(element, applyEventMap('dragstart'), this._elementDragStartHandler);\n }\n\n // element.on(kendo.applyEventMap('mousedown'), filter, {\n // root: element\n // } '_select');\n\n // todo: use root\n this._elementSelectHandler = proxy(this._select, this);\n on(element, applyEventMap('mousedown'), filter, this._elementSelectHandler);\n\n if (that.captureUpIfMoved && support.eventCapture) {\n let surfaceElement = that.surface,\n preventIfMovingProxy = proxy(that.preventIfMoving, that);\n\n withEachUpEvent(function(eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n }\n\n preventIfMoving(e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n }\n\n destroy() {\n let that = this;\n const options = this.options;\n const element = this.element;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\n if (that.captureUpIfMoved && this.support.eventCapture) {\n let surfaceElement = that.surface;\n withEachUpEvent(function(eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n\n off(that.surface, applyEventMap('move'), this._surfaceMoveHandler);\n off(that.surface, applyEventMap('up cancel'), this._surfaceEndHandler);\n\n off(element, applyEventMap('down'), this._elementStartHandler);\n\n if (that.useClickAsTap) {\n off(element, applyEventMap('click'), this._elementClickHandler);\n }\n\n if (options.preventDragEvent) {\n off(element, applyEventMap('dragstart'), this._elementDragStartHandler);\n }\n\n off(element, applyEventMap('mousedown'), this._elementSelectHandler);\n\n that._disposeAll();\n that.unbind();\n\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n }\n\n capture() {\n UserEvents.current = this;\n }\n\n cancel() {\n this._disposeAll();\n this.trigger(CANCEL);\n }\n\n /* eslint-disable indent */\n notify(event, data) {\n let that = this,\n touches = that.touches;\n let eventName = event;\n\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n default:\n break;\n }\n\n extend(data, {\n touches: touches\n }, touchDelta(touches[0], touches[1]));\n }\n\n return this.trigger(eventName, extend(data, {\n type: eventName\n }));\n }\n /* eslint-enable indent */\n\n press(x, y, target) {\n this._apiCall('_start', x, y, target);\n }\n\n move(x, y) {\n this._apiCall('_move', x, y);\n }\n\n end(x, y) {\n this._apiCall('_end', x, y);\n }\n\n _isMultiTouch() {\n return this.touches.length > 1;\n }\n\n _maxTouchesReached() {\n return this.touches.length >= this._maxTouches;\n }\n\n _disposeAll() {\n let touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n }\n\n _isMoved() {\n return grep(this.touches, function(touch) {\n return touch.isMoved();\n }).length;\n }\n\n _select(e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n }\n\n _start(e) {\n let that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = touch.currentTarget;\n } else {\n target = that.element;\n }\n\n if (target && target.length === 0) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n }\n\n _move(e) {\n this._eachTouch('move', e);\n }\n\n _end(e) {\n this._eachTouch('end', e);\n }\n\n _click(e) {\n let data = {\n touch: {\n initialTouch: e.target,\n target: e.currentTarget,\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: e.currentTarget,\n event: e,\n type: 'tap'\n };\n\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n }\n\n _eachTouch(methodName, e) {\n let that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n }\n\n _apiCall(type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: target || this.element,\n stopPropagation: noop,\n preventDefault: noop\n });\n }\n\n static defaultThreshold(value) {\n DEFAULT_THRESHOLD = value;\n }\n\n static minHold(value) {\n DEFAULT_MIN_HOLD = value;\n }\n}\n","// todo: extract to a separate place\n\nimport {\n Class,\n deepExtend,\n addClass,\n isFunction,\n setDefaultOptions\n} from '../../common';\n\nimport {\n convertToHtml,\n prepend,\n wrapInner,\n contains,\n hasNativeScrolling,\n on,\n off,\n proxy,\n wheelDeltaY,\n setDefaultEvents\n} from '../utils';\n\nimport {\n Transition,\n Animation\n} from './fx';\n\nimport {\n Pane,\n PaneDimensions,\n Movable,\n TapCapture\n} from './draggable';\n\nimport {\n UserEvents\n} from './user-events';\n\nimport {\n Observable\n} from './observable';\n\nlet\n extend = Object.assign,\n abs = Math.abs,\n SNAPBACK_DURATION = 500,\n SCROLLBAR_OPACITY = 0.7,\n FRICTION = 0.96,\n VELOCITY_MULTIPLIER = 10,\n MAX_VELOCITY = 55,\n OUT_OF_BOUNDS_FRICTION = 0.5,\n ANIMATED_SCROLLER_PRECISION = 5,\n // SCROLLER_RELEASE_CLASS = 'km-scroller-release',\n // SCROLLER_REFRESH_CLASS = 'km-scroller-refresh',\n PULL = 'pull',\n CHANGE = 'change',\n RESIZE = 'resize',\n SCROLL = 'scroll',\n MOUSE_WHEEL_ID = 2;\n\nclass ZoomSnapBack extends Animation {\n constructor(options) {\n super(options);\n let that = this;\n extend(that, options);\n that.userEvents.bind('gestureend', that.start.bind(this));\n that.tapCapture.bind('press', that.cancel.bind(this));\n }\n\n enabled() {\n return this.movable.scale < this.dimensions.minScale;\n }\n\n done() {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n }\n\n tick() {\n let movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n }\n\n onEnd() {\n let movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n}\n\nclass DragInertia extends Animation {\n constructor(options) {\n super();\n let that = this;\n\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd() {\n that._end();\n }\n })\n });\n\n that.tapCapture.bind('press', function() {\n that.cancel();\n });\n\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n }\n\n onCancel() {\n this.transition.cancel();\n }\n\n freeze(location) {\n let that = this;\n that.cancel();\n that._moveTo(location);\n }\n\n onEnd() {\n let that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n }\n\n done() {\n return abs(this.velocity) < 1;\n }\n\n start(e) {\n let that = this,\n velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n super.start();\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n super.start();\n }\n }\n\n tick() {\n let that = this,\n dimension = that.dimension,\n friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n delta = that.velocity *= friction,\n location = that.movable[that.axis] + delta;\n\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n\n that.movable.moveAxis(that.axis, location);\n }\n\n _end() {\n this.tapCapture.cancelCapture();\n this.end();\n }\n\n _snapBack() {\n let that = this,\n dimension = that.dimension,\n snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n\n that._moveTo(snapBack);\n }\n\n _moveTo(location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n}\n\nclass AnimatedScroller extends Animation {\n constructor(options) {\n super(options);\n let that = this;\n\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n }\n\n tick() {\n this._updateCoordinates();\n this.moveTo(this.origin);\n }\n\n done() {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n }\n\n onEnd() {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n }\n\n setCoordinates(from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n }\n\n /* eslint-disable no-param-reassign */\n setCallback(callback) {\n if (callback && isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n }\n /* eslint-enable no-param-reassign */\n\n _updateCoordinates() {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n}\n\nclass ScrollBar extends Class {\n constructor(options) {\n super();\n let that = this,\n horizontal = options.axis === 'x';\n\n const orientation = (horizontal ? 'horizontal' : 'vertical');\n const element = convertToHtml('');\n\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n\n that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n\n that.container.appendChild(element);\n\n if (options.alwaysVisible) {\n that.show();\n }\n }\n\n refresh() {\n let that = this,\n axis = that.axis,\n dimension = that.dimension,\n paneSize = dimension.size,\n scrollMovable = that.scrollMovable,\n sizeRatio = paneSize / dimension.total,\n position = Math.round(-scrollMovable[axis] * sizeRatio),\n size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.style.display = \"none\";\n } else {\n this.element.style.display = \"\";\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize !== size) {\n that.element.style[that.size] = size + 'px';\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n }\n\n show() {\n this.element.style.opacity = SCROLLBAR_OPACITY;\n this.element.style.visibility = \"visible\";\n }\n\n hide() {\n if (!this.alwaysVisible) {\n this.element.style.opacity = 0;\n }\n }\n}\n\n// export class Scroller extends Class {\nexport class Scroller extends Observable {\n constructor(element, options) {\n super();\n let that = this;\n this.element = element;\n\n this._initOptions(options);\n\n const hasScrolling = hasNativeScrolling(navigator.userAgent);\n that._native = that.options.useNative && hasScrolling;\n const scrollHeader = convertToHtml('