{"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 \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
{4:d}
Open:{0:C}
High:{1:C}
Low:{2:C}
Close:{3:C}
\"\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 \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
{6:d}
Lower:{0:C}
Q1:{1:C}
Median:{2:C}
Mean:{5:C}
Q3:{3:C}
Upper:{4:C}
\"\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 this.render() +\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 `${ this._root.render() }`;\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 = `${ root.render() }`;\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('
');\n\n if (that._native) {\n addClass(element, 'km-native-scroller');\n prepend(scrollHeader, element);\n\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children[0]\n });\n\n return;\n }\n\n element.style.overflow = \"hidden\";\n addClass(element, 'km-scroll-wrapper');\n\n const scrollContainer = convertToHtml('
');\n wrapInner(element, scrollContainer);\n prepend(scrollHeader, element);\n\n let inner = element.children[1],\n tapCapture = new TapCapture(element),\n movable = new Movable(inner),\n\n dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }),\n avoidScrolling = this.options.avoidScrolling,\n\n userEvents = new UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start(e) {\n dimensions.refresh();\n let velocityX = abs(e.x.velocity),\n velocityY = abs(e.y.velocity),\n horizontalSwipe = velocityX * 2 >= velocityY,\n originatedFromFixedContainer = contains(that.fixedContainer, e.event.target),\n verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }),\n\n pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }),\n\n zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }),\n\n animatedScroller = new AnimatedScroller({\n moveTo(coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n\n movable.bind(CHANGE, function() {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n\n if (that.options.mousewheelScrolling) {\n this._wheelScrollHandler = this._wheelScroll.bind(this);\n on(element, 'DOMMouseScroll mousewheel', this._wheelScrollHandler);\n }\n\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children[0]\n });\n\n that._initAxis('x');\n that._initAxis('y');\n\n that._wheelEnd = function() {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n\n dimensions.refresh();\n\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _wheelScroll(e) {\n if (e.ctrlKey) {\n return;\n }\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n let delta = wheelDeltaY(e);\n\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n\n e.preventDefault();\n }\n\n makeVirtual() {\n this.dimensions.y.makeVirtual();\n }\n\n virtualSize(min, max) {\n this.dimensions.y.virtualSize(min, max);\n }\n\n height() {\n return this.dimensions.y.size;\n }\n\n scrollHeight() {\n return this.scrollElement.scrollHeight;\n }\n\n scrollWidth() {\n return this.scrollElement.scrollWidth;\n }\n\n _resize() {\n if (!this._native) {\n this.contentResized();\n }\n }\n\n setOptions(options) {\n let that = this;\n\n this._initOptions(options);\n\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n }\n\n reset() {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n }\n\n contentResized() {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n }\n\n zoomOut() {\n let dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n }\n\n enable() {\n this.enabled = true;\n }\n\n disable() {\n this.enabled = false;\n }\n\n scrollTo(x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n }\n\n animatedScrollTo(x, y, callback) {\n let from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n }\n\n // kept for API compatibility, not used\n pullHandled() {\n // let that = this;\n\n // removeClass(that.refreshHint, SCROLLER_REFRESH_CLASS);\n // that.hintContainer.innerHTML = that.pullTemplate({}));\n\n // that.yinertia.onEnd();\n // that.xinertia.onEnd();\n // that.userEvents.cancel();\n }\n\n destroy() {\n const element = this.element;\n\n off(element, 'DOMMouseScroll mousewheel', this._wheelScrollHandler);\n\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n }\n\n _scale(scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n }\n\n _initPullToRefresh() {\n }\n\n // kept for API compatibility, not used\n _dragEnd() {\n // let that = this;\n\n // if (!that.pulled) {\n // return;\n // }\n\n // that.pulled = false;\n\n // removeClass(that.refreshHint, SCROLLER_RELEASE_CLASS);\n // addClass(that.refreshHint, SCROLLER_REFRESH_CLASS);\n\n // that.hintContainer.innerHTML = that.refreshTemplate({});\n\n // that.yinertia.freeze(that.options.pullOffset / 2);\n // that.trigger('pull');\n }\n\n // kept for API compatibility, not used\n _paneChange() {\n // let that = this;\n // if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n // if (!that.pulled) {\n // that.pulled = true;\n // that.refreshHint.removeClass(SCROLLER_REFRESH_CLASS).addClass(SCROLLER_RELEASE_CLASS);\n // that.hintContainer.html(that.releaseTemplate({}));\n // that.hintContainer.html(that.releaseTemplate({}));\n // }\n // } else if (that.pulled) {\n // that.pulled = false;\n // that.refreshHint.removeClass(SCROLLER_RELEASE_CLASS);\n // that.hintContainer.html(that.pullTemplate({}));\n // }\n }\n\n _initAxis(axis) {\n let that = this,\n movable = that.movable,\n dimension = that.dimensions[axis],\n tapCapture = that.tapCapture,\n paneAxis = that.pane[axis],\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n\n dimension.bind(CHANGE, function() {\n scrollBar.refresh();\n });\n\n paneAxis.bind(CHANGE, function() {\n scrollBar.show();\n });\n\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end() {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n}\n\nsetDefaultOptions(Scroller, {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling() {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n});\n\nsetDefaultEvents(Scroller, [\n PULL,\n SCROLL,\n RESIZE\n]);\n\n","import {\n geometry as g\n} from '@progress/kendo-drawing';\n\nimport {\n addClass,\n setDefaultOptions,\n valueOrDefault,\n defined,\n mousewheelDelta,\n limitValue,\n deepExtend,\n elementOffset,\n isArray\n} from '../common';\n\nimport {\n EPSG3857\n} from './crs';\n\nimport {\n Attribution\n} from './attribution';\n\nimport {\n Navigator\n} from './navigator';\n\nimport {\n ZoomControl\n} from './zoom';\n\nimport {\n Location\n} from './location';\n\nimport {\n Extent\n} from './extent';\n\nimport {\n TileLayer\n} from './layers/tile';\n\nimport {\n BubbleLayer\n} from './layers/bubble';\n\nimport {\n ShapeLayer\n} from './layers/shape';\n\nimport {\n MarkerLayer\n} from './layers/marker';\n\nimport {\n removeChildren,\n setDefaultEvents,\n toHyphens,\n proxy,\n now,\n on,\n off,\n getSupportedFeatures,\n convertToHtml\n} from './utils';\n\nimport {\n Scroller\n} from './scroller/scroller';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport MapService from './../services/map-service';\n\nlet math = Math,\n min = math.min,\n pow = math.pow,\n Point = g.Point,\n MARKER = \"marker\",\n LOCATION = \"location\",\n FRICTION = 0.9,\n FRICTION_MOBILE = 0.93,\n MOUSEWHEEL = 'DOMMouseScroll mousewheel',\n VELOCITY_MULTIPLIER = 5,\n DEFAULT_ZOOM_RATE = 1;\n\nconst layersMap = {\n bubble: BubbleLayer,\n shape: ShapeLayer,\n tile: TileLayer,\n [MARKER]: MarkerLayer\n};\n\nfunction renderPos(pos) {\n let result = [];\n\n if (pos) {\n let parts = toHyphens(pos).split(\"-\");\n\n for (let i = 0; i < parts.length; i++) {\n result.push(\"k-pos-\" + parts[i]);\n }\n }\n\n return result.join(\" \");\n}\n\nclass Map extends Observable {\n constructor(element, options = {}, themeOptions = {}, context = {}) {\n super();\n\n\n this._init(element, options, themeOptions, context);\n }\n\n destroy() {\n this.scroller.destroy();\n\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n\n if (isArray(this.markers)) {\n this.markers.forEach(markerLayer => {\n markerLayer.destroy();\n });\n } else {\n this.markers.destroy();\n }\n\n for (let i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n\n off(this.element, MOUSEWHEEL, this._mousewheelHandler);\n\n super.destroy();\n }\n\n _init(element, options = {}, themeOptions = {}, context = {}) {\n this.support = getSupportedFeatures();\n this.context = context;\n\n this.initObserver(context);\n this.initServices(context);\n\n this._initOptions(options);\n this._setEvents(options);\n this.crs = new EPSG3857();\n\n this._initElement(element);\n\n this._viewOrigin = this._getOrigin();\n\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n\n this._mousewheelHandler = this._mousewheel.bind(this);\n on(this.element, MOUSEWHEEL, this._mousewheelHandler);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _initElement(element) {\n this.element = element;\n\n addClass(element, \"k-map\");\n element.style.position = \"relative\";\n element.setAttribute(\"data-role\", \"map\");\n removeChildren(element);\n\n const div = convertToHtml(\"
\");\n this.element.appendChild(div);\n }\n\n initServices(context = {}) {\n this.widgetService = new MapService(this, context);\n }\n\n initObserver(context = {}) {\n this.observers = [];\n this.addObserver(context.observer);\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\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n }\n\n requiresHandlers(eventNames) {\n const observers = this.observers;\n\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 args.sender = this;\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n if (!isDefaultPrevented) {\n super.trigger(name, args);\n }\n\n return isDefaultPrevented;\n }\n\n _notifyObserver(name, args = {}) {\n args.sender = this;\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n\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 zoom(level) {\n let options = this.options;\n let result;\n\n if (defined(level)) {\n const zoomLevel = math.round(limitValue(level, options.minZoom, options.maxZoom));\n\n if (options.zoom !== zoomLevel) {\n options.zoom = zoomLevel;\n this._reset();\n }\n result = this;\n } else {\n result = options.zoom;\n }\n\n return result;\n }\n\n center(center) {\n let result;\n\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n result = this;\n } else {\n result = Location.create(this.options.center);\n }\n\n return result;\n }\n\n extent(extent) {\n let result;\n\n if (extent) {\n this._setExtent(extent);\n result = this;\n } else {\n result = this._getExtent();\n }\n\n return result;\n }\n\n setOptions(options = {}) {\n const element = this.element;\n\n this.destroy();\n removeChildren(element);\n this._init(element, options, {}, this.context);\n\n this._reset();\n }\n\n locationToLayer(location, zoom) {\n let clamp = !this.options.wraparound;\n const locationObject = Location.create(location);\n\n return this.crs.toPoint(locationObject, this._layerSize(zoom), clamp);\n }\n\n layerToLocation(point, zoom) {\n let clamp = !this.options.wraparound;\n const pointObject = Point.create(point);\n\n return this.crs.toLocation(pointObject, this._layerSize(zoom), clamp);\n }\n\n locationToView(location) {\n const locationObject = Location.create(location);\n let origin = this.locationToLayer(this._viewOrigin);\n let point = this.locationToLayer(locationObject);\n\n return point.translateWith(origin.scale(-1));\n }\n\n viewToLocation(point, zoom) {\n const origin = this.locationToLayer(this._getOrigin(), zoom);\n const pointObject = Point.create(point);\n const pointResult = pointObject.clone().translateWith(origin);\n\n return this.layerToLocation(pointResult, zoom);\n }\n\n eventOffset(e) {\n let x;\n let y;\n let offset = elementOffset(this.element);\n\n if ((e.x && e.x[LOCATION]) || (e.y && e.y[LOCATION])) {\n x = e.x[LOCATION] - offset.left;\n y = e.y[LOCATION] - offset.top;\n } else {\n let event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n }\n\n const point = new g.Point(x, y);\n\n return point;\n }\n\n eventToView(e) {\n let cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n }\n\n eventToLayer(e) {\n return this.locationToLayer(this.eventToLocation(e));\n }\n\n eventToLocation(e) {\n let cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n }\n\n viewSize() {\n let element = this.element;\n let scale = this._layerSize();\n let width = element.clientWidth;\n\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n\n return {\n width: width,\n height: min(scale, element.clientHeight)\n };\n }\n\n exportVisual() {\n this._reset();\n return false;\n }\n\n _setOrigin(origin, zoom) {\n let size = this.viewSize(),\n topLeft;\n\n const originLocation = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(originLocation, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n\n return this;\n }\n\n _getOrigin(invalidate) {\n let size = this.viewSize(),\n topLeft;\n\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n\n return this._origin;\n }\n\n _setExtent(newExtent) {\n let raw = Extent.create(newExtent);\n let se = raw.se.clone();\n\n if (this.options.wraparound && se.lng < 0 && newExtent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n\n const extent = new Extent(raw.nw, se);\n this.center(extent.center());\n let width = this.element.clientWidth;\n let height = this.element.clientHeight;\n let zoom;\n\n for (zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n let topLeft = this.locationToLayer(extent.nw, zoom);\n let bottomRight = this.locationToLayer(extent.se, zoom);\n let layerWidth = math.abs(bottomRight.x - topLeft.x);\n let layerHeight = math.abs(bottomRight.y - topLeft.y);\n\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n\n this.zoom(zoom);\n }\n\n _getExtent() {\n let nw = this._getOrigin();\n let bottomRight = this.locationToLayer(nw);\n let size = this.viewSize();\n\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n\n let se = this.layerToLocation(bottomRight);\n\n return new Extent(nw, se);\n }\n\n _zoomAround(pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n }\n\n _initControls() {\n let controls = this.options.controls;\n if (controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n\n if (!this.support.mobileOS) {\n if (controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n\n if (controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n }\n\n _createControlElement(options, defaultPosition) {\n let pos = options.position || defaultPosition;\n let posSelector = '.' + renderPos(pos).replace(' ', '.');\n let wrap = this.element.querySelector('.k-map-controls' + posSelector) || [];\n\n if (wrap.length === 0) {\n let div = document.createElement(\"div\");\n addClass(div, 'k-map-controls ' + renderPos(pos));\n wrap = div;\n this.element.appendChild(wrap);\n }\n\n let div = document.createElement(\"div\");\n\n wrap.appendChild(div);\n\n return div;\n }\n\n _createAttribution(options) {\n let element = this._createControlElement(options, 'bottomRight');\n this.attribution = new Attribution(element, options);\n }\n\n _createNavigator(options) {\n let element = this._createControlElement(options, 'topLeft');\n let navigator = this.navigator = new Navigator(element, options);\n\n this._navigatorPan = this._navigatorPan.bind(this);\n navigator.bind('pan', this._navigatorPan);\n\n this._navigatorCenter = this._navigatorCenter.bind(this);\n navigator.bind('center', this._navigatorCenter);\n }\n\n _navigatorPan(e) {\n let scroller = this.scroller;\n let x = scroller.scrollLeft + e.x;\n let y = scroller.scrollTop - e.y;\n let bounds = this._virtualSize;\n let width = this.element.clientWidth;\n let height = this.element.clientHeight;\n\n // TODO: Move limits to scroller\n x = limitValue(x, bounds.x.min, bounds.x.max - width);\n y = limitValue(y, bounds.y.min, bounds.y.max - height);\n\n this.scroller.one('scroll', proxy(this._scrollEnd, this));\n\n this.scroller.scrollTo(-x, -y);\n }\n\n _navigatorCenter() {\n this.center(this.options.center);\n }\n\n _createZoomControl(options) {\n let element = this._createControlElement(options, 'topLeft');\n let zoomControl = this.zoomControl = new ZoomControl(element, options);\n\n this._zoomControlChange = this._zoomControlChange.bind(this);\n zoomControl.bind('change', this._zoomControlChange);\n }\n\n _zoomControlChange(e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n\n _initScroller() {\n let friction = this.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n let zoomable = this.options.zoomable !== false;\n let scroller = this.scroller = new Scroller(this.element.children[0], {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, this));\n\n this.scrollElement = scroller.scrollElement;\n }\n\n _initLayers() {\n let defs = this.options.layers,\n layers = this.layers = [];\n\n for (let i = 0; i < defs.length; i++) {\n let options = defs[i];\n\n const layer = this._createLayer(options);\n layers.push(layer);\n }\n }\n\n _createLayer(options) {\n let type = options.type || 'shape';\n let layerDefaults = this.options.layerDefaults[type];\n let layerOptions = type === MARKER ?\n deepExtend({}, this.options.markerDefaults, options) :\n deepExtend({}, layerDefaults, options);\n\n let layerConstructor = layersMap[type];\n let layer = new layerConstructor(this, layerOptions);\n\n if (type === MARKER) {\n this.markers = layer;\n }\n\n return layer;\n }\n\n /* eslint-disable arrow-body-style */\n _initMarkers() {\n const markerLayers = (this.options.layers || []).filter(x => {\n return x && x.type === MARKER;\n });\n\n if (markerLayers.length > 0) {\n // render the markers from options.layers\n // instead of options.markers\n return;\n }\n\n this.markers = new MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n }\n /* eslint-enable arrow-body-style */\n\n _scroll(e) {\n let origin = this.locationToLayer(this._viewOrigin).round();\n let movable = e.sender.movable;\n let offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n\n this._setOrigin(this.layerToLocation(origin));\n\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n }\n\n _scrollEnd(e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n\n this._scrollOffset = null;\n this._panEndTimestamp = now();\n\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n }\n\n _panComplete() {\n return now() - (this._panEndTimestamp || 0) > 50;\n }\n\n _scaleStart(e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n let touch = e.touches[1];\n\n if (touch) {\n touch.cancel();\n }\n }\n }\n\n _scale(e) {\n let scale = this.scroller.movable.scale;\n let zoom = this._scaleToZoom(scale);\n let gestureCenter = new g.Point(e.center.x, e.center.y);\n let centerLocation = this.viewToLocation(gestureCenter, zoom);\n let centerPoint = this.locationToLayer(centerLocation, zoom);\n let originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n\n this._zoomAround(originPoint, zoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n\n _scaleToZoom(scaleDelta) {\n let scale = this._layerSize() * scaleDelta;\n let tiles = scale / this.options.minSize;\n let zoom = math.log(tiles) / math.log(2);\n\n return math.round(zoom);\n }\n\n _reset() {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n\n this._viewOrigin = this._getOrigin(true);\n\n this._resetScroller();\n\n this.trigger('beforeReset');\n this.trigger('reset');\n }\n\n _resetScroller() {\n let scroller = this.scroller;\n let x = scroller.dimensions.x;\n let y = scroller.dimensions.y;\n let scale = this._layerSize();\n let nw = this.extent().nw;\n let topLeft = this.locationToLayer(nw).round();\n\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n\n let zoom = this.zoom();\n\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n\n let xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n\n let yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n\n if (this.options.pannable === false) {\n let viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n\n x.makeVirtual();\n y.makeVirtual();\n\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n }\n\n // kept for API compatibility, not used\n _renderLayers() {\n }\n\n _layerSize(zoom) {\n const newZoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, newZoom);\n }\n\n _tap(e) {\n if (!this._panComplete()) {\n return;\n }\n\n let cursor = this.eventOffset(e);\n\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n }\n\n _doubleTap(e) {\n let options = this.options;\n\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n let toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n let cursor = this.eventOffset(e);\n let location = this.viewToLocation(cursor);\n let postZoom = this.locationToLayer(location, toZoom);\n let origin = postZoom.translate(-cursor.x, -cursor.y);\n\n this._zoomAround(origin, toZoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n }\n\n _mousewheel(e) {\n e.preventDefault();\n let delta = mousewheelDelta(e) > 0 ? -1 : 1;\n let options = this.options;\n let fromZoom = this.zoom();\n let toZoom = limitValue(fromZoom + delta, options.minZoom, options.maxZoom);\n\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n let cursor = this.eventOffset(e);\n let location = this.viewToLocation(cursor);\n let postZoom = this.locationToLayer(location, toZoom);\n let origin = postZoom.translate(-cursor.x, -cursor.y);\n\n this._zoomAround(origin, toZoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n }\n}\n\nsetDefaultOptions(Map, {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: {\n panStep: 100\n },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: {\n color: '#fff'\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: {\n position: 'top'\n }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: {\n position: 'top'\n }\n },\n wraparound: true,\n // If set to true, GeoJSON layer \"Point\" features will be rendered as markers.\n // Otherwise, the points will be rendered as circles.\n // Defaults to `true` for KUI/jQuery, `false` everywhere else.\n renderPointsAsMarkers: false\n});\n\nsetDefaultEvents(Map, [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n\n // Events for implementing custom tooltips.\n 'markerMouseEnter',\n 'markerMouseLeave',\n\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n]);\n\nexport default Map;\n","class MapService {\n constructor(widget, context = {}) {\n this.sender = context.sender || widget;\n this.widget = widget;\n this.rtl = Boolean(context.rtl);\n }\n\n notify(name, args) {\n if (this.widget) {\n this.widget.trigger(name, args);\n }\n }\n}\n\nexport default MapService;\n","const BAR_GAP = 1.5;\nconst BAR_SPACING = 0.4;\nconst BLACK = '#000';\nconst SANS = 'Arial, Helvetica, sans-serif';\nconst SANS11 = \"11px \" + SANS;\nconst SANS12 = '12px ' + SANS;\nconst SANS16 = '16px ' + SANS;\nconst TRANSPARENT = 'transparent';\nconst WHITE = '#fff';\n\nconst notes = () => ({\n icon: {\n border: {\n width: 1\n }\n },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n});\n\nconst axisDefaults = () => ({\n labels: {\n font: SANS12\n },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n});\n\nconst areaSeries = () => ({\n highlight: {\n markers: {\n border: {}\n }\n },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n});\n\nconst rangeAreaSeries = () => ({\n highlight: {\n markers: {\n border: {}\n }\n },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n});\n\nconst barSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst boxPlotSeries = () => ({\n outliersField: \"\",\n meanField: \"\",\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: {\n width: 3\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n }\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n },\n spacing: 0.3,\n whiskers: {\n width: 2\n }\n});\n\nconst bubbleSeries = () => ({\n border: {\n width: 0\n },\n labels: {\n background: TRANSPARENT\n },\n opacity: 0.6\n});\n\nconst bulletSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: {\n color: \"#ff0000\"\n }\n});\n\nconst candlestickSeries = () => ({\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: {\n width: 2\n }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n});\n\nconst columnSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst donutSeries = () => ({\n margin: 1\n});\n\nconst lineSeries = () => ({\n width: 2\n});\n\nconst ohlcSeries = () => ({\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: {\n width: 1\n },\n spacing: 0.3\n});\n\nconst radarAreaSeries = () => ({\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n});\n\nconst radarLineSeries = () => ({\n markers: {\n visible: false\n },\n width: 2\n});\n\nconst rangeBarSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst rangeColumnSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst scatterLineSeries = () => ({\n width: 1\n});\n\nconst waterfallSeries = () => ({\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n});\n\nconst pieSeries = () => ({\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n});\n\nconst funnelSeries = () => ({\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n});\n\nconst heatmapSeries = () => ({\n labels: {\n color: '',\n background: TRANSPARENT,\n visible: true\n },\n highlight: {\n border: {\n width: 0\n }\n }\n});\n\nconst seriesDefaults = (options) => ({\n visible: true,\n labels: {\n font: SANS11\n },\n overlay: options.gradients ? {} : {\n gradient: \"none\"\n },\n area: areaSeries(),\n rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n heatmap: heatmapSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n});\n\nconst title = () => ({\n font: SANS16\n});\n\nconst legend = () => ({\n labels: {\n font: SANS12\n }\n});\n\nexport const baseTheme = (options = {}) => ({\n axisDefaults: axisDefaults(),\n categoryAxis: {\n majorGridLines: {\n visible: true\n }\n },\n navigator: {\n pane: {\n height: 90,\n margin: {\n top: 10\n }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n legend: legend()\n});\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { EventEmitter, Input, Output, Injectable, NgZone, Directive, Optional, TemplateRef, SimpleChange, ContentChild, Component, ChangeDetectionStrategy, ElementRef, ViewChild, ViewChildren, QueryList, isDevMode, ContentChildren, ChangeDetectorRef, Renderer2, Inject, LOCALE_ID, InjectionToken, NgModule } from '@angular/core';\nimport { BehaviorSubject, Subject, combineLatest } from 'rxjs';\nimport { auditTime, tap } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { chartBaseTheme, InstanceObserver, DateCategoryAxis, DateValueAxis, DomEventsBuilder, Chart, StockChart, Sparkline } from '@progress/kendo-charts';\nimport { isDocumentAvailable, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-popup';\nimport * as ɵngcc2 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc3 from '@angular/common';\nimport * as ɵngcc4 from '@progress/kendo-angular-intl';\nimport * as ɵngcc5 from '@progress/kendo-angular-common';\n\nconst _c0 = [\"content\"];\nfunction TooltipPopupComponent_ng_template_0_1_ng_template_0_Template(rf, ctx) { }\nfunction TooltipPopupComponent_ng_template_0_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TooltipPopupComponent_ng_template_0_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r4.seriesTooltipTemplateRef)(\"ngTemplateOutletContext\", ctx_r4.seriesTooltipContext);\n} }\nfunction TooltipPopupComponent_ng_template_0_2_ng_template_0_Template(rf, ctx) { }\nfunction TooltipPopupComponent_ng_template_0_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TooltipPopupComponent_ng_template_0_2_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r5.seriesSharedTooltipTemplateRef)(\"ngTemplateOutletContext\", ctx_r5.seriesSharedTooltipContext);\n} }\nfunction TooltipPopupComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtemplate(1, TooltipPopupComponent_ng_template_0_1_Template, 1, 2, null, 4);\n ɵngcc0.ɵɵtemplate(2, TooltipPopupComponent_ng_template_0_2_Template, 1, 2, null, 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r1.popupClasses)(\"ngStyle\", ctx_r1.style);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.shared);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.shared);\n} }\nfunction TooltipPopupComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 6);\n} if (rf & 2) {\n const formattedValue_r8 = ctx.formattedValue;\n ɵngcc0.ɵɵproperty(\"innerHTML\", formattedValue_r8, ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction TooltipPopupComponent_ng_template_3_tr_4_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\");\n ɵngcc0.ɵɵelement(1, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const point_r15 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"background-color\", point_r15.series.color);\n} }\nfunction TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const point_r15 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(point_r15.series.name);\n} }\nfunction TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction TooltipPopupComponent_ng_template_3_tr_4_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\");\n ɵngcc0.ɵɵtemplate(1, TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_1_Template, 2, 1, \"ng-container\", 4);\n ɵngcc0.ɵɵtemplate(2, TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_2_Template, 2, 0, \"ng-container\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const point_r15 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", point_r15.series.name !== undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", point_r15.series.name === undefined);\n} }\nfunction TooltipPopupComponent_ng_template_3_tr_4_ng_template_4_Template(rf, ctx) { }\nfunction TooltipPopupComponent_ng_template_3_tr_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\");\n ɵngcc0.ɵɵtemplate(1, TooltipPopupComponent_ng_template_3_tr_4_td_1_Template, 2, 2, \"td\", 4);\n ɵngcc0.ɵɵtemplate(2, TooltipPopupComponent_ng_template_3_tr_4_td_2_Template, 3, 2, \"td\", 4);\n ɵngcc0.ɵɵelementStart(3, \"td\");\n ɵngcc0.ɵɵtemplate(4, TooltipPopupComponent_ng_template_3_tr_4_ng_template_4_Template, 0, 0, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const point_r15 = ctx.$implicit;\n const ctx_r24 = ɵngcc0.ɵɵnextContext();\n const colorMarker_r12 = ctx_r24.colorMarker;\n const nameColumn_r13 = ctx_r24.nameColumn;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", colorMarker_r12);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", nameColumn_r13);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", point_r15.template)(\"ngTemplateOutletContext\", point_r15);\n} }\nfunction TooltipPopupComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\")(1, \"tr\")(2, \"th\");\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(4, TooltipPopupComponent_ng_template_3_tr_4_Template, 5, 4, \"tr\", 7);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const points_r9 = ctx.points;\n const categoryText_r10 = ctx.categoryText;\n const colspan_r11 = ctx.colspan;\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"colspan\", colspan_r11);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", categoryText_r10, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", points_r9);\n} }\nfunction CrosshairTooltipComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 1);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r1.style);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.value, \" \");\n} }\nfunction CrosshairTooltipsContainerComponent_kendo_chart_crosshair_tooltip_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-chart-crosshair-tooltip\", 1);\n} if (rf & 2) {\n const key_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"key\", key_r1)(\"popupSettings\", ctx_r0.popupSettings);\n} }\nconst _c1 = [\"surface\"];\nfunction ChartComponent_div_5_ng_template_1_Template(rf, ctx) { }\nfunction ChartComponent_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 6);\n ɵngcc0.ɵɵtemplate(1, ChartComponent_div_5_ng_template_1_Template, 0, 0, \"ng-template\", 7);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r1.donutCenterStyle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.donutCenterTemplate.templateRef);\n} }\nexport { ResizeSensorComponent } from '@progress/kendo-angular-common';\nimport { PopupService, POPUP_CONTAINER, PopupModule } from '@progress/kendo-angular-popup';\nexport { PopupComponent } from '@progress/kendo-angular-popup';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport { exportImage, exportSVG } from '@progress/kendo-drawing';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-charts',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1638166273,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nclass ChartComponentGenerated {\n constructor(configurationService) {\n this.configurationService = configurationService;\n /**\n * Fires when the user clicks an axis label ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.axisLabelClick = new EventEmitter();\n /**\n * Fires as long as the user is dragging the Chart with the mouse or through swipe gestures.\n */\n this.drag = new EventEmitter();\n /**\n * Fires when the user stops dragging the Chart.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires when the user starts dragging the Chart.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the user hovers over a legend item ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.legendItemHover = new EventEmitter();\n /**\n * Fires when the cursor leaves a legend item.\n */\n this.legendItemLeave = new EventEmitter();\n /**\n * Fires when the user clicks a note.\n */\n this.noteClick = new EventEmitter();\n /**\n * Fires when the user hovers over a note.\n */\n this.noteHover = new EventEmitter();\n /**\n * Fires when the cursor leaves a note.\n */\n this.noteLeave = new EventEmitter();\n /**\n * Fires when a pane is rendered because the Chart:\n * * Is rendered.\n * * Performs panning or zooming.\n * * Is exported with different options.\n * The event is used to render custom visuals in the panes.\n */\n this.paneRender = new EventEmitter();\n /**\n * Fires when the user clicks the plot area ([see example]({% slug overview_chart_charts %}#toc-events)).\n * The `click` event is triggered by the `tap` and `contextmenu` events.\n * To distinguish between the original events, inspect the `e.originalEvent.type` field.\n */\n this.plotAreaClick = new EventEmitter();\n /**\n * Fires when the user hovers the plot area ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.plotAreaHover = new EventEmitter();\n /**\n * Fires when the cursor leaves the plot area.\n */\n this.plotAreaLeave = new EventEmitter();\n /**\n * Fires when the Chart is ready to render on screen ([see example]({% slug overview_chart_charts %}#toc-events)).\n * For example, you can use it to remove loading indicators.\n * Any changes made to the options are ignored.\n */\n this.render = new EventEmitter();\n /**\n * Fires when the user modifies the selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.select = new EventEmitter();\n /**\n * Fires when the user completes the modification of the selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.selectEnd = new EventEmitter();\n /**\n * Fires when the user starts modifying the axis selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.selectStart = new EventEmitter();\n /**\n * Fires when the user clicks the Chart series.\n *\n * The `click` event will be triggered by the `tap` and `contextmenu` events ([see example]({% slug overview_chart_charts %}#toc-events)).\n * To distinguish between the original events, inspect the `e.originalEvent.type` field.\n */\n this.seriesClick = new EventEmitter();\n /**\n * Fires when the user hovers the Chart series ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.seriesHover = new EventEmitter();\n /**\n * Fires when the cursor enters a series.\n */\n this.seriesOver = new EventEmitter();\n /**\n * Fires when the cursor leaves a series.\n */\n this.seriesLeave = new EventEmitter();\n /**\n * Fires as long as the user is zooming the Chart by using the mousewheel operation.\n */\n this.zoom = new EventEmitter();\n /**\n * Fires when the user stops zooming the Chart.\n */\n this.zoomEnd = new EventEmitter();\n /**\n * Fires when the user uses the mousewheel to zoom the Chart.\n */\n this.zoomStart = new EventEmitter();\n }\n}\nChartComponentGenerated.ɵfac = function ChartComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nChartComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ChartComponentGenerated, inputs: { pannable: \"pannable\", renderAs: \"renderAs\", seriesColors: \"seriesColors\", title: \"title\", transitions: \"transitions\", zoomable: \"zoomable\", axisDefaults: \"axisDefaults\", categoryAxis: \"categoryAxis\", chartArea: \"chartArea\", legend: \"legend\", panes: \"panes\", paneDefaults: \"paneDefaults\", plotArea: \"plotArea\", series: \"series\", seriesDefaults: \"seriesDefaults\", tooltip: \"tooltip\", valueAxis: \"valueAxis\", xAxis: \"xAxis\", yAxis: \"yAxis\" }, outputs: { axisLabelClick: \"axisLabelClick\", drag: \"drag\", dragEnd: \"dragEnd\", dragStart: \"dragStart\", legendItemHover: \"legendItemHover\", legendItemLeave: \"legendItemLeave\", noteClick: \"noteClick\", noteHover: \"noteHover\", noteLeave: \"noteLeave\", paneRender: \"paneRender\", plotAreaClick: \"plotAreaClick\", plotAreaHover: \"plotAreaHover\", plotAreaLeave: \"plotAreaLeave\", render: \"render\", select: \"select\", selectEnd: \"selectEnd\", selectStart: \"selectStart\", seriesClick: \"seriesClick\", seriesHover: \"seriesHover\", seriesOver: \"seriesOver\", seriesLeave: \"seriesLeave\", zoom: \"zoom\", zoomEnd: \"zoomEnd\", zoomStart: \"zoomStart\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"pannable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChartComponentGenerated.prototype, \"renderAs\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ChartComponentGenerated.prototype, \"seriesColors\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ChartComponentGenerated.prototype, \"transitions\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"zoomable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"axisDefaults\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"categoryAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"chartArea\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"legend\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ChartComponentGenerated.prototype, \"panes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"paneDefaults\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"plotArea\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ChartComponentGenerated.prototype, \"series\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"seriesDefaults\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"tooltip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"valueAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"xAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponentGenerated.prototype, \"yAxis\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"axisLabelClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"drag\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"dragEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"dragStart\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"legendItemHover\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"legendItemLeave\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"noteClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"noteHover\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"noteLeave\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"paneRender\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"plotAreaClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"plotAreaHover\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"plotAreaLeave\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"render\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"select\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"selectEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"selectStart\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"seriesClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"seriesHover\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"seriesOver\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"seriesLeave\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"zoom\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"zoomEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponentGenerated.prototype, \"zoomStart\", void 0);\n\n/**\n * @hidden\n */\nconst THROTTLE_MS = 1000 / 60;\n/**\n * @hidden\n */\nclass Change {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n}\n/**\n * @hidden\n */\nlet ConfigurationService = class ConfigurationService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.store = {};\n this.source = new BehaviorSubject({});\n this.initSource();\n }\n initSource() {\n this.onFastChange$ = this.source.asObservable();\n this.onChange$ = this.onFastChange$.pipe(auditTime(THROTTLE_MS));\n }\n push(store) {\n this.store = store;\n this.next();\n }\n notify(change) {\n this.set(change.key, change.value);\n this.next();\n }\n set(field, value) {\n let store = this.store;\n const parts = field.split('.');\n let key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n next() {\n this.ngZone.runOutsideAngular(() => {\n this.source.next(this.store);\n });\n }\n};\nConfigurationService.ɵfac = function ConfigurationService_Factory(t) { return new (t || ConfigurationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nConfigurationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ConfigurationService, factory: function (t) { return ConfigurationService.ɵfac(t); } });\nConfigurationService = __decorate([ __metadata(\"design:paramtypes\", [NgZone])\n], ConfigurationService);\n\n/**\n * @hidden\n */\nclass BaseEvent {\n /**\n * @hidden\n */\n constructor(sender) {\n this.sender = sender;\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent extends BaseEvent {\n constructor() {\n super(...arguments);\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nclass LegendEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.series = e.series;\n this.seriesIndex = e.seriesIndex;\n this.pointIndex = e.pointIndex;\n this.text = e.text;\n }\n}\n\n/**\n * Arguments for the `legendItemClick` event.\n */\nclass LegendItemClickEvent extends LegendEvent {\n /**\n * If called, the series visibility is not toggled as a result of clicking the legend item.\n */\n preventDefault() {\n super.preventDefault();\n }\n}\n\n/**\n * Arguments for the `axisLabelClick` event.\n */\nclass AxisLabelClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.dataItem = e.dataItem;\n this.index = e.index;\n this.text = e.text;\n this.value = e.value;\n }\n}\n\n/**\n * Arguments for the `drag` event.\n */\nclass DragEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `dragEnd` event.\n */\nclass DragEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `dragStart` event.\n */\nclass DragStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `legendItemHover` event.\n */\nclass LegendItemHoverEvent extends LegendEvent {\n /**\n * If called, the series highlight is not shown as a result of hovering over the legend item.\n */\n preventDefault() {\n super.preventDefault();\n }\n}\n\n/* tslint:disable:no-empty */\n/**\n * Arguments for the `legendItemLeave` event.\n */\nclass LegendItemLeaveEvent extends LegendEvent {\n /**\n * @hidden\n */\n preventDefault() {\n }\n /**\n * @hidden\n */\n isDefaultPrevented() {\n return false;\n }\n}\n\n/**\n * @hidden\n */\nclass NoteEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.series = e.series;\n this.value = e.value;\n this.visual = e.visual;\n }\n}\n\n/**\n * Arguments for the `noteClick` event.\n */\nclass NoteClickEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `noteHover` event.\n */\nclass NoteHoverEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `noteLeave` event.\n */\nclass NoteLeaveEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `paneRender` event.\n */\nclass PaneRenderEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(args, sender) {\n super(sender);\n Object.assign(this, args);\n }\n}\n\n/**\n * Arguments for the `plotAreaClick` event.\n */\nclass PlotAreaClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.originalEvent = e.originalEvent;\n this.value = e.value;\n this.x = e.x;\n this.y = e.y;\n }\n}\n\n/**\n * Arguments for the `plotAreaHover` event.\n */\nclass PlotAreaHoverEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.originalEvent = e.originalEvent;\n this.value = e.value;\n this.x = e.x;\n this.y = e.y;\n }\n}\n\nclass PlotAreaLeaveEvent extends BaseEvent {\n}\n\n/**\n * Arguments for the `render` event.\n */\nclass RenderEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(_e, sender) {\n super(sender);\n }\n}\n\n/**\n * Arguments for the `select` event.\n */\nclass SelectEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `selectEnd` event.\n */\nclass SelectEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `selectStart` event.\n */\nclass SelectStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `seriesClick` event.\n */\nclass SeriesClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.originalEvent = e.originalEvent;\n this.percentage = e.percentage;\n this.point = e.point;\n this.series = e.series;\n this.stackValue = e.stackValue;\n this.value = e.value;\n }\n}\n\n/**\n * @hidden\n */\nclass SeriesEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.originalEvent = e.originalEvent;\n this.percentage = e.percentage;\n this.point = e.point;\n this.series = e.series;\n this.stackValue = e.stackValue;\n this.value = e.value;\n }\n}\n\n/**\n * Arguments for the `seriesHover` event.\n */\nclass SeriesHoverEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `seriesOver` event.\n */\nclass SeriesOverEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `seriesLeave` event.\n */\nclass SeriesLeaveEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `zoom` event.\n */\nclass ZoomEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.delta = e.delta;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `zoomEnd` event.\n */\nclass ZoomEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `zoomStart` event.\n */\nclass ZoomStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\nconst EVENT_MAP = {\n axisLabelClick: AxisLabelClickEvent,\n drag: DragEvent,\n dragEnd: DragEndEvent,\n dragStart: DragStartEvent,\n legendItemHover: LegendItemHoverEvent,\n legendItemLeave: LegendItemLeaveEvent,\n noteClick: NoteClickEvent,\n noteHover: NoteHoverEvent,\n noteLeave: NoteLeaveEvent,\n paneRender: PaneRenderEvent,\n plotAreaClick: PlotAreaClickEvent,\n plotAreaHover: PlotAreaHoverEvent,\n plotAreaLeave: PlotAreaLeaveEvent,\n render: RenderEvent,\n select: SelectEvent,\n selectEnd: SelectEndEvent,\n selectStart: SelectStartEvent,\n seriesClick: SeriesClickEvent,\n seriesHover: SeriesHoverEvent,\n seriesOver: SeriesOverEvent,\n seriesLeave: SeriesLeaveEvent,\n zoom: ZoomEvent,\n zoomEnd: ZoomEndEvent,\n zoomStart: ZoomStartEvent\n};\n/**\n * @hidden\n */\nclass InstanceEventService {\n create(name, args, sender) {\n if (EVENT_MAP[name]) {\n return new EVENT_MAP[name](args, sender);\n }\n }\n}\nInstanceEventService.ɵfac = function InstanceEventService_Factory(t) { return new (t || InstanceEventService)(); };\nInstanceEventService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: InstanceEventService, factory: InstanceEventService.ɵfac });\n\n/**\n * A directive which selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [Donut center template]({% slug donut_seriestypes_charts %}).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

22.5%

\n * of which renewables\n *
\n * \n * \n * \n * \n * \n *
\n * `\n * })\n * export class AppComponent {\n * public data: any[] = [{\n * kind: 'Hydroelectric', share: 0.175\n * }, {\n * kind: 'Nuclear', share: 0.238\n * }, {\n * kind: 'Coal', share: 0.118\n * }, {\n * kind: 'Solar', share: 0.052\n * }, {\n * kind: 'Wind', share: 0.225\n * }, {\n * kind: 'Other', share: 0.192\n * }];\n * }\n *\n * ```\n */\nlet DonutCenterTemplateDirective = class DonutCenterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nDonutCenterTemplateDirective.ɵfac = function DonutCenterTemplateDirective_Factory(t) { return new (t || DonutCenterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDonutCenterTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DonutCenterTemplateDirective, selectors: [[\"\", \"kendoChartDonutCenterTemplate\", \"\"]] });\nDonutCenterTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], DonutCenterTemplateDirective);\n\n/**\n * @hidden\n */\nclass ItemChange {\n constructor(sender, options) {\n this.sender = sender;\n this.options = options;\n }\n}\n/**\n * @hidden\n */\nlet CollectionService = class CollectionService {\n constructor() {\n this.source = new Subject();\n this.onItemChange$ = this.source.asObservable();\n }\n notify(change) {\n this.source.next(change);\n }\n};\nCollectionService.ɵfac = function CollectionService_Factory(t) { return new (t || CollectionService)(); };\nCollectionService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CollectionService, factory: function (t) { return CollectionService.ɵfac(t); } });\nCollectionService = __decorate([ __metadata(\"design:paramtypes\", [])\n], CollectionService);\n\n/**\n * @hidden\n */\nfunction copyChanges(changes, options) {\n for (const propertyName in changes) {\n if (!changes.hasOwnProperty(propertyName)) {\n continue;\n }\n const value = changes[propertyName].currentValue;\n if (value === undefined) {\n delete options[propertyName];\n }\n else {\n options[propertyName] = value;\n }\n }\n}\n\n/**\n * @hidden\n */\nfunction toSimpleChanges(changes) {\n const result = {};\n for (const propertyName in changes) {\n if (!changes.hasOwnProperty(propertyName)) {\n continue;\n }\n result[propertyName] = new SimpleChange(null, changes[propertyName], false);\n }\n return result;\n}\n\n/**\n * @hidden\n */\nclass CollectionItemComponent {\n constructor(configurationService, collectionService) {\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.options = {};\n this.subscription = configurationService.onFastChange$.subscribe(store => {\n this.options = store;\n this.notify();\n });\n }\n ngOnChanges(changes) {\n const store = this.configurationService.store;\n copyChanges(changes, store);\n this.configurationService.push(store);\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * item.notifyChanges({ visible: true });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n notify() {\n if (!this.collectionService) {\n return;\n }\n this.collectionService.notify(new ItemChange(this, this.options));\n }\n}\nCollectionItemComponent.ɵfac = function CollectionItemComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCollectionItemComponent.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CollectionItemComponent, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n\n/**\n * @hidden\n */\nclass SeriesItemComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nSeriesItemComponentGenerated.ɵfac = function SeriesItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesItemComponentGenerated, inputs: { aggregate: \"aggregate\", autoFit: \"autoFit\", axis: \"axis\", border: \"border\", categoryAxis: \"categoryAxis\", categoryField: \"categoryField\", closeField: \"closeField\", color: \"color\", colorField: \"colorField\", connectors: \"connectors\", currentField: \"currentField\", dashType: \"dashType\", data: \"data\", downColor: \"downColor\", downColorField: \"downColorField\", dynamicHeight: \"dynamicHeight\", dynamicSlope: \"dynamicSlope\", errorHighField: \"errorHighField\", errorLowField: \"errorLowField\", explodeField: \"explodeField\", field: \"field\", fromField: \"fromField\", gap: \"gap\", highField: \"highField\", holeSize: \"holeSize\", line: \"line\", lowField: \"lowField\", lowerField: \"lowerField\", margin: \"margin\", maxSize: \"maxSize\", mean: \"mean\", meanField: \"meanField\", median: \"median\", medianField: \"medianField\", minSize: \"minSize\", missingValues: \"missingValues\", name: \"name\", neckRatio: \"neckRatio\", negativeColor: \"negativeColor\", negativeValues: \"negativeValues\", noteTextField: \"noteTextField\", opacity: \"opacity\", openField: \"openField\", outliersField: \"outliersField\", overlay: \"overlay\", padding: \"padding\", q1Field: \"q1Field\", q3Field: \"q3Field\", segmentSpacing: \"segmentSpacing\", size: \"size\", sizeField: \"sizeField\", spacing: \"spacing\", stack: \"stack\", startAngle: \"startAngle\", style: \"style\", summaryField: \"summaryField\", target: \"target\", toField: \"toField\", type: \"type\", upperField: \"upperField\", visible: \"visible\", visibleInLegend: \"visibleInLegend\", visibleInLegendField: \"visibleInLegendField\", visual: \"visual\", width: \"width\", whiskers: \"whiskers\", xAxis: \"xAxis\", xErrorHighField: \"xErrorHighField\", xErrorLowField: \"xErrorLowField\", xField: \"xField\", yAxis: \"yAxis\", yErrorHighField: \"yErrorHighField\", yErrorLowField: \"yErrorLowField\", yField: \"yField\", zIndex: \"zIndex\", errorBars: \"errorBars\", extremes: \"extremes\", highlight: \"highlight\", labels: \"labels\", markers: \"markers\", notes: \"notes\", outliers: \"outliers\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"aggregate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesItemComponentGenerated.prototype, \"autoFit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"axis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"categoryAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"categoryField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"closeField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"colorField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"connectors\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"currentField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"dashType\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], SeriesItemComponentGenerated.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"downColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"downColorField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesItemComponentGenerated.prototype, \"dynamicHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesItemComponentGenerated.prototype, \"dynamicSlope\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"errorHighField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"errorLowField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"explodeField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"field\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"fromField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"gap\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"highField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"holeSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"lowField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"lowerField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"maxSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"mean\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"meanField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"median\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"medianField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"minSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"missingValues\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"neckRatio\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"negativeColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"negativeValues\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"noteTextField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"openField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"outliersField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"overlay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"q1Field\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"q3Field\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"segmentSpacing\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"sizeField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"spacing\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"stack\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"startAngle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"style\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"summaryField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"target\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"toField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"upperField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesItemComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesItemComponentGenerated.prototype, \"visibleInLegend\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"visibleInLegendField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesItemComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"whiskers\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"xAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"xErrorHighField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"xErrorLowField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"xField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"yAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"yErrorHighField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"yErrorLowField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesItemComponentGenerated.prototype, \"yField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesItemComponentGenerated.prototype, \"zIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"errorBars\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"extremes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"highlight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"markers\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"outliers\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesItemComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * @hidden\n */\nclass SettingsComponent {\n constructor(configKey, configurationService) {\n this.configKey = configKey;\n this.configurationService = configurationService;\n this.store = {};\n if (configKey === undefined) {\n throw new Error('Configuration key not set');\n }\n }\n ngOnDestroy() {\n this.store = undefined;\n this.notify();\n }\n ngOnChanges(changes) {\n copyChanges(changes, this.store);\n this.notify();\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * item.notifyChanges({ visible: true });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n markAsVisible() {\n this.store.visible = true;\n this.notify();\n }\n notify() {\n this.configurationService.notify(new Change(this.configKey, this.store));\n }\n}\nSettingsComponent.ɵfac = function SettingsComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSettingsComponent.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SettingsComponent, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n\n/**\n * @hidden\n */\nclass SeriesTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesTooltipComponentGenerated.ɵfac = function SeriesTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the Chart series tooltip\n * ([see example]({% slug tooltips_chart_charts %})).\n */\nlet SeriesTooltipComponent = class SeriesTooltipComponent extends SeriesTooltipComponentGenerated {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n get seriesTooltipTemplateRef() {\n return this.seriesTooltipTemplate;\n }\n};\nSeriesTooltipComponent.ɵfac = function SeriesTooltipComponent_Factory(t) { return new (t || SeriesTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesTooltipComponent, selectors: [[\"kendo-chart-series-item-tooltip\"]], contentQueries: function SeriesTooltipComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.seriesTooltipTemplate = _t.first);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n ContentChild(TemplateRef, { static: false }),\n __metadata(\"design:type\", TemplateRef)\n], SeriesTooltipComponent.prototype, \"seriesTooltipTemplate\", void 0);\nSeriesTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesTooltipComponent);\n\nconst toggle = (flag) => flag === undefined ? false : !flag;\n/**\n * The configuration component for a series item.\n */\nlet SeriesItemComponent = class SeriesItemComponent extends SeriesItemComponentGenerated {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n /**\n * Toggles the series visibility and updates the parent Chart\n * without animated transitions.\n */\n toggleVisibility() {\n this.options.visible = toggle(this.options.visible);\n this.notify();\n }\n /**\n * Toggles the visibility of a point with the given index.\n * Applicable for the Pie, Donut, and Funnel series.\n *\n * @param pointIndex - The zero-based index of the point to toggle.\n */\n togglePointVisibility(pointIndex) {\n const pv = this.options.pointVisibility = this.options.pointVisibility || {};\n pv[pointIndex] = toggle(pv[pointIndex]);\n this.notify();\n }\n get seriesTooltipTemplateRef() {\n if (this.seriesTooltip) {\n return this.seriesTooltip.seriesTooltipTemplateRef;\n }\n }\n};\nSeriesItemComponent.ɵfac = function SeriesItemComponent_Factory(t) { return new (t || SeriesItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nSeriesItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesItemComponent, selectors: [[\"kendo-chart-series-item\"]], contentQueries: function SeriesItemComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, SeriesTooltipComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.seriesTooltip = _t.first);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n ContentChild(SeriesTooltipComponent, { static: false }),\n __metadata(\"design:type\", SeriesTooltipComponent)\n], SeriesItemComponent.prototype, \"seriesTooltip\", void 0);\nSeriesItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], SeriesItemComponent);\n\n/**\n * Fallback theme in case the Theme Service fails\n * to read the variables from the main theme.\n *\n * @hidden\n */\nconst chartDefaultTheme = () => Object.assign({}, chartBaseTheme(), {\n axisDefaults: {\n crosshair: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n labels: {\n color: 'rgb(101, 101, 101)',\n font: '12px serif'\n },\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n },\n majorGridLines: {\n color: 'rgba(0, 0, 0, 0.08)'\n },\n minorGridLines: {\n color: 'rgba(0, 0, 0, 0.04)'\n },\n notes: {\n icon: {\n background: 'rgba(0, 0, 0, 0.5)',\n border: {\n color: 'rgba(0, 0, 0, 0.5)'\n }\n },\n line: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n label: {\n font: '14px serif'\n }\n },\n title: {\n color: 'rgb(101, 101, 101)',\n font: '14px serif'\n }\n },\n chartArea: {\n background: 'rgb(255, 255, 255)'\n },\n legend: {\n inactiveItems: {\n labels: {\n color: 'rgba(102, 102, 102, 0.5)'\n },\n markers: {\n color: 'rgba(102, 102, 102, 0.5)'\n }\n },\n labels: {\n color: 'rgb(101, 101, 101)',\n font: '14px serif'\n }\n },\n seriesDefaults: {\n boxPlot: {\n downColor: 'rgba(0, 0, 0, 0.08)',\n mean: {\n color: 'rgb(246, 246, 246)'\n },\n median: {\n color: 'rgb(246, 246, 246)'\n },\n whiskers: {\n color: 'rgb(255, 99, 88)'\n }\n },\n bullet: {\n target: {\n color: 'rgb(101, 101, 101)'\n }\n },\n candlestick: {\n downColor: 'rgb(101, 101, 101)',\n line: {\n color: 'rgb(101, 101, 101)'\n }\n },\n errorBars: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n horizontalWaterfall: {\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n icon: {\n border: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n labels: {\n background: 'rgb(255, 255, 255)',\n color: 'rgb(101, 101, 101)',\n opacity: 0.8,\n font: '12px serif'\n },\n notes: {\n icon: {\n background: 'rgba(0, 0, 0, 0.5)',\n border: {\n color: 'rgba(0, 0, 0, 0.5)'\n }\n },\n line: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n label: {\n font: '14px serif'\n }\n },\n overlay: {\n gradient: \"none\"\n },\n verticalBoxPlot: {\n downColor: 'rgba(0, 0, 0, 0.08)',\n mean: {\n color: 'rgb(246, 246, 246)'\n },\n median: {\n color: 'rgb(246, 246, 246)'\n },\n whiskers: {\n color: 'rgb(255, 99, 88)'\n }\n },\n verticalBullet: {\n target: {\n color: 'rgb(101, 101, 101)'\n }\n },\n waterfall: {\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n area: {\n opacity: 0.8\n }\n },\n title: {\n color: 'rgb(101, 101, 101)',\n font: '16px serif'\n },\n seriesColors: [\n 'rgb(255, 99, 88)',\n 'rgb(255, 210, 70)',\n 'rgb(120, 210, 55)',\n 'rgb(40, 180, 200)',\n 'rgb(45, 115, 245)',\n 'rgb(170, 70, 190)'\n ]\n});\n\nconst font = (style) => `${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\nconst computedBackgroundColor = (element) => window.getComputedStyle(element).backgroundColor;\nconst letterPos = (letter) => letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\nconst seriesPos = (name) => {\n const alpha = name.match(/series-([a-z])$/);\n if (alpha !== null) {\n return letterPos(alpha[1]);\n }\n const num = name.split('--series-')[1];\n return parseInt(num, 10) - 1;\n};\nconst SERIES_COLORS = 30;\nconst seriesTemplate = () => {\n let template = `\n
\n
\n
\n
\n
\n
\n `;\n for (let i = 0; i < SERIES_COLORS; i++) {\n template += `\n
`;\n }\n return template;\n};\nconst template = () => `\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n\n
\n
\n ${seriesTemplate()}\n
\n`;\n/**\n * @hidden\n */\nlet ThemeService = class ThemeService extends ConfigurationService {\n constructor(ngZone) {\n super(ngZone);\n this.loaded = false;\n }\n loadTheme() {\n if (this.loaded || !isDocumentAvailable()) {\n return;\n }\n if (!this.readTheme()) {\n this.readDefaultTheme();\n }\n this.loaded = true;\n this.next();\n }\n readTheme() {\n this.createElement();\n const available = this.queryColor('accent') !==\n this.queryColor('accent-contrast');\n try {\n if (available) {\n this.push(chartBaseTheme());\n this.setColors();\n this.setFonts();\n this.setSeriesColors();\n }\n }\n finally {\n this.destroyElement();\n }\n return available;\n }\n readDefaultTheme() {\n this.push(chartDefaultTheme());\n }\n createElement() {\n const container = this.element = document.createElement('div');\n container.style.display = 'none';\n container.innerHTML = template();\n document.body.appendChild(container);\n }\n destroyElement() {\n if (this.element) {\n document.body.removeChild(this.element);\n this.element = undefined;\n }\n }\n setStyle(key, value) {\n this.set(key, value);\n }\n setColors() {\n this.mapColor('axisDefaults.crosshair.color', 'chart-crosshair-background');\n this.mapColor('axisDefaults.labels.color', 'normal-text-color');\n this.mapColor('axisDefaults.line.color', 'chart-major-lines');\n this.mapColor('axisDefaults.majorGridLines.color', 'chart-major-lines');\n this.mapColor('axisDefaults.minorGridLines.color', 'chart-minor-lines');\n this.mapColor('axisDefaults.notes.icon.background', 'chart-notes-background');\n this.mapColor('axisDefaults.notes.icon.border.color', 'chart-notes-border');\n this.mapColor('axisDefaults.notes.line.color', 'chart-notes-lines');\n this.mapColor('axisDefaults.title.color', 'normal-text-color');\n this.mapColor('chartArea.background', 'background');\n this.mapColor('legend.inactiveItems.labels.color', 'chart-inactive');\n this.mapColor('legend.inactiveItems.markers.color', 'chart-inactive');\n this.mapColor('legend.labels.color', 'normal-text-color');\n this.mapColor('seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n this.mapColor('seriesDefaults.boxPlot.mean.color', 'base');\n this.mapColor('seriesDefaults.boxPlot.median.color', 'base');\n this.mapColor('seriesDefaults.boxPlot.whiskers.color', 'accent');\n this.mapColor('seriesDefaults.bullet.target.color', 'normal-text-color');\n this.mapColor('seriesDefaults.candlestick.downColor', 'normal-text-color');\n this.mapColor('seriesDefaults.candlestick.line.color', 'normal-text-color');\n this.mapColor('seriesDefaults.errorBars.color', 'chart-error-bars-background');\n this.mapColor('seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n this.mapColor('seriesDefaults.icon.border.color', 'chart-major-lines');\n this.mapColor('seriesDefaults.labels.background', 'background');\n this.mapColor('seriesDefaults.labels.color', 'normal-text-color');\n this.mapColor('seriesDefaults.notes.icon.background', 'chart-notes-background');\n this.mapColor('seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n this.mapColor('seriesDefaults.notes.line.color', 'chart-notes-lines');\n this.mapColor('seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n this.mapColor('seriesDefaults.verticalBoxPlot.mean.color', 'base');\n this.mapColor('seriesDefaults.verticalBoxPlot.median.color', 'base');\n this.mapColor('seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n this.mapColor('seriesDefaults.verticalBullet.target.color', 'normal-text-color');\n this.mapColor('seriesDefaults.waterfall.line.color', 'chart-major-lines');\n this.mapColor('title.color', 'normal-text-color');\n const opacity = parseFloat(this.queryStyle('chart-area-opacity').opacity);\n if (!isNaN(opacity)) {\n this.setStyle('seriesDefaults.area.opacity', opacity);\n this.setStyle('seriesDefaults.radarArea.opacity', opacity);\n this.setStyle('seriesDefaults.verticalArea.opacity', opacity);\n this.setStyle('seriesDefaults.labels.opacity', opacity);\n }\n this.setInactiveOpacity(['area', 'verticalArea'], 'chart-area-inactive-opacity');\n this.setInactiveOpacity(['line', 'verticalLine'], 'chart-line-inactive-opacity');\n }\n setInactiveOpacity(seriesTypes, selector) {\n const inactiveOpacity = parseFloat(this.queryStyle(selector).opacity);\n if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {\n seriesTypes.forEach(type => this.setStyle(`seriesDefaults.${type}.highlight.inactiveOpacity`, inactiveOpacity));\n }\n }\n setFonts() {\n const defaultFont = font(this.queryStyle('chart-font'));\n const titleFont = font(this.queryStyle('chart-title-font'));\n const paneTitleFont = font(this.queryStyle('chart-pane-title-font'));\n const labelFont = font(this.queryStyle('chart-label-font'));\n this.setStyle('axisDefaults.labels.font', labelFont);\n this.setStyle('axisDefaults.notes.label.font', defaultFont);\n this.setStyle('axisDefaults.title.font', defaultFont);\n this.setStyle('legend.labels.font', defaultFont);\n this.setStyle('seriesDefaults.labels.font', labelFont);\n this.setStyle('seriesDefaults.notes.label.font', defaultFont);\n this.setStyle('title.font', titleFont);\n this.setStyle('paneDefaults.title.font', paneTitleFont);\n }\n setSeriesColors() {\n const element = this.element;\n const series = [].slice.call(element.querySelectorAll('.k-var--series div'));\n const unsetColor = computedBackgroundColor(element.querySelector('.k-var--series-unset'));\n const seriesColors = series.reduce((arr, el) => {\n const pos = seriesPos(el.className);\n const color = computedBackgroundColor(el);\n if (color !== unsetColor) {\n arr[pos] = color;\n }\n return arr;\n }, [] // Will populate the series colors in this array\n );\n this.setStyle('seriesColors', seriesColors);\n }\n mapColor(key, varName) {\n this.setStyle(key, this.queryColor(varName));\n }\n queryColor(varName) {\n return this.queryStyle(varName).backgroundColor;\n }\n queryStyle(varName) {\n const element = this.element.querySelector(`.k-var--${varName}`);\n return window.getComputedStyle(element);\n }\n};\nThemeService.ɵfac = function ThemeService_Factory(t) { return new (t || ThemeService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nThemeService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ThemeService, factory: function (t) { return ThemeService.ɵfac(t); } });\nThemeService = __decorate([ __metadata(\"design:paramtypes\", [NgZone])\n], ThemeService);\n\n/**\n * @hidden\n */\nclass ChartInstanceObserver extends InstanceObserver {\n constructor(instance) {\n super(instance);\n this.handlerMap = {\n hideTooltip: 'onHideTooltip',\n legendItemClick: 'onLegendItemClick',\n render: 'onRender',\n showTooltip: 'onShowTooltip',\n init: 'onInit'\n };\n }\n}\n\n/**\n * @hidden\n */\nlet TooltipTemplateService = class TooltipTemplateService {\n setTemplate(template) {\n this.template = template;\n }\n getTemplate(seriesIndex) {\n if (this.seriesTemplates && this.seriesTemplates[seriesIndex]) {\n return this.seriesTemplates[seriesIndex];\n }\n return this.template;\n }\n setSeriesTemplates(seriesTemplates) {\n this.seriesTemplates = seriesTemplates;\n }\n setSharedTemplate(sharedTemplate) {\n this.sharedTemplate = sharedTemplate;\n }\n getSharedTemplate() {\n return this.sharedTemplate;\n }\n};\nTooltipTemplateService.ɵfac = function TooltipTemplateService_Factory(t) { return new (t || TooltipTemplateService)(); };\nTooltipTemplateService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TooltipTemplateService, factory: function (t) { return TooltipTemplateService.ɵfac(t); } });\n\n/**\n * A directive that selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [series tooltip]({% slug tooltips_chart_charts %}#toc-series-tooltip).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Value is {{value}}\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nlet SeriesTooltipTemplateDirective = class SeriesTooltipTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nSeriesTooltipTemplateDirective.ɵfac = function SeriesTooltipTemplateDirective_Factory(t) { return new (t || SeriesTooltipTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nSeriesTooltipTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesTooltipTemplateDirective, selectors: [[\"\", \"kendoChartSeriesTooltipTemplate\", \"\"]] });\nSeriesTooltipTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], SeriesTooltipTemplateDirective);\n\n/**\n * A directive that selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [shared series tooltip]({% slug tooltips_chart_charts %}#toc-shared-tooltip).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n *
{{ category }}
\n *
\n * {{ point.series.name }} : {{ point.value }}\n *
\n *
\n *
\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
\n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nlet SharedTooltipTemplateDirective = class SharedTooltipTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nSharedTooltipTemplateDirective.ɵfac = function SharedTooltipTemplateDirective_Factory(t) { return new (t || SharedTooltipTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nSharedTooltipTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SharedTooltipTemplateDirective, selectors: [[\"\", \"kendoChartSharedTooltipTemplate\", \"\"]] });\nSharedTooltipTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], SharedTooltipTemplateDirective);\n\n/**\n * The point that is passed to the tooltip template.\n */\nclass TooltipTemplatePoint {\n /**\n * @hidden\n */\n constructor(point, format, template) {\n this.value = point.value;\n this.category = point.category;\n this.categoryIndex = point.categoryIx;\n this.series = point.series;\n this.dataItem = point.dataItem;\n this.percentage = point.percentage;\n this.runningTotal = point.runningTotal;\n this.total = point.total;\n this.low = point.low;\n this.high = point.high;\n this.xLow = point.xLow;\n this.xHigh = point.xHigh;\n this.yLow = point.yLow;\n this.yHigh = point.yHigh;\n this.template = template;\n this.point = point;\n this.format = format;\n }\n /**\n * @hidden\n */\n get formattedValue() {\n return this.format ? this.point.formatValue(this.format) : String(this.value);\n }\n}\n\n/* tslint:disable:align no-empty */\nconst POSITION_MODE = 'absolute';\nconst COLLISION = { horizontal: \"fit\", vertical: \"fit\" };\n/**\n * @hidden\n */\nclass BaseTooltip {\n constructor(popupService, localizationService) {\n this.popupService = popupService;\n this.localizationService = localizationService;\n this.style = {};\n this.popupRef = null;\n }\n get active() {\n return this.popupRef !== null;\n }\n show(e) {\n const align = e.anchor.align;\n const offset = this.position(e.anchor.point);\n this.style = e.style;\n if (!this.popupRef) {\n this.popupRef = this.popupService.open(Object.assign({\n offset: offset,\n popupAlign: align,\n animate: this.animate,\n content: this.templateRef,\n collision: COLLISION,\n positionMode: POSITION_MODE\n }, this.popupSettings));\n if (this.localizationService.rtl) {\n this.popupRef.popupElement.setAttribute('dir', 'rtl');\n }\n this.onInit();\n }\n else {\n const popup = this.popupRef.popup.instance;\n popup.offset = offset;\n popup.popupAlign = align;\n }\n }\n hide() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n onInit() {\n }\n ngOnDestroy() {\n this.hide();\n }\n position(offset) {\n if (!this.popupSettings || !this.popupSettings.appendTo) {\n return offset;\n }\n const appendTo = this.popupSettings.appendTo.element.nativeElement;\n console.log('appendTo', appendTo);\n const bbox = appendTo.getBoundingClientRect();\n const { scrollLeft, scrollTop } = this.scrollOffset(appendTo);\n return {\n left: offset.left - bbox.left - scrollLeft,\n top: offset.top - bbox.top - scrollTop\n };\n }\n scrollOffset(element) {\n if (!element) {\n return null;\n }\n let scrollLeft = element.scrollLeft;\n let scrollTop = element.scrollTop;\n let parent = element.parentElement;\n while (parent) {\n scrollLeft += parent.scrollLeft;\n scrollTop += parent.scrollTop;\n parent = parent.parentElement;\n }\n return { scrollLeft, scrollTop };\n }\n}\nBaseTooltip.ɵfac = function BaseTooltip_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nBaseTooltip.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: BaseTooltip });\n\n/**\n * @hidden\n */\nfunction hasParent(element, parent) {\n let current = element;\n while (current && current !== parent) {\n current = current.parentNode;\n }\n return current ? true : false;\n}\n\n/**\n * @hidden\n */\nfunction bodyFactory() {\n if (isDocumentAvailable()) {\n return new ElementRef(document.body);\n }\n}\n\nconst SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\nconst TOOLTIP_CLASS = \"k-chart-tooltip\";\nconst ɵ0$2 = bodyFactory;\n// Codelyzer 2.0.0-beta2 doesn't handle inherited members\n/* tslint:disable:no-access-missing-member */\n/**\n * @hidden\n */\nlet TooltipPopupComponent = class TooltipPopupComponent extends BaseTooltip {\n constructor(popupService, templateService, localizationService, ngZone) {\n super(popupService, localizationService);\n this.popupService = popupService;\n this.templateService = templateService;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.seriesTooltipContext = {};\n this.seriesSharedTooltipContext = {};\n this.animate = true;\n this.wrapperClass = 'k-chart-tooltip-wrapper';\n this.leave = new EventEmitter();\n this.popupClasses = {};\n }\n show(e) {\n this.shared = e.shared;\n this.popupClasses = Object.assign({\n [SHARED_TOOLTIP_CLASS]: e.shared,\n [TOOLTIP_CLASS]: true,\n [e.className]: !!e.className\n }, this.classNames);\n if (!e.shared) {\n this.seriesTooltipContext = new TooltipTemplatePoint(e.point, e.format);\n this.seriesTooltipTemplateRef = this.pointTemplateRef(e.point);\n }\n else {\n this.seriesSharedTooltipTemplateRef = this.templateService.getSharedTemplate()\n || this.defaultSharedTooltipTemplate.templateRef;\n this.seriesSharedTooltipContext = this.sharedTemplateContext(e);\n }\n super.show(e);\n }\n containsElement(element) {\n if (this.popupRef) {\n return hasParent(element, this.popupRef.popupElement);\n }\n }\n sharedTemplateContext(e) {\n const points = e.points;\n const nameColumn = points.filter((point) => typeof point.series.name !== 'undefined').length > 0;\n const colorMarker = e.series.length > 1;\n let colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n return {\n category: e.category,\n categoryText: e.categoryText,\n colorMarker: colorMarker,\n colspan: colspan,\n nameColumn: nameColumn,\n points: this.wrapPoints(e.points, e.format)\n };\n }\n pointTemplateRef(point) {\n return this.templateService.getTemplate(point.series.index) || this.defaultSeriesTooltipTemplate.templateRef;\n }\n wrapPoints(points, format) {\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n const template = this.pointTemplateRef(point);\n const pointFormat = ((point.options || {}).tooltip || {}).format || format;\n result.push(new TooltipTemplatePoint(point, pointFormat, template));\n }\n return result;\n }\n onInit() {\n this.ngZone.runOutsideAngular(() => {\n this.mouseleaveSubscription = this.popupRef.popupElement.addEventListener('mouseleave', (args) => {\n this.leave.emit(args);\n });\n });\n this.popupRef.popupElement.className += ` ${this.wrapperClass}`;\n }\n hide() {\n if (this.mouseleaveSubscription) {\n this.mouseleaveSubscription();\n this.mouseleaveSubscription = null;\n }\n super.hide();\n }\n};\nTooltipPopupComponent.ɵfac = function TooltipPopupComponent_Factory(t) { return new (t || TooltipPopupComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.PopupService), ɵngcc0.ɵɵdirectiveInject(TooltipTemplateService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nTooltipPopupComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TooltipPopupComponent, selectors: [[\"kendo-chart-tooltip-popup\"]], viewQuery: function TooltipPopupComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(SeriesTooltipTemplateDirective, 5);\n ɵngcc0.ɵɵviewQuery(SharedTooltipTemplateDirective, 5);\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultSeriesTooltipTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultSharedTooltipTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.templateRef = _t.first);\n } }, inputs: { animate: \"animate\", wrapperClass: \"wrapperClass\", classNames: \"classNames\", popupSettings: \"popupSettings\" }, outputs: { leave: \"leave\" }, features: [ɵngcc0.ɵɵProvidersFeature([PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: ɵ0$2\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"content\", \"\"], [\"kendoChartSeriesTooltipTemplate\", \"\"], [\"kendoChartSharedTooltipTemplate\", \"\"], [3, \"ngClass\", \"ngStyle\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"innerHTML\"], [4, \"ngFor\", \"ngForOf\"], [1, \"k-chart-shared-tooltip-marker\"]], template: function TooltipPopupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TooltipPopupComponent_ng_template_0_Template, 3, 4, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, TooltipPopupComponent_ng_template_2_Template, 1, 1, \"ng-template\", 1);\n ɵngcc0.ɵɵtemplate(3, TooltipPopupComponent_ng_template_3_Template, 5, 3, \"ng-template\", 2);\n } }, directives: [ɵngcc3.NgClass, ɵngcc3.NgStyle, ɵngcc3.NgIf, ɵngcc3.NgTemplateOutlet, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, ɵngcc3.NgForOf], encapsulation: 2 });\n__decorate([\n ViewChild(SeriesTooltipTemplateDirective, { static: false }),\n __metadata(\"design:type\", SeriesTooltipTemplateDirective)\n], TooltipPopupComponent.prototype, \"defaultSeriesTooltipTemplate\", void 0);\n__decorate([\n ViewChild(SharedTooltipTemplateDirective, { static: false }),\n __metadata(\"design:type\", SharedTooltipTemplateDirective)\n], TooltipPopupComponent.prototype, \"defaultSharedTooltipTemplate\", void 0);\n__decorate([\n ViewChild('content', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], TooltipPopupComponent.prototype, \"templateRef\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TooltipPopupComponent.prototype, \"animate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TooltipPopupComponent.prototype, \"classNames\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TooltipPopupComponent.prototype, \"popupSettings\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TooltipPopupComponent.prototype, \"wrapperClass\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TooltipPopupComponent.prototype, \"leave\", void 0);\nTooltipPopupComponent = __decorate([ __metadata(\"design:paramtypes\", [PopupService,\n TooltipTemplateService,\n LocalizationService,\n NgZone])\n], TooltipPopupComponent);\n\nconst ɵ0$3 = bodyFactory;\n// Codelyzer 2.0.0-beta2 doesn't handle inherited members\n/* tslint:disable:no-access-missing-member */\n/**\n * @hidden\n */\nlet CrosshairTooltipComponent = class CrosshairTooltipComponent extends BaseTooltip {\n constructor(popupService, localizationService) {\n super(popupService, localizationService);\n this.animate = false;\n }\n show(e) {\n super.show(e);\n this.value = e.value;\n this.popupRef.popup.changeDetectorRef.detectChanges();\n }\n};\nCrosshairTooltipComponent.ɵfac = function CrosshairTooltipComponent_Factory(t) { return new (t || CrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CrosshairTooltipComponent, selectors: [[\"kendo-chart-crosshair-tooltip\"]], viewQuery: function CrosshairTooltipComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.templateRef = _t.first);\n } }, inputs: { key: \"key\", popupSettings: \"popupSettings\" }, features: [ɵngcc0.ɵɵProvidersFeature([PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: ɵ0$3\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 0, consts: [[\"content\", \"\"], [1, \"k-chart-tooltip\", \"k-chart-crosshair-tooltip\", 3, \"ngStyle\"]], template: function CrosshairTooltipComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CrosshairTooltipComponent_ng_template_0_Template, 2, 2, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc3.NgStyle], encapsulation: 2 });\n__decorate([\n ViewChild('content', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], CrosshairTooltipComponent.prototype, \"templateRef\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CrosshairTooltipComponent.prototype, \"key\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CrosshairTooltipComponent.prototype, \"popupSettings\", void 0);\nCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [PopupService, LocalizationService])\n], CrosshairTooltipComponent);\n\nconst AXES = [\"categoryAxis\", \"valueAxis\", \"xAxis\", \"yAxis\"];\n/**\n * @hidden\n */\nlet CrosshairTooltipsContainerComponent = class CrosshairTooltipsContainerComponent {\n /**\n * @hidden\n */\n constructor() {\n this.tooltipKeys = [];\n this.tooltipsMap = {};\n }\n show(e) {\n const tooltipComponents = this.crossahirTooltipComponents.toArray();\n const axisName = e.axisName;\n const axisIndex = e.axisIndex;\n for (let idx = 0; idx < tooltipComponents.length; idx++) {\n if (tooltipComponents[idx].key === axisName + axisIndex) {\n tooltipComponents[idx].show(e);\n break;\n }\n }\n }\n hide() {\n const tooltipComponents = this.crossahirTooltipComponents.toArray();\n for (let idx = 0; idx < tooltipComponents.length; idx++) {\n tooltipComponents[idx].hide();\n }\n }\n get active() {\n return this.tooltipKeys.length > 0;\n }\n createCrosshairTooltips(options) {\n const newMap = this.mapTooltips(options);\n const map = this.tooltipsMap;\n for (let key in map) {\n if (!newMap[key]) {\n this.removeTooltip(key);\n delete map[key];\n }\n }\n for (let key in newMap) {\n if (!map[key]) {\n map[key] = newMap[key];\n this.tooltipKeys.push(key);\n }\n }\n }\n removeTooltip(key) {\n const keys = this.tooltipKeys;\n for (let idx = 0; idx < keys.length; idx++) {\n if (keys[idx] === key) {\n keys.splice(idx, 1);\n break;\n }\n }\n }\n mapTooltips(options) {\n const map = {};\n for (let idx = 0; idx < AXES.length; idx++) {\n const tooltips = this.axesCrosshairTooltipOptions(options, AXES[idx]);\n for (let tooltipIdx = 0; tooltipIdx < tooltips.length; tooltipIdx++) {\n const tooltip = tooltips[tooltipIdx];\n map[tooltip.name + tooltip.index] = tooltip;\n }\n }\n return map;\n }\n axesCrosshairTooltipOptions(options, name) {\n const result = [];\n if (options[name]) {\n const axes = [].concat(options[name]);\n for (let idx = 0; idx < axes.length; idx++) {\n const tooltip = (axes[idx].crosshair || {}).tooltip;\n if (tooltip && tooltip.visible) {\n result.push({\n index: idx,\n name: name\n });\n }\n }\n }\n return result;\n }\n};\nCrosshairTooltipsContainerComponent.ɵfac = function CrosshairTooltipsContainerComponent_Factory(t) { return new (t || CrosshairTooltipsContainerComponent)(); };\nCrosshairTooltipsContainerComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CrosshairTooltipsContainerComponent, selectors: [[\"kendo-chart-crosshair-tooltips-container\"]], viewQuery: function CrosshairTooltipsContainerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(CrosshairTooltipComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.crossahirTooltipComponents = _t);\n } }, inputs: { popupSettings: \"popupSettings\" }, decls: 1, vars: 1, consts: [[3, \"key\", \"popupSettings\", 4, \"ngFor\", \"ngForOf\"], [3, \"key\", \"popupSettings\"]], template: function CrosshairTooltipsContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CrosshairTooltipsContainerComponent_kendo_chart_crosshair_tooltip_0_Template, 1, 2, \"kendo-chart-crosshair-tooltip\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.tooltipKeys);\n } }, directives: [ɵngcc3.NgForOf, CrosshairTooltipComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CrosshairTooltipsContainerComponent.prototype, \"popupSettings\", void 0);\n__decorate([\n ViewChildren(CrosshairTooltipComponent),\n __metadata(\"design:type\", QueryList)\n], CrosshairTooltipsContainerComponent.prototype, \"crossahirTooltipComponents\", void 0);\n\nconst getTouch = (domEvent) => {\n return {\n x: {\n location: domEvent.pageX\n },\n y: {\n location: domEvent.pageY\n }\n };\n};\nconst eventArgs = (e, previousArgs) => {\n const pointers = e.pointers;\n const pointer = pointers[0];\n const xLocation = pointer.pageX;\n const yLocation = pointer.pageY;\n let distance = 0;\n if (pointers.length > 1) {\n const pointer1 = pointers[0];\n const pointer2 = pointers[1];\n distance = Math.sqrt(Math.pow(pointer1.pageX - pointer2.pageX, 2) + Math.pow(pointer1.pageY - pointer2.pageY, 2));\n }\n return {\n distance: distance,\n event: e.srcEvent,\n preventDefault: function () {\n e.preventDefault();\n },\n target: e.target,\n touches: pointers.map(getTouch),\n type: e.type,\n x: {\n delta: previousArgs ? xLocation - previousArgs.x.location : 0,\n initialDelta: e.deltaX,\n location: xLocation,\n startLocation: xLocation - e.deltaX\n },\n y: {\n delta: previousArgs ? yLocation - previousArgs.y.location : 0,\n initialDelta: e.deltaY,\n location: yLocation,\n startLocation: yLocation - e.deltaY\n }\n };\n};\nfunction shouldBindGroup(groupNames, events) {\n for (let idx = 0; idx < groupNames.length; idx++) {\n if (events[groupNames[idx]]) {\n return true;\n }\n }\n return false;\n}\nconst eventGroups = [{\n end: 'panend',\n move: 'panmove',\n start: 'panstart'\n }, {\n gesturechange: 'pinchmove',\n gestureend: 'pinchend',\n gesturestart: 'pinchstart'\n }, {\n press: 'press'\n }, {\n tap: 'tap'\n }];\n/**\n * @hidden\n */\nclass DomEvents {\n constructor(hammerInstance, events) {\n this.hammerInstance = hammerInstance;\n this.eventHandlers = {};\n this.tap = this.tap.bind(this);\n this.press = this.press.bind(this);\n this.panstart = this.panstart.bind(this);\n this.panmove = this.panmove.bind(this);\n this.panend = this.panend.bind(this);\n this.pinchstart = this.pinchstart.bind(this);\n this.pinchmove = this.pinchmove.bind(this);\n this.pinchend = this.pinchend.bind(this);\n if (events) {\n this.bind(events);\n }\n }\n tap(e) {\n this.trigger('tap', e);\n }\n press(e) {\n this.trigger('press', e);\n }\n panstart(e) {\n delete this.previous;\n this.previous = this.trigger('start', e);\n }\n panmove(e) {\n this.previous = this.trigger('move', e);\n }\n panend(e) {\n this.trigger('end', e);\n delete this.previous;\n }\n pinchstart(e) {\n this.trigger('gesturestart', e);\n }\n pinchmove(e) {\n this.trigger('gesturechange', e);\n }\n pinchend(e) {\n this.trigger('gestureend', e);\n }\n trigger(name, e) {\n const args = eventArgs(e, this.previous);\n if (this.eventHandlers[name]) {\n this.eventHandlers[name](args);\n }\n return args;\n }\n bind(events = {}) {\n this.unbind();\n this.eventHandlers = events;\n for (let idx = 0; idx < eventGroups.length; idx++) {\n const eventGroup = eventGroups[idx];\n const groupNames = Object.keys(eventGroup);\n if (shouldBindGroup(groupNames, events)) {\n for (let nameIdx = 0; nameIdx < groupNames.length; nameIdx++) {\n const name = eventGroup[groupNames[nameIdx]];\n this.hammerInstance.on(name, this[name]);\n }\n }\n }\n }\n unbind() {\n if (this.hammerInstance) {\n this.hammerInstance.off();\n }\n this.eventHandlers = {};\n }\n destroy() {\n if (this.hammerInstance) {\n this.hammerInstance.destroy();\n delete this.hammerInstance;\n }\n delete this.eventHandlers;\n }\n toggleDrag(enable) {\n this.toggle('pan', enable);\n }\n toggleZoom(enable) {\n this.toggle('pinch', enable);\n }\n toggle(recognizer, enable) {\n if (this.hammerInstance) {\n const instanceRecognizer = this.hammerInstance.get(recognizer);\n instanceRecognizer.set({\n enable: enable\n });\n }\n }\n}\n\nconst MISSING_HAMMER_MESSAGE = 'Hammerjs is not loaded.' +\n 'Solution: http://www.telerik.com/kendo-angular-ui/components/charts/troubleshooting/#toc-hammerjs-is-not-loaded';\n/**\n * @hidden\n */\nclass DomEventsBuilder$1 {\n static create(element, events) {\n if (typeof window !== 'undefined') {\n const HAMMER = window.Hammer;\n if (!HAMMER) {\n if (isDevMode()) {\n throw new Error(MISSING_HAMMER_MESSAGE);\n }\n return;\n }\n const hammerInstance = new HAMMER(element, {\n recognizers: [\n [HAMMER.Tap],\n [HAMMER.Pan],\n [HAMMER.Pinch],\n [HAMMER.Press, { time: 0 }]\n ]\n });\n return new DomEvents(hammerInstance, events);\n }\n }\n}\n\nconst dateCategoryAxisFormats = DateCategoryAxis.prototype.options.labels.dateFormats;\nconst dateValueAxisFormats = DateValueAxis.prototype.options.labels.dateFormats;\nconst dateFormats = {\n milliseconds: \"HH:mm:ss.SSS\",\n seconds: { time: 'medium' },\n minutes: { time: 'short' },\n hours: { time: 'short' },\n days: { skeleton: 'Md' },\n weeks: { skeleton: 'Md' },\n months: { skeleton: 'yyMMM' },\n years: { skeleton: 'y' }\n};\nObject.assign(dateCategoryAxisFormats, dateFormats);\nObject.assign(dateValueAxisFormats, dateFormats);\nDomEventsBuilder.register(DomEventsBuilder$1);\n\nfunction hasObservers(emitter) {\n return emitter.observers.length > 0;\n}\n/**\n * The root Chart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public legendVisible: boolean = true;\n * public seriesVisible: boolean = true;\n *\n * public toggleSeries(): void {\n * this.seriesVisible = !this.seriesVisible;\n * }\n *\n * public toggleLegend(): void {\n * this.legendVisible = !this.legendVisible;\n * }\n * }\n *\n * ```\n */\nlet ChartComponent = class ChartComponent extends ChartComponentGenerated {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n super(configurationService);\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * Fires when a legend item is clicked before the selected series visibility is toggled.\n * Can be prevented.\n */\n this.legendItemClick = new EventEmitter();\n /**\n * Limits the automatic resizing of the Chart. Sets the maximum number of times per second\n * that the component redraws its content when the size of its container changes.\n * Defaults to `10`. To disable the automatic resizing, set it to `0`.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * seriesData: number[] = [1, 2, 3, 5];\n * }\n * ```\n */\n this.resizeRateLimit = 10;\n this.theme = null;\n this.suppressTransitions = false;\n this.rtl = false;\n this.hostClasses = ['k-chart', 'k-widget'];\n validatePackage(packageMetadata);\n this.themeService.loadTheme();\n this.refreshWait();\n }\n ngOnInit() {\n if (this.element) {\n this.hostClasses.forEach(name => {\n this.renderer.addClass(this.element.nativeElement, name);\n });\n this.renderer.setStyle(this.element.nativeElement, 'position', 'relative');\n }\n }\n ngAfterViewInit() {\n if (this.canRender) {\n this.ngZone.runOutsideAngular(() => {\n const chartMouseleave = this.renderer.listen(this.surfaceElement.nativeElement, 'mouseleave', this.chartMouseleave.bind(this));\n this.domSubscriptions = () => {\n chartMouseleave();\n };\n });\n }\n this.setDirection();\n this.subscriptions = this.intl.changes.subscribe(this.intlChange.bind(this));\n this.subscriptions.add(this.localizationService.changes.subscribe(this.rtlChange.bind(this)));\n }\n ngAfterViewChecked() {\n if (this.instance && this.autoResize) {\n this.ngZone.runOutsideAngular(() => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n this.resize();\n }, 0);\n });\n }\n }\n ngOnChanges(changes) {\n const store = this.configurationService.store;\n copyChanges(changes, store);\n store.popupSettings = null;\n this.configurationService.push(store);\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * chart.notifyChanges({ title: { text: 'New Title' } });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n ngOnDestroy() {\n this.destroyed = true;\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.domSubscriptions) {\n this.domSubscriptions();\n this.domSubscriptions = null;\n }\n if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n }\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n clearTimeout(this.resizeTimeout);\n clearTimeout(this.redrawTimeout);\n }\n createInstance(element, observer) {\n this.instance = new Chart(element, this.options, this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n /**\n * Exports the Chart as an image. The export operation is asynchronous and returns a promise.\n *\n * @param {ImageExportOptions} options - The parameters for the exported image.\n * @returns {Promise} - A promise that will be resolved with a PNG image encoded as a Data URI.\n */\n exportImage(options = {}) {\n return exportImage(this.exportVisual(options), options);\n }\n /**\n * Exports the Chart as an SVG document. The export operation is asynchronous and returns a promise.\n *\n * @param options - The parameters for the exported file.\n * @returns - A promise that will be resolved with an SVG document that is encoded as a Data URI.\n */\n exportSVG(options = {}) {\n return exportSVG(this.exportVisual(options), options);\n }\n /**\n * Exports the Chart as a Drawing `Scene`.\n *\n * @param options - The parameters for the export operation.\n * @returns - The root Group of the scene.\n */\n exportVisual(options = {}) {\n return this.instance.exportVisual(options);\n }\n /**\n * Returns the axis with the specified name.\n *\n * @param {string} name - The axis name.\n * @returns {ChartAxis} - The axis with a corresponding name.\n */\n findAxisByName(name) {\n if (this.instance) {\n return this.instance.findAxisByName(name);\n }\n }\n /**\n * Returns the pane at the specified index.\n *\n * @param {number} index - The pane index.\n * @returns {ChartPane} - The pane at the specified index.\n */\n findPaneByIndex(index) {\n if (this.instance) {\n return this.instance.findPaneByIndex(index);\n }\n }\n /**\n * Returns the pane with the specified name.\n *\n * @param {string} name - The name of the pane.\n * @returns {ChartPane} - The pane with the provided name.\n */\n findPaneByName(name) {\n if (this.instance) {\n return this.instance.findPaneByName(name);\n }\n }\n /**\n * Returns the plot area of the Chart.\n * @returns {ChartPlotArea} - The plot area of the Chart.\n */\n getPlotArea() {\n if (this.instance) {\n return this.instance.plotArea();\n }\n }\n /**\n * Highlights the series points or the segments of a Pie, Donut, or Funnel charts.\n *\n * See [Series Highlight]({% slug serieshighlight_chart_charts %}) for more details.\n *\n * In the following example, the callback is evaluated for each data point.\n * If the function returns `true`, the point is highlighted.\n *\n * {% meta height:500 %}\n * {% embed_file elements/highlight/api/app.component.ts preview %}\n * {% embed_file shared/app.module.ts hidden %}\n * {% embed_file shared/main.ts hidden %}\n * {% endmeta %}\n *\n * @param show - A Boolean value that indicates whether the highlight is shown or hidden.\n * @param filter - A string that represents the series or category name, an object with the series and category name, or a function which will be called for each point. The function should return `true` for the points for which the highlight is toggled.\n */\n toggleHighlight(show, filter) {\n if (this.instance) {\n this.instance.toggleHighlight(show, filter);\n }\n }\n /**\n * Hides the tooltip of the Chart.\n */\n hideTooltip() {\n if (this.instance) {\n this.instance.hideTooltip();\n }\n }\n /**\n * Shows the Chart tooltip of a specific point or the shared tooltip of a specific category.\n *\n * @param filter - The category for a shared tooltip or a function which will be called for each point until the function returns `true`.\n */\n showTooltip(filter) {\n if (this.instance) {\n this.instance.showTooltip(filter);\n }\n }\n init() {\n if (!this.canRender) {\n return;\n }\n const element = this.surfaceElement.nativeElement;\n const instanceObserver = new ChartInstanceObserver(this);\n this.createInstance(element, instanceObserver);\n }\n /**\n * Detects the size of the container and redraws the Chart.\n * Resizing is automatic unless you set the `resizeRateLimit` option to `0`.\n */\n resize() {\n if (this.instance) {\n this.instance.resize();\n }\n }\n /**\n * @hidden\n */\n onResize(_event) {\n if (this.autoResize) {\n this.resize();\n }\n }\n onLegendItemClick(e) {\n this.run(() => {\n const args = new LegendItemClickEvent(e, this);\n this.legendItemClick.emit(args);\n if (!args.isDefaultPrevented()) {\n const series = this.seriesComponents.toArray()[e.series.index];\n if (!series) {\n return;\n }\n if (e.pointIndex === undefined) {\n series.toggleVisibility();\n }\n else {\n series.togglePointVisibility(e.pointIndex);\n }\n this.suppressTransitions = true;\n }\n }, hasObservers(this.legendItemClick), this.seriesComponents.length > 0);\n }\n onInit(e) {\n this.instance = e.sender;\n }\n onRender(e) {\n const donutCenterStyle = this.getDonutCenterStyle();\n this.run(() => {\n const args = new RenderEvent(e, this);\n this.surface = e.sender.surface;\n this.render.emit(args);\n this.donutCenterStyle = donutCenterStyle;\n }, hasObservers(this.render), this.donutCenterStyle !== donutCenterStyle);\n }\n onShowTooltip(e) {\n this.run(() => {\n if (!e.crosshair) {\n this.tooltipInstance.show(e);\n }\n else {\n this.crossahirTooltips.show(e);\n }\n }, !e.crosshair, true);\n }\n onHideTooltip(e) {\n if (!e.crosshair) {\n if (this.tooltipInstance.active) {\n this.tooltipInstance.hide();\n this.detectChanges();\n }\n }\n else if (this.crossahirTooltips.active) {\n this.crossahirTooltips.hide();\n this.detectChanges();\n }\n }\n trigger(name, e) {\n if (name === 'resize') {\n return;\n }\n const emitter = this.activeEmitter(name);\n if (emitter) {\n const args = this.instanceEventService.create(name, e, this);\n this.run(() => {\n emitter.emit(args);\n });\n return args.isDefaultPrevented && args.isDefaultPrevented();\n }\n }\n requiresHandlers(names) {\n for (let idx = 0; idx < names.length; idx++) {\n if (this.activeEmitter(names[idx])) {\n return true;\n }\n }\n return false;\n }\n refresh() {\n clearTimeout(this.redrawTimeout);\n this.updateDirection();\n this.crossahirTooltips.createCrosshairTooltips(this.options);\n this.setChartAreaSize();\n if (!this.instance) {\n this.init();\n return;\n }\n const transitions = this.options.transitions;\n if (this.suppressTransitions) {\n this.options.transitions = false;\n }\n this.updateOptions();\n if (this.suppressTransitions) {\n this.options.transitions = transitions;\n this.suppressTransitions = false;\n }\n }\n setChartAreaSize() {\n if (!this.element) {\n return;\n }\n const element = this.element.nativeElement;\n const chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n element.style.width = `${chartArea.width}px`;\n }\n if (chartArea.height) {\n element.style.height = `${chartArea.height}px`;\n }\n }\n updateOptions() {\n this.instance.setOptions(this.options);\n }\n /**\n * @hidden\n */\n tooltipMouseleave(e) {\n const relatedTarget = e.relatedTarget;\n const chartElement = this.element.nativeElement;\n if (this.instance && (!relatedTarget || !hasParent(relatedTarget, chartElement))) {\n this.instance.hideElements();\n }\n }\n /**\n * @hidden\n */\n chartMouseleave(e) {\n const relatedTarget = e.relatedTarget;\n const chartElement = this.element.nativeElement;\n if (this.instance && (!relatedTarget || !(this.tooltipInstance.containsElement(relatedTarget) || hasParent(relatedTarget, chartElement))) &&\n !this.instance.handlingTap) {\n this.instance.hideElements();\n }\n }\n get canRender() {\n return isDocumentAvailable() && Boolean(this.surfaceElement);\n }\n get autoResize() {\n return this.resizeRateLimit > 0;\n }\n activeEmitter(name) {\n const emitter = this[name];\n if (emitter && emitter.emit && hasObservers(emitter)) {\n return emitter;\n }\n }\n getDonutCenterStyle() {\n if (!this.instance || !this.options || !this.options.series) {\n return;\n }\n const firstSeries = this.options.series[0];\n const charts = this.instance._plotArea.charts;\n if (!firstSeries || firstSeries.type !== 'donut' || !charts || charts[0].points.length === 0) {\n return;\n }\n const firstPoint = charts[0].points[0];\n const center = firstPoint.box.center();\n const radius = firstPoint.sector.innerRadius;\n const top = center.y - radius;\n const left = center.x - radius;\n const size = radius * 2;\n return {\n height: size + 'px',\n left: left + 'px',\n top: top + 'px',\n width: size + 'px'\n };\n }\n refreshWait() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription = combineLatest(this.configurationService.onChange$, this.themeService.onChange$).pipe(tap((result) => {\n this.options = result[0];\n this.theme = result[1];\n }), auditTime(THROTTLE_MS))\n .subscribe(() => {\n this.refresh();\n });\n });\n }\n run(callback, inZone = true, detectChanges) {\n if (inZone) {\n if (detectChanges) {\n this.changeDetector.markForCheck();\n }\n this.ngZone.run(callback);\n }\n else {\n callback();\n if (detectChanges) {\n this.detectChanges();\n }\n }\n }\n detectChanges() {\n if (!this.destroyed) {\n this.changeDetector.detectChanges();\n }\n }\n intlChange() {\n if (this.instance) {\n this.deferredRedraw();\n }\n }\n rtlChange() {\n if (this.instance && this.rtl !== this.isRTL) {\n this.deferredRedraw();\n }\n }\n deferredRedraw() {\n this.ngZone.runOutsideAngular(() => {\n clearTimeout(this.redrawTimeout);\n this.redrawTimeout = setTimeout(() => {\n this.updateDirection();\n this.instance.noTransitionsRedraw();\n }, 0);\n });\n }\n updateDirection() {\n const current = this.isRTL;\n if (this.rtl !== current) {\n this.setDirection();\n if (this.instance) {\n this.instance.setDirection(current);\n }\n }\n }\n setDirection() {\n this.rtl = this.isRTL;\n if (this.element) {\n this.renderer.setAttribute(this.element.nativeElement, 'dir', this.rtl ? 'rtl' : 'ltr');\n }\n }\n get isRTL() {\n return Boolean(this.localizationService.rtl);\n }\n};\nChartComponent.ɵfac = function ChartComponent_Factory(t) { return new (t || ChartComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(ThemeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(InstanceEventService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nChartComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ChartComponent, selectors: [[\"kendo-chart\"]], contentQueries: function ChartComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DonutCenterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, SeriesItemComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.donutCenterTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.seriesComponents = _t);\n } }, viewQuery: function ChartComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(TooltipPopupComponent, 7);\n ɵngcc0.ɵɵviewQuery(CrosshairTooltipsContainerComponent, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tooltipInstance = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.crossahirTooltips = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.surfaceElement = _t.first);\n } }, inputs: { resizeRateLimit: \"resizeRateLimit\", popupSettings: \"popupSettings\" }, outputs: { legendItemClick: \"legendItemClick\" }, exportAs: [\"kendoChart\"], features: [ɵngcc0.ɵɵProvidersFeature([\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 4, consts: [[1, \"k-chart-surface\"], [\"surface\", \"\"], [3, \"popupSettings\"], [3, \"popupSettings\", \"leave\"], [3, \"rateLimit\", \"resize\"], [\"class\", \"k-chart-donut-center\", 3, \"ngStyle\", 4, \"ngIf\"], [1, \"k-chart-donut-center\", 3, \"ngStyle\"], [3, \"ngTemplateOutlet\"]], template: function ChartComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 0, 1)(2, \"kendo-chart-crosshair-tooltips-container\", 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-chart-tooltip-popup\", 3);\n ɵngcc0.ɵɵlistener(\"leave\", function ChartComponent_Template_kendo_chart_tooltip_popup_leave_3_listener($event) { return ctx.tooltipMouseleave($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-resize-sensor\", 4);\n ɵngcc0.ɵɵlistener(\"resize\", function ChartComponent_Template_kendo_resize_sensor_resize_4_listener($event) { return ctx.onResize($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, ChartComponent_div_5_Template, 2, 2, \"div\", 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"popupSettings\", ctx.popupSettings);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"popupSettings\", ctx.popupSettings);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rateLimit\", ctx.resizeRateLimit);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.donutCenterStyle && ctx.donutCenterTemplate);\n } }, directives: [CrosshairTooltipsContainerComponent, TooltipPopupComponent, ɵngcc5.ResizeSensorComponent, ɵngcc3.NgIf, ɵngcc3.NgStyle, ɵngcc3.NgTemplateOutlet], encapsulation: 2, changeDetection: 0 });\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChartComponent.prototype, \"legendItemClick\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ChartComponent.prototype, \"resizeRateLimit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartComponent.prototype, \"popupSettings\", void 0);\n__decorate([\n ContentChildren(SeriesItemComponent, { descendants: true }),\n __metadata(\"design:type\", QueryList)\n], ChartComponent.prototype, \"seriesComponents\", void 0);\n__decorate([\n ContentChild(DonutCenterTemplateDirective, { static: false }),\n __metadata(\"design:type\", DonutCenterTemplateDirective)\n], ChartComponent.prototype, \"donutCenterTemplate\", void 0);\n__decorate([\n ViewChild(TooltipPopupComponent, { static: true }),\n __metadata(\"design:type\", TooltipPopupComponent)\n], ChartComponent.prototype, \"tooltipInstance\", void 0);\n__decorate([\n ViewChild(CrosshairTooltipsContainerComponent, { static: true }),\n __metadata(\"design:type\", CrosshairTooltipsContainerComponent)\n], ChartComponent.prototype, \"crossahirTooltips\", void 0);\n__decorate([\n ViewChild('surface', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ChartComponent.prototype, \"surfaceElement\", void 0);\nChartComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n ThemeService,\n ElementRef,\n IntlService,\n LocalizationService,\n NgZone,\n InstanceEventService,\n ChangeDetectorRef,\n Renderer2])\n], ChartComponent);\n\n/**\n * @hidden\n */\nclass AxisDefaultsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsComponentGenerated.ɵfac = function AxisDefaultsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nAxisDefaultsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: AxisDefaultsComponentGenerated, inputs: { background: \"background\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", startAngle: \"startAngle\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"majorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"majorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"minorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"minorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsComponentGenerated.prototype, \"narrowRange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsComponentGenerated.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], AxisDefaultsComponentGenerated.prototype, \"plotBands\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsComponentGenerated.prototype, \"startAngle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"crosshair\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The default options for all Chart axes.\n * Accepts the options which are supported by [`categoryAxis`]({% slug api_charts_categoryaxisitemcomponent %}),\n * [`valueAxis`]({% slug api_charts_valueaxisitemcomponent %}),\n * [`xAxis`]({% slug api_charts_xaxisitemcomponent %}),\n * and [`yAxis`]({% slug api_charts_yaxisitemcomponent %}).\n *\n * @example\n * ```ts-preview\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
\n * `\n * })\n * export class AppComponent {\n * public series: any[] = [{\n * name: \"India\",\n * data: [4, 8, 8, 9, 9, 9, 3, 8, 9, 6]\n * }, {\n * name: \"Russian Federation\",\n * data: [4, 7, 7, 6, 8, 8, 5, 8, 4, 4]\n * }, {\n * name: \"Germany\",\n * data: [0, 0, 1, 1, 4, 3, 1, 5, 4, 3]\n * },{\n * name: \"World\",\n * data: [2, 3, 4, 4, 4, 4, 1, 2, 4, 3]\n * }];\n *\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n *\n * public background = 'white';\n * // public color = 'cyan'; // will override the line.color option\n * public crosshair = {\n * visible: true\n * };\n * public labels = {\n * font: 'bold 12px/30px Helvetica, Arial, sans-serif',\n * color: '#4CAF50',\n * padding: 5,\n * rotation: 45,\n * background: 'white',\n * border: {\n * color: '#4CAF50',\n * width: 2\n * },\n * };\n * public line = {\n * color: 'black',\n * width: 3\n * };\n *\n * public majorGridLines = {\n * color: 'black',\n * visible: true\n * }\n *\n * public minorGridLines = {\n * color: 'lightgray',\n * visible: true\n * }\n *\n * public majorTicks = {\n * color: 'black',\n * size: 15\n * }\n *\n * public minorTicks = {\n * color: 'lightgray',\n * size: 10\n * }\n *\n * public title = {\n * text: 'Default Axis Title',\n * color: 'black',\n * background: 'white',\n * border: {\n * color: 'black',\n * width: 2\n * },\n * padding: 10\n * }\n * }\n * ```\n */\nlet AxisDefaultsComponent = class AxisDefaultsComponent extends AxisDefaultsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nAxisDefaultsComponent.ɵfac = function AxisDefaultsComponent_Factory(t) { return new (t || AxisDefaultsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nAxisDefaultsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AxisDefaultsComponent, selectors: [[\"kendo-chart-axis-defaults\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AxisDefaultsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nAxisDefaultsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], AxisDefaultsComponent);\n\n/**\n * @hidden\n */\nclass AxisDefaultsCrosshairComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.crosshair', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsCrosshairComponentGenerated.ɵfac = function AxisDefaultsCrosshairComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nAxisDefaultsCrosshairComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: AxisDefaultsCrosshairComponentGenerated, inputs: { color: \"color\", dashType: \"dashType\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"dashType\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsCrosshairComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The crosshair configuration options ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nlet AxisDefaultsCrosshairComponent = class AxisDefaultsCrosshairComponent extends AxisDefaultsCrosshairComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nAxisDefaultsCrosshairComponent.ɵfac = function AxisDefaultsCrosshairComponent_Factory(t) { return new (t || AxisDefaultsCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nAxisDefaultsCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AxisDefaultsCrosshairComponent, selectors: [[\"kendo-chart-axis-defaults-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AxisDefaultsCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nAxisDefaultsCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], AxisDefaultsCrosshairComponent);\n\n/**\n * @hidden\n */\nclass AxisDefaultsCrosshairTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsCrosshairTooltipComponentGenerated.ɵfac = function AxisDefaultsCrosshairTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nAxisDefaultsCrosshairTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: AxisDefaultsCrosshairTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsCrosshairTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the [`axisDefaults.crosshair.tooltip.visible`]({% slug api_charts_axisdefaultscrosshairtooltipcomponent %}#toc-visible)\n * option is set to `true`.\n */\nlet AxisDefaultsCrosshairTooltipComponent = class AxisDefaultsCrosshairTooltipComponent extends AxisDefaultsCrosshairTooltipComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nAxisDefaultsCrosshairTooltipComponent.ɵfac = function AxisDefaultsCrosshairTooltipComponent_Factory(t) { return new (t || AxisDefaultsCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nAxisDefaultsCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AxisDefaultsCrosshairTooltipComponent, selectors: [[\"kendo-chart-axis-defaults-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AxisDefaultsCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nAxisDefaultsCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], AxisDefaultsCrosshairTooltipComponent);\n\n/**\n * @hidden\n */\nclass AxisDefaultsLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsLabelsComponentGenerated.ɵfac = function AxisDefaultsLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nAxisDefaultsLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: AxisDefaultsLabelsComponentGenerated, inputs: { content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"mirror\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"skip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], AxisDefaultsLabelsComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The configuration of the axis labels ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nlet AxisDefaultsLabelsComponent = class AxisDefaultsLabelsComponent extends AxisDefaultsLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nAxisDefaultsLabelsComponent.ɵfac = function AxisDefaultsLabelsComponent_Factory(t) { return new (t || AxisDefaultsLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nAxisDefaultsLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AxisDefaultsLabelsComponent, selectors: [[\"kendo-chart-axis-defaults-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AxisDefaultsLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nAxisDefaultsLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], AxisDefaultsLabelsComponent);\n\n/**\n * @hidden\n */\nclass AxisDefaultsTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.title', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsTitleComponentGenerated.ɵfac = function AxisDefaultsTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nAxisDefaultsTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: AxisDefaultsTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], AxisDefaultsTitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AxisDefaultsTitleComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AxisDefaultsTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AxisDefaultsTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], AxisDefaultsTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The configuration of the axis title ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nlet AxisDefaultsTitleComponent = class AxisDefaultsTitleComponent extends AxisDefaultsTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nAxisDefaultsTitleComponent.ɵfac = function AxisDefaultsTitleComponent_Factory(t) { return new (t || AxisDefaultsTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nAxisDefaultsTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AxisDefaultsTitleComponent, selectors: [[\"kendo-chart-axis-defaults-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AxisDefaultsTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nAxisDefaultsTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], AxisDefaultsTitleComponent);\n\n/**\n * @hidden\n */\nclass CollectionComponent {\n constructor(configKey, configurationService, collectionService) {\n this.configKey = configKey;\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.items = [];\n this.subscription = collectionService.onItemChange$.subscribe(changes => this.processChanges(changes));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n ngAfterContentInit() {\n this.readItems();\n this.children.changes.subscribe(() => this.readItems());\n }\n processChanges(changes) {\n if (!this.children) {\n return;\n }\n const index = this.children.toArray().indexOf(changes.sender);\n if (index < 0) {\n return;\n }\n this.items[index] = changes.options;\n this.change();\n }\n readItems() {\n this.items = this.children.map(s => s.options);\n this.change();\n }\n change() {\n this.configurationService.notify(new Change(this.configKey, this.items.length === 0 ? undefined : this.items));\n }\n}\nCollectionComponent.ɵfac = function CollectionComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCollectionComponent.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CollectionComponent });\n\n/**\n * Specifies the `weekStartDay` of a [CategoryAxisItemComponent]({% slug api_charts_categoryaxisitemcomponent %}).\n */\nvar WeekStartDay;\n(function (WeekStartDay) {\n /**\n * Specifies Sunday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Sunday\"] = 0] = \"Sunday\";\n /**\n * Specifies Monday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Monday\"] = 1] = \"Monday\";\n /**\n * Specifies Tuesday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Tuesday\"] = 2] = \"Tuesday\";\n /**\n * Specifies Wednesday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Wednesday\"] = 3] = \"Wednesday\";\n /**\n * Specifies Thursday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Thursday\"] = 4] = \"Thursday\";\n /**\n * Specifies Friday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Friday\"] = 5] = \"Friday\";\n /**\n * Specifies Saturday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Saturday\"] = 6] = \"Saturday\";\n})(WeekStartDay || (WeekStartDay = {}));\n\n/**\n * @hidden\n */\nclass CategoryAxisItemComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });\n }\n}\nCategoryAxisItemComponentGenerated.ɵfac = function CategoryAxisItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisItemComponentGenerated, inputs: { autoBaseUnitSteps: \"autoBaseUnitSteps\", axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", baseUnitStep: \"baseUnitStep\", categories: \"categories\", color: \"color\", justified: \"justified\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", max: \"max\", maxDateGroups: \"maxDateGroups\", maxDivisions: \"maxDivisions\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", name: \"name\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", roundToBaseUnit: \"roundToBaseUnit\", startAngle: \"startAngle\", type: \"type\", visible: \"visible\", weekStartDay: \"weekStartDay\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", select: \"select\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"autoBaseUnitSteps\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"axisCrossingValue\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"baseUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"baseUnitStep\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], CategoryAxisItemComponentGenerated.prototype, \"categories\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisItemComponentGenerated.prototype, \"justified\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"majorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"majorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisItemComponentGenerated.prototype, \"maxDateGroups\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisItemComponentGenerated.prototype, \"maxDivisions\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"minorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"minorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], CategoryAxisItemComponentGenerated.prototype, \"plotBands\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisItemComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisItemComponentGenerated.prototype, \"roundToBaseUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisItemComponentGenerated.prototype, \"startAngle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisItemComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisItemComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisItemComponentGenerated.prototype, \"weekStartDay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"crosshair\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"select\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration component for a category axis ([see example]({% slug axes_chart_charts %})).\n */\nlet CategoryAxisItemComponent = class CategoryAxisItemComponent extends CategoryAxisItemComponentGenerated {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService, intl, localeId);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nCategoryAxisItemComponent.ɵfac = function CategoryAxisItemComponent_Factory(t) { return new (t || CategoryAxisItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID)); };\nCategoryAxisItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisItemComponent, selectors: [[\"kendo-chart-category-axis-item\"]], inputs: { rangeLabels: \"rangeLabels\" }, features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisItemComponent.prototype, \"rangeLabels\", void 0);\nCategoryAxisItemComponent = __decorate([ __param(3, Inject(LOCALE_ID)),\n __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService,\n IntlService, String])\n], CategoryAxisItemComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('categoryAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nCategoryAxisComponentGenerated.ɵfac = function CategoryAxisComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisComponentGenerated, contentQueries: function CategoryAxisComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CategoryAxisItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(CategoryAxisItemComponent),\n __metadata(\"design:type\", QueryList)\n], CategoryAxisComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more category axis items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n * ```\n */\nlet CategoryAxisComponent = class CategoryAxisComponent extends CategoryAxisComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nCategoryAxisComponent.ɵfac = function CategoryAxisComponent_Factory(t) { return new (t || CategoryAxisComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nCategoryAxisComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisComponent, selectors: [[\"kendo-chart-category-axis\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], CategoryAxisComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisCrosshairComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisCrosshairComponentGenerated.ɵfac = function CategoryAxisCrosshairComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisCrosshairComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisCrosshairComponentGenerated, inputs: { color: \"color\", dashType: \"dashType\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"dashType\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisCrosshairComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The crosshair configuration options ([see example]({% slug crosshairs_chart_charts %})).\n */\nlet CategoryAxisCrosshairComponent = class CategoryAxisCrosshairComponent extends CategoryAxisCrosshairComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nCategoryAxisCrosshairComponent.ɵfac = function CategoryAxisCrosshairComponent_Factory(t) { return new (t || CategoryAxisCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisCrosshairComponent, selectors: [[\"kendo-chart-category-axis-item-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisCrosshairComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisCrosshairTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisCrosshairTooltipComponentGenerated.ɵfac = function CategoryAxisCrosshairTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisCrosshairTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisCrosshairTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisCrosshairTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nlet CategoryAxisCrosshairTooltipComponent = class CategoryAxisCrosshairTooltipComponent extends CategoryAxisCrosshairTooltipComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nCategoryAxisCrosshairTooltipComponent.ɵfac = function CategoryAxisCrosshairTooltipComponent_Factory(t) { return new (t || CategoryAxisCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisCrosshairTooltipComponent, selectors: [[\"kendo-chart-category-axis-item-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisCrosshairTooltipComponent);\n\n/**\n * The configuration of the axis labels ([see example]({% slug labels_chart_charts %})).\n */\nlet CategoryAxisLabelsComponent = class CategoryAxisLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisLabelsComponent.ɵfac = function CategoryAxisLabelsComponent_Factory(t) { return new (t || CategoryAxisLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisLabelsComponent, selectors: [[\"kendo-chart-category-axis-item-labels\"]], inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisLabelsComponent.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], CategoryAxisLabelsComponent.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"culture\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisLabelsComponent.prototype, \"dateFormats\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisLabelsComponent.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisLabelsComponent.prototype, \"mirror\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisLabelsComponent.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisLabelsComponent.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisLabelsComponent.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisLabelsComponent.prototype, \"skip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisLabelsComponent.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisLabelsComponent.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], CategoryAxisLabelsComponent.prototype, \"visual\", void 0);\nCategoryAxisLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisLabelsComponent);\n\n/**\n * The configuration of the axis date range labels ([see example]({% slug labels_chart_charts %})).\n */\nlet CategoryAxisRangeLabelsComponent = class CategoryAxisRangeLabelsComponent extends CategoryAxisLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.configKey = 'rangeLabels';\n this.markAsVisible();\n }\n};\nCategoryAxisRangeLabelsComponent.ɵfac = function CategoryAxisRangeLabelsComponent_Factory(t) { return new (t || CategoryAxisRangeLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisRangeLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisRangeLabelsComponent, selectors: [[\"kendo-chart-category-axis-item-range-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisRangeLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisRangeLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisRangeLabelsComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesComponentGenerated.ɵfac = function CategoryAxisNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisNotesComponentGenerated, inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], CategoryAxisNotesComponentGenerated.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], CategoryAxisNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The configuration of the category axis notes ([see example]({% slug notes_chart_charts %}#toc-axis-notes)).\n */\nlet CategoryAxisNotesComponent = class CategoryAxisNotesComponent extends CategoryAxisNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisNotesComponent.ɵfac = function CategoryAxisNotesComponent_Factory(t) { return new (t || CategoryAxisNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisNotesComponent, selectors: [[\"kendo-chart-category-axis-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisNotesComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesIconComponentGenerated.ɵfac = function CategoryAxisNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet CategoryAxisNotesIconComponent = class CategoryAxisNotesIconComponent extends CategoryAxisNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisNotesIconComponent.ɵfac = function CategoryAxisNotesIconComponent_Factory(t) { return new (t || CategoryAxisNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisNotesIconComponent, selectors: [[\"kendo-chart-category-axis-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisNotesIconComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesLabelComponentGenerated.ɵfac = function CategoryAxisNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet CategoryAxisNotesLabelComponent = class CategoryAxisNotesLabelComponent extends CategoryAxisNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisNotesLabelComponent.ɵfac = function CategoryAxisNotesLabelComponent_Factory(t) { return new (t || CategoryAxisNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisNotesLabelComponent, selectors: [[\"kendo-chart-category-axis-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisSelectComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('select', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisSelectComponentGenerated.ɵfac = function CategoryAxisSelectComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisSelectComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisSelectComponentGenerated, inputs: { from: \"from\", max: \"max\", min: \"min\", mousewheel: \"mousewheel\", to: \"to\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisSelectComponentGenerated.prototype, \"from\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisSelectComponentGenerated.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisSelectComponentGenerated.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisSelectComponentGenerated.prototype, \"mousewheel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisSelectComponentGenerated.prototype, \"to\", void 0);\n\n/**\n * The selected axis range. If set, the axis selection is enabled. The range is index-based and starts from zero.\n * Categories with indexes in the\n * ([`select.from`]({% slug api_charts_categoryaxisselectcomponent %}#toc-from)\n * —[`select.to`]({% slug api_charts_categoryaxisselectcomponent %}#toc-to)) range will be selected.\n * This means that the last category in the range will not be included in the selection.\n * If the categories are dates, the range has to be also specified with date values.\n */\nlet CategoryAxisSelectComponent = class CategoryAxisSelectComponent extends CategoryAxisSelectComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisSelectComponent.ɵfac = function CategoryAxisSelectComponent_Factory(t) { return new (t || CategoryAxisSelectComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisSelectComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisSelectComponent, selectors: [[\"kendo-chart-category-axis-item-select\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisSelectComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisSelectComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisSelectComponent);\n\n/**\n * @hidden\n */\nclass CategoryAxisTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisTitleComponentGenerated.ɵfac = function CategoryAxisTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nCategoryAxisTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CategoryAxisTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CategoryAxisTitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CategoryAxisTitleComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CategoryAxisTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], CategoryAxisTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], CategoryAxisTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The configuration of the category axis title.\n */\nlet CategoryAxisTitleComponent = class CategoryAxisTitleComponent extends CategoryAxisTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nCategoryAxisTitleComponent.ɵfac = function CategoryAxisTitleComponent_Factory(t) { return new (t || CategoryAxisTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nCategoryAxisTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CategoryAxisTitleComponent, selectors: [[\"kendo-chart-category-axis-item-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CategoryAxisTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nCategoryAxisTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], CategoryAxisTitleComponent);\n\n/**\n * @hidden\n */\nclass ChartAreaComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('chartArea', configurationService);\n this.configurationService = configurationService;\n }\n}\nChartAreaComponentGenerated.ɵfac = function ChartAreaComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nChartAreaComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ChartAreaComponentGenerated, inputs: { background: \"background\", border: \"border\", height: \"height\", margin: \"margin\", opacity: \"opacity\", width: \"width\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChartAreaComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartAreaComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ChartAreaComponentGenerated.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChartAreaComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ChartAreaComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ChartAreaComponentGenerated.prototype, \"width\", void 0);\n\n/**\n * The configuration options of the Chart area.\n * Represents the entire visible area of the Chart\n * ([see example]({% slug chartarea_chart_charts %})).\n */\nlet ChartAreaComponent = class ChartAreaComponent extends ChartAreaComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nChartAreaComponent.ɵfac = function ChartAreaComponent_Factory(t) { return new (t || ChartAreaComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nChartAreaComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ChartAreaComponent, selectors: [[\"kendo-chart-area\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ChartAreaComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nChartAreaComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ChartAreaComponent);\n\n/**\n * @hidden\n */\nclass LegendComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('legend', configurationService);\n this.configurationService = configurationService;\n }\n}\nLegendComponentGenerated.ɵfac = function LegendComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nLegendComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LegendComponentGenerated, inputs: { align: \"align\", background: \"background\", border: \"border\", height: \"height\", labels: \"labels\", margin: \"margin\", offsetX: \"offsetX\", offsetY: \"offsetY\", orientation: \"orientation\", padding: \"padding\", position: \"position\", reverse: \"reverse\", visible: \"visible\", width: \"width\", markers: \"markers\", spacing: \"spacing\", inactiveItems: \"inactiveItems\", item: \"item\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LegendComponentGenerated.prototype, \"align\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LegendComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LegendComponentGenerated.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LegendComponentGenerated.prototype, \"offsetX\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LegendComponentGenerated.prototype, \"offsetY\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LegendComponentGenerated.prototype, \"orientation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LegendComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], LegendComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], LegendComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LegendComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"markers\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LegendComponentGenerated.prototype, \"spacing\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"inactiveItems\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"item\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration options of the Chart legend\n * ([see example]({% slug legend_chart_charts %})).\n */\nlet LegendComponent = class LegendComponent extends LegendComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nLegendComponent.ɵfac = function LegendComponent_Factory(t) { return new (t || LegendComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nLegendComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: LegendComponent, selectors: [[\"kendo-chart-legend\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LegendComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nLegendComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], LegendComponent);\n\n/**\n * @hidden\n */\nclass LegendInactiveItemsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('legend.inactiveItems', configurationService);\n this.configurationService = configurationService;\n }\n}\nLegendInactiveItemsComponentGenerated.ɵfac = function LegendInactiveItemsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nLegendInactiveItemsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LegendInactiveItemsComponentGenerated, inputs: { labels: \"labels\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LegendInactiveItemsComponentGenerated.prototype, \"labels\", void 0);\n\n/**\n * The configuration of the inactive Chart legend items.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nlet LegendInactiveItemsComponent = class LegendInactiveItemsComponent extends LegendInactiveItemsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nLegendInactiveItemsComponent.ɵfac = function LegendInactiveItemsComponent_Factory(t) { return new (t || LegendInactiveItemsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nLegendInactiveItemsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: LegendInactiveItemsComponent, selectors: [[\"kendo-chart-legend-inactive-items\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LegendInactiveItemsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nLegendInactiveItemsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], LegendInactiveItemsComponent);\n\n/**\n * @hidden\n */\nclass LegendItemComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('legend.item', configurationService);\n this.configurationService = configurationService;\n }\n}\nLegendItemComponentGenerated.ɵfac = function LegendItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nLegendItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LegendItemComponentGenerated, inputs: { cursor: \"cursor\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LegendItemComponentGenerated.prototype, \"cursor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], LegendItemComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The configuration of the Chart legend item.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nlet LegendItemComponent = class LegendItemComponent extends LegendItemComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nLegendItemComponent.ɵfac = function LegendItemComponent_Factory(t) { return new (t || LegendItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nLegendItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: LegendItemComponent, selectors: [[\"kendo-chart-legend-item\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LegendItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nLegendItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], LegendItemComponent);\n\n/**\n * @hidden\n */\nclass PaneComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nPaneComponentGenerated.ɵfac = function PaneComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPaneComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: PaneComponentGenerated, inputs: { background: \"background\", border: \"border\", clip: \"clip\", height: \"height\", margin: \"margin\", name: \"name\", padding: \"padding\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PaneComponentGenerated.prototype, \"clip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], PaneComponentGenerated.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration component for a Chart pane.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public seriesData: number[][] = [[1, 2, 3, 5], [0, 1, 0, 1]];\n * }\n * ```\n */\nlet PaneComponent = class PaneComponent extends PaneComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nPaneComponent.ɵfac = function PaneComponent_Factory(t) { return new (t || PaneComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nPaneComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PaneComponent, selectors: [[\"kendo-chart-pane\"], [\"kendo-chart-panes-item\"]], features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PaneComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nPaneComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], PaneComponent);\n\n/**\n * The default options for all chart panes,\n * ([see example]({% slug panes_chart_charts %}#toc-default-panes-configuration)).\n */\nlet PaneDefaultsComponent = class PaneDefaultsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('paneDefaults', configurationService);\n this.configurationService = configurationService;\n }\n};\nPaneDefaultsComponent.ɵfac = function PaneDefaultsComponent_Factory(t) { return new (t || PaneDefaultsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nPaneDefaultsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PaneDefaultsComponent, selectors: [[\"kendo-chart-pane-defaults\"]], inputs: { background: \"background\", border: \"border\", clip: \"clip\", height: \"height\", margin: \"margin\", padding: \"padding\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PaneDefaultsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneDefaultsComponent.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsComponent.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PaneDefaultsComponent.prototype, \"clip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], PaneDefaultsComponent.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsComponent.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsComponent.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsComponent.prototype, \"title\", void 0);\nPaneDefaultsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], PaneDefaultsComponent);\n\n/**\n * The configuration of the pane default title.\n */\nlet PaneDefaultsTitleComponent = class PaneDefaultsTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('paneDefaults.title', configurationService);\n this.configurationService = configurationService;\n }\n};\nPaneDefaultsTitleComponent.ɵfac = function PaneDefaultsTitleComponent_Factory(t) { return new (t || PaneDefaultsTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nPaneDefaultsTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PaneDefaultsTitleComponent, selectors: [[\"kendo-chart-pane-defaults-title\"]], inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", position: \"position\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PaneDefaultsTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneDefaultsTitleComponent.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsTitleComponent.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneDefaultsTitleComponent.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneDefaultsTitleComponent.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PaneDefaultsTitleComponent.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PaneDefaultsTitleComponent.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PaneDefaultsTitleComponent.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], PaneDefaultsTitleComponent.prototype, \"visual\", void 0);\nPaneDefaultsTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], PaneDefaultsTitleComponent);\n\n/**\n * @hidden\n */\nclass PanesComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('panes', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nPanesComponentGenerated.ɵfac = function PanesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPanesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: PanesComponentGenerated, contentQueries: function PanesComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PaneComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(PaneComponent),\n __metadata(\"design:type\", QueryList)\n], PanesComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more pane configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nlet PanesComponent = class PanesComponent extends PanesComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nPanesComponent.ɵfac = function PanesComponent_Factory(t) { return new (t || PanesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nPanesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PanesComponent, selectors: [[\"kendo-chart-panes\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PanesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nPanesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], PanesComponent);\n\n/**\n * @hidden\n */\nclass PanesTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nPanesTitleComponentGenerated.ɵfac = function PanesTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPanesTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: PanesTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", position: \"position\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PanesTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PanesTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PanesTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PanesTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PanesTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PanesTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PanesTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PanesTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], PanesTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The configuration of the Chart pane title.\n */\nlet PanesTitleComponent = class PanesTitleComponent extends PanesTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nPanesTitleComponent.ɵfac = function PanesTitleComponent_Factory(t) { return new (t || PanesTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nPanesTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PanesTitleComponent, selectors: [[\"kendo-chart-pane-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PanesTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nPanesTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], PanesTitleComponent);\n\n/**\n * @hidden\n */\nclass PlotAreaComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('plotArea', configurationService);\n this.configurationService = configurationService;\n }\n}\nPlotAreaComponentGenerated.ɵfac = function PlotAreaComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPlotAreaComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: PlotAreaComponentGenerated, inputs: { background: \"background\", border: \"border\", margin: \"margin\", opacity: \"opacity\", padding: \"padding\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PlotAreaComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PlotAreaComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PlotAreaComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], PlotAreaComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PlotAreaComponentGenerated.prototype, \"padding\", void 0);\n\n/**\n * The configuration options of the plot area\n * ([see example]({% slug plotarea_chart_charts %})).\n * The plot area is the area which displays the series.\n */\nlet PlotAreaComponent = class PlotAreaComponent extends PlotAreaComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nPlotAreaComponent.ɵfac = function PlotAreaComponent_Factory(t) { return new (t || PlotAreaComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nPlotAreaComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PlotAreaComponent, selectors: [[\"kendo-chart-plot-area\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PlotAreaComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nPlotAreaComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], PlotAreaComponent);\n\n/**\n * @hidden\n */\nclass SeriesComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('series', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nSeriesComponentGenerated.ɵfac = function SeriesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesComponentGenerated, contentQueries: function SeriesComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, SeriesItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(SeriesItemComponent),\n __metadata(\"design:type\", QueryList)\n], SeriesComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more series items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nlet SeriesComponent = class SeriesComponent extends SeriesComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService, tooltipTemplateService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.tooltipTemplateService = tooltipTemplateService;\n }\n ngAfterContentChecked() {\n this.readTooltipTemplates();\n }\n readTooltipTemplates() {\n const templates = this.children.map((item) => item.seriesTooltipTemplateRef);\n this.tooltipTemplateService.setSeriesTemplates(templates);\n }\n};\nSeriesComponent.ɵfac = function SeriesComponent_Factory(t) { return new (t || SeriesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService), ɵngcc0.ɵɵdirectiveInject(TooltipTemplateService)); };\nSeriesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesComponent, selectors: [[\"kendo-chart-series\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService,\n TooltipTemplateService])\n], SeriesComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsComponentGenerated.ɵfac = function SeriesDefaultsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsComponentGenerated, inputs: { border: \"border\", gap: \"gap\", highlight: \"highlight\", overlay: \"overlay\", spacing: \"spacing\", stack: \"stack\", type: \"type\", visual: \"visual\", labels: \"labels\", notes: \"notes\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesDefaultsComponentGenerated.prototype, \"gap\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"highlight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"overlay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesDefaultsComponentGenerated.prototype, \"spacing\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"stack\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The default options for all series\n * ([see example]({% slug series_chart_charts %}#toc-default-series-configuration)).\n */\nlet SeriesDefaultsComponent = class SeriesDefaultsComponent extends SeriesDefaultsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesDefaultsComponent.ɵfac = function SeriesDefaultsComponent_Factory(t) { return new (t || SeriesDefaultsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsComponent, selectors: [[\"kendo-chart-series-defaults\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsLabelsComponentGenerated.ɵfac = function SeriesDefaultsLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsLabelsComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"from\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsComponentGenerated.prototype, \"to\", void 0);\n\n/**\n * The configuration of the Chart series label.\n */\nlet SeriesDefaultsLabelsComponent = class SeriesDefaultsLabelsComponent extends SeriesDefaultsLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesDefaultsLabelsComponent.ɵfac = function SeriesDefaultsLabelsComponent_Factory(t) { return new (t || SeriesDefaultsLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsLabelsComponent, selectors: [[\"kendo-chart-series-defaults-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsLabelsComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsLabelsFromComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels.from', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsLabelsFromComponentGenerated.ɵfac = function SeriesDefaultsLabelsFromComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsLabelsFromComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsLabelsFromComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsLabelsFromComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The `from` label configuration of the Chart series.\n */\nlet SeriesDefaultsLabelsFromComponent = class SeriesDefaultsLabelsFromComponent extends SeriesDefaultsLabelsFromComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesDefaultsLabelsFromComponent.ɵfac = function SeriesDefaultsLabelsFromComponent_Factory(t) { return new (t || SeriesDefaultsLabelsFromComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsLabelsFromComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsLabelsFromComponent, selectors: [[\"kendo-chart-series-defaults-labels-from\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsLabelsFromComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsLabelsFromComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsLabelsFromComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsLabelsToComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels.to', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsLabelsToComponentGenerated.ɵfac = function SeriesDefaultsLabelsToComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsLabelsToComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsLabelsToComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsLabelsToComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The `to` label configuration of the Chart series.\n */\nlet SeriesDefaultsLabelsToComponent = class SeriesDefaultsLabelsToComponent extends SeriesDefaultsLabelsToComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesDefaultsLabelsToComponent.ɵfac = function SeriesDefaultsLabelsToComponent_Factory(t) { return new (t || SeriesDefaultsLabelsToComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsLabelsToComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsLabelsToComponent, selectors: [[\"kendo-chart-series-defaults-labels-to\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsLabelsToComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsLabelsToComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsLabelsToComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesComponentGenerated.ɵfac = function SeriesDefaultsNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsNotesComponentGenerated, inputs: { line: \"line\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The configuration of the [`seriesDefaults`]({% slug api_charts_seriesdefaultscomponent %}) notes.\n */\nlet SeriesDefaultsNotesComponent = class SeriesDefaultsNotesComponent extends SeriesDefaultsNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesDefaultsNotesComponent.ɵfac = function SeriesDefaultsNotesComponent_Factory(t) { return new (t || SeriesDefaultsNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsNotesComponent, selectors: [[\"kendo-chart-series-defaults-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsNotesComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesIconComponentGenerated.ɵfac = function SeriesDefaultsNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesDefaultsNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet SeriesDefaultsNotesIconComponent = class SeriesDefaultsNotesIconComponent extends SeriesDefaultsNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesDefaultsNotesIconComponent.ɵfac = function SeriesDefaultsNotesIconComponent_Factory(t) { return new (t || SeriesDefaultsNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsNotesIconComponent, selectors: [[\"kendo-chart-series-defaults-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsNotesIconComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesLabelComponentGenerated.ɵfac = function SeriesDefaultsNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet SeriesDefaultsNotesLabelComponent = class SeriesDefaultsNotesLabelComponent extends SeriesDefaultsNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesDefaultsNotesLabelComponent.ɵfac = function SeriesDefaultsNotesLabelComponent_Factory(t) { return new (t || SeriesDefaultsNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsNotesLabelComponent, selectors: [[\"kendo-chart-series-defaults-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass SeriesDefaultsTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsTooltipComponentGenerated.ɵfac = function SeriesDefaultsTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesDefaultsTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesDefaultsTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesDefaultsTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the Chart series tooltip.\n */\nlet SeriesDefaultsTooltipComponent = class SeriesDefaultsTooltipComponent extends SeriesDefaultsTooltipComponentGenerated {\n // Place custom properties here.\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesDefaultsTooltipComponent.ɵfac = function SeriesDefaultsTooltipComponent_Factory(t) { return new (t || SeriesDefaultsTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesDefaultsTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesDefaultsTooltipComponent, selectors: [[\"kendo-chart-series-defaults-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesDefaultsTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesDefaultsTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesDefaultsTooltipComponent);\n\n/**\n * @hidden\n */\nclass SeriesErrorBarsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('errorBars', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesErrorBarsComponentGenerated.ɵfac = function SeriesErrorBarsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesErrorBarsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesErrorBarsComponentGenerated, inputs: { color: \"color\", endCaps: \"endCaps\", line: \"line\", value: \"value\", visual: \"visual\", xValue: \"xValue\", yValue: \"yValue\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesErrorBarsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesErrorBarsComponentGenerated.prototype, \"endCaps\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesErrorBarsComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesErrorBarsComponentGenerated.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesErrorBarsComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesErrorBarsComponentGenerated.prototype, \"xValue\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesErrorBarsComponentGenerated.prototype, \"yValue\", void 0);\n\n/**\n * The error bars of the Chart series\n * ([see example]({% slug errorbars_chart_charts %})).\n */\nlet SeriesErrorBarsComponent = class SeriesErrorBarsComponent extends SeriesErrorBarsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesErrorBarsComponent.ɵfac = function SeriesErrorBarsComponent_Factory(t) { return new (t || SeriesErrorBarsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesErrorBarsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesErrorBarsComponent, selectors: [[\"kendo-chart-series-item-error-bars\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesErrorBarsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesErrorBarsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesErrorBarsComponent);\n\n/**\n * @hidden\n */\nclass SeriesExtremesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('extremes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesExtremesComponentGenerated.ɵfac = function SeriesExtremesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesExtremesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesExtremesComponentGenerated, inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesExtremesComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesExtremesComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesExtremesComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesExtremesComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesExtremesComponentGenerated.prototype, \"type\", void 0);\n\n/**\n * The configuration of the Chart series extremes.\n * Applies to extreme outliers.\n * For more information, refer to [`series.outliers`]({% slug api_charts_seriesitemcomponent %}#toc-outliers).\n */\nlet SeriesExtremesComponent = class SeriesExtremesComponent extends SeriesExtremesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesExtremesComponent.ɵfac = function SeriesExtremesComponent_Factory(t) { return new (t || SeriesExtremesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesExtremesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesExtremesComponent, selectors: [[\"kendo-chart-series-item-extremes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesExtremesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesExtremesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesExtremesComponent);\n\n/**\n * @hidden\n */\nclass SeriesHighlightComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('highlight', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesHighlightComponentGenerated.ɵfac = function SeriesHighlightComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesHighlightComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesHighlightComponentGenerated, inputs: { border: \"border\", color: \"color\", line: \"line\", markers: \"markers\", opacity: \"opacity\", toggle: \"toggle\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesHighlightComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesHighlightComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesHighlightComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesHighlightComponentGenerated.prototype, \"markers\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesHighlightComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesHighlightComponentGenerated.prototype, \"toggle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesHighlightComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesHighlightComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The Chart series highlighting configuration options.\n */\nlet SeriesHighlightComponent = class SeriesHighlightComponent extends SeriesHighlightComponentGenerated {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesHighlightComponent.ɵfac = function SeriesHighlightComponent_Factory(t) { return new (t || SeriesHighlightComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesHighlightComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesHighlightComponent, selectors: [[\"kendo-chart-series-item-highlight\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesHighlightComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesHighlightComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesHighlightComponent);\n\n/**\n * @hidden\n */\nclass SeriesLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesLabelsComponentGenerated.ɵfac = function SeriesLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesLabelsComponentGenerated, inputs: { align: \"align\", background: \"background\", border: \"border\", color: \"color\", content: \"content\", distance: \"distance\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"align\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesLabelsComponentGenerated.prototype, \"distance\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesLabelsComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesLabelsComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsComponentGenerated.prototype, \"from\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsComponentGenerated.prototype, \"to\", void 0);\n\n/**\n * The configuration of the Chart series label\n * ([see example]({% slug labels_chart_charts %})).\n */\nlet SeriesLabelsComponent = class SeriesLabelsComponent extends SeriesLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesLabelsComponent.ɵfac = function SeriesLabelsComponent_Factory(t) { return new (t || SeriesLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesLabelsComponent, selectors: [[\"kendo-chart-series-item-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesLabelsComponent);\n\n/**\n * @hidden\n */\nclass SeriesLabelsFromComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels.from', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesLabelsFromComponentGenerated.ɵfac = function SeriesLabelsFromComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesLabelsFromComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesLabelsFromComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsFromComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsFromComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsFromComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesLabelsFromComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsFromComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsFromComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsFromComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsFromComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsFromComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesLabelsFromComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The `from` label configuration of the Chart series.\n */\nlet SeriesLabelsFromComponent = class SeriesLabelsFromComponent extends SeriesLabelsFromComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesLabelsFromComponent.ɵfac = function SeriesLabelsFromComponent_Factory(t) { return new (t || SeriesLabelsFromComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesLabelsFromComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesLabelsFromComponent, selectors: [[\"kendo-chart-series-item-labels-from\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesLabelsFromComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesLabelsFromComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesLabelsFromComponent);\n\n/**\n * @hidden\n */\nclass SeriesLabelsToComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels.to', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesLabelsToComponentGenerated.ɵfac = function SeriesLabelsToComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesLabelsToComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesLabelsToComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsToComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsToComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsToComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesLabelsToComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsToComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsToComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsToComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesLabelsToComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesLabelsToComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesLabelsToComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The `to` label configuration of the Chart series.\n */\nlet SeriesLabelsToComponent = class SeriesLabelsToComponent extends SeriesLabelsToComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nSeriesLabelsToComponent.ɵfac = function SeriesLabelsToComponent_Factory(t) { return new (t || SeriesLabelsToComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesLabelsToComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesLabelsToComponent, selectors: [[\"kendo-chart-series-item-labels-to\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesLabelsToComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesLabelsToComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesLabelsToComponent);\n\n/**\n * @hidden\n */\nclass SeriesMarkersComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('markers', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesMarkersComponentGenerated.ɵfac = function SeriesMarkersComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesMarkersComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesMarkersComponentGenerated, inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesMarkersComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesMarkersComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesMarkersComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesMarkersComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesMarkersComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesMarkersComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesMarkersComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesMarkersComponentGenerated.prototype, \"from\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesMarkersComponentGenerated.prototype, \"to\", void 0);\n\n/**\n * The configuration of the Chart series marker.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public series: any[] = [{\n * name: \"India\",\n * data: [3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855],\n * markers: {\n * background: 'red',\n * size: 20,\n * type: 'circle'\n * }\n * }, {\n * name: \"Russian Federation\",\n * data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, -7.832, 4.3, 4.3],\n * markers: {\n * background: 'yellow',\n * size: 10,\n * type: 'square',\n * rotation: 45\n * }\n * }, {\n * name: \"Germany\",\n * data: [0.010, -0.375, 1.161, 0.684, 3.7, 3.269, 1.083, -5.127, 3.690, 2.995],\n * markers: {\n * background: 'green',\n * size: 20,\n * type: 'triangle'\n * }\n * },{\n * name: \"World\",\n * data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727],\n * markers: {\n * background: 'blue',\n * size: 10,\n * type: 'cross'\n * }\n * }];\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n * }\n * ```\n */\nlet SeriesMarkersComponent = class SeriesMarkersComponent extends SeriesMarkersComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesMarkersComponent.ɵfac = function SeriesMarkersComponent_Factory(t) { return new (t || SeriesMarkersComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesMarkersComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesMarkersComponent, selectors: [[\"kendo-chart-series-item-markers\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesMarkersComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesMarkersComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesMarkersComponent);\n\n/**\n * @hidden\n */\nclass SeriesNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesComponentGenerated.ɵfac = function SeriesNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesNotesComponentGenerated, inputs: { line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The series notes configuration\n * ([see example]({% slug notes_chart_charts %})).\n */\nlet SeriesNotesComponent = class SeriesNotesComponent extends SeriesNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesNotesComponent.ɵfac = function SeriesNotesComponent_Factory(t) { return new (t || SeriesNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesNotesComponent, selectors: [[\"kendo-chart-series-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesNotesComponent);\n\n/**\n * @hidden\n */\nclass SeriesNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesIconComponentGenerated.ɵfac = function SeriesNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet SeriesNotesIconComponent = class SeriesNotesIconComponent extends SeriesNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesNotesIconComponent.ɵfac = function SeriesNotesIconComponent_Factory(t) { return new (t || SeriesNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesNotesIconComponent, selectors: [[\"kendo-chart-series-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesNotesIconComponent);\n\n/**\n * @hidden\n */\nclass SeriesNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesLabelComponentGenerated.ɵfac = function SeriesNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SeriesNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SeriesNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet SeriesNotesLabelComponent = class SeriesNotesLabelComponent extends SeriesNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesNotesLabelComponent.ɵfac = function SeriesNotesLabelComponent_Factory(t) { return new (t || SeriesNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesNotesLabelComponent, selectors: [[\"kendo-chart-series-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass SeriesOutliersComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('outliers', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesOutliersComponentGenerated.ɵfac = function SeriesOutliersComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSeriesOutliersComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SeriesOutliersComponentGenerated, inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesOutliersComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SeriesOutliersComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesOutliersComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SeriesOutliersComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SeriesOutliersComponentGenerated.prototype, \"type\", void 0);\n\n/**\n * The configuration of the Chart series outliers.\n * Applies to mild outliers.\n * For more information, refer to the [`series.extremes`]({% slug api_charts_seriesitemcomponent %}#toc-extremes) option.\n */\nlet SeriesOutliersComponent = class SeriesOutliersComponent extends SeriesOutliersComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nSeriesOutliersComponent.ɵfac = function SeriesOutliersComponent_Factory(t) { return new (t || SeriesOutliersComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nSeriesOutliersComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SeriesOutliersComponent, selectors: [[\"kendo-chart-series-item-outliers\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SeriesOutliersComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nSeriesOutliersComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], SeriesOutliersComponent);\n\n/**\n * @hidden\n */\nclass TitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nTitleComponentGenerated.ɵfac = function TitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TitleComponentGenerated, inputs: { align: \"align\", background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", text: \"text\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"align\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TitleComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the Chart title or text\n * ([see example]({% slug title_chart_charts %})).\n *\n * @example\n * ```ts-preview\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n *

\n * \n * `\n * })\n * export class AppComponent {\n * public isVisible = true;\n * public borderOptions = {\n * color: \"rgba(255, 0, 0, 0.8)\",\n * dashType: 'dash',\n * width: 2\n * };\n *\n * public series: any[] = [{\n * name: \"India\",\n * data: [3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855]\n * }, {\n * name: \"Russian Federation\",\n * data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, -7.832, 4.3, 4.3]\n * }, {\n * name: \"Germany\",\n * data: [0.010, -0.375, 1.161, 0.684, 3.7, 3.269, 1.083, -5.127, 3.690, 2.995]\n * },{\n * name: \"World\",\n * data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727]\n * }];\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n * }\n * ```\n */\nlet TitleComponent = class TitleComponent extends TitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nTitleComponent.ɵfac = function TitleComponent_Factory(t) { return new (t || TitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TitleComponent, selectors: [[\"kendo-chart-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], TitleComponent);\n\n/**\n * @hidden\n */\nclass TooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nTooltipComponentGenerated.ɵfac = function TooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", opacity: \"opacity\", padding: \"padding\", shared: \"shared\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TooltipComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TooltipComponentGenerated.prototype, \"shared\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the Chart series tooltip\n * ([see example]({% slug tooltips_chart_charts %})).\n */\nlet TooltipComponent = class TooltipComponent extends TooltipComponentGenerated {\n constructor(configurationService, templateService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.templateService = templateService;\n this.markAsVisible();\n }\n ngAfterContentChecked() {\n this.templateService.setTemplate(this.seriesTooltipTemplate ? this.seriesTooltipTemplate.templateRef : null);\n this.templateService.setSharedTemplate(this.sharedTooltipTemplate ? this.sharedTooltipTemplate.templateRef : null);\n }\n};\nTooltipComponent.ɵfac = function TooltipComponent_Factory(t) { return new (t || TooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(TooltipTemplateService)); };\nTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TooltipComponent, selectors: [[\"kendo-chart-tooltip\"]], contentQueries: function TooltipComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, SeriesTooltipTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, SharedTooltipTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.seriesTooltipTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.sharedTooltipTemplate = _t.first);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TooltipComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n ContentChild(SeriesTooltipTemplateDirective, { static: false }),\n __metadata(\"design:type\", SeriesTooltipTemplateDirective)\n], TooltipComponent.prototype, \"seriesTooltipTemplate\", void 0);\n__decorate([\n ContentChild(SharedTooltipTemplateDirective, { static: false }),\n __metadata(\"design:type\", SharedTooltipTemplateDirective)\n], TooltipComponent.prototype, \"sharedTooltipTemplate\", void 0);\nTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n TooltipTemplateService])\n], TooltipComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisItemComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nValueAxisItemComponentGenerated.ɵfac = function ValueAxisItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisItemComponentGenerated, inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", type: \"type\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"axisCrossingValue\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisItemComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisItemComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"majorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"majorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisItemComponentGenerated.prototype, \"majorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"minorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"minorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisItemComponentGenerated.prototype, \"minorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisItemComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisItemComponentGenerated.prototype, \"narrowRange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisItemComponentGenerated.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ValueAxisItemComponentGenerated.prototype, \"plotBands\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisItemComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisItemComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisItemComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"crosshair\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisItemComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration component for a value axis.\n */\nlet ValueAxisItemComponent = class ValueAxisItemComponent extends ValueAxisItemComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nValueAxisItemComponent.ɵfac = function ValueAxisItemComponent_Factory(t) { return new (t || ValueAxisItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nValueAxisItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisItemComponent, selectors: [[\"kendo-chart-value-axis-item\"]], features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], ValueAxisItemComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('valueAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nValueAxisComponentGenerated.ɵfac = function ValueAxisComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisComponentGenerated, contentQueries: function ValueAxisComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ValueAxisItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(ValueAxisItemComponent),\n __metadata(\"design:type\", QueryList)\n], ValueAxisComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more value axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nlet ValueAxisComponent = class ValueAxisComponent extends ValueAxisComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nValueAxisComponent.ɵfac = function ValueAxisComponent_Factory(t) { return new (t || ValueAxisComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nValueAxisComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisComponent, selectors: [[\"kendo-chart-value-axis\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], ValueAxisComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisCrosshairComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisCrosshairComponentGenerated.ɵfac = function ValueAxisCrosshairComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisCrosshairComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisCrosshairComponentGenerated, inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisCrosshairComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisCrosshairComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisCrosshairComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisCrosshairComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisCrosshairComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The crosshair configuration options ([see example]({% slug crosshairs_chart_charts %})).\n */\nlet ValueAxisCrosshairComponent = class ValueAxisCrosshairComponent extends ValueAxisCrosshairComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nValueAxisCrosshairComponent.ɵfac = function ValueAxisCrosshairComponent_Factory(t) { return new (t || ValueAxisCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisCrosshairComponent, selectors: [[\"kendo-chart-value-axis-item-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisCrosshairComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisCrosshairTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisCrosshairTooltipComponentGenerated.ɵfac = function ValueAxisCrosshairTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisCrosshairTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisCrosshairTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisCrosshairTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nlet ValueAxisCrosshairTooltipComponent = class ValueAxisCrosshairTooltipComponent extends ValueAxisCrosshairTooltipComponentGenerated {\n // Place custom properties here.\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nValueAxisCrosshairTooltipComponent.ɵfac = function ValueAxisCrosshairTooltipComponent_Factory(t) { return new (t || ValueAxisCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisCrosshairTooltipComponent, selectors: [[\"kendo-chart-value-axis-item-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisCrosshairTooltipComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisLabelsComponentGenerated.ɵfac = function ValueAxisLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisLabelsComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisLabelsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisLabelsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisLabelsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ValueAxisLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisLabelsComponentGenerated.prototype, \"mirror\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisLabelsComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisLabelsComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisLabelsComponentGenerated.prototype, \"skip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisLabelsComponentGenerated.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ValueAxisLabelsComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The axis labels configuration.\n */\nlet ValueAxisLabelsComponent = class ValueAxisLabelsComponent extends ValueAxisLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nValueAxisLabelsComponent.ɵfac = function ValueAxisLabelsComponent_Factory(t) { return new (t || ValueAxisLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisLabelsComponent, selectors: [[\"kendo-chart-value-axis-item-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisLabelsComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesComponentGenerated.ɵfac = function ValueAxisNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisNotesComponentGenerated, inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ValueAxisNotesComponentGenerated.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ValueAxisNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The configuration of the value axis notes ([see example]({% slug notes_chart_charts %}#toc-axis-notes)).\n */\nlet ValueAxisNotesComponent = class ValueAxisNotesComponent extends ValueAxisNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nValueAxisNotesComponent.ɵfac = function ValueAxisNotesComponent_Factory(t) { return new (t || ValueAxisNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisNotesComponent, selectors: [[\"kendo-chart-value-axis-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisNotesComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesIconComponentGenerated.ɵfac = function ValueAxisNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet ValueAxisNotesIconComponent = class ValueAxisNotesIconComponent extends ValueAxisNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nValueAxisNotesIconComponent.ɵfac = function ValueAxisNotesIconComponent_Factory(t) { return new (t || ValueAxisNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisNotesIconComponent, selectors: [[\"kendo-chart-value-axis-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisNotesIconComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesLabelComponentGenerated.ɵfac = function ValueAxisNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet ValueAxisNotesLabelComponent = class ValueAxisNotesLabelComponent extends ValueAxisNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nValueAxisNotesLabelComponent.ɵfac = function ValueAxisNotesLabelComponent_Factory(t) { return new (t || ValueAxisNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisNotesLabelComponent, selectors: [[\"kendo-chart-value-axis-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass ValueAxisTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisTitleComponentGenerated.ɵfac = function ValueAxisTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nValueAxisTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueAxisTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ValueAxisTitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ValueAxisTitleComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ValueAxisTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ValueAxisTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ValueAxisTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The title configuration of the value axis.\n */\nlet ValueAxisTitleComponent = class ValueAxisTitleComponent extends ValueAxisTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nValueAxisTitleComponent.ɵfac = function ValueAxisTitleComponent_Factory(t) { return new (t || ValueAxisTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nValueAxisTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ValueAxisTitleComponent, selectors: [[\"kendo-chart-value-axis-item-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ValueAxisTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nValueAxisTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ValueAxisTitleComponent);\n\n/**\n * @hidden\n */\nclass XAxisItemComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });\n }\n}\nXAxisItemComponentGenerated.ɵfac = function XAxisItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisItemComponentGenerated, inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", startAngle: \"startAngle\", type: \"type\", visible: \"visible\", weekStartDay: \"weekStartDay\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"axisCrossingValue\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"baseUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"majorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"majorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisItemComponentGenerated.prototype, \"majorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"minorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"minorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisItemComponentGenerated.prototype, \"minorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisItemComponentGenerated.prototype, \"narrowRange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], XAxisItemComponentGenerated.prototype, \"plotBands\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisItemComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisItemComponentGenerated.prototype, \"startAngle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisItemComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisItemComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisItemComponentGenerated.prototype, \"weekStartDay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"crosshair\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisItemComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration component for an X axis\n * ([see example]({% slug api_charts_xaxiscomponent %})).\n */\nlet XAxisItemComponent = class XAxisItemComponent extends XAxisItemComponentGenerated {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService, intl, localeId);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.intl = intl;\n }\n};\nXAxisItemComponent.ɵfac = function XAxisItemComponent_Factory(t) { return new (t || XAxisItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID)); };\nXAxisItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisItemComponent, selectors: [[\"kendo-chart-x-axis-item\"]], inputs: { categories: \"categories\" }, features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], XAxisItemComponent.prototype, \"categories\", void 0);\nXAxisItemComponent = __decorate([ __param(3, Inject(LOCALE_ID)),\n __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService,\n IntlService, String])\n], XAxisItemComponent);\n\n/**\n * @hidden\n */\nclass XAxisComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('xAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nXAxisComponentGenerated.ɵfac = function XAxisComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisComponentGenerated, contentQueries: function XAxisComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, XAxisItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(XAxisItemComponent),\n __metadata(\"design:type\", QueryList)\n], XAxisComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more X-axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public notesConfig = {\n * data: [{\n * value: 0.2,\n * text: \"foo\"\n * }, {\n * value: 0.8,\n * text: \"bar\"\n * }],\n * label: {\n * content: (args: any) => args.dataItem.text,\n * background: 'red',\n * color: 'white'\n * },\n * line: {\n * color: 'blue',\n * dashType: 'dash',\n * length: 150,\n * width: 2\n * },\n * position: 'top'\n * };\n *\n * public crosshairConfig = {\n * color: 'green',\n * opacity: 0.8,\n * visible: true,\n * width: 3\n * };\n * }\n *\n * ```\n */\nlet XAxisComponent = class XAxisComponent extends XAxisComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nXAxisComponent.ɵfac = function XAxisComponent_Factory(t) { return new (t || XAxisComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nXAxisComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisComponent, selectors: [[\"kendo-chart-x-axis\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], XAxisComponent);\n\n/**\n * @hidden\n */\nclass XAxisCrosshairComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisCrosshairComponentGenerated.ɵfac = function XAxisCrosshairComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisCrosshairComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisCrosshairComponentGenerated, inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisCrosshairComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisCrosshairComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisCrosshairComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisCrosshairComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisCrosshairComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The crosshair configuration options\n * ([see example]({% slug api_charts_xaxiscomponent %})).\n */\nlet XAxisCrosshairComponent = class XAxisCrosshairComponent extends XAxisCrosshairComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nXAxisCrosshairComponent.ɵfac = function XAxisCrosshairComponent_Factory(t) { return new (t || XAxisCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisCrosshairComponent, selectors: [[\"kendo-chart-x-axis-item-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisCrosshairComponent);\n\n/**\n * @hidden\n */\nclass XAxisCrosshairTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisCrosshairTooltipComponentGenerated.ɵfac = function XAxisCrosshairTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisCrosshairTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisCrosshairTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisCrosshairTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nlet XAxisCrosshairTooltipComponent = class XAxisCrosshairTooltipComponent extends XAxisCrosshairTooltipComponentGenerated {\n // Place custom properties here.\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nXAxisCrosshairTooltipComponent.ɵfac = function XAxisCrosshairTooltipComponent_Factory(t) { return new (t || XAxisCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisCrosshairTooltipComponent, selectors: [[\"kendo-chart-x-axis-item-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisCrosshairTooltipComponent);\n\n/**\n * @hidden\n */\nclass XAxisLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisLabelsComponentGenerated.ɵfac = function XAxisLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisLabelsComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisLabelsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], XAxisLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"culture\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisLabelsComponentGenerated.prototype, \"dateFormats\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisLabelsComponentGenerated.prototype, \"mirror\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisLabelsComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisLabelsComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisLabelsComponentGenerated.prototype, \"skip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisLabelsComponentGenerated.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], XAxisLabelsComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The axis labels configuration.\n */\nlet XAxisLabelsComponent = class XAxisLabelsComponent extends XAxisLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nXAxisLabelsComponent.ɵfac = function XAxisLabelsComponent_Factory(t) { return new (t || XAxisLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisLabelsComponent, selectors: [[\"kendo-chart-x-axis-item-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisLabelsComponent);\n\n/**\n * @hidden\n */\nclass XAxisNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesComponentGenerated.ɵfac = function XAxisNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisNotesComponentGenerated, inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], XAxisNotesComponentGenerated.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], XAxisNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The configuration of the X-axis notes.\n * For an example on the basic usage of the XAxisNotesComponent,\n * refer to the [demo on the XAxisComponent]({% slug api_charts_xaxiscomponent %})\n * or to the documentation about the\n * [axis notes]({% slug notes_chart_charts %}#toc-axis-notes).\n */\nlet XAxisNotesComponent = class XAxisNotesComponent extends XAxisNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nXAxisNotesComponent.ɵfac = function XAxisNotesComponent_Factory(t) { return new (t || XAxisNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisNotesComponent, selectors: [[\"kendo-chart-x-axis-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisNotesComponent);\n\n/**\n * @hidden\n */\nclass XAxisNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesIconComponentGenerated.ɵfac = function XAxisNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet XAxisNotesIconComponent = class XAxisNotesIconComponent extends XAxisNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nXAxisNotesIconComponent.ɵfac = function XAxisNotesIconComponent_Factory(t) { return new (t || XAxisNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisNotesIconComponent, selectors: [[\"kendo-chart-x-axis-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisNotesIconComponent);\n\n/**\n * @hidden\n */\nclass XAxisNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesLabelComponentGenerated.ɵfac = function XAxisNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], XAxisNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet XAxisNotesLabelComponent = class XAxisNotesLabelComponent extends XAxisNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nXAxisNotesLabelComponent.ɵfac = function XAxisNotesLabelComponent_Factory(t) { return new (t || XAxisNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisNotesLabelComponent, selectors: [[\"kendo-chart-x-axis-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass XAxisTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisTitleComponentGenerated.ɵfac = function XAxisTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nXAxisTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: XAxisTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], XAxisTitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], XAxisTitleComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], XAxisTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], XAxisTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], XAxisTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The title configuration of the Scatter Chart X axis.\n */\nlet XAxisTitleComponent = class XAxisTitleComponent extends XAxisTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nXAxisTitleComponent.ɵfac = function XAxisTitleComponent_Factory(t) { return new (t || XAxisTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nXAxisTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: XAxisTitleComponent, selectors: [[\"kendo-chart-x-axis-item-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function XAxisTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nXAxisTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], XAxisTitleComponent);\n\n/**\n * @hidden\n */\nclass YAxisItemComponentGenerated extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nYAxisItemComponentGenerated.ɵfac = function YAxisItemComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisItemComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisItemComponentGenerated, inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", type: \"type\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"axisCrossingValue\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"baseUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"majorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"majorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisItemComponentGenerated.prototype, \"majorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"minorGridLines\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"minorTicks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisItemComponentGenerated.prototype, \"minorUnit\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"name\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisItemComponentGenerated.prototype, \"narrowRange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], YAxisItemComponentGenerated.prototype, \"plotBands\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisItemComponentGenerated.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisItemComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisItemComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"crosshair\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"labels\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"notes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisItemComponentGenerated.prototype, \"title\", void 0);\n\n/**\n * The configuration component for the Y axis\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nlet YAxisItemComponent = class YAxisItemComponent extends YAxisItemComponentGenerated {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nYAxisItemComponent.ɵfac = function YAxisItemComponent_Factory(t) { return new (t || YAxisItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nYAxisItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisItemComponent, selectors: [[\"kendo-chart-y-axis-item\"]], inputs: { categories: \"categories\" }, features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], YAxisItemComponent.prototype, \"categories\", void 0);\nYAxisItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], YAxisItemComponent);\n\n/**\n * @hidden\n */\nclass YAxisComponentGenerated extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('yAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nYAxisComponentGenerated.ɵfac = function YAxisComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisComponentGenerated, contentQueries: function YAxisComponentGenerated_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, YAxisItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n ContentChildren(YAxisItemComponent),\n __metadata(\"design:type\", QueryList)\n], YAxisComponentGenerated.prototype, \"children\", void 0);\n\n/**\n * A collection of one or more Y-axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public notesConfig = {\n * data: [{\n * value: 0.2,\n * text: \"foo\"\n * }, {\n * value: 0.8,\n * text: \"bar\"\n * }],\n * label: {\n * content: (args: any) => args.dataItem.text,\n * background: 'red',\n * color: 'white'\n * },\n * line: {\n * color: 'blue',\n * dashType: 'dash',\n * length: 150,\n * width: 2\n * },\n * position: 'top'\n * };\n *\n * public crosshairConfig = {\n * color: 'green',\n * opacity: 0.8,\n * visible: true,\n * width: 3\n * };\n * }\n *\n * ```\n */\nlet YAxisComponent = class YAxisComponent extends YAxisComponentGenerated {\n // Place custom properties here\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nYAxisComponent.ɵfac = function YAxisComponent_Factory(t) { return new (t || YAxisComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nYAxisComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisComponent, selectors: [[\"kendo-chart-y-axis\"]], features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], YAxisComponent);\n\n/**\n * @hidden\n */\nclass YAxisCrosshairComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisCrosshairComponentGenerated.ɵfac = function YAxisCrosshairComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisCrosshairComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisCrosshairComponentGenerated, inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisCrosshairComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisCrosshairComponentGenerated.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisCrosshairComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisCrosshairComponentGenerated.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisCrosshairComponentGenerated.prototype, \"tooltip\", void 0);\n\n/**\n * The crosshair configuration options\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nlet YAxisCrosshairComponent = class YAxisCrosshairComponent extends YAxisCrosshairComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nYAxisCrosshairComponent.ɵfac = function YAxisCrosshairComponent_Factory(t) { return new (t || YAxisCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisCrosshairComponent, selectors: [[\"kendo-chart-y-axis-item-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisCrosshairComponent);\n\n/**\n * @hidden\n */\nclass YAxisCrosshairTooltipComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisCrosshairTooltipComponentGenerated.ɵfac = function YAxisCrosshairTooltipComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisCrosshairTooltipComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisCrosshairTooltipComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisCrosshairTooltipComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nlet YAxisCrosshairTooltipComponent = class YAxisCrosshairTooltipComponent extends YAxisCrosshairTooltipComponentGenerated {\n // Place custom properties here.\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nYAxisCrosshairTooltipComponent.ɵfac = function YAxisCrosshairTooltipComponent_Factory(t) { return new (t || YAxisCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisCrosshairTooltipComponent, selectors: [[\"kendo-chart-y-axis-item-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisCrosshairTooltipComponent);\n\n/**\n * @hidden\n */\nclass YAxisLabelsComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisLabelsComponentGenerated.ɵfac = function YAxisLabelsComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisLabelsComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisLabelsComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisLabelsComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], YAxisLabelsComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"culture\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisLabelsComponentGenerated.prototype, \"dateFormats\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisLabelsComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisLabelsComponentGenerated.prototype, \"mirror\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisLabelsComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisLabelsComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisLabelsComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisLabelsComponentGenerated.prototype, \"skip\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisLabelsComponentGenerated.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisLabelsComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], YAxisLabelsComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The axis labels configuration.\n */\nlet YAxisLabelsComponent = class YAxisLabelsComponent extends YAxisLabelsComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nYAxisLabelsComponent.ɵfac = function YAxisLabelsComponent_Factory(t) { return new (t || YAxisLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisLabelsComponent, selectors: [[\"kendo-chart-y-axis-item-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisLabelsComponent);\n\n/**\n * @hidden\n */\nclass YAxisNotesComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesComponentGenerated.ɵfac = function YAxisNotesComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisNotesComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisNotesComponentGenerated, inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], YAxisNotesComponentGenerated.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisNotesComponentGenerated.prototype, \"line\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], YAxisNotesComponentGenerated.prototype, \"visual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisNotesComponentGenerated.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisNotesComponentGenerated.prototype, \"label\", void 0);\n\n/**\n * The configuration of the Y axis notes\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nlet YAxisNotesComponent = class YAxisNotesComponent extends YAxisNotesComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nYAxisNotesComponent.ɵfac = function YAxisNotesComponent_Factory(t) { return new (t || YAxisNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisNotesComponent, selectors: [[\"kendo-chart-y-axis-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisNotesComponent);\n\n/**\n * @hidden\n */\nclass YAxisNotesIconComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesIconComponentGenerated.ɵfac = function YAxisNotesIconComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisNotesIconComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisNotesIconComponentGenerated, inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesIconComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisNotesIconComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisNotesIconComponentGenerated.prototype, \"size\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesIconComponentGenerated.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisNotesIconComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The icon of the notes.\n */\nlet YAxisNotesIconComponent = class YAxisNotesIconComponent extends YAxisNotesIconComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nYAxisNotesIconComponent.ɵfac = function YAxisNotesIconComponent_Factory(t) { return new (t || YAxisNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisNotesIconComponent, selectors: [[\"kendo-chart-y-axis-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisNotesIconComponent);\n\n/**\n * @hidden\n */\nclass YAxisNotesLabelComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesLabelComponentGenerated.ɵfac = function YAxisNotesLabelComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisNotesLabelComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisNotesLabelComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesLabelComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisNotesLabelComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesLabelComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], YAxisNotesLabelComponentGenerated.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesLabelComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesLabelComponentGenerated.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisNotesLabelComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisNotesLabelComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisNotesLabelComponentGenerated.prototype, \"visible\", void 0);\n\n/**\n * The label of the notes.\n */\nlet YAxisNotesLabelComponent = class YAxisNotesLabelComponent extends YAxisNotesLabelComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nYAxisNotesLabelComponent.ɵfac = function YAxisNotesLabelComponent_Factory(t) { return new (t || YAxisNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisNotesLabelComponent, selectors: [[\"kendo-chart-y-axis-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisNotesLabelComponent);\n\n/**\n * @hidden\n */\nclass YAxisTitleComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisTitleComponentGenerated.ɵfac = function YAxisTitleComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nYAxisTitleComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: YAxisTitleComponentGenerated, inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisTitleComponentGenerated.prototype, \"background\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisTitleComponentGenerated.prototype, \"border\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisTitleComponentGenerated.prototype, \"color\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisTitleComponentGenerated.prototype, \"font\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisTitleComponentGenerated.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], YAxisTitleComponentGenerated.prototype, \"padding\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisTitleComponentGenerated.prototype, \"position\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], YAxisTitleComponentGenerated.prototype, \"rotation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], YAxisTitleComponentGenerated.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], YAxisTitleComponentGenerated.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], YAxisTitleComponentGenerated.prototype, \"visual\", void 0);\n\n/**\n * The title configuration of the Scatter Chart Y axis.\n */\nlet YAxisTitleComponent = class YAxisTitleComponent extends YAxisTitleComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nYAxisTitleComponent.ɵfac = function YAxisTitleComponent_Factory(t) { return new (t || YAxisTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nYAxisTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: YAxisTitleComponent, selectors: [[\"kendo-chart-y-axis-item-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function YAxisTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nYAxisTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], YAxisTitleComponent);\n\n/**\n * @hidden\n */\nclass ZoomableComponentGenerated extends SettingsComponent {\n constructor(configurationService) {\n super('zoomable', configurationService);\n this.configurationService = configurationService;\n }\n}\nZoomableComponentGenerated.ɵfac = function ZoomableComponentGenerated_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nZoomableComponentGenerated.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ZoomableComponentGenerated, inputs: { mousewheel: \"mousewheel\", selection: \"selection\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ZoomableComponentGenerated.prototype, \"mousewheel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ZoomableComponentGenerated.prototype, \"selection\", void 0);\n\n/**\n * Specifies if the Chart can be zoomed.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * ```\n */\nlet ZoomableComponent = class ZoomableComponent extends ZoomableComponentGenerated {\n // Place custom properties here\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nZoomableComponent.ɵfac = function ZoomableComponent_Factory(t) { return new (t || ZoomableComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nZoomableComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ZoomableComponent, selectors: [[\"kendo-chart-zoomable\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ZoomableComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nZoomableComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], ZoomableComponent);\n\n/**\n * @hidden\n */\nconst CHART_DIRECTIVES = [\n ChartComponent,\n TooltipPopupComponent,\n SeriesTooltipTemplateDirective,\n SharedTooltipTemplateDirective,\n CrosshairTooltipsContainerComponent,\n CrosshairTooltipComponent,\n DonutCenterTemplateDirective,\n AxisDefaultsComponent,\n AxisDefaultsCrosshairComponent,\n AxisDefaultsCrosshairTooltipComponent,\n AxisDefaultsLabelsComponent,\n AxisDefaultsTitleComponent,\n CategoryAxisComponent,\n CategoryAxisCrosshairComponent,\n CategoryAxisCrosshairTooltipComponent,\n CategoryAxisItemComponent,\n CategoryAxisLabelsComponent,\n CategoryAxisRangeLabelsComponent,\n CategoryAxisNotesComponent,\n CategoryAxisNotesIconComponent,\n CategoryAxisNotesLabelComponent,\n CategoryAxisSelectComponent,\n CategoryAxisTitleComponent,\n ChartAreaComponent,\n LegendComponent,\n LegendInactiveItemsComponent,\n LegendItemComponent,\n PaneComponent,\n PaneDefaultsComponent,\n PaneDefaultsTitleComponent,\n PanesComponent,\n PanesTitleComponent,\n PlotAreaComponent,\n SeriesComponent,\n SeriesDefaultsComponent,\n SeriesDefaultsLabelsComponent,\n SeriesDefaultsLabelsFromComponent,\n SeriesDefaultsLabelsToComponent,\n SeriesDefaultsNotesComponent,\n SeriesDefaultsNotesIconComponent,\n SeriesDefaultsNotesLabelComponent,\n SeriesDefaultsTooltipComponent,\n SeriesErrorBarsComponent,\n SeriesExtremesComponent,\n SeriesHighlightComponent,\n SeriesItemComponent,\n SeriesLabelsComponent,\n SeriesLabelsFromComponent,\n SeriesLabelsToComponent,\n SeriesMarkersComponent,\n SeriesNotesComponent,\n SeriesNotesIconComponent,\n SeriesNotesLabelComponent,\n SeriesOutliersComponent,\n SeriesTooltipComponent,\n TitleComponent,\n TooltipComponent,\n ValueAxisComponent,\n ValueAxisCrosshairComponent,\n ValueAxisCrosshairTooltipComponent,\n ValueAxisItemComponent,\n ValueAxisLabelsComponent,\n ValueAxisNotesComponent,\n ValueAxisNotesIconComponent,\n ValueAxisNotesLabelComponent,\n ValueAxisTitleComponent,\n XAxisComponent,\n XAxisCrosshairComponent,\n XAxisCrosshairTooltipComponent,\n XAxisItemComponent,\n XAxisLabelsComponent,\n XAxisNotesComponent,\n XAxisNotesIconComponent,\n XAxisNotesLabelComponent,\n XAxisTitleComponent,\n YAxisComponent,\n YAxisCrosshairComponent,\n YAxisCrosshairTooltipComponent,\n YAxisItemComponent,\n YAxisLabelsComponent,\n YAxisNotesComponent,\n YAxisNotesIconComponent,\n YAxisNotesLabelComponent,\n YAxisTitleComponent,\n ZoomableComponent\n];\n\n// Re-export event types\n\n/**\n * The arguments for the `navigatorFilter` event.\n */\nclass NavigatorFilterEvent extends BaseEvent {\n /**\n * Constructs the event arguments from a raw object.\n */\n constructor(e, sender) {\n super(sender);\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n// Re-export event types\n\n/**\n * @hidden\n */\nlet RootConfigurationService = class RootConfigurationService extends ConfigurationService {\n};\nRootConfigurationService.ɵfac = /*@__PURE__*/ function () { let ɵRootConfigurationService_BaseFactory; return function RootConfigurationService_Factory(t) { return (ɵRootConfigurationService_BaseFactory || (ɵRootConfigurationService_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(RootConfigurationService)))(t || RootConfigurationService); }; }();\nRootConfigurationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: RootConfigurationService, factory: function (t) { return RootConfigurationService.ɵfac(t); } });\n\nconst EVENT_MAP$1 = {\n navigatorFilter: NavigatorFilterEvent\n};\n/**\n * @hidden\n */\nclass StockInstanceEventService extends InstanceEventService {\n create(name, args, sender) {\n if (EVENT_MAP$1[name]) {\n return new EVENT_MAP$1[name](args, sender);\n }\n return super.create(name, args, sender);\n }\n}\nStockInstanceEventService.ɵfac = /*@__PURE__*/ function () { let ɵStockInstanceEventService_BaseFactory; return function StockInstanceEventService_Factory(t) { return (ɵStockInstanceEventService_BaseFactory || (ɵStockInstanceEventService_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(StockInstanceEventService)))(t || StockInstanceEventService); }; }();\nStockInstanceEventService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: StockInstanceEventService, factory: StockInstanceEventService.ɵfac });\n\nconst NAVIGATOR_DEFAULTS = {\n autoBindElements: true,\n liveDrag: false,\n partialRedraw: true\n};\n/* tslint:disable:no-access-missing-member */\n/**\n * The root StockChart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [];\n *\n * constructor() {\n * for (let idx = 0; idx < 100; idx++) {\n * this.data.push({\n * date: new Date(2017, 0, idx),\n * value: Math.random() * 100\n * });\n * }\n * }\n * }\n *\n * ```\n */\nlet StockChartComponent = class StockChartComponent extends ChartComponent {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n super(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer);\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * Fires when the navigator range is changed.\n */\n this.navigatorFilter = new EventEmitter();\n this.redrawSlaves = false;\n this.hostClasses = ['k-chart', 'k-stockchart'];\n validatePackage(packageMetadata);\n }\n /**\n * If called, the navigator pane is not redrawn the next time the StockChart options are updated.\n * The method is useful if you need to update only the main series data for the selected period.\n */\n skipNavigatorRedraw() {\n this.redrawSlaves = true;\n }\n createInstance(element, observer) {\n this.applyNavigatorDefaults();\n if (this.isDevMode() && (this.options.zoomable || this.options.pannable)) {\n throw new Error('The pannable and zoomable options are not supported by the StockChart component.');\n }\n this.instance = new StockChart(element, this.options, this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n updateOptions() {\n this.applyNavigatorDefaults();\n if (this.redrawSlaves) {\n this.instance.applyOptions(this.options);\n this.instance.bindCategories();\n this.instance.navigator.redrawSlaves();\n }\n else {\n this.instance.setOptions(this.options);\n }\n this.redrawSlaves = false;\n }\n applyNavigatorDefaults() {\n this.options.navigator = Object.assign({}, this.options.navigator, NAVIGATOR_DEFAULTS);\n }\n isDevMode() {\n return isDevMode();\n }\n};\nStockChartComponent.ɵfac = function StockChartComponent_Factory(t) { return new (t || StockChartComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(ThemeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(StockInstanceEventService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nStockChartComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: StockChartComponent, selectors: [[\"kendo-stockchart\"]], inputs: { navigator: \"navigator\", pannable: \"pannable\", zoomable: \"zoomable\" }, outputs: { navigatorFilter: \"navigatorFilter\" }, exportAs: [\"kendoStockChart\"], features: [ɵngcc0.ɵɵProvidersFeature([\n ConfigurationService,\n TooltipTemplateService,\n { provide: RootConfigurationService, useExisting: ConfigurationService },\n StockInstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 5, vars: 2, consts: [[1, \"k-chart-surface\"], [\"surface\", \"\"], [3, \"popupSettings\"], [3, \"popupSettings\", \"leave\"], [3, \"resize\"]], template: function StockChartComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 0, 1)(2, \"kendo-chart-crosshair-tooltips-container\", 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-chart-tooltip-popup\", 3);\n ɵngcc0.ɵɵlistener(\"leave\", function StockChartComponent_Template_kendo_chart_tooltip_popup_leave_3_listener($event) { return ctx.tooltipMouseleave($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-resize-sensor\", 4);\n ɵngcc0.ɵɵlistener(\"resize\", function StockChartComponent_Template_kendo_resize_sensor_resize_4_listener($event) { return ctx.onResize($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"popupSettings\", ctx.popupSettings);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"popupSettings\", ctx.popupSettings);\n } }, directives: [CrosshairTooltipsContainerComponent, TooltipPopupComponent, ɵngcc5.ResizeSensorComponent], encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], StockChartComponent.prototype, \"navigator\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], StockChartComponent.prototype, \"pannable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], StockChartComponent.prototype, \"zoomable\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], StockChartComponent.prototype, \"navigatorFilter\", void 0);\nStockChartComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n ThemeService,\n ElementRef,\n IntlService,\n LocalizationService,\n NgZone,\n StockInstanceEventService,\n ChangeDetectorRef,\n Renderer2])\n], StockChartComponent);\n\n/**\n * @hidden\n */\nconst PREFIX = new InjectionToken('configuration prefix');\n/**\n * @hidden\n */\nlet PrefixConfigurationService = class PrefixConfigurationService extends ConfigurationService {\n constructor(rootService, prefix, ngZone) {\n super(ngZone);\n this.rootService = rootService;\n this.prefix = prefix;\n }\n push(store) {\n this.rootService.notify(new Change(this.prefix, store));\n }\n notify(change) {\n change.key = this.prefix + (change.key ? `.${change.key}` : '');\n this.rootService.notify(change);\n }\n};\nPrefixConfigurationService.ɵfac = function PrefixConfigurationService_Factory(t) { return new (t || PrefixConfigurationService)(ɵngcc0.ɵɵinject(RootConfigurationService), ɵngcc0.ɵɵinject(PREFIX), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nPrefixConfigurationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: PrefixConfigurationService, factory: function (t) { return PrefixConfigurationService.ɵfac(t); } });\nPrefixConfigurationService = __decorate([ __param(0, Inject(RootConfigurationService)),\n __param(1, Inject(PREFIX)),\n __metadata(\"design:paramtypes\", [RootConfigurationService, String, NgZone])\n], PrefixConfigurationService);\n\n/**\n * The configuration options of the navigator\n * ([see runnable example]({% slug overview_stockchart_charts %}#toc-navigator)).\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *

\n * \n * `\n * })\n * ```\n */\nlet NavigatorComponent = class NavigatorComponent extends SettingsComponent {\n constructor(configurationService) {\n super('', configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorComponent.ɵfac = function NavigatorComponent_Factory(t) { return new (t || NavigatorComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorComponent, selectors: [[\"kendo-chart-navigator\"]], inputs: { visible: \"visible\", categoryAxis: \"categoryAxis\", hint: \"hint\", pane: \"pane\", select: \"select\", series: \"series\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: PREFIX, useValue: 'navigator' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NavigatorComponent.prototype, \"visible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorComponent.prototype, \"categoryAxis\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorComponent.prototype, \"hint\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorComponent.prototype, \"pane\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorComponent.prototype, \"select\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorComponent.prototype, \"series\", void 0);\nNavigatorComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorComponent);\n\n/**\n * The configuration component of the navigator category axis.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nlet NavigatorCategoryAxisComponent = class NavigatorCategoryAxisComponent extends CategoryAxisItemComponent {\n constructor(configurationService, intl, localeId) {\n super(configurationService, null, intl, localeId);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisComponent.ɵfac = function NavigatorCategoryAxisComponent_Factory(t) { return new (t || NavigatorCategoryAxisComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID)); };\nNavigatorCategoryAxisComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisComponent, selectors: [[\"kendo-chart-navigator-category-axis\"]], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: PREFIX,\n useValue: 'navigator.categoryAxis'\n }, {\n provide: ConfigurationService,\n useClass: PrefixConfigurationService\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisComponent = __decorate([ __param(2, Inject(LOCALE_ID)),\n __metadata(\"design:paramtypes\", [ConfigurationService,\n IntlService, String])\n], NavigatorCategoryAxisComponent);\n\n/**\n * The configuration options of the crosshair.\n */\nlet NavigatorCategoryAxisCrosshairComponent = class NavigatorCategoryAxisCrosshairComponent extends CategoryAxisCrosshairComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisCrosshairComponent.ɵfac = function NavigatorCategoryAxisCrosshairComponent_Factory(t) { return new (t || NavigatorCategoryAxisCrosshairComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisCrosshairComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisCrosshairComponent, selectors: [[\"kendo-chart-navigator-category-axis-crosshair\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisCrosshairComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisCrosshairComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisCrosshairComponent);\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nlet NavigatorCategoryAxisCrosshairTooltipComponent = class NavigatorCategoryAxisCrosshairTooltipComponent extends CategoryAxisCrosshairTooltipComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisCrosshairTooltipComponent.ɵfac = function NavigatorCategoryAxisCrosshairTooltipComponent_Factory(t) { return new (t || NavigatorCategoryAxisCrosshairTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisCrosshairTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisCrosshairTooltipComponent, selectors: [[\"kendo-chart-navigator-category-axis-crosshair-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisCrosshairTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisCrosshairTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisCrosshairTooltipComponent);\n\n/**\n * The configuration of the axis labels.\n */\nlet NavigatorCategoryAxisLabelsComponent = class NavigatorCategoryAxisLabelsComponent extends CategoryAxisLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisLabelsComponent.ɵfac = function NavigatorCategoryAxisLabelsComponent_Factory(t) { return new (t || NavigatorCategoryAxisLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisLabelsComponent, selectors: [[\"kendo-chart-navigator-category-axis-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisLabelsComponent);\n\n/**\n * The configuration of the category axis notes.\n */\nlet NavigatorCategoryAxisNotesComponent = class NavigatorCategoryAxisNotesComponent extends CategoryAxisNotesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisNotesComponent.ɵfac = function NavigatorCategoryAxisNotesComponent_Factory(t) { return new (t || NavigatorCategoryAxisNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisNotesComponent, selectors: [[\"kendo-chart-navigator-category-axis-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisNotesComponent);\n\n/**\n * The icon of the notes.\n */\nlet NavigatorCategoryAxisNotesIconComponent = class NavigatorCategoryAxisNotesIconComponent extends CategoryAxisNotesIconComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisNotesIconComponent.ɵfac = function NavigatorCategoryAxisNotesIconComponent_Factory(t) { return new (t || NavigatorCategoryAxisNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisNotesIconComponent, selectors: [[\"kendo-chart-navigator-category-axis-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisNotesIconComponent);\n\n/**\n * The label of the notes.\n */\nlet NavigatorCategoryAxisNotesLabelComponent = class NavigatorCategoryAxisNotesLabelComponent extends CategoryAxisNotesLabelComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisNotesLabelComponent.ɵfac = function NavigatorCategoryAxisNotesLabelComponent_Factory(t) { return new (t || NavigatorCategoryAxisNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisNotesLabelComponent, selectors: [[\"kendo-chart-navigator-category-axis-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisNotesLabelComponent);\n\n/**\n * The selected axis range. If set, the axis selection is enabled. The range is index-based and starts from zero.\n * Categories with indexes in the range (`select.from`, `select.to`) will be selected.\n * This means that the last category in the range will not be included in the selection.\n * If the categories are dates, the range has also to be specified with date values.\n */\nlet NavigatorCategoryAxisSelectComponent = class NavigatorCategoryAxisSelectComponent extends CategoryAxisSelectComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisSelectComponent.ɵfac = function NavigatorCategoryAxisSelectComponent_Factory(t) { return new (t || NavigatorCategoryAxisSelectComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisSelectComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisSelectComponent, selectors: [[\"kendo-chart-navigator-category-axis-select\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisSelectComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisSelectComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisSelectComponent);\n\n/**\n * The title configuration of the navigator category axis.\n */\nlet NavigatorCategoryAxisTitleComponent = class NavigatorCategoryAxisTitleComponent extends CategoryAxisTitleComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorCategoryAxisTitleComponent.ɵfac = function NavigatorCategoryAxisTitleComponent_Factory(t) { return new (t || NavigatorCategoryAxisTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorCategoryAxisTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorCategoryAxisTitleComponent, selectors: [[\"kendo-chart-navigator-category-axis-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorCategoryAxisTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorCategoryAxisTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorCategoryAxisTitleComponent);\n\n/**\n * The default options of the navigator hint\n * ([see example]({% slug overview_stockchart_charts %}#toc-navigator)).\n */\nlet NavigatorHintComponent = class NavigatorHintComponent extends SettingsComponent {\n constructor(configurationService) {\n super('hint', configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorHintComponent.ɵfac = function NavigatorHintComponent_Factory(t) { return new (t || NavigatorHintComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorHintComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorHintComponent, selectors: [[\"kendo-chart-navigator-hint\"]], inputs: { content: \"content\", format: \"format\", visible: \"visible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorHintComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], NavigatorHintComponent.prototype, \"content\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NavigatorHintComponent.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NavigatorHintComponent.prototype, \"visible\", void 0);\nNavigatorHintComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorHintComponent);\n\n/**\n * The configuration component of the navigator pane\n * ([see example]({% slug overview_stockchart_charts %}#toc-navigator)).\n */\nlet NavigatorPaneComponent = class NavigatorPaneComponent extends PaneComponentGenerated {\n constructor(configurationService) {\n super(configurationService, null);\n this.configurationService = configurationService;\n }\n};\nNavigatorPaneComponent.ɵfac = function NavigatorPaneComponent_Factory(t) { return new (t || NavigatorPaneComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorPaneComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorPaneComponent, selectors: [[\"kendo-chart-navigator-pane\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: PREFIX, useValue: 'navigator.pane' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorPaneComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorPaneComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorPaneComponent);\n\n/**\n * The title configuration of the StockChart navigator pane.\n */\nlet NavigatorPaneTitleComponent = class NavigatorPaneTitleComponent extends PanesTitleComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorPaneTitleComponent.ɵfac = function NavigatorPaneTitleComponent_Factory(t) { return new (t || NavigatorPaneTitleComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorPaneTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorPaneTitleComponent, selectors: [[\"kendo-chart-navigator-pane-title\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorPaneTitleComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorPaneTitleComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorPaneTitleComponent);\n\n/**\n * Specifies the initially selected range.\n * If no range is specified, the full range of values is rendered.\n */\nlet NavigatorSelectComponent = class NavigatorSelectComponent extends SettingsComponent {\n constructor(configurationService) {\n super('select', configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSelectComponent.ɵfac = function NavigatorSelectComponent_Factory(t) { return new (t || NavigatorSelectComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSelectComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSelectComponent, selectors: [[\"kendo-chart-navigator-select\"]], inputs: { from: \"from\", to: \"to\", mousewheel: \"mousewheel\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSelectComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Date)\n], NavigatorSelectComponent.prototype, \"from\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Date)\n], NavigatorSelectComponent.prototype, \"to\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], NavigatorSelectComponent.prototype, \"mousewheel\", void 0);\nNavigatorSelectComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSelectComponent);\n\n/**\n * The configuration component of a navigator series item\n * ([see example]({% slug navigator_stockchart_charts %})).\n */\nlet NavigatorSeriesItemComponent = class NavigatorSeriesItemComponent extends SeriesItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n};\nNavigatorSeriesItemComponent.ɵfac = function NavigatorSeriesItemComponent_Factory(t) { return new (t || NavigatorSeriesItemComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService)); };\nNavigatorSeriesItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesItemComponent, selectors: [[\"kendo-chart-navigator-series-item\"]], features: [ɵngcc0.ɵɵProvidersFeature([ConfigurationService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesItemComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService])\n], NavigatorSeriesItemComponent);\n\n/**\n * A collection of one or more navigator series items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [];\n *\n * constructor() {\n * for (let idx = 0; idx < 100; idx++) {\n * this.data.push({\n * date: new Date(2017, 0, idx),\n * value: Math.random() * 100\n * });\n * }\n * }\n * }\n *\n * ```\n */\nlet NavigatorSeriesComponent = class NavigatorSeriesComponent extends SeriesComponent {\n constructor(configurationService, collectionService, tooltipTemplateService) {\n super(configurationService, collectionService, tooltipTemplateService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.tooltipTemplateService = tooltipTemplateService;\n }\n readTooltipTemplates() {\n }\n};\nNavigatorSeriesComponent.ɵfac = function NavigatorSeriesComponent_Factory(t) { return new (t || NavigatorSeriesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(CollectionService), ɵngcc0.ɵɵdirectiveInject(TooltipTemplateService)); };\nNavigatorSeriesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesComponent, selectors: [[\"kendo-chart-navigator-series\"]], contentQueries: function NavigatorSeriesComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, NavigatorSeriesItemComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([CollectionService]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n ContentChildren(NavigatorSeriesItemComponent),\n __metadata(\"design:type\", QueryList)\n], NavigatorSeriesComponent.prototype, \"children\", void 0);\nNavigatorSeriesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n CollectionService,\n TooltipTemplateService])\n], NavigatorSeriesComponent);\n\n/**\n * The error bars of the StockChart navigator series.\n */\nlet NavigatorSeriesErrorBarsComponent = class NavigatorSeriesErrorBarsComponent extends SeriesErrorBarsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesErrorBarsComponent.ɵfac = function NavigatorSeriesErrorBarsComponent_Factory(t) { return new (t || NavigatorSeriesErrorBarsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesErrorBarsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesErrorBarsComponent, selectors: [[\"kendo-chart-navigator-series-item-error-bars\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesErrorBarsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesErrorBarsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesErrorBarsComponent);\n\n/**\n * The extremes configuration of the StockChart navigator series. Applies to extreme outliers.\n */\nlet NavigatorSeriesExtremesComponent = class NavigatorSeriesExtremesComponent extends SeriesExtremesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesExtremesComponent.ɵfac = function NavigatorSeriesExtremesComponent_Factory(t) { return new (t || NavigatorSeriesExtremesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesExtremesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesExtremesComponent, selectors: [[\"kendo-chart-navigator-series-item-extremes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesExtremesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesExtremesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesExtremesComponent);\n\n/**\n * The configuration options of the StockChart series highlight.\n */\nlet NavigatorSeriesHighlightComponent = class NavigatorSeriesHighlightComponent extends SeriesHighlightComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesHighlightComponent.ɵfac = function NavigatorSeriesHighlightComponent_Factory(t) { return new (t || NavigatorSeriesHighlightComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesHighlightComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesHighlightComponent, selectors: [[\"kendo-chart-navigator-series-item-highlight\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesHighlightComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesHighlightComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesHighlightComponent);\n\n/**\n * The label configuration of the StockChart navigator series.\n */\nlet NavigatorSeriesLabelsComponent = class NavigatorSeriesLabelsComponent extends SeriesLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nNavigatorSeriesLabelsComponent.ɵfac = function NavigatorSeriesLabelsComponent_Factory(t) { return new (t || NavigatorSeriesLabelsComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesLabelsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesLabelsComponent, selectors: [[\"kendo-chart-navigator-series-item-labels\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesLabelsComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesLabelsComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesLabelsComponent);\n\n/**\n * The `from` label configuration of the StockChart navigator series.\n */\nlet NavigatorSeriesLabelsFromComponent = class NavigatorSeriesLabelsFromComponent extends SeriesLabelsFromComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nNavigatorSeriesLabelsFromComponent.ɵfac = function NavigatorSeriesLabelsFromComponent_Factory(t) { return new (t || NavigatorSeriesLabelsFromComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesLabelsFromComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesLabelsFromComponent, selectors: [[\"kendo-chart-navigator-series-item-labels-from\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesLabelsFromComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesLabelsFromComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesLabelsFromComponent);\n\n/**\n * The `to` label configuration of the StockChart navigator series.\n */\nlet NavigatorSeriesLabelsToComponent = class NavigatorSeriesLabelsToComponent extends SeriesLabelsToComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n};\nNavigatorSeriesLabelsToComponent.ɵfac = function NavigatorSeriesLabelsToComponent_Factory(t) { return new (t || NavigatorSeriesLabelsToComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesLabelsToComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesLabelsToComponent, selectors: [[\"kendo-chart-navigator-series-item-labels-to\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesLabelsToComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesLabelsToComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesLabelsToComponent);\n\n/**\n * The marker configuration of the StockChart navigator series.\n */\nlet NavigatorSeriesMarkersComponent = class NavigatorSeriesMarkersComponent extends SeriesMarkersComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesMarkersComponent.ɵfac = function NavigatorSeriesMarkersComponent_Factory(t) { return new (t || NavigatorSeriesMarkersComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesMarkersComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesMarkersComponent, selectors: [[\"kendo-chart-navigator-series-item-markers\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesMarkersComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesMarkersComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesMarkersComponent);\n\n/**\n * The notes configuration of the StockChart navigator series.\n */\nlet NavigatorSeriesNotesComponent = class NavigatorSeriesNotesComponent extends SeriesNotesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesNotesComponent.ɵfac = function NavigatorSeriesNotesComponent_Factory(t) { return new (t || NavigatorSeriesNotesComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesNotesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesNotesComponent, selectors: [[\"kendo-chart-navigator-series-item-notes\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesNotesComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesNotesComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesNotesComponent);\n\n/**\n * The icon of the notes.\n */\nlet NavigatorSeriesNotesIconComponent = class NavigatorSeriesNotesIconComponent extends SeriesNotesIconComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesNotesIconComponent.ɵfac = function NavigatorSeriesNotesIconComponent_Factory(t) { return new (t || NavigatorSeriesNotesIconComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesNotesIconComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesNotesIconComponent, selectors: [[\"kendo-chart-navigator-series-item-notes-icon\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesNotesIconComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesNotesIconComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesNotesIconComponent);\n\n/**\n * The label of the notes.\n */\nlet NavigatorSeriesNotesLabelComponent = class NavigatorSeriesNotesLabelComponent extends SeriesNotesLabelComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesNotesLabelComponent.ɵfac = function NavigatorSeriesNotesLabelComponent_Factory(t) { return new (t || NavigatorSeriesNotesLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesNotesLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesNotesLabelComponent, selectors: [[\"kendo-chart-navigator-series-item-notes-label\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesNotesLabelComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesNotesLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesNotesLabelComponent);\n\n/**\n * The outliers configuration of the StockChart navigator series. Applies to mild outliers.\n */\nlet NavigatorSeriesOutliersComponent = class NavigatorSeriesOutliersComponent extends SeriesOutliersComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesOutliersComponent.ɵfac = function NavigatorSeriesOutliersComponent_Factory(t) { return new (t || NavigatorSeriesOutliersComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesOutliersComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesOutliersComponent, selectors: [[\"kendo-chart-navigator-series-item-outliers\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesOutliersComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesOutliersComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesOutliersComponent);\n\n/**\n * The tooltip configuration of the StockChart navigator series.\n * The StockChart navigator series tooltip is displayed when the `navigator.series.tooltip.visible` option is set to `true`.\n */\nlet NavigatorSeriesTooltipComponent = class NavigatorSeriesTooltipComponent extends SeriesTooltipComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n};\nNavigatorSeriesTooltipComponent.ɵfac = function NavigatorSeriesTooltipComponent_Factory(t) { return new (t || NavigatorSeriesTooltipComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService)); };\nNavigatorSeriesTooltipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NavigatorSeriesTooltipComponent, selectors: [[\"kendo-chart-navigator-series-item-tooltip\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NavigatorSeriesTooltipComponent_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nNavigatorSeriesTooltipComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService])\n], NavigatorSeriesTooltipComponent);\n\n/**\n * @hidden\n */\nconst STOCK_CHART_DIRECTIVES = [\n StockChartComponent,\n NavigatorComponent,\n NavigatorCategoryAxisComponent,\n NavigatorCategoryAxisCrosshairComponent,\n NavigatorCategoryAxisCrosshairTooltipComponent,\n NavigatorCategoryAxisLabelsComponent,\n NavigatorCategoryAxisNotesComponent,\n NavigatorCategoryAxisNotesIconComponent,\n NavigatorCategoryAxisNotesLabelComponent,\n NavigatorCategoryAxisSelectComponent,\n NavigatorCategoryAxisTitleComponent,\n NavigatorHintComponent,\n NavigatorPaneComponent,\n NavigatorPaneTitleComponent,\n NavigatorSelectComponent,\n NavigatorSeriesComponent,\n NavigatorSeriesItemComponent,\n NavigatorSeriesErrorBarsComponent,\n NavigatorSeriesExtremesComponent,\n NavigatorSeriesHighlightComponent,\n NavigatorSeriesLabelsComponent,\n NavigatorSeriesLabelsFromComponent,\n NavigatorSeriesLabelsToComponent,\n NavigatorSeriesMarkersComponent,\n NavigatorSeriesNotesComponent,\n NavigatorSeriesNotesIconComponent,\n NavigatorSeriesNotesLabelComponent,\n NavigatorSeriesOutliersComponent,\n NavigatorSeriesTooltipComponent\n];\n\n/* tslint:disable:no-access-missing-member */\n/**\n * The root Chart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [\n * 936, 968, 1025, 999, 998, 1014, 1017, 1010, 1010, 1007,\n * 1004, 988, 990, 988, 987, 995, 946, 954, 991, 984,\n * 974, 956, 986, 936, 955, 1021, 1013, 1005, 958, 953,\n * 952, 940, 937, 980, 966, 965, 928, 916, 910, 980\n * ];\n * }\n *\n * ```\n */\nlet SparklineComponent = class SparklineComponent extends ChartComponent {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n super(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer);\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * @hidden\n */\n this.tooltipWrapperClass = 'k-sparkline-tooltip-wrapper';\n /**\n * @hidden\n */\n this.tooltipContentClasses = {\n 'k-sparkline-tooltip': true\n };\n this.hostClasses = ['k-sparkline', 'k-widget'];\n validatePackage(packageMetadata);\n }\n createInstance(element, observer) {\n this.instance = new Sparkline(element, Sparkline.normalizeOptions(this.options), this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n updateOptions() {\n this.instance.setOptions(Sparkline.normalizeOptions(this.options));\n }\n};\nSparklineComponent.ɵfac = function SparklineComponent_Factory(t) { return new (t || SparklineComponent)(ɵngcc0.ɵɵdirectiveInject(ConfigurationService), ɵngcc0.ɵɵdirectiveInject(ThemeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(InstanceEventService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nSparklineComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SparklineComponent, selectors: [[\"kendo-sparkline\"]], inputs: { type: \"type\", data: \"data\" }, exportAs: [\"kendoSparkline\"], features: [ɵngcc0.ɵɵProvidersFeature([\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 5, vars: 5, consts: [[1, \"k-chart-surface\"], [\"surface\", \"\"], [3, \"popupSettings\"], [3, \"animate\", \"wrapperClass\", \"classNames\", \"popupSettings\", \"leave\"], [3, \"resize\"]], template: function SparklineComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 0, 1)(2, \"kendo-chart-crosshair-tooltips-container\", 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-chart-tooltip-popup\", 3);\n ɵngcc0.ɵɵlistener(\"leave\", function SparklineComponent_Template_kendo_chart_tooltip_popup_leave_3_listener($event) { return ctx.tooltipMouseleave($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-resize-sensor\", 4);\n ɵngcc0.ɵɵlistener(\"resize\", function SparklineComponent_Template_kendo_resize_sensor_resize_4_listener($event) { return ctx.onResize($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"popupSettings\", ctx.popupSettings);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"animate\", false)(\"wrapperClass\", ctx.tooltipWrapperClass)(\"classNames\", ctx.tooltipContentClasses)(\"popupSettings\", ctx.popupSettings);\n } }, directives: [CrosshairTooltipsContainerComponent, TooltipPopupComponent, ɵngcc5.ResizeSensorComponent], encapsulation: 2, changeDetection: 0 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SparklineComponent.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], SparklineComponent.prototype, \"data\", void 0);\nSparklineComponent = __decorate([ __metadata(\"design:paramtypes\", [ConfigurationService,\n ThemeService,\n ElementRef,\n IntlService,\n LocalizationService,\n NgZone,\n InstanceEventService,\n ChangeDetectorRef,\n Renderer2])\n], SparklineComponent);\n\n/**\n * @hidden\n */\nconst SPARKLINE_DIRECTIVES = [\n SparklineComponent\n];\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the Chart component and directives.\n *\n * Imports the ChartModule into your application\n * [root module]({{ site.data.url.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Chart component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { ChartModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, ChartModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet ChartModule = class ChartModule {\n};\nChartModule.ɵfac = function ChartModule_Factory(t) { return new (t || ChartModule)(); };\nChartModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ChartModule });\nChartModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [\n ThemeService\n ], imports: [[CommonModule, PopupModule, ResizeSensorModule]] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the StockChart component and directives.\n *\n * Imports the StockChartModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the StockChart component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { StockChartModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, StockChartModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet StockChartModule = class StockChartModule {\n};\nStockChartModule.ɵfac = function StockChartModule_Factory(t) { return new (t || StockChartModule)(); };\nStockChartModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: StockChartModule });\nStockChartModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[ChartModule, CommonModule, PopupModule, ResizeSensorModule], ChartModule] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the Sparkline component and directives.\n *\n * Imports the SparklineModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Sparkline component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { SparklineModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, SparklineModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet SparklineModule = class SparklineModule {\n};\nSparklineModule.ɵfac = function SparklineModule_Factory(t) { return new (t || SparklineModule)(); };\nSparklineModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SparklineModule });\nSparklineModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[ChartModule, CommonModule, PopupModule, ResizeSensorModule], ChartModule] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes all Chart components and directives.\n *\n * Imports the ChartsModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Charts components.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { ChartsModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, ChartsModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet ChartsModule = class ChartsModule {\n};\nChartsModule.ɵfac = function ChartsModule_Factory(t) { return new (t || ChartsModule)(); };\nChartsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ChartsModule });\nChartsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [ChartModule, SparklineModule, StockChartModule] });\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ConfigurationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DonutCenterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoChartDonutCenterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CollectionService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n\n\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { seriesTooltipTemplate: [{\n type: ContentChild,\n args: [TemplateRef, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-series-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, { seriesTooltip: [{\n type: ContentChild,\n args: [SeriesTooltipComponent, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ThemeService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TooltipTemplateService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesTooltipTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoChartSeriesTooltipTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedTooltipTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoChartSharedTooltipTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TooltipPopupComponent, [{\n type: Component,\n args: [{\n providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: ɵ0$2\n }],\n selector: 'kendo-chart-tooltip-popup',\n template: `\n \n
\n \n \n \n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n
{{ categoryText }}
\n {{ point.series.name }}\n  \n \n \n \n
\n
\n `\n }]\n }], function () { return [{ type: ɵngcc1.PopupService }, { type: TooltipTemplateService }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { animate: [{\n type: Input\n }], wrapperClass: [{\n type: Input\n }], leave: [{\n type: Output\n }], defaultSeriesTooltipTemplate: [{\n type: ViewChild,\n args: [SeriesTooltipTemplateDirective, { static: false }]\n }], defaultSharedTooltipTemplate: [{\n type: ViewChild,\n args: [SharedTooltipTemplateDirective, { static: false }]\n }], templateRef: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], classNames: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CrosshairTooltipComponent, [{\n type: Component,\n args: [{\n providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: ɵ0$3\n }],\n selector: 'kendo-chart-crosshair-tooltip',\n template: `\n \n
\n {{ value }}\n
\n
\n `\n }]\n }], function () { return [{ type: ɵngcc1.PopupService }, { type: ɵngcc2.LocalizationService }]; }, { templateRef: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], key: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CrosshairTooltipsContainerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chart-crosshair-tooltips-container',\n template: `\n \n \n `\n }]\n }], function () { return []; }, { popupSettings: [{\n type: Input\n }], crossahirTooltipComponents: [{\n type: ViewChildren,\n args: [CrosshairTooltipComponent]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChartComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoChart',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-chart',\n template: `\n
\n \n \n \n \n \n
\n \n
\n `\n }]\n }], function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc4.IntlService }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }, { type: InstanceEventService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { legendItemClick: [{\n type: Output\n }], resizeRateLimit: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], seriesComponents: [{\n type: ContentChildren,\n args: [SeriesItemComponent, { descendants: true }]\n }], donutCenterTemplate: [{\n type: ContentChild,\n args: [DonutCenterTemplateDirective, { static: false }]\n }], tooltipInstance: [{\n type: ViewChild,\n args: [TooltipPopupComponent, { static: true }]\n }], crossahirTooltips: [{\n type: ViewChild,\n args: [CrosshairTooltipsContainerComponent, { static: true }]\n }], surfaceElement: [{\n type: ViewChild,\n args: ['surface', { static: true }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AxisDefaultsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AxisDefaultsCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AxisDefaultsCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AxisDefaultsLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AxisDefaultsTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-category-axis-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: ɵngcc4.IntlService }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, { rangeLabels: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-category-axis',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], culture: [{\n type: Input\n }], dateFormats: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisRangeLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-range-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisSelectComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-select',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CategoryAxisTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChartAreaComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-area',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LegendComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LegendInactiveItemsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend-inactive-items',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LegendItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PaneComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-pane, kendo-chart-panes-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PaneDefaultsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-defaults',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { background: [{\n type: Input\n }], border: [{\n type: Input\n }], clip: [{\n type: Input\n }], height: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], title: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PaneDefaultsTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-defaults-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], position: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PanesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-panes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PanesTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PlotAreaComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-plot-area',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-series',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: TooltipTemplateService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsLabelsFromComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels-from',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsLabelsToComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels-to',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesDefaultsTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesErrorBarsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-error-bars',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesExtremesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-extremes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesHighlightComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-highlight',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesLabelsFromComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels-from',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesLabelsToComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels-to',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesMarkersComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-markers',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SeriesOutliersComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-outliers',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TooltipComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chart-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: TooltipTemplateService }]; }, { seriesTooltipTemplate: [{\n type: ContentChild,\n args: [SeriesTooltipTemplateDirective, { static: false }]\n }], sharedTooltipTemplate: [{\n type: ContentChild,\n args: [SharedTooltipTemplateDirective, { static: false }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-value-axis-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-value-axis',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueAxisTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-x-axis-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: ɵngcc4.IntlService }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, { categories: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-x-axis',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(XAxisTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-y-axis-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, { categories: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-y-axis',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(YAxisTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ZoomableComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-zoomable',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RootConfigurationService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(StockChartComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoStockChart',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n { provide: RootConfigurationService, useExisting: ConfigurationService },\n StockInstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-stockchart',\n template: `\n
\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc4.IntlService }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }, { type: StockInstanceEventService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { navigatorFilter: [{\n type: Output\n }], navigator: [{\n type: Input\n }], pannable: [{\n type: Input\n }], zoomable: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PrefixConfigurationService, [{\n type: Injectable\n }], function () { return [{ type: RootConfigurationService, decorators: [{\n type: Inject,\n args: [RootConfigurationService]\n }] }, { type: String, decorators: [{\n type: Inject,\n args: [PREFIX]\n }] }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: PREFIX, useValue: 'navigator' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }],\n selector: 'kendo-chart-navigator',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { visible: [{\n type: Input\n }], categoryAxis: [{\n type: Input\n }], hint: [{\n type: Input\n }], pane: [{\n type: Input\n }], select: [{\n type: Input\n }], series: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: PREFIX,\n useValue: 'navigator.categoryAxis'\n }, {\n provide: ConfigurationService,\n useClass: PrefixConfigurationService\n }],\n selector: 'kendo-chart-navigator-category-axis',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: ɵngcc4.IntlService }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisCrosshairComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-crosshair',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisCrosshairTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-crosshair-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisSelectComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-select',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorCategoryAxisTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorHintComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-hint',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { content: [{\n type: Input\n }], format: [{\n type: Input\n }], visible: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorPaneComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: PREFIX, useValue: 'navigator.pane' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }],\n selector: 'kendo-chart-navigator-pane',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorPaneTitleComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-pane-title',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSelectComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-select',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, { from: [{\n type: Input\n }], to: [{\n type: Input\n }], mousewheel: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesItemComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-navigator-series-item',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-navigator-series',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: TooltipTemplateService }]; }, { children: [{\n type: ContentChildren,\n args: [NavigatorSeriesItemComponent]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesErrorBarsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-error-bars',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesExtremesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-extremes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesHighlightComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-highlight',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesLabelsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesLabelsFromComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels-from',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesLabelsToComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels-to',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesMarkersComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-markers',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesNotesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesNotesIconComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes-icon',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesNotesLabelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes-label',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesOutliersComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-outliers',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigatorSeriesTooltipComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-tooltip',\n template: ''\n }]\n }], function () { return [{ type: ConfigurationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SparklineComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoSparkline',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-sparkline',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc4.IntlService }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }, { type: InstanceEventService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { type: [{\n type: Input\n }], data: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChartModule, [{\n type: NgModule,\n args: [{\n declarations: [CHART_DIRECTIVES],\n exports: [CHART_DIRECTIVES],\n imports: [CommonModule, PopupModule, ResizeSensorModule],\n providers: [\n ThemeService\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ChartModule, { declarations: function () { return [ChartComponent, TooltipPopupComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, CrosshairTooltipsContainerComponent, CrosshairTooltipComponent, DonutCenterTemplateDirective, AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisRangeLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, LegendComponent, LegendInactiveItemsComponent, LegendItemComponent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PanesComponent, PanesTitleComponent, PlotAreaComponent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, TitleComponent, TooltipComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomableComponent]; }, imports: function () { return [CommonModule, PopupModule, ResizeSensorModule]; }, exports: function () { return [ChartComponent, TooltipPopupComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, CrosshairTooltipsContainerComponent, CrosshairTooltipComponent, DonutCenterTemplateDirective, AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisRangeLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, LegendComponent, LegendInactiveItemsComponent, LegendItemComponent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PanesComponent, PanesTitleComponent, PlotAreaComponent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, TitleComponent, TooltipComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomableComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(StockChartModule, [{\n type: NgModule,\n args: [{\n declarations: [STOCK_CHART_DIRECTIVES],\n exports: [STOCK_CHART_DIRECTIVES, ChartModule],\n imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(StockChartModule, { declarations: function () { return [StockChartComponent, NavigatorComponent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesComponent, NavigatorSeriesItemComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent]; }, imports: function () { return [ChartModule, CommonModule, PopupModule, ResizeSensorModule]; }, exports: function () { return [StockChartComponent, NavigatorComponent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesComponent, NavigatorSeriesItemComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent, ChartModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SparklineModule, [{\n type: NgModule,\n args: [{\n declarations: [SPARKLINE_DIRECTIVES],\n exports: [SPARKLINE_DIRECTIVES, ChartModule],\n imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SparklineModule, { declarations: function () { return [SparklineComponent]; }, imports: function () { return [ChartModule, CommonModule, PopupModule, ResizeSensorModule]; }, exports: function () { return [SparklineComponent, ChartModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChartsModule, [{\n type: NgModule,\n args: [{\n exports: [ChartModule, SparklineModule, StockChartModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ChartsModule, { exports: [ChartModule, SparklineModule, StockChartModule] }); })();\n\n\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ChartComponentGenerated, AxisDefaultsComponentGenerated, AxisDefaultsCrosshairComponentGenerated, AxisDefaultsCrosshairTooltipComponentGenerated, AxisDefaultsLabelsComponentGenerated, AxisDefaultsTitleComponentGenerated, CategoryAxisItemComponentGenerated, CategoryAxisCrosshairComponentGenerated, CategoryAxisCrosshairTooltipComponentGenerated, CategoryAxisNotesComponentGenerated, CategoryAxisNotesIconComponentGenerated, CategoryAxisNotesLabelComponentGenerated, CategoryAxisSelectComponentGenerated, CategoryAxisTitleComponentGenerated, CategoryAxisComponentGenerated, ChartAreaComponentGenerated, DonutCenterTemplateDirective, LegendComponentGenerated, LegendInactiveItemsComponentGenerated, LegendItemComponentGenerated, PaneComponentGenerated, PanesTitleComponentGenerated, PanesComponentGenerated, PlotAreaComponentGenerated, SeriesDefaultsComponentGenerated, SeriesDefaultsLabelsComponentGenerated, SeriesDefaultsLabelsFromComponentGenerated, SeriesDefaultsLabelsToComponentGenerated, SeriesDefaultsNotesComponentGenerated, SeriesDefaultsNotesIconComponentGenerated, SeriesDefaultsNotesLabelComponentGenerated, SeriesDefaultsTooltipComponentGenerated, SeriesItemComponentGenerated, SeriesErrorBarsComponentGenerated, SeriesExtremesComponentGenerated, SeriesHighlightComponentGenerated, SeriesLabelsComponentGenerated, SeriesLabelsFromComponentGenerated, SeriesLabelsToComponentGenerated, SeriesMarkersComponentGenerated, SeriesNotesComponentGenerated, SeriesNotesIconComponentGenerated, SeriesNotesLabelComponentGenerated, SeriesOutliersComponentGenerated, SeriesTooltipComponentGenerated, SeriesComponentGenerated, TitleComponentGenerated, TooltipComponentGenerated, BaseTooltip, bodyFactory, CrosshairTooltipComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, ValueAxisItemComponentGenerated, ValueAxisCrosshairComponentGenerated, ValueAxisCrosshairTooltipComponentGenerated, ValueAxisLabelsComponentGenerated, ValueAxisNotesComponentGenerated, ValueAxisNotesIconComponentGenerated, ValueAxisNotesLabelComponentGenerated, ValueAxisTitleComponentGenerated, ValueAxisComponentGenerated, XAxisItemComponentGenerated, XAxisCrosshairComponentGenerated, XAxisCrosshairTooltipComponentGenerated, XAxisLabelsComponentGenerated, XAxisNotesComponentGenerated, XAxisNotesIconComponentGenerated, XAxisNotesLabelComponentGenerated, XAxisTitleComponentGenerated, XAxisComponentGenerated, YAxisItemComponentGenerated, YAxisCrosshairComponentGenerated, YAxisCrosshairTooltipComponentGenerated, YAxisLabelsComponentGenerated, YAxisNotesComponentGenerated, YAxisNotesIconComponentGenerated, YAxisNotesLabelComponentGenerated, YAxisTitleComponentGenerated, YAxisComponentGenerated, ZoomableComponentGenerated, CollectionItemComponent, CollectionComponent, CollectionService, ConfigurationService, PREFIX, PrefixConfigurationService, RootConfigurationService, SettingsComponent, ThemeService, TooltipTemplateService, BaseEvent, InstanceEventService, LegendEvent, NoteEvent, PreventableEvent, SeriesEvent, StockInstanceEventService, NavigatorComponent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesItemComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent, NavigatorSeriesComponent, ChartModule, StockChartModule, SparklineModule, ChartsModule, TooltipPopupComponent, CrosshairTooltipsContainerComponent, ChartComponent, AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisRangeLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, LegendComponent, LegendInactiveItemsComponent, LegendItemComponent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PanesComponent, PanesTitleComponent, PlotAreaComponent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, TitleComponent, TooltipComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomableComponent, CHART_DIRECTIVES, AxisLabelClickEvent, DragEndEvent, DragEvent, DragStartEvent, LegendItemClickEvent, LegendItemHoverEvent, NoteClickEvent, NoteHoverEvent, PaneRenderEvent, PlotAreaClickEvent, PlotAreaHoverEvent, RenderEvent, SelectEndEvent, SelectEvent, SelectStartEvent, SeriesClickEvent, SeriesHoverEvent, ZoomEndEvent, ZoomEvent, ZoomStartEvent, WeekStartDay, NavigatorFilterEvent, StockChartComponent, STOCK_CHART_DIRECTIVES, SparklineComponent, SPARKLINE_DIRECTIVES };\n\n"]}