{"version":3,"file":"static/js/2884.45b47740.chunk.js","mappings":"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QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,GACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxC,EAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxC,IAAK,CAAE,QAAW,YAAa,MAAS,IACxCt0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","sources":["../node_modules/@progress/kendo-charts/dist/es/common/constants.js","../node_modules/@progress/kendo-charts/dist/es/common/is-array.js","../node_modules/@progress/kendo-charts/dist/es/common/add-class.js","../node_modules/@progress/kendo-charts/dist/es/common/remove-class.js","../node_modules/@progress/kendo-charts/dist/es/common/align-path-to-pixel.js","../node_modules/@progress/kendo-charts/dist/es/common/clockwise.js","../node_modules/@progress/kendo-charts/dist/es/common/is-number.js","../node_modules/@progress/kendo-charts/dist/es/common/is-string.js","../node_modules/@progress/kendo-charts/dist/es/common/convertable-to-number.js","../node_modules/@progress/kendo-charts/dist/es/common/cycleUp.js","../node_modules/@progress/kendo-charts/dist/es/common/cycleDown.js","../node_modules/@progress/kendo-charts/dist/es/common/cycleIndex.js","../node_modules/@progress/kendo-charts/dist/es/common/is-function.js","../node_modules/@progress/kendo-charts/dist/es/common/deep-extend.js","../node_modules/@progress/kendo-charts/dist/es/common/is-object.js","../node_modules/@progress/kendo-charts/dist/es/common/style-value.js","../node_modules/@progress/kendo-charts/dist/es/common/element-styles.js","../node_modules/@progress/kendo-charts/dist/es/common/get-spacing.js","../node_modules/@progress/kendo-charts/dist/es/services/template-service.js","../node_modules/@progress/kendo-charts/dist/es/common/get-template.js","../node_modules/@progress/kendo-charts/dist/es/common/get-aria-template.js","../node_modules/@progress/kendo-charts/dist/es/common/getter.js","../node_modules/@progress/kendo-charts/dist/es/common/grep.js","../node_modules/@progress/kendo-charts/dist/es/common/has-classes.js","../node_modules/@progress/kendo-charts/dist/es/common/hash-map.js","../node_modules/@progress/kendo-charts/dist/es/common/in-array.js","../node_modules/@progress/kendo-charts/dist/es/common/interpolate-value.js","../node_modules/@progress/kendo-charts/dist/es/common/instance-observer.js","../node_modules/@progress/kendo-charts/dist/es/common/map.js","../node_modules/@progress/kendo-charts/dist/es/common/mousewheel-delta.js","../node_modules/@progress/kendo-charts/dist/es/drawing-utils.js","../node_modules/@progress/kendo-charts/dist/es/common/font-loader.js","../node_modules/@progress/kendo-charts/dist/es/common/set-default-options.js","../node_modules/@progress/kendo-charts/dist/es/common/render-icon.js","../node_modules/@progress/kendo-charts/dist/es/common/is-plain-object.js","../node_modules/@progress/kendo-charts/dist/es/common/sparse-array-limits.js","../node_modules/@progress/kendo-charts/dist/es/common/find.js","../node_modules/@progress/kendo-charts/dist/es/common/element-scale.js","../node_modules/@progress/kendo-charts/dist/es/common/auto-text-color.js","../node_modules/@progress/kendo-charts/dist/es/common/create-hash-set.js","../node_modules/@progress/kendo-charts/dist/es/common/default-error-handler.js","../node_modules/@progress/kendo-charts/dist/es/common/keys.js","../node_modules/@progress/kendo-charts/dist/es/common/has-own-property.js","../node_modules/@progress/kendo-charts/dist/es/common/matrix.js","../node_modules/@progress/kendo-charts/dist/es/common/event-map.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/guid.js","../node_modules/@progress/kendo-charts/dist/es/common/event-utils.js","../node_modules/@progress/kendo-charts/dist/es/common/get-supported-features.js","../node_modules/@progress/kendo-charts/dist/es/common/noop.js","../node_modules/@progress/kendo-charts/dist/es/common/now.js","../node_modules/@progress/kendo-charts/dist/es/common/observable.js","../node_modules/@progress/kendo-charts/dist/es/common/user-events.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/auto-major-unit.js","../node_modules/@progress/kendo-charts/dist/es/core/point.js","../node_modules/@progress/kendo-charts/dist/es/core/box.js","../node_modules/@progress/kendo-charts/dist/es/core/ring.js","../node_modules/@progress/kendo-charts/dist/es/core/sector.js","../node_modules/@progress/kendo-charts/dist/es/core/shape-builder.js","../node_modules/@progress/kendo-charts/dist/es/core/chart-element.js","../node_modules/@progress/kendo-charts/dist/es/core/pattern.js","../node_modules/@progress/kendo-charts/dist/es/core/box-element.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/add-accessibility-attributes-to-visual.js","../node_modules/@progress/kendo-charts/dist/es/core/shape-element.js","../node_modules/@progress/kendo-charts/dist/es/core/gradients.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/box-diff.js","../node_modules/@progress/kendo-charts/dist/es/core/root-element.js","../node_modules/@progress/kendo-charts/dist/es/core/float-element.js","../node_modules/@progress/kendo-charts/dist/es/core/text.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/rect-to-box.js","../node_modules/@progress/kendo-charts/dist/es/core/text-box.js","../node_modules/@progress/kendo-charts/dist/es/core/title.js","../node_modules/@progress/kendo-charts/dist/es/core/axis-label.js","../node_modules/@progress/kendo-charts/dist/es/core/note.js","../node_modules/@progress/kendo-charts/dist/es/services/intl-service.js","../node_modules/@progress/kendo-charts/dist/es/services/format-service.js","../node_modules/@progress/kendo-charts/dist/es/services/chart-service.js","../node_modules/@progress/kendo-charts/dist/es/services/dom-events-builder.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/create-axis-tick.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/create-axis-grid-line.js","../node_modules/@progress/kendo-charts/dist/es/core/axis.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/constants.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/absolute-date-diff.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/add-ticks.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/to-date.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/add-duration.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/start-of-week.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/floor-date.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/ceil-date.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/date-comparer.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/date-diff.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/to-time.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/date-equals.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/date-index.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/duration.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/parse-date.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/parse-dates.js","../node_modules/@progress/kendo-charts/dist/es/date-utils/first-day.js","../node_modules/@progress/kendo-charts/dist/es/core/category-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/constants.js","../node_modules/@progress/kendo-charts/dist/es/core/date-category-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/floor.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/ceil.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/limit-coordinate.js","../node_modules/@progress/kendo-charts/dist/es/core/numeric-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/auto-axis-min.js","../node_modules/@progress/kendo-charts/dist/es/core/utils/auto-axis-max.js","../node_modules/@progress/kendo-charts/dist/es/core/date-value-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/logarithmic-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/mixins/grid-lines-mixin.js","../node_modules/@progress/kendo-charts/dist/es/core/radar-category-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/polar-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/mixins/radar-numeric-axis-mixin.js","../node_modules/@progress/kendo-charts/dist/es/core/radar-numeric-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/radar-logarithmic-axis.js","../node_modules/@progress/kendo-charts/dist/es/core/curve-processor.js","../node_modules/@progress/kendo-charts/dist/es/chart/api-elements/chart-axis.js","../node_modules/@progress/kendo-charts/dist/es/chart/api-elements/find-axis-by-name.js","../node_modules/@progress/kendo-charts/dist/es/chart/api-elements/chart-pane.js","../node_modules/@progress/kendo-charts/dist/es/chart/api-elements/chart-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/count-numbers.js","../node_modules/@progress/kendo-charts/dist/es/chart/aggregates/aggregates.js","../node_modules/@progress/kendo-charts/dist/es/chart/series-binder.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/get-field.js","../node_modules/@progress/kendo-charts/dist/es/chart/error-bars/error-range-calculator.js","../node_modules/@progress/kendo-charts/dist/es/chart/constants.js","../node_modules/@progress/kendo-charts/dist/es/chart/error-bars/error-bar-base.js","../node_modules/@progress/kendo-charts/dist/es/chart/error-bars/categorical-error-bar.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/any-has-z-index.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/append-if-not-null.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/are-numbers.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/segment-visible.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/bind-segments.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/categories-count.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/equals-ignore-case.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/eval-options.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/filter-series-by-type.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/parse-date-category.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/has-gradient-overlay.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/has-value.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/is-date-axis.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/single-item-or-array.js","../node_modules/@progress/kendo-charts/dist/es/chart/utils/create-out-of-range-points.js","../node_modules/@progress/kendo-charts/dist/es/chart/categorical-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/point-events-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/note-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/line-point.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/line-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/step-line-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/step-line-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/spline-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/line-chart-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/animations/clip-animation.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/clip-animation-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/line-chart/line-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/area-chart/area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/area-chart/step-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/area-chart/spline-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/area-chart/area-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/axis-group-range-tracker.js","../node_modules/@progress/kendo-charts/dist/es/chart/bar-chart/bar-label.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/accessibility-attributes-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/bar-chart/bar.js","../node_modules/@progress/kendo-charts/dist/es/chart/layout/utils.js","../node_modules/@progress/kendo-charts/dist/es/chart/layout/cluster-layout.js","../node_modules/@progress/kendo-charts/dist/es/chart/layout/stack-wrap.js","../node_modules/@progress/kendo-charts/dist/es/chart/bar-chart/bar-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/candlestick-chart/candlestick.js","../node_modules/@progress/kendo-charts/dist/es/chart/candlestick-chart/candlestick-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/box-plot-chart/box-plot.js","../node_modules/@progress/kendo-charts/dist/es/chart/box-plot-chart/vertical-box-plot.js","../node_modules/@progress/kendo-charts/dist/es/chart/box-plot-chart/box-plot-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/error-bars/scatter-error-bar.js","../node_modules/@progress/kendo-charts/dist/es/chart/scatter-charts/scatter-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/bubble-chart/bubble.js","../node_modules/@progress/kendo-charts/dist/es/chart/bubble-chart/bubble-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/bullet-chart/target.js","../node_modules/@progress/kendo-charts/dist/es/chart/bullet-chart/bullet.js","../node_modules/@progress/kendo-charts/dist/es/chart/bullet-chart/bullet-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/tooltip/base-tooltip.js","../node_modules/@progress/kendo-charts/dist/es/chart/crosshair/crosshair-tooltip.js","../node_modules/@progress/kendo-charts/dist/es/chart/crosshair/crosshair.js","../node_modules/@progress/kendo-charts/dist/es/chart/chart-container.js","../node_modules/@progress/kendo-charts/dist/es/chart/pane.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/plotarea-base.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/plotarea-events-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/aggregates/series-aggregator.js","../node_modules/@progress/kendo-charts/dist/es/chart/aggregates/default-aggregates.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-bar-chart/range-bar.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-bar-chart/range-bar-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/range-line-point.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/range-area-point.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/range-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/spline-range-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/step-range-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/range-area-chart/range-area-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/ohlc-chart/ohlc-point.js","../node_modules/@progress/kendo-charts/dist/es/chart/ohlc-chart/ohlc-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/waterfall-chart/waterfall-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/waterfall-chart/waterfall-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/trendline-factory.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/calculate-slope.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/check-all-positive.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/get-trendline-data.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/exponential-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/linear-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/logarithmic-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/calculate-moving-average.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/moving-average.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/calculate-polynomial.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/polynomial-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/power-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/trendline-registry.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/categorical-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/highlight.js","../node_modules/@progress/kendo-charts/dist/es/chart/pan-and-zoom/accept-key.js","../node_modules/@progress/kendo-charts/dist/es/chart/pan-and-zoom/to-chart-axis-ranges.js","../node_modules/@progress/kendo-charts/dist/es/chart/pan-and-zoom/pannable.js","../node_modules/@progress/kendo-charts/dist/es/chart/pan-and-zoom/zoom-selection.js","../node_modules/@progress/kendo-charts/dist/es/chart/pan-and-zoom/mousewheel-zoom.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-layout.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-item-marker.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-item-line-area.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-item-line.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-item-square.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend-item.js","../node_modules/@progress/kendo-charts/dist/es/chart/legend/legend.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/plotarea-factory.js","../node_modules/@progress/kendo-charts/dist/es/chart/selection.js","../node_modules/@progress/kendo-charts/dist/es/chart/tooltip/tooltip.js","../node_modules/@progress/kendo-charts/dist/es/chart/tooltip/shared-tooltip.js","../node_modules/@progress/kendo-charts/dist/es/chart/animations/bar-chart-animation.js","../node_modules/@progress/kendo-charts/dist/es/chart/animations/bubble-animation.js","../node_modules/@progress/kendo-charts/dist/es/chart/animations/fade-in-animation.js","../node_modules/@progress/kendo-charts/dist/es/chart/animations/pie-animation.js","../node_modules/@progress/kendo-charts/dist/es/chart/scatter-charts/scatter-line-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/get-scatter-trendline-data.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-exponential-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-value-getter.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-linear-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/x-value-limits.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-logarithmic-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-moving-average.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-polynomial-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-power-trendline.js","../node_modules/@progress/kendo-charts/dist/es/chart/trendlines/scatter-trendline-registry.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/xy-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/pie-chart/pie-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/mixins/pie-chart-mixin.js","../node_modules/@progress/kendo-charts/dist/es/chart/pie-chart/pie-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/pie-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/donut-chart/donut-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/donut-chart/donut-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/donut-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/polar-plotarea-base.js","../node_modules/@progress/kendo-charts/dist/es/chart/polar-scatter-chart/polar-scatter-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/polar-line-chart/polar-line-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/polar-area-chart/spline-polar-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/polar-area-chart/polar-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/polar-area-chart/polar-area-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/polar-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-line-chart/radar-line-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-area-chart/spline-radar-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-area-chart/radar-area-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-area-chart/radar-area-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-bar-chart/radar-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/layout/radar-cluster-layout.js","../node_modules/@progress/kendo-charts/dist/es/chart/layout/radar-stack-layout.js","../node_modules/@progress/kendo-charts/dist/es/chart/radar-bar-chart/radar-bar-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/radar-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/funnel-chart/funnel-segment.js","../node_modules/@progress/kendo-charts/dist/es/chart/funnel-chart/funnel-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/funnel-chart/pyramid-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/funnel-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/heatmap-chart/color-scale.js","../node_modules/@progress/kendo-charts/dist/es/chart/heatmap-chart/heatmap-point.js","../node_modules/@progress/kendo-charts/dist/es/chart/heatmap-chart/heatmap-chart.js","../node_modules/@progress/kendo-charts/dist/es/chart/plotarea/heatmap-plotarea.js","../node_modules/@progress/kendo-charts/dist/es/chart/register-charts.js","../node_modules/@progress/kendo-charts/dist/es/chart/chart.js","../node_modules/@progress/kendo-charts/dist/es/sparkline/shared-tooltip.js","../node_modules/@progress/kendo-charts/dist/es/sparkline/sparkline.js","../node_modules/@progress/kendo-charts/dist/es/stock/fade-out-animation.js","../node_modules/@progress/kendo-charts/dist/es/stock/navigator-hint.js","../node_modules/@progress/kendo-charts/dist/es/stock/constants.js","../node_modules/@progress/kendo-charts/dist/es/stock/navigator.js","../node_modules/@progress/kendo-charts/dist/es/stock/stock-chart.js","../node_modules/@progress/kendo-charts/dist/es/gauges/constants.js","../node_modules/@progress/kendo-charts/dist/es/gauges/utils/pad.js","../node_modules/@progress/kendo-charts/dist/es/gauges/utils/build-label-element.js","../node_modules/@progress/kendo-charts/dist/es/gauges/utils/get-range.js","../node_modules/@progress/kendo-charts/dist/es/gauges/utils/unpad.js","../node_modules/@progress/kendo-charts/dist/es/gauges/gauge.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/linear-scale.js","../node_modules/@progress/kendo-charts/dist/es/gauges/pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/linear-pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/arrow-linear-pointer-animation.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/arrow-linear-pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/bar-linear-pointer-animation.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/bar-linear-pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/linear/linear-gauge.js","../node_modules/@progress/kendo-charts/dist/es/gauges/radial/radial-scale.js","../node_modules/@progress/kendo-charts/dist/es/gauges/radial/radial-pointer-animation.js","../node_modules/@progress/kendo-charts/dist/es/gauges/radial/radial-pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/radial/radial-gauge.js","../node_modules/@progress/kendo-charts/dist/es/gauges/arc/arc-scale.js","../node_modules/@progress/kendo-charts/dist/es/gauges/arc/range-pointer-animation.js","../node_modules/@progress/kendo-charts/dist/es/gauges/arc/range-pointer.js","../node_modules/@progress/kendo-charts/dist/es/gauges/arc/arc-gauge.js","../node_modules/@progress/kendo-charts/dist/es/gauges/circular/circular-gauge.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/encoding.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code11.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code39.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code39-extended.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code93.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code93-extended.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/postnet.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/code128.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/msi.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/ean13.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/ean8.js","../node_modules/@progress/kendo-charts/dist/es/barcode/encodings/main.js","../node_modules/@progress/kendo-charts/dist/es/barcode/surface-size.js","../node_modules/@progress/kendo-charts/dist/es/barcode/barcode.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/utils.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/free-cell-visitor.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/encoding-result.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/encoders/iso-encoder.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/encoding.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/data-modes/qr-data-mode.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/data-modes/numeric-data-mode.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/data-modes/alpha-numeric-data-mode.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/data-modes/byte-data-mode.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/data-modes/data-mode-instances.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/encoders/utf8-encoder.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/encodings/version-codewords.js","../node_modules/@progress/kendo-charts/dist/es/qrcode/qrcode.js","../node_modules/@progress/kendo-charts/dist/es/map/datums.js","../node_modules/@progress/kendo-charts/dist/es/map/location.js","../node_modules/@progress/kendo-charts/dist/es/map/crs.js","../node_modules/@progress/kendo-charts/dist/es/map/utils.js","../node_modules/@progress/kendo-charts/dist/es/map/attribution.js","../node_modules/@progress/kendo-charts/dist/es/map/navigator.js","../node_modules/@progress/kendo-charts/dist/es/map/zoom.js","../node_modules/@progress/kendo-charts/dist/es/map/extent.js","../node_modules/@progress/kendo-charts/dist/es/map/constants.js","../node_modules/@progress/kendo-charts/dist/es/map/tooltip/tooltip.js","../node_modules/@progress/kendo-charts/dist/es/map/layers/layer.js","../node_modules/@progress/kendo-charts/dist/es/map/layers/tile.js","../node_modules/@progress/kendo-charts/dist/es/map/scroller/draggable.js","../node_modules/@progress/kendo-charts/dist/es/map/layers/shape.js","../node_modules/@progress/kendo-charts/dist/es/map/layers/bubble.js","../node_modules/@progress/kendo-charts/dist/es/map/layers/marker.js","../node_modules/@progress/kendo-charts/dist/es/map/scroller/fx.js","../node_modules/@progress/kendo-charts/dist/es/map/scroller/scroller.js","../node_modules/@progress/kendo-charts/dist/es/services/map-service.js","../node_modules/@progress/kendo-charts/dist/es/map/map.js","../node_modules/@progress/kendo-charts/dist/es/sankey/calculation.js","../node_modules/@progress/kendo-charts/dist/es/sankey/element.js","../node_modules/@progress/kendo-charts/dist/es/sankey/node.js","../node_modules/@progress/kendo-charts/dist/es/sankey/link.js","../node_modules/@progress/kendo-charts/dist/es/sankey/label.js","../node_modules/@progress/kendo-charts/dist/es/sankey/title.js","../node_modules/@progress/kendo-charts/dist/es/sankey/legend.js","../node_modules/@progress/kendo-charts/dist/es/sankey/sankey.js","../node_modules/@progress/kendo-charts/dist/es/sankey/utils.js","../node_modules/@progress/kendo-charts/dist/es/chart-wizard/state.js","../node_modules/@progress/kendo-charts/dist/es/chart-wizard/messages.js","../node_modules/@progress/kendo-charts/dist/es/chart/theme/base-theme.js","../node_modules/@progress/kendo-charts/dist/es/chart-wizard.js","../node_modules/@progress/kendo-charts/dist/es/chart-wizard/get-wizard-data-from-data-rows.js","../node_modules/@progress/kendo-charts/dist/es/chart/theme/load-theme.js"],"sourcesContent":["export var ARC = \"arc\";\nexport var ARROW_UP = \"ArrowUp\";\nexport var ARROW_DOWN = \"ArrowDown\";\nexport var ARROW_LEFT = \"ArrowLeft\";\nexport var ARROW_RIGHT = \"ArrowRight\";\nexport var TAB = \"Tab\";\nexport var ARIA_ACTIVE_DESCENDANT = \"aria-activedescendant\";\nexport var AXIS_LABEL_CLICK = \"axisLabelClick\";\nexport var BLACK = \"#000\";\nexport var BOTTOM = \"bottom\";\nexport var CENTER = \"center\";\nexport var CIRCLE = \"circle\";\nexport var COORD_PRECISION = 3;\nexport var CROSS = \"cross\";\nexport var DATE = \"date\";\nexport var DEFAULT_FONT = \"12px sans-serif\";\nexport var DEFAULT_HEIGHT = 400;\nexport var DEFAULT_PRECISION = 10;\nexport var DEFAULT_WIDTH = 600;\nexport var END = \"end\";\nexport var ENTER = \"Enter\";\nexport var ESCAPE = \"Escape\";\nexport var FORMAT_REGEX = /\\{\\d+:?/;\nexport var HEIGHT = \"height\";\nexport var HIGHLIGHT_ZINDEX = 100;\nexport var INSIDE = \"inside\";\nexport var INHERIT = \"inherit\";\nexport var LEFT = \"left\";\nexport var MAX_VALUE = Number.MAX_VALUE;\nexport var MIN_VALUE = -Number.MAX_VALUE;\nexport var NONE = \"none\";\nexport var NOTE_CLICK = \"noteClick\";\nexport var NOTE_HOVER = \"noteHover\";\nexport var NOTE_LEAVE = \"noteLeave\";\nexport var OBJECT = \"object\";\nexport var OUTSIDE = \"outside\";\nexport var RIGHT = \"right\";\nexport var ROUNDED_RECT = \"roundedRect\";\nexport var START = \"start\";\nexport var STRING = \"string\";\nexport var TOP = \"top\";\nexport var TRIANGLE = \"triangle\";\nexport var SQUARE = \"square\";\nexport var RECT = \"rect\";\nexport var VALUE = \"value\";\nexport var WHITE = \"#fff\";\nexport var WIDTH = \"width\";\nexport var X = \"x\";\nexport var Y = \"y\";\nexport var DEFAULT_SERIES_OPACITY = 1;\nexport var POINTER = \"pointer\";\nexport var HORIZONTAL = \"horizontal\";\nexport var VERTICAL = \"vertical\";\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    var classArray = isArray(classes) ? classes : [ classes ];\n\n    for (var idx = 0; idx < classArray.length; idx++) {\n        var className = classArray[idx];\n        if (element.className.indexOf(className) === -1) {\n            element.className += \" \" + className;\n        }\n    }\n}","var 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    var 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 (var 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 cycleUp(index, count) {\n    return (index + 1) % count;\n}\n","export default function cycleDown(index, count) {\n    var result = index - 1;\n\n    return result < 0 ? count - 1 : result;\n}\n","export default function cycleIndex(index, length) {\n    if (length === 1 || (index % length) === 0) {\n        return 0;\n    }\n\n    if (index < 0) {\n        return length + (index % length);\n    } else if (index >= length) {\n        return index % length;\n    }\n\n    return index;\n}","export default function isFunction(fn) {\n    return typeof fn === \"function\";\n}","import isFunction from './is-function';\n\nvar OBJECT = \"object\";\nvar UNDEFINED = \"undefined\";\n\nfunction deepExtendOne(destination, source) {\n    for (var property in source) {\n        if (property === '__proto__' || property === 'constructor') {\n            continue;\n        }\n\n        var propValue = source[property];\n        var propType = typeof propValue;\n\n        var propInit = (void 0);\n        if (propType === OBJECT && propValue !== null) {\n            propInit = propValue.constructor;\n        } else {\n            propInit = null;\n        }\n\n        if (propInit && propInit !== Array) {\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                var 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    var arguments$1 = arguments;\n\n    var length = arguments.length;\n\n    for (var i = 1; i < length; i++) {\n        deepExtendOne(destination, arguments$1[i]);\n    }\n\n    return destination;\n}\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\nvar 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    var stylesArray = isString(styles) ? [ styles ] : styles;\n\n    if (isArray(stylesArray)) {\n        var result = {};\n        var style = window.getComputedStyle(element);\n\n        for (var idx = 0; idx < stylesArray.length; idx++) {\n            var field = stylesArray[idx];\n            result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n        }\n\n        return result;\n    } else if (isObject(styles)) {\n        for (var field$1 in styles) {\n            element.style[field$1] = styleValue(styles[field$1]);\n        }\n    }\n}","import { TOP, BOTTOM, LEFT, RIGHT } from './constants';\n\nexport default function getSpacing(value, defaultSpacing) {\n    if ( defaultSpacing === void 0 ) defaultSpacing = 0;\n\n    var 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}","var current = {\n    compile: function(template) {\n        return template;\n    }\n};\n\nvar TemplateService = function TemplateService () {};\n\nTemplateService.register = function register (userImplementation) {\n    current = userImplementation;\n};\n\nTemplateService.compile = function compile (template, options) {\n    return current.compile(template, options);\n};\n\nexport default TemplateService;\n","import TemplateService from '../services/template-service';\nimport isFunction from './is-function';\n\nexport default function getTemplate(options) {\n    if ( options === void 0 ) options = {};\n\n    var template;\n    if (options.template) {\n        options.template = template = TemplateService.compile(options.template);\n    } else if (isFunction(options.content)) {\n        template = options.content;\n    }\n\n    return template;\n}\n","import TemplateService from '../services/template-service';\nimport isFunction from './is-function';\n\nexport default function getTemplate(options) {\n    if ( options === void 0 ) options = {};\n\n    var ariaTemplate;\n    if (options.ariaTemplate) {\n        options.ariaTemplate = ariaTemplate = TemplateService.compile(options.ariaTemplate);\n    } else if (isFunction(options.ariaContent)) {\n        ariaTemplate = options.ariaContent;\n    }\n\n    return ariaTemplate;\n}\n","import { drawing } from '@progress/kendo-drawing';\n\nvar FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\nvar 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    var 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        var result = obj;\n        for (var 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    var length = array.length;\n    var result = [];\n    for (var idx = 0; idx < length; idx++) {\n        if (callback(array[idx])) {\n            result .push(array[idx]);\n        }\n    }\n\n    return result;\n}","export default function hasClasses(element, classNames) {\n    if (element.className) {\n        var names = classNames.split(\" \");\n        for (var idx = 0; idx < names.length; idx++) {\n            if (element.className.indexOf && element.className.indexOf(names[idx]) !== -1) {\n                return true;\n            }\n        }\n    }\n}\n","// TODO: Remove and replace with Map/WeakMap.\nvar HashMap = function HashMap() {\n    this._map = new Map();\n};\n\nHashMap.prototype.get = function get (key) {\n    return this._map.get(key);\n};\n\nHashMap.prototype.set = function set (key, value) {\n    this._map.set(key, value);\n};\n\nexport default HashMap;\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\nvar TRIGGER = 'trigger';\n\nvar InstanceObserver = function InstanceObserver(observer, handlers) {\n    this.observer = observer;\n    this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n};\n\nInstanceObserver.prototype.trigger = function trigger (name, args) {\n    var ref = this;\n        var observer = ref.observer;\n        var handlerMap = ref.handlerMap;\n    var isDefaultPrevented;\n    if (handlerMap[name]) {\n        isDefaultPrevented = this.callObserver(handlerMap[name], args);\n    } else if (observer[TRIGGER]) {\n        isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n    }\n\n    return isDefaultPrevented;\n};\n\nInstanceObserver.prototype.callObserver = function callObserver (fnName) {\n        var args = [], len = arguments.length - 1;\n        while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n    return this.observer[fnName].apply(this.observer, args);\n};\n\nInstanceObserver.prototype.requiresHandlers = function requiresHandlers (names) {\n        var this$1 = this;\n\n    if (this.observer.requiresHandlers) {\n        return this.observer.requiresHandlers(names);\n    }\n\n    for (var idx = 0; idx < names.length; idx++) {\n        if (this$1.handlerMap[names[idx]]) {\n            return true;\n        }\n    }\n};\n\nexport default InstanceObserver;","import { drawing } from '@progress/kendo-drawing';\n\nexport default function map(array, callback) {\n    var length = array.length;\n    var result = [];\n    for (var idx = 0; idx < length; idx++) {\n        var value = callback(array[idx]);\n        if (drawing.util.defined(value)) {\n            result.push(value);\n        }\n    }\n    return result;\n}","import { support } from '@progress/kendo-drawing';\n\nvar browser = support.browser || {};\n\nexport default function mousewheelDelta(e) {\n    var 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","import {\n    drawing,\n    Class,\n    logToConsole\n} from '@progress/kendo-drawing';\n\nvar ref = drawing.util;\nvar append = ref.append;\nvar bindEvents = ref.bindEvents;\nvar defined = ref.defined;\nvar deg = ref.deg;\nvar elementOffset = ref.elementOffset;\nvar elementSize = ref.elementSize;\nvar eventCoordinates = ref.eventCoordinates;\nvar eventElement = ref.eventElement;\nvar hashKey = ref.hashKey;\nvar last = ref.last;\nvar limitValue = ref.limitValue;\nvar objectKey = ref.objectKey;\nvar rad = ref.rad;\nvar round = ref.round;\nvar unbindEvents = ref.unbindEvents;\nvar valueOrDefault = ref.valueOrDefault;\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\nvar FontLoader = function FontLoader () {};\n\nFontLoader.fetchFonts = function fetchFonts (options, fonts, state) {\n        if ( state === void 0 ) state = { depth: 0 };\n\n    var 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        var 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\nFontLoader.loadFonts = function loadFonts (fonts, callback) {\n    var 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\nFontLoader.preloadFonts = function preloadFonts (options, callback) {\n    var fonts = [];\n    FontLoader.fetchFonts(options, fonts);\n\n    FontLoader.loadFonts(fonts, callback);\n};\n\nexport default FontLoader;","import deepExtend from './deep-extend';\n\nexport default function setDefaultOptions(type, options) {\n    var proto = type.prototype;\n    if (proto.options) {\n        proto.options = deepExtend({}, proto.options, options);\n    } else {\n        proto.options = options;\n    }\n}","import isObject from './is-object';\nimport isPlainObject from './is-plain-object';\nimport isString from './is-string';\nimport deepExtend from './deep-extend';\nimport setDefaultOptions from './set-default-options';\nimport addClass from './add-class';\nimport removeClass from './remove-class';\n\nvar KICON = 'k-icon';\nvar KI_PREFFIX = 'k-i-';\nvar KFONTICON = 'k-font-icon';\nvar KSVGICON = 'k-svg-icon';\nvar KSVG_PREFFIX = 'k-svg-i-';\n\nvar HTMLBaseIcon = function HTMLBaseIcon(element, options) {\n    this.element = element;\n    this.options = deepExtend({}, this.options, options);\n\n    this.wrapper();\n};\n\nHTMLBaseIcon.prototype.wrapper = function wrapper () {\n    this.addClasses();\n};\n\nHTMLBaseIcon.prototype.addClasses = function addClasses () {\n};\n\nHTMLBaseIcon.prototype.html = function html () {\n    return this.element.outerHTML;\n};\n\nsetDefaultOptions(HTMLBaseIcon, {\n    name: '',\n    size: 'none',\n    themeColor: 'none',\n    flip: 'default',\n    iconClass: '',\n    stylingOptions: [ 'size', 'themeColor', 'fill' ]\n});\n\nvar HTMLFontIcon = (function (HTMLBaseIcon) {\n    function HTMLFontIcon(element, options) {\n        HTMLBaseIcon.call(this, element, options);\n    }\n\n    if ( HTMLBaseIcon ) HTMLFontIcon.__proto__ = HTMLBaseIcon;\n    HTMLFontIcon.prototype = Object.create( HTMLBaseIcon && HTMLBaseIcon.prototype );\n    HTMLFontIcon.prototype.constructor = HTMLFontIcon;\n\n    HTMLFontIcon.prototype.wrapper = function wrapper () {\n        // Find if there is an existing k-i- class appended to the element.\n        var currentIconClass = this.element.className.split(\" \").find(function (x) { return x.startsWith(KI_PREFFIX); });\n        var className = this.options.icon ? (\"\" + (this.options.icon.startsWith(KI_PREFFIX) ? \"\" : KI_PREFFIX) + (this.options.icon)) : \"\";\n\n        this._className = className;\n\n        addClass(this.element, KICON);\n        addClass(this.element, KFONTICON);\n        removeClass(this.element, currentIconClass); // Remove any existing icons.\n        addClass(this.element, className);\n        addClass(this.element, this.options.iconClass || '');\n\n        HTMLBaseIcon.prototype.wrapper.call(this);\n    };\n\n    return HTMLFontIcon;\n}(HTMLBaseIcon));\n\nsetDefaultOptions(HTMLFontIcon, {\n    name: 'HTMLFontIcon',\n    icon: null\n});\n\nvar HTMLSvgIcon = (function (HTMLBaseIcon) {\n    function HTMLSvgIcon(element, options) {\n        // Ensure that the inner contents of the wrapping span element are always removed for re-rendering purposes.\n        element.innerHTML = \"\";\n\n        HTMLBaseIcon.call(this, element, options);\n    }\n\n    if ( HTMLBaseIcon ) HTMLSvgIcon.__proto__ = HTMLBaseIcon;\n    HTMLSvgIcon.prototype = Object.create( HTMLBaseIcon && HTMLBaseIcon.prototype );\n    HTMLSvgIcon.prototype.constructor = HTMLSvgIcon;\n\n    HTMLSvgIcon.prototype.wrapper = function wrapper () {\n        var icon = this.options.icon;\n        var iconClass = this.options.iconClass;\n        var currentIconClass = this.element.className.split(\" \").find(function (x) { return x.startsWith(KSVG_PREFFIX); });\n\n        if (!icon && iconClass) {\n            // match k-i-(some-icon-name)\n            var regex = /k-i-(\\w+(?:-\\w+)*)/;\n            var iconNameMatch = iconClass.match(regex);\n            if (iconNameMatch) {\n                icon = iconNameMatch[1];\n                iconClass = iconClass.replace(iconNameMatch[0], \"\");\n            }\n        }\n\n        if (isString(icon)) {\n            icon = icon.replace(\"k-i-\", \"\").replace(/-./g, function (x) { return x[1].toUpperCase(); });\n            icon = this.options.svgIcons[icon] || this.options.svgIcons[(icon + \"Icon\")];\n        }\n\n        var className = icon && icon.name ? (\"\" + KSVG_PREFFIX + (icon.name)) : \"\";\n        this._className = className;\n\n        addClass(this.element, KSVGICON);\n        removeClass(this.element, currentIconClass);\n        addClass(this.element, className);\n        addClass(this.element, iconClass || \"\");\n        this.element.setAttribute(\"aria-hidden\", \"true\");\n\n        if (icon && isPlainObject(icon)) {\n            var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n            svgElement.setAttribute(\"viewBox\", icon.viewBox || \"\");\n            svgElement.setAttribute(\"focusable\", \"false\");\n            svgElement.innerHTML = icon.content || \"\";\n\n            this.element.appendChild(svgElement);\n        }\n\n        HTMLBaseIcon.prototype.wrapper.call(this);\n    };\n\n    return HTMLSvgIcon;\n}(HTMLBaseIcon));\n\nsetDefaultOptions(HTMLSvgIcon, {\n    name: 'HTMLSvgIcon',\n    icon: null,\n    svgIcons: {}\n});\n\nvar ICON_TYPES = {\n    'svg': HTMLSvgIcon,\n    'font': HTMLFontIcon\n};\n\nexport default function renderIcon(iconElement, iconOptions) {\n    var element = iconElement;\n    var options = iconOptions;\n\n    if (!element\n        || (isObject(element) && !(element instanceof HTMLElement))\n        || isString(element)) {\n        options = element;\n        element = document.createElement(\"span\");\n    }\n\n    if (isString(options)) {\n        options = {\n            icon: options\n        };\n    }\n\n    if (!options.type) {\n        options.type = 'svg';\n    }\n\n    if (!ICON_TYPES[options.type]) {\n        return null;\n    }\n\n    return (new ICON_TYPES[options.type](element, options).html());\n}\n","export default function isPlainObject(value) {\n    return Object.prototype.toString.call(value) === \"[object Object]\";\n}","import { MIN_VALUE, MAX_VALUE } from './constants';\n\nexport default function sparseArrayLimits(arr) {\n    var min = MAX_VALUE;\n    var max = MIN_VALUE;\n\n    for (var idx = 0, length = arr.length; idx < length; idx++) {\n        var value = arr[idx];\n        if (value !== null && isFinite(value)) {\n            min = Math.min(min, value);\n            max = Math.max(max, value);\n        }\n    }\n\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 (var i = 0; i < array.length; i++) {\n        var item = array[i];\n        if (predicate(item, i, array)) {\n            return item;\n        }\n    }\n}\n","import { geometry } from '@progress/kendo-drawing';\n\nvar Matrix = geometry.Matrix;\nvar matrixRegexp = /matrix\\((.*)\\)/;\n\nfunction parseMatrix(matrixString) {\n    var match = matrixString.match(matrixRegexp);\n    if (match === null || match.length !== 2) {\n        return Matrix.unit();\n    }\n\n    var members = match[1].split(',').map(function (x) { return parseFloat(x); });\n    return new (Function.prototype.bind.apply( Matrix, [ null ].concat( members) ));\n}\n\nfunction transformMatrix(element) {\n    var 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    var matrix = transformMatrix(element);\n    var parent = element.parentElement;\n    while (parent) {\n        var parentMatrix = transformMatrix(parent);\n        matrix = matrix.multiplyCopy(parentMatrix);\n        parent = parent.parentElement;\n    }\n\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    var isDark = new Color(color).isDark();\n    if (isDark) {\n        return WHITE;\n    }\n\n    return BLACK;\n}\n\nexport default autoTextColor;\n","var DELETED = {};\n\nvar LegacySet = function LegacySet(values) {\n    var this$1 = this;\n\n    this._index = {};\n    this._values = values ? values.slice(0) : [];\n\n    for (var i = 0; i < this._values.length; i++) {\n        this$1._index[this$1._values[i]] = i;\n    }\n};\n\nvar prototypeAccessors = { size: { configurable: true } };\n\nLegacySet.prototype.values = function values () {\n    return this._values.filter(function (item) { return item !== DELETED; });\n};\n\nLegacySet.prototype.has = function has (value) {\n    return this._index[value] !== undefined;\n};\n\nLegacySet.prototype.add = function add (value) {\n    if (!this.has(value)) {\n        this._index[value] = this._values.length;\n        this._values.push(value);\n    }\n};\n\nLegacySet.prototype.delete = function delete$1 (value) {\n    var index = this._index[value];\n    if (index !== undefined) {\n        this._values[index] = DELETED;\n        delete this._index[value];\n    }\n};\n\nLegacySet.prototype.clear = function clear () {\n    this._index = {};\n    this._values = [];\n};\n\nprototypeAccessors.size.get = function () {\n    return this._values.length;\n};\n\nObject.defineProperties( LegacySet.prototype, prototypeAccessors );\n\nvar SetWrapper = function SetWrapper(values) {\n    this._set = new Set(values);\n};\n\nvar prototypeAccessors$1 = { size: { configurable: true } };\n\nSetWrapper.prototype.values = function values () {\n    return Array.from(this._set);\n};\n\nSetWrapper.prototype.has = function has (value) {\n    return this._set.has(value);\n};\n\nSetWrapper.prototype.add = function add (value) {\n    this._set.add(value);\n};\n\nSetWrapper.prototype.delete = function delete$2 (value) {\n    this._set.delete(value);\n};\n\nSetWrapper.prototype.clear = function clear () {\n    this._set.clear();\n};\n\nprototypeAccessors$1.size.get = function () {\n    return this._set.size;\n};\n\nObject.defineProperties( SetWrapper.prototype, prototypeAccessors$1 );\n\n// TODO: Drop LegacySet when removing support for IE10\nvar supportsSet = function () {\n    var supported = false;\n\n    if (typeof Set === 'function') {\n        var 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","var 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","export default function hasOwnProperty(obj, property) {\n    return Object.prototype.hasOwnProperty.call(obj, property);\n}\n","// Based on the implementation from kendo-spreadsheet-common/src/calc.js\nvar Matrix = function Matrix() {\n    this.height = 0;\n    this.width = 0;\n    this.data = [];\n};\n\nMatrix.prototype.clone = function clone () {\n    var m = new Matrix();\n    m.height = this.height;\n    m.width = this.width;\n    m.data = this.data.map(function (row) { return row.slice(); });\n    return m;\n};\n\nMatrix.prototype.get = function get (row, col) {\n    var line = this.data[row];\n    var val = line ? line[col] : null;\n    return val;\n};\n\nMatrix.prototype.set = function set (row, col, data) {\n    var line = this.data[row];\n    if (line == null) {\n        line = this.data[row] = [];\n    }\n    line[col] = data;\n    if (row >= this.height) {\n        this.height = row + 1;\n    }\n    if (col >= this.width) {\n        this.width = col + 1;\n    }\n};\n\nMatrix.prototype.each = function each (f, includeEmpty) {\n        var this$1 = this;\n\n    for (var row = 0; row < this.height; ++row) {\n        for (var col = 0; col < this.width; ++col) {\n            var val = this$1.get(row, col);\n            if (includeEmpty || val != null) {\n                val = f(val, row, col);\n                if (val !== undefined) {\n                    return val;\n                }\n            }\n        }\n    }\n};\n\nMatrix.prototype.map = function map (f, includeEmpty) {\n    var m = new Matrix();\n    this.each(function(el, row, col) {\n        m.set(row, col, f(el, row, col));\n    }, includeEmpty);\n    return m;\n};\n\nMatrix.prototype.transpose = function transpose () {\n    var m = new Matrix();\n    this.each(function(el, row, col) {\n        m.set(col, row, el);\n    });\n    return m;\n};\n\nMatrix.prototype.unit = function unit (n) {\n    this.width = this.height = n;\n    var a = this.data = new Array(n);\n    for (var i = n; --i >= 0;) {\n        var row = a[i] = new Array(n);\n        for (var j = n; --j >= 0;) {\n            row[j] = i === j ? 1 : 0;\n        }\n    }\n    return this;\n};\n\nMatrix.prototype.multiply = function multiply (b) {\n    var a = this;\n    var m = new Matrix();\n    for (var row = 0; row < a.height; ++row) {\n        for (var col = 0; col < b.width; ++col) {\n            var s = 0;\n            for (var i = 0; i < a.width; ++i) {\n                var va = a.get(row, i);\n                var vb = b.get(i, col);\n                if (typeof va === \"number\" && typeof vb === \"number\") {\n                    s += va * vb;\n                }\n            }\n            m.set(row, col, s);\n        }\n    }\n    return m;\n};\n\nMatrix.prototype.inverse = function inverse () {\n    var n = this.width;\n    var m = this.augment(new Matrix().unit(n));\n    var a = m.data;\n\n    // Gaussian elimination\n    // https://en.wikipedia.org/wiki/Gaussian_elimination#Finding_the_inverse_of_a_matrix\n\n    // 1. Get zeros below main diagonal\n    var loop = function ( k ) {\n        var imax = argmax(k, n, function(i) { return a[i][k]; });\n        if (!a[imax][k]) {\n            return { v: null }; // singular matrix\n        }\n        if (k !== imax) {\n            var tmp = a[k];\n            a[k] = a[imax];\n            a[imax] = tmp;\n        }\n        for (var i = k + 1; i < n; ++i) {\n            for (var j = k + 1; j < 2 * n; ++j) {\n                a[i][j] -= a[k][j] * a[i][k] / a[k][k];\n            }\n            a[i][k] = 0;\n        }\n    };\n\n        for (var k = 0; k < n; ++k) {\n            var returned = loop( k );\n\n            if ( returned ) return returned.v;\n        }\n\n    // 2. Get 1-s on main diagonal, dividing by pivot\n    for (var i$1 = 0; i$1 < n; ++i$1) {\n        for (var f = a[i$1][i$1], j$1 = 0; j$1 < 2 * n; ++j$1) {\n            a[i$1][j$1] /= f;\n        }\n    }\n\n    // 3. Get zeros above main diagonal.  Actually, we only care to compute the right side\n    // here (that will be the inverse), so in the inner loop below we go while j >= n,\n    // instead of j >= k.\n    for (var k$1 = n; --k$1 >= 0;) {\n        for (var i$2 = k$1; --i$2 >= 0;) {\n            if (a[i$2][k$1]) {\n                for (var j$2 = 2 * n; --j$2 >= n;) {\n                    a[i$2][j$2] -= a[k$1][j$2] * a[i$2][k$1];\n                }\n            }\n        }\n    }\n\n    return m.slice(0, n, n, n);\n};\n\nMatrix.prototype.augment = function augment (m) {\n    var ret = this.clone();\n    var n = ret.width;\n    m.each(function(val, row, col) {\n        ret.set(row, col + n, val);\n    });\n    return ret;\n};\n\nMatrix.prototype.slice = function slice (row, col, height, width) {\n        var this$1 = this;\n\n    var m = new Matrix();\n    for (var i = 0; i < height; ++i) {\n        for (var j = 0; j < width; ++j) {\n            m.set(i, j, this$1.get(row + i, col + j));\n        }\n    }\n    return m;\n};\n\nfunction argmax(start, end, f) {\n    var max = f(start), pos = start;\n    for (var i = start + 1; i < end; i++) {\n        var v = f(start);\n        if (v > max) {\n            max = v;\n            pos = start;\n        }\n    }\n    return pos;\n}\n\nexport default Matrix;\n","export var eventMap = {\n    down: \"pointerdown\",\n    move: \"pointermove\",\n    up: \"pointerup\",\n    cancel: \"pointercancel pointerleave\"\n};\n\nfunction queryEventMap(e) {\n    return eventMap[e] || e;\n}\n\nexport var applyEventMap = function (events) {\n    var eventRegEx = /([^ ]+)/g;\n    var appliedEvents = events.replace(eventRegEx, queryEventMap);\n\n    return appliedEvents;\n};\n","export default function guid() {\n    var id = \"\";\n    var i;\n    var 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}","import isFunction from './is-function';\nimport isArray from './is-array';\nimport guid from '../core/utils/guid';\n\nvar elementEventHandlers = new WeakMap();\nvar ID = Symbol('id');\n\nexport function on(element, events, filter, handler, useCapture) {\n    addEventListeners(element, events, filter, handler, useCapture);\n}\n\nexport function off(element, events, filter, handler, useCapture) {\n    removeEventListeners(element, events, filter, handler, useCapture);\n}\n\nfunction isString(value) {\n    return typeof(value) === \"string\";\n}\n\nfunction addEventListeners(element, events, filter, handler, useCapture) {\n    var eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n    eventNames.forEach(function(eventName) {\n        addEventListener(element, eventName, filter, handler, useCapture);\n    });\n}\n\nfunction addEventListener(element, event, filter, handler, useCapture) {\n    var eventHandler = handler;\n    var 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    var attachedHandler = function(e) {\n        var closestMatchingTarget = e.target ? e.target.closest(eventFilter) : null;\n\n        if (!eventFilter ||\n            (eventFilter && e.target && closestMatchingTarget)) {\n            var currentTarget = eventFilter ? closestMatchingTarget : e.currentTarget;\n\n            // reassign the property as it is a getters only\n            Object.defineProperty(e, \"currentTarget\", { value: currentTarget });\n            // keep a reference to the top-level target\n            Object.defineProperty(e, \"delegateTarget\", { value: element });\n\n            eventHandler(e);\n        }\n    };\n    eventHandler[ID] = guid();\n\n    var eventHandlers = elementEventHandlers.get(element);\n\n    if (!eventHandlers) {\n        eventHandlers = new Map();\n        elementEventHandlers.set(element, eventHandlers);\n    }\n\n    eventHandlers.set(eventHandler[ID], attachedHandler);\n    element.addEventListener(event, attachedHandler, Boolean(useCapture));\n}\n\nfunction removeEventListeners(element, events, handler, useCapture) {\n    var eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n    eventNames.forEach(function(eventName) {\n        removeEventListener(element, eventName, handler, useCapture);\n    });\n}\n\nfunction removeEventListener(element, event, handler, useCapture) {\n    var eventHandlers = elementEventHandlers.get(element);\n\n    if (eventHandlers && handler && handler[ID]) {\n        var handlerId = handler[ID];\n        var attachedHandler = eventHandlers.get(handlerId);\n\n        eventHandlers.delete(handlerId);\n\n        if (attachedHandler) {\n            element.removeEventListener(event, attachedHandler, Boolean(useCapture));\n        }\n    }\n}\n","export default function getSupportedFeatures() {\n    var os = detectOS(navigator.userAgent);\n    var support = {};\n\n    support.mobileOS = os;\n\n    return support;\n}\n\nfunction detectOS(ua) {\n    var os = false;\n    var 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            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        },\n        osRxs = {\n            ios: /^i(phone|pad|pod)$/i,\n            android: /^android|fire$/i,\n            windows: /windows/,\n            wp: /wp/,\n            flat: /sailfish|ffos|tizen/i\n        };\n\n    for (var agent in agentRxs) {\n        var 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.name = testRegex(agent, osRxs);\n            os[os.name] = true;\n\n            break;\n        }\n    }\n\n    return os;\n}\n\nfunction testRegex(agent, regexes, dflt) {\n    for (var regex in regexes) {\n        if (regexes[regex].test(agent)) {\n            return regex;\n        }\n    }\n    return dflt !== undefined ? dflt : agent;\n}\n","export default function noop() {}\n","export default function now() {\n    return new Date().getTime();\n}\n","import { Class } from '../drawing-utils';\n\nvar STRING = \"string\";\nvar FUNCTION = \"function\";\n\nvar preventDefault = function() {\n    this._defaultPrevented = true;\n};\n\nvar isDefaultPrevented = function() {\n    return this._defaultPrevented === true;\n};\n\nvar Observable = (function (Class) {\n    function Observable() {\n        Class.call(this);\n        this._events = {};\n    }\n\n    if ( Class ) Observable.__proto__ = Class;\n    Observable.prototype = Object.create( Class && Class.prototype );\n    Observable.prototype.constructor = Observable;\n\n    Observable.prototype.destroy = function destroy () {\n        this.unbind();\n    };\n\n    Observable.prototype.bind = function bind (event, handlers, one) {\n        var 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        var loop = function (  ) {\n            var 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\n        for (idx = 0, length = eventNames.length; idx < length; idx++) loop(  );\n        /* eslint-enable no-loop-func */\n\n        return that;\n    };\n\n    Observable.prototype.one = function one (eventNames, handlers) {\n        return this.bind(eventNames, handlers, true);\n    };\n\n    Observable.prototype.first = function first (eventName, handlers) {\n        var 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            var eventName$1 = eventNames[idx];\n\n            handler = handlersIsFunction ? handlers : handlers[eventName$1];\n\n            if (handler) {\n                events = that._events[eventName$1] = that._events[eventName$1] || [];\n                events.unshift(handler);\n            }\n        }\n\n        return that;\n    };\n\n    Observable.prototype.trigger = function trigger (eventName, eventArgs) {\n        var that = this,\n            events = that._events[eventName],\n            idx,\n            length;\n\n        if (events) {\n            var 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    Observable.prototype.unbind = function unbind (eventName, handler) {\n        var 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    Observable.prototype._setEvents = function _setEvents (options) {\n        var this$1 = this;\n\n        var length = (this.events || []).length;\n\n        for (var idx = 0; idx < length; idx ++) {\n            var e = this$1.events[idx];\n\n            if (this$1.options[e] && options[e]) {\n                this$1.unbind(e, this$1.options[e]);\n\n                if (this$1._events && this$1._events[e]) {\n                    delete this$1._events[e];\n                }\n            }\n        }\n\n        this.bind(this.events, options);\n    };\n\n    return Observable;\n}(Class));\n\nexport default Observable;\n","import { Class } from '../drawing-utils';\nimport { applyEventMap, eventMap } from './event-map';\nimport { on, off } from './event-utils';\nimport getSupportedFeatures from './get-supported-features';\nimport noop from './noop';\nimport now from './now';\nimport grep from './grep';\nimport Observable from './observable';\n\nvar extend = Object.assign;\n\nvar preventDefault = function (e) {\n    e.preventDefault();\n};\n\nvar\n    DEFAULT_MIN_HOLD = 800,\n    CLICK_DELAY = 300,\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\nvar THRESHOLD = {\n    'api': 0,\n    'touch': 0,\n    'mouse': 9,\n    'pointer': 9\n};\n\nfunction touchDelta(touch1, touch2) {\n    var 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    var touches = [],\n        originalEvent = e.originalEvent || e,\n        currentTarget = e.currentTarget;\n\n    if (e.api) {\n        touches.push({\n            id: 2, // hardcoded ID for API call\n            event: e,\n            target: e.target,\n            currentTarget: e.target,\n            location: e,\n            type: 'api'\n        });\n    } else {\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    }\n\n    return touches;\n}\nvar TouchAxis = (function (Class) {\n    function TouchAxis(axis, location) {\n        Class.call(this);\n        var 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    if ( Class ) TouchAxis.__proto__ = Class;\n    TouchAxis.prototype = Object.create( Class && Class.prototype );\n    TouchAxis.prototype.constructor = TouchAxis;\n\n    TouchAxis.prototype.move = function move (location) {\n        var 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    TouchAxis.prototype._updateLocationData = function _updateLocationData (location) {\n        var 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    return TouchAxis;\n}(Class));\n\nvar Touch = (function (Class) {\n    function Touch(userEvents, target, touchInfo) {\n        Class.call(this);\n\n        extend(this, {\n            x: new TouchAxis('X', touchInfo.location),\n            y: new TouchAxis('Y', touchInfo.location),\n            type: touchInfo.type,\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    if ( Class ) Touch.__proto__ = Class;\n    Touch.prototype = Object.create( Class && Class.prototype );\n    Touch.prototype.constructor = Touch;\n\n    Touch.prototype.press = function press () {\n        var this$1 = this;\n\n        this._holdTimeout = setTimeout(function () { return this$1._hold(); }, this.userEvents.minHold);\n        this._trigger(PRESS, this.pressEvent);\n    };\n\n    Touch.prototype._tap = function _tap (touchInfo) {\n        var 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    Touch.prototype._hold = function _hold () {\n        this._trigger(HOLD, this.pressEvent);\n    };\n\n    /* eslint-disable consistent-return */\n    Touch.prototype.move = function move (touchInfo) {\n        var that = this;\n        var 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    Touch.prototype.end = function 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.supportDoubleTap) {\n                this._tap(touchInfo);\n            } else {\n                this._trigger(TAP, touchInfo);\n            }\n        }\n\n        clearTimeout(this._holdTimeout);\n        this.dispose();\n    };\n\n    Touch.prototype.dispose = function dispose () {\n        var 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        var activeTouchIndex = activeTouches.indexOf(this);\n        activeTouches.splice(activeTouchIndex, 1);\n    };\n\n    Touch.prototype.skip = function skip () {\n        this.dispose();\n    };\n\n    Touch.prototype.cancel = function cancel () {\n        this.dispose();\n    };\n\n    Touch.prototype.isMoved = function isMoved () {\n        return this._moved;\n    };\n\n    Touch.prototype._start = function _start (touchInfo) {\n        clearTimeout(this._holdTimeout);\n        this.startTime = now();\n        this._moved = true;\n        this._trigger(START, touchInfo);\n    };\n\n    Touch.prototype._trigger = function _trigger (name, touchInfo) {\n        var e = touchInfo.event;\n        var data = {\n            touch: this,\n            x: this.x,\n            y: this.y,\n            target: this.target,\n            event: e\n        };\n\n        if (this.userEvents.notify(name, data)) {\n            e.preventDefault();\n        }\n    };\n\n    Touch.prototype._withinIgnoreThreshold = function _withinIgnoreThreshold () {\n        var xDelta = this.x.initialDelta,\n            yDelta = this.y.initialDelta;\n        return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n    };\n\n    return Touch;\n}(Class));\n\nfunction withEachUpEvent(callback) {\n    var downEvents = eventMap.up.split(' '),\n        idx = 0,\n        length = downEvents.length;\n\n    for (; idx < length; idx++) {\n        callback(downEvents[idx]);\n    }\n}\n\nvar UserEvents = (function (Observable) {\n    function UserEvents(element, options) {\n        Observable.call(this);\n        var that = this;\n        var filter;\n\n        var 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._clicks = 0;\n        that.supportDoubleTap = options.supportDoubleTap;\n\n        extend(that, {\n            element: element,\n            surface: options.surface || element,\n            stopPropagation: options.stopPropagation,\n            pressed: false\n        });\n\n        this._surfaceMoveHandler = this._move.bind(this);\n        on(that.surface, applyEventMap('move'), this._surfaceMoveHandler);\n\n        this._surfaceEndHandler = this._end.bind(this);\n        on(that.surface, applyEventMap('up cancel'), this._surfaceEndHandler);\n\n        this._elementStartHandler = this._start.bind(this);\n        on(element, applyEventMap('down'), filter, this._elementStartHandler);\n\n        element.style['touch-action'] = options.touchAction || 'none';\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 = this._select.bind(this);\n        on(element, applyEventMap('mousedown'), filter, this._elementSelectHandler);\n\n        if (that.captureUpIfMoved) {\n            var surfaceElement = that.surface,\n                preventIfMovingProxy = that.preventIfMoving.bind(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    if ( Observable ) UserEvents.__proto__ = Observable;\n    UserEvents.prototype = Object.create( Observable && Observable.prototype );\n    UserEvents.prototype.constructor = UserEvents;\n\n    UserEvents.prototype.preventIfMoving = function preventIfMoving (e) {\n        if (this._isMoved()) {\n            e.preventDefault();\n        }\n    };\n\n    UserEvents.prototype.destroy = function destroy () {\n        var that = this;\n        var options = this.options;\n        var element = this.element;\n\n        if (that._destroyed) {\n            return;\n        }\n\n        that._destroyed = true;\n\n        if (that.captureUpIfMoved) {\n            var 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 (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    UserEvents.prototype.capture = function capture () {\n        UserEvents.current = this;\n    };\n\n    UserEvents.prototype.cancel = function cancel () {\n        this._disposeAll();\n        this.trigger(CANCEL);\n    };\n\n    UserEvents.prototype.notify = function notify (event, data) {\n        var that = this,\n            touches = that.touches;\n        var 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\n    UserEvents.prototype.press = function press (x, y, target) {\n        this._apiCall('_start', x, y, target);\n    };\n\n    UserEvents.prototype.move = function move (x, y) {\n        this._apiCall('_move', x, y);\n    };\n\n    UserEvents.prototype.end = function end (x, y) {\n        this._apiCall('_end', x, y);\n    };\n\n    UserEvents.prototype._isMultiTouch = function _isMultiTouch () {\n        return this.touches.length > 1;\n    };\n\n    UserEvents.prototype._maxTouchesReached = function _maxTouchesReached () {\n        return this.touches.length >= this._maxTouches;\n    };\n\n    UserEvents.prototype._disposeAll = function _disposeAll () {\n        var touches = this.touches;\n        while (touches.length > 0) {\n            touches.pop().dispose();\n        }\n    };\n\n    UserEvents.prototype._isMoved = function _isMoved () {\n        return grep(this.touches, function(touch) {\n            return touch.isMoved();\n        }).length;\n    };\n\n    UserEvents.prototype._select = function _select (e) {\n        if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n            e.preventDefault();\n        }\n    };\n\n    UserEvents.prototype._start = function _start (e) {\n        var this$1 = this;\n\n        if (e.which && e.which > 1 || this._maxTouchesReached()) {\n            return;\n        }\n\n        UserEvents.current = null;\n        this.currentTarget = e.currentTarget;\n\n        if (this.stopPropagation) {\n            e.stopPropagation();\n        }\n\n        var target;\n        var eventTouches = getTouches(e);\n        for (var idx = 0; idx < eventTouches.length; idx++) {\n            if (this$1._maxTouchesReached()) {\n                break;\n            }\n\n            var eventTouch = eventTouches[idx];\n            if (this$1.filter) {\n                target = eventTouch.currentTarget;\n            } else {\n                target = this$1.element;\n            }\n\n            if (target && target.length === 0) {\n                continue;\n            }\n\n            var touch = new Touch(this$1, target, eventTouch);\n            this$1.touches.push(touch);\n            touch.press();\n\n            if (this$1._isMultiTouch()) {\n                this$1.notify('gesturestart', {});\n            }\n        }\n    };\n\n    UserEvents.prototype._move = function _move (e) {\n        this._eachTouch('move', e);\n    };\n\n    UserEvents.prototype._end = function _end (e) {\n        this._eachTouch('end', e);\n    };\n\n    UserEvents.prototype._eachTouch = function _eachTouch (methodName, e) {\n        var this$1 = this;\n\n        var 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                var shouldCapture = methodName === 'move' && touchInfo.type === 'pointer' && !this$1.surface.hasPointerCapture(touchInfo.id);\n                if (shouldCapture) {\n                    this$1.surface.setPointerCapture(touchInfo.id);\n                }\n\n                matchingTouch[methodName](touchInfo);\n            }\n        }\n    };\n\n    UserEvents.prototype._apiCall = function _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    UserEvents.defaultThreshold = function defaultThreshold (value) {\n        DEFAULT_THRESHOLD = value;\n    };\n\n    UserEvents.minHold = function minHold (value) {\n        DEFAULT_MIN_HOLD = value;\n    };\n\n    return UserEvents;\n}(Observable));\n\nexport default UserEvents;\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function autoMajorUnit(min, max) {\n    var 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    var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n    var relativeValue = round((diff / scale), DEFAULT_PRECISION);\n    var scaleMultiplier = 1;\n\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\nvar Point = (function (Class) {\n    function Point(x, y) {\n        Class.call(this);\n\n        this.x = x || 0;\n        this.y = y || 0;\n    }\n\n    if ( Class ) Point.__proto__ = Class;\n    Point.prototype = Object.create( Class && Class.prototype );\n    Point.prototype.constructor = Point;\n\n    Point.prototype.clone = function clone () {\n        return new Point(this.x, this.y);\n    };\n\n    Point.prototype.equals = function equals (point) {\n        return point && this.x === point.x && this.y === point.y;\n    };\n\n    Point.prototype.rotate = function rotate (center, degrees) {\n        var theta = rad(degrees);\n        var cosT = Math.cos(theta);\n        var sinT = Math.sin(theta);\n        var cx = center.x;\n        var cy = center.y;\n        var ref = this;\n        var x = ref.x;\n        var y = ref.y;\n\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    Point.prototype.multiply = function multiply (a) {\n\n        this.x *= a;\n        this.y *= a;\n\n        return this;\n    };\n\n    Point.prototype.distanceTo = function distanceTo (point) {\n        var dx = this.x - point.x;\n        var dy = this.y - point.y;\n\n        return Math.sqrt(dx * dx + dy * dy);\n    };\n\n    Point.onCircle = function onCircle (center, angle, radius) {\n        var 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    return Point;\n}(Class));\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\nvar Box = (function (Class) {\n    function Box(x1, y1, x2, y2) {\n        Class.call(this);\n\n        this.x1 = x1 || 0;\n        this.y1 = y1 || 0;\n        this.x2 = x2 || 0;\n        this.y2 = y2 || 0;\n    }\n\n    if ( Class ) Box.__proto__ = Class;\n    Box.prototype = Object.create( Class && Class.prototype );\n    Box.prototype.constructor = Box;\n\n    Box.prototype.equals = function equals (box) {\n        return this.x1 === box.x1 && this.x2 === box.x2 &&\n            this.y1 === box.y1 && this.y2 === box.y2;\n    };\n\n    Box.prototype.width = function width () {\n        return this.x2 - this.x1;\n    };\n\n    Box.prototype.height = function height () {\n        return this.y2 - this.y1;\n    };\n\n    Box.prototype.translate = function 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    Box.prototype.move = function move (x, y) {\n        var height = this.height();\n        var 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    Box.prototype.wrap = function 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    Box.prototype.wrapPoint = function wrapPoint (point) {\n        var arrayPoint = isArray(point);\n        var x = arrayPoint ? point[0] : point.x;\n        var y = arrayPoint ? point[1] : point.y;\n        this.wrap(new Box(x, y, x, y));\n\n        return this;\n    };\n\n    Box.prototype.snapTo = function 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    Box.prototype.alignTo = function alignTo (targetBox, anchor) {\n        var height = this.height();\n        var width = this.width();\n        var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n        var offset = axis === Y ? height : width;\n\n        if (anchor === CENTER) {\n            var targetCenter = targetBox.center();\n            var 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    Box.prototype.shrink = function shrink (dw, dh) {\n\n        this.x2 -= dw;\n        this.y2 -= dh;\n\n        return this;\n    };\n\n    Box.prototype.expand = function expand (dw, dh) {\n        this.shrink(-dw, -dh);\n        return this;\n    };\n\n    Box.prototype.pad = function pad (padding) {\n        var 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    Box.prototype.unpad = function unpad (padding) {\n        var 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    Box.prototype.clone = function clone () {\n        return new Box(this.x1, this.y1, this.x2, this.y2);\n    };\n\n    Box.prototype.center = function center () {\n        return new Point(\n            this.x1 + this.width() / 2,\n            this.y1 + this.height() / 2\n        );\n    };\n\n    Box.prototype.containsPoint = function 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    Box.prototype.points = function 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    Box.prototype.getHash = function getHash () {\n        return [ this.x1, this.y1, this.x2, this.y2 ].join(\",\");\n    };\n\n    Box.prototype.overlaps = function overlaps (box) {\n        return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n    };\n\n    Box.prototype.rotate = function rotate (rotation) {\n        var width = this.width();\n        var height = this.height();\n        var ref = this.center();\n        var cx = ref.x;\n        var cy = ref.y;\n\n        var r1 = rotatePoint(0, 0, cx, cy, rotation);\n        var r2 = rotatePoint(width, 0, cx, cy, rotation);\n        var r3 = rotatePoint(width, height, cx, cy, rotation);\n        var r4 = rotatePoint(0, height, cx, cy, rotation);\n\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    Box.prototype.toRect = function toRect () {\n        return new geom.Rect([ this.x1, this.y1 ], [ this.width(), this.height() ]);\n    };\n\n    Box.prototype.hasSize = function hasSize () {\n        return this.width() !== 0 && this.height() !== 0;\n    };\n\n    Box.prototype.align = function align (targetBox, axis, alignment) {\n        var c1 = axis + 1;\n        var c2 = axis + 2;\n        var sizeFunc = axis === X ? WIDTH : HEIGHT;\n        var size = this[sizeFunc]();\n\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    return Box;\n}(Class));\n\nfunction rotatePoint(x, y, cx, cy, angle) {\n    var 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\nvar Ring = (function (Class) {\n    function Ring(center, innerRadius, radius, startAngle, angle) {\n        Class.call(this);\n\n        this.center = center;\n        this.innerRadius = innerRadius;\n        this.radius = radius;\n        this.startAngle = startAngle;\n        this.angle = angle;\n    }\n\n    if ( Class ) Ring.__proto__ = Class;\n    Ring.prototype = Object.create( Class && Class.prototype );\n    Ring.prototype.constructor = Ring;\n\n    Ring.prototype.clone = function clone () {\n        return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n    };\n\n    Ring.prototype.middle = function middle () {\n        return this.startAngle + this.angle / 2;\n    };\n\n    Ring.prototype.setRadius = function 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    Ring.prototype.point = function point (angle, innerRadius) {\n        var radianAngle = rad(angle);\n        var ax = Math.cos(radianAngle);\n        var ay = Math.sin(radianAngle);\n        var radius = innerRadius ? this.innerRadius : this.radius;\n        var x = round(this.center.x - (ax * radius), COORD_PRECISION);\n        var y = round(this.center.y - (ay * radius), COORD_PRECISION);\n\n        return new Point(x, y);\n    };\n\n    Ring.prototype.adjacentBox = function adjacentBox (distance, width, height) {\n        var sector = this.clone().expand(distance);\n        var midAndle = sector.middle();\n        var midPoint = sector.point(midAndle);\n        var hw = width / 2;\n        var hh = height / 2;\n        var sa = Math.sin(rad(midAndle));\n        var ca = Math.cos(rad(midAndle));\n        var x = midPoint.x - hw;\n        var y = midPoint.y - hh;\n\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    Ring.prototype.containsPoint = function containsPoint (p) {\n        var center = this.center;\n        var innerRadius = this.innerRadius;\n        var radius = this.radius;\n        var startAngle = this.startAngle;\n        var endAngle = this.startAngle + this.angle;\n        var dx = p.x - center.x;\n        var dy = p.y - center.y;\n        var vector = new Point(dx, dy);\n        var startPoint = this.point(startAngle);\n        var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n        var endPoint = this.point(endAngle);\n        var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n        var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n\n        return (startVector.equals(vector) || clockwise(startVector, vector)) &&\n               !clockwise(endVector, vector) &&\n               dist >= innerRadius * innerRadius && dist <= radius * radius;\n    };\n\n    Ring.prototype.getBBox = function getBBox () {\n        var this$1 = this;\n\n        var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n        var startAngle = round(this.startAngle % 360);\n        var endAngle = round((startAngle + this.angle) % 360);\n        var innerRadius = this.innerRadius;\n        var allAngles = [ 0, 90, 180, 270, startAngle, endAngle ].sort(numericComparer);\n        var startAngleIndex = allAngles.indexOf(startAngle);\n        var endAngleIndex = allAngles.indexOf(endAngle);\n        var 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 (var i = 0; i < angles.length; i++) {\n            var point = this$1.point(angles[i]);\n            box.wrapPoint(point);\n            box.wrapPoint(point, innerRadius);\n        }\n\n        if (!innerRadius) {\n            box.wrapPoint(this.center);\n        }\n\n        return box;\n    };\n\n    Ring.prototype.expand = function expand (value) {\n        this.radius += value;\n        return this;\n    };\n\n    return Ring;\n}(Class));\n\nfunction numericComparer(a, b) {\n    return a - b;\n}\n\nexport default Ring;","import Ring from './ring';\n\nvar Sector = (function (Ring) {\n    function Sector(center, radius, startAngle, angle) {\n        Ring.call(this, center, 0, radius, startAngle, angle);\n    }\n\n    if ( Ring ) Sector.__proto__ = Ring;\n    Sector.prototype = Object.create( Ring && Ring.prototype );\n    Sector.prototype.constructor = Sector;\n\n    Sector.prototype.expand = function expand (value) {\n        return Ring.prototype.expand.call(this, value);\n    };\n\n    Sector.prototype.clone = function clone () {\n        return new Sector(this.center, this.radius, this.startAngle, this.angle);\n    };\n\n    Sector.prototype.setRadius = function setRadius (newRadius) {\n        this.radius = newRadius;\n\n        return this;\n    };\n\n    return Sector;\n}(Ring));\n\nexport default Sector;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\nimport { Class } from '../common';\n\nvar DIRECTION_ANGLE = 0.001; //any value that will make the endAngle bigger than the start angle will work here.\n\nvar ShapeBuilder = (function (Class) {\n    function ShapeBuilder () {\n        Class.apply(this, arguments);\n    }\n\n    if ( Class ) ShapeBuilder.__proto__ = Class;\n    ShapeBuilder.prototype = Object.create( Class && Class.prototype );\n    ShapeBuilder.prototype.constructor = ShapeBuilder;\n\n    ShapeBuilder.prototype.createRing = function createRing (sector, options) {\n        var startAngle = sector.startAngle + 180;\n        var 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 || sector.angle > 0 && startAngle === endAngle) {\n            endAngle += DIRECTION_ANGLE;\n        }\n\n        var center = new geom.Point(sector.center.x, sector.center.y);\n        var radius = Math.max(sector.radius, 0);\n        var innerRadius = Math.max(sector.innerRadius, 0);\n        var arc = new geom.Arc(center, {\n            startAngle: startAngle,\n            endAngle: endAngle,\n            radiusX: radius,\n            radiusY: radius\n        });\n        var path = draw.Path.fromArc(arc, options).close();\n\n        if (innerRadius) {\n            arc.radiusX = arc.radiusY = innerRadius;\n            var innerEnd = arc.pointAt(endAngle);\n            path.lineTo(innerEnd.x, innerEnd.y);\n            path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n        } else {\n            path.lineTo(center.x, center.y);\n        }\n\n        return path;\n    };\n\n    return ShapeBuilder;\n}(Class));\n\nShapeBuilder.current = new ShapeBuilder();\n\nexport default ShapeBuilder;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { WHITE } from '../common/constants';\nimport { Class, deepExtend, defined, valueOrDefault, autoTextColor } from '../common';\n\nvar ChartElement = (function (Class) {\n    function ChartElement(options) {\n        Class.call(this);\n\n        this.children = [];\n\n        this.options = deepExtend({}, this.options, this.initUserOptions(options));\n    }\n\n    if ( Class ) ChartElement.__proto__ = Class;\n    ChartElement.prototype = Object.create( Class && Class.prototype );\n    ChartElement.prototype.constructor = ChartElement;\n\n    ChartElement.prototype.initUserOptions = function initUserOptions (options) {\n        return options;\n    };\n\n    ChartElement.prototype.reflow = function reflow (targetBox) {\n        var children = this.children;\n        var box;\n\n        for (var i = 0; i < children.length; i++) {\n            var 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    ChartElement.prototype.destroy = function destroy () {\n        var children = this.children;\n\n        if (this.animation) {\n            this.animation.destroy();\n        }\n\n        for (var i = 0; i < children.length; i++) {\n            children[i].destroy();\n        }\n    };\n\n    ChartElement.prototype.getRoot = function getRoot () {\n        var parent = this.parent;\n\n        return parent ? parent.getRoot() : null;\n    };\n\n    ChartElement.prototype.getSender = function getSender () {\n        var service = this.getService();\n        if (service) {\n            return service.sender;\n        }\n    };\n\n    ChartElement.prototype.getService = function getService () {\n        var element = this;\n        while (element) {\n            if (element.chartService) {\n                return element.chartService;\n            }\n            element = element.parent;\n        }\n    };\n\n    ChartElement.prototype.translateChildren = function translateChildren (dx, dy) {\n        var children = this.children;\n        var childrenCount = children.length;\n\n        for (var i = 0; i < childrenCount; i++) {\n            children[i].box.translate(dx, dy);\n        }\n    };\n\n    ChartElement.prototype.append = function append () {\n        var arguments$1 = arguments;\n        var this$1 = this;\n\n        for (var i = 0; i < arguments.length; i++) {\n            var item = arguments$1[i];\n            this$1.children.push(item);\n            item.parent = this$1;\n        }\n    };\n\n    ChartElement.prototype.renderVisual = function 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    ChartElement.prototype.addVisual = function 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    ChartElement.prototype.renderChildren = function renderChildren () {\n        var children = this.children;\n        var length = children.length;\n        for (var i = 0; i < length; i++) {\n            children[i].renderVisual();\n        }\n    };\n\n    ChartElement.prototype.createVisual = function createVisual () {\n        this.visual = new draw.Group({\n            zIndex: this.options.zIndex,\n            visible: valueOrDefault(this.options.visible, true)\n        });\n    };\n\n    ChartElement.prototype.createAnimation = function 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    ChartElement.prototype.appendVisual = function 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    ChartElement.prototype.clipRoot = function clipRoot () {\n        if (this.parent) {\n            return this.parent.clipRoot();\n        }\n\n        return this;\n    };\n\n    ChartElement.prototype.stackRoot = function stackRoot () {\n        if (this.parent) {\n            return this.parent.stackRoot();\n        }\n\n        return this;\n    };\n\n    ChartElement.prototype.stackVisual = function stackVisual (childVisual) {\n        var zIndex = childVisual.options.zIndex || 0;\n        var visuals = this.visual.children;\n        var length = visuals.length;\n        var pos;\n\n        for (pos = 0; pos < length; pos++) {\n            var sibling = visuals[pos];\n            var here = valueOrDefault(sibling.options.zIndex, 0);\n            if (here > zIndex) {\n                break;\n            }\n        }\n\n        this.visual.insert(pos, childVisual);\n    };\n\n    ChartElement.prototype.traverse = function traverse (callback) {\n        var children = this.children;\n        var length = children.length;\n\n        for (var i = 0; i < length; i++) {\n            var child = children[i];\n\n            callback(child);\n            if (child.traverse) {\n                child.traverse(callback);\n            }\n        }\n    };\n\n    ChartElement.prototype.closest = function closest (match) {\n        var element = this;\n        var 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    ChartElement.prototype.renderComplete = function renderComplete () {};\n\n    ChartElement.prototype.hasHighlight = function hasHighlight () {\n        var options = (this.options || {}).highlight;\n        return !(!this.createHighlight || (options && options.visible === false) || this.visible === false);\n    };\n\n    ChartElement.prototype.toggleHighlight = function toggleHighlight (show, opacity) {\n        var this$1 = this;\n\n        var options = (this.options || {}).highlight || {};\n        var customVisual = options.visual;\n        var highlight = this._highlight;\n\n        if (!highlight) {\n            var highlightOptions = {\n                fill: {\n                    color: WHITE,\n                    opacity: opacity || 0.2\n                },\n                stroke: {\n                    color: WHITE,\n                    width: 1,\n                    opacity: opacity || 0.2\n                }\n            };\n\n            if (customVisual) {\n                highlight = this._highlight = customVisual(\n                    Object.assign(this.highlightVisualArgs(), {\n                        createVisual: function () { return this$1.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    ChartElement.prototype.toggleFocusHighlight = function toggleFocusHighlight (show) {\n        var options = (this.options || {}).focusHighlight || {};\n        var focusHighlight = this._focusHighlight;\n\n        if (!show && !focusHighlight) {\n            return;\n        }\n\n        if (!focusHighlight) {\n            var rootBackground = this.getRoot().options.background;\n            var highlightColor = autoTextColor(rootBackground);\n            var focusHighlightOptions = {\n                fill: {\n                    opacity: options.opacity,\n                    color: options.color\n                },\n                stroke: Object.assign({}, {color: highlightColor}, options.border),\n                zIndex: options.zIndex\n            };\n\n            focusHighlight = this._focusHighlight = this.createFocusHighlight(focusHighlightOptions);\n\n            this.appendVisual(focusHighlight);\n        }\n\n        focusHighlight.visible(show);\n    };\n\n    ChartElement.prototype.createGradientOverlay = function createGradientOverlay (element, options, gradientOptions) {\n        var 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    ChartElement.prototype.createGradient = function createGradient (options) {\n        if (this.parent) {\n            return this.parent.createGradient(options);\n        }\n    };\n\n    ChartElement.prototype.supportsPointInactiveOpacity = function supportsPointInactiveOpacity () {\n        return true;\n    };\n\n    return ChartElement;\n}(Class));\n\nChartElement.prototype.options = { };\n\nexport default ChartElement;\n","import { drawing } from '@progress/kendo-drawing';\nimport { isFunction } from './../common';\n\nvar dotsPattern = drawing.dotsPattern;\nvar verticalStripesPattern = drawing.verticalStripesPattern;\nvar crosshatchPattern = drawing.crosshatchPattern;\nvar diagonalStripesPattern = drawing.diagonalStripesPattern;\nvar gridPattern = drawing.gridPattern;\n\nvar patternMap = {\n    dots: dotsPattern,\n    verticalStripes: verticalStripesPattern,\n    crosshatch: crosshatchPattern,\n    diagonalStripes: diagonalStripesPattern,\n    grid: gridPattern\n};\n\nexport function evaluatePattern(options, point) {\n    return isFunction(options) ? options(point) : options;\n}\n\nexport function createPatternFill(options, fill, point) {\n    var patternOptions = evaluatePattern(options, point);\n    var pattern = patternOptions && patternMap[patternOptions.type];\n\n    return pattern ? pattern(Object.assign({}, fill, patternOptions)) : fill;\n}\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';\nimport { createPatternFill } from './pattern';\n\nvar BoxElement = (function (ChartElement) {\n    function BoxElement(options) {\n        ChartElement.call(this, options);\n\n        this.options.margin = getSpacing(this.options.margin);\n        this.options.padding = getSpacing(this.options.padding);\n    }\n\n    if ( ChartElement ) BoxElement.__proto__ = ChartElement;\n    BoxElement.prototype = Object.create( ChartElement && ChartElement.prototype );\n    BoxElement.prototype.constructor = BoxElement;\n\n    BoxElement.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var options = this.options;\n        var width = options.width;\n        var height = options.height;\n        var shrinkToFit = options.shrinkToFit;\n        var hasSetSize = width && height;\n        var margin = options.margin;\n        var padding = options.padding;\n        var borderWidth = options.border.width;\n        var box;\n\n        var reflowPaddingBox = function () {\n            this$1.align(targetBox, X, options.align);\n            this$1.align(targetBox, Y, options.vAlign);\n            this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n        };\n\n        var 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        ChartElement.prototype.reflow.call(this, 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        var children = this.children;\n        for (var i = 0; i < children.length; i++) {\n            var item = children[i];\n            item.reflow(item.box);\n        }\n    };\n\n    BoxElement.prototype.align = function align (targetBox, axis, alignment) {\n        this.box.align(targetBox, axis, alignment);\n    };\n\n    BoxElement.prototype.hasBox = function hasBox () {\n        var options = this.options;\n        return options.border.width || options.background;\n    };\n\n    BoxElement.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        var 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    BoxElement.prototype.visualStyle = function visualStyle () {\n        var options = this.options;\n        var 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: createPatternFill(options.pattern, {\n                color: options.background,\n                opacity: options.opacity\n            }, undefined),\n            cursor: options.cursor\n        };\n    };\n\n    return BoxElement;\n}(ChartElement));\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;","export default function addAccessibilityAttributesToVisual(visual, accessibilityOptions) {\n    if (accessibilityOptions) {\n        visual.options.className = accessibilityOptions.className;\n        visual.options.role = accessibilityOptions.role;\n        visual.options.ariaLabel = accessibilityOptions.ariaLabel;\n        visual.options.ariaRoleDescription = accessibilityOptions.ariaRoleDescription;\n        visual.options.ariaChecked = accessibilityOptions.ariaChecked;\n    }\n}\n","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';\nimport addAccessibilityAttributesToVisual from './utils/add-accessibility-attributes-to-visual';\n\nvar ShapeElement = (function (BoxElement) {\n    function ShapeElement(options, pointData) {\n        BoxElement.call(this, options);\n\n        this.pointData = pointData;\n    }\n\n    if ( BoxElement ) ShapeElement.__proto__ = BoxElement;\n    ShapeElement.prototype = Object.create( BoxElement && BoxElement.prototype );\n    ShapeElement.prototype.constructor = ShapeElement;\n\n    ShapeElement.prototype.getElement = function getElement () {\n        var ref = this;\n        var options = ref.options;\n        var box = ref.paddingBox;\n        var type = options.type;\n        var rotation = options.rotation;\n        var center = box.center();\n        var halfWidth = box.width() / 2;\n        var halfHeight = box.height() / 2;\n\n        if (!options.visible || !this.hasBox()) {\n            return null;\n        }\n\n        var style = this.visualStyle();\n        var 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            var rect = box.toRect();\n            if (type === ROUNDED_RECT) {\n                var 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    ShapeElement.prototype.createElement = function createElement () {\n        var this$1 = this;\n\n        var customVisual = this.options.visual;\n        var pointData = this.pointData || {};\n        var 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: function () { return this$1.getElement(); }\n            });\n        } else {\n            visual = this.getElement();\n        }\n\n        return visual;\n    };\n\n    ShapeElement.prototype.visualOptions = function visualOptions () {\n        var options = this.options;\n        return {\n            background: options.background,\n            border: options.border,\n            margin: options.margin,\n            padding: options.padding,\n            type: options.type,\n            size: options.width,\n            visible: options.visible\n        };\n    };\n\n    ShapeElement.prototype.createVisual = function createVisual () {\n        this.visual = this.createElement();\n\n        addAccessibilityAttributesToVisual(this.visual, this.options.accessibilityOptions);\n    };\n\n    return ShapeElement;\n}(BoxElement));\n\nsetDefaultOptions(ShapeElement, {\n    type: CIRCLE,\n    align: CENTER,\n    vAlign: CENTER\n});\n\nexport default ShapeElement;\n","import { WHITE } from '../common/constants';\n\nvar LINEAR = \"linear\";\nvar RADIAL = \"radial\";\n\nvar 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    var a = Math.min(r.x1, s.x1);\n    var b = Math.max(r.x1, s.x1);\n    var c = Math.min(r.x2, s.x2);\n    var d = Math.max(r.x2, s.x2);\n    var e = Math.min(r.y1, s.y1);\n    var f = Math.max(r.y1, s.y1);\n    var g = Math.min(r.y2, s.y2);\n    var h = Math.max(r.y2, s.y2);\n    var boxes = [];\n\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\nvar RootElement = (function (ChartElement) {\n    function RootElement(options) {\n        ChartElement.call(this, options);\n\n        var rootOptions = this.options;\n        rootOptions.width = parseInt(rootOptions.width, 10);\n        rootOptions.height = parseInt(rootOptions.height, 10);\n\n        this.gradients = {};\n    }\n\n    if ( ChartElement ) RootElement.__proto__ = ChartElement;\n    RootElement.prototype = Object.create( ChartElement && ChartElement.prototype );\n    RootElement.prototype.constructor = RootElement;\n\n    RootElement.prototype.reflow = function reflow () {\n        var ref = this;\n        var options = ref.options;\n        var children = ref.children;\n        var currentBox = new Box(0, 0, options.width, options.height);\n\n        this.box = currentBox.unpad(options.margin);\n\n        for (var i = 0; i < children.length; i++) {\n            children[i].reflow(currentBox);\n            currentBox = boxDiff(currentBox, children[i].box) || new Box();\n        }\n    };\n\n    RootElement.prototype.createVisual = function createVisual () {\n        this.visual = new draw.Group();\n        this.createBackground();\n    };\n\n    RootElement.prototype.createBackground = function createBackground () {\n        var options = this.options;\n        var border = options.border || {};\n        var box = this.box.clone().pad(options.margin).unpad(border.width);\n\n        var 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    RootElement.prototype.getRoot = function getRoot () {\n        return this;\n    };\n\n    RootElement.prototype.createGradient = function createGradient (options) {\n        var gradients = this.gradients;\n        var hashCode = objectKey(options);\n        var gradient = GRADIENTS[options.gradient];\n        var drawingGradient;\n\n        if (gradients[hashCode]) {\n            drawingGradient = gradients[hashCode];\n        } else {\n            var 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    RootElement.prototype.cleanGradients = function cleanGradients () {\n        var gradients = this.gradients;\n        for (var hashCode in gradients) {\n            gradients[hashCode]._observers = [];//add clear observers method in drawing ObserversMixin\n        }\n    };\n\n    RootElement.prototype.size = function size () {\n        var options = this.options;\n        return new Box(0, 0, options.width, options.height);\n    };\n\n    return RootElement;\n}(ChartElement));\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    var stops = options.stops;\n    var usedSpace = ((options.innerRadius / options.radius) * 100);\n    var length = stops.length;\n    var currentStops = [];\n\n    for (var i = 0; i < length; i++) {\n        var 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\nvar FloatElement = (function (ChartElement) {\n    function FloatElement(options) {\n        ChartElement.call(this, options);\n        this._initDirection();\n    }\n\n    if ( ChartElement ) FloatElement.__proto__ = ChartElement;\n    FloatElement.prototype = Object.create( ChartElement && ChartElement.prototype );\n    FloatElement.prototype.constructor = FloatElement;\n\n    FloatElement.prototype._initDirection = function _initDirection () {\n        var options = this.options;\n        if (options.vertical) {\n            this.groupAxis = X;\n            this.elementAxis = Y;\n            this.groupSizeField = WIDTH;\n            this.elementSizeField = HEIGHT;\n            this.groupSpacing = options.spacing;\n            this.elementSpacing = options.vSpacing;\n        } else {\n            this.groupAxis = Y;\n            this.elementAxis = X;\n            this.groupSizeField = HEIGHT;\n            this.elementSizeField = WIDTH;\n            this.groupSpacing = options.vSpacing;\n            this.elementSpacing = options.spacing;\n        }\n    };\n\n    FloatElement.prototype.reflow = function reflow (targetBox) {\n        this.box = targetBox.clone();\n        this.reflowChildren();\n    };\n\n    FloatElement.prototype.reflowChildren = function reflowChildren () {\n        var this$1 = this;\n\n        var ref = this;\n        var box = ref.box;\n        var elementAxis = ref.elementAxis;\n        var groupAxis = ref.groupAxis;\n        var elementSizeField = ref.elementSizeField;\n        var groupSizeField = ref.groupSizeField;\n        var ref$1 = this.groupOptions();\n        var groups = ref$1.groups;\n        var groupsSize = ref$1.groupsSize;\n        var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n        var groupsCount = groups.length;\n        var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n\n        if (groupsCount) {\n            var groupStart = groupsStart;\n\n            for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n                var group = groups[groupIdx];\n                var groupElements = group.groupElements;\n                var elementStart = box[elementAxis + 1];\n                var groupElementsCount = groupElements.length;\n\n                for (var idx = 0; idx < groupElementsCount; idx++) {\n                    var element = groupElements[idx];\n                    var elementSize = this$1.elementSize(element);\n                    var groupElementStart = groupStart + this$1.alignStart(elementSize[groupSizeField], group.groupSize);\n\n                    var 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$1.elementSpacing;\n                }\n                groupStart += group.groupSize + this$1.groupSpacing;\n            }\n            box[groupAxis + 1] = groupsStart;\n            box[groupAxis + 2] = groupsStart + groupsSize;\n            box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n        }\n    };\n\n    FloatElement.prototype.alignStart = function alignStart (size, maxSize) {\n        var start = 0;\n        var align = this.options.align;\n        if (align === RIGHT || align === BOTTOM) {\n            start = maxSize - size;\n        } else if (align === CENTER) {\n            start = (maxSize - size) / 2;\n        }\n        return start;\n    };\n\n    FloatElement.prototype.groupOptions = function groupOptions () {\n        var this$1 = this;\n\n        var ref = this;\n        var box = ref.box;\n        var children = ref.children;\n        var elementSizeField = ref.elementSizeField;\n        var groupSizeField = ref.groupSizeField;\n        var elementSpacing = ref.elementSpacing;\n        var groupSpacing = ref.groupSpacing;\n        var maxSize = round(box[elementSizeField]());\n        var childrenCount = children.length;\n        var groups = [];\n\n        var groupSize = 0;\n        var groupElementsSize = 0;\n        var groupsSize = 0;\n        var maxGroupElementsSize = 0;\n        var groupElements = [];\n\n        for (var idx = 0; idx < childrenCount; idx++) {\n            var element = children[idx];\n            if (!element.box) {\n                element.reflow(box);\n            }\n\n            var elementSize = this$1.elementSize(element);\n            if (this$1.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    FloatElement.prototype.elementSize = function elementSize (element) {\n        return {\n            width: element.box.width(),\n            height: element.box.height()\n        };\n    };\n\n    FloatElement.prototype.createVisual = function createVisual () {};\n\n    return FloatElement;\n}(ChartElement));\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\nvar DrawingText = draw.Text;\n\nvar Text = (function (ChartElement) {\n    function Text(content, options) {\n        ChartElement.call(this, options);\n\n        this.content = content;\n\n        // Calculate size\n        this.reflow(new Box());\n    }\n\n    if ( ChartElement ) Text.__proto__ = ChartElement;\n    Text.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Text.prototype.constructor = Text;\n\n    Text.prototype.reflow = function reflow (targetBox) {\n        var options = this.options;\n        var 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    Text.prototype.createVisual = function createVisual () {\n        var ref = this.options;\n        var font = ref.font;\n        var color = ref.color;\n        var opacity = ref.opacity;\n        var cursor = ref.cursor;\n        var stroke = ref.stroke;\n        var paintOrder = ref.paintOrder;\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            stroke: stroke,\n            paintOrder: paintOrder\n        });\n    };\n\n    return Text;\n}(ChartElement));\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    var origin = rect.origin;\n    var 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\nvar ROWS_SPLIT_REGEX = /\\n/m;\n\nvar TextBox = (function (BoxElement) {\n    function TextBox(content, options, data) {\n        BoxElement.call(this, 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    if ( BoxElement ) TextBox.__proto__ = BoxElement;\n    TextBox.prototype = Object.create( BoxElement && BoxElement.prototype );\n    TextBox.prototype.constructor = TextBox;\n\n    TextBox.prototype._initContainer = function _initContainer () {\n        var options = this.options;\n        var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n        var floatElement = new FloatElement({ vertical: true, align: options.align, wrap: false });\n        var textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\n\n        this.container = floatElement;\n        this.append(floatElement);\n\n        for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n            var text = new Text(rows[rowIdx].trim(), textOptions);\n            floatElement.append(text);\n        }\n    };\n\n    TextBox.prototype.reflow = function reflow (targetBox) {\n        var options = this.options;\n        var visualFn = options.visual;\n        this.container.options.align = options.align;\n\n        if (visualFn && !this._boxReflow) {\n            var visualBox = targetBox;\n            if (!visualBox.hasSize()) {\n                this._boxReflow = true;\n                this.reflow(visualBox);\n                this._boxReflow = false;\n                visualBox = this.box;\n            }\n            var visual = this.visual = visualFn(this.visualContext(visualBox));\n\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            BoxElement.prototype.reflow.call(this, targetBox);\n\n            if (options.rotation) {\n                var margin = getSpacing(options.margin);\n                var 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    TextBox.prototype.createVisual = function createVisual () {\n        var 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            var box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n            this.visual.append(box);\n        }\n    };\n\n    TextBox.prototype.renderVisual = function renderVisual () {\n        if (!this.options.visible) {\n            return;\n        }\n\n        if (this.options.visual) {\n            var visual = this.visual;\n            if (visual && !defined(visual.options.noclip)) {\n                visual.options.noclip = this.options.noclip;\n            }\n            this.addVisual();\n            this.createAnimation();\n        } else {\n            BoxElement.prototype.renderVisual.call(this);\n        }\n    };\n\n    TextBox.prototype.visualContext = function visualContext (targetBox) {\n        var this$1 = this;\n\n        var context = {\n            text: this.content,\n            rect: targetBox.toRect(),\n            sender: this.getSender(),\n            options: this.options,\n            createVisual: function () {\n                this$1._boxReflow = true;\n                this$1.reflow(targetBox);\n                this$1._boxReflow = false;\n                return this$1.getDefaultVisual();\n            }\n        };\n        if (this.data) {\n            Object.assign(context, this.data);\n        }\n\n        return context;\n    };\n\n    TextBox.prototype.getDefaultVisual = function getDefaultVisual () {\n        this.createVisual();\n        this.renderChildren();\n        var visual = this.visual;\n        delete this.visual;\n        return visual;\n    };\n\n    TextBox.prototype.rotate = function rotate () {\n        var options = this.options;\n        this.box.rotate(options.rotation);\n        this.align(this.targetBox, X, options.align);\n        this.align(this.targetBox, Y, options.vAlign);\n        return this.box;\n    };\n\n    TextBox.prototype.rotationTransform = function rotationTransform () {\n        var rotation = this.options.rotation;\n        if (!rotation) {\n            return null;\n        }\n\n        var ref = this.normalBox.center();\n        var cx = ref.x;\n        var cy = ref.y;\n        var 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    return TextBox;\n}(BoxElement));\n\nexport default TextBox;","import ChartElement from './chart-element';\nimport TextBox from './text-box';\n\nimport { X, BLACK, TOP, CENTER, BOTTOM } from '../common/constants';\nimport { getSpacing, setDefaultOptions } from '../common';\n\nvar Title = (function (ChartElement) {\n    function Title(options) {\n        ChartElement.call(this, options);\n\n        this._textBox = new TextBox(this.options.text, Object.assign({}, this.options, {\n            vAlign: this.options.position\n        }));\n\n        this.append(this._textBox);\n    }\n\n    if ( ChartElement ) Title.__proto__ = ChartElement;\n    Title.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Title.prototype.constructor = Title;\n\n    Title.prototype.reflow = function reflow (targetBox) {\n        ChartElement.prototype.reflow.call(this, targetBox);\n        this.box.snapTo(targetBox, X);\n    };\n\n    Title.buildTitle = function buildTitle (options, defaultOptions) {\n        var titleOptions = options;\n\n        if (typeof options === \"string\") {\n            titleOptions = { text: options };\n        }\n\n        titleOptions = Object.assign({ visible: true }, defaultOptions, titleOptions);\n\n        var title;\n        if (titleOptions && titleOptions.visible && titleOptions.text) {\n            title = new Title(titleOptions);\n        }\n\n        return title;\n    };\n\n    Title.orderTitles = function orderTitles (titles) {\n        var items = [].concat(titles);\n        var top = items.filter(function (item) { return item && item.options.position !== BOTTOM; });\n        var bottom = items.filter(function (item) { return item && item.options.position === BOTTOM; });\n\n        collapseVerticalMargins(top);\n        collapseVerticalMargins(bottom);\n\n        bottom.reverse();\n        return top.concat(bottom);\n    };\n\n    return Title;\n}(ChartElement));\n\nfunction collapseVerticalMargins(items) {\n    for (var i = 1; i < items.length; i++) {\n        var box = items[i]._textBox;\n        var prevBox = items[i - 1]._textBox;\n        prevBox.options.margin = Object.assign(getSpacing(prevBox.options.margin), { bottom: 0 });\n        box.options.margin = Object.assign(getSpacing(box.options.margin), { top: 0 });\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;\n","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\nvar AxisLabel = (function (TextBox) {\n    function AxisLabel(value, text, index, dataItem, options) {\n        TextBox.call(this, 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    if ( TextBox ) AxisLabel.__proto__ = TextBox;\n    AxisLabel.prototype = Object.create( TextBox && TextBox.prototype );\n    AxisLabel.prototype.constructor = AxisLabel;\n\n    AxisLabel.prototype.visualContext = function visualContext (targetBox) {\n        var context = TextBox.prototype.visualContext.call(this, 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    AxisLabel.prototype.click = function 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    AxisLabel.prototype.rotate = function rotate () {\n        if (this.options.alignRotation !== CENTER) {\n            var box = this.normalBox.toRect();\n            var transform = this.rotationTransform();\n\n            this.box = rectToBox(box.bbox(transform.matrix()));\n        } else {\n            TextBox.prototype.rotate.call(this);\n        }\n\n        return this.box;\n    };\n\n    AxisLabel.prototype.rotationTransform = function rotationTransform () {\n        var options = this.options;\n        var rotation = options.rotation;\n        if (!rotation) {\n            return null;\n        }\n\n        if (options.alignRotation === CENTER) {\n            return TextBox.prototype.rotationTransform.call(this);\n        }\n\n        var rotationMatrix = geom.transform().rotate(rotation).matrix();\n        var box = this.normalBox.toRect();\n        var rect = this.targetBox.toRect();\n\n        var rotationOrigin = options.rotationOrigin || TOP;\n        var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n        var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n        var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n\n        var topLeft = box.topLeft().transformCopy(rotationMatrix);\n        var topRight = box.topRight().transformCopy(rotationMatrix);\n        var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n        var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n        var rotatedBox = geom.Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n\n        var translate = {};\n        translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n\n        var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n        var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n\n        var 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        var 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    return AxisLabel;\n}(TextBox));\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\nvar DEFAULT_ICON_SIZE = 7;\nvar DEFAULT_LABEL_COLOR = \"#fff\";\n\nvar Note = (function (BoxElement) {\n    function Note(fields, options, chartService) {\n        BoxElement.call(this, options);\n\n        this.fields = fields;\n        this.chartService = chartService;\n\n        this.render();\n    }\n\n    if ( BoxElement ) Note.__proto__ = BoxElement;\n    Note.prototype = Object.create( BoxElement && BoxElement.prototype );\n    Note.prototype.constructor = Note;\n\n    Note.prototype.hide = function hide () {\n        this.options.visible = false;\n    };\n\n    Note.prototype.show = function show () {\n        this.options.visible = true;\n    };\n\n    Note.prototype.render = function render () {\n        var this$1 = this;\n\n        var options = this.options;\n\n        if (options.visible) {\n            var label = options.label;\n            var icon = options.icon;\n            var box = new Box();\n            var childAlias = function () { return this$1; };\n            var size = icon.size;\n            var text = this.fields.text;\n            var width, height;\n\n            if (defined(label) && label.visible) {\n                var noteTemplate = getTemplate(label);\n                if (noteTemplate) {\n                    text = noteTemplate(this.fields);\n                } else if (label.format) {\n                    text = this.chartService.format.auto(label.format, text);\n                }\n\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            var 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    Note.prototype.reflow = function reflow (targetBox) {\n        var ref = this;\n        var options = ref.options;\n        var label = ref.label;\n        var marker = ref.marker;\n        var wrapperBox = ref.wrapperBox;\n        var center = targetBox.center();\n        var length = options.line.length;\n        var position = options.position;\n\n        // TODO: Review\n        if (options.visible) {\n            var 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    Note.prototype.createVisual = function createVisual () {\n        BoxElement.prototype.createVisual.call(this);\n        this.visual.options.noclip = this.options.noclip;\n\n        if (this.options.visible) {\n            this.createLine();\n        }\n    };\n\n    Note.prototype.renderVisual = function renderVisual () {\n        var this$1 = this;\n\n        var options = this.options;\n        var 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: function () {\n                    this$1.createVisual();\n                    this$1.renderChildren();\n                    var defaultVisual = this$1.visual;\n                    delete this$1.visual;\n                    return defaultVisual;\n                }\n            }));\n            this.addVisual();\n        } else {\n            BoxElement.prototype.renderVisual.call(this);\n        }\n    };\n\n    Note.prototype.createLine = function createLine () {\n        var options = this.options.line;\n\n        if (this.linePoints) {\n            var 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    Note.prototype.click = function click (widget, e) {\n        var args = this.eventArgs(e);\n\n        if (!widget.trigger(NOTE_CLICK, args)) {\n            e.preventDefault();\n        }\n    };\n\n    Note.prototype.over = function over (widget, e) {\n        var args = this.eventArgs(e);\n\n        if (!widget.trigger(NOTE_HOVER, args)) {\n            e.preventDefault();\n        }\n    };\n\n    Note.prototype.out = function out (widget, e) {\n        var args = this.eventArgs(e);\n\n        widget.trigger(NOTE_LEAVE, args);\n    };\n\n    Note.prototype.eventArgs = function eventArgs (e) {\n        var 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    return Note;\n}(BoxElement));\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;","var defaultImplementation = {\n    format: function (format, value) { return value; },\n\n    toString: function (value) { return value; },\n\n    parseDate: function (value) { return new Date(value); },\n\n    firstDay: function () { return 0; }\n};\n\nvar current = defaultImplementation;\n\nvar IntlService = function IntlService () {};\n\nvar staticAccessors = { implementation: { configurable: true } };\n\nIntlService.register = function register (userImplementation) {\n    current = userImplementation;\n};\n\nstaticAccessors.implementation.get = function () {\n    return current;\n};\n\nObject.defineProperties( IntlService, staticAccessors );\n\nexport default IntlService;\n","import IntlService from './intl-service';\nimport { FORMAT_REGEX } from '../common/constants';\nimport { isString } from '../common';\n\n// eslint-disable-next-line no-useless-escape\nvar FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n\nvar FormatService = function FormatService(intlService) {\n    this._intlService = intlService;\n};\n\nvar prototypeAccessors = { intl: { configurable: true } };\n\nprototypeAccessors.intl.get = function () {\n    return this._intlService || IntlService.implementation;\n};\n\nprototypeAccessors.intl.set = function (value) {\n    this._intlService = value;\n};\n\nFormatService.prototype.auto = function auto (formatString) {\n        var values = [], len = arguments.length - 1;\n        while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n    var intl = this.intl;\n\n    if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n        return intl.format.apply(intl, [ formatString ].concat( values ));\n    }\n\n    return intl.toString(values[0], formatString);\n};\n\nFormatService.prototype.localeAuto = function localeAuto (formatString, values, locale) {\n    var intl = this.intl;\n    var result;\n\n    if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n        result = formatString.replace(FORMAT_REPLACE_REGEX, function(match, index, placeholderFormat) {\n            var value = values[parseInt(index, 10)];\n\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\nObject.defineProperties( FormatService.prototype, prototypeAccessors );\n\nexport default FormatService;","import IntlService from './intl-service';\nimport FormatService from './format-service';\n\nvar ChartService = function ChartService(chart, context) {\n    if ( context === void 0 ) context = {};\n\n    this._intlService = context.intlService;\n    this.sender = context.sender || chart;\n    this.format = new FormatService(context.intlService);\n    this.chart = chart;\n    this.rtl = Boolean(context.rtl);\n};\n\nvar prototypeAccessors = { intl: { configurable: true } };\n\nprototypeAccessors.intl.get = function () {\n    return this._intlService || IntlService.implementation;\n};\n\nprototypeAccessors.intl.set = function (value) {\n    this._intlService = value;\n    this.format.intl = value;\n};\n\nChartService.prototype.notify = function notify (name, args) {\n    if (this.chart) {\n        this.chart.trigger(name, args);\n    }\n};\n\nChartService.prototype.isPannable = function isPannable (axis) {\n    var pannable = ((this.chart || {}).options || {}).pannable;\n    return pannable && pannable.lock !== axis;\n};\n\nObject.defineProperties( ChartService.prototype, prototypeAccessors );\n\nexport default ChartService;\n","import { UserEvents } from '../common';\n\nvar current;\n\nvar DomEventsBuilder = function DomEventsBuilder () {};\n\nDomEventsBuilder.register = function register (userImplementation) {\n    current = userImplementation;\n};\n\nDomEventsBuilder.create = function create (element, events) {\n    var builder;\n\n    if (current) {\n        builder = current.create(element, events);\n    } else {\n        builder = new UserEvents(element, Object.assign({}, {multiTouch: true},\n\n            events));\n    }\n\n    return builder;\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    var tickX = options.tickX;\n    var tickY = options.tickY;\n    var position = options.position;\n\n    var 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    var lineStart = options.lineStart;\n    var lineEnd = options.lineEnd;\n    var position = options.position;\n\n    var 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\nvar Axis = (function (ChartElement) {\n    function Axis(options, chartService) {\n        if ( chartService === void 0 ) chartService = new ChartService();\n\n        ChartElement.call(this, 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    if ( ChartElement ) Axis.__proto__ = ChartElement;\n    Axis.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Axis.prototype.constructor = Axis;\n\n    Axis.prototype.initFields = function initFields () {\n    };\n\n    // abstract labelsCount(): Number\n    // abstract createAxisLabel(index, options): AxisLabel\n\n    Axis.prototype.labelsRange = function labelsRange () {\n        return {\n            min: this.options.labels.skip,\n            max: this.labelsCount()\n        };\n    };\n\n    Axis.prototype.normalizeLabelRotation = function normalizeLabelRotation (labelOptions) {\n        var rotation = labelOptions.rotation;\n\n        if (isObject(rotation)) {\n            labelOptions.alignRotation = rotation.align;\n            labelOptions.rotation = rotation.angle;\n        }\n    };\n\n    Axis.prototype.createLabels = function createLabels () {\n        var this$1 = this;\n\n        var options = this.options;\n        var align = options.vertical ? RIGHT : CENTER;\n        var labelOptions = deepExtend({ }, options.labels, {\n            align: align,\n            zIndex: options.zIndex\n        });\n        var step = Math.max(1, labelOptions.step);\n\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            var range = this.labelsRange();\n            for (var idx = range.min; idx < range.max; idx += step) {\n                var labelContext = { index: idx, count: range.max };\n                var label = this$1.createAxisLabel(idx, labelOptions, labelContext);\n                if (label) {\n                    this$1.append(label);\n                    this$1.labels.push(label);\n                }\n            }\n        }\n    };\n\n    Axis.prototype.clearLabels = function clearLabels () {\n        this.children = grep(this.children, function (child) { return !(child instanceof AxisLabel); });\n        this.labels = [];\n    };\n\n    Axis.prototype.clearTitle = function clearTitle () {\n        var this$1 = this;\n\n        if (this.title) {\n            this.children = grep(this.children, function (child) { return child !== this$1.title; });\n            this.title = undefined;\n        }\n    };\n\n    Axis.prototype.clear = function clear () {\n        this.clearLabels();\n        this.clearTitle();\n    };\n\n    Axis.prototype.lineBox = function lineBox () {\n        var ref = this;\n        var options = ref.options;\n        var box = ref.box;\n        var vertical = options.vertical;\n        var mirror = options.labels.mirror;\n        var axisX = mirror ? box.x1 : box.x2;\n        var axisY = mirror ? box.y2 : box.y1;\n        var lineWidth = options.line.width || 0;\n\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    Axis.prototype.createTitle = function createTitle () {\n        var options = this.options;\n        var titleOptions = deepExtend({\n            rotation: options.vertical ? -90 : 0,\n            text: \"\",\n            zIndex: 1,\n            visualSize: true\n        }, options.title);\n\n        if (titleOptions.visible && titleOptions.text) {\n            var title = new TextBox(titleOptions.text, titleOptions);\n            this.append(title);\n            this.title = title;\n        }\n    };\n\n    Axis.prototype.createNotes = function createNotes () {\n        var this$1 = this;\n\n        var options = this.options;\n        var notes = options.notes;\n        var items = notes.data || [];\n\n        this.notes = [];\n\n        for (var i = 0; i < items.length; i++) {\n            var item = deepExtend({}, notes, items[i]);\n            item.value = this$1.parseNoteValue(item.value);\n\n            var note = new Note({\n                value: item.value,\n                text: item.label.text,\n                dataItem: item\n            }, item, this$1.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$1.append(note);\n                this$1.notes.push(note);\n            }\n        }\n    };\n\n    Axis.prototype.parseNoteValue = function parseNoteValue (value) {\n        return value;\n    };\n\n    Axis.prototype.renderVisual = function renderVisual () {\n        ChartElement.prototype.renderVisual.call(this);\n\n        this.createPlotBands();\n    };\n\n    Axis.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        this.createBackground();\n        this.createLine();\n    };\n\n    Axis.prototype.gridLinesVisual = function gridLinesVisual () {\n        var 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    Axis.prototype.createTicks = function createTicks (lineGroup) {\n        var options = this.options;\n        var lineBox = this.lineBox();\n        var mirror = options.labels.mirror;\n        var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n        var tickLineOptions = {\n            // TODO\n            // _alignLines: options._alignLines,\n            vertical: options.vertical\n        };\n\n        function render(tickPositions, tickOptions, skipUnit) {\n            var count = tickPositions.length;\n            var step = Math.max(1, tickOptions.step);\n\n            if (tickOptions.visible) {\n                for (var i = tickOptions.skip; i < count; i += step) {\n                    if (defined(skipUnit) && (i % skipUnit === 0)) {\n                        continue;\n                    }\n\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    Axis.prototype.createLine = function createLine () {\n        var options = this.options;\n        var line = options.line;\n        var lineBox = this.lineBox();\n\n        if (line.width > 0 && line.visible) {\n            var 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            var group = this._lineGroup = new draw.Group();\n            group.append(path);\n\n            this.visual.append(group);\n            this.createTicks(group);\n        }\n    };\n\n    Axis.prototype.getActualTickSize = function getActualTickSize () {\n        var options = this.options;\n        var 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    Axis.prototype.createBackground = function createBackground () {\n        var ref = this;\n        var options = ref.options;\n        var box = ref.box;\n        var 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    Axis.prototype.createPlotBands = function createPlotBands () {\n        var this$1 = this;\n\n        var options = this.options;\n        var plotBands = options.plotBands || [];\n        var vertical = options.vertical;\n        var plotArea = this.plotArea;\n\n        if (plotBands.length === 0) {\n            return;\n        }\n\n        var group = this._plotbandGroup = new draw.Group({\n            zIndex: -1\n        });\n\n        var altAxis = grep(this.pane.axes, function (axis) { return axis.options.vertical !== this$1.options.vertical; })[0];\n\n        for (var idx = 0; idx < plotBands.length; idx++) {\n            var item = plotBands[idx];\n            var slotX = (void 0), slotY = (void 0);\n            var labelOptions = item.label;\n            var label = (void 0);\n\n            if (vertical) {\n                slotX = (altAxis || plotArea.axisX).lineBox();\n                slotY = this$1.getSlot(item.from, item.to, true);\n            } else {\n                slotX = this$1.getSlot(item.from, item.to, true);\n                slotY = (altAxis || plotArea.axisY).lineBox();\n            }\n\n            if (labelOptions) {\n                labelOptions.vAlign = labelOptions.position || LEFT;\n                label = this$1.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                var bandRect = new geom.Rect(\n                    [ slotX.x1, slotY.y1 ],\n                    [ slotX.width(), slotY.height() ]\n                );\n\n                var 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    Axis.prototype.createPlotBandLabel = function createPlotBandLabel (label, item, box) {\n\n        if (label.visible === false) {\n            return null;\n        }\n\n        var text = label.text;\n        var textbox;\n\n        if (defined(label) && label.visible) {\n            var 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    Axis.prototype.createGridLines = function createGridLines (altAxis) {\n        var options = this.options;\n        var minorGridLines = options.minorGridLines;\n        var majorGridLines = options.majorGridLines;\n        var minorUnit = options.minorUnit;\n        var vertical = options.vertical;\n        var axisLineVisible = altAxis.options.line.visible;\n        var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n        var lineBox = altAxis.lineBox();\n        var linePos = lineBox[vertical ? \"y1\" : \"x1\"];\n        var lineOptions = {\n            lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n            lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n            vertical: vertical\n        };\n        var majorTicks = [];\n\n        var container = this.gridLinesVisual();\n\n        function render(tickPositions, gridLine, skipUnit) {\n            var count = tickPositions.length;\n            var step = Math.max(1, gridLine.step);\n\n            if (gridLine.visible) {\n                for (var i = gridLine.skip; i < count; i += step) {\n                    var pos = round(tickPositions[i]);\n                    if (!inArray(pos, majorTicks)) {\n                        if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n                            lineOptions.position = pos;\n                            container.append(createAxisGridLine(lineOptions, gridLine));\n\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    Axis.prototype.reflow = function reflow (box) {\n        var ref = this;\n        var options = ref.options;\n        var labels = ref.labels;\n        var title = ref.title;\n        var vertical = options.vertical;\n        var count = labels.length;\n        var sizeFn = vertical ? WIDTH : HEIGHT;\n        var titleSize = title ? title.box[sizeFn]() : 0;\n        var space = this.getActualTickSize() + options.margin + titleSize;\n        var rootBox = (this.getRoot() || {}).box || box;\n        var boxSize = rootBox[sizeFn]();\n        var maxLabelSize = 0;\n\n        for (var i = 0; i < count; i++) {\n            var labelSize = labels[i].box[sizeFn]();\n            if (labelSize + space <= boxSize) {\n                maxLabelSize = Math.max(maxLabelSize, labelSize);\n            }\n        }\n\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    Axis.prototype.getLabelsTickPositions = function getLabelsTickPositions () {\n        return this.getMajorTickPositions();\n    };\n\n    Axis.prototype.labelTickIndex = function labelTickIndex (label) {\n        return label.index;\n    };\n\n    Axis.prototype.arrangeLabels = function arrangeLabels () {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var labels = ref.labels;\n        var labelsBetweenTicks = this.labelsBetweenTicks();\n        var vertical = options.vertical;\n        var mirror = options.labels.mirror;\n        var tickPositions = this.getLabelsTickPositions();\n\n        for (var idx = 0; idx < labels.length; idx++) {\n            var label = labels[idx];\n            var tickIx = this$1.labelTickIndex(label);\n            var labelSize = vertical ? label.box.height() : label.box.width();\n            var firstTickPosition = tickPositions[tickIx];\n            var nextTickPosition = tickPositions[tickIx + 1];\n            var positionStart = (void 0), positionEnd = (void 0);\n\n            if (vertical) {\n                if (labelsBetweenTicks) {\n                    var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n                    positionStart = middle - (labelSize / 2);\n                } else {\n                    positionStart = firstTickPosition - (labelSize / 2);\n                }\n\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$1.positionLabel(label, mirror, positionStart, positionEnd);\n        }\n    };\n\n    Axis.prototype.positionLabel = function positionLabel (label, mirror, positionStart, positionEnd) {\n        if ( positionEnd === void 0 ) positionEnd = positionStart;\n\n        var options = this.options;\n        var vertical = options.vertical;\n        var lineBox = this.lineBox();\n        var labelOffset = this.getActualTickSize() + options.margin;\n        var labelBox;\n\n        if (vertical) {\n            var 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            var 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    Axis.prototype.autoRotateLabelAngle = function 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    Axis.prototype.autoRotateLabels = function autoRotateLabels () {\n        var this$1 = this;\n\n        if (!this.options.autoRotateLabels || this.options.vertical) {\n            return false;\n        }\n\n        var tickPositions = this.getMajorTickPositions();\n        var labels = this.labels;\n        var limit = Math.min(labels.length, tickPositions.length - 1);\n        var angle = 0;\n\n        for (var idx = 0; idx < limit; idx++) {\n            var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n            var labelBox = labels[idx].box;\n            var labelAngle = this$1.autoRotateLabelAngle(labelBox, width);\n\n            if (labelAngle !== 0) {\n                angle = labelAngle;\n            }\n\n            if (angle === -90) {\n                break;\n            }\n        }\n\n        if (angle !== 0) {\n            for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n                labels[idx$1].options.rotation = angle;\n                labels[idx$1].reflow(new Box());\n            }\n\n            return true;\n        }\n    };\n\n    Axis.prototype.arrangeTitle = function arrangeTitle () {\n        var ref = this;\n        var options = ref.options;\n        var title = ref.title;\n        var mirror = options.labels.mirror;\n        var vertical = options.vertical;\n\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    Axis.prototype.arrangeNotes = function arrangeNotes () {\n        var this$1 = this;\n\n        for (var idx = 0; idx < this.notes.length; idx++) {\n            var item = this$1.notes[idx];\n            var value = item.options.value;\n            var slot = (void 0);\n\n            if (defined(value)) {\n                if (this$1.shouldRenderNote(value)) {\n                    item.show();\n                } else {\n                    item.hide();\n                }\n\n                slot = this$1.noteSlot(value);\n            } else {\n                item.hide();\n            }\n\n            item.reflow(slot || this$1.lineBox());\n        }\n    };\n\n    Axis.prototype.noteSlot = function noteSlot (value) {\n        return this.getSlot(value);\n    };\n\n    Axis.prototype.alignTo = function alignTo (secondAxis) {\n        var lineBox = secondAxis.lineBox();\n        var vertical = this.options.vertical;\n        var 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    Axis.prototype.axisLabelText = function axisLabelText (value, options, context) {\n        var this$1 = this;\n\n        var text;\n        var tmpl = getTemplate(options);\n        var defaultText = function () {\n            if (!options.format) {\n                return value;\n            }\n\n            return this$1.chartService.format.localeAuto(\n                options.format, [ value ], options.culture\n            );\n        };\n\n        if (tmpl) {\n            var templateContext = Object.assign({}, context, {\n                get text() { return defaultText(); },\n                value: 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    Axis.prototype.slot = function slot (from , to, limit) {\n        var slot = this.getSlot(from, to, limit);\n        if (slot) {\n            return slot.toRect();\n        }\n    };\n\n    Axis.prototype.contentBox = function contentBox () {\n        var box = this.box.clone();\n        var labels = this.labels;\n        if (labels.length) {\n            var axis = this.options.vertical ? Y : X;\n            if (this.chartService.isPannable(axis)) {\n                var offset = this.maxLabelOffset();\n                box[axis + 1] -= offset.start;\n                box[axis + 2] += offset.end;\n            } else {\n                if (labels[0].options.visible) {\n                    box.wrap(labels[0].box);\n                }\n                var lastLabel = labels[labels.length - 1];\n                if (lastLabel.options.visible) {\n                    box.wrap(lastLabel.box);\n                }\n            }\n        }\n\n        return box;\n    };\n\n    Axis.prototype.maxLabelOffset = function maxLabelOffset () {\n        var this$1 = this;\n\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var reverse = ref.reverse;\n        var labelsBetweenTicks = this.labelsBetweenTicks();\n        var tickPositions = this.getLabelsTickPositions();\n        var offsetField = vertical ? Y : X;\n        var labels = this.labels;\n        var startPosition = reverse ? 1 : 0;\n        var endPosition = reverse ? 0 : 1;\n        var maxStartOffset = 0;\n        var maxEndOffset = 0;\n\n        for (var idx = 0; idx < labels.length; idx++) {\n            var label = labels[idx];\n            var tickIx = this$1.labelTickIndex(label);\n            var startTick = (void 0), endTick = (void 0);\n\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    Axis.prototype.limitRange = function limitRange (from, to, min, max, offset) {\n        var 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        var rangeSize = to - from;\n        var minValue = from;\n        var 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    Axis.prototype.valueRange = function valueRange () {\n        return {\n            min: this.seriesMin,\n            max: this.seriesMax\n        };\n    };\n\n    Axis.prototype.lineDir = function lineDir () {\n        /*\n         * Axis line direction:\n         *   * Vertical: up.\n         *   * Horizontal: right.\n         */\n\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var reverse = ref.reverse;\n        return (vertical ? -1 : 1) * (reverse ? -1 : 1);\n    };\n\n    Axis.prototype.lineInfo = function lineInfo () {\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var lineBox = this.lineBox();\n        var lineSize = vertical ? lineBox.height() : lineBox.width();\n        var axis = vertical ? Y : X;\n        var axisDir = this.lineDir();\n        var startEdge = axisDir === 1 ? 1 : 2;\n        var axisOrigin = axis + startEdge.toString();\n        var lineStart = lineBox[axisOrigin];\n\n        return {\n            axis: axis,\n            axisOrigin: axisOrigin,\n            axisDir: axisDir,\n            lineBox: lineBox,\n            lineSize: lineSize,\n            lineStart: lineStart\n        };\n    };\n\n    Axis.prototype.pointOffset = function pointOffset (point) {\n        var ref = this.lineInfo();\n        var axis = ref.axis;\n        var axisDir = ref.axisDir;\n        var axisOrigin = ref.axisOrigin;\n        var lineBox = ref.lineBox;\n        var lineSize = ref.lineSize;\n        var relative = axisDir > 0 ? point[axis] - lineBox[axisOrigin] : lineBox[axisOrigin] - point[axis];\n        var 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    Axis.prototype.scaleToDelta = function scaleToDelta (rawScale, range) {\n        // Scale >= 1 would result in axis range of 0.\n        // Scale <= -1 would reverse the scale direction.\n        var MAX_SCALE = 0.999;\n        var scale = limitValue(rawScale, -MAX_SCALE, MAX_SCALE);\n\n        var 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    Axis.prototype.labelsBetweenTicks = function labelsBetweenTicks () {\n        return !this.options.justified;\n    };\n\n    //add legacy fields to the options that are no longer generated by default\n    Axis.prototype.prepareUserOptions = function prepareUserOptions () {\n    };\n\n    return Axis;\n}(ChartElement));\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 var MILLISECONDS = \"milliseconds\";\nexport var SECONDS = \"seconds\";\nexport var MINUTES = \"minutes\";\nexport var HOURS = \"hours\";\nexport var DAYS = \"days\";\nexport var WEEKS = \"weeks\";\nexport var MONTHS = \"months\";\nexport var YEARS = \"years\";\n\nexport var TIME_PER_MILLISECOND = 1;\nexport var TIME_PER_SECOND = 1000;\nexport var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\nexport var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\nexport var TIME_PER_DAY = 24 * TIME_PER_HOUR;\nexport var TIME_PER_WEEK = 7 * TIME_PER_DAY;\nexport var TIME_PER_MONTH = 31 * TIME_PER_DAY;\nexport var TIME_PER_YEAR = 365 * TIME_PER_DAY;\nexport var TIME_PER_UNIT = {\n    \"years\": TIME_PER_YEAR,\n    \"months\": TIME_PER_MONTH,\n    \"weeks\": TIME_PER_WEEK,\n    \"days\": TIME_PER_DAY,\n    \"hours\": TIME_PER_HOUR,\n    \"minutes\": TIME_PER_MINUTE,\n    \"seconds\": TIME_PER_SECOND,\n    \"milliseconds\": TIME_PER_MILLISECOND\n};\n\n","import { TIME_PER_MINUTE } from './constants';\n\nexport default function absoluteDateDiff(a, b) {\n    var diff = a.getTime() - b;\n    var 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    var 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    var roundedDate = new Date(date);\n\n    roundedDate.setMinutes(0, 0, 0);\n\n    var 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    var result = dateValue;\n\n    if (dateValue) {\n        var date = toDate(dateValue);\n        var 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) {\n    if ( weekStartDay === void 0 ) weekStartDay = 0;\n\n    var daysToSubtract = 0;\n    var 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    var 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        var result = [];\n        for (var 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    var date = toDate(value);\n    var startDate = toDate(start);\n    var 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    var 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    var result;\n    if (isString(date)) {\n        result = intlService.parseDate(date) || toDate(date);\n    } else {\n        result = toDate(date);\n    }\n    return result;\n}\n","import parseDate from './parse-date';\n\nimport { isArray } from '../common';\n\nexport default function parseDates(intlService, dates) {\n    if (isArray(dates)) {\n        var result = [];\n        for (var idx = 0; idx < dates.length; idx++) {\n            result.push(parseDate(intlService, dates[idx]));\n        }\n\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\nvar MIN_CATEGORY_POINTS_RANGE = 0.01;\nvar MIN_CATEGORY_RANGE = 0.1;\n\nfunction indexOf(value, arr) {\n    if (value instanceof Date) {\n        var length = arr.length;\n        for (var idx = 0; idx < length; idx++) {\n            if (dateEquals(arr[idx], value)) {\n                return idx;\n            }\n        }\n\n        return -1;\n    }\n\n    return arr.indexOf(value);\n}\n\nvar CategoryAxis = (function (Axis) {\n    function CategoryAxis () {\n        Axis.apply(this, arguments);\n    }\n\n    if ( Axis ) CategoryAxis.__proto__ = Axis;\n    CategoryAxis.prototype = Object.create( Axis && Axis.prototype );\n    CategoryAxis.prototype.constructor = CategoryAxis;\n\n    CategoryAxis.prototype.initFields = function initFields () {\n        this._ticks = {};\n    };\n\n    CategoryAxis.prototype.categoriesHash = function categoriesHash () {\n        return \"\";\n    };\n\n    CategoryAxis.prototype.clone = function clone () {\n        var 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    CategoryAxis.prototype.initUserOptions = function initUserOptions (options) {\n        var categories = options.categories || [];\n        var definedMin = defined(options.min);\n        var definedMax = defined(options.max);\n        options.srcCategories = options.categories = categories;\n\n        if ((definedMin || definedMax) && categories.length) {\n            var min = definedMin ? Math.floor(options.min) : 0;\n            var 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    CategoryAxis.prototype.rangeIndices = function rangeIndices () {\n        var options = this.options;\n        var length = options.categories.length || 1;\n        var min = isNumber(options.min) ? options.min % 1 : 0;\n        var max;\n\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    CategoryAxis.prototype.range = function range () {\n        var options = this.options;\n        var min = isNumber(options.min) ? options.min : 0;\n        var max = isNumber(options.max) ? options.max : this.totalRange().max;\n\n        return {\n            min: min,\n            max: max\n        };\n    };\n\n    CategoryAxis.prototype.roundedRange = function roundedRange () {\n        return this.range();\n    };\n\n    CategoryAxis.prototype.totalRange = function totalRange () {\n        var options = this.options;\n        return { min: 0, max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0) };\n    };\n\n    CategoryAxis.prototype.scaleOptions = function scaleOptions () {\n        var ref = this.rangeIndices();\n        var min = ref.min;\n        var max = ref.max;\n        var lineBox = this.lineBox();\n        var size = this.options.vertical ? lineBox.height() : lineBox.width();\n        var scale = size / ((max - min) || 1);\n\n        return {\n            scale: scale * (this.options.reverse ? -1 : 1),\n            box: lineBox,\n            min: min,\n            max: max\n        };\n    };\n\n    CategoryAxis.prototype.arrangeLabels = function arrangeLabels () {\n        Axis.prototype.arrangeLabels.call(this);\n        this.hideOutOfRangeLabels();\n    };\n\n    CategoryAxis.prototype.hideOutOfRangeLabels = function hideOutOfRangeLabels () {\n        var ref = this;\n        var box = ref.box;\n        var labels = ref.labels;\n\n        if (labels.length > 0) {\n            var valueAxis = this.options.vertical ? Y : X;\n            var start = box[valueAxis + 1];\n            var end = box[valueAxis + 2];\n            var firstLabel = labels[0];\n            var lastLabel = last(labels);\n\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    CategoryAxis.prototype.getMajorTickPositions = function getMajorTickPositions () {\n        return this.getTicks().majorTicks;\n    };\n\n    CategoryAxis.prototype.getMinorTickPositions = function getMinorTickPositions () {\n        return this.getTicks().minorTicks;\n    };\n\n    CategoryAxis.prototype.getLabelsTickPositions = function getLabelsTickPositions () {\n        return this.getTicks().labelTicks;\n    };\n\n    CategoryAxis.prototype.tickIndices = function tickIndices (stepSize) {\n        var ref = this.rangeIndices();\n        var min = ref.min;\n        var max = ref.max;\n        var limit = Math.ceil(max);\n        var current = Math.floor(min);\n        var indices = [];\n\n        while (current <= limit) {\n            indices.push(current);\n            current += stepSize;\n        }\n\n        return indices;\n    };\n\n    CategoryAxis.prototype.getTickPositions = function getTickPositions (stepSize) {\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var reverse = ref.reverse;\n        var ref$1 = this.scaleOptions();\n        var scale = ref$1.scale;\n        var box = ref$1.box;\n        var min = ref$1.min;\n        var pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n        var indices = this.tickIndices(stepSize);\n        var positions = [];\n\n        for (var 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    CategoryAxis.prototype.getTicks = function getTicks () {\n        var options = this.options;\n        var cache = this._ticks;\n        var range = this.rangeIndices();\n        var lineBox = this.lineBox();\n        var hash = lineBox.getHash() + range.min + \",\" + range.max + options.reverse + options.justified;\n\n        if (cache._hash !== hash) {\n            var hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n            cache._hash = hash;\n            cache.labelTicks = this.getTickPositions(1);\n            cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n            cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n        }\n\n        return cache;\n    };\n\n    CategoryAxis.prototype.filterOutOfRangePositions = function filterOutOfRangePositions (positions, lineBox) {\n        if (!positions.length) {\n            return positions;\n        }\n\n        var axis = this.options.vertical ? Y : X;\n        var inRange = function (position) { return lineBox[axis + 1] <= position && position <= lineBox[axis + 2]; };\n\n        var end = positions.length - 1;\n        var startIndex = 0;\n        while (!inRange(positions[startIndex]) && startIndex <= end) {\n            startIndex++;\n        }\n\n        var endIndex = end;\n\n        while (!inRange(positions[endIndex]) && endIndex >= 0) {\n            endIndex--;\n        }\n\n        return positions.slice(startIndex, endIndex + 1);\n    };\n\n    CategoryAxis.prototype.lineInfo = function lineInfo () {\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var reverse = ref.reverse;\n        var lineBox = this.lineBox();\n        var lineSize = vertical ? lineBox.height() : lineBox.width();\n        var axis = vertical ? Y : X;\n        var axisDir = reverse ? -1 : 1;\n        var startEdge = axisDir === 1 ? 1 : 2;\n        var axisOrigin = axis + startEdge.toString();\n        var lineStart = lineBox[axisOrigin];\n\n        return {\n            axis: axis,\n            axisOrigin: axisOrigin,\n            axisDir: axisDir,\n            lineBox: lineBox,\n            lineSize: lineSize,\n            lineStart: lineStart\n        };\n    };\n\n    CategoryAxis.prototype.lineDir = function lineDir () {\n        /*\n         *  Category axis line direction:\n         *    * Vertical: down.\n         *    * Horizontal: right.\n         */\n\n        var ref = this.options;\n        var reverse = ref.reverse;\n        return reverse ? -1 : 1;\n    };\n\n    // TODO: Rename to slotBox, valueSlot, slotByIndex?\n    CategoryAxis.prototype.getSlot = function getSlot (from, to, limit) {\n        var options = this.options;\n        var reverse = options.reverse;\n        var justified = options.justified;\n        var ref = this.scaleOptions();\n        var scale = ref.scale;\n        var box = ref.box;\n        var min = ref.min;\n        var ref$1 = this.lineInfo();\n        var valueAxis = ref$1.axis;\n        var lineStart = ref$1.lineStart;\n\n        var slotBox = box.clone();\n        var singleSlot = !defined(to);\n\n        var start = valueOrDefault(from, 0);\n        var 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        var p1 = lineStart + (start - min) * scale;\n        var 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    CategoryAxis.prototype.limitSlot = function limitSlot (slot) {\n        var vertical = this.options.vertical;\n        var valueAxis = vertical ? Y : X;\n        var lineBox = this.lineBox();\n        var 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    CategoryAxis.prototype.slot = function slot (from, to, limit) {\n        var min = Math.floor(this.options.min || 0);\n        var start = from;\n        var 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 Axis.prototype.slot.call(this, start, end, limit);\n    };\n\n    CategoryAxis.prototype.pointCategoryIndex = function pointCategoryIndex (point) {\n        var ref = this.options;\n        var reverse = ref.reverse;\n        var justified = ref.justified;\n        var vertical = ref.vertical;\n        var valueAxis = vertical ? Y : X;\n        var ref$1 = this.scaleOptions();\n        var scale = ref$1.scale;\n        var box = ref$1.box;\n        var min = ref$1.min;\n        var max = ref$1.max;\n        var startValue = reverse ? max : min;\n        var lineStart = box[valueAxis + 1];\n        var lineEnd = box[valueAxis + 2];\n        var pos = point[valueAxis];\n\n        if (pos < lineStart || pos > lineEnd) {\n            return null;\n        }\n\n        var value = startValue + (pos - lineStart) / scale;\n        var 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    CategoryAxis.prototype.getCategory = function getCategory (point) {\n        var index = this.pointCategoryIndex(point);\n\n        if (index === null) {\n            return null;\n        }\n\n        return this.options.categories[index];\n    };\n\n    CategoryAxis.prototype.categoryIndex = function categoryIndex (value) {\n        return this.totalIndex(value) - Math.floor(this.options.min || 0);\n    };\n\n    CategoryAxis.prototype.categoryAt = function categoryAt (index, total) {\n        var options = this.options;\n\n        return (total ? options.srcCategories : options.categories)[index];\n    };\n\n    CategoryAxis.prototype.categoriesCount = function categoriesCount () {\n        return (this.options.categories || []).length;\n    };\n\n    CategoryAxis.prototype.translateRange = function translateRange (delta) {\n        var options = this.options;\n        var lineBox = this.lineBox();\n        var size = options.vertical ? lineBox.height() : lineBox.width();\n        var range = options.categories.length;\n        var scale = size / range;\n        var offset = round(delta / scale, DEFAULT_PRECISION);\n\n        return {\n            min: offset,\n            max: range + offset\n        };\n    };\n\n    CategoryAxis.prototype.scaleRange = function scaleRange (scale, cursor) {\n        var position = Math.abs(this.pointOffset(cursor));\n        var rangeIndices = this.limitedRangeIndices();\n        var range = rangeIndices.max - rangeIndices.min;\n        var delta = this.scaleToDelta(scale, range);\n        var minDelta = position * delta;\n        var maxDelta = (1 - position) * delta;\n        var min = rangeIndices.min + minDelta;\n        var 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    CategoryAxis.prototype.zoomRange = function zoomRange (scale, cursor) {\n        var ref = this.totalRange();\n        var totalMin = ref.min;\n        var totalMax = ref.max;\n        var 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    CategoryAxis.prototype.labelsCount = function labelsCount () {\n        var labelsRange = this.labelsRange();\n\n        return labelsRange.max - labelsRange.min;\n    };\n\n    CategoryAxis.prototype.labelsRange = function labelsRange () {\n        var options = this.options;\n        var justified = options.justified;\n        var labelOptions = options.labels;\n        var ref = this.limitedRangeIndices(true);\n        var min = ref.min;\n        var max = ref.max;\n        var 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        var 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    CategoryAxis.prototype.createAxisLabel = function createAxisLabel (index, labelOptions, labelContext) {\n        var options = this.options;\n        var dataItem = options.dataItems ? options.dataItems[index] : null;\n        var category = valueOrDefault(options.categories[index], \"\");\n\n        labelContext.dataItem = dataItem;\n        var text = this.axisLabelText(category, labelOptions, labelContext);\n\n        return new AxisLabel(category, text, index, dataItem, labelOptions);\n    };\n\n    CategoryAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {\n        var range = this.limitedRangeIndices();\n\n        return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n    };\n\n    CategoryAxis.prototype.noteSlot = function noteSlot (value) {\n        var options = this.options;\n        var index = value - Math.floor(options.min || 0);\n        return this.getSlot(index);\n    };\n\n    CategoryAxis.prototype.arrangeNotes = function arrangeNotes () {\n        Axis.prototype.arrangeNotes.call(this);\n        this.hideOutOfRangeNotes();\n    };\n\n    CategoryAxis.prototype.hideOutOfRangeNotes = function hideOutOfRangeNotes () {\n        var ref = this;\n        var notes = ref.notes;\n        var box = ref.box;\n        if (notes && notes.length) {\n            var valueAxis = this.options.vertical ? Y : X;\n            var start = box[valueAxis + 1];\n            var end = box[valueAxis + 2];\n\n            for (var idx = 0; idx < notes.length; idx++) {\n                var note = notes[idx];\n                if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n                    note.hide();\n                }\n            }\n        }\n    };\n\n    CategoryAxis.prototype.pan = function pan (delta) {\n        var range = this.limitedRangeIndices(true);\n        var ref = this.scaleOptions();\n        var scale = ref.scale;\n        var offset = round(delta / scale, DEFAULT_PRECISION);\n        var totalRange = this.totalRange();\n        var min = range.min + offset;\n        var max = range.max + offset;\n\n        return this.limitRange(min, max, 0, totalRange.max, offset);\n    };\n\n    CategoryAxis.prototype.pointsRange = function pointsRange (start, end) {\n        var ref = this.options;\n        var reverse = ref.reverse;\n        var vertical = ref.vertical;\n        var valueAxis = vertical ? Y : X;\n        var range = this.limitedRangeIndices(true);\n        var ref$1 = this.scaleOptions();\n        var scale = ref$1.scale;\n        var box = ref$1.box;\n        var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n\n        var diffStart = start[valueAxis] - lineStart;\n        var diffEnd = end[valueAxis] - lineStart;\n\n        var min = range.min + diffStart / scale;\n        var max = range.min + diffEnd / scale;\n        var rangeMin = Math.min(min, max);\n        var rangeMax = Math.max(min, max);\n\n        if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n            return {\n                min: rangeMin,\n                max: rangeMax\n            };\n        }\n    };\n\n    CategoryAxis.prototype.valueRange = function valueRange () {\n        return this.range();\n    };\n\n    CategoryAxis.prototype.totalIndex = function totalIndex (value) {\n        var options = this.options;\n        var index = this._categoriesMap ?\n            this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n\n        return index;\n    };\n\n    CategoryAxis.prototype.currentRangeIndices = function currentRangeIndices () {\n        var options = this.options;\n        var min = 0;\n\n        if (isNumber(options.min)) {\n            min = Math.floor(options.min);\n        }\n\n        var max;\n        if (isNumber(options.max)) {\n            max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n        } else {\n            max = this.totalCount() - 1;\n        }\n\n        return {\n            min: min,\n            max: max\n        };\n    };\n\n    CategoryAxis.prototype.limitedRangeIndices = function limitedRangeIndices (totalLimit) {\n        var options = this.options;\n        var min = isNumber(options.min) ? options.min : 0;\n        var 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 (totalLimit) {\n            var 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    CategoryAxis.prototype.totalRangeIndices = function totalRangeIndices () {\n        return {\n            min: 0,\n            max: this.totalRange().max || 1\n        };\n    };\n\n    CategoryAxis.prototype.indexCategories = function indexCategories () {\n        if (!this._categoriesMap) {\n            var map = this._categoriesMap = new HashMap();\n            var srcCategories = this.options.srcCategories;\n            for (var idx = 0; idx < srcCategories.length; idx++) {\n                map.set(srcCategories[idx], idx);\n            }\n        }\n    };\n\n    CategoryAxis.prototype.totalCount = function totalCount () {\n        return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n    };\n\n    return CategoryAxis;\n}(Axis));\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","var COORDINATE_LIMIT = 300000;\n\nvar 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\nvar 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\nvar AUTO = \"auto\";\nvar BASE_UNITS = [\n    MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\n];\nvar FIT = \"fit\";\n\n\nfunction categoryRange(categories, clearCache) {\n    if (clearCache) {\n        categories._range = undefined;\n    }\n\n    var range = categories._range;\n    if (!range) {\n        range = categories._range = sparseArrayLimits(categories);\n        range.min = toDate(range.min);\n        range.max = toDate(range.max);\n    }\n\n    return range;\n}\n\nvar EmptyDateRange = function EmptyDateRange(options) {\n    this.options = options;\n};\n\nEmptyDateRange.prototype.displayIndices = function displayIndices () {\n    return {\n        min: 0,\n        max: 1\n    };\n};\n\nEmptyDateRange.prototype.displayRange = function displayRange () {\n    return {};\n};\n\nEmptyDateRange.prototype.total = function total () {\n    return {};\n};\n\nEmptyDateRange.prototype.valueRange = function valueRange () {\n    return {};\n};\n\nEmptyDateRange.prototype.valueIndex = function valueIndex () {\n    return -1;\n};\n\nEmptyDateRange.prototype.values = function values () {\n    return [];\n};\n\nEmptyDateRange.prototype.totalIndex = function totalIndex () {\n    return -1;\n};\n\nEmptyDateRange.prototype.valuesCount = function valuesCount () {\n    return 0;\n};\n\nEmptyDateRange.prototype.totalCount = function totalCount () {\n    return 0;\n};\n\nEmptyDateRange.prototype.dateAt = function dateAt () {\n    return null;\n};\n\nvar DateRange = function DateRange(start, end, options) {\n    this.options = options;\n    options.baseUnitStep = options.baseUnitStep || 1;\n\n    var roundToBaseUnit = options.roundToBaseUnit;\n    var justified = options.justified;\n\n    this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n    var lowerEnd = this.roundToTotalStep(end);\n    var expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n\n    this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n\n    var min = options.min || start;\n    this.valueStart = this.roundToTotalStep(min);\n    this.displayStart = roundToBaseUnit ? this.valueStart : min;\n\n    var max = options.max;\n    if (!max) {\n        this.valueEnd = lowerEnd;\n        this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n    } else {\n        var next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n        this.valueEnd = this.roundToTotalStep(max, false, next);\n        this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n    }\n\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\nDateRange.prototype.displayRange = function displayRange () {\n    return {\n        min: this.displayStart,\n        max: this.displayEnd\n    };\n};\n\nDateRange.prototype.displayIndices = function displayIndices () {\n    if (!this._indices) {\n        var options = this.options;\n\n        var baseUnit = options.baseUnit;\n            var baseUnitStep = options.baseUnitStep;\n\n        var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n        var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n\n        this._indices = { min: minIdx, max: maxIdx };\n    }\n\n    return this._indices;\n};\n\nDateRange.prototype.total = function total () {\n    return {\n        min: this.start,\n        max: this.end\n    };\n};\n\nDateRange.prototype.totalCount = function totalCount () {\n    var last = this.totalIndex(this.end);\n\n    return last + (this.options.justified ? 1 : 0);\n};\n\nDateRange.prototype.valueRange = function valueRange () {\n    return {\n        min: this.valueStart,\n        max: this.valueEnd\n    };\n};\n\nDateRange.prototype.valueIndex = function valueIndex (value) {\n    var options = this.options;\n    return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n};\n\nDateRange.prototype.totalIndex = function totalIndex (value) {\n    var options = this.options;\n    return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n};\n\nDateRange.prototype.dateIndex = function dateIndex$1 (value) {\n    var options = this.options;\n    return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n};\n\nDateRange.prototype.valuesCount = function valuesCount () {\n    var maxIdx = this.valueIndex(this.valueEnd);\n\n    return maxIdx + 1;\n};\n\nDateRange.prototype.values = function values () {\n    var values = this._values;\n    if (!values) {\n        var options = this.options;\n        var range = this.valueRange();\n        this._values = values = [];\n\n        for (var date = range.min; date <= range.max;) {\n            values.push(date);\n            date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n        }\n    }\n\n    return values;\n};\n\nDateRange.prototype.dateAt = function dateAt (index, total) {\n    var options = this.options;\n\n    return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n};\n\nDateRange.prototype.roundToTotalStep = function roundToTotalStep (value, upper, next) {\n    var ref = this.options;\n        var baseUnit = ref.baseUnit;\n        var baseUnitStep = ref.baseUnitStep;\n        var weekStartDay = ref.weekStartDay;\n    var start = this.start;\n\n    var step = dateIndex(value, start, baseUnit, baseUnitStep);\n    var 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\nfunction autoBaseUnit(options, startUnit, startStep) {\n    var categoryLimits = categoryRange(options.categories);\n    var span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n    var autoBaseUnitSteps = options.autoBaseUnitSteps;\n    var maxDateGroups = options.maxDateGroups;\n    var autoUnit = options.baseUnit === FIT;\n    var autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n    var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n    var units = span / TIME_PER_UNIT[baseUnit];\n    var totalUnits = units;\n    var unitSteps, step, nextStep;\n\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    var categories = options.categories;\n    var count = defined(categories) ? categories.length : 0;\n    var minDiff = MAX_VALUE;\n    var lastCategory, unit;\n\n    for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n        var category = categories[categoryIx];\n\n        if (category && lastCategory) {\n            var diff = Math.abs(absoluteDateDiff(category, lastCategory));\n\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    var baseUnit = (options.baseUnit || \"\").toLowerCase();\n    var 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\nvar DateCategoryAxis = (function (CategoryAxis) {\n    function DateCategoryAxis () {\n        CategoryAxis.apply(this, arguments);\n    }\n\n    if ( CategoryAxis ) DateCategoryAxis.__proto__ = CategoryAxis;\n    DateCategoryAxis.prototype = Object.create( CategoryAxis && CategoryAxis.prototype );\n    DateCategoryAxis.prototype.constructor = DateCategoryAxis;\n\n    DateCategoryAxis.prototype.clone = function clone () {\n        var copy = new DateCategoryAxis(Object.assign({}, this.options), this.chartService);\n        copy.createLabels();\n\n        return copy;\n    };\n\n    DateCategoryAxis.prototype.categoriesHash = function categoriesHash () {\n        var start = this.dataRange.total().min;\n        return this.options.baseUnit + this.options.baseUnitStep + start;\n    };\n\n    DateCategoryAxis.prototype.initUserOptions = function initUserOptions (options) {\n        return options;\n    };\n\n    DateCategoryAxis.prototype.initFields = function initFields () {\n        CategoryAxis.prototype.initFields.call(this);\n\n        var chartService = this.chartService;\n        var intlService = chartService.intl;\n        var options = this.options;\n\n        var 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            var range = categoryRange(categories, true);\n            var maxDivisions = options.maxDivisions;\n            var safeOptions = initUnit(options);\n\n            var forecast = options._forecast;\n            if (forecast) {\n                if (forecast.before > 0) {\n                    range.min = addDuration(range.min, -forecast.before, safeOptions.baseUnit, safeOptions.weekStartDay);\n                }\n\n                if (forecast.after > 0) {\n                    range.max = addDuration(range.max, forecast.after, safeOptions.baseUnit, safeOptions.weekStartDay);\n                }\n            }\n\n            this.dataRange = new DateRange(range.min, range.max, safeOptions);\n\n            if (maxDivisions) {\n                var dataRange = this.dataRange.displayRange();\n\n                var 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                var 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    DateCategoryAxis.prototype.tickIndices = function tickIndices (stepSize) {\n        var ref = this;\n        var dataRange = ref.dataRange;\n        var divisionRange = ref.divisionRange;\n        var valuesCount = divisionRange.valuesCount();\n\n        if (!this.options.maxDivisions || !valuesCount) {\n            return CategoryAxis.prototype.tickIndices.call(this, stepSize);\n        }\n\n        var indices = [];\n        var values = divisionRange.values();\n        var 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 (var idx = 0; idx < values.length; idx++) {\n            indices.push(dataRange.dateIndex(values[idx]) + offset);\n            if (stepSize !== 1 && idx >= 1) {\n                var 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    DateCategoryAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {\n        var range = this.range();\n        var categories = this.options.categories || [];\n\n        return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n    };\n\n    DateCategoryAxis.prototype.parseNoteValue = function parseNoteValue (value) {\n        return parseDate(this.chartService.intl, value);\n    };\n\n    DateCategoryAxis.prototype.noteSlot = function noteSlot (value) {\n        return this.getSlot(value);\n    };\n\n    DateCategoryAxis.prototype.translateRange = function translateRange (delta) {\n        var options = this.options;\n        var baseUnit = options.baseUnit;\n        var weekStartDay = options.weekStartDay;\n        var vertical = options.vertical;\n        var lineBox = this.lineBox();\n        var size = vertical ? lineBox.height() : lineBox.width();\n        var range = this.range();\n        var scale = size / (range.max - range.min);\n        var offset = round(delta / scale, DEFAULT_PRECISION);\n\n        if (range.min && range.max) {\n            var from = addTicks(options.min || range.min, offset);\n            var to = addTicks(options.max || range.max, offset);\n\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    DateCategoryAxis.prototype.labelsRange = function labelsRange () {\n        return {\n            min: this.options.labels.skip,\n            max: this.divisionRange.valuesCount()\n        };\n    };\n\n    DateCategoryAxis.prototype.pan = function pan (delta) {\n        if (this.isEmpty()) {\n            return null;\n        }\n\n        var options = this.options;\n        var lineBox = this.lineBox();\n        var size = options.vertical ? lineBox.height() : lineBox.width();\n        var ref = this.dataRange.displayRange();\n        var min = ref.min;\n        var max = ref.max;\n        var totalLimits = this.dataRange.total();\n        var scale = size / (max - min);\n        var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n        var from = addTicks(min, offset);\n        var to = addTicks(max, offset);\n\n        var 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    DateCategoryAxis.prototype.pointsRange = function pointsRange (start, end) {\n        if (this.isEmpty()) {\n            return null;\n        }\n\n        var pointsRange = CategoryAxis.prototype.pointsRange.call(this, start, end);\n        var datesRange = this.dataRange.displayRange();\n        var indicesRange = this.dataRange.displayIndices();\n        var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n        var options = this.options;\n\n        var min = addTicks(datesRange.min, pointsRange.min * scale);\n        var 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    DateCategoryAxis.prototype.scaleRange = function scaleRange (scale, cursor) {\n        if (this.isEmpty()) {\n            return {};\n        }\n\n        var options = this.options;\n        var fit = options.userSetBaseUnit === FIT;\n        var totalLimits = this.dataRange.total();\n        var ref = this.dataRange.displayRange();\n        var rangeMin = ref.min;\n        var rangeMax = ref.max;\n\n        var position = Math.abs(this.pointOffset(cursor));\n        var range = rangeMax - rangeMin;\n        var delta = this.scaleToDelta(scale, range);\n        var minDelta = Math.round(position * delta);\n        var maxDelta = Math.round((1 - position) * delta);\n\n        var ref$1 = this.dataRange.options;\n        var baseUnit = ref$1.baseUnit;\n        var min = new Date(rangeMin.getTime() + minDelta);\n        var max = new Date(rangeMax.getTime() - maxDelta);\n\n        if (fit) {\n            var autoBaseUnitSteps = options.autoBaseUnitSteps;\n            var maxDateGroups = options.maxDateGroups;\n\n            var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n            var rangeDiff = dateDiff(rangeMax, rangeMin);\n            var diff = dateDiff(max, min);\n            var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n            var autoBaseUnitStep, ticks;\n\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                var 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    DateCategoryAxis.prototype.zoomRange = function zoomRange (scale, cursor) {\n        var totalLimits = this.dataRange.total();\n        var 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    DateCategoryAxis.prototype.range = function range () {\n        return this.dataRange.displayRange();\n    };\n\n    DateCategoryAxis.prototype.createLabels = function createLabels () {\n        CategoryAxis.prototype.createLabels.call(this);\n        this.createRangeLabels();\n    };\n\n    DateCategoryAxis.prototype.clearLabels = function clearLabels () {\n        CategoryAxis.prototype.clearLabels.call(this);\n        this.rangeLabels = [];\n    };\n\n    DateCategoryAxis.prototype.arrangeLabels = function arrangeLabels () {\n        this.arrangeRangeLabels();\n        CategoryAxis.prototype.arrangeLabels.call(this);\n    };\n\n    DateCategoryAxis.prototype.arrangeRangeLabels = function arrangeRangeLabels () {\n        var ref = this;\n        var options = ref.options;\n        var rangeLabels = ref.rangeLabels;\n        if (rangeLabels.length === 0) {\n            return;\n        }\n\n        var lineBox = this.lineBox();\n        var vertical = options.vertical;\n        var mirror = options.rangeLabels.mirror || options.labels.mirror;\n\n        var firstLabel = rangeLabels[0];\n        if (firstLabel) {\n            var position = vertical ? lineBox.y1 - (firstLabel.box.height() / 2) : lineBox.x1;\n            this.positionLabel(firstLabel, mirror, position);\n        }\n\n        var lastLabel = rangeLabels[1];\n        if (lastLabel) {\n            var position$1 = vertical ? lineBox.y2 - (lastLabel.box.height() / 2) : lineBox.x2;\n            this.positionLabel(lastLabel, mirror, position$1);\n        }\n    };\n\n    DateCategoryAxis.prototype.autoRotateLabels = function autoRotateLabels () {\n        CategoryAxis.prototype.autoRotateLabels.call(this);\n        this.autoRotateRangeLabels();\n    };\n\n    DateCategoryAxis.prototype.hideOutOfRangeLabels = function hideOutOfRangeLabels () {\n        CategoryAxis.prototype.hideOutOfRangeLabels.call(this);\n        this.hideOverlappingLabels();\n    };\n\n    DateCategoryAxis.prototype.hideOverlappingLabels = function hideOverlappingLabels () {\n        var ref = this;\n        var rangeLabels = ref.rangeLabels;\n        var labels = ref.labels;\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        var firstRangeLabel = rangeLabels[0];\n        if (firstRangeLabel && firstRangeLabel.options.visible) {\n            for (var i = 0; i < labels.length; i++) {\n                var overlaps = clip(firstRangeLabel, labels[i]);\n                if (!overlaps) {\n                    break;\n                }\n            }\n        }\n\n        var lastRangeLabel = rangeLabels[1];\n        if (lastRangeLabel && lastRangeLabel.options.visible) {\n            for (var i$1 = labels.length - 1; i$1 > 0; --i$1) {\n                var overlaps$1 = clip(lastRangeLabel, labels[i$1]);\n                if (!overlaps$1) {\n                    break;\n                }\n            }\n        }\n    };\n\n    DateCategoryAxis.prototype.contentBox = function contentBox () {\n        var box = CategoryAxis.prototype.contentBox.call(this);\n        var rangeLabels = this.rangeLabels;\n\n        for (var i = 0; i < rangeLabels.length; i++) {\n            var label = rangeLabels[i];\n            if (label.options.visible) {\n                box.wrap(label.box);\n            }\n        }\n\n        return box;\n    };\n\n    DateCategoryAxis.prototype.createAxisLabel = function createAxisLabel (index, labelOptions, labelContext) {\n        if ( labelContext === void 0 ) labelContext = {};\n\n        var options = this.options;\n        var dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n        var date = this.divisionRange.dateAt(index);\n        var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n\n        labelOptions.format = labelOptions.format || unitFormat;\n        labelContext.dataItem = dataItem;\n\n        var text = this.axisLabelText(date, labelOptions, labelContext);\n        if (text) {\n            return new AxisLabel(date, text, index, dataItem, labelOptions);\n        }\n    };\n\n    DateCategoryAxis.prototype.createRangeLabels = function createRangeLabels () {\n        var this$1 = this;\n\n        var ref = this.divisionRange;\n        var displayStart = ref.displayStart;\n        var displayEnd = ref.displayEnd;\n        var options = this.options;\n        var 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        var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n        labelOptions.format = labelOptions.format || unitFormat;\n\n        var createLabel = function (index, date, text) {\n            if (text) {\n                var label = new AxisLabel(date, text, index, null, labelOptions);\n                this$1.append(label);\n                this$1.rangeLabels.push(label);\n            }\n        };\n\n        var startText = this.axisLabelText(displayStart, labelOptions, { index: 0, count: 2 });\n        createLabel(0, displayStart, startText);\n\n        var endText = this.axisLabelText(displayEnd, labelOptions, { index: 1, count: 2 });\n        createLabel(1, displayEnd, endText);\n    };\n\n    DateCategoryAxis.prototype.autoRotateRangeLabels = function autoRotateRangeLabels () {\n        var this$1 = this;\n\n        var labels = this.rangeLabels;\n        if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n            return;\n        }\n\n        var rotateLabel = function (label, tickPositions, index) {\n            var width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n            var angle = this$1.autoRotateLabelAngle(label.box, width);\n            if (angle !== 0) {\n                label.options.rotation = angle;\n                label.reflow(new Box());\n            }\n        };\n\n        var tickPositions = this.getMajorTickPositions();\n        rotateLabel(labels[0], tickPositions, 0);\n        rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n    };\n\n    DateCategoryAxis.prototype.categoryIndex = function categoryIndex (value) {\n        return this.dataRange.valueIndex(value);\n    };\n\n    DateCategoryAxis.prototype.slot = function slot (from, to, limit) {\n        var dateRange = this.dataRange;\n        var start = from;\n        var 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        var slot = this.getSlot(start, end, limit);\n        if (slot) {\n            return slot.toRect();\n        }\n    };\n\n    DateCategoryAxis.prototype.getSlot = function getSlot (a, b, limit) {\n        var start = a;\n        var 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 CategoryAxis.prototype.getSlot.call(this, start, end, limit);\n    };\n\n    DateCategoryAxis.prototype.valueRange = function valueRange () {\n        var options = this.options;\n        var range = categoryRange(options.srcCategories);\n\n        return {\n            min: toDate(range.min),\n            max: toDate(range.max)\n        };\n    };\n\n    DateCategoryAxis.prototype.categoryAt = function categoryAt (index, total) {\n        return this.dataRange.dateAt(index, total);\n    };\n\n    DateCategoryAxis.prototype.categoriesCount = function categoriesCount () {\n        return this.dataRange.valuesCount();\n    };\n\n    DateCategoryAxis.prototype.rangeIndices = function rangeIndices () {\n        return this.dataRange.displayIndices();\n    };\n\n    DateCategoryAxis.prototype.labelsBetweenTicks = function labelsBetweenTicks () {\n        return !this.divisionRange.options.justified;\n    };\n\n    DateCategoryAxis.prototype.prepareUserOptions = function prepareUserOptions () {\n        if (this.isEmpty()) {\n            return;\n        }\n\n        this.options.categories = this.dataRange.values();\n    };\n\n    DateCategoryAxis.prototype.getCategory = function getCategory (point) {\n        var index = this.pointCategoryIndex(point);\n\n        if (index === null) {\n            return null;\n        }\n\n        return this.dataRange.dateAt(index);\n    };\n\n    DateCategoryAxis.prototype.totalIndex = function totalIndex (value) {\n        return this.dataRange.totalIndex(value);\n    };\n\n    DateCategoryAxis.prototype.currentRangeIndices = function currentRangeIndices () {\n        var range = this.dataRange.valueRange();\n        return {\n            min: this.dataRange.totalIndex(range.min),\n            max: this.dataRange.totalIndex(range.max)\n        };\n    };\n\n    DateCategoryAxis.prototype.totalRange = function totalRange () {\n        return this.dataRange.total();\n    };\n\n    DateCategoryAxis.prototype.totalRangeIndices = function totalRangeIndices () {\n        var range = this.dataRange.total();\n        return {\n            min: this.dataRange.totalIndex(range.min),\n            max: this.dataRange.totalIndex(range.max)\n        };\n    };\n\n    DateCategoryAxis.prototype.totalCount = function totalCount () {\n        return this.dataRange.totalCount();\n    };\n\n    DateCategoryAxis.prototype.isEmpty = function isEmpty () {\n        return !this.options.srcCategories.length;\n    };\n\n    DateCategoryAxis.prototype.roundedRange = function roundedRange () {\n        if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n            return this.range();\n        }\n\n        var options = this.options;\n        var datesRange = categoryRange(options.srcCategories);\n\n        var dateRange = new DateRange(datesRange.min, datesRange.max, Object.assign({}, options, {\n            justified: false,\n            roundToBaseUnit: true,\n            justifyEnd: false\n        }));\n\n        return dateRange.displayRange();\n    };\n\n    return DateCategoryAxis;\n}(CategoryAxis));\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\nvar MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n\nvar NumericAxis = (function (Axis) {\n    function NumericAxis(seriesMin, seriesMax, options, chartService) {\n        Axis.call(this, Object.assign({}, options, {\n            seriesMin: seriesMin,\n            seriesMax: seriesMax\n        }), chartService);\n    }\n\n    if ( Axis ) NumericAxis.__proto__ = Axis;\n    NumericAxis.prototype = Object.create( Axis && Axis.prototype );\n    NumericAxis.prototype.constructor = NumericAxis;\n\n    NumericAxis.prototype.initUserOptions = function initUserOptions (options) {\n        var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n        this.totalOptions = totalAxisOptions(autoOptions, options);\n\n        return axisOptions(autoOptions, options);\n    };\n\n    NumericAxis.prototype.initFields = function 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    NumericAxis.prototype.clone = function clone () {\n        return new NumericAxis(\n            this.seriesMin,\n            this.seriesMax,\n            Object.assign({}, this.options),\n            this.chartService\n        );\n    };\n\n    NumericAxis.prototype.startValue = function startValue () {\n        return 0;\n    };\n\n    NumericAxis.prototype.range = function range () {\n        var options = this.options;\n        return { min: options.min, max: options.max };\n    };\n\n    NumericAxis.prototype.getDivisions = function getDivisions (stepValue) {\n        if (stepValue === 0) {\n            return 1;\n        }\n\n        var options = this.options;\n        var range = options.max - options.min;\n\n        return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n    };\n\n    NumericAxis.prototype.getTickPositions = function getTickPositions (unit, skipUnit) {\n        var options = this.options;\n        var ref = this.lineInfo();\n        var axisDir = ref.axisDir;\n        var axisOrigin = ref.axisOrigin;\n        var lineBox = ref.lineBox;\n        var lineSize = ref.lineSize;\n        var range = options.max - options.min;\n        var scale = lineSize / range;\n        var step = unit * scale;\n        var divisions = this.getDivisions(unit);\n        var positions = [];\n        var pos = lineBox[axisOrigin];\n        var skipStep = 0;\n\n        if (skipUnit) {\n            skipStep = skipUnit / unit;\n        }\n\n        for (var 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    NumericAxis.prototype.getMajorTickPositions = function getMajorTickPositions () {\n        return this.getTickPositions(this.options.majorUnit);\n    };\n\n    NumericAxis.prototype.getMinorTickPositions = function getMinorTickPositions () {\n        return this.getTickPositions(this.options.minorUnit);\n    };\n\n    NumericAxis.prototype.getSlot = function getSlot (a, b, limit) {\n        if ( limit === void 0 ) limit = false;\n\n        var options = this.options;\n        var ref = this.lineInfo();\n        var axis = ref.axis;\n        var axisDir = ref.axisDir;\n        var lineBox = ref.lineBox;\n        var lineSize = ref.lineSize;\n        var lineStart = ref.lineStart;\n        var step = axisDir * (lineSize / (options.max - options.min));\n\n        var start = valueOrDefault(a, b || 0);\n        var 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        var p1 = Math.min(start, end) - options.min;\n        var p2 = Math.max(start, end) - options.min;\n\n        var 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    NumericAxis.prototype.getValue = function getValue (point) {\n        var options = this.options;\n        var max = Number(options.max);\n        var min = Number(options.min);\n        var offset = this.pointOffset(point);\n        var valueOffset = offset * (max - min);\n\n        if (offset < 0 || offset > 1) {\n            return null;\n        }\n\n        var value = min + valueOffset;\n        return round(value, DEFAULT_PRECISION);\n    };\n\n    NumericAxis.prototype.translateRange = function translateRange (delta) {\n        var options = this.options;\n        var vertical = options.vertical;\n        var reverse = options.reverse;\n        var max = options.max;\n        var min = options.min;\n        var ref = this.lineInfo();\n        var lineSize = ref.lineSize;\n        var range = max - min;\n        var scale = lineSize / range;\n        var 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    NumericAxis.prototype.labelsCount = function labelsCount () {\n        return this.getDivisions(this.options.majorUnit);\n    };\n\n    NumericAxis.prototype.createAxisLabel = function createAxisLabel (index, labelOptions, labelContext) {\n        var options = this.options;\n        var value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION);\n        var text = this.axisLabelText(value, labelOptions, labelContext);\n\n        return new AxisLabel(value, text, index, null, labelOptions);\n    };\n\n    NumericAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {\n        var range = this.range();\n        return range.min <= value && value <= range.max;\n    };\n\n    NumericAxis.prototype.pan = function pan (delta) {\n        var range = this.translateRange(delta);\n        return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n    };\n\n    NumericAxis.prototype.pointsRange = function pointsRange (start, end) {\n        var startValue = this.getValue(start);\n        var endValue = this.getValue(end);\n        var min = Math.min(startValue, endValue);\n        var max = Math.max(startValue, endValue);\n\n        if (this.isValidRange(min, max)) {\n            return {\n                min: min,\n                max: max\n            };\n        }\n    };\n\n    NumericAxis.prototype.scaleRange = function scaleRange (scale, cursor) {\n        var position = Math.abs(this.pointOffset(cursor));\n        var range = this.options.max - this.options.min;\n        var delta = this.scaleToDelta(scale, range);\n        var minDelta = position * delta;\n        var maxDelta = (1 - position) * delta;\n        var min = round(this.options.min + minDelta, DEFAULT_PRECISION);\n        var 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    NumericAxis.prototype.zoomRange = function zoomRange (scale, cursor) {\n        var ref = this;\n        var totalMin = ref.totalMin;\n        var totalMax = ref.totalMax;\n        var 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    NumericAxis.prototype.isValidRange = function isValidRange (min, max) {\n        return max - min > MIN_VALUE_RANGE;\n    };\n\n    return NumericAxis;\n}(Axis));\n\nfunction autoAxisOptions(seriesMin, seriesMax, options) {\n    var narrowRange = options.narrowRange;\n\n    var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n    var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n\n    var majorUnit = autoMajorUnit(autoMin, autoMax);\n    var 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 (var idx = 0; idx < fields.length; idx++) {\n        var field = fields[idx];\n        if (options[field] === null) {\n            options[field] = undefined;\n        }\n    }\n}\n\nfunction axisOptions(autoOptions, userOptions) {\n    var options = userOptions;\n    var userSetMin, userSetMax;\n\n    if (userOptions) {\n        clearNullValues(userOptions, [ 'min', 'max' ]);\n\n        userSetMin = defined(userOptions.min);\n        userSetMax = defined(userOptions.max);\n\n        var 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    var result = deepExtend(autoOptions, options);\n    if (result.min >= result.max) {\n        if (userSetMin && !userSetMax) {\n            result.max = result.min + result.majorUnit;\n        } else if (!userSetMin && userSetMax) {\n            result.min = result.max - result.majorUnit;\n        }\n    }\n\n    return result;\n}\n\nfunction remainderClose(value, divisor, ratio) {\n    var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n    var 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    var axisMin;\n\n    if (min >= 0 && max >= 0) {\n        var minValue = min === max ? 0 : min;\n\n        var 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    var axisMax;\n\n    if (min <= 0 && max <= 0) {\n        var maxValue = min === max ? 0 : max;\n\n        var 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\nvar MIN_VALUE_RANGE = 1000;\n\nvar DateValueAxis = (function (Axis) {\n    function DateValueAxis(seriesMin, seriesMax, axisOptions, chartService) {\n        var min = toDate(seriesMin);\n        var max = toDate(seriesMax);\n\n        var intlService = chartService.intl;\n        var options = axisOptions || {};\n        options = deepExtend(options || {}, {\n            min: parseDate(intlService, options.min),\n            max: parseDate(intlService, options.max),\n            axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue),\n            weekStartDay: firstDay(options, intlService)\n        });\n        options = applyDefaults(min, max, options);\n\n        Axis.call(this, options, chartService);\n\n        this.intlService = intlService;\n        this.seriesMin = min;\n        this.seriesMax = max;\n\n        var weekStartDay = options.weekStartDay || 0;\n        this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n        this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n    }\n\n    if ( Axis ) DateValueAxis.__proto__ = Axis;\n    DateValueAxis.prototype = Object.create( Axis && Axis.prototype );\n    DateValueAxis.prototype.constructor = DateValueAxis;\n\n    DateValueAxis.prototype.clone = function clone () {\n        return new DateValueAxis(this.seriesMin, this.seriesMax, Object.assign({}, this.options), this.chartService);\n    };\n\n    DateValueAxis.prototype.range = function range () {\n        var options = this.options;\n        return { min: options.min, max: options.max };\n    };\n\n    DateValueAxis.prototype.getDivisions = function getDivisions (stepValue) {\n        var options = this.options;\n\n        return Math.floor(\n            duration(options.min, options.max, options.baseUnit) / stepValue + 1\n        );\n    };\n\n    DateValueAxis.prototype.getTickPositions = function getTickPositions (step) {\n        var options = this.options;\n        var ref = this.lineInfo();\n        var dir = ref.axisDir;\n        var lineSize = ref.lineSize;\n        var start = ref.lineStart;\n        var divisions = this.getDivisions(step);\n        var timeRange = dateDiff(options.max, options.min);\n        var scale = lineSize / timeRange;\n        var weekStartDay = options.weekStartDay || 0;\n\n        var positions = [ start ];\n        for (var i = 1; i < divisions; i++) {\n            var date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\n            var pos = start + dateDiff(date, options.min) * scale * dir;\n\n            positions.push(round(pos, COORD_PRECISION));\n        }\n\n        return positions;\n    };\n\n    DateValueAxis.prototype.getMajorTickPositions = function getMajorTickPositions () {\n        return this.getTickPositions(this.options.majorUnit);\n    };\n\n    DateValueAxis.prototype.getMinorTickPositions = function getMinorTickPositions () {\n        return this.getTickPositions(this.options.minorUnit);\n    };\n\n    DateValueAxis.prototype.getSlot = function 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    DateValueAxis.prototype.getValue = function getValue (point) {\n        var value = NumericAxis.prototype.getValue.call(this, point);\n\n        return value !== null ? toDate(value) : null;\n    };\n\n    DateValueAxis.prototype.labelsCount = function labelsCount () {\n        return this.getDivisions(this.options.majorUnit);\n    };\n\n    DateValueAxis.prototype.createAxisLabel = function createAxisLabel (index, labelOptions, labelContext) {\n        var options = this.options;\n        var offset = index * options.majorUnit;\n        var weekStartDay = options.weekStartDay || 0;\n        var date = options.min;\n\n        if (offset > 0) {\n            date = addDuration(date, offset, options.baseUnit, weekStartDay);\n        }\n\n        var unitFormat = labelOptions.dateFormats[options.baseUnit];\n        labelOptions.format = labelOptions.format || unitFormat;\n\n        var text = this.axisLabelText(date, labelOptions, labelContext);\n        return new AxisLabel(date, text, index, null, labelOptions);\n    };\n\n    DateValueAxis.prototype.translateRange = function translateRange (delta) {\n        var options = this.options;\n        var lineBox = this.lineBox();\n        var vertical = options.vertical;\n        var reverse = options.reverse;\n        var size = vertical ? lineBox.height() : lineBox.width();\n        var range = this.range();\n        var scale = size / dateDiff(range.max, range.min);\n\n        var offset = round(delta / scale, DEFAULT_PRECISION);\n        if ((vertical || reverse) && !(vertical && reverse )) {\n            offset = -offset;\n        }\n\n        var from = addTicks(options.min, offset);\n        var to = addTicks(options.max, offset);\n\n        return {\n            min: from,\n            max: to,\n            offset: offset\n        };\n    };\n\n    DateValueAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {\n        var range = this.range();\n\n        return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n    };\n\n    DateValueAxis.prototype.pan = function pan (delta) {\n        var range = this.translateRange(delta, true);\n        var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax, range.offset);\n\n        if (limittedRange) {\n            return {\n                min: toDate(limittedRange.min),\n                max: toDate(limittedRange.max)\n            };\n        }\n    };\n\n    DateValueAxis.prototype.pointsRange = function pointsRange (start, end) {\n        var startValue = this.getValue(start);\n        var endValue = this.getValue(end);\n        var min = Math.min(startValue, endValue);\n        var max = Math.max(startValue, endValue);\n\n        return {\n            min: toDate(min),\n            max: toDate(max)\n        };\n    };\n\n    DateValueAxis.prototype.scaleRange = function scaleRange (scale, cursor) {\n        var position = Math.abs(this.pointOffset(cursor));\n        var range = this.options.max - this.options.min;\n        var delta = this.scaleToDelta(scale, range);\n        var minDelta = position * delta;\n        var maxDelta = (1 - position) * delta;\n        var min = toDate(toTime(this.options.min) + minDelta);\n        var 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    DateValueAxis.prototype.zoomRange = function zoomRange (scale, cursor) {\n        var range = this.scaleRange(scale, cursor);\n        var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n        var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n\n        return {\n            min: min,\n            max: max\n        };\n    };\n\n    return DateValueAxis;\n}(Axis));\n\nfunction timeUnits(delta) {\n    var 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    var min = options.min || seriesMin;\n    var max = options.max || seriesMax;\n    var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n    var baseUnitTime = TIME_PER_UNIT[baseUnit];\n    var weekStartDay = options.weekStartDay || 0;\n    var autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n    var autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\n    var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n    var majorUnit = userMajorUnit || ceil(\n        autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\n        baseUnitTime\n    ) / baseUnitTime;\n    var actualUnits = duration(autoMin, autoMax, baseUnit);\n    var totalUnits = ceil(actualUnits, majorUnit);\n    var unitsToAdd = totalUnits - actualUnits;\n    var head = Math.floor(unitsToAdd / 2);\n    var tail = unitsToAdd - head;\n\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\nvar DEFAULT_MAJOR_UNIT = 10;\nvar MIN_VALUE_RANGE = 1e-6;\n\nvar LogarithmicAxis = (function (Axis) {\n    function LogarithmicAxis(seriesMin, seriesMax, options, chartService) {\n\n        var axisOptions = deepExtend({ majorUnit: DEFAULT_MAJOR_UNIT, min: seriesMin, max: seriesMax }, options);\n        var base = axisOptions.majorUnit;\n        var autoMax = autoAxisMax(seriesMax, base);\n        var autoMin = autoAxisMin(seriesMin, seriesMax, axisOptions);\n        var 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        Axis.call(this, 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    if ( Axis ) LogarithmicAxis.__proto__ = Axis;\n    LogarithmicAxis.prototype = Object.create( Axis && Axis.prototype );\n    LogarithmicAxis.prototype.constructor = LogarithmicAxis;\n\n    LogarithmicAxis.prototype.clone = function clone () {\n        return new LogarithmicAxis(\n            this.seriesMin,\n            this.seriesMax,\n            Object.assign({}, this.options),\n            this.chartService\n        );\n    };\n\n    LogarithmicAxis.prototype.startValue = function startValue () {\n        return this.options.min;\n    };\n\n    LogarithmicAxis.prototype.getSlot = function getSlot (a, b, limit) {\n        var ref = this;\n        var options = ref.options;\n        var logMin = ref.logMin;\n        var logMax = ref.logMax;\n        var base = options.majorUnit;\n        var min = options.min;\n        var max = options.max;\n        var ref$1 = this.lineInfo();\n        var axis = ref$1.axis;\n        var axisDir = ref$1.axisDir;\n        var lineBox = ref$1.lineBox;\n        var lineSize = ref$1.lineSize;\n        var lineStart = ref$1.lineStart;\n        var step = axisDir * (lineSize / (logMax - logMin));\n        var start = valueOrDefault(a, b || 1);\n        var 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        var p1 = Math.min(start, end) - logMin;\n        var p2 = Math.max(start, end) - logMin;\n\n        var 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    LogarithmicAxis.prototype.getValue = function getValue (point) {\n        var ref = this;\n        var options = ref.options;\n        var logMin = ref.logMin;\n        var logMax = ref.logMax;\n        var base = options.majorUnit;\n        var ref$1 = this.lineInfo();\n        var axis = ref$1.axis;\n        var axisDir = ref$1.axisDir;\n        var lineStart = ref$1.lineStart;\n        var lineSize = ref$1.lineSize;\n        var step = ((logMax - logMin) / lineSize);\n        var offset = axisDir * (point[axis] - lineStart);\n        var valueOffset = offset * step;\n\n        if (offset < 0 || offset > lineSize) {\n            return null;\n        }\n\n        var value = logMin + valueOffset;\n\n        return round(Math.pow(base, value), DEFAULT_PRECISION);\n    };\n\n    LogarithmicAxis.prototype.range = function range () {\n        var options = this.options;\n        return { min: options.min, max: options.max };\n    };\n\n    LogarithmicAxis.prototype.translateRange = function translateRange (delta) {\n        var ref = this;\n        var options = ref.options;\n        var logMin = ref.logMin;\n        var logMax = ref.logMax;\n        var reverse = options.reverse;\n        var vertical = options.vertical;\n        var base = options.majorUnit;\n        var lineBox = this.lineBox();\n        var size = vertical ? lineBox.height() : lineBox.width();\n        var scale = size / (logMax - logMin);\n        var offset = round(delta / scale, DEFAULT_PRECISION);\n\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    LogarithmicAxis.prototype.labelsCount = function labelsCount () {\n        var floorMax = Math.floor(this.logMax);\n        var count = Math.floor(floorMax - this.logMin) + 1;\n\n        return count;\n    };\n\n    LogarithmicAxis.prototype.getMajorTickPositions = function getMajorTickPositions () {\n        var ticks = [];\n\n        this.traverseMajorTicksPositions(function (position) {\n            ticks.push(position);\n        }, { step: 1, skip: 0 });\n\n        return ticks;\n    };\n\n    LogarithmicAxis.prototype.createTicks = function createTicks (lineGroup) {\n        var options = this.options;\n        var majorTicks = options.majorTicks;\n        var minorTicks = options.minorTicks;\n        var vertical = options.vertical;\n        var mirror = options.labels.mirror;\n        var lineBox = this.lineBox();\n        var ticks = [];\n        var tickLineOptions = {\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    LogarithmicAxis.prototype.createGridLines = function createGridLines (altAxis) {\n        var options = this.options;\n        var minorGridLines = options.minorGridLines;\n        var majorGridLines = options.majorGridLines;\n        var vertical = options.vertical;\n        var lineBox = altAxis.lineBox();\n        var lineOptions = {\n            lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n            lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n            vertical: vertical\n        };\n        var majorTicks = [];\n\n        var container = this.gridLinesVisual();\n        function render(tickPosition, gridLine) {\n            if (!inArray(tickPosition, majorTicks)) {\n                lineOptions.position = tickPosition;\n                container.append(createAxisGridLine(lineOptions, gridLine));\n\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    LogarithmicAxis.prototype.traverseMajorTicksPositions = function traverseMajorTicksPositions (callback, tickOptions) {\n        var ref = this.lineInfo();\n        var lineStart = ref.lineStart;\n        var step = ref.step;\n        var ref$1 = this;\n        var logMin = ref$1.logMin;\n        var logMax = ref$1.logMax;\n\n        for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n            var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n            callback(position, tickOptions);\n        }\n    };\n\n    LogarithmicAxis.prototype.traverseMinorTicksPositions = function traverseMinorTicksPositions (callback, tickOptions) {\n        var this$1 = this;\n\n        var ref = this.options;\n        var min = ref.min;\n        var max = ref.max;\n        var minorUnit = ref.minorUnit;\n        var base = ref.majorUnit;\n        var ref$1 = this.lineInfo();\n        var lineStart = ref$1.lineStart;\n        var step = ref$1.step;\n        var ref$2 = this;\n        var logMin = ref$2.logMin;\n        var logMax = ref$2.logMax;\n        var start = Math.floor(logMin);\n\n        for (var power = start; power < logMax; power++) {\n            var minorOptions = this$1._minorIntervalOptions(power);\n            for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n                var value = minorOptions.value + idx * minorOptions.minorStep;\n                if (value > max) {\n                    break;\n                }\n                if (value >= min) {\n                    var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n                    callback(position, tickOptions);\n                }\n            }\n        }\n    };\n\n    LogarithmicAxis.prototype.createAxisLabel = function createAxisLabel (index, labelOptions, labelContext) {\n        var power = Math.ceil(this.logMin + index);\n        var value = Math.pow(this.options.majorUnit, power);\n        var text = this.axisLabelText(value, labelOptions, labelContext);\n\n        return new AxisLabel(value, text, index, null, labelOptions);\n    };\n\n    LogarithmicAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {\n        var range = this.range();\n        return range.min <= value && value <= range.max;\n    };\n\n    LogarithmicAxis.prototype.pan = function pan (delta) {\n        var range = this.translateRange(delta);\n        return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n    };\n\n    LogarithmicAxis.prototype.pointsRange = function pointsRange (start, end) {\n        var startValue = this.getValue(start);\n        var endValue = this.getValue(end);\n        var min = Math.min(startValue, endValue);\n        var max = Math.max(startValue, endValue);\n\n        return {\n            min: min,\n            max: max\n        };\n    };\n\n    LogarithmicAxis.prototype.scaleRange = function scaleRange (scale, cursor) {\n        var ref = this.options;\n        var base = ref.majorUnit;\n        var logMin = log(this.options.min, base);\n        var logMax = log(this.options.max, base);\n        var position = Math.abs(this.pointOffset(cursor));\n        var range = logMax - logMin;\n        var delta = this.scaleToDelta(scale, range);\n        var min = Math.pow(base, logMin + position * delta);\n        var 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    LogarithmicAxis.prototype.zoomRange = function zoomRange (scale, cursor) {\n        var range = this.scaleRange(scale, cursor);\n        var ref = this;\n        var totalMin = ref.totalMin;\n        var totalMax = ref.totalMax;\n\n        return {\n            min: limitValue(range.min, totalMin, totalMax),\n            max: limitValue(range.max, totalMin, totalMax)\n        };\n    };\n\n    LogarithmicAxis.prototype._minorIntervalOptions = function _minorIntervalOptions (power) {\n        var ref = this.options;\n        var minorUnit = ref.minorUnit;\n        var base = ref.majorUnit;\n        var value = Math.pow(base, power);\n        var nextValue = Math.pow(base, power + 1);\n        var difference = nextValue - value;\n        var minorStep = difference / minorUnit;\n\n        return {\n            value: value,\n            minorStep: minorStep\n        };\n    };\n\n    LogarithmicAxis.prototype.lineInfo = function lineInfo () {\n        var info = Axis.prototype.lineInfo.call(this);\n        info.step = info.axisDir * (info.lineSize / (this.logMax - this.logMin));\n\n        return info;\n    };\n\n    return LogarithmicAxis;\n}(Axis));\n\nfunction initRange(autoMin, autoMax, axisOptions, options) {\n    var min = axisOptions.min;\n    var max = axisOptions.max;\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    var base = options.majorUnit;\n    var autoMin = min;\n    if (min <= 0) {\n        autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n    } else if (!options.narrowRange) {\n        autoMin = Math.pow(base, Math.floor(log(min, base)));\n    }\n    return autoMin;\n}\n\nfunction autoAxisMax(max, base) {\n    var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n    var autoMax;\n    if (max <= 0) {\n        autoMax = base;\n    } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n        autoMax = Math.pow(base, log(max, base) + 0.2);\n    } else {\n        autoMax = Math.pow(base, Math.ceil(log(max, base)));\n    }\n\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\nvar GridLinesMixin = {\n    createGridLines: function(altAxis) {\n        var options = this.options;\n        var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n        var gridLines = [];\n        var skipMajor = false;\n        var majorAngles, minorAngles;\n\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        var 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        var style = {\n            stroke: {\n                width: options.width,\n                color: options.color,\n                dashType: options.dashType\n            }\n        };\n\n        var center = this.box.center();\n        var circle = new geom.Circle([ center.x, center.y ], radius);\n        var container = this.gridLinesVisual();\n\n        for (var i = 0; i < angles.length; i++) {\n            var 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        var this$1 = this;\n\n        var divs = this.intervals(size, skip, step, skipAngles);\n        var options = altAxis.options;\n        var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n\n        return map(divs, function (d) {\n            var alpha = this$1.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\nvar RadarCategoryAxis = (function (CategoryAxis) {\n    function RadarCategoryAxis () {\n        CategoryAxis.apply(this, arguments);\n    }\n\n    if ( CategoryAxis ) RadarCategoryAxis.__proto__ = CategoryAxis;\n    RadarCategoryAxis.prototype = Object.create( CategoryAxis && CategoryAxis.prototype );\n    RadarCategoryAxis.prototype.constructor = RadarCategoryAxis;\n\n    RadarCategoryAxis.prototype.range = function range () {\n        return { min: 0, max: this.options.categories.length };\n    };\n\n    RadarCategoryAxis.prototype.reflow = function reflow (box) {\n        this.box = box;\n        this.reflowLabels();\n    };\n\n    RadarCategoryAxis.prototype.lineBox = function lineBox () {\n        return this.box;\n    };\n\n    RadarCategoryAxis.prototype.reflowLabels = function reflowLabels () {\n        var this$1 = this;\n\n        var ref = this;\n        var labels = ref.labels;\n        var labelOptions = ref.options.labels;\n        var skip = labelOptions.skip || 0;\n        var step = labelOptions.step || 1;\n        var measureBox = new Box();\n\n        for (var i = 0; i < labels.length; i++) {\n            labels[i].reflow(measureBox);\n            var labelBox = labels[i].box;\n\n            labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(\n                0, labelBox.width(), labelBox.height()\n            ));\n        }\n    };\n\n    RadarCategoryAxis.prototype.intervals = function intervals (size, skipOption, stepOption, skipAngles) {\n        if ( skipAngles === void 0 ) skipAngles = false;\n\n        var options = this.options;\n        var categories = options.categories.length;\n        var divCount = categories / size || 1;\n        var divAngle = 360 / divCount;\n        var skip = skipOption || 0;\n        var step = stepOption || 1;\n        var divs = [];\n        var angle = 0;\n\n        for (var i = skip; i < divCount; i += step) {\n            if (options.reverse) {\n                angle = 360 - i * divAngle;\n            } else {\n                angle = i * divAngle;\n            }\n\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    RadarCategoryAxis.prototype.majorIntervals = function majorIntervals () {\n        return this.intervals(1);\n    };\n\n    RadarCategoryAxis.prototype.minorIntervals = function minorIntervals () {\n        return this.intervals(0.5);\n    };\n\n    RadarCategoryAxis.prototype.intervalAngle = function intervalAngle (interval) {\n        return (360 + interval + this.options.startAngle) % 360;\n    };\n\n    RadarCategoryAxis.prototype.majorAngles = function majorAngles () {\n        var this$1 = this;\n\n        return map(this.majorIntervals(), function (interval) { return this$1.intervalAngle(interval); });\n    };\n\n    RadarCategoryAxis.prototype.createLine = function createLine () {\n        return [];\n    };\n\n    RadarCategoryAxis.prototype.majorGridLineAngles = function majorGridLineAngles (altAxis) {\n        var majorGridLines = this.options.majorGridLines;\n        return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n    };\n\n    RadarCategoryAxis.prototype.minorGridLineAngles = function minorGridLineAngles (altAxis, skipMajor) {\n        var ref = this.options;\n        var minorGridLines = ref.minorGridLines;\n        var majorGridLines = ref.majorGridLines;\n        var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n\n        return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n    };\n\n    RadarCategoryAxis.prototype.radiusCallback = function radiusCallback (radius, altAxis, skipMajor) {\n        if (altAxis.options.type !== ARC) {\n            var minorAngle = rad(360 / (this.options.categories.length * 2));\n            var minorRadius = Math.cos(minorAngle) * radius;\n            var majorAngles = this.majorAngles();\n\n            var 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    RadarCategoryAxis.prototype.createPlotBands = function createPlotBands () {\n        var this$1 = this;\n\n        var plotBands = this.options.plotBands || [];\n\n        var group = this._plotbandGroup = new draw.Group({\n            zIndex: -1\n        });\n\n        for (var i = 0; i < plotBands.length; i++) {\n            var band = plotBands[i];\n            var slot = this$1.plotBandSlot(band);\n            var singleSlot = this$1.getSlot(band.from);\n\n            var head = band.from - Math.floor(band.from);\n            slot.startAngle += head * singleSlot.angle;\n\n            var tail = Math.ceil(band.to) - band.to;\n            slot.angle -= (tail + head) * singleSlot.angle;\n\n            var 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    RadarCategoryAxis.prototype.plotBandSlot = function plotBandSlot (band) {\n        return this.getSlot(band.from, band.to - 1);\n    };\n\n    RadarCategoryAxis.prototype.getSlot = function getSlot (from, to) {\n        var options = this.options;\n        var justified = options.justified;\n        var box = this.box;\n        var divs = this.majorAngles();\n        var totalDivs = divs.length;\n        var slotAngle = 360 / totalDivs;\n        var fromValue = from;\n\n        if (options.reverse && !justified) {\n            fromValue = (fromValue + 1) % totalDivs;\n        }\n\n        fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n        var slotStart = divs[fromValue];\n\n        if (justified) {\n            slotStart = slotStart - slotAngle / 2;\n\n            if (slotStart < 0) {\n                slotStart += 360;\n            }\n        }\n\n        var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n        var slots = toValue - fromValue + 1;\n        var angle = slotAngle * slots;\n\n        return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n    };\n\n    RadarCategoryAxis.prototype.slot = function slot (from, to) {\n        var slot = this.getSlot(from, to);\n        var startAngle = slot.startAngle + 180;\n        var 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    RadarCategoryAxis.prototype.pointCategoryIndex = function pointCategoryIndex (point) {\n        var this$1 = this;\n\n        var length = this.options.categories.length;\n        var index = null;\n\n        for (var i = 0; i < length; i++) {\n            var slot = this$1.getSlot(i);\n            if (slot.containsPoint(point)) {\n                index = i;\n                break;\n            }\n        }\n\n        return index;\n    };\n\n    return RadarCategoryAxis;\n}(CategoryAxis));\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\nvar PolarAxis = (function (Axis) {\n    function PolarAxis(options, chartService) {\n        Axis.call(this, options, chartService);\n\n        var instanceOptions = this.options;\n\n        instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n    }\n\n    if ( Axis ) PolarAxis.__proto__ = Axis;\n    PolarAxis.prototype = Object.create( Axis && Axis.prototype );\n    PolarAxis.prototype.constructor = PolarAxis;\n\n    PolarAxis.prototype.getDivisions = function getDivisions (stepValue) {\n        return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n    };\n\n    PolarAxis.prototype.reflow = function reflow (box) {\n        this.box = box;\n        this.reflowLabels();\n    };\n\n    PolarAxis.prototype.reflowLabels = function reflowLabels () {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var labels = ref.labels;\n        var labelOptions = ref.options.labels;\n        var skip = labelOptions.skip || 0;\n        var step = labelOptions.step || 1;\n\n        var measureBox = new Box();\n        var divs = this.intervals(options.majorUnit, skip, step);\n\n        for (var i = 0; i < labels.length; i++) {\n            labels[i].reflow(measureBox);\n            var labelBox = labels[i].box;\n\n            labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n        }\n    };\n\n    PolarAxis.prototype.lineBox = function lineBox () {\n        return this.box;\n    };\n\n    PolarAxis.prototype.intervals = function intervals (size, skipOption, stepOption, skipAngles) {\n        if ( skipAngles === void 0 ) skipAngles = false;\n\n        var min = this.options.min;\n        var divisions = this.getDivisions(size);\n        var divs = [];\n        var skip = skipOption || 0;\n        var step = stepOption || 1;\n\n        for (var i = skip; i < divisions; i += step) {\n            var current = (360 + min + i * size) % 360;\n            if (!(skipAngles && inArray(current, skipAngles))) {\n                divs.push(current);\n            }\n        }\n\n        return divs;\n    };\n\n    PolarAxis.prototype.majorIntervals = function majorIntervals () {\n        return this.intervals(this.options.majorUnit);\n    };\n\n    PolarAxis.prototype.minorIntervals = function minorIntervals () {\n        return this.intervals(this.options.minorUnit);\n    };\n\n    PolarAxis.prototype.intervalAngle = function intervalAngle (i) {\n        return (540 - i - this.options.startAngle) % 360;\n    };\n\n    PolarAxis.prototype.createLine = function createLine () {\n        return [];\n    };\n\n    PolarAxis.prototype.majorGridLineAngles = function majorGridLineAngles (altAxis) {\n        var majorGridLines = this.options.majorGridLines;\n        return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n    };\n\n    PolarAxis.prototype.minorGridLineAngles = function minorGridLineAngles (altAxis, skipMajor) {\n        var options = this.options;\n        var minorGridLines = options.minorGridLines;\n        var majorGridLines = options.majorGridLines;\n        var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n\n        return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n    };\n\n    PolarAxis.prototype.plotBandSlot = function plotBandSlot (band) {\n        return this.getSlot(band.from, band.to);\n    };\n\n    PolarAxis.prototype.getSlot = function getSlot (a, b) {\n        var ref = this;\n        var options = ref.options;\n        var box = ref.box;\n        var startAngle = options.startAngle;\n        var start = limitValue(a, options.min, options.max);\n        var end = limitValue(b || start, start, options.max);\n\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            var 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    PolarAxis.prototype.slot = function slot (from, to) {\n        if ( to === void 0 ) to = from;\n\n        var options = this.options;\n        var start = 360 - options.startAngle;\n        var slot = this.getSlot(from, to);\n        var min = Math.min(from, to);\n        var max = Math.max(from, to);\n        var startAngle, endAngle;\n\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    PolarAxis.prototype.getValue = function getValue (point) {\n        var options = this.options;\n        var center = this.box.center();\n        var dx = point.x - center.x;\n        var dy = point.y - center.y;\n        var theta = Math.round(deg(Math.atan2(dy, dx)));\n        var start = options.startAngle;\n\n        if (!options.reverse) {\n            theta *= -1;\n            start *= -1;\n        }\n\n        return (theta + start + 360) % 360;\n    };\n\n    PolarAxis.prototype.valueRange = function valueRange () {\n        return {\n            min: 0,\n            max: Math.PI * 2\n        };\n    };\n\n    return PolarAxis;\n}(Axis));\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\nvar RadarNumericAxisMixin = {\n    options: {\n        majorGridLines: {\n            visible: true\n        }\n    },\n\n    createPlotBands: function() {\n        var this$1 = this;\n\n        var ref = this.options;\n        var type = ref.majorGridLines.type;\n        var plotBands = ref.plotBands; if ( plotBands === void 0 ) plotBands = [];\n        var altAxis = this.plotArea.polarAxis;\n        var majorAngles = altAxis.majorAngles();\n        var center = altAxis.box.center();\n        var group = this._plotbandGroup = new draw.Group({\n            zIndex: -1\n        });\n\n        for (var i = 0; i < plotBands.length; i++) {\n            var band = plotBands[i];\n            var bandStyle = {\n                fill: {\n                    color: band.color,\n                    opacity: band.opacity\n                },\n                stroke: {\n                    opacity: band.opacity\n                }\n            };\n\n            var slot = this$1.getSlot(band.from, band.to, true);\n            var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n\n            var shape = (void 0);\n            if (type === ARC) {\n                shape = ShapeBuilder.current.createRing(ring, bandStyle);\n            } else {\n                shape = draw.Path.fromPoints(this$1.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        var innerPoints = [];\n        var outerPoints = [];\n        var center = [ ring.center.x, ring.center.y ];\n        var innerCircle = new geom.Circle(center, ring.innerRadius);\n        var outerCircle = new geom.Circle(center, ring.radius);\n\n        for (var i = 0; i < angles.length; i++) {\n            innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n            outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n        }\n\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        var options = this.options;\n        var majorTicks = this.radarMajorGridLinePositions();\n        var majorAngles = altAxis.majorAngles();\n        var center = altAxis.box.center();\n        var 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            var 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        var style = {\n            stroke: {\n                width: options.width,\n                color: options.color,\n                dashType: options.dashType\n            }\n        };\n        var skip = options.skip; if ( skip === void 0 ) skip = 0;\n        var step = options.step; if ( step === void 0 ) step = 0;\n        var container = this.gridLinesVisual();\n\n        for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n            var tickRadius = center.y - ticks[tickIx];\n            if (tickRadius > 0) {\n                var circle = new geom.Circle([ center.x, center.y ], tickRadius);\n                if (options.type === ARC) {\n                    container.append(new draw.Circle(circle, style));\n                } else {\n                    var line = new draw.Path(style);\n                    for (var 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        var lineBox = this.lineBox();\n        var altAxis = this.plotArea.polarAxis;\n        var majorAngles = altAxis.majorAngles();\n        var center = altAxis.box.center();\n        var radius = point.distanceTo(center);\n        var distance = radius;\n\n        if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n            var dx = point.x - center.x;\n            var dy = point.y - center.y;\n            var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n\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            var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n            var alpha = angularDistance(theta, majorAngles[0]);\n            var gamma = 90 - midAngle;\n            var beta = 180 - alpha - gamma;\n\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\nvar RadarNumericAxis = (function (NumericAxis) {\n    function RadarNumericAxis () {\n        NumericAxis.apply(this, arguments);\n    }\n\n    if ( NumericAxis ) RadarNumericAxis.__proto__ = NumericAxis;\n    RadarNumericAxis.prototype = Object.create( NumericAxis && NumericAxis.prototype );\n    RadarNumericAxis.prototype.constructor = RadarNumericAxis;\n\n    RadarNumericAxis.prototype.radarMajorGridLinePositions = function radarMajorGridLinePositions () {\n        return this.getTickPositions(this.options.majorUnit);\n    };\n\n    RadarNumericAxis.prototype.radarMinorGridLinePositions = function radarMinorGridLinePositions () {\n        var options = this.options;\n        var minorSkipStep = 0;\n\n        if (options.majorGridLines.visible) {\n            minorSkipStep = options.majorUnit;\n        }\n        return this.getTickPositions(options.minorUnit, minorSkipStep);\n    };\n\n    RadarNumericAxis.prototype.axisType = function axisType () {\n        return NumericAxis;\n    };\n\n    return RadarNumericAxis;\n}(NumericAxis));\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\nvar RadarLogarithmicAxis = (function (LogarithmicAxis) {\n    function RadarLogarithmicAxis () {\n        LogarithmicAxis.apply(this, arguments);\n    }\n\n    if ( LogarithmicAxis ) RadarLogarithmicAxis.__proto__ = LogarithmicAxis;\n    RadarLogarithmicAxis.prototype = Object.create( LogarithmicAxis && LogarithmicAxis.prototype );\n    RadarLogarithmicAxis.prototype.constructor = RadarLogarithmicAxis;\n\n    RadarLogarithmicAxis.prototype.radarMajorGridLinePositions = function radarMajorGridLinePositions () {\n        var positions = [];\n\n        this.traverseMajorTicksPositions(function(position) {\n            positions.push(position);\n        }, this.options.majorGridLines);\n\n        return positions;\n    };\n\n    RadarLogarithmicAxis.prototype.radarMinorGridLinePositions = function radarMinorGridLinePositions () {\n        var positions = [];\n\n        this.traverseMinorTicksPositions(function(position) {\n            positions.push(position);\n        }, this.options.minorGridLines);\n\n        return positions;\n    };\n\n    RadarLogarithmicAxis.prototype.axisType = function axisType () {\n        return LogarithmicAxis;\n    };\n\n    return RadarLogarithmicAxis;\n}(LogarithmicAxis));\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\nvar WEIGHT = 0.333;\nvar EXTREMUM_ALLOWED_DEVIATION = 0.01;\n\nvar CurveProcessor = (function (Class) {\n    function CurveProcessor(closed) {\n        Class.call(this);\n\n        this.closed = closed;\n    }\n\n    if ( Class ) CurveProcessor.__proto__ = Class;\n    CurveProcessor.prototype = Object.create( Class && Class.prototype );\n    CurveProcessor.prototype.constructor = CurveProcessor;\n\n    CurveProcessor.prototype.process = function process (dataPoints) {\n        var this$1 = this;\n\n        var points = dataPoints.slice(0);\n        var segments = [];\n        var closed = this.closed;\n        var 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        var p0 = points[0];\n        var p1 = points[1];\n        var 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            var 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        var initialControlPoint, lastControlPoint;\n\n        if (closed) {\n            p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n            var controlPoints = this.controlPoints(p0, p1, p2);\n            initialControlPoint = controlPoints[1];\n            lastControlPoint = controlPoints[0];\n        } else {\n            var tangent$1 = this.tangent(p0, p1, X,Y);\n            initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n        }\n\n        var cp0 = initialControlPoint;\n        for (var idx = 0; idx <= length - 3; idx++) {\n            this$1.removeDuplicates(idx, points);\n            length = points.length;\n            if (idx + 3 <= length) {\n                p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n                var controlPoints$1 = this$1.controlPoints(p0,p1,p2);\n\n                last(segments).controlOut(cp0);\n                cp0 = controlPoints$1[1];\n\n                var cp1 = controlPoints$1[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            var controlPoints$2 = this.controlPoints(p0, p1, p2);\n\n            last(segments).controlOut(cp0);\n            segments.push(new geom.Segment(\n                p1,\n                controlPoints$2[0]\n            ));\n\n            last(segments).controlOut(controlPoints$2[1]);\n            segments.push(new geom.Segment(\n                p2,\n                lastControlPoint\n            ));\n        } else {\n            var tangent$2 = this.tangent(p1, p2, X, Y);\n\n            last(segments).controlOut(cp0);\n            segments.push(new geom.Segment(\n                p2,\n                this.secondControlPoint(tangent$2, p1, p2, X, Y)\n            ));\n        }\n\n        return segments;\n    };\n\n    CurveProcessor.prototype.removeDuplicates = function 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    CurveProcessor.prototype.invertAxis = function invertAxis (p0, p1, p2) {\n        var 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            var fn = this.lineFunction(p0,p1);\n            var 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    CurveProcessor.prototype.isLine = function isLine (p0, p1, p2) {\n        var fn = this.lineFunction(p0, p1);\n        var 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    CurveProcessor.prototype.lineFunction = function lineFunction (p1, p2) {\n        var a = (p2.y - p1.y) / (p2.x - p1.x);\n        var b = p1.y - a * p1.x;\n\n        return [ b, a ];\n    };\n\n    CurveProcessor.prototype.controlPoints = function controlPoints (p0, p1, p2) {\n        var xField = X;\n        var yField = Y;\n        var restrict = false;\n        var switchOrientation = false;\n        var tangent;\n\n        if (this.isLine(p0, p1, p2)) {\n            tangent = this.tangent(p0, p1, X, Y);\n        } else {\n            var monotonic = {\n                x: this.isMonotonicByField(p0, p1, p2, X),\n                y: this.isMonotonicByField(p0, p1, p2, Y)\n            };\n\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                    var 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        var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n\n        if (switchOrientation) {\n            var oldXField = xField;\n            xField = yField;\n            yField = oldXField;\n        }\n\n        var 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    CurveProcessor.prototype.restrictControlPoint = function 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    CurveProcessor.prototype.tangent = function tangent (p0, p1, xField, yField) {\n        var x = p1[xField] - p0[xField];\n        var y = p1[yField] - p0[yField];\n        var tangent;\n\n        if (x === 0) {\n            tangent = 0;\n        } else {\n            tangent = y / x;\n        }\n\n        return tangent;\n    };\n\n    CurveProcessor.prototype.isMonotonicByField = function 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    CurveProcessor.prototype.firstControlPoint = function firstControlPoint (tangent, p0, p3, xField, yField) {\n        var t1 = p0[xField];\n        var t2 = p3[xField];\n        var distance = (t2 - t1) * WEIGHT;\n\n        return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n    };\n\n    CurveProcessor.prototype.secondControlPoint = function secondControlPoint (tangent, p0, p3, xField, yField) {\n        var t1 = p0[xField];\n        var t2 = p3[xField];\n        var distance = (t2 - t1) * WEIGHT;\n\n        return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n    };\n\n    CurveProcessor.prototype.point = function point (xValue, yValue, xField, yField) {\n        var controlPoint = new geom.Point();\n        controlPoint[xField] = xValue;\n        controlPoint[yField] = yValue;\n\n        return controlPoint;\n    };\n\n    CurveProcessor.prototype.calculateFunction = function calculateFunction (fn, x) {\n        var length = fn.length;\n        var result = 0;\n\n        for (var i = 0; i < length; i++) {\n            result += Math.pow(x,i) * fn[i];\n        }\n        return result;\n    };\n\n    return CurveProcessor;\n}(Class));\n\nfunction numberSign(value) {\n    return value <= 0 ? -1 : 1;\n}\n\nexport default CurveProcessor;","import { Class } from '../../common';\n\nvar ChartAxis = (function (Class) {\n    function ChartAxis(axis) {\n        Class.call(this);\n\n        this._axis = axis;\n        this.options = axis.options;\n    }\n\n    if ( Class ) ChartAxis.__proto__ = Class;\n    ChartAxis.prototype = Object.create( Class && Class.prototype );\n    ChartAxis.prototype.constructor = ChartAxis;\n\n    ChartAxis.prototype.value = function value (point) {\n        var axis = this._axis;\n        var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n\n        return value;\n    };\n\n    ChartAxis.prototype.slot = function slot (from, to, limit) {\n        if ( limit === void 0 ) limit = true;\n\n        return this._axis.slot(from, to, limit);\n    };\n\n    ChartAxis.prototype.range = function range () {\n        return this._axis.range();\n    };\n\n    ChartAxis.prototype.valueRange = function valueRange () {\n        return this._axis.valueRange();\n    };\n\n    return ChartAxis;\n}(Class));\n\nexport default ChartAxis;","import ChartAxis from './chart-axis';\n\nexport default function findAxisByName(name, axes) {\n    for (var 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\nvar ChartPane = function ChartPane(pane) {\n    this.visual = pane.visual;\n    this.chartsVisual = pane.chartContainer.visual;\n    this._pane = pane;\n};\n\nChartPane.prototype.findAxisByName = function findAxisByName$1 (name) {\n    return findAxisByName(name, this._pane.axes);\n};\n\nexport default ChartPane;","import { Class } from '../../common';\n\nvar ChartPlotArea = (function (Class) {\n    function ChartPlotArea(plotArea) {\n        Class.call(this);\n\n        this._plotArea = plotArea;\n        this.visual = plotArea.visual;\n        this.backgroundVisual = plotArea._bgVisual;\n    }\n\n    if ( Class ) ChartPlotArea.__proto__ = Class;\n    ChartPlotArea.prototype = Object.create( Class && Class.prototype );\n    ChartPlotArea.prototype.constructor = ChartPlotArea;\n\n    return ChartPlotArea;\n}(Class));\n\nexport default ChartPlotArea;","import { isNumber } from '../../common';\n\nexport default function countNumbers(values) {\n    var length = values.length;\n    var count = 0;\n\n    for (var i = 0; i < length; i++) {\n        var 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\nvar Aggregates = {\n    min: function(values) {\n        var length = values.length;\n        var min = MAX_VALUE;\n\n        for (var i = 0; i < length; i++) {\n            var 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        var length = values.length;\n        var max = MIN_VALUE;\n\n        for (var i = 0; i < length; i++) {\n            var 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        var length = values.length;\n        var sum = 0;\n\n        for (var i = 0; i < length; i++) {\n            var value = values[i];\n            if (isNumber(value)) {\n                sum += value;\n            }\n        }\n\n        return sum;\n    },\n\n    sumOrNull: function(values) {\n        var result = null;\n\n        if (countNumbers(values)) {\n            result = Aggregates.sum(values);\n        }\n\n        return result;\n    },\n\n    count: function(values) {\n        var length = values.length;\n        var count = 0;\n\n        for (var i = 0; i < length; i++) {\n            var value = values[i];\n            if (value !== null && defined(value)) {\n                count++;\n            }\n        }\n\n        return count;\n    },\n\n    avg: function(values) {\n        var count = countNumbers(values);\n        var 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        var length = values.length;\n\n        for (var i = 0; i < length; i++) {\n            var 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 getField from './utils/get-field';\nimport { VALUE } from '../common/constants';\nimport { Class, defined } from '../common';\n\nvar SeriesBinder = (function (Class) {\n    function SeriesBinder() {\n        Class.call(this);\n\n        this._valueFields = {};\n        this._otherFields = {};\n        this._nullValue = {};\n        this._undefinedValue = {};\n    }\n\n    if ( Class ) SeriesBinder.__proto__ = Class;\n    SeriesBinder.prototype = Object.create( Class && Class.prototype );\n    SeriesBinder.prototype.constructor = SeriesBinder;\n\n    SeriesBinder.prototype.register = function register (seriesTypes, valueFields, otherFields) {\n        var this$1 = this;\n        if ( valueFields === void 0 ) valueFields = [ VALUE ];\n        if ( otherFields === void 0 ) otherFields = {};\n\n\n        for (var i = 0; i < seriesTypes.length; i++) {\n            var type = seriesTypes[i];\n\n            this$1._valueFields[type] = valueFields;\n            this$1._otherFields[type] = otherFields;\n            this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n            this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n        }\n    };\n\n    SeriesBinder.prototype.canonicalFields = function canonicalFields (series) {\n        return this.valueFields(series).concat(this.otherFields(series));\n    };\n\n    SeriesBinder.prototype.valueFields = function valueFields (series) {\n        return this._valueFields[series.type] || [ VALUE ];\n    };\n\n    SeriesBinder.prototype.otherFields = function otherFields (series) {\n        return this._otherFields[series.type] || [ VALUE ];\n    };\n\n    SeriesBinder.prototype.bindPoint = function bindPoint (series, pointIx, item) {\n        var data = series.data;\n        var pointData = defined(item) ? item : data[pointIx];\n        var result = { valueFields: { value: pointData } };\n        var valueFields = this.valueFields(series);\n        var otherFields = this._otherFields[series.type];\n        var 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            var fieldData = pointData.slice(valueFields.length);\n            value = this._bindFromArray(pointData, valueFields);\n            fields = this._bindFromArray(fieldData, otherFields);\n        } else if (typeof pointData === \"object\") {\n            var srcValueFields = this.sourceFields(series, valueFields);\n            var 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    SeriesBinder.prototype._makeValue = function _makeValue (fields, initialValue) {\n        var value = {};\n        var length = fields.length;\n\n        for (var i = 0; i < length; i++) {\n            var fieldName = fields[i];\n            value[fieldName] = initialValue;\n        }\n\n        return value;\n    };\n\n    SeriesBinder.prototype._bindFromArray = function _bindFromArray (array, fields) {\n        var value = {};\n\n        if (fields) {\n            var length = Math.min(fields.length, array.length);\n\n            for (var i = 0; i < length; i++) {\n                value[fields[i]] = array[i];\n            }\n        }\n\n        return value;\n    };\n\n    SeriesBinder.prototype._bindFromObject = function _bindFromObject (object, fields, srcFields) {\n        if ( srcFields === void 0 ) srcFields = fields;\n\n        var value = {};\n\n        if (fields) {\n            var length = fields.length;\n\n            for (var i = 0; i < length; i++) {\n                var fieldName = fields[i];\n                var srcFieldName = srcFields[i];\n                if (srcFieldName !== null) {\n                    value[fieldName] = getField(srcFieldName, object);\n                }\n            }\n        }\n\n        return value;\n    };\n\n    SeriesBinder.prototype.sourceFields = function sourceFields (series, canonicalFields) {\n        var sourceFields = [];\n\n        if (canonicalFields) {\n            var length = canonicalFields.length;\n\n            for (var i = 0; i < length; i++) {\n                var fieldName = canonicalFields[i];\n                var 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    return SeriesBinder;\n}(Class));\n\nSeriesBinder.current = new SeriesBinder();\n\nexport default SeriesBinder;","import { getter } from '../../common';\n\nexport default function getField(field, row) {\n    if (row === null) {\n        return row;\n    }\n\n    var get = getter(field, true);\n    return get(row);\n}","import SeriesBinder from '../series-binder';\n\nimport { OBJECT } from '../../common/constants';\nimport { Class, defined, getter, isArray, isNumber } from '../../common';\n\nvar STD_ERR = \"stderr\";\nvar STD_DEV = \"stddev\";\nvar percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\nvar standardDeviationRegex = new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\");\n\nvar ErrorRangeCalculator = (function (Class) {\n    function ErrorRangeCalculator(errorValue, series, field) {\n        Class.call(this);\n\n        this.initGlobalRanges(errorValue, series, field);\n    }\n\n    if ( Class ) ErrorRangeCalculator.__proto__ = Class;\n    ErrorRangeCalculator.prototype = Object.create( Class && Class.prototype );\n    ErrorRangeCalculator.prototype.constructor = ErrorRangeCalculator;\n\n    ErrorRangeCalculator.prototype.initGlobalRanges = function initGlobalRanges (errorValue, series, field) {\n        var data = series.data;\n        var deviationMatch = standardDeviationRegex.exec(errorValue);\n\n        if (deviationMatch) {\n            this.valueGetter = this.createValueGetter(series, field);\n\n            var average = this.getAverage(data);\n            var deviation = this.getStandardDeviation(data, average, false);\n            var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n            var 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            var 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    ErrorRangeCalculator.prototype.createValueGetter = function createValueGetter (series, field) {\n        var data = series.data;\n        var binder = SeriesBinder.current;\n        var valueFields = binder.valueFields(series);\n        var item = defined(data[0]) ? data[0] : {};\n        var valueGetter;\n\n        if (isArray(item)) {\n            var 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            var srcValueFields = binder.sourceFields(series, valueFields);\n            valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n        }\n\n        return valueGetter;\n    };\n\n    ErrorRangeCalculator.prototype.getErrorRange = function getErrorRange (pointValue, errorValue) {\n        var 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            var 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    ErrorRangeCalculator.prototype.getStandardError = function getStandardError (data, average) {\n        return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n    };\n\n    ErrorRangeCalculator.prototype.getStandardDeviation = function getStandardDeviation (data, average, isSample) {\n        var this$1 = this;\n\n        var length = data.length;\n        var total = isSample ? average.count - 1 : average.count;\n        var squareDifferenceSum = 0;\n\n        for (var idx = 0; idx < length; idx++) {\n            var value = this$1.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    ErrorRangeCalculator.prototype.getAverage = function getAverage (data) {\n        var this$1 = this;\n\n        var length = data.length;\n        var sum = 0;\n        var count = 0;\n\n        for (var idx = 0; idx < length; idx++) {\n            var value = this$1.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    return ErrorRangeCalculator;\n}(Class));\n\nexport default ErrorRangeCalculator;","import { support } from '@progress/kendo-drawing';\n\nvar browser = support.browser || {};\n\nvar INITIAL_ANIMATION_DURATION = 600;\nvar FADEIN = \"fadeIn\";\n\nvar GLASS = \"glass\";\nvar BORDER_BRIGHTNESS = 0.8;\nvar TOOLTIP_OFFSET = 5;\nvar START_SCALE = browser.msie ? 0.001 : 0;\nvar ERROR_LOW_FIELD = \"errorLow\";\nvar ERROR_HIGH_FIELD = \"errorHigh\";\nvar X_ERROR_LOW_FIELD = \"xErrorLow\";\nvar X_ERROR_HIGH_FIELD = \"xErrorHigh\";\nvar Y_ERROR_LOW_FIELD = \"yErrorLow\";\nvar Y_ERROR_HIGH_FIELD = \"yErrorHigh\";\nvar LINE_MARKER_SIZE = 8;\nvar ZERO = \"zero\";\nvar INTERPOLATE = \"interpolate\";\nvar GAP = \"gap\";\nvar ABOVE = \"above\";\nvar BELOW = \"below\";\nvar BOTTOM = \"bottom\";\n\nvar SMOOTH = \"smooth\";\nvar STEP = \"step\";\n\nvar AREA = \"area\";\nvar BAR = \"bar\";\nvar BOX_PLOT = \"boxPlot\";\nvar BUBBLE = \"bubble\";\nvar BULLET = \"bullet\";\nvar CANDLESTICK = \"candlestick\";\nvar COLUMN = \"column\";\nvar DONUT = \"donut\";\nvar FUNNEL = \"funnel\";\nvar PYRAMID = \"pyramid\";\nvar HEATMAP = \"heatmap\";\nvar HORIZONTAL_WATERFALL = \"horizontalWaterfall\";\nvar LINE = \"line\";\nvar OHLC = \"ohlc\";\nvar PIE = \"pie\";\nvar POLAR_AREA = \"polarArea\";\nvar POLAR_LINE = \"polarLine\";\nvar POLAR_SCATTER = \"polarScatter\";\nvar RADAR_AREA = \"radarArea\";\nvar RADAR_COLUMN = \"radarColumn\";\nvar RADAR_LINE = \"radarLine\";\nvar RANGE_AREA = \"rangeArea\";\nvar RANGE_BAR = \"rangeBar\";\nvar RANGE_COLUMN = \"rangeColumn\";\nvar SCATTER = \"scatter\";\nvar SCATTER_LINE = \"scatterLine\";\nvar VERTICAL_AREA = \"verticalArea\";\nvar VERTICAL_BOX_PLOT = \"verticalBoxPlot\";\nvar VERTICAL_BULLET = \"verticalBullet\";\nvar VERTICAL_LINE = \"verticalLine\";\nvar VERTICAL_RANGE_AREA = \"verticalRangeArea\";\nvar WATERFALL = \"waterfall\";\nvar EQUALLY_SPACED_SERIES = [\n    BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, VERTICAL_BOX_PLOT,\n    BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n];\n\nvar TRENDLINE_EXPONENTIAL = 'exponentialTrendline';\nvar TRENDLINE_LINEAR = 'linearTrendline';\nvar TRENDLINE_LOGARITHMIC = 'logarithmicTrendline';\nvar TRENDLINE_MOVING_AVERAGE = 'movingAverageTrendline';\nvar TRENDLINE_POLYNOMIAL = 'polynomialTrendline';\nvar TRENDLINE_POWER = 'powerTrendline';\nvar TRENDLINE_SERIES = [\n    TRENDLINE_EXPONENTIAL,\n    TRENDLINE_LINEAR,\n    TRENDLINE_LOGARITHMIC,\n    TRENDLINE_MOVING_AVERAGE,\n    TRENDLINE_POLYNOMIAL,\n    TRENDLINE_POWER\n];\n\nvar LEGEND_ITEM_CLICK = \"legendItemClick\";\nvar LEGEND_ITEM_HOVER = \"legendItemHover\";\nvar LEGEND_ITEM_LEAVE = \"legendItemLeave\";\nvar SERIES_CLICK = \"seriesClick\";\nvar SERIES_HOVER = \"seriesHover\";\nvar SERIES_OVER = \"seriesOver\";\nvar SERIES_LEAVE = \"seriesLeave\";\nvar PLOT_AREA_CLICK = \"plotAreaClick\";\nvar PLOT_AREA_HOVER = \"plotAreaHover\";\nvar PLOT_AREA_LEAVE = \"plotAreaLeave\";\nvar DRAG = \"drag\";\nvar DRAG_END = \"dragEnd\";\nvar DRAG_START = \"dragStart\";\nvar ZOOM_START = \"zoomStart\";\nvar ZOOM = \"zoom\";\nvar ZOOM_END = \"zoomEnd\";\nvar SELECT_START = \"selectStart\";\nvar SELECT = \"select\";\nvar SELECT_END = \"selectEnd\";\nvar RENDER = \"render\";\nvar SHOW_TOOLTIP = \"showTooltip\";\nvar HIDE_TOOLTIP = \"hideTooltip\";\nvar PANE_RENDER = \"paneRender\";\n\n\nvar CHART_POINT_ROLE = \"graphics-symbol\";\nvar CHART_POINT_CLASSNAME = \"k-chart-point\";\nvar CHART_POINT_ROLE_DESCRIPTION = \"Point\";\nvar LEGEND_ITEM_ROLE = \"checkbox\";\nvar LEGEND_ITEM_CLASSNAME = \"k-chart-legend-item\";\nvar LEGEND_ITEM_ARIA_ROLE_DESCRIPTION = \"Legend item\";\n\nvar LOGARITHMIC = \"log\";\nvar CATEGORY = \"category\";\n\nvar INSIDE_END = \"insideEnd\";\nvar INSIDE_BASE = \"insideBase\";\nvar OUTSIDE_END = \"outsideEnd\";\n\nvar MOUSEWHEEL = \"wheel\";\nvar MOUSEWHEEL_DELAY = 150;\nvar MOUSEWHEEL_ZOOM_RATE = 0.3;\n\nvar DRILLDOWN = \"drilldown\";\nvar DRILLDOWN_FIELD = \"drilldown\";\nvar PATTERN_FIELD = \"pattern\";\n\nvar MIN_MOVING_AVERAGE_PERIOD = 2;\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,\n    GLASS, 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, PYRAMID,\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,\n    ABOVE, BELOW, BOTTOM,\n    HEATMAP,\n    DRILLDOWN, DRILLDOWN_FIELD,\n    MIN_MOVING_AVERAGE_PERIOD,\n    TRENDLINE_SERIES,\n    TRENDLINE_EXPONENTIAL,\n    TRENDLINE_LINEAR,\n    TRENDLINE_LOGARITHMIC,\n    TRENDLINE_MOVING_AVERAGE,\n    TRENDLINE_POLYNOMIAL,\n    TRENDLINE_POWER,\n    PATTERN_FIELD,\n    CHART_POINT_ROLE, CHART_POINT_CLASSNAME, CHART_POINT_ROLE_DESCRIPTION,\n    LEGEND_ITEM_ROLE, LEGEND_ITEM_CLASSNAME,\n    LEGEND_ITEM_ARIA_ROLE_DESCRIPTION\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\nvar DEFAULT_ERROR_BAR_WIDTH = 4;\n\nvar ErrorBarBase = (function (ChartElement) {\n    function ErrorBarBase(low, high, isVertical, chart, series, options) {\n        ChartElement.call(this, 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    if ( ChartElement ) ErrorBarBase.__proto__ = ChartElement;\n    ErrorBarBase.prototype = Object.create( ChartElement && ChartElement.prototype );\n    ErrorBarBase.prototype.constructor = ErrorBarBase;\n\n    ErrorBarBase.prototype.reflow = function reflow (targetBox) {\n        var endCaps = this.options.endCaps;\n        var isVertical = this.isVertical;\n        var axis = this.getAxis();\n        var valueBox = axis.getSlot(this.low, this.high);\n        var centerBox = targetBox.center();\n        var capsWidth = this.getCapsWidth(targetBox, isVertical);\n        var capValue = isVertical ? centerBox.x : centerBox.y;\n        var capStart = capValue - capsWidth;\n        var capEnd = capValue + capsWidth;\n        var 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    ErrorBarBase.prototype.getCapsWidth = function getCapsWidth (box, isVertical) {\n        var boxSize = isVertical ? box.width() : box.height();\n        var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n\n        return capsWidth;\n    };\n\n    ErrorBarBase.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var options = this.options;\n        var 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: function () {\n                    this$1.createDefaultVisual();\n                    var defaultVisual = this$1.visual;\n                    delete this$1.visual;\n                    return defaultVisual;\n                }\n            });\n        } else {\n            this.createDefaultVisual();\n        }\n    };\n\n    ErrorBarBase.prototype.createDefaultVisual = function createDefaultVisual () {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var linePoints = ref.linePoints;\n        var lineOptions = {\n            stroke: {\n                color: options.color,\n                width: options.line.width,\n                dashType: options.line.dashType\n            }\n        };\n\n        ChartElement.prototype.createVisual.call(this);\n\n        for (var idx = 0; idx < linePoints.length; idx += 2) {\n            var 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$1.visual.append(line);\n        }\n    };\n\n    return ErrorBarBase;\n}(ChartElement));\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\nvar CategoricalErrorBar = (function (ErrorBarBase) {\n    function CategoricalErrorBar () {\n        ErrorBarBase.apply(this, arguments);\n    }\n\n    if ( ErrorBarBase ) CategoricalErrorBar.__proto__ = ErrorBarBase;\n    CategoricalErrorBar.prototype = Object.create( ErrorBarBase && ErrorBarBase.prototype );\n    CategoricalErrorBar.prototype.constructor = CategoricalErrorBar;\n\n    CategoricalErrorBar.prototype.getAxis = function getAxis () {\n        var axis = this.chart.seriesValueAxis(this.series);\n\n        return axis;\n    };\n\n    return CategoricalErrorBar;\n}(ErrorBarBase));\n\nexport default CategoricalErrorBar;","import { defined } from '../../common';\n\nexport default function anyHasZIndex(elements) {\n    for (var idx = 0; idx < elements.length; idx++) {\n        if (defined(elements[idx].zIndex)) {\n            return true;\n        }\n    }\n}","export default function appendIfNotNull(array, element) {\n    if (element !== null) {\n        array.push(element);\n    }\n}","import countNumbers from './count-numbers';\n\nexport default function areNumbers(values) {\n    return countNumbers(values) === values.length;\n}","import { defined } from '../../common';\n\nexport default function segmentVisible(series, fields, index) {\n    var visible = fields.visible;\n    if (defined(visible)) {\n        return visible;\n    }\n\n    var 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    var data = series.data;\n    var points = [];\n    var sum = 0;\n    var count = 0;\n\n    for (var idx = 0; idx < data.length; idx++) {\n        var pointData = SeriesBinder.current.bindPoint(series, idx);\n        var 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 categoriesCount(series) {\n    var seriesCount = series.length;\n    var categories = 0;\n\n    for (var i = 0; i < seriesCount; i++) {\n        categories = Math.max(categories, series[i].data.length);\n    }\n\n    return categories;\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, isFunction, isObject, valueOrDefault, hasOwnProperty } from '../../common';\n\nvar MAX_EXPAND_DEPTH = 5;\n\nexport default function evalOptions(options, context, state, dryRun) {\n    if ( state === void 0 ) state = {};\n    if ( dryRun === void 0 ) dryRun = false;\n\n    var defaults = state.defaults = state.defaults || {};\n    var depth = state.depth = state.depth || 0;\n    var needsEval = false;\n\n    state.excluded = state.excluded || [];\n\n    if (depth > MAX_EXPAND_DEPTH) {\n        return null;\n    }\n\n    for (var property in options) {\n        if (!inArray(property, state.excluded) && hasOwnProperty(options, property)) {\n            var 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}","import { inArray } from '../../common';\n\nexport default function filterSeriesByType(series, types) {\n    var result = [];\n\n    var seriesTypes = [].concat(types);\n    for (var idx = 0; idx < series.length; idx++) {\n        var 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';\n\nvar dateCache = new WeakMap();\n\nexport default function parseDateCategory(category, row, intlService) {\n    if (row === null || typeof row !== 'object') {\n        return parseDate(intlService, category);\n    }\n\n    var date = dateCache.get(row);\n    if (!date) {\n        date = parseDate(intlService, category);\n        dateCache.set(row, date);\n    }\n\n    return date;\n}\n","export default function hasGradientOverlay(options) {\n    var overlay = options.overlay;\n\n    return overlay && overlay.gradient && overlay.gradient !== \"none\";\n}","import { defined } from '../../common';\n\nexport default function hasValue(value) {\n    return defined(value) && value !== null;\n}","import equalsIgnoreCase from './equals-ignore-case';\n\nimport { DATE } from '../../common/constants';\n\nexport default function isDateAxis(axisOptions, sampleCategory) {\n    var type = axisOptions.type;\n    var 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\nvar 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    var fields = SeriesBinder.current.bindPoint(series, null, item);\n    var valueFields = fields.valueFields;\n\n    for (var field in valueFields) {\n        if (convertableToNumber(valueFields[field])) {\n            return true;\n        }\n    }\n}\n\nfunction findNext(ref) {\n    var start = ref.start;\n    var dir = ref.dir;\n    var min = ref.min;\n    var max = ref.max;\n    var getter = ref.getter;\n    var hasItem = ref.hasItem;\n    var series = ref.series;\n\n    var pointHasValue, outPoint;\n    var 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    var min = range.min;\n    var max = range.max;\n    var hasMinPoint = min > 0 && min < count;\n    var hasMaxPoint = max + 1 < count;\n\n    if (hasMinPoint || hasMaxPoint) {\n        var missingValues = seriesMissingValues(series);\n        var 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            var 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 ErrorRangeCalculator from './error-bars/error-range-calculator';\nimport CategoricalErrorBar from './error-bars/categorical-error-bar';\n\nimport { ERROR_LOW_FIELD, ERROR_HIGH_FIELD } from './constants';\n\nimport { evalOptions, categoriesCount } from './utils';\n\nimport { ChartElement, Box } from '../core';\n\nimport { VALUE, STRING, MIN_VALUE, MAX_VALUE, OBJECT } from '../common/constants';\nimport { convertableToNumber, deepExtend, defined, isNumber, last, setDefaultOptions, sparseArrayLimits } from '../common';\n\nvar CategoricalChart = (function (ChartElement) {\n    function CategoricalChart(plotArea, options) {\n        ChartElement.call(this, 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    if ( ChartElement ) CategoricalChart.__proto__ = ChartElement;\n    CategoricalChart.prototype = Object.create( ChartElement && ChartElement.prototype );\n    CategoricalChart.prototype.constructor = CategoricalChart;\n\n    CategoricalChart.prototype.render = function render () {\n        this.traverseDataPoints(this.addValue.bind(this));\n    };\n\n    CategoricalChart.prototype.pointOptions = function pointOptions (series, seriesIx) {\n        var options = this.seriesOptions[seriesIx];\n        if (!options) {\n            var 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    CategoricalChart.prototype.plotValue = function plotValue (point) {\n        if (!point) {\n            return 0;\n        }\n\n        if (this.options.isStacked100 && isNumber(point.value)) {\n            var categoryIx = point.categoryIx;\n            var categoryPoints = this.categoryPoints[categoryIx];\n            var otherValues = [];\n            var categorySum = 0;\n\n            for (var i = 0; i < categoryPoints.length; i++) {\n                var other = categoryPoints[i];\n                if (other) {\n                    var stack = point.series.stack;\n                    var 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    CategoricalChart.prototype.plotRange = function plotRange (point, startValue) {\n        var this$1 = this;\n        if ( startValue === void 0 ) startValue = 0;\n\n        var categoryPoints = this.categoryPoints[point.categoryIx];\n\n        if (this.options.isStacked) {\n            var plotValue = this.plotValue(point);\n            var positive = plotValue >= 0;\n            var prevValue = startValue;\n            var isStackedBar = false;\n            var stack = defined(point.series.stack) ? point.series.stack : this.options.defaultStack;\n            var isNonGroupStack = function (stack) { return stack === true || typeof stack === OBJECT && !stack.group; };\n\n            if (stack) {\n                for (var i = 0; i < categoryPoints.length; i++) {\n                    var other = categoryPoints[i];\n\n                    if (point === other) {\n                        break;\n                    }\n\n                    var otherStack = defined(other.series.stack) ? other.series.stack : this$1.options.defaultStack;\n\n                    if (!otherStack) {\n                        continue;\n                    }\n\n                    if (typeof stack === STRING && stack !== otherStack) {\n                        continue;\n                    }\n\n                    if (isNonGroupStack(stack) && !isNonGroupStack(otherStack)) {\n                        continue;\n                    }\n\n                    if (stack.group && stack.group !== otherStack.group) {\n                        continue;\n                    }\n\n                    var otherValue = this$1.plotValue(other);\n                    if ((otherValue >= 0 && positive) ||\n                        (otherValue < 0 && !positive)) {\n                        // zero values should be skipped for log axis (startValue !== 0)\n                        if (startValue === 0 || otherValue !== 0) {\n                            prevValue += otherValue;\n                            plotValue += otherValue;\n                            isStackedBar = true;\n\n                            if (this$1.options.isStacked100) {\n                                plotValue = Math.min(plotValue, 1);\n                            }\n                        }\n                    }\n                }\n            }\n\n            if (isStackedBar) {\n                prevValue -= startValue;\n            }\n\n            return [ prevValue, plotValue ];\n        }\n\n        var series = point.series;\n        var valueAxis = this.seriesValueAxis(series);\n        var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n        return [ axisCrossingValue, convertableToNumber(point.value) ? point.value : axisCrossingValue ];\n    };\n\n    CategoricalChart.prototype.stackLimits = function stackLimits (axisName, stackName) {\n        var this$1 = this;\n\n        var min = MAX_VALUE;\n        var max = MIN_VALUE;\n\n        for (var i = 0; i < this.categoryPoints.length; i++) {\n            var categoryPoints = this$1.categoryPoints[i];\n            if (!categoryPoints) {\n                continue;\n            }\n\n            for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n                var point = categoryPoints[pIx];\n                if (point) {\n                    if (point.series.stack === stackName || point.series.axis === axisName) {\n                        var to = this$1.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    CategoricalChart.prototype.updateStackRange = function updateStackRange () {\n        var this$1 = this;\n\n        var ref = this.options;\n        var isStacked = ref.isStacked;\n        var chartSeries = ref.series;\n        var limitsCache = {};\n\n        if (isStacked) {\n            for (var i = 0; i < chartSeries.length; i++) {\n                var series = chartSeries[i];\n                var axisName = series.axis;\n                var key = axisName + series.stack;\n\n                var limits = limitsCache[key];\n                if (!limits) {\n                    limits = this$1.stackLimits(axisName, series.stack);\n\n                    var errorTotals = this$1.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$1.valueAxisRanges[axisName] = limits;\n                }\n            }\n        }\n    };\n\n    CategoricalChart.prototype.addErrorBar = function addErrorBar (point, data, categoryIx) {\n        var value = point.value;\n        var series = point.series;\n        var seriesIx = point.seriesIx;\n        var errorBars = point.options.errorBars;\n        var lowValue = data.fields[ERROR_LOW_FIELD];\n        var highValue = data.fields[ERROR_HIGH_FIELD];\n        var 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    CategoricalChart.prototype.addPointErrorBar = function addPointErrorBar (point, categoryIx) {\n        var isVertical = !this.options.invertAxes;\n        var options = point.options.errorBars;\n        var series = point.series;\n        var low = point.low;\n        var high = point.high;\n\n        if (this.options.isStacked) {\n            var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n            low = stackedErrorRange.low;\n            high = stackedErrorRange.high;\n        } else {\n            var fields = { categoryIx: categoryIx, series: series };\n            this.updateRange({ value: low }, fields);\n            this.updateRange({ value: high }, fields);\n        }\n\n        var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n        point.errorBars = [ errorBar ];\n        point.append(errorBar);\n    };\n\n    CategoricalChart.prototype.stackedErrorRange = function stackedErrorRange (point, categoryIx) {\n        var plotValue = this.plotRange(point, 0)[1] - point.value;\n        var low = point.low + plotValue;\n        var 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    CategoricalChart.prototype.addValue = function addValue (data, fields) {\n        var categoryIx = fields.categoryIx;\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n\n        var categoryPoints = this.categoryPoints[categoryIx];\n        if (!categoryPoints) {\n            this.categoryPoints[categoryIx] = categoryPoints = [];\n        }\n\n        var seriesPoints = this.seriesPoints[seriesIx];\n        if (!seriesPoints) {\n            this.seriesPoints[seriesIx] = seriesPoints = [];\n        }\n\n        var 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    CategoricalChart.prototype.evalPointOptions = function evalPointOptions (options, value, fields) {\n        var categoryIx = fields.categoryIx;\n        var category = fields.category;\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var state = {\n            defaults: series._defaults,\n            excluded: [\n                \"data\", \"aggregate\", \"_events\", \"tooltip\", \"content\", \"template\",\n                \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n                \"drilldownSeriesFactory\", \"ariaTemplate\", \"ariaContent\"\n            ]\n        };\n\n        var doEval = this._evalSeries[seriesIx];\n        if (!defined(doEval)) {\n            this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n        }\n\n        var 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    CategoricalChart.prototype.updateRange = function updateRange (data, fields) {\n        var axisName = fields.series.axis;\n        var value = data.value;\n        var 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    CategoricalChart.prototype.seriesValueAxis = function seriesValueAxis (series) {\n        var plotArea = this.plotArea;\n        var axisName = series.axis;\n        var 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    CategoricalChart.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var categorySlots = this.categorySlots = [];\n        var chartPoints = this.points;\n        var categoryAxis = this.categoryAxis;\n        var pointIx = 0;\n\n        this.traverseDataPoints(function (data, fields) {\n            var categoryIx = fields.categoryIx;\n            var currentSeries = fields.series;\n\n            var valueAxis = this$1.seriesValueAxis(currentSeries);\n            var point = chartPoints[pointIx++];\n\n            var categorySlot = categorySlots[categoryIx];\n            if (!categorySlot) {\n                categorySlots[categoryIx] = categorySlot =\n                    this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n            }\n\n            if (point) {\n                var plotRange = this$1.plotRange(point, valueAxis.startValue());\n                var valueSlot = this$1.valueSlot(valueAxis, plotRange);\n                if (valueSlot) {\n                    var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n\n                    point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n                    point.stackValue = plotRange[1];\n\n                    if (this$1.options.isStacked100) {\n                        point.percentage = this$1.plotValue(point);\n                    }\n\n                    this$1.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    CategoricalChart.prototype.valueSlot = function valueSlot (valueAxis, plotRange) {\n        return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n    };\n\n    CategoricalChart.prototype.limitPoints = function limitPoints () {\n        var this$1 = this;\n\n        var categoryPoints = this.categoryPoints;\n        var points = categoryPoints[0].concat(last(categoryPoints));\n        for (var idx = 0; idx < points.length; idx++) {\n            if (points[idx]) {\n                this$1.limitPoint(points[idx]);\n            }\n        }\n    };\n\n    CategoricalChart.prototype.limitPoint = function limitPoint (point) {\n        var limitedSlot = this.categoryAxis.limitSlot(point.box);\n        if (!limitedSlot.equals(point.box)) {\n            point.reflow(limitedSlot);\n        }\n    };\n\n    CategoricalChart.prototype.aboveAxis = function aboveAxis (point, valueAxis) {\n        var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n        var value = point.value;\n\n        return valueAxis.options.reverse ?\n            value < axisCrossingValue : value >= axisCrossingValue;\n    };\n\n    CategoricalChart.prototype.categoryAxisCrossingValue = function categoryAxisCrossingValue (valueAxis) {\n        var categoryAxis = this.categoryAxis;\n        var options = valueAxis.options;\n        var crossingValues = [].concat(\n            options.axisCrossingValues || options.axisCrossingValue\n        );\n\n        return crossingValues[categoryAxis.axisIndex || 0] || 0;\n    };\n\n    CategoricalChart.prototype.reflowPoint = function reflowPoint (point, pointSlot) {\n        point.reflow(pointSlot);\n    };\n\n    CategoricalChart.prototype.reflowCategories = function reflowCategories () { };\n\n    CategoricalChart.prototype.pointSlot = function pointSlot (categorySlot, valueSlot) {\n        var options = this.options;\n        var invertAxes = options.invertAxes;\n        var slotX = invertAxes ? valueSlot : categorySlot;\n        var slotY = invertAxes ? categorySlot : valueSlot;\n\n        return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n    };\n\n    CategoricalChart.prototype.categorySlot = function categorySlot (categoryAxis, categoryIx) {\n        return categoryAxis.getSlot(categoryIx);\n    };\n\n    CategoricalChart.prototype.traverseDataPoints = function traverseDataPoints (callback) {\n        var this$1 = this;\n\n        var series = this.options.series;\n        var count = categoriesCount(series);\n        var seriesCount = series.length;\n\n        for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n            this$1._outOfRangeCallback(series[seriesIx], \"_outOfRangeMinPoint\", seriesIx, callback);\n        }\n\n        for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n            for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n                var currentSeries = series[seriesIx$1];\n                var currentCategory = this$1.categoryAxis.categoryAt(categoryIx);\n                var pointData = this$1.plotArea.bindPoint(currentSeries, categoryIx);\n\n                callback(pointData, {\n                    category: currentCategory,\n                    categoryIx: categoryIx,\n                    categoriesCount: count,\n                    series: currentSeries,\n                    seriesIx: seriesIx$1\n                });\n            }\n        }\n\n        for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n            this$1._outOfRangeCallback(series[seriesIx$2], \"_outOfRangeMaxPoint\", seriesIx$2, callback);\n        }\n    };\n\n    CategoricalChart.prototype._outOfRangeCallback = function _outOfRangeCallback (series, field, seriesIx, callback) {\n        var outOfRangePoint = series[field];\n        if (outOfRangePoint) {\n            var categoryIx = outOfRangePoint.categoryIx;\n            var pointData = this.plotArea.bindPoint(series, 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    CategoricalChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        if (point.value === null) {\n            return \"\";\n        }\n\n        return this.chartService.format.auto(format, point.value);\n    };\n\n    CategoricalChart.prototype.pointValue = function pointValue (data) {\n        return data.valueFields.value;\n    };\n\n    return CategoricalChart;\n}(ChartElement));\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\nvar 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\nvar NoteMixin = {\n    createNote: function() {\n        var options = this.options.notes;\n        var 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, CHART_POINT_ROLE, CHART_POINT_CLASSNAME, CHART_POINT_ROLE_DESCRIPTION } from '../constants';\n\nimport { WHITE, CIRCLE, CENTER, TOP, BOTTOM, LEFT, HIGHLIGHT_ZINDEX } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, getAriaTemplate, valueOrDefault, getSpacing } from '../../common';\nimport guid from '../../core/utils/guid';\n\nvar LinePoint = (function (ChartElement) {\n    function LinePoint(value, options) {\n        ChartElement.call(this);\n\n        this.value = value;\n        this.options = options;\n        this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n        this.tooltipTracking = true;\n        this._id = guid();\n    }\n\n    if ( ChartElement ) LinePoint.__proto__ = ChartElement;\n    LinePoint.prototype = Object.create( ChartElement && ChartElement.prototype );\n    LinePoint.prototype.constructor = LinePoint;\n\n    LinePoint.prototype.render = function render () {\n        var ref = this.options;\n        var markers = ref.markers;\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        this.createLabel();\n        this.createNote();\n\n        if (this.errorBar) {\n            this.append(this.errorBar);\n        }\n    };\n\n    LinePoint.prototype.createLabel = function createLabel () {\n        var options = this.options;\n        var labels = options.labels;\n\n        if (labels.visible) {\n            this.label = this.createLabelElement(labels);\n            this.append(this.label);\n        }\n    };\n\n    LinePoint.prototype.createLabelElement = function createLabelElement (options) {\n        return new TextBox(this.getLabelText(options),\n            deepExtend({\n                align: CENTER,\n                vAlign: CENTER,\n                margin: {\n                    left: 5,\n                    right: 5\n                },\n                zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n            }, options),\n            this.pointData()\n        );\n    };\n\n    LinePoint.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        } else if (options.format) {\n            return this.formatValue(options.format);\n        }\n\n        return this.value;\n    };\n\n    LinePoint.prototype.getAriaLabelText = function getAriaLabelText () {\n        var labels = this.options.labels;\n        var ariaTemplate = getAriaTemplate(labels);\n\n        if (ariaTemplate) {\n            return ariaTemplate(this.pointData());\n        }\n\n        return this.getLabelText(labels);\n    };\n\n    LinePoint.prototype.markerBorder = function markerBorder () {\n        var options = this.options.markers;\n        var background = options.background;\n        var 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    LinePoint.prototype.createVisual = function createVisual () {};\n\n    LinePoint.prototype.createMarker = function createMarker () {\n        var options = this.options.markers;\n        var 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: options.opacity,\n            pattern: this.options.pattern,\n            zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n            animation: options.animation,\n            visual: options.visual,\n            accessibilityOptions: deepExtend({\n                ariaLabel: this.getAriaLabelText(this.options.labels)\n            }, this.options.accessibility)\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    LinePoint.prototype.markerBox = function 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    LinePoint.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var aboveAxis = ref.aboveAxis;\n        var vertical = options.vertical;\n\n        this.render();\n\n        this.box = targetBox;\n        var 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 (var i = 0; i < this.errorBars.length; i++) {\n                this$1.errorBars[i].reflow(childBox);\n            }\n        }\n\n        if (this.note) {\n            var noteTargetBox = this.markerBox();\n\n            if (!(options.markers.visible && options.markers.size)) {\n                var 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    LinePoint.prototype.reflowLabel = function reflowLabel (box) {\n        var ref = this;\n        var options = ref.options;\n        var label = ref.label;\n        var 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    LinePoint.prototype.createHighlight = function createHighlight () {\n        var markers = this.options.highlight.markers;\n        var defaultColor = this.markerBorder().color;\n        var options = this.options.markers;\n        var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n\n        var 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    LinePoint.prototype.highlightVisual = function highlightVisual () {\n        return (this.marker || {}).visual;\n    };\n\n    LinePoint.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        var marker = this.marker;\n        var visual, rect;\n\n        if (marker) {\n            rect = marker.paddingBox.toRect();\n            visual = marker.visual;\n        } else {\n            var size = this.options.markers.size;\n            var halfSize = size / 2;\n            var 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    LinePoint.prototype.createFocusHighlight = function createFocusHighlight () {\n        var markerOptions = this.options.markers;\n        var highlightOptions = this.options.focusHighlight;\n        var size = markerOptions.size + (markerOptions.border.width || 0);\n\n        var highlight = new ShapeElement({\n            type: markerOptions.type,\n            width: size,\n            height: size,\n            rotation: markerOptions.rotation,\n            background: highlightOptions.color,\n            border: highlightOptions.border,\n            opacity: highlightOptions.opacity,\n            padding: highlightOptions.border.width / 2,\n            zIndex: highlightOptions.zIndex\n        });\n\n        highlight.reflow(this._childBox);\n\n        return highlight.getElement();\n    };\n\n    LinePoint.prototype.tooltipAnchor = function tooltipAnchor () {\n        var markerBox = this.markerBox();\n        var clipBox = this.owner.pane.clipBox();\n        var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n\n        if (showTooltip) {\n            var x = markerBox.x2 + TOOLTIP_OFFSET;\n            var horizontalAlign = LEFT;\n            var 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    LinePoint.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    LinePoint.prototype.overlapsBox = function overlapsBox (box) {\n        var markerBox = this.markerBox();\n        return markerBox.overlaps(box);\n    };\n\n    LinePoint.prototype.unclipElements = function 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    LinePoint.prototype.pointData = function 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    LinePoint.prototype.focusVisual = function focusVisual () {\n        if (this.marker) {\n            if (this.marker.visual) {\n                this.marker.visual.options.set(\"id\", this._id);\n            }\n\n            this.toggleFocusHighlight(true);\n        }\n    };\n\n    LinePoint.prototype.clearFocusFromVisual = function clearFocusFromVisual () {\n        if (this.marker) {\n            if (this.marker.visual) {\n                this.marker.visual.options.set(\"id\", \"\");\n            }\n\n            this.toggleFocusHighlight(false);\n        }\n    };\n\n    LinePoint.prototype.getIndex = function getIndex () {\n        return defined(this.categoryIx) ? this.categoryIx : this.pointIx;\n    };\n\n    return LinePoint;\n}(ChartElement));\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    accessibility: {\n        tabIndex: 0,\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\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\nvar LineSegment = (function (ChartElement) {\n    function LineSegment(linePoints, series, seriesIx) {\n        ChartElement.call(this);\n\n        this.linePoints = linePoints;\n        this.series = series;\n        this.seriesIx = seriesIx;\n    }\n\n    if ( ChartElement ) LineSegment.__proto__ = ChartElement;\n    LineSegment.prototype = Object.create( ChartElement && ChartElement.prototype );\n    LineSegment.prototype.constructor = LineSegment;\n\n    LineSegment.prototype.points = function points () {\n        return this.toGeometryPoints(this.linePoints);\n    };\n\n    LineSegment.prototype.toGeometryPoints = function toGeometryPoints (points) {\n        var result = [];\n        for (var 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    LineSegment.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var 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: function () {\n                    this$1.segmentVisual();\n\n                    return this$1.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    LineSegment.prototype.segmentVisual = function segmentVisual () {\n        var ref = this;\n        var options = ref.options;\n        var series = ref.series;\n        var color = series.color;\n        var defaults = series._defaults;\n\n        if (isFunction(color) && defaults) {\n            color = defaults.color;\n        }\n\n        var 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    LineSegment.prototype.aliasFor = function aliasFor (e, coords) {\n        return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n    };\n\n    return LineSegment;\n}(ChartElement));\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\nvar StepLineMixin = {\n    calculateStepPoints: function(points) {\n        var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n        var ref = categoryAxis.options;\n        var justified = ref.justified;\n        var vertical = ref.vertical;\n        var reverse = ref.reverse;\n\n        var stepAxis = vertical ? X : Y;\n        var axis = vertical ? Y : X;\n        var stepDir = reverse ? 2 : 1;\n        var dir = stepDir;\n\n        var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n        var result = [ previousPoint ];\n\n        for (var idx = 1; idx < points.length; idx++) {\n            var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n\n            if (previousPoint[stepAxis] !== point[stepAxis]) {\n                var 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    var box = lintPoint.box;\n    var 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\nvar StepLineSegment = (function (LineSegment) {\n    function StepLineSegment () {\n        LineSegment.apply(this, arguments);\n    }\n\n    if ( LineSegment ) StepLineSegment.__proto__ = LineSegment;\n    StepLineSegment.prototype = Object.create( LineSegment && LineSegment.prototype );\n    StepLineSegment.prototype.constructor = StepLineSegment;\n\n    StepLineSegment.prototype.points = function points () {\n        return this.calculateStepPoints(this.linePoints);\n    };\n\n    return StepLineSegment;\n}(LineSegment));\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\nvar SplineSegment = (function (LineSegment) {\n    function SplineSegment () {\n        LineSegment.apply(this, arguments);\n    }\n\n    if ( LineSegment ) SplineSegment.__proto__ = LineSegment;\n    SplineSegment.prototype = Object.create( LineSegment && LineSegment.prototype );\n    SplineSegment.prototype.constructor = SplineSegment;\n\n    SplineSegment.prototype.segmentVisual = function segmentVisual () {\n        var series = this.series;\n        var defaults = series._defaults;\n        var color = series.color;\n\n        if (isFunction(color) && defaults) {\n            color = defaults.color;\n        }\n\n        var curveProcessor = new CurveProcessor(this.options.closed);\n        var segments = curveProcessor.process(this.points());\n        var 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    return SplineSegment;\n}(LineSegment));\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\nvar LineChartMixin = {\n    renderSegments: function() {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var seriesPoints = ref.seriesPoints;\n        var series = options.series;\n        var seriesCount = seriesPoints.length;\n        var lastSegment;\n\n        this._segments = [];\n\n        for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n            var pointCount = sortedPoints.length;\n            var linePoints = [];\n\n            for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n                var point = sortedPoints[pointIx];\n                if (point) {\n                    linePoints.push(point);\n                } else if (this$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n                    if (linePoints.length > 1) {\n                        lastSegment = this$1.createSegment(\n                            linePoints, currentSeries, seriesIx, lastSegment\n                        );\n                        this$1._addSegment(lastSegment);\n                    }\n                    linePoints = [];\n                }\n            }\n\n            if (linePoints.length > 1) {\n                lastSegment = this$1.createSegment(\n                    linePoints, currentSeries, seriesIx, lastSegment\n                );\n                this$1._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        var missingValues = series.missingValues;\n        var assumeZero = !missingValues && this.options.isStacked;\n\n        return assumeZero ? ZERO : missingValues || INTERPOLATE;\n    },\n\n    getNearestPoint: function(x, y, seriesIx) {\n        var target = new Point(x, y);\n        var allPoints = this.seriesPoints[seriesIx];\n        var nearestPointDistance = MAX_VALUE;\n        var nearestPoint;\n\n        for (var i = 0; i < allPoints.length; i++) {\n            var point = allPoints[i];\n\n            if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n                var pointBox = point.box;\n                var 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\nvar ClipAnimation = (function (superclass) {\n    function ClipAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) ClipAnimation.__proto__ = superclass;\n    ClipAnimation.prototype = Object.create( superclass && superclass.prototype );\n    ClipAnimation.prototype.constructor = ClipAnimation;\n\n    ClipAnimation.prototype.setup = function setup () {\n        this._setEnd(this.options.box.x1);\n    };\n\n    ClipAnimation.prototype.step = function step (pos) {\n        var box = this.options.box;\n        this._setEnd(interpolateValue(box.x1, box.x2, pos));\n    };\n\n    ClipAnimation.prototype._setEnd = function _setEnd (x) {\n        var element = this.element;\n        var segments = element.segments;\n        var topRight = segments[1].anchor();\n        var bottomRight = segments[2].anchor();\n\n        element.suspend();\n        topRight.setX(x);\n        element.resume();\n        bottomRight.setX(x);\n    };\n\n    return ClipAnimation;\n}(draw.Animation));\n\nsetDefaultOptions(ClipAnimation, {\n    duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(\"clip\", ClipAnimation);\n\nexport default ClipAnimation;","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\nvar ClipAnimationMixin = {\n    createAnimation: function() {\n        var root = this.getRoot();\n        if (root && (root.options || {}).transitions !== false) {\n            var box = root.size();\n            var 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        var points = this.animationPoints();\n\n        for (var idx = 0; idx < points.length; idx++) {\n            var 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\nvar LineChart = (function (CategoricalChart) {\n    function LineChart () {\n        CategoricalChart.apply(this, arguments);\n    }\n\n    if ( CategoricalChart ) LineChart.__proto__ = CategoricalChart;\n    LineChart.prototype = Object.create( CategoricalChart && CategoricalChart.prototype );\n    LineChart.prototype.constructor = LineChart;\n\n    LineChart.prototype.render = function render () {\n\n        CategoricalChart.prototype.render.call(this);\n\n        this.updateStackRange();\n        this.renderSegments();\n    };\n\n    LineChart.prototype.pointType = function pointType () {\n        return LinePoint;\n    };\n\n    LineChart.prototype.createPoint = function createPoint (data, fields) {\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var missingValues = this.seriesMissingValues(series);\n        var 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        var pointOptions = this.pointOptions(series, seriesIx);\n        pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n        var color = data.fields.color || series.color;\n        if (isFunction(series.color)) {\n            color = pointOptions.color;\n        }\n\n        var point = new LinePoint(value, pointOptions);\n        point.color = color;\n\n        this.append(point);\n\n        return point;\n    };\n\n    LineChart.prototype.plotRange = function plotRange (point) {\n        var this$1 = this;\n\n        var plotValue = this.plotValue(point);\n\n        if (this.options.isStacked) {\n            var categoryIx = point.categoryIx;\n            var categoryPoints = this.categoryPoints[categoryIx];\n\n            for (var i = 0; i < categoryPoints.length; i++) {\n                var other = categoryPoints[i];\n\n                if (point === other) {\n                    break;\n                }\n\n                plotValue += this$1.plotValue(other);\n\n                if (this$1.options.isStacked100) {\n                    plotValue = Math.min(plotValue, 1);\n                }\n            }\n\n        }\n\n        return [ plotValue, plotValue ];\n    };\n\n    LineChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx) {\n        var style = currentSeries.style;\n        var 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    LineChart.prototype.animationPoints = function animationPoints () {\n        var points = this.points;\n        var result = [];\n        for (var idx = 0; idx < points.length; idx++) {\n            result.push((points[idx] || {}).marker);\n        }\n        return result.concat(this._segments);\n    };\n\n    LineChart.prototype.supportsPointInactiveOpacity = function supportsPointInactiveOpacity () {\n        return false;\n    };\n\n    return LineChart;\n}(CategoricalChart));\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';\nimport { createPatternFill } from '../../core/pattern';\n\nvar AreaSegment = (function (LineSegment) {\n    function AreaSegment(linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n        LineSegment.call(this, linePoints, currentSeries, seriesIx);\n\n        this.prevSegment = prevSegment;\n        this.stackPoints = stackPoints;\n    }\n\n    if ( LineSegment ) AreaSegment.__proto__ = LineSegment;\n    AreaSegment.prototype = Object.create( LineSegment && LineSegment.prototype );\n    AreaSegment.prototype.constructor = AreaSegment;\n\n    AreaSegment.prototype.createVisual = function createVisual () {\n        var series = this.series;\n        var defaults = series._defaults;\n        var lineOptions = series.line || {};\n        var 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: createPatternFill(series.pattern, {\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    AreaSegment.prototype.strokeSegments = function strokeSegments () {\n        var segments = this._strokeSegments;\n\n        if (!segments) {\n            segments = this._strokeSegments = this.createStrokeSegments();\n        }\n\n        return segments;\n    };\n\n    AreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        return this.segmentsFromPoints(this.points());\n    };\n\n    AreaSegment.prototype.stackSegments = function stackSegments () {\n        if (this.prevSegment) {\n            return this.prevSegment.createStackSegments(this.stackPoints);\n        }\n\n        return this.createStackSegments(this.stackPoints);\n    };\n\n    AreaSegment.prototype.createStackSegments = function createStackSegments (stackPoints) {\n        return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n    };\n\n    AreaSegment.prototype.segmentsFromPoints = function segmentsFromPoints (points) {\n        return points.map(function (point) { return new geom.Segment(point); });\n    };\n\n    AreaSegment.prototype.createStroke = function createStroke (style) {\n        var stroke = new draw.Path(style);\n        stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n\n        this.visual.append(stroke);\n    };\n\n    AreaSegment.prototype.hasStackSegment = function hasStackSegment () {\n        return this.prevSegment || (this.stackPoints && this.stackPoints.length);\n    };\n\n    AreaSegment.prototype.createFill = function createFill (style) {\n        var strokeSegments = this.strokeSegments();\n        var fillSegments = strokeSegments.slice(0);\n        var hasStackSegments = this.hasStackSegment();\n\n        if (hasStackSegments) {\n            var stackSegments = this.stackSegments();\n\n            append(fillSegments, stackSegments);\n        }\n\n        var 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    AreaSegment.prototype.fillToAxes = function fillToAxes (fillPath) {\n        var chart = this.parent;\n        var invertAxes = chart.options.invertAxes;\n        var valueAxis = chart.seriesValueAxis(this.series);\n        var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n        var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n        var segments = this.strokeSegments();\n        var firstPoint = segments[0].anchor();\n        var lastPoint = last(segments).anchor();\n        var 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    return AreaSegment;\n}(LineSegment));\n\nexport default AreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport AreaSegment from './area-segment';\n\nimport { deepExtend } from '../../common';\n\nvar StepAreaSegment = (function (AreaSegment) {\n    function StepAreaSegment () {\n        AreaSegment.apply(this, arguments);\n    }\n\n    if ( AreaSegment ) StepAreaSegment.__proto__ = AreaSegment;\n    StepAreaSegment.prototype = Object.create( AreaSegment && AreaSegment.prototype );\n    StepAreaSegment.prototype.constructor = StepAreaSegment;\n\n    StepAreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n    };\n\n    StepAreaSegment.prototype.createStackSegments = function createStackSegments (stackPoints) {\n        return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n    };\n\n    return StepAreaSegment;\n}(AreaSegment));\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\nvar SplineAreaSegment = (function (AreaSegment) {\n    function SplineAreaSegment () {\n        AreaSegment.apply(this, arguments);\n    }\n\n    if ( AreaSegment ) SplineAreaSegment.__proto__ = AreaSegment;\n    SplineAreaSegment.prototype = Object.create( AreaSegment && AreaSegment.prototype );\n    SplineAreaSegment.prototype.constructor = SplineAreaSegment;\n\n    SplineAreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        var curveProcessor = new CurveProcessor(this.options.closed);\n        var linePoints = this.points();\n\n        return curveProcessor.process(linePoints);\n    };\n\n    SplineAreaSegment.prototype.createStackSegments = function createStackSegments () {\n        var strokeSegments = this.strokeSegments();\n        var stackSegments = [];\n        for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n            var 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    return SplineAreaSegment;\n}(AreaSegment));\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\nvar AreaChart = (function (LineChart) {\n    function AreaChart () {\n        LineChart.apply(this, arguments);\n    }\n\n    if ( LineChart ) AreaChart.__proto__ = LineChart;\n    AreaChart.prototype = Object.create( LineChart && LineChart.prototype );\n    AreaChart.prototype.constructor = AreaChart;\n\n    AreaChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx, prevSegment) {\n        var isStacked = this.options.isStacked;\n        var style = (currentSeries.line || {}).style;\n        var previousSegment;\n\n        var stackPoints;\n        if (isStacked && seriesIx > 0 && prevSegment) {\n            var 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        var 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    AreaChart.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        LineChart.prototype.reflow.call(this, targetBox);\n\n        var stackPoints = this._stackPoints;\n        if (stackPoints) {\n            for (var idx = 0; idx < stackPoints.length; idx++) {\n                var stackPoint = stackPoints[idx];\n                var pointSlot = this$1.categoryAxis.getSlot(stackPoint.categoryIx);\n                stackPoint.reflow(pointSlot);\n            }\n        }\n    };\n\n    AreaChart.prototype._gapStackPoints = function _gapStackPoints (linePoints, seriesIx, style) {\n        var this$1 = this;\n\n        var seriesPoints = this.seriesPoints;\n        var startIdx = linePoints[0].categoryIx;\n        var length = linePoints.length;\n        if (startIdx < 0) {\n            startIdx = 0;\n            length--;\n        }\n\n        var endIdx = startIdx + length;\n        var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n        var stackPoints = [];\n\n        this._stackPoints = this._stackPoints || [];\n        for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n            var pointIx = categoryIx + pointOffset;\n            var currentSeriesIx = seriesIx;\n            var point = (void 0);\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$1._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$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n                }\n            } else {\n                var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n                this$1._stackPoints.push(gapStackPoint);\n                stackPoints.push(gapStackPoint);\n            }\n        }\n\n        return stackPoints;\n    };\n\n    AreaChart.prototype._previousSegmentPoint = function _previousSegmentPoint (categoryIx, pointIx, segmentIx, seriesIdx) {\n        var seriesPoints = this.seriesPoints;\n        var index = seriesIdx;\n        var 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    AreaChart.prototype._createGapStackPoint = function _createGapStackPoint (categoryIx) {\n        var options = this.pointOptions({}, 0);\n        var point = new LinePoint(0, options);\n        point.categoryIx = categoryIx;\n        point.series = {};\n\n        return point;\n    };\n\n    AreaChart.prototype.seriesMissingValues = function seriesMissingValues (series) {\n        return series.missingValues || ZERO;\n    };\n\n    AreaChart.prototype.supportsPointInactiveOpacity = function supportsPointInactiveOpacity () {\n        return false;\n    };\n\n    return AreaChart;\n}(LineChart));\n\nexport default AreaChart;\n","import { MIN_VALUE, MAX_VALUE } from '../common/constants';\nimport { Class } from '../common';\n\nvar AxisGroupRangeTracker = (function (Class) {\n    function AxisGroupRangeTracker() {\n        Class.call(this);\n\n        this.axisRanges = {};\n    }\n\n    if ( Class ) AxisGroupRangeTracker.__proto__ = Class;\n    AxisGroupRangeTracker.prototype = Object.create( Class && Class.prototype );\n    AxisGroupRangeTracker.prototype.constructor = AxisGroupRangeTracker;\n\n    AxisGroupRangeTracker.prototype.update = function update (chartAxisRanges) {\n        var axisRanges = this.axisRanges;\n\n        for (var axisName in chartAxisRanges) {\n            var chartRange = chartAxisRanges[axisName];\n            var 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    AxisGroupRangeTracker.prototype.reset = function reset (axisName) {\n        this.axisRanges[axisName] = undefined;\n    };\n\n    AxisGroupRangeTracker.prototype.query = function query (axisName) {\n        return this.axisRanges[axisName];\n    };\n\n    return AxisGroupRangeTracker;\n}(Class));\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\nvar BarLabel = (function (ChartElement) {\n    function BarLabel(content, options, pointData) {\n        ChartElement.call(this, options);\n\n        this.textBox = new TextBox(content, this.options, pointData);\n        this.append(this.textBox);\n    }\n\n    if ( ChartElement ) BarLabel.__proto__ = ChartElement;\n    BarLabel.prototype = Object.create( ChartElement && ChartElement.prototype );\n    BarLabel.prototype.constructor = BarLabel;\n\n    BarLabel.prototype.createVisual = function createVisual () {\n        this.textBox.options.noclip = this.options.noclip;\n    };\n\n    BarLabel.prototype.reflow = function reflow (targetBox) {\n        var options = this.options;\n        var vertical = options.vertical;\n        var aboveAxis = options.aboveAxis;\n        var text = this.children[0];\n        var textOptions = text.options;\n        var box = text.box;\n        var padding = text.options.padding;\n        var 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                    var boxesDiff = (box.width() - targetBox.width() - padding.left - padding.right) / 2;\n                    labelBox = new Box(\n                        targetBox.x1 - boxesDiff, targetBox.y1 - box.height(),\n                        targetBox.x2 + boxesDiff, 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    BarLabel.prototype.alignToClipBox = function alignToClipBox (clipBox) {\n        var vertical = this.options.vertical;\n        var field = vertical ? Y : X;\n        var start = field + \"1\";\n        var end = field + \"2\";\n        var text = this.children[0];\n        var parentBox = this.parent.box;\n\n        if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n            var 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    return BarLabel;\n}(ChartElement));\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;","import addAccessibilityAttributesToVisual from \"../../core/utils/add-accessibility-attributes-to-visual\";\nimport { deepExtend, getAriaTemplate } from \"../../common\";\nimport guid from '../../core/utils/guid';\n\nvar AccessibilityAttributesMixin = {\n    addAccessibilityAttributesToVisual: function() {\n        this._id = this._id || guid();\n\n        var accessibilityOptions = deepExtend({\n            ariaLabel: this.getAriaLabelText()\n        }, this.options.accessibility);\n\n        addAccessibilityAttributesToVisual(this.visual, accessibilityOptions);\n    },\n\n    getAriaLabelText: function getAriaLabelText() {\n        var labels = this.options.labels;\n        var ariaTemplate = getAriaTemplate(labels);\n\n        if (ariaTemplate) {\n            return ariaTemplate(this.pointData());\n        }\n\n        return this.getLabelText(labels);\n    },\n\n    focusVisual: function focusVisual() {\n        this.visual.options.set(\"id\", this._id);\n        this.toggleFocusHighlight(true);\n    },\n\n    clearFocusFromVisual: function clearFocusFromVisual() {\n        this.visual.options.set(\"id\", \"\");\n        this.toggleFocusHighlight(false);\n    }\n};\n\nexport default AccessibilityAttributesMixin;\n","import { drawing as draw, Color } from '@progress/kendo-drawing';\n\nimport BarLabel from './bar-label';\n\nimport { CHART_POINT_ROLE_DESCRIPTION, CHART_POINT_CLASSNAME, CHART_POINT_ROLE, BORDER_BRIGHTNESS, TOOLTIP_OFFSET } from '../constants';\n\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { ChartElement, createPatternFill, Point } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\n\nimport { WHITE, LEFT, RIGHT, BOTTOM, TOP } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, getTemplate, valueOrDefault } from '../../common';\n\nvar BAR_ALIGN_MIN_WIDTH = 6;\n\nvar Bar = (function (ChartElement) {\n    function Bar(value, options) {\n        ChartElement.call(this);\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    if ( ChartElement ) Bar.__proto__ = ChartElement;\n    Bar.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Bar.prototype.constructor = Bar;\n\n    Bar.prototype.render = function 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    Bar.prototype.createLabel = function createLabel () {\n        var options = this.options;\n        var labels = options.labels;\n\n        if (labels.visible) {\n            this.label = this.createLabelElement(labels);\n            this.append(this.label);\n        }\n    };\n\n    Bar.prototype.createLabelElement = function createLabelElement (options) {\n        return new BarLabel(this.getLabelText(options),\n            deepExtend({\n                vertical: this.options.vertical\n            },\n            options\n            ), this.pointData());\n    };\n\n    Bar.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        }\n\n        return this.formatValue(options.format);\n    };\n\n    Bar.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    Bar.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        this.render();\n\n        var 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 (var i = 0; i < this.errorBars.length; i++) {\n                this$1.errorBars[i].reflow(targetBox);\n            }\n        }\n    };\n\n    Bar.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var ref = this;\n        var box = ref.box;\n        var options = ref.options;\n        var customVisual = options.visual;\n\n        if (this.visible !== false) {\n            ChartElement.prototype.createVisual.call(this);\n\n            this.addAccessibilityAttributesToVisual();\n\n            if (customVisual) {\n                var 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: function () {\n                        var group = new draw.Group();\n                        this$1.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    Bar.prototype.createRect = function createRect (visual) {\n        var options = this.options;\n        var border = options.border;\n        var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n        var rect = this.box.toRect();\n\n        rect.size.width = Math.round(rect.size.width);\n\n        var path = this.rectVisual = draw.Path.fromRect(rect, {\n            fill: createPatternFill(options.pattern, {\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        var width = this.box.width();\n        var height = this.box.height();\n\n        var 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            var 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    Bar.prototype.createHighlight = function createHighlight (style) {\n        var highlight = draw.Path.fromRect(this.box.toRect(), style);\n\n        return alignPathToPixel(highlight);\n    };\n\n    Bar.prototype.highlightVisual = function highlightVisual () {\n        return this.rectVisual;\n    };\n\n    Bar.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        return {\n            options: this.options,\n            rect: this.box.toRect(),\n            visual: this.rectVisual\n        };\n    };\n\n    Bar.prototype.createFocusHighlight = function createFocusHighlight (style) {\n        var borderWidth = this.options.focusHighlight.border.width;\n        var highlight = draw.Path.fromRect(this.box.pad(borderWidth / 2).toRect(), style);\n\n        return alignPathToPixel(highlight);\n    };\n\n    Bar.prototype.getBorderColor = function getBorderColor () {\n        var color = this.color;\n        var border = this.options.border;\n        var brightness = border._brightness || BORDER_BRIGHTNESS;\n        var borderColor = border.color;\n\n        if (!defined(borderColor)) {\n            borderColor = new Color(color).brightness(brightness).toHex();\n        }\n\n        return borderColor;\n    };\n\n    Bar.prototype.tooltipAnchor = function tooltipAnchor () {\n        var ref = this;\n        var options = ref.options;\n        var box = ref.box;\n        var aboveAxis = ref.aboveAxis;\n        var clipBox = this.owner.pane.clipBox() || box;\n        var horizontalAlign = LEFT;\n        var verticalAlign = TOP;\n        var 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            var x1 = Math.max(box.x1, clipBox.x1);\n            var 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    Bar.prototype.overlapsBox = function overlapsBox (box) {\n        return this.box.overlaps(box);\n    };\n\n    Bar.prototype.pointData = function 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    Bar.prototype.getIndex = function getIndex () {\n        return this.categoryIx;\n    };\n\n    return Bar;\n}(ChartElement));\n\ndeepExtend(Bar.prototype, PointEventsMixin);\ndeepExtend(Bar.prototype, NoteMixin);\ndeepExtend(Bar.prototype, AccessibilityAttributesMixin);\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    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n};\n\nexport default Bar;","export function forEach(elements, callback) {\n    elements.forEach(callback);\n}\n\nexport function forEachReverse(elements, callback) {\n    var length = elements.length;\n\n    for (var 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\nvar ClusterLayout = (function (ChartElement) {\n    function ClusterLayout(options) {\n        ChartElement.call(this, options);\n\n        this.forEach = options.rtl ? forEachReverse : forEach;\n    }\n\n    if ( ChartElement ) ClusterLayout.__proto__ = ChartElement;\n    ClusterLayout.prototype = Object.create( ChartElement && ChartElement.prototype );\n    ClusterLayout.prototype.constructor = ClusterLayout;\n\n    ClusterLayout.prototype.reflow = function reflow (box) {\n        var ref = this.options;\n        var vertical = ref.vertical;\n        var gap = ref.gap;\n        var spacing = ref.spacing;\n        var children = this.children;\n        var count = children.length;\n        var axis = vertical ? Y : X;\n        var slots = count + gap + (spacing * (count - 1));\n        var slotSize = (vertical ? box.height() : box.width()) / slots;\n        var position = box[axis + 1] + slotSize * (gap / 2);\n\n        this.forEach(children, function (child, idx) {\n            var 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    return ClusterLayout;\n}(ChartElement));\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\nvar StackWrap = (function (ChartElement) {\n    function StackWrap () {\n        ChartElement.apply(this, arguments);\n    }\n\n    if ( ChartElement ) StackWrap.__proto__ = ChartElement;\n    StackWrap.prototype = Object.create( ChartElement && ChartElement.prototype );\n    StackWrap.prototype.constructor = StackWrap;\n\n    StackWrap.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var positionAxis = this.options.vertical ? X : Y;\n        var children = this.children;\n        var childrenCount = children.length;\n        var box = this.box = new Box();\n\n        for (var i = 0; i < childrenCount; i++) {\n            var currentChild = children[i];\n\n            if (currentChild.visible !== false) {\n                var childBox = currentChild.box.clone();\n                childBox.snapTo(targetBox, positionAxis);\n\n                if (i === 0) {\n                    box = this$1.box = childBox.clone();\n                }\n\n                currentChild.reflow(childBox);\n                box.wrap(childBox);\n            }\n        }\n    };\n\n    return StackWrap;\n}(ChartElement));\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 { OBJECT, STRING, X, Y } from '../../common/constants';\nimport { defined, isFunction, setDefaultOptions } from '../../common';\n\nvar BarChart = (function (CategoricalChart) {\n    function BarChart () {\n        CategoricalChart.apply(this, arguments);\n    }\n\n    if ( CategoricalChart ) BarChart.__proto__ = CategoricalChart;\n    BarChart.prototype = Object.create( CategoricalChart && CategoricalChart.prototype );\n    BarChart.prototype.constructor = BarChart;\n\n    BarChart.prototype.render = function render () {\n        CategoricalChart.prototype.render.call(this);\n        this.updateStackRange();\n    };\n\n    BarChart.prototype.pointType = function pointType () {\n        return Bar;\n    };\n\n    BarChart.prototype.clusterType = function clusterType () {\n        return ClusterLayout;\n    };\n\n    BarChart.prototype.stackType = function stackType () {\n        return StackWrap;\n    };\n\n    BarChart.prototype.stackLimits = function stackLimits (axisName, stackName) {\n        var limits = CategoricalChart.prototype.stackLimits.call(this, axisName, stackName);\n\n        return limits;\n    };\n\n    BarChart.prototype.createPoint = function createPoint (data, fields) {\n        var categoryIx = fields.categoryIx;\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var ref = this;\n        var options = ref.options;\n        var children = ref.children;\n        var stackOrDefault = defined(series.stack) ? series.stack : options.defaultStack;\n        var value = this.pointValue(data);\n        var pointOptions = this.pointOptions(series, seriesIx);\n\n        var labelOptions = pointOptions.labels;\n        if (stackOrDefault) {\n            if (labelOptions.position === OUTSIDE_END) {\n                labelOptions.position = INSIDE_END;\n            }\n        }\n\n        pointOptions.isStacked = stackOrDefault;\n\n        var color = data.fields.color || series.color;\n        if (value < 0 && pointOptions.negativeColor) {\n            color = pointOptions.negativeColor;\n        }\n\n        pointOptions = this.evalPointOptions(pointOptions, value, fields);\n        if (isFunction(series.color)) {\n            color = pointOptions.color;\n        }\n\n        var pointType = this.pointType();\n        var point = new pointType(value, pointOptions);\n        point.color = color;\n\n        var cluster = children[categoryIx];\n        if (!cluster) {\n            var 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 (options.isStacked) {\n            var stackWrap = this.getStackWrap(stackOrDefault, cluster);\n            stackWrap.append(point);\n        } else {\n            cluster.append(point);\n        }\n\n        return point;\n    };\n\n    BarChart.prototype.getStackWrap = function getStackWrap (stack, cluster) {\n        var stackGroup = (typeof stack === OBJECT) ? (stack.group || true) : stack;\n        var wraps = cluster.children;\n        var stackWrap;\n\n        if (typeof stackGroup === STRING || stackGroup === true) {\n            for (var i = 0; i < wraps.length; i++) {\n                if (wraps[i]._stackGroup === stackGroup) {\n                    stackWrap = wraps[i];\n                    break;\n                }\n            }\n        }\n\n        if (!stackWrap) {\n            var 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    BarChart.prototype.categorySlot = function categorySlot (categoryAxis, categoryIx, valueAxis) {\n        var options = this.options;\n        var categorySlot = categoryAxis.getSlot(categoryIx);\n        var startValue = valueAxis.startValue();\n\n        if (options.isStacked) {\n            var zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n            var stackAxis = options.invertAxes ? X : Y;\n            categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n        }\n\n        return categorySlot;\n    };\n\n    BarChart.prototype.reflowCategories = function reflowCategories (categorySlots) {\n        var children = this.children;\n        var childrenLength = children.length;\n\n        for (var i = 0; i < childrenLength; i++) {\n            children[i].reflow(categorySlots[i]);\n        }\n    };\n\n    BarChart.prototype.createAnimation = function createAnimation () {\n        this._setAnimationOptions();\n        CategoricalChart.prototype.createAnimation.call(this);\n\n        if (anyHasZIndex(this.options.series)) {\n            this._setChildrenAnimation();\n        }\n    };\n\n    BarChart.prototype._setChildrenAnimation = function _setChildrenAnimation () {\n        var this$1 = this;\n\n        var points = this.points;\n\n        for (var idx = 0; idx < points.length; idx++) {\n            var point = points[idx];\n            var pointVisual = point.visual;\n            if (pointVisual && defined(pointVisual.options.zIndex)) {\n                point.options.animation = this$1.options.animation;\n                point.createAnimation();\n            }\n        }\n    };\n\n    BarChart.prototype._setAnimationOptions = function _setAnimationOptions () {\n        var options = this.options;\n        var animation = options.animation || {};\n        var origin;\n\n        if (options.isStacked) {\n            var 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    return BarChart;\n}(CategoricalChart));\n\nsetDefaultOptions(BarChart, {\n    animation: {\n        type: BAR\n    }\n});\n\nexport default BarChart;\n","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';\nimport Bar from '../bar-chart/bar';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\n\nimport { CHART_POINT_ROLE_DESCRIPTION, CHART_POINT_CLASSNAME, CHART_POINT_ROLE, 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';\nimport { createPatternFill } from '../../core/pattern';\n\nvar Candlestick = (function (ChartElement) {\n    function Candlestick(value, options) {\n        ChartElement.call(this, options);\n        this.value = value;\n    }\n\n    if ( ChartElement ) Candlestick.__proto__ = ChartElement;\n    Candlestick.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Candlestick.prototype.constructor = Candlestick;\n\n    Candlestick.prototype.getLabelText = function getLabelText (options) {\n        return this.formatValue(options.format);\n    };\n\n    Candlestick.prototype.reflow = function reflow (box) {\n        var ref = this;\n        var options = ref.options;\n        var value = ref.value;\n        var chart = ref.owner;\n        var valueAxis = chart.seriesValueAxis(options);\n        var ocSlot = valueAxis.getSlot(value.open, value.close);\n        var 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        var mid = lhSlot.center().x;\n        var 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    Candlestick.prototype.reflowNote = function reflowNote () {\n        if (this.note) {\n            this.note.reflow(this.box);\n        }\n    };\n\n    Candlestick.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        this.addAccessibilityAttributesToVisual();\n\n        this._mainVisual = this.mainVisual(this.options);\n        this.visual.append(\n            this._mainVisual\n        );\n\n        this.createOverlay();\n    };\n\n    Candlestick.prototype.mainVisual = function mainVisual (options) {\n        var group = new draw.Group();\n\n        this.createBody(group, options);\n        this.createLines(group, options);\n\n        return group;\n    };\n\n    Candlestick.prototype.createBody = function createBody (container, options) {\n        var body = draw.Path.fromRect(this.realBody.toRect(), {\n            fill: createPatternFill(options.pattern, {\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    Candlestick.prototype.createLines = function createLines (container, options) {\n        this.drawLines(container, options, this.lines, options.line);\n    };\n\n    Candlestick.prototype.drawLines = function drawLines (container, options, lines, lineOptions) {\n        if (!lines) {\n            return;\n        }\n\n        var 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 (var i = 0; i < lines.length; i++) {\n            var line = draw.Path.fromPoints(lines[i], lineStyle);\n            alignPathToPixel(line);\n            container.append(line);\n        }\n    };\n\n    Candlestick.prototype.getBorderColor = function getBorderColor () {\n        var border = this.options.border;\n        var 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    Candlestick.prototype.createOverlay = function createOverlay () {\n        var 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    Candlestick.prototype.createHighlight = function createHighlight () {\n        var highlight = this.options.highlight;\n        var normalColor = this.color;\n\n        this.color = highlight.color || this.color;\n        var 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    Candlestick.prototype.highlightVisual = function highlightVisual () {\n        return this._mainVisual;\n    };\n\n    Candlestick.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        return {\n            options: this.options,\n            rect: this.box.toRect(),\n            visual: this._mainVisual\n        };\n    };\n\n    Candlestick.prototype.tooltipAnchor = function tooltipAnchor () {\n        var box = this.box;\n        var 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    Candlestick.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    Candlestick.prototype.overlapsBox = function overlapsBox (box) {\n        return this.box.overlaps(box);\n    };\n\n    Candlestick.prototype.pointData = function pointData () {\n        return {\n            dataItem: this.dataItem,\n            value: this.value,\n            meanPoints: this.meanPoints,\n            medianPoints: this.medianPoints,\n            whiskerPoints: this.whiskerPoints,\n            stackValue: this.stackValue,\n            series: this.series\n        };\n    };\n\n    Candlestick.prototype.getIndex = function getIndex () {\n        return this.categoryIx;\n    };\n\n    return Candlestick;\n}(ChartElement));\n\nCandlestick.prototype.createFocusHighlight = Bar.prototype.createFocusHighlight;\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: \"<table>\" +\n                    \"<tr><th colspan='2'>{4:d}</th></tr>\" +\n                    \"<tr><td>Open:</td><td>{0:C}</td></tr>\" +\n                    \"<tr><td>High:</td><td>{1:C}</td></tr>\" +\n                    \"<tr><td>Low:</td><td>{2:C}</td></tr>\" +\n                    \"<tr><td>Close:</td><td>{3:C}</td></tr>\" +\n                \"</table>\"\n    },\n    labels: {\n        format: \"\"\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    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n});\n\ndeepExtend(Candlestick.prototype, PointEventsMixin);\ndeepExtend(Candlestick.prototype, NoteMixin);\ndeepExtend(Candlestick.prototype, AccessibilityAttributesMixin);\n\nexport default Candlestick;","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, OHLC } from '../constants';\nimport areNumbers from '../utils/are-numbers';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { deepExtend, isFunction } from '../../common';\n\nvar CandlestickChart = (function (CategoricalChart) {\n    function CandlestickChart () {\n        CategoricalChart.apply(this, arguments);\n    }\n\n    if ( CategoricalChart ) CandlestickChart.__proto__ = CategoricalChart;\n    CandlestickChart.prototype = Object.create( CategoricalChart && CategoricalChart.prototype );\n    CandlestickChart.prototype.constructor = CandlestickChart;\n\n    CandlestickChart.prototype.reflowCategories = function reflowCategories (categorySlots) {\n        var children = this.children;\n        var childrenLength = children.length;\n\n        for (var i = 0; i < childrenLength; i++) {\n            children[i].reflow(categorySlots[i]);\n        }\n    };\n\n    CandlestickChart.prototype.addValue = function addValue (data, fields) {\n        var categoryIx = fields.categoryIx;\n        var category = fields.category;\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var ref = this;\n        var children = ref.children;\n        var options = ref.options;\n        var value = data.valueFields;\n        var valueParts = this.splitValue(value);\n        var hasValue = areNumbers(valueParts);\n        var dataItem = series.data[categoryIx];\n        var categoryPoints = this.categoryPoints[categoryIx];\n        var point;\n\n        if (!categoryPoints) {\n            this.categoryPoints[categoryIx] = categoryPoints = [];\n        }\n\n        if (hasValue) {\n            point = this.createPoint(data, fields);\n        }\n\n        var 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    CandlestickChart.prototype.pointType = function pointType () {\n        return Candlestick;\n    };\n\n    CandlestickChart.prototype.createPoint = function createPoint (data, fields) {\n        var series = fields.series;\n        var pointType = this.pointType();\n        var value = data.valueFields;\n        var pointOptions = deepExtend({}, series);\n        var color = data.fields.color || series.color;\n\n        pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n        if (series.type === CANDLESTICK || series.type === OHLC) {\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        var point = new pointType(value, pointOptions);\n        point.color = color;\n\n        return point;\n    };\n\n    CandlestickChart.prototype.splitValue = function splitValue (value) {\n        return [ value.low, value.open, value.close, value.high ];\n    };\n\n    CandlestickChart.prototype.updateRange = function updateRange (value, fields) {\n        var axisName = fields.series.axis;\n        var parts = this.splitValue(value);\n        var axisRange = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n\n        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    CandlestickChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var 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    CandlestickChart.prototype.animationPoints = function animationPoints () {\n        return this.points;\n    };\n\n    return CandlestickChart;\n}(CategoricalChart));\n\ndeepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n\nexport default CandlestickChart;\n","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\nvar BoxPlot = (function (Candlestick) {\n    function BoxPlot(value, options) {\n        Candlestick.call(this, value, options);\n\n        this.createNote();\n    }\n\n    if ( Candlestick ) BoxPlot.__proto__ = Candlestick;\n    BoxPlot.prototype = Object.create( Candlestick && Candlestick.prototype );\n    BoxPlot.prototype.constructor = BoxPlot;\n\n    BoxPlot.prototype.reflow = function reflow (box) {\n        var ref = this;\n        var options = ref.options;\n        var value = ref.value;\n        var chart = ref.owner;\n        var valueAxis = chart.seriesValueAxis(options);\n        var 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        var medianSlot = valueAxis.getSlot(value.median);\n\n        if (value.mean) {\n            var 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    BoxPlot.prototype.reflowBoxSlot = function reflowBoxSlot (box) {\n        this.boxSlot.x1 = box.x1;\n        this.boxSlot.x2 = box.x2;\n    };\n\n    BoxPlot.prototype.reflowWhiskerSlot = function reflowWhiskerSlot (box) {\n        this.whiskerSlot.x1 = box.x1;\n        this.whiskerSlot.x2 = box.x2;\n    };\n\n    BoxPlot.prototype.calcMeanPoints = function calcMeanPoints (box, meanSlot) {\n        return [\n            [ [ box.x1, meanSlot.y1 ], [ box.x2, meanSlot.y1 ] ]\n        ];\n    };\n\n    BoxPlot.prototype.calcWhiskerPoints = function calcWhiskerPoints (boxSlot, whiskerSlot) {\n        var 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    BoxPlot.prototype.calcMedianPoints = function calcMedianPoints (box, medianSlot) {\n        return [\n            [ [ box.x1, medianSlot.y1 ], [ box.x2, medianSlot.y1 ] ]\n        ];\n    };\n\n    BoxPlot.prototype.renderOutliers = function renderOutliers (options) {\n        var this$1 = this;\n\n        var value = this.value;\n        var outliers = value.outliers || [];\n        var outerFence = Math.abs(value.q3 - value.q1) * 3;\n        var elements = [];\n        var markers = options.markers || {};\n\n        for (var i = 0; i < outliers.length; i++) {\n            var 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            var markersBorder = deepExtend({}, markers.border);\n\n            if (!defined(markersBorder.color)) {\n                if (defined(this$1.color)) {\n                    markersBorder.color = this$1.color;\n                } else {\n                    markersBorder.color =\n                        new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n                }\n            }\n\n            var 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    BoxPlot.prototype.reflowOutliers = function reflowOutliers (outliers) {\n        var this$1 = this;\n\n        var valueAxis = this.owner.seriesValueAxis(this.options);\n        var center = this.box.center();\n\n        for (var i = 0; i < outliers.length; i++) {\n            var outlierValue = outliers[i].value;\n            var markerBox = valueAxis.getSlot(outlierValue);\n\n            if (this$1.options.vertical) {\n                markerBox.move(center.x);\n            } else {\n                markerBox.move(undefined, center.y);\n            }\n\n            this$1.box = this$1.box.wrap(markerBox);\n            outliers[i].reflow(markerBox);\n        }\n    };\n\n    BoxPlot.prototype.mainVisual = function mainVisual (options) {\n        var group = Candlestick.prototype.mainVisual.call(this, options);\n        var outliers = this.renderOutliers(options);\n\n        for (var i = 0; i < outliers.length; i++) {\n            var element = outliers[i].getElement();\n            if (element) {\n                group.append(element);\n            }\n        }\n\n        return group;\n    };\n\n    BoxPlot.prototype.createLines = function 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    BoxPlot.prototype.getBorderColor = function 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 Candlestick.prototype.getBorderColor.call(this);\n    };\n\n    return BoxPlot;\n}(Candlestick));\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: \"<table>\" +\n                    \"<tr><th colspan='2'>{6:d}</th></tr>\" +\n                    \"<tr><td>Lower:</td><td>{0:C}</td></tr>\" +\n                    \"<tr><td>Q1:</td><td>{1:C}</td></tr>\" +\n                    \"<tr><td>Median:</td><td>{2:C}</td></tr>\" +\n                    \"<tr><td>Mean:</td><td>{5:C}</td></tr>\" +\n                    \"<tr><td>Q3:</td><td>{3:C}</td></tr>\" +\n                    \"<tr><td>Upper:</td><td>{4:C}</td></tr>\" +\n                \"</table>\"\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\nvar VerticalBoxPlot = (function (BoxPlot) {\n    function VerticalBoxPlot () {\n        BoxPlot.apply(this, arguments);\n    }\n\n    if ( BoxPlot ) VerticalBoxPlot.__proto__ = BoxPlot;\n    VerticalBoxPlot.prototype = Object.create( BoxPlot && BoxPlot.prototype );\n    VerticalBoxPlot.prototype.constructor = VerticalBoxPlot;\n\n    VerticalBoxPlot.prototype.reflowBoxSlot = function reflowBoxSlot (box) {\n        this.boxSlot.y1 = box.y1;\n        this.boxSlot.y2 = box.y2;\n    };\n\n    VerticalBoxPlot.prototype.reflowWhiskerSlot = function reflowWhiskerSlot (box) {\n        this.whiskerSlot.y1 = box.y1;\n        this.whiskerSlot.y2 = box.y2;\n    };\n\n    VerticalBoxPlot.prototype.calcMeanPoints = function calcMeanPoints (box, meanSlot) {\n        return [\n            [ [ meanSlot.x1, box.y1 ], [ meanSlot.x1, box.y2 ] ]\n        ];\n    };\n\n    VerticalBoxPlot.prototype.calcWhiskerPoints = function calcWhiskerPoints (boxSlot, whiskerSlot) {\n        var 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    VerticalBoxPlot.prototype.calcMedianPoints = function calcMedianPoints (box, medianSlot) {\n        return [\n            [ [ medianSlot.x1, box.y1 ], [ medianSlot.x1, box.y2 ] ]\n        ];\n    };\n\n    return VerticalBoxPlot;\n}(BoxPlot));\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\nvar BoxPlotChart = (function (CandlestickChart) {\n    function BoxPlotChart () {\n        CandlestickChart.apply(this, arguments);\n    }\n\n    if ( CandlestickChart ) BoxPlotChart.__proto__ = CandlestickChart;\n    BoxPlotChart.prototype = Object.create( CandlestickChart && CandlestickChart.prototype );\n    BoxPlotChart.prototype.constructor = BoxPlotChart;\n\n    BoxPlotChart.prototype.addValue = function addValue (data, fields) {\n        var categoryIx = fields.categoryIx;\n        var category = fields.category;\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var ref = this;\n        var children = ref.children;\n        var options = ref.options;\n        var value = data.valueFields;\n        var valueParts = this.splitValue(value);\n        var hasValue = areNumbers(valueParts);\n        var dataItem = series.data[categoryIx];\n        var categoryPoints = this.categoryPoints[categoryIx];\n        var point;\n\n        if (!categoryPoints) {\n            this.categoryPoints[categoryIx] = categoryPoints = [];\n        }\n\n        if (hasValue) {\n            point = this.createPoint(data, fields);\n        }\n\n        var 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    BoxPlotChart.prototype.pointType = function pointType () {\n        if (this.options.invertAxes) {\n            return VerticalBoxPlot;\n        }\n\n        return BoxPlot;\n    };\n\n    BoxPlotChart.prototype.splitValue = function splitValue (value) {\n        return [\n            value.lower, value.q1, value.median,\n            value.q3, value.upper\n        ];\n    };\n\n    BoxPlotChart.prototype.updateRange = function updateRange (value, fields) {\n        var axisName = fields.series.axis;\n        var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n\n        if (defined(value.mean)) {\n            parts = parts.concat(value.mean);\n        }\n\n        var axisRange = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n\n        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    BoxPlotChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var 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    BoxPlotChart.prototype.filterOutliers = function filterOutliers (items) {\n        var length = (items || []).length;\n        var result = [];\n\n        for (var i = 0; i < length; i++) {\n            var item = items[i];\n            if (defined(item) && item !== null) {\n                result.push(item);\n            }\n        }\n\n        return result;\n    };\n\n    BoxPlotChart.prototype.supportsPointInactiveOpacity = function supportsPointInactiveOpacity () {\n        return false;\n    };\n\n    return BoxPlotChart;\n}(CandlestickChart));\n\nexport default BoxPlotChart;\n","import ErrorBarBase from './error-bar-base';\n\nvar ScatterErrorBar = (function (ErrorBarBase) {\n    function ScatterErrorBar () {\n        ErrorBarBase.apply(this, arguments);\n    }\n\n    if ( ErrorBarBase ) ScatterErrorBar.__proto__ = ErrorBarBase;\n    ScatterErrorBar.prototype = Object.create( ErrorBarBase && ErrorBarBase.prototype );\n    ScatterErrorBar.prototype.constructor = ScatterErrorBar;\n\n    ScatterErrorBar.prototype.getAxis = function getAxis () {\n        var axes = this.chart.seriesAxes(this.series);\n        var axis = this.isVertical ? axes.y : axes.x;\n\n        return axis;\n    };\n\n    return ScatterErrorBar;\n}(ErrorBarBase));\n\nexport default ScatterErrorBar;","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';\n\nimport { hasValue, evalOptions } from '../utils';\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\nvar ScatterChart = (function (ChartElement) {\n    function ScatterChart(plotArea, options) {\n\n        ChartElement.call(this, options);\n\n        this.plotArea = plotArea;\n        this.chartService = plotArea.chartService;\n        this._initFields();\n\n        this.render();\n    }\n\n    if ( ChartElement ) ScatterChart.__proto__ = ChartElement;\n    ScatterChart.prototype = Object.create( ChartElement && ChartElement.prototype );\n    ScatterChart.prototype.constructor = ScatterChart;\n\n    ScatterChart.prototype._initFields = function _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    ScatterChart.prototype.render = function render () {\n        this.traverseDataPoints(this.addValue.bind(this));\n    };\n\n    ScatterChart.prototype.addErrorBar = function addErrorBar (point, field, fields) {\n        var value = point.value[field];\n        var valueErrorField = field + \"Value\";\n        var lowField = field + \"ErrorLow\";\n        var highField = field + \"ErrorHigh\";\n        var seriesIx = fields.seriesIx;\n        var series = fields.series;\n        var errorBars = point.options.errorBars;\n        var lowValue = fields[lowField];\n        var highValue = fields[highField];\n\n        if (isNumber(value)) {\n            var 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    ScatterChart.prototype.addPointErrorBar = function addPointErrorBar (errorRange, point, field) {\n        var low = errorRange.low;\n        var high = errorRange.high;\n        var series = point.series;\n        var options = point.options.errorBars;\n        var isVertical = field === Y;\n        var item = {};\n\n        point[field + \"Low\"] = low;\n        point[field + \"High\"] = high;\n\n        point.errorBars = point.errorBars || [];\n        var 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    ScatterChart.prototype.addValue = function addValue (value, fields) {\n        var x = value.x;\n        var y = value.y;\n        var seriesIx = fields.seriesIx;\n        var series = this.options.series[seriesIx];\n        var missingValues = this.seriesMissingValues(series);\n        var seriesPoints = this.seriesPoints[seriesIx];\n\n        var pointValue = value;\n        if (!(hasValue(x) && hasValue(y))) {\n            pointValue = this.createMissingValue(pointValue, missingValues);\n        }\n\n        var 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    ScatterChart.prototype.seriesMissingValues = function seriesMissingValues (series) {\n        return series.missingValues;\n    };\n\n    ScatterChart.prototype.createMissingValue = function createMissingValue () {};\n\n    ScatterChart.prototype.updateRange = function updateRange (value, series) {\n        var intlService = this.chartService.intl;\n        var xAxisName = series.xAxis;\n        var yAxisName = series.yAxis;\n        var x = value.x;\n        var y = value.y;\n        var xAxisRange = this.xAxisRanges[xAxisName];\n        var 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    ScatterChart.prototype.evalPointOptions = function evalPointOptions (options, value, fields) {\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var state = {\n            defaults: series._defaults,\n            excluded: [\n                \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\",\n                \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n                \"drilldownSeriesFactory\", \"ariaTemplate\", \"ariaContent\"\n            ]\n        };\n\n        var doEval = this._evalSeries[seriesIx];\n        if (!defined(doEval)) {\n            this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n        }\n\n        var 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    ScatterChart.prototype.pointType = function pointType () {\n        return LinePoint;\n    };\n\n    ScatterChart.prototype.pointOptions = function pointOptions (series, seriesIx) {\n        var options = this.seriesOptions[seriesIx];\n        if (!options) {\n            var 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    ScatterChart.prototype.createPoint = function createPoint (value, fields) {\n        var series = fields.series;\n        var pointOptions = this.pointOptions(series, fields.seriesIx);\n        var 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        var point = new LinePoint(value, pointOptions);\n        point.color = color;\n\n        this.append(point);\n\n        return point;\n    };\n\n    ScatterChart.prototype.seriesAxes = function seriesAxes (series) {\n        var xAxisName = series.xAxis;\n        var yAxisName = series.yAxis;\n        var plotArea = this.plotArea;\n        var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n        var 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    ScatterChart.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var chartPoints = this.points;\n        var limit = !this.options.clip;\n        var pointIx = 0;\n\n\n        this.traverseDataPoints(function (value, fields) {\n            var point = chartPoints[pointIx++];\n            var seriesAxes = this$1.seriesAxes(fields.series);\n            var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n            var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n\n            if (point) {\n                if (slotX && slotY) {\n                    var pointSlot = this$1.pointSlot(slotX, slotY);\n                    point.reflow(pointSlot);\n                } else {\n                    point.visible = false;\n                }\n            }\n        });\n\n        this.box = targetBox;\n    };\n\n    ScatterChart.prototype.pointSlot = function pointSlot (slotX, slotY) {\n        return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n    };\n\n    ScatterChart.prototype.traverseDataPoints = function traverseDataPoints (callback) {\n        var this$1 = this;\n\n        var ref = this;\n        var series = ref.options.series;\n        var seriesPoints = ref.seriesPoints;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var currentSeriesPoints = seriesPoints[seriesIx];\n            if (!currentSeriesPoints) {\n                seriesPoints[seriesIx] = [];\n            }\n\n            for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n                var ref$1 = this$1.plotArea.bindPoint(currentSeries, pointIx);\n                var value = ref$1.valueFields;\n                var fields = ref$1.fields;\n\n                callback(value, deepExtend({\n                    pointIx: pointIx,\n                    series: currentSeries,\n                    seriesIx: seriesIx,\n                    dataItem: currentSeries.data[pointIx],\n                    owner: this$1\n                }, fields));\n            }\n        }\n    };\n\n    ScatterChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var value = point.value;\n        return this.chartService.format.auto(format, value.x, value.y);\n    };\n\n    ScatterChart.prototype.animationPoints = function animationPoints () {\n        var points = this.points;\n        var result = [];\n        for (var idx = 0; idx < points.length; idx++) {\n            result.push((points[idx] || {}).marker);\n        }\n        return result;\n    };\n\n    return ScatterChart;\n}(ChartElement));\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\nexport default ScatterChart;\n","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';\nimport { createPatternFill } from '../../core/pattern';\n\nvar Bubble = (function (LinePoint) {\n    function Bubble(value, options) {\n        LinePoint.call(this, value, options);\n\n        this.category = value.category;\n    }\n\n    if ( LinePoint ) Bubble.__proto__ = LinePoint;\n    Bubble.prototype = Object.create( LinePoint && LinePoint.prototype );\n    Bubble.prototype.constructor = Bubble;\n\n    Bubble.prototype.createHighlight = function createHighlight () {\n        var highlight = this.options.highlight;\n        var border = highlight.border;\n        var markers = this.options.markers;\n        var center = this.box.center();\n        var radius = (markers.size + markers.border.width + border.width) / 2;\n        var highlightGroup = new draw.Group();\n        var 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        var 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: createPatternFill(this.options.pattern, {\n                color: markers.background,\n                opacity: highlight.opacity\n            })\n        });\n\n        highlightGroup.append(shadow, overlay);\n\n        return highlightGroup;\n    };\n\n    Bubble.prototype.createFocusHighlight = function createFocusHighlight (style) {\n        var highlightOptions = this.options.focusHighlight;\n        var markers = this.options.markers;\n        var center = this.box.center();\n        var radius = (markers.size + markers.border.width) / 2 + highlightOptions.border.width / 2;\n        var highlight = new draw.Circle(new geom.Circle([ center.x, center.y ], radius), style);\n\n        return highlight;\n    };\n\n    return Bubble;\n}(LinePoint));\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\nvar BubbleChart = (function (ScatterChart) {\n    function BubbleChart () {\n        ScatterChart.apply(this, arguments);\n    }\n\n    if ( ScatterChart ) BubbleChart.__proto__ = ScatterChart;\n    BubbleChart.prototype = Object.create( ScatterChart && ScatterChart.prototype );\n    BubbleChart.prototype.constructor = BubbleChart;\n\n    BubbleChart.prototype._initFields = function _initFields () {\n        this._maxSize = MIN_VALUE;\n        ScatterChart.prototype._initFields.call(this);\n    };\n\n    BubbleChart.prototype.addValue = function 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            ScatterChart.prototype.addValue.call(this, value, fields);\n        } else {\n            this.points.push(null);\n            this.seriesPoints[fields.seriesIx].push(null);\n        }\n    };\n\n    BubbleChart.prototype.reflow = function reflow (box) {\n        this.updateBubblesSize(box);\n        ScatterChart.prototype.reflow.call(this, box);\n    };\n\n    BubbleChart.prototype.pointType = function pointType () {\n        return Bubble;\n    };\n\n    BubbleChart.prototype.createPoint = function createPoint (value, fields) {\n        var series = fields.series;\n        var pointsCount = series.data.length;\n        var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n        var animationOptions = {\n            delay: delay,\n            duration: INITIAL_ANIMATION_DURATION - delay,\n            type: BUBBLE\n        };\n\n        var 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        var 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        var point = new Bubble(value, pointOptions);\n        point.color = color;\n\n        this.append(point);\n\n        return point;\n    };\n\n    BubbleChart.prototype.updateBubblesSize = function updateBubblesSize (box) {\n        var this$1 = this;\n\n        var ref = this;\n        var series = ref.options.series;\n        var boxSize = Math.min(box.width(), box.height());\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var seriesPoints = this$1.seriesPoints[seriesIx];\n            var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n            var maxSize = currentSeries.maxSize || boxSize * 0.2;\n            var minR = minSize / 2;\n            var maxR = maxSize / 2;\n            var minArea = Math.PI * minR * minR;\n            var maxArea = Math.PI * maxR * maxR;\n            var areaRange = maxArea - minArea;\n            var areaRatio = areaRange / this$1._maxSize;\n\n            for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n                var point = seriesPoints[pointIx];\n                if (point) {\n                    var area = Math.abs(point.value.size) * areaRatio;\n                    var radius = Math.sqrt((minArea + area) / Math.PI);\n                    var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n                    var 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    BubbleChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var value = point.value;\n        return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n    };\n\n    BubbleChart.prototype.createAnimation = function createAnimation () {};\n    BubbleChart.prototype.createVisual = function createVisual () {};\n\n    return BubbleChart;\n}(ScatterChart));\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\nvar Target = (function (ShapeElement) {\n\tfunction Target () {\n\t\tShapeElement.apply(this, arguments);\n\t}if ( ShapeElement ) Target.__proto__ = ShapeElement;\n\tTarget.prototype = Object.create( ShapeElement && ShapeElement.prototype );\n\tTarget.prototype.constructor = Target;\n\n\t\n\n\treturn Target;\n}(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 { Box, ChartElement } 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, getTemplate, setDefaultOptions, valueOrDefault } from '../../common';\n\nimport BarLabel from '../bar-chart/bar-label';\nimport { CHART_POINT_ROLE_DESCRIPTION, CHART_POINT_CLASSNAME, CHART_POINT_ROLE } from '../constants';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\nimport { createPatternFill } from '../../core/pattern';\n\nvar Bullet = (function (ChartElement) {\n    function Bullet(value, options) {\n        ChartElement.call(this, options);\n\n        this.aboveAxis = this.options.aboveAxis;\n        this.color = options.color || WHITE;\n        this.value = value;\n    }\n\n    if ( ChartElement ) Bullet.__proto__ = ChartElement;\n    Bullet.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Bullet.prototype.constructor = Bullet;\n\n    Bullet.prototype.render = function render () {\n        var 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.createLabel();\n            this.createNote();\n        }\n    };\n\n    Bullet.prototype.createLabel = function createLabel () {\n        var options = this.options;\n        var labels = options.labels;\n\n        if (labels.visible) {\n            this.label = this.createLabelElement(labels);\n            this.append(this.label);\n        }\n    };\n\n    Bullet.prototype.createLabelElement = function createLabelElement (options) {\n        return new BarLabel(this.getLabelText(options),\n            options,\n            this.pointData());\n    };\n\n    Bullet.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        }\n\n        return this.formatValue(options.format);\n    };\n\n    Bullet.prototype.reflow = function reflow (box) {\n        this.render();\n\n        var ref = this;\n        var options = ref.options;\n        var target = ref.target;\n        var chart = ref.owner;\n        var invertAxes = options.invertAxes;\n        var valueAxis = chart.seriesValueAxis(this.options);\n        var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n        var targetValueSlot = valueAxis.getSlot(this.value.target);\n        var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n        var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n\n        if (target) {\n            var 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        var label = this.label;\n        if (label) {\n            label.options.aboveAxis = this.aboveAxis;\n            label.reflow(box);\n        }\n\n        if (this.note) {\n            this.note.reflow(box);\n        }\n\n        this.box = box;\n    };\n\n    Bullet.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        this.addAccessibilityAttributesToVisual();\n\n        var options = this.options;\n        var body = draw.Path.fromRect(this.box.toRect(), {\n            fill: createPatternFill(options.pattern, {\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    Bullet.prototype.createAnimation = function createAnimation () {\n        if (this.bodyVisual) {\n            this.animation = draw.Animation.create(\n                this.bodyVisual, this.options.animation\n            );\n        }\n    };\n\n    Bullet.prototype.createHighlight = function createHighlight (style) {\n        return draw.Path.fromRect(this.box.toRect(), style);\n    };\n\n    Bullet.prototype.highlightVisual = function highlightVisual () {\n        return this.bodyVisual;\n    };\n\n    Bullet.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        return {\n            rect: this.box.toRect(),\n            visual: this.bodyVisual,\n            options: this.options\n        };\n    };\n\n    Bullet.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    Bullet.prototype.pointData = function pointData () {\n        return {\n            dataItem: this.dataItem,\n            category: this.category,\n            value: this.value,\n            series: this.series\n        };\n    };\n\n    Bullet.prototype.overlapsBox = function overlapsBox (box) {\n        return this.box.overlaps(box);\n    };\n\n    Bullet.prototype.getIndex = function getIndex () {\n        return this.categoryIx;\n    };\n\n    return Bullet;\n}(ChartElement));\n\nBullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\nBullet.prototype.createFocusHighlight = Bar.prototype.createFocusHighlight;\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    labels: {\n        visible: false\n    },\n    tooltip: {\n        format: \"Current: {0}<br />Target: {1}\"\n    },\n    notes: {\n        label: {}\n    },\n    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n});\n\ndeepExtend(Bullet.prototype, PointEventsMixin);\ndeepExtend(Bullet.prototype, NoteMixin);\ndeepExtend(Bullet.prototype, AccessibilityAttributesMixin);\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\nvar BulletChart = (function (CategoricalChart) {\n    function BulletChart(plotArea, options) {\n\n        wrapData(options);\n\n        CategoricalChart.call(this, plotArea, options);\n    }\n\n    if ( CategoricalChart ) BulletChart.__proto__ = CategoricalChart;\n    BulletChart.prototype = Object.create( CategoricalChart && CategoricalChart.prototype );\n    BulletChart.prototype.constructor = BulletChart;\n\n    BulletChart.prototype.reflowCategories = function reflowCategories (categorySlots) {\n        var children = this.children;\n        var childrenLength = children.length;\n\n        for (var i = 0; i < childrenLength; i++) {\n            children[i].reflow(categorySlots[i]);\n        }\n    };\n\n    BulletChart.prototype.plotRange = function plotRange (point) {\n        var series = point.series;\n        var valueAxis = this.seriesValueAxis(series);\n        var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n        return [ axisCrossingValue, point.value.current || axisCrossingValue ];\n    };\n\n    BulletChart.prototype.createPoint = function createPoint (data, fields) {\n        var categoryIx = fields.categoryIx;\n        var series = fields.series;\n        var ref = this;\n        var options = ref.options;\n        var children = ref.children;\n        var value = data.valueFields;\n\n        var bulletOptions = deepExtend({\n            vertical: !options.invertAxes,\n            overlay: series.overlay,\n            categoryIx: categoryIx,\n            invertAxes: options.invertAxes\n        }, series);\n\n        var color = data.fields.color || series.color;\n        bulletOptions = this.evalPointOptions(bulletOptions, value, fields);\n        if (isFunction(series.color)) {\n            color = bulletOptions.color;\n        }\n\n        var bullet = new Bullet(value, bulletOptions);\n        bullet.color = color;\n\n        var 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    BulletChart.prototype.updateRange = function updateRange (value, fields) {\n        var current = value.current;\n        var target = value.target;\n        var axisName = fields.series.axis;\n        var 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    BulletChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        return this.chartService.format.auto(format, point.value.current, point.value.target);\n    };\n\n    BulletChart.prototype.pointValue = function pointValue (data) {\n        return data.valueFields.current;\n    };\n\n    BulletChart.prototype.aboveAxis = function aboveAxis (point) {\n        var value = point.value.current;\n\n        return value > 0;\n    };\n\n    BulletChart.prototype.createAnimation = function createAnimation () {\n        var this$1 = this;\n\n        var points = this.points;\n\n        this._setAnimationOptions();\n\n        for (var idx = 0; idx < points.length; idx++) {\n            var point = points[idx];\n            point.options.animation = this$1.options.animation;\n            point.createAnimation();\n        }\n    };\n\n    return BulletChart;\n}(CategoricalChart));\n\nBulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n\nsetDefaultOptions(BulletChart, {\n    animation: {\n        type: BAR\n    }\n});\n\nfunction wrapData(options) {\n    var series = options.series;\n\n    for (var i = 0; i < series.length; i++) {\n        var seriesItem = series[i];\n        var data = seriesItem.data;\n        if (data && !isArray(data[0]) && !isObject(data[0])) {\n            seriesItem.data = [ data ];\n        }\n    }\n}\n\nexport default BulletChart;\n","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\nvar BaseTooltip = (function (Class) {\n    function BaseTooltip(chartService, options) {\n        Class.call(this);\n\n        this.chartService = chartService;\n        this.options = deepExtend({}, this.options, options);\n    }\n\n    if ( Class ) BaseTooltip.__proto__ = Class;\n    BaseTooltip.prototype = Object.create( Class && Class.prototype );\n    BaseTooltip.prototype.constructor = BaseTooltip;\n\n    BaseTooltip.prototype.getStyle = function getStyle (options, point) {\n        var background = options.background;\n        var border = options.border.color;\n\n        if (point) {\n            var pointColor = point.color || point.options.color;\n            background = valueOrDefault(background, pointColor);\n            border = valueOrDefault(border, pointColor);\n        }\n\n        var padding = options.padding !== undefined ? getSpacing(options.padding) : {};\n\n        if (typeof options.padding === \"object\") {\n            padding.top = options.padding.top !== undefined ? padding.top : undefined;\n            padding.right = options.padding.right !== undefined ? padding.right : undefined;\n            padding.bottom = options.padding.bottom !== undefined ? padding.bottom : undefined;\n            padding.left = options.padding.left !== undefined ? padding.left : undefined;\n        }\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    BaseTooltip.prototype.show = function show (options, tooltipOptions, point) {\n        if (!this.chartService) {\n            return;\n        }\n        options.format = tooltipOptions.format;\n\n        var style = this.getStyle(tooltipOptions, point);\n        options.style = style;\n\n        var 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    BaseTooltip.prototype.hide = function hide () {\n        if (this.chartService) {\n            this.chartService.notify(HIDE_TOOLTIP);\n        }\n\n        this.visible = false;\n    };\n\n    BaseTooltip.prototype.destroy = function destroy () {\n        delete this.chartService;\n    };\n\n    return BaseTooltip;\n}(Class));\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\nvar CrosshairTooltip = (function (BaseTooltip) {\n    function CrosshairTooltip(chartService, crosshair, options) {\n        BaseTooltip.call(this, chartService, options);\n\n        this.crosshair = crosshair;\n        this.formatService = chartService.format;\n        this.initAxisName();\n    }\n\n    if ( BaseTooltip ) CrosshairTooltip.__proto__ = BaseTooltip;\n    CrosshairTooltip.prototype = Object.create( BaseTooltip && BaseTooltip.prototype );\n    CrosshairTooltip.prototype.constructor = CrosshairTooltip;\n\n    CrosshairTooltip.prototype.initAxisName = function initAxisName () {\n        var axis = this.crosshair.axis;\n        var plotArea = axis.plotArea;\n        var 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    CrosshairTooltip.prototype.showAt = function showAt (point) {\n        var ref = this;\n        var axis = ref.crosshair.axis;\n        var options = ref.options;\n        var value = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\n        var 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    CrosshairTooltip.prototype.hide = function 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    CrosshairTooltip.prototype.getAnchor = function getAnchor () {\n        var ref = this;\n        var crosshair = ref.crosshair;\n        var ref_options = ref.options;\n        var position = ref_options.position;\n        var padding = ref_options.padding;\n        var vertical = !crosshair.axis.options.vertical;\n        var lineBox = crosshair.line.bbox();\n        var 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    return CrosshairTooltip;\n}(BaseTooltip));\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\nvar Crosshair = (function (ChartElement) {\n    function Crosshair(chartService, axis, options) {\n        ChartElement.call(this, options);\n\n        this.axis = axis;\n        this.stickyMode = axis instanceof CategoryAxis;\n\n        var 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    if ( ChartElement ) Crosshair.__proto__ = ChartElement;\n    Crosshair.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Crosshair.prototype.constructor = Crosshair;\n\n    Crosshair.prototype.showAt = function 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    Crosshair.prototype.hide = function hide () {\n        this.line.visible(false);\n\n        if (this.tooltip) {\n            this.tooltip.hide();\n        }\n    };\n\n    Crosshair.prototype.moveLine = function moveLine () {\n        var ref = this;\n        var axis = ref.axis;\n        var point = ref.point;\n        var vertical = axis.options.vertical;\n        var box = this.getBox();\n        var dim = vertical ? Y : X;\n        var lineStart = new geom.Point(box.x1, box.y1);\n        var 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                var 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    Crosshair.prototype.getBox = function getBox () {\n        var axis = this.axis;\n        var axes = axis.pane.axes;\n        var length = axes.length;\n        var vertical = axis.options.vertical;\n        var box = axis.lineBox().clone();\n        var dim = vertical ? X : Y;\n        var axisLineBox;\n\n        for (var i = 0; i < length; i++) {\n            var 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    Crosshair.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        var 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    Crosshair.prototype.destroy = function destroy () {\n        if (this.tooltip) {\n            this.tooltip.destroy();\n        }\n\n        ChartElement.prototype.destroy.call(this);\n    };\n\n    return Crosshair;\n}(ChartElement));\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\nvar ChartContainer = (function (ChartElement) {\n    function ChartContainer(options, pane) {\n        ChartElement.call(this, options);\n        this.pane = pane;\n    }\n\n    if ( ChartElement ) ChartContainer.__proto__ = ChartElement;\n    ChartContainer.prototype = Object.create( ChartElement && ChartElement.prototype );\n    ChartContainer.prototype.constructor = ChartContainer;\n\n    ChartContainer.prototype.shouldClip = function shouldClip () {\n        var children = this.children;\n        var length = children.length;\n\n        for (var i = 0; i < length; i++) {\n            if (children[i].options.clip === true) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    ChartContainer.prototype._clipBox = function _clipBox () {\n        return this.pane.chartsBox();\n    };\n\n    ChartContainer.prototype.createVisual = function createVisual () {\n        this.visual = new draw.Group({\n            zIndex: 0\n        });\n\n        if (this.shouldClip()) {\n            var clipBox = this.clipBox = this._clipBox();\n            var clipRect = clipBox.toRect();\n            var clipPath = draw.Path.fromRect(clipRect);\n            alignPathToPixel(clipPath);\n\n            this.visual.clip(clipPath);\n            this.unclipLabels();\n        }\n    };\n\n    ChartContainer.prototype.stackRoot = function stackRoot () {\n        return this;\n    };\n\n    ChartContainer.prototype.unclipLabels = function unclipLabels () {\n        var ref = this;\n        var charts = ref.children;\n        var clipBox = ref.clipBox;\n\n        for (var i = 0; i < charts.length; i++) {\n            var points = charts[i].points || {};\n            var length = points.length;\n\n            for (var j = 0; j < length; j++) {\n                var point = points[j];\n                if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n                    if (point.unclipElements) {\n                        point.unclipElements();\n                    } else {\n                        var label = point.label;\n                        var note = point.note;\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    ChartContainer.prototype.destroy = function destroy () {\n        ChartElement.prototype.destroy.call(this);\n\n        delete this.parent;\n    };\n\n    return ChartContainer;\n}(ChartElement));\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\nvar Pane = (function (BoxElement) {\n    function Pane(options) {\n        BoxElement.call(this, 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    if ( BoxElement ) Pane.__proto__ = BoxElement;\n    Pane.prototype = Object.create( BoxElement && BoxElement.prototype );\n    Pane.prototype.constructor = Pane;\n\n    Pane.prototype.createTitle = function createTitle () {\n        var 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, Pane.prototype.options.title);\n        if (this.title) {\n            this.append(this.title);\n        }\n    };\n\n    Pane.prototype.appendAxis = function appendAxis (axis) {\n        this.content.append(axis);\n        this.axes.push(axis);\n        axis.pane = this;\n    };\n\n    Pane.prototype.appendAxisAt = function appendAxisAt (axis, pos) {\n        this.content.append(axis);\n        this.axes.splice(pos, 0, axis);\n        axis.pane = this;\n    };\n\n    Pane.prototype.appendChart = function 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    Pane.prototype.empty = function empty () {\n        var this$1 = this;\n\n        var plotArea = this.parent;\n\n        if (plotArea) {\n            for (var i = 0; i < this.axes.length; i++) {\n                plotArea.removeAxis(this$1.axes[i]);\n            }\n\n            for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n                plotArea.removeChart(this$1.charts[i$1]);\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    Pane.prototype.reflow = function reflow (targetBox) {\n        // Content (such as charts) is rendered, but excluded from reflows\n        var content;\n        if (last(this.children) === this.content) {\n            content = this.children.pop();\n        }\n\n        BoxElement.prototype.reflow.call(this, 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    Pane.prototype.visualStyle = function visualStyle () {\n        var style = BoxElement.prototype.visualStyle.call(this);\n        style.zIndex = -10;\n\n        return style;\n    };\n\n    Pane.prototype.renderComplete = function renderComplete () {\n        if (this.options.visible) {\n            this.createGridLines();\n        }\n    };\n\n    Pane.prototype.stackRoot = function stackRoot () {\n        return this;\n    };\n\n    Pane.prototype.clipRoot = function clipRoot () {\n        return this;\n    };\n\n    Pane.prototype.createGridLines = function createGridLines () {\n        var axes = this.axes;\n        var allAxes = axes.concat(this.parent.axes);\n        var vGridLines = [];\n        var hGridLines = [];\n\n        // TODO\n        // Is full combination really necessary?\n        for (var i = 0; i < axes.length; i++) {\n            var axis = axes[i];\n            var vertical = axis.options.vertical;\n            var gridLines = vertical ? vGridLines : hGridLines;\n            for (var j = 0; j < allAxes.length; j++) {\n                if (gridLines.length === 0) {\n                    var altAxis = allAxes[j];\n                    if (vertical !== altAxis.options.vertical) {\n                        append(gridLines, axis.createGridLines(altAxis));\n                    }\n                }\n            }\n        }\n    };\n\n    Pane.prototype.refresh = function 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    Pane.prototype.chartsBox = function chartsBox () {\n        var axes = this.axes;\n        var length = axes.length;\n        var chartsBox = new Box();\n\n        for (var idx = 0; idx < length; idx++) {\n            var axis = axes[idx];\n            var axisValueField = axis.options.vertical ? Y : X;\n            var 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            var allAxes = this.parent.axes;\n            var length$1 = allAxes.length;\n\n            for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n                var axis$1 = allAxes[idx$1];\n                if (!axis$1.options.vertical) {\n                    var lineBox$1 = axis$1.lineBox();\n                    chartsBox.x1 = lineBox$1.x1;\n                    chartsBox.x2 = lineBox$1.x2;\n                }\n            }\n        }\n        return chartsBox;\n    };\n\n    Pane.prototype.clipBox = function clipBox () {\n        return this.chartContainer.clipBox;\n    };\n\n    Pane.prototype.notifyRender = function notifyRender () {\n        var 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    return Pane;\n}(BoxElement));\n\nvar 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","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';\nimport SeriesBinder from '../series-binder';\n\nimport { WHITE, BLACK, X, Y, COORD_PRECISION, TOP, BOTTOM, LEFT, RIGHT, START, END, INHERIT } from '../../common/constants';\nimport { append, deepExtend, defined, getSpacing, getTemplate, inArray, isFunction, isString,\n    limitValue, round, setDefaultOptions, last, cycleIndex } from '../../common';\nimport { TRENDLINE_SERIES } from '../constants';\n\nvar visiblePoint = function (point) { return point.options.visible !== false; };\n\nvar PlotAreaBase = (function (ChartElement) {\n    function PlotAreaBase(series, options, chartService) {\n        ChartElement.call(this, 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.data = [];\n        this.axes = [];\n        this.crosshairs = [];\n        this.chartService = chartService;\n        this.originalOptions = options;\n        this.originalSeries = series;\n        this._bindCache = new WeakMap();\n\n        this.createPanes();\n        this.render();\n        this.createCrosshairs();\n    }\n\n    if ( ChartElement ) PlotAreaBase.__proto__ = ChartElement;\n    PlotAreaBase.prototype = Object.create( ChartElement && ChartElement.prototype );\n    PlotAreaBase.prototype.constructor = PlotAreaBase;\n\n    PlotAreaBase.prototype.initFields = function initFields () { };\n\n    PlotAreaBase.prototype.initSeries = function initSeries () {\n        var series = this.series;\n\n        for (var i = 0; i < series.length; i++) {\n            series[i].index = i;\n        }\n    };\n\n    PlotAreaBase.prototype.bindPoint = function bindPoint (series, pointIx, item) {\n        var cached = this._bindCache.get(series);\n        if (!cached) {\n            cached = [];\n            this._bindCache.set(series, cached);\n        }\n\n        var data = cached[pointIx];\n        if (!data) {\n            data = cached[pointIx] = SeriesBinder.current.bindPoint(series, pointIx, item);\n        }\n\n        return data;\n    };\n\n    PlotAreaBase.prototype.createPanes = function createPanes () {\n        var this$1 = this;\n\n        var titleOptions = this.options.title || {};\n        var paneDefaults = this.options.paneDefaults;\n        var paneOptions = this.options.panes || [];\n        var panesLength = Math.max(paneOptions.length, 1);\n        var panes = [];\n\n        var defaults = deepExtend({\n            title: {\n                color: titleOptions.color\n            }\n        }, paneDefaults);\n\n        for (var i = 0; i < panesLength; i++) {\n            var options = deepExtend({}, defaults, paneOptions[i]);\n            if (isString(options.title)) {\n                options.title = deepExtend({ text: options.title }, defaults.title);\n            }\n\n            var currentPane = new Pane(options);\n            currentPane.paneIndex = i;\n\n            panes.push(currentPane);\n            this$1.append(currentPane);\n        }\n\n        this.panes = panes;\n    };\n\n    PlotAreaBase.prototype.crosshairOptions = function crosshairOptions (axis) {\n        return axis.options.crosshair;\n    };\n\n    PlotAreaBase.prototype.createCrosshairs = function createCrosshairs (panes) {\n        var this$1 = this;\n        if ( panes === void 0 ) panes = this.panes;\n\n        for (var i = 0; i < panes.length; i++) {\n            var pane = panes[i];\n            for (var j = 0; j < pane.axes.length; j++) {\n                var axis = pane.axes[j];\n                var options = this$1.crosshairOptions(axis);\n                if (options && options.visible) {\n                    var currentCrosshair = new Crosshair(this$1.chartService, axis, options);\n\n                    this$1.crosshairs.push(currentCrosshair);\n                    pane.content.append(currentCrosshair);\n                }\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.removeCrosshairs = function removeCrosshairs (pane) {\n        var crosshairs = this.crosshairs;\n        var axes = pane.axes;\n\n        for (var i = crosshairs.length - 1; i >= 0; i--) {\n            for (var 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    PlotAreaBase.prototype.hideCrosshairs = function hideCrosshairs () {\n        var crosshairs = this.crosshairs;\n        for (var idx = 0; idx < crosshairs.length; idx++) {\n            crosshairs[idx].hide();\n        }\n    };\n\n    PlotAreaBase.prototype.findPane = function findPane (name) {\n        var panes = this.panes;\n        var matchingPane;\n\n        for (var 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    PlotAreaBase.prototype.findPointPane = function findPointPane (point) {\n        var panes = this.panes;\n        var matchingPane;\n\n        for (var 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    PlotAreaBase.prototype.appendAxis = function appendAxis (axis) {\n        var pane = this.findPane(axis.options.pane);\n\n        pane.appendAxis(axis);\n        this.axes.push(axis);\n        axis.plotArea = this;\n    };\n\n    PlotAreaBase.prototype.removeAxis = function removeAxis (axisToRemove) {\n        var this$1 = this;\n\n        var filteredAxes = [];\n\n        for (var i = 0; i < this.axes.length; i++) {\n            var axis = this$1.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    PlotAreaBase.prototype.appendChart = function 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    PlotAreaBase.prototype.removeChart = function removeChart (chartToRemove) {\n        var this$1 = this;\n\n        var filteredCharts = [];\n\n        for (var i = 0; i < this.charts.length; i++) {\n            var chart = this$1.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    PlotAreaBase.prototype.addToLegend = function addToLegend (series) {\n        var count = series.length;\n        var legend = this.options.legend;\n        var labels = legend.labels || {};\n        var inactiveItems = legend.inactiveItems || {};\n        var inactiveItemsLabels = inactiveItems.labels || {};\n        var data = [];\n\n        for (var i = 0; i < count; i++) {\n            var currentSeries = series[i];\n            var seriesVisible = currentSeries.visible !== false;\n            if (currentSeries.visibleInLegend === false) {\n                continue;\n            }\n\n            var text = currentSeries.name;\n            var 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            var defaults = currentSeries._defaults;\n            var color = currentSeries.color;\n            if (isFunction(color) && defaults) {\n                color = defaults.color;\n            }\n\n            var itemLabelOptions = (void 0), markerColor = (void 0);\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.data, data);\n    };\n\n    PlotAreaBase.prototype.groupAxes = function groupAxes (panes) {\n        var xAxes = [];\n        var yAxes = [];\n\n        for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n            var paneAxes = panes[paneIx].axes;\n            for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n                var 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    PlotAreaBase.prototype.groupSeriesByPane = function groupSeriesByPane () {\n        var this$1 = this;\n\n        var series = this.series;\n        var seriesByPane = {};\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n            var pane = this$1.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    PlotAreaBase.prototype.filterVisibleSeries = function filterVisibleSeries (series) {\n        var result = [];\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n            if (currentSeries.visible !== false) {\n                result.push(currentSeries);\n            }\n        }\n\n        return result;\n    };\n\n    PlotAreaBase.prototype.reflow = function reflow (targetBox) {\n        var options = this.options.plotArea;\n        var panes = this.panes;\n        var 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    PlotAreaBase.prototype.redraw = function redraw (panes) {\n        var this$1 = this;\n\n        var panesArray = [].concat(panes);\n        this.initSeries();\n\n        //prevents leak during partial redraws. the cached gradients observers retain reference to the destroyed elements.\n        var root = this.getRoot();\n        if (root) {\n            root.cleanGradients();\n        }\n\n        for (var i = 0; i < panesArray.length; i++) {\n            this$1.removeCrosshairs(panesArray[i]);\n            panesArray[i].empty();\n        }\n\n        this._bindCache = new WeakMap();\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 (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n            panesArray[i$1].refresh();\n        }\n    };\n\n    PlotAreaBase.prototype.axisCrossingValues = function axisCrossingValues (axis, crossingAxes) {\n        var options = axis.options;\n        var crossingValues = [].concat(\n            options.axisCrossingValues || options.axisCrossingValue\n        );\n        var valuesToAdd = crossingAxes.length - crossingValues.length;\n        var defaultValue = crossingValues[0] || 0;\n\n        for (var i = 0; i < valuesToAdd; i++) {\n            crossingValues.push(defaultValue);\n        }\n\n        return crossingValues;\n    };\n\n    PlotAreaBase.prototype.alignAxisTo = function alignAxisTo (axis, targetAxis, crossingValue, targetCrossingValue) {\n        var slot = axis.getSlot(crossingValue, crossingValue, true);\n        var slotEdge = axis.options.reverse ? 2 : 1;\n        var targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n        var targetEdge = targetAxis.options.reverse ? 2 : 1;\n        var 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    PlotAreaBase.prototype.alignAxes = function alignAxes (xAxes, yAxes) {\n        var this$1 = this;\n\n        var xAnchor = xAxes[0];\n        var yAnchor = yAxes[0];\n        var xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n        var yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n        var leftAnchors = {};\n        var rightAnchors = {};\n        var topAnchors = {};\n        var bottomAnchors = {};\n\n        for (var i = 0; i < yAxes.length; i++) {\n            var axis = yAxes[i];\n            var pane = axis.pane;\n            var paneId = pane.id;\n            var visible = axis.options.visible !== false;\n\n            // Locate pane anchor, if any, and use its axisCrossingValues\n            var anchor = paneAnchor(xAxes, pane) || xAnchor;\n            var anchorCrossings = xAnchorCrossings;\n\n            if (anchor !== xAnchor) {\n                anchorCrossings = this$1.axisCrossingValues(anchor, yAxes);\n            }\n\n            this$1.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$1.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            // Locate pane anchor, if any, and align the axis to it\n            var paneYAnchor = paneAnchor(yAxes, pane) || yAnchor;\n            if (paneYAnchor !== axis) {\n                axis.alignTo(paneYAnchor);\n                axis.reflow(axis.box);\n            }\n        }\n\n        for (var i$1 = 0; i$1 < xAxes.length; i$1++) {\n            var axis$1 = xAxes[i$1];\n            var pane$1 = axis$1.pane;\n            var paneId$1 = pane$1.id;\n            var visible$1 = axis$1.options.visible !== false;\n\n            // Locate pane anchor and use its axisCrossingValues\n            var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n            var anchorCrossings$1 = yAnchorCrossings;\n            if (anchor$1 !== yAnchor) {\n                anchorCrossings$1 = this$1.axisCrossingValues(anchor$1, xAxes);\n            }\n\n            this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n            if (axis$1.options._overlap) {\n                continue;\n            }\n\n            if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n                // Flip the labels on top if we're at the top of the pane\n                if (!axis$1._mirrored) {\n                    axis$1.options.labels.mirror = !axis$1.options.labels.mirror;\n                    axis$1._mirrored = true;\n                }\n                this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n                // Push the axis above the previous x-axis so they don't overlap\n                if (topAnchors[paneId$1]) {\n                    axis$1.reflow(axis$1.box\n                        .alignTo(topAnchors[paneId$1].box, TOP)\n                        .translate(0, -axis$1.options.margin)\n                    );\n                }\n\n                if (visible$1) {\n                    topAnchors[paneId$1] = axis$1;\n                }\n            }\n\n            if (round(axis$1.lineBox().y2, COORD_PRECISION) === round(anchor$1.lineBox().y2, COORD_PRECISION)) {\n                // Push the axis below the previous x-axis so they don't overlap\n                if (bottomAnchors[paneId$1]) {\n                    axis$1.reflow(axis$1.box\n                        .alignTo(bottomAnchors[paneId$1].box, BOTTOM)\n                        .translate(0, axis$1.options.margin)\n                    );\n                }\n\n                if (visible$1) {\n                    bottomAnchors[paneId$1] = axis$1;\n                }\n            }\n\n            if (i$1 !== 0) {\n                axis$1.alignTo(xAnchor);\n                axis$1.reflow(axis$1.box);\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.shrinkAxisWidth = function shrinkAxisWidth (panes) {\n        var axes = this.groupAxes(panes).any;\n        var axisBox = axisGroupBox(axes);\n        var overflowX = 0;\n\n        for (var i = 0; i < panes.length; i++) {\n            var 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 (var i$1 = 0; i$1 < axes.length; i$1++) {\n                var currentAxis = axes[i$1];\n\n                if (!currentAxis.options.vertical) {\n                    currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n                }\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.shrinkAxisHeight = function shrinkAxisHeight (panes) {\n        var shrinked;\n\n        for (var i = 0; i < panes.length; i++) {\n            var currentPane = panes[i];\n            var axes = currentPane.axes;\n            var overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n\n            if (overflowY !== 0) {\n                for (var j = 0; j < axes.length; j++) {\n                    var 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    PlotAreaBase.prototype.fitAxes = function fitAxes (panes) {\n        var axes = this.groupAxes(panes).any;\n        var offsetX = 0;\n\n        for (var i = 0; i < panes.length; i++) {\n            var currentPane = panes[i];\n            var paneAxes = currentPane.axes;\n            var paneBox = currentPane.contentBox;\n\n            if (paneAxes.length > 0) {\n                var axisBox = axisGroupBox(paneAxes);\n                // OffsetY is calculated and applied per pane\n                var 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 (var j = 0; j < paneAxes.length; j++) {\n                    var currentAxis = paneAxes[j];\n\n                    currentAxis.reflow(\n                        currentAxis.box.translate(0, offsetY)\n                    );\n                }\n            }\n        }\n\n        for (var i$1 = 0; i$1 < axes.length; i$1++) {\n            var currentAxis$1 = axes[i$1];\n\n            currentAxis$1.reflow(\n                currentAxis$1.box.translate(offsetX, 0)\n            );\n        }\n    };\n\n    PlotAreaBase.prototype.reflowAxes = function reflowAxes (panes) {\n        var this$1 = this;\n\n        var axes = this.groupAxes(panes);\n\n        for (var i = 0; i < panes.length; i++) {\n            this$1.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    PlotAreaBase.prototype.autoRotateAxisLabels = function autoRotateAxisLabels (groupedAxes) {\n        var this$1 = this;\n\n        var ref = this;\n        var panes = ref.panes;\n        var axes = allPaneAxes(panes);\n        var rotated;\n\n        for (var idx = 0; idx < axes.length; idx++) {\n            var axis = axes[idx];\n            if (axis.autoRotateLabels()) {\n                rotated = true;\n            }\n        }\n\n        if (rotated) {\n            for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n                this$1.reflowPaneAxes(panes[idx$1]);\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    PlotAreaBase.prototype.reflowPaneAxes = function reflowPaneAxes (pane) {\n        var axes = pane.axes;\n        var length = axes.length;\n\n        if (length > 0) {\n            for (var i = 0; i < length; i++) {\n                axes[i].reflow(pane.contentBox);\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.reflowCharts = function reflowCharts (panes) {\n        var charts = this.charts;\n        var count = charts.length;\n        var box = this.box;\n\n        for (var i = 0; i < count; i++) {\n            var chartPane = charts[i].pane;\n            if (!chartPane || inArray(chartPane, panes)) {\n                charts[i].reflow(box);\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.reflowPanes = function reflowPanes () {\n        var ref = this;\n        var box = ref.box;\n        var panes = ref.panes;\n        var panesLength = panes.length;\n        var remainingHeight = box.height();\n        var autoHeightPanes = 0;\n        var top = box.y1;\n\n        for (var i = 0; i < panesLength; i++) {\n            var currentPane = panes[i];\n            var 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                    var 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 (var i$1 = 0; i$1 < panesLength; i$1++) {\n            var currentPane$1 = panes[i$1];\n\n            if (!currentPane$1.options.height) {\n                currentPane$1.options.height = remainingHeight / autoHeightPanes;\n            }\n        }\n\n        for (var i$2 = 0; i$2 < panesLength; i$2++) {\n            var currentPane$2 = panes[i$2];\n            var paneBox = box\n                .clone()\n                .move(box.x1, top);\n\n            currentPane$2.reflow(paneBox);\n\n            top += currentPane$2.options.height;\n        }\n    };\n\n    PlotAreaBase.prototype.backgroundBox = function backgroundBox () {\n        var axes = this.axes;\n        var axesCount = axes.length;\n        var box;\n\n        for (var i = 0; i < axesCount; i++) {\n            var axisA = axes[i];\n\n            for (var j = 0; j < axesCount; j++) {\n                var axisB = axes[j];\n\n                if (axisA.options.vertical !== axisB.options.vertical) {\n                    var 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    PlotAreaBase.prototype.chartsBoxes = function chartsBoxes () {\n        var panes = this.panes;\n        var boxes = [];\n\n        for (var idx = 0; idx < panes.length; idx++) {\n            boxes.push(panes[idx].chartsBox());\n        }\n\n        return boxes;\n    };\n\n    PlotAreaBase.prototype.addBackgroundPaths = function addBackgroundPaths (multipath) {\n        var boxes = this.chartsBoxes();\n        for (var idx = 0; idx < boxes.length; idx++) {\n            multipath.paths.push(draw.Path.fromRect(boxes[idx].toRect()));\n        }\n    };\n\n    PlotAreaBase.prototype.backgroundContainsPoint = function backgroundContainsPoint (point) {\n        var boxes = this.chartsBoxes();\n        for (var idx = 0; idx < boxes.length; idx++) {\n            if (boxes[idx].containsPoint(point)) {\n                return true;\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        var options = this.options.plotArea;\n        var opacity = options.opacity;\n        var background = options.background;\n        var border = options.border; if ( border === void 0 ) border = {};\n        if (isTransparent(background)) {\n            background = WHITE;\n            opacity = 0;\n        }\n\n        var 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    PlotAreaBase.prototype.pointsByCategoryIndex = function pointsByCategoryIndex (categoryIndex) {\n        var charts = this.charts;\n        var result = [];\n\n        if (categoryIndex !== null) {\n            for (var i = 0; i < charts.length; i++) {\n                var chart = charts[i];\n\n                if (chart.pane.options.name === \"_navigator\") {\n                    continue;\n                }\n\n                var points = charts[i].categoryPoints[categoryIndex];\n                if (points && points.length) {\n                    for (var j = 0; j < points.length; j++) {\n                        var 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    PlotAreaBase.prototype.pointsBySeriesIndex = function pointsBySeriesIndex (seriesIndex) {\n        return this.filterPoints(function(point) {\n            return point.series.index === seriesIndex;\n        });\n    };\n\n    PlotAreaBase.prototype.pointsByPointIndex = function pointsByPointIndex (pointIndex) {\n        return this.filterPoints(function(point) {\n            return point.getIndex() === pointIndex;\n        });\n    };\n\n    PlotAreaBase.prototype.pointsBySeriesName = function pointsBySeriesName (name) {\n        return this.filterPoints(function(point) {\n            return point.series.name === name;\n        });\n    };\n\n    PlotAreaBase.prototype.filterPoints = function filterPoints (callback) {\n        var charts = this.charts;\n        var result = [];\n\n        for (var i = 0; i < charts.length; i++) {\n            var chart = charts[i];\n            var points = chart.points;\n            for (var j = 0; j < points.length; j++) {\n                var 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    PlotAreaBase.prototype.findPoint = function findPoint (callback) {\n        var charts = this.charts;\n\n        for (var i = 0; i < charts.length; i++) {\n            var chart = charts[i];\n            var points = chart.points;\n            for (var j = 0; j < points.length; j++) {\n                var point = points[j];\n                if (point && point.visible !== false && callback(point)) {\n                    return point;\n                }\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.paneByPoint = function paneByPoint (point) {\n        var panes = this.panes;\n\n        for (var i = 0; i < panes.length; i++) {\n            var pane = panes[i];\n            if (pane.box.containsPoint(point)) {\n                return pane;\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.detachLabels = function detachLabels () {\n        var axes = this.groupAxes(this.panes);\n        var xAxes = axes.x;\n        var yAxes = axes.y;\n\n        this.detachAxisGroupLabels(yAxes, xAxes);\n        this.detachAxisGroupLabels(xAxes, yAxes);\n    };\n\n    PlotAreaBase.prototype.detachAxisGroupLabels = function detachAxisGroupLabels (axes, crossingAxes) {\n        var this$1 = this;\n\n        var labelAxisCount = 0;\n\n        for (var i = 0; i < axes.length; i++) {\n            var axis = axes[i];\n            var pane = axis.pane;\n            var anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n            var axisIndex = i + labelAxisCount;\n            var labelAxis = this$1.createLabelAxis(axis, axisIndex, anchor);\n\n            if (labelAxis) {\n                labelAxisCount++;\n\n                var pos = pane.axes.indexOf(axis) + labelAxisCount;\n                pane.appendAxisAt(labelAxis, pos);\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.createLabelAxis = function createLabelAxis (axis, axisIndex, anchor) {\n        var labelOptions = axis.options.labels;\n        var position = labelOptions.position;\n        var onAxis = position !== END && position !== START;\n        var visible = labelOptions.visible;\n\n        if (onAxis || visible === false) {\n            return null;\n        }\n\n        var allAxes = this.groupAxes(this.panes);\n        var crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n        var anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n        var end = position === END;\n        var range = anchor.range();\n        var edge = end ? range.max : range.min;\n        var 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        var 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    PlotAreaBase.prototype.isTrendline = function isTrendline (series) {\n        return series && inArray(series.type, TRENDLINE_SERIES);\n    };\n\n    PlotAreaBase.prototype.trendlineFactory = function trendlineFactory () { /* abstract */ };\n\n    PlotAreaBase.prototype.createTrendlineSeries = function createTrendlineSeries () {\n        var this$1 = this;\n\n        var modifiedSeries = [];\n\n        this.series = this.series.map(function (series) {\n            if (!this$1.isTrendline(series)) {\n                return series;\n            }\n\n            var forSeries = this$1.seriesByName(series.for);\n            if (!forSeries) {\n                throw new Error('Invalid Configuration: Unable to locate linked series ' +\n                    \"\\\"\" + (series.for) + \"\\\" for trendline \\\"\" + (series.name) + \"\\\".\");\n            }\n\n            var valueFields = SeriesBinder.current.valueFields(forSeries);\n            var field = last(valueFields); // Use the last field for multi-field series\n\n            var trendlineSeries = this$1.trendlineFactory(Object.assign({}, {field: field}, series), forSeries);\n            if (trendlineSeries) {\n                if (forSeries.visible === false) {\n                    trendlineSeries.visible = false;\n                }\n\n                if (trendlineSeries.color === INHERIT) {\n                    trendlineSeries.color = forSeries.color;\n                }\n\n                modifiedSeries.push(trendlineSeries);\n            }\n\n            return trendlineSeries;\n        }).filter(function (series) { return series !== null; });\n\n        return modifiedSeries;\n    };\n\n    PlotAreaBase.prototype.seriesByName = function seriesByName (name) {\n        return this.series.find(function (series) { return series.name === name; });\n    };\n\n    PlotAreaBase.prototype.getFirstPoint = function getFirstPoint () {\n        var this$1 = this;\n\n        for (var i = 0; i < this.series.length; i++) {\n            var points = this$1.pointsBySeriesIndex(i);\n            var point = points.find(visiblePoint);\n            if (point) {\n                return point;\n            }\n        }\n    };\n\n    PlotAreaBase.prototype.getPointBelow = function getPointBelow (point) {\n        return this._getNextPoint(point, this._pointsByVertical, 1);\n    };\n\n    PlotAreaBase.prototype.getPointAbove = function getPointAbove (point) {\n        return this._getNextPoint(point, this._pointsByVertical, -1);\n    };\n\n    PlotAreaBase.prototype.getPointToTheRight = function getPointToTheRight (point) {\n        return this._getNextPoint(point, this._pointsByHorizontal, 1);\n    };\n\n    PlotAreaBase.prototype.getPointToTheLeft = function getPointToTheLeft (point) {\n        return this._getNextPoint(point, this._pointsByHorizontal, -1);\n    };\n\n    PlotAreaBase.prototype._getNextPoint = function _getNextPoint (point, getPointsFunc, increment) {\n        var this$1 = this;\n\n        var points = getPointsFunc.call(this, point).filter(visiblePoint);\n        var pointIndex = points.indexOf(point);\n        var nextIndex = pointIndex + increment;\n        var loopPoints = function (direction) {\n            // loop over to last non-empty collection\n            var result;\n            var offset = 0;\n            do {\n                offset += direction;\n                result = getPointsFunc.call(this$1, point, offset).filter(visiblePoint);\n            } while (result.length === 0);\n\n            return result;\n        };\n\n        if (nextIndex < 0) {\n            points = loopPoints(-1);\n\n            return points.at(-1);\n        } else if (nextIndex >= points.length) {\n            points = loopPoints(1);\n\n            return points.at(0);\n        }\n\n        return points[nextIndex];\n    };\n\n    PlotAreaBase.prototype._pointsByVertical = function _pointsByVertical (basePoint) {\n        return this.pointsByPointIndex(basePoint.getIndex());\n    };\n\n    PlotAreaBase.prototype._pointsByHorizontal = function _pointsByHorizontal (basePoint, offset) {\n        if ( offset === void 0 ) offset = 0;\n\n        var index = cycleIndex(basePoint.series.index + offset, this.series.length);\n        return this.pointsBySeriesIndex(index);\n    };\n\n    return PlotAreaBase;\n}(ChartElement));\n\nfunction isSingleAxis(axis) {\n    return !axis.pane.axes.some(function (a) { return a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false; }\n    );\n}\n\nfunction axisGroupBox(axes) {\n    var length = axes.length;\n    var box;\n\n    for (var i = 0; i < length; i++) {\n        var axis = axes[i];\n        var visible = axis.options.visible !== false;\n        if (visible || isSingleAxis(axis)) {\n            var 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 (var i = 0; i < axes.length; i++) {\n        var 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\nvar allPaneAxes = function (panes) { return panes.reduce(function (acc, pane) { return 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\nvar 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\nvar SeriesAggregator = (function (Class) {\n    function SeriesAggregator(series, binder, defaultAggregates) {\n        Class.call(this);\n\n        var canonicalFields = binder.canonicalFields(series);\n        var valueFields = binder.valueFields(series);\n        var sourceFields = binder.sourceFields(series, canonicalFields);\n        var seriesFields = this._seriesFields = [];\n        var defaults = defaultAggregates.query(series.type);\n        var rootAggregate = series.aggregate || defaults;\n\n        this._series = series;\n        this._binder = binder;\n\n        for (var i = 0; i < canonicalFields.length; i++) {\n            var field = canonicalFields[i];\n            var fieldAggregate = (void 0);\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    if ( Class ) SeriesAggregator.__proto__ = Class;\n    SeriesAggregator.prototype = Object.create( Class && Class.prototype );\n    SeriesAggregator.prototype.constructor = SeriesAggregator;\n\n    SeriesAggregator.prototype.aggregatePoints = function aggregatePoints (srcPoints, group) {\n        var this$1 = this;\n\n        var ref = this;\n        var series = ref._series;\n        var seriesFields = ref._seriesFields;\n        var data = this._bindPoints(srcPoints || []);\n        var firstDataItem = data.dataItems[0];\n        var result = {};\n\n        if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n            var fn = function() {};\n            fn.prototype = firstDataItem;\n            result = new fn();\n        }\n\n        for (var i = 0; i < seriesFields.length; i++) {\n            var field = seriesFields[i];\n            var srcValues = this$1._bindField(data.values, field.canonicalName);\n            var 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    SeriesAggregator.prototype._bindPoints = function _bindPoints (points) {\n        var ref = this;\n        var binder = ref._binder;\n        var series = ref._series;\n        var values = [];\n        var dataItems = [];\n\n        for (var i = 0; i < points.length; i++) {\n            var 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    SeriesAggregator.prototype._bindField = function _bindField (data, field) {\n        var values = [];\n        var count = data.length;\n\n        for (var i = 0; i < count; i++) {\n            var item = data[i];\n            var valueFields = item.valueFields;\n            var value = (void 0);\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    return SeriesAggregator;\n}(Class));\n\nfunction setValue(fieldName, target, value) {\n    var parentObj = target;\n    var field = fieldName;\n\n    if (fieldName.indexOf(\".\") > -1) {\n        var 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\nvar DefaultAggregates = (function (Class) {\n    function DefaultAggregates() {\n        Class.call(this);\n\n        this._defaults = {};\n    }\n\n    if ( Class ) DefaultAggregates.__proto__ = Class;\n    DefaultAggregates.prototype = Object.create( Class && Class.prototype );\n    DefaultAggregates.prototype.constructor = DefaultAggregates;\n\n    DefaultAggregates.prototype.register = function register (seriesTypes, aggregates) {\n        var this$1 = this;\n\n        for (var i = 0; i < seriesTypes.length; i++) {\n            this$1._defaults[seriesTypes[i]] = aggregates;\n        }\n    };\n\n    DefaultAggregates.prototype.query = function query (seriesType) {\n        return this._defaults[seriesType];\n    };\n\n    return DefaultAggregates;\n}(Class));\n\nDefaultAggregates.current = new DefaultAggregates();\n\nexport default DefaultAggregates;","import Bar from '../bar-chart/bar';\n\nimport { deepExtend } from '../../common';\n\nvar RangeBar = (function (Bar) {\n    function RangeBar () {\n        Bar.apply(this, arguments);\n    }\n\n    if ( Bar ) RangeBar.__proto__ = Bar;\n    RangeBar.prototype = Object.create( Bar && Bar.prototype );\n    RangeBar.prototype.constructor = RangeBar;\n\n    RangeBar.prototype.createLabel = function createLabel () {\n        var labels = this.options.labels;\n        var fromOptions = deepExtend({}, labels, labels.from);\n        var toOptions = deepExtend({}, labels, labels.to);\n\n        if (fromOptions.visible) {\n            this.labelFrom = this.createLabelElement(fromOptions);\n            this.append(this.labelFrom);\n        }\n\n        if (toOptions.visible) {\n            this.labelTo = this.createLabelElement(toOptions);\n            this.append(this.labelTo);\n        }\n    };\n\n    RangeBar.prototype.reflow = function reflow (targetBox) {\n        this.render();\n\n        var ref = this;\n        var labelFrom = ref.labelFrom;\n        var labelTo = ref.labelTo;\n        var value = ref.value;\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    return RangeBar;\n}(Bar));\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\nvar RangeBarChart = (function (BarChart) {\n    function RangeBarChart () {\n        BarChart.apply(this, arguments);\n    }\n\n    if ( BarChart ) RangeBarChart.__proto__ = BarChart;\n    RangeBarChart.prototype = Object.create( BarChart && BarChart.prototype );\n    RangeBarChart.prototype.constructor = RangeBarChart;\n\n    RangeBarChart.prototype.pointType = function pointType () {\n        return RangeBar;\n    };\n\n    RangeBarChart.prototype.pointValue = function pointValue (data) {\n        return data.valueFields;\n    };\n\n    RangeBarChart.prototype.formatPointValue = function 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    RangeBarChart.prototype.plotRange = function plotRange (point) {\n        if (!point) {\n            return 0;\n        }\n\n        return [ point.value.from, point.value.to ];\n    };\n\n    RangeBarChart.prototype.updateRange = function updateRange (value, fields) {\n        var axisName = fields.series.axis;\n        var from = value.from;\n        var to = value.to;\n        var 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    RangeBarChart.prototype.aboveAxis = function aboveAxis (point) {\n        var value = point.value;\n        return value.from < value.to;\n    };\n\n    return RangeBarChart;\n}(BarChart));\n\nRangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n\nexport default RangeBarChart;","import LinePoint from '../line-chart/line-point';\n\nvar RangeLinePoint = (function (LinePoint) {\n    function RangeLinePoint () {\n        LinePoint.apply(this, arguments);\n    }\n\n    if ( LinePoint ) RangeLinePoint.__proto__ = LinePoint;\n    RangeLinePoint.prototype = Object.create( LinePoint && LinePoint.prototype );\n    RangeLinePoint.prototype.constructor = RangeLinePoint;\n\n    RangeLinePoint.prototype.aliasFor = function aliasFor () {\n        return this.parent;\n    };\n\n    return RangeLinePoint;\n}(LinePoint));\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, CHART_POINT_ROLE, CHART_POINT_CLASSNAME, CHART_POINT_ROLE_DESCRIPTION } from '../constants';\nimport { WHITE, CIRCLE, HIGHLIGHT_ZINDEX, LEFT, RIGHT, BOTTOM, CENTER } from '../../common/constants';\nimport { deepExtend, valueOrDefault, getSpacing } from '../../common';\nimport guid from '../../core/utils/guid';\n\nvar AUTO = 'auto';\nvar DEFAULT_FROM_FORMAT = '{0}';\nvar DEFAULT_TO_FORMAT = '{1}';\n\nvar RangeAreaPoint = (function (ChartElement) {\n    function RangeAreaPoint(value, options) {\n        ChartElement.call(this);\n\n        this.value = value;\n        this.options = options;\n        this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n        this.tooltipTracking = true;\n        this._id = guid();\n        this.initLabelsFormat();\n    }\n\n    if ( ChartElement ) RangeAreaPoint.__proto__ = ChartElement;\n    RangeAreaPoint.prototype = Object.create( ChartElement && ChartElement.prototype );\n    RangeAreaPoint.prototype.constructor = RangeAreaPoint;\n\n    RangeAreaPoint.prototype.render = function render () {\n        if (this._rendered) {\n            return;\n        }\n\n        this._rendered = true;\n\n        var ref = this.options;\n        var markers = ref.markers;\n        var labels = ref.labels;\n        var value = this.value;\n\n        var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n            labels: labels.from,\n            markers: markers.from\n        }));\n\n        var 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    RangeAreaPoint.prototype.reflow = function reflow (targetBox) {\n        this.render();\n\n        var fromBox = targetBox.from;\n        var toBox = targetBox.to;\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    RangeAreaPoint.prototype.createHighlight = function createHighlight () {\n        var group = new draw.Group();\n        group.append(this.fromPoint.createHighlight());\n        group.append(this.toPoint.createHighlight());\n\n        return group;\n    };\n\n    RangeAreaPoint.prototype.highlightVisual = function highlightVisual () {\n        return this.visual;\n    };\n\n    RangeAreaPoint.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        return {\n            options: this.options,\n            from: this.fromPoint.highlightVisualArgs(),\n            to: this.toPoint.highlightVisualArgs()\n        };\n    };\n\n    RangeAreaPoint.prototype.createFocusHighlight = function createFocusHighlight () {\n        var group = new draw.Group();\n        group.append(this.fromPoint.createFocusHighlight());\n        group.append(this.toPoint.createFocusHighlight());\n\n        return group;\n    };\n\n    RangeAreaPoint.prototype.tooltipAnchor = function tooltipAnchor () {\n        var clipBox = this.owner.pane.clipBox();\n        var showTooltip = !clipBox || clipBox.overlaps(this.box);\n\n        if (showTooltip) {\n            var box = this.box;\n            var center = box.center();\n            var horizontalAlign = LEFT;\n            var 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    RangeAreaPoint.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    RangeAreaPoint.prototype.overlapsBox = function overlapsBox (box) {\n        return this.box.overlaps(box);\n    };\n\n    RangeAreaPoint.prototype.unclipElements = function unclipElements () {\n        this.fromPoint.unclipElements();\n        this.toPoint.unclipElements();\n    };\n\n    RangeAreaPoint.prototype.initLabelsFormat = function initLabelsFormat () {\n        var 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    RangeAreaPoint.prototype.positionLabels = function positionLabels (fromBox, toBox) {\n        var ref = this.options;\n        var labels = ref.labels;\n        var vertical = ref.vertical;\n\n        if (labels.position === AUTO) {\n            var 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    RangeAreaPoint.prototype.copyFields = function 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    RangeAreaPoint.prototype.focusVisual = function focusVisual () {\n        this.fromPoint.focusVisual();\n    };\n\n    RangeAreaPoint.prototype.clearFocusFromVisual = function clearFocusFromVisual () {\n        this.toPoint.clearFocusFromVisual();\n    };\n\n    RangeAreaPoint.prototype.getIndex = function getIndex () {\n        return this.categoryIx;\n    };\n\n    return RangeAreaPoint;\n}(ChartElement));\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    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n};\n\nexport default RangeAreaPoint;\n","import { drawing as draw } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nvar RangeAreaSegment = (function (AreaSegment) {\n    function RangeAreaSegment () {\n        AreaSegment.apply(this, arguments);\n    }\n\n    if ( AreaSegment ) RangeAreaSegment.__proto__ = AreaSegment;\n    RangeAreaSegment.prototype = Object.create( AreaSegment && AreaSegment.prototype );\n    RangeAreaSegment.prototype.constructor = RangeAreaSegment;\n\n    RangeAreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n    };\n\n    RangeAreaSegment.prototype.stackSegments = function stackSegments () {\n        var 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    RangeAreaSegment.prototype.createStroke = function createStroke (style) {\n        var toPath = new draw.Path(style);\n        var 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    RangeAreaSegment.prototype.hasStackSegment = function hasStackSegment () {\n        return true;\n    };\n\n    RangeAreaSegment.prototype.fromPoints = function fromPoints () {\n        return this.linePoints.map(function (point) { return point.fromPoint; });\n    };\n\n    RangeAreaSegment.prototype.toPoints = function toPoints () {\n        return this.linePoints.map(function (point) { return point.toPoint; });\n    };\n\n    return RangeAreaSegment;\n}(AreaSegment));\n\nexport default RangeAreaSegment;","import { CurveProcessor } from '../../core';\n\nimport RangeAreaSegment from './range-area-segment';\n\nvar SplineRangeAreaSegment = (function (RangeAreaSegment) {\n    function SplineRangeAreaSegment () {\n        RangeAreaSegment.apply(this, arguments);\n    }\n\n    if ( RangeAreaSegment ) SplineRangeAreaSegment.__proto__ = RangeAreaSegment;\n    SplineRangeAreaSegment.prototype = Object.create( RangeAreaSegment && RangeAreaSegment.prototype );\n    SplineRangeAreaSegment.prototype.constructor = SplineRangeAreaSegment;\n\n    SplineRangeAreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        return this.createCurveSegments(this.toPoints());\n    };\n\n    SplineRangeAreaSegment.prototype.stackSegments = function stackSegments () {\n        var fromSegments = this.fromSegments;\n        if (!this.fromSegments) {\n            fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n        }\n\n        return fromSegments;\n    };\n\n    SplineRangeAreaSegment.prototype.createCurveSegments = function createCurveSegments (points) {\n        var curveProcessor = new CurveProcessor();\n\n        return curveProcessor.process(this.toGeometryPoints(points));\n    };\n\n    return SplineRangeAreaSegment;\n}(RangeAreaSegment));\n\nexport default SplineRangeAreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport RangeAreaSegment from './range-area-segment';\nimport { deepExtend } from '../../common';\n\nvar StepRangeAreaSegment = (function (RangeAreaSegment) {\n    function StepRangeAreaSegment () {\n        RangeAreaSegment.apply(this, arguments);\n    }\n\n    if ( RangeAreaSegment ) StepRangeAreaSegment.__proto__ = RangeAreaSegment;\n    StepRangeAreaSegment.prototype = Object.create( RangeAreaSegment && RangeAreaSegment.prototype );\n    StepRangeAreaSegment.prototype.constructor = StepRangeAreaSegment;\n\n    StepRangeAreaSegment.prototype.createStrokeSegments = function createStrokeSegments () {\n        return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n    };\n\n    StepRangeAreaSegment.prototype.stackSegments = function stackSegments () {\n        var 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    return StepRangeAreaSegment;\n}(RangeAreaSegment));\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\nvar RangeAreaChart = (function (CategoricalChart) {\n    function RangeAreaChart () {\n        CategoricalChart.apply(this, arguments);\n    }\n\n    if ( CategoricalChart ) RangeAreaChart.__proto__ = CategoricalChart;\n    RangeAreaChart.prototype = Object.create( CategoricalChart && CategoricalChart.prototype );\n    RangeAreaChart.prototype.constructor = RangeAreaChart;\n\n    RangeAreaChart.prototype.render = function render () {\n        CategoricalChart.prototype.render.call(this);\n\n        this.renderSegments();\n    };\n\n    RangeAreaChart.prototype.pointType = function pointType () {\n        return RangeAreaPoint;\n    };\n\n    RangeAreaChart.prototype.createPoint = function createPoint (data, fields) {\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var 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        var pointOptions = this.pointOptions(series, seriesIx);\n        pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n        var color = data.fields.color || series.color;\n        if (isFunction(series.color)) {\n            color = pointOptions.color;\n        }\n\n        var point = new RangeAreaPoint(value, pointOptions);\n        point.color = color;\n\n        this.append(point);\n\n        return point;\n    };\n\n    RangeAreaChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx) {\n        var style = (currentSeries.line || {}).style;\n        var 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    RangeAreaChart.prototype.plotRange = function plotRange (point, startValue) {\n        if (!point) {\n            return [ startValue, startValue ];\n        }\n\n        return [ point.value.from, point.value.to ];\n    };\n\n    RangeAreaChart.prototype.valueSlot = function valueSlot (valueAxis, plotRange) {\n        var fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n        var 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    RangeAreaChart.prototype.pointSlot = function pointSlot (categorySlot, valueSlot) {\n        var from = valueSlot.from;\n        var to = valueSlot.to;\n        var 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    RangeAreaChart.prototype.addValue = function addValue (data, fields) {\n        var 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        CategoricalChart.prototype.addValue.call(this, data, fields);\n    };\n\n    RangeAreaChart.prototype.updateRange = function updateRange (value, fields) {\n        if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n            var axisName = fields.series.axis;\n            var axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n            var from = value.from;\n            var to = value.to;\n\n            axisRange.min = Math.min(axisRange.min, from, to);\n            axisRange.max = Math.max(axisRange.max, from, to);\n        }\n    };\n\n    RangeAreaChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var value = point.value;\n\n        return this.chartService.format.auto(format, value.from, value.to);\n    };\n\n    RangeAreaChart.prototype.animationPoints = function animationPoints () {\n        var points = this.points;\n        var result = [];\n        for (var idx = 0; idx < points.length; idx++) {\n            var 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    return RangeAreaChart;\n}(CategoricalChart));\n\ndeepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n\nexport default RangeAreaChart;\n","import Candlestick from '../candlestick-chart/candlestick';\n\nvar OHLCPoint = (function (Candlestick) {\n    function OHLCPoint () {\n        Candlestick.apply(this, arguments);\n    }\n\n    if ( Candlestick ) OHLCPoint.__proto__ = Candlestick;\n    OHLCPoint.prototype = Object.create( Candlestick && Candlestick.prototype );\n    OHLCPoint.prototype.constructor = OHLCPoint;\n\n    OHLCPoint.prototype.reflow = function reflow (box) {\n        var ref = this;\n        var options = ref.options;\n        var value = ref.value;\n        var chart = ref.owner;\n        var valueAxis = chart.seriesValueAxis(options);\n        var oPoints = [];\n        var cPoints = [];\n        var lhPoints = [];\n\n        var lhSlot = valueAxis.getSlot(value.low, value.high);\n        var oSlot = valueAxis.getSlot(value.open, value.open);\n        var 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        var 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    OHLCPoint.prototype.createBody = function createBody () {};\n\n    return OHLCPoint;\n}(Candlestick));\n\nexport default OHLCPoint;","import CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport OHLCPoint from './ohlc-point';\n\nvar OHLCChart = (function (CandlestickChart) {\n    function OHLCChart () {\n        CandlestickChart.apply(this, arguments);\n    }\n\n    if ( CandlestickChart ) OHLCChart.__proto__ = CandlestickChart;\n    OHLCChart.prototype = Object.create( CandlestickChart && CandlestickChart.prototype );\n    OHLCChart.prototype.constructor = OHLCChart;\n\n    OHLCChart.prototype.pointType = function pointType () {\n        return OHLCPoint;\n    };\n\n    return OHLCChart;\n}(CandlestickChart));\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\nvar WaterfallSegment = (function (ChartElement) {\n    function WaterfallSegment(from, to, series) {\n        ChartElement.call(this);\n\n        this.from = from;\n        this.to = to;\n        this.series = series;\n    }\n\n    if ( ChartElement ) WaterfallSegment.__proto__ = ChartElement;\n    WaterfallSegment.prototype = Object.create( ChartElement && ChartElement.prototype );\n    WaterfallSegment.prototype.constructor = WaterfallSegment;\n\n    WaterfallSegment.prototype.linePoints = function linePoints () {\n        var from = this.from;\n        var ref = this;\n        var fromBox = ref.from.box;\n        var toBox = ref.to.box;\n        var points = [];\n\n        if (from.isVertical) {\n            var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n            points.push(\n                [ fromBox.x1, y ],\n                [ toBox.x2, y ]\n            );\n        } else {\n            var 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    WaterfallSegment.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        var line = this.series.line || {};\n\n        var 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    return WaterfallSegment;\n}(ChartElement));\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\nvar WaterfallChart = (function (BarChart) {\n    function WaterfallChart () {\n        BarChart.apply(this, arguments);\n    }\n\n    if ( BarChart ) WaterfallChart.__proto__ = BarChart;\n    WaterfallChart.prototype = Object.create( BarChart && BarChart.prototype );\n    WaterfallChart.prototype.constructor = WaterfallChart;\n\n    WaterfallChart.prototype.render = function render () {\n        BarChart.prototype.render.call(this);\n        this.createSegments();\n    };\n\n    WaterfallChart.prototype.traverseDataPoints = function traverseDataPoints (callback) {\n        var this$1 = this;\n\n        var series = this.options.series;\n        var totalCategories = categoriesCount(series);\n        var isVertical = !this.options.invertAxes;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var total = 0;\n            var runningTotal = 0;\n\n            for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n                var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n                var value = data.valueFields.value;\n                var summary = data.fields.summary;\n                var from = total;\n                var to = (void 0);\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$1.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    WaterfallChart.prototype.updateRange = function updateRange (value, fields) {\n        BarChart.prototype.updateRange.call(this, { value: fields.to }, fields);\n    };\n\n    WaterfallChart.prototype.aboveAxis = function aboveAxis (point) {\n        return point.value >= 0;\n    };\n\n    WaterfallChart.prototype.plotRange = function plotRange (point) {\n        return [ point.from, point.to ];\n    };\n\n    WaterfallChart.prototype.createSegments = function createSegments () {\n        var this$1 = this;\n\n        var series = this.options.series;\n        var seriesPoints = this.seriesPoints;\n        var segments = this.segments = [];\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var points = seriesPoints[seriesIx];\n\n            if (points) {\n                var prevPoint = (void 0);\n                for (var pointIx = 0; pointIx < points.length; pointIx++) {\n                    var point = points[pointIx];\n\n                    if (point && prevPoint) {\n                        var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n                        segments.push(segment);\n                        this$1.append(segment);\n                    }\n\n                    prevPoint = point;\n                }\n            }\n        }\n    };\n\n    return WaterfallChart;\n}(BarChart));\n\nexport default WaterfallChart;","function trendlineFactory(registry, type, context) {\n    var impl = registry[String(type)];\n    if (impl) {\n        return impl(context);\n    }\n\n    return null;\n}\n\nexport default trendlineFactory;\n","// Optimized version of calculatePolynomial for order = 1\nfunction calculateSlope(sourceValues, valueGetter) {\n    var x = 0;\n    var y = 0;\n    var x2 = 0;\n    var xy = 0;\n    var count = 0;\n    var slope, intercept;\n    var xMin = Number.MAX_VALUE;\n    var xMax = Number.MIN_VALUE;\n\n    for (var i = 0; i < sourceValues.length; i++) {\n        var value = sourceValues[i];\n        var ref = valueGetter(value);\n        var xValue = ref.xValue;\n        var yValue = ref.yValue;\n\n        if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n            xMin = Math.min(xValue, xMin);\n            xMax = Math.max(xValue, xMax);\n\n            count++;\n            x += xValue;\n            y += yValue;\n            x2 += Math.pow(xValue, 2);\n            xy += xValue * yValue;\n        }\n    }\n\n    if (count > 0) {\n        slope = (count * xy - x * y) / (count * x2 - Math.pow(x, 2));\n        intercept = (y - slope * x) / count;\n    }\n\n    return { slope: slope, intercept: intercept, count: count, xMin: xMin, xMax: xMax };\n}\n\nexport default calculateSlope;\n","import { hasValue } from '../utils';\n\nvar checkAllPositive = function (sourceValues, fieldName) { return sourceValues.every(function (ref) {\n        var valueFields = ref.valueFields;\n\n        return !hasValue(valueFields[fieldName]) || valueFields[fieldName] > 0;\n        }); };\n\nexport default checkAllPositive;\n","function getTrendlineData(valueMapper, categoryAxis) {\n    var data = [];\n    var totalRange = categoryAxis.totalRangeIndices();\n    var currentRange = categoryAxis.currentRangeIndices();\n    var range = {\n        min: Math.floor(Math.max(currentRange.min - 1, totalRange.min)),\n        max: Math.ceil(Math.min(currentRange.max + 2, totalRange.max))\n    };\n\n    for (var i = range.min; i < range.max; i++) {\n        var x = (i + 1);\n        data[i] = {\n            category: categoryAxis.categoryAt(i, true),\n            value: valueMapper(x)\n        };\n    }\n\n    return data;\n}\n\nexport default getTrendlineData;\n","import calculateSlope from './calculate-slope';\nimport checkAllPositive from './check-all-positive';\nimport getTrendlineData from './get-trendline-data';\n\nfunction exponentialTrendline(context) {\n    var options = context.options;\n    var categoryAxis = context.categoryAxis;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: categoryIx + 1, yValue: Math.log(valueFields[fieldName]) });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var categoryAxis = ref.categoryAxis;\n    var options = ref.options;\n\n    var sourceValues = seriesValues();\n    if (!checkAllPositive(sourceValues, options.field)) {\n        return null;\n    }\n\n    var ref$1 = calculateSlope(sourceValues, valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    if (count > 0) {\n        // Exponential trendline equation:\n        // y = a * e ^ (b * x)\n        var a = Math.exp(intercept);\n        var b = slope;\n\n        return getTrendlineData(function (x) { return a * Math.exp(b * x); }, categoryAxis);\n    }\n\n    return null;\n}\n\nexport default exponentialTrendline;\n","import calculateSlope from './calculate-slope';\nimport getTrendlineData from './get-trendline-data';\n\nfunction linearTrendline(context) {\n    var options = context.options;\n    var categoryAxis = context.categoryAxis;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var categoryAxis = ref.categoryAxis;\n    var options = ref.options;\n\n    var ref$1 = calculateSlope(seriesValues(), valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n\n    if (count > 0) {\n        return getTrendlineData(function (x) { return slope * x + intercept; }, categoryAxis);\n    }\n\n    return null;\n}\n\nexport default linearTrendline;\n","import calculateSlope from './calculate-slope';\nimport getTrendlineData from './get-trendline-data';\n\nfunction logarithmicTrendline(context) {\n    var options = context.options;\n    var categoryAxis = context.categoryAxis;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: Math.log(categoryIx + 1), yValue: valueFields[fieldName] });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var categoryAxis = ref.categoryAxis;\n    var options = ref.options;\n\n    var ref$1 = calculateSlope(seriesValues(), valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    if (count > 0) {\n        // Logarithmic trendline equation:\n        // y = a * ln (x) + b\n        var a = slope;\n        var b = intercept;\n        return getTrendlineData(function (x) { return a * Math.log(x) + b; }, categoryAxis);\n    }\n\n    return null;\n}\n\nexport default logarithmicTrendline;\n","import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\n\nfunction calculateMovingAverage(sourceValues, valueGetter, period) {\n    var averagePoints = [];\n    var values = [];\n    var start = Math.max(MIN_MOVING_AVERAGE_PERIOD, period) - 1;\n\n    var end = 0;\n    var sum = 0;\n\n    for (var i = 0; i < sourceValues.length; i++) {\n        var value = sourceValues[i];\n        var ref = valueGetter(value);\n        var xValue = ref.xValue;\n        var yValue = ref.yValue;\n\n        if (isFinite(yValue) && yValue !== null) {\n            values.push(yValue);\n            sum += yValue;\n            end = Math.max(i, end);\n        } else {\n            values.push(null);\n        }\n\n        if (i >= start) {\n            var count = values.filter(function (value) { return value !== null; }).length;\n            var lastValue = values.shift() || 0;\n\n            if (count > 0) {\n                var average = sum / count;\n                averagePoints.push([xValue, average]);\n\n                sum -= lastValue;\n                continue;\n            }\n        }\n\n        averagePoints.push([xValue, null]);\n    }\n\n    return averagePoints.slice(0, end + 1);\n}\n\nexport default calculateMovingAverage;\n","import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\nimport calculateMovingAverage from './calculate-moving-average';\n\nfunction movingAverageTrendline(context) {\n    var options = context.options;\n\n    var data = getData(context);\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: categoryIx, yValue: valueFields[fieldName] });\n; }    };\n\nfunction calculatePoints(ref) {\n    var options = ref.options;\n    var categoryAxis = ref.categoryAxis;\n    var seriesValues = ref.seriesValues;\n\n    var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n    var totalRange = categoryAxis.totalRangeIndices();\n    var currentRange = categoryAxis.currentRangeIndices();\n    var range = {\n        min: Math.floor(Math.max(currentRange.min - period, totalRange.min)),\n        max: Math.ceil(Math.min(currentRange.max + period + 2, totalRange.max))\n    };\n\n    return calculateMovingAverage(seriesValues(range), valueGetter(options.field), period);\n}\n\nfunction getData(context) {\n    var categoryAxis = context.categoryAxis;\n    var points = calculatePoints(context);\n    var data = [];\n    points.forEach(function (ref) {\n        var categoryIx = ref[0];\n        var value = ref[1];\n\n        data[categoryIx] = {\n            category: categoryAxis.categoryAt(categoryIx, true),\n            value: value\n        };\n    });\n\n    if (data.length > 0) {\n        return data;\n    }\n\n    return null;\n}\n\nexport default movingAverageTrendline;\n","import { Matrix } from '../../common';\n\nvar MIN_ORDER = 1;\nvar MAX_ORDER = 6;\n\nfunction calculatePolynomial(sourceValues, valueGetter, order) {\n    var k = Math.min(Math.max(order || MIN_ORDER, MIN_ORDER), MAX_ORDER) + 1;\n    var X = new Matrix();\n    var Y = new Matrix();\n    var count = 0;\n    var xMin = Number.MAX_VALUE;\n    var xMax = Number.MIN_VALUE;\n    var valueMapper = function (x) { return x; };\n    var coefficients = [];\n\n    for (var i = 0; i < sourceValues.length; i++) {\n        var value = sourceValues[i];\n        var ref = valueGetter(value);\n        var xValue = ref.xValue;\n        var yValue = ref.yValue;\n\n        if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n            xMin = Math.min(xValue, xMin);\n            xMax = Math.max(xValue, xMax);\n            count++;\n\n            // Set Y value in matrix\n            Y.set(i, 0, yValue);\n\n            // Set indicator column to 1 for valid values\n            X.set(i, 0, 1);\n            X.set(i, 1, xValue);\n            for (var pow = 2; pow <= k; pow++) {\n                X.set(i, pow, Math.pow(X.get(i, 1), pow));\n            }\n        } else {\n            // Set indicator column to 0 for missing values\n            X.set(i, 0, 0);\n        }\n    }\n\n    // Limit order to number of values.\n    X.width = Math.min(k, count);\n\n    if (count > 0) {\n        // Polynomial trendline equation:\n        // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n        coefficients = linearRegression(X, Y);\n        valueMapper = function (x) { return coefficients.reduce(function (y, a, n) { return y + a * Math.pow(x, n); }, 0); };\n    }\n\n    return {\n        coefficients: coefficients,\n        count: count,\n        valueMapper: valueMapper,\n        xMin: xMin,\n        xMax: xMax\n    };\n}\n\nfunction linearRegression(X, Y) {\n    var Xt = X.transpose();\n    var B = Xt.multiply(X).inverse().multiply(Xt).multiply(Y); // the last square estimate of the coefficients\n\n    var coefficients = [];\n    for (var i = 0; i < B.height; i++) {\n        coefficients.push(B.get(i, 0));\n    }\n\n    // y_intercept and regression coefficients ('slopes')\n    return coefficients;\n\n    // It's possible to calculate statistics for the regression based on\n    // the LINEST function implementation in kendo-spreadsheet-common/src/calc.js\n    //\n    // * The standard errors (of coefficients and y-intercept)\n    // * The coefficient of determination (R^2)\n    // * The standard error for the y estimate\n    // * The F statistic\n    // * The degrees of freedom\n    // * The regression sum of squares (SSR)\n    // * The residual sum of squares (SSE)\n}\n\nexport default calculatePolynomial;\n","import getTrendlineData from './get-trendline-data';\nimport calculatePolynomial from './calculate-polynomial';\n\nfunction polynomialTrendline(context) {\n    var options = context.options;\n    var categoryAxis = context.categoryAxis;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var categoryAxis = ref.categoryAxis;\n    var options = ref.options;\n\n    var order = (options.trendline || {}).order;\n    var ref$1 = calculatePolynomial(seriesValues(), valueGetter(options.field), order);\n    var count = ref$1.count;\n    var valueMapper = ref$1.valueMapper;\n\n    if (count > 0) {\n        // Polynomial trendline equation:\n        // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n\n        return getTrendlineData(function (x) { return valueMapper(x); }, categoryAxis);\n    }\n\n    return null;\n}\n\nexport default polynomialTrendline;\n","import calculateSlope from './calculate-slope';\nimport checkAllPositive from './check-all-positive';\nimport getTrendlineData from './get-trendline-data';\n\nfunction powerTrendline(context) {\n    var options = context.options;\n    var categoryAxis = context.categoryAxis;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'line',\n            data: data,\n            categoryField: 'category',\n            field: 'value'});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var categoryIx = ref.categoryIx;\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: Math.log(categoryIx + 1), yValue: Math.log(valueFields[fieldName]) });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var categoryAxis = ref.categoryAxis;\n    var options = ref.options;\n\n    var sourceValues = seriesValues();\n    if (!checkAllPositive(sourceValues, options.field)) {\n        return null;\n    }\n\n    var ref$1 = calculateSlope(sourceValues, valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    if (count > 0) {\n        // Power trendline equation:\n        // y = a * x ^ b\n        var a = Math.exp(intercept);\n        var b = slope;\n\n        return getTrendlineData(function (x) { return a * Math.pow(x, b); }, categoryAxis);\n    }\n\n    return null;\n}\n\nexport default powerTrendline;\n","import {\n    TRENDLINE_EXPONENTIAL,\n    TRENDLINE_LINEAR,\n    TRENDLINE_LOGARITHMIC,\n    TRENDLINE_MOVING_AVERAGE,\n    TRENDLINE_POLYNOMIAL,\n    TRENDLINE_POWER\n} from '../constants';\nimport exponentialTrendline from './exponential-trendline';\nimport linearTrendline from './linear-trendline';\nimport logarithmicTrendline from './logarithmic-trendline';\nimport movingAverageTrendline from './moving-average';\nimport polynomialTrendline from './polynomial-trendline';\nimport powerTrendline from './power-trendline';\n\nvar registry = {};\nregistry[TRENDLINE_EXPONENTIAL] = exponentialTrendline;\nregistry[TRENDLINE_LINEAR] = linearTrendline;\nregistry[TRENDLINE_LOGARITHMIC] = logarithmicTrendline;\nregistry[TRENDLINE_MOVING_AVERAGE] = movingAverageTrendline;\nregistry[TRENDLINE_POLYNOMIAL] = polynomialTrendline;\nregistry[TRENDLINE_POWER] = powerTrendline;\n\nexport default registry;\n","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';\nimport trendlineFactory from '../trendlines/trendline-factory';\nimport trendlineRegistry from '../trendlines/trendline-registry';\n\nimport { CategoryAxis, DateCategoryAxis, NumericAxis, LogarithmicAxis, Point } from '../../core';\n\nimport { appendIfNotNull, categoriesCount, createOutOfRangePoints, equalsIgnoreCase, filterSeriesByType,\n    isDateAxis, parseDateCategory, 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, RADAR_LINE, RADAR_AREA } from '../constants';\n\nimport { DATE, MAX_VALUE } from '../../common/constants';\nimport { setDefaultOptions, inArray, deepExtend, defined, eventElement, grep, cycleIndex, hasOwnProperty } from '../../common';\n\nvar AREA_SERIES = [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA ];\nvar OUT_OF_RANGE_SERIES = [ LINE, VERTICAL_LINE ].concat(AREA_SERIES);\n\nvar CategoricalPlotArea = (function (PlotAreaBase) {\n    function CategoricalPlotArea () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) CategoricalPlotArea.__proto__ = PlotAreaBase;\n    CategoricalPlotArea.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    CategoricalPlotArea.prototype.constructor = CategoricalPlotArea;\n\n    CategoricalPlotArea.prototype.initFields = function initFields (series) {\n        var this$1 = this;\n\n        this.namedCategoryAxes = {};\n        this.namedValueAxes = {};\n        this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n        this._seriesPointsCache = {};\n        this._currentPointsCache = {};\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 (var i = 0; i < series.length; i++) {\n                var stack = series[i].stack;\n                if (stack && stack.type === \"100%\") {\n                    this$1.stack100 = true;\n                    break;\n                }\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.render = function render (panes) {\n        if ( panes === void 0 ) panes = this.panes;\n\n        this.series = [].concat( this.originalSeries );\n        this.createCategoryAxes(panes);\n\n        this.aggregateCategories(panes);\n        this.createTrendlineSeries(panes);\n\n        this.createCategoryAxesLabels(panes);\n        this.createCharts(panes);\n        this.createValueAxes(panes);\n    };\n\n    CategoricalPlotArea.prototype.removeAxis = function removeAxis (axis) {\n        var axisName = axis.options.name;\n\n        PlotAreaBase.prototype.removeAxis.call(this, 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    CategoricalPlotArea.prototype.trendlineFactory = function trendlineFactory$1 (options, series) {\n        var categoryAxis = this.seriesCategoryAxis(options);\n        var seriesValues = this.seriesValues.bind(this, series.index);\n\n        var trendline = trendlineFactory(trendlineRegistry, options.type, {\n            options: options,\n            categoryAxis: categoryAxis,\n            seriesValues: seriesValues\n        });\n\n        if (trendline) {\n            // Inherit settings\n            trendline.categoryAxis = series.categoryAxis;\n            trendline.valueAxis = series.valueAxis;\n\n            return this.filterSeries(trendline, categoryAxis);\n        }\n\n        return trendline;\n    };\n\n    CategoricalPlotArea.prototype.trendlineAggregateForecast = function trendlineAggregateForecast () {\n        return this.series\n            .map(function (series) { return (series.trendline || {}).forecast; })\n            .filter(function (forecast) { return forecast !== undefined; })\n            .reduce(function (result, forecast) { return ({\n                before: Math.max(result.before, forecast.before || 0),\n                after: Math.max(result.after, forecast.after || 0)\n            }); }, { before: 0, after: 0 });\n    };\n\n    CategoricalPlotArea.prototype.seriesValues = function seriesValues (seriesIx, range) {\n        var this$1 = this;\n\n        var result = [];\n\n        var series = this.srcSeries[seriesIx];\n        var categoryAxis = this.seriesCategoryAxis(series);\n        var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n        if (dateAxis) {\n            this._seriesPointsCache = {};\n            this._currentPointsCache = {};\n            categoryAxis.options.dataItems = [];\n            series = this.aggregateSeries(series, categoryAxis, categoryAxis.totalRangeIndices());\n        }\n\n        var min = range ? range.min : 0;\n        var max = range ? range.max : series.data.length;\n        for (var categoryIx = min; categoryIx < max; categoryIx++) {\n            var data = this$1.bindPoint(series, categoryIx);\n            result.push({ categoryIx: categoryIx, category: data.fields.category, valueFields: data.valueFields });\n        }\n\n        return result;\n    };\n\n    CategoricalPlotArea.prototype.createCharts = function createCharts (panes) {\n        var this$1 = this;\n\n        var seriesByPane = this.groupSeriesByPane();\n\n        for (var i = 0; i < panes.length; i++) {\n            var pane = panes[i];\n            var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n            this$1.addToLegend(paneSeries);\n\n            var visibleSeries = this$1.filterVisibleSeries(paneSeries);\n            if (!visibleSeries) {\n                continue;\n            }\n\n            var groups = this$1.groupSeriesByCategoryAxis(visibleSeries);\n            for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n                this$1.createChartGroup(groups[groupIx], pane);\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.createChartGroup = function 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    CategoricalPlotArea.prototype.aggregateCategories = function aggregateCategories (panes) {\n        var this$1 = this;\n\n        var series = [].concat( this.series );\n        var processedSeries = [];\n        this._currentPointsCache = {};\n        this._seriesPointsCache = this._seriesPointsCache || {};\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n\n            if (!this$1.isTrendline(currentSeries)) {\n                var categoryAxis = this$1.seriesCategoryAxis(currentSeries);\n                var axisPane = this$1.findPane(categoryAxis.options.pane);\n                var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n                if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n                    currentSeries = this$1.aggregateSeries(currentSeries, categoryAxis, categoryAxis.currentRangeIndices());\n                } else {\n                    currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n                }\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    CategoricalPlotArea.prototype.filterSeries = function filterSeries (series, categoryAxis) {\n        var dataLength = (series.data || {}).length;\n        categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n\n        if (!(defined(categoryAxis.options.min) || defined(categoryAxis.options.max))) {\n            return series;\n        }\n\n        var range = categoryAxis.currentRangeIndices();\n        var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n        var currentSeries = deepExtend({}, series);\n\n        currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n\n        if (outOfRangePoints) {\n            createOutOfRangePoints(currentSeries, range, dataLength, function (idx) { return ({\n                item: series.data[idx],\n                category: categoryAxis.categoryAt(idx, true),\n                categoryIx: idx - range.min\n            }); }, function (idx) { return defined(series.data[idx]); });\n        }\n\n        return currentSeries;\n    };\n\n    CategoricalPlotArea.prototype.clearSeriesPointsCache = function clearSeriesPointsCache () {\n        this._seriesPointsCache = {};\n    };\n\n    CategoricalPlotArea.prototype.seriesSourcePoints = function seriesSourcePoints (series, categoryAxis) {\n        var this$1 = this;\n\n        var key = (series.index) + \";\" + (categoryAxis.categoriesHash());\n        if (this._seriesPointsCache && this._seriesPointsCache[key]) {\n            this._currentPointsCache[key] = this._seriesPointsCache[key];\n            return this._seriesPointsCache[key];\n        }\n\n        var axisOptions = categoryAxis.options;\n        var srcCategories = axisOptions.srcCategories;\n        var dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n        var srcData = series.data;\n        var result = [];\n        if (!dateAxis) {\n            categoryAxis.indexCategories();\n        }\n\n        for (var idx = 0; idx < srcData.length; idx++) {\n            var category = SeriesBinder.current.bindPoint(series, idx).fields.category;\n            if (dateAxis) {\n                category = parseDateCategory(category, srcData[idx], this$1.chartService.intl);\n            }\n\n            if (!defined(category)) {\n                category = srcCategories[idx];\n            }\n\n            if (defined(category) && category !== null) {\n                var 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    CategoricalPlotArea.prototype.aggregateSeries = function aggregateSeries (series, categoryAxis, range) {\n        var srcData = series.data;\n        if (!srcData.length) {\n            return series;\n        }\n\n        var srcPoints = this.seriesSourcePoints(series, categoryAxis);\n        var result = deepExtend({}, series);\n        var aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n        var data = result.data = [];\n\n        var dataItems = categoryAxis.options.dataItems || [];\n\n        var categoryItem = function (idx) {\n            var categoryIdx = idx - range.min;\n            var point = srcPoints[idx];\n            if (!point) {\n                point = srcPoints[idx] = {};\n            }\n\n            point.categoryIx = categoryIdx;\n\n            if (!point.item) {\n                var 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 (var idx = range.min; idx <= range.max; idx++) {\n            var 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, function (idx) { return srcPoints[idx]; });\n        }\n\n        categoryAxis.options.dataItems = dataItems;\n\n        return result;\n    };\n\n    CategoricalPlotArea.prototype.appendChart = function appendChart (chart, pane) {\n        var series = chart.options.series;\n        var categoryAxis = this.seriesCategoryAxis(series[0]);\n        var categories = categoryAxis.options.categories;\n        var 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        PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n    };\n\n    // TODO: Refactor, optionally use series.pane option\n    CategoricalPlotArea.prototype.seriesPaneName = function seriesPaneName (series) {\n        var options = this.options;\n        var axisName = series.axis;\n        var axisOptions = [].concat(options.valueAxis);\n        var axis = grep(axisOptions, function(a) { return a.name === axisName; })[0];\n        var panes = options.panes || [ {} ];\n        var defaultPaneName = (panes[0] || {}).name || \"default\";\n        var paneName = (axis || {}).pane || defaultPaneName;\n\n        return paneName;\n    };\n\n    CategoricalPlotArea.prototype.seriesCategoryAxis = function seriesCategoryAxis (series) {\n        var axisName = series.categoryAxis;\n        var 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    CategoricalPlotArea.prototype.stackableChartOptions = function stackableChartOptions (series, pane) {\n        var anyStackedSeries = series.some(function (s) { return s.stack; });\n        var isStacked100 = series.some(function (s) { return s.stack && s.stack.type === \"100%\"; });\n        var clip = pane.options.clip;\n\n        return {\n            defaultStack: series[0].stack,\n            isStacked: anyStackedSeries,\n            isStacked100: isStacked100,\n            clip: clip\n        };\n    };\n\n    CategoricalPlotArea.prototype.groupSeriesByCategoryAxis = function groupSeriesByCategoryAxis (series) {\n        var categoryAxes = [];\n        var unique = {};\n        for (var idx = 0; idx < series.length; idx++) {\n            var name = series[idx].categoryAxis || \"$$default$$\";\n            if (!hasOwnProperty(unique, name)) {\n                unique[name] = true;\n                categoryAxes.push(name);\n            }\n        }\n\n        var groups = [];\n        for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n            var axis = categoryAxes[axisIx];\n            var 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    CategoricalPlotArea.prototype.createBarChart = function createBarChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var barChart = new BarChart(this, Object.assign({\n            series: series,\n            invertAxes: this.invertAxes,\n            gap: firstSeries.gap,\n            spacing: firstSeries.spacing\n        }, this.stackableChartOptions(series, pane)));\n\n        this.appendChart(barChart, pane);\n    };\n\n    CategoricalPlotArea.prototype.createRangeBarChart = function createRangeBarChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.createBulletChart = function createBulletChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.createLineChart = function createLineChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var lineChart = new LineChart(this, Object.assign({\n            invertAxes: this.invertAxes,\n            series: series\n        }, this.stackableChartOptions(series, pane)));\n\n        this.appendChart(lineChart, pane);\n    };\n\n    CategoricalPlotArea.prototype.createAreaChart = function createAreaChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var areaChart = new AreaChart(this, Object.assign({\n            invertAxes: this.invertAxes,\n            series: series\n        }, this.stackableChartOptions(series, pane)));\n\n        this.appendChart(areaChart, pane);\n    };\n\n    CategoricalPlotArea.prototype.createRangeAreaChart = function createRangeAreaChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var 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    CategoricalPlotArea.prototype.createOHLCChart = function createOHLCChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.createCandlestickChart = function createCandlestickChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.createBoxPlotChart = function createBoxPlotChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.createWaterfallChart = function createWaterfallChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var 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    CategoricalPlotArea.prototype.axisRequiresRounding = function axisRequiresRounding (categoryAxisName, categoryAxisIndex) {\n        var this$1 = this;\n\n        var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n\n        for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n            var currentSeries = this$1.series[seriesIx];\n            if (inArray(currentSeries.type, AREA_SERIES)) {\n                var line = currentSeries.line;\n                if (line && line.style === STEP) {\n                    centeredSeries.push(currentSeries);\n                }\n            }\n        }\n\n        for (var seriesIx$1 = 0; seriesIx$1 < centeredSeries.length; seriesIx$1++) {\n            var seriesAxis = centeredSeries[seriesIx$1].categoryAxis || \"\";\n            if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\n                return true;\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.aggregatedAxis = function aggregatedAxis (categoryAxisName, categoryAxisIndex) {\n        var series = this.series;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var seriesAxis = series[seriesIx].categoryAxis || \"\";\n            if ((seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) && series[seriesIx].categoryField) {\n                return true;\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.createCategoryAxesLabels = function createCategoryAxesLabels () {\n        var axes = this.axes;\n        for (var i = 0; i < axes.length; i++) {\n            if (axes[i] instanceof CategoryAxis) {\n                axes[i].createLabels();\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.createCategoryAxes = function createCategoryAxes (panes) {\n        var this$1 = this;\n\n        var invertAxes = this.invertAxes;\n        var definitions = [].concat(this.options.categoryAxis);\n        var axes = [];\n\n        for (var i = 0; i < definitions.length; i++) {\n            var axisOptions = definitions[i];\n            var axisPane = this$1.findPane(axisOptions.pane);\n\n            if (inArray(axisPane, panes)) {\n                var name = axisOptions.name;\n                var categories = axisOptions.categories; if ( categories === void 0 ) categories = [];\n                axisOptions = deepExtend({\n                    vertical: invertAxes,\n                    reverse: !invertAxes && this$1.chartService.rtl,\n                    axisCrossingValue: invertAxes ? MAX_VALUE : 0\n                }, axisOptions);\n\n                if (!defined(axisOptions.justified)) {\n                    axisOptions.justified = this$1.isJustified();\n                }\n\n                if (this$1.axisRequiresRounding(name, i)) {\n                    axisOptions.justified = false;\n                }\n\n                var categoryAxis = (void 0);\n\n                if (isDateAxis(axisOptions, categories[0])) {\n                    axisOptions._forecast = this$1.trendlineAggregateForecast();\n                    categoryAxis = new DateCategoryAxis(axisOptions, this$1.chartService);\n                } else {\n                    categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n                }\n\n                definitions[i].categories = categoryAxis.options.srcCategories;\n\n                if (name) {\n                    if (this$1.namedCategoryAxes[name]) {\n                        throw new Error((\"Category axis with name \" + name + \" is already defined\"));\n                    }\n                    this$1.namedCategoryAxes[name] = categoryAxis;\n                }\n\n                categoryAxis.axisIndex = i;\n                axes.push(categoryAxis);\n                this$1.appendAxis(categoryAxis);\n            }\n        }\n\n        var 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    CategoricalPlotArea.prototype.isJustified = function isJustified () {\n        var series = this.series;\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n            if (!inArray(currentSeries.type, AREA_SERIES)) {\n                return false;\n            }\n        }\n\n        return true;\n    };\n\n    CategoricalPlotArea.prototype.createValueAxes = function createValueAxes (panes) {\n        var this$1 = this;\n\n        var tracker = this.valueAxisRangeTracker;\n        var defaultRange = tracker.query();\n        var definitions = [].concat(this.options.valueAxis);\n        var invertAxes = this.invertAxes;\n        var baseOptions = { vertical: !invertAxes, reverse: invertAxes && this.chartService.rtl };\n        var axes = [];\n\n        if (this.stack100) {\n            baseOptions.roundToMajorUnit = false;\n            baseOptions.labels = { format: \"P0\" };\n        }\n\n        for (var i = 0; i < definitions.length; i++) {\n            var axisOptions = definitions[i];\n            var axisPane = this$1.findPane(axisOptions.pane);\n\n            if (inArray(axisPane, panes)) {\n                var name = axisOptions.name;\n                var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n                var 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                var axisType = (void 0);\n                if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n                    axisType = LogarithmicAxis;\n                } else {\n                    axisType = NumericAxis;\n                }\n\n                var valueAxis = new axisType(range.min, range.max,\n                    deepExtend({}, baseOptions, axisOptions),\n                    this$1.chartService\n                );\n\n                if (name) {\n                    if (this$1.namedValueAxes[name]) {\n                        throw new Error((\"Value axis with name \" + name + \" is already defined\"));\n                    }\n                    this$1.namedValueAxes[name] = valueAxis;\n                }\n                valueAxis.axisIndex = i;\n\n                axes.push(valueAxis);\n                this$1.appendAxis(valueAxis);\n            }\n        }\n\n        var 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    CategoricalPlotArea.prototype._dispatchEvent = function _dispatchEvent (chart, e, eventType) {\n        var coords = chart._eventCoordinates(e);\n        var point = new Point(coords.x, coords.y);\n        var pane = this.pointPane(point);\n        var categories = [];\n        var values = [];\n\n        if (!pane) {\n            return;\n        }\n\n        var allAxes = pane.axes;\n        for (var i = 0; i < allAxes.length; i++) {\n            var 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    CategoricalPlotArea.prototype.pointPane = function pointPane (point) {\n        var panes = this.panes;\n\n        for (var i = 0; i < panes.length; i++) {\n            var currentPane = panes[i];\n            if (currentPane.contentBox.containsPoint(point)) {\n                return currentPane;\n            }\n        }\n    };\n\n    CategoricalPlotArea.prototype.updateAxisOptions = function updateAxisOptions$1 (axis, options) {\n        updateAxisOptions(this.options, axis, options);\n        updateAxisOptions(this.originalOptions, axis, options);\n    };\n\n    CategoricalPlotArea.prototype._pointsByVertical = function _pointsByVertical (basePoint, offset) {\n        if ( offset === void 0 ) offset = 0;\n\n        if (this.invertAxes) {\n            return this._siblingsBySeriesIndex(basePoint.series.index, offset);\n        }\n\n        return this._siblingsByPointIndex(basePoint.getIndex());\n    };\n\n    CategoricalPlotArea.prototype._pointsByHorizontal = function _pointsByHorizontal (basePoint, offset) {\n        if ( offset === void 0 ) offset = 0;\n\n        if (this.invertAxes) {\n            return this._siblingsByPointIndex(basePoint.getIndex());\n        }\n\n        var siblings = this._siblingsBySeriesIndex(basePoint.series.index, offset);\n\n        if (this.chartService.rtl) {\n            return siblings.reverse();\n        }\n\n        return siblings;\n    };\n\n    CategoricalPlotArea.prototype._siblingsByPointIndex = function _siblingsByPointIndex (pointIndex) {\n        var this$1 = this;\n\n        var charts = this.charts;\n        var result = [];\n\n        for (var i = 0; i < charts.length; i++) {\n            var chart = charts[i];\n\n            if (chart.pane && chart.pane.options.name === \"_navigator\") {\n                continue;\n            }\n\n            var chartPoints = chart.points\n                .filter(function (point) { return point && point.visible !== false && point.getIndex() === pointIndex; }\n                );\n\n            result.push.apply(result, chartPoints.sort(this$1._getSeriesCompareFn(chartPoints[0])));\n        }\n\n        return result;\n    };\n\n    CategoricalPlotArea.prototype._siblingsBySeriesIndex = function _siblingsBySeriesIndex (seriesIndex, offset) {\n        var index = cycleIndex(seriesIndex + offset, this.series.length);\n\n        return this.pointsBySeriesIndex(index);\n    };\n\n    CategoricalPlotArea.prototype._getSeriesCompareFn = function _getSeriesCompareFn (point) {\n        var isStacked = this._isInStackedSeries(point);\n\n        if (isStacked && this.invertAxes || !isStacked && !this.invertAxes) {\n            return function (a, b) { return a.box.center().x - b.box.center().x; };\n        }\n\n        return function (a, b) { return a.box.center().y - b.box.center().y; };\n    };\n\n    CategoricalPlotArea.prototype._isInStackedSeries = function _isInStackedSeries (point) {\n        var sortableSeries = inArray(point.series.type,\n            [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA, LINE, VERTICAL_LINE, RADAR_LINE, RADAR_AREA]);\n\n        var stackableSeries = inArray(point.series.type, [ COLUMN, BAR]);\n\n        return sortableSeries || stackableSeries && point.options.isStacked;\n    };\n\n    return CategoricalPlotArea;\n}(PlotAreaBase));\n\nfunction updateAxisOptions(targetOptions, axis, options) {\n    var 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;\n","import { Class } from '../common';\n\nvar Highlight = (function (Class) {\n    function Highlight() {\n        Class.call(this);\n\n        this._points = [];\n    }\n\n    if ( Class ) Highlight.__proto__ = Class;\n    Highlight.prototype = Object.create( Class && Class.prototype );\n    Highlight.prototype.constructor = Highlight;\n\n    Highlight.prototype.destroy = function destroy () {\n        this._points = [];\n    };\n\n    Highlight.prototype.show = function show (points, opacity) {\n        var this$1 = this;\n\n        var arrayPoints = [].concat(points);\n        this.hide();\n\n        for (var i = 0; i < arrayPoints.length; i++) {\n            var point = arrayPoints[i];\n            if (point && point.toggleHighlight && point.hasHighlight()) {\n                this$1.togglePointHighlight(point, true, opacity);\n                this$1._points.push(point);\n            }\n        }\n    };\n\n    Highlight.prototype.togglePointHighlight = function togglePointHighlight (point, show, opacity) {\n        var toggleHandler = (point.options.highlight || {}).toggle;\n        if (toggleHandler) {\n            var 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    Highlight.prototype.hide = function hide () {\n        var this$1 = this;\n\n        var points = this._points;\n        while (points.length) {\n            this$1.togglePointHighlight(points.pop(), false);\n        }\n    };\n\n    Highlight.prototype.isHighlighted = function isHighlighted (element) {\n        var points = this._points;\n\n        for (var i = 0; i < points.length; i++) {\n            var point = points[i];\n            if (element === point) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n\n    return Highlight;\n}(Class));\n\nfunction preventDefault() {\n    this._defaultPrevented = true;\n}\n\nexport default Highlight;\n","export default function acceptKey(e, mouseKey) {\n    var key = (mouseKey || \"\").toLowerCase();\n    var event = e.event;\n    var accept = (key === \"none\" && !(event.ctrlKey || event.shiftKey || event.altKey)) || event[key + \"Key\"];\n\n    return accept;\n}","export default function toChartAxisRanges(axisRanges) {\n    var ranges = {};\n    for (var idx = 0; idx < axisRanges.length; idx++) {\n        var 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\nvar Pannable = (function (Class) {\n    function Pannable(plotArea, options) {\n        Class.call(this);\n\n        this.plotArea = plotArea;\n        this.options = deepExtend({}, this.options, options);\n    }\n\n    if ( Class ) Pannable.__proto__ = Class;\n    Pannable.prototype = Object.create( Class && Class.prototype );\n    Pannable.prototype.constructor = Pannable;\n\n    Pannable.prototype.start = function start (e) {\n        this._active = acceptKey(e, this.options.key);\n        return this._active;\n    };\n\n    Pannable.prototype.move = function move (e) {\n        if (this._active) {\n            var 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    Pannable.prototype.end = function end () {\n        var active = this._active;\n        this._active = false;\n\n        return active;\n    };\n\n    Pannable.prototype.pan = function pan () {\n        var ref = this;\n        var plotArea = ref.plotArea;\n        var axisRanges = ref.axisRanges;\n        if (axisRanges.length) {\n            for (var idx = 0; idx < axisRanges.length; idx++) {\n                var range = axisRanges[idx];\n                plotArea.updateAxisOptions(range.axis, range.range);\n            }\n            plotArea.redraw(plotArea.panes);\n        }\n    };\n\n    Pannable.prototype.destroy = function destroy () {\n        delete this.plotArea;\n    };\n\n    Pannable.prototype._panAxes = function _panAxes (e, position) {\n        var plotArea = this.plotArea;\n        var delta = -e[position].delta;\n        var lock = (this.options.lock || \"\").toLowerCase();\n        var updatedAxes = [];\n\n        if (delta !== 0 && (lock || \"\").toLowerCase() !== position) {\n            var axes = plotArea.axes;\n            for (var idx = 0; idx < axes.length; idx++) {\n                var axis = axes[idx];\n\n                if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n                    var 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    return Pannable;\n}(Class));\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\nvar ZoomSelection = (function (Class) {\n    function ZoomSelection(chart, options) {\n        Class.call(this);\n\n        this.chart = chart;\n        this.options = deepExtend({}, this.options, options);\n        this.createElement();\n    }\n\n    if ( Class ) ZoomSelection.__proto__ = Class;\n    ZoomSelection.prototype = Object.create( Class && Class.prototype );\n    ZoomSelection.prototype.constructor = ZoomSelection;\n\n    ZoomSelection.prototype.createElement = function createElement () {\n        var marquee = this._marquee = document.createElement(\"div\");\n        marquee.className = \"k-marquee\";\n        var marqueeColor = document.createElement(\"div\");\n        marqueeColor.className = \"k-marquee-color\";\n        marquee.appendChild(marqueeColor);\n    };\n\n    ZoomSelection.prototype.removeElement = function removeElement () {\n        if (this._marquee.parentNode) {\n            this._marquee.parentNode.removeChild(this._marquee);\n        }\n    };\n\n    ZoomSelection.prototype.setStyles = function setStyles (styles) {\n        elementStyles(this._marquee, styles);\n    };\n\n    ZoomSelection.prototype.start = function start (e) {\n        if (acceptKey(e, this.options.key)) {\n            var chart = this.chart;\n            var point = chart._eventCoordinates(e);\n            var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n            var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n\n            if (zoomPane && clipBox) {\n                var 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    ZoomSelection.prototype._elementOffset = function _elementOffset () {\n        var chartElement = this.chart.element;\n        var ref = elementStyles(chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n        var paddingLeft = ref.paddingLeft;\n        var paddingTop = ref.paddingTop;\n        var offset = elementOffset(chartElement);\n\n        return {\n            left: paddingLeft + offset.left,\n            top: paddingTop + offset.top\n        };\n    };\n\n    ZoomSelection.prototype.move = function move (e) {\n        var zoomPane = this._zoomPane;\n        if (zoomPane) {\n            this.setStyles(this._selectionPosition(e));\n        }\n    };\n\n    ZoomSelection.prototype.end = function end (e) {\n        var zoomPane = this._zoomPane;\n        if (zoomPane) {\n            var elementOffset = this._elementOffset();\n            var selectionPosition = this._selectionPosition(e);\n            selectionPosition.left -= elementOffset.left;\n            selectionPosition.top -= elementOffset.top;\n\n            var start = { x: selectionPosition.left, y: selectionPosition.top };\n            var 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    ZoomSelection.prototype.zoom = function zoom () {\n        var axisRanges = this.axisRanges;\n        if (axisRanges && axisRanges.length) {\n            var plotArea = this.chart._plotArea;\n            for (var idx = 0; idx < axisRanges.length; idx++) {\n                var axisRange = axisRanges[idx];\n                plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n            }\n            plotArea.redraw(plotArea.panes);\n        }\n    };\n\n    ZoomSelection.prototype.destroy = function destroy () {\n        this.removeElement();\n        delete this._marquee;\n        delete this.chart;\n    };\n\n    ZoomSelection.prototype._updateAxisRanges = function _updateAxisRanges (start, end) {\n        var lock = (this.options.lock || \"\").toLowerCase();\n        var axisRanges = [];\n\n        var axes = this._zoomPane.axes;\n        for (var idx = 0; idx < axes.length; idx++) {\n            var axis = axes[idx];\n            var vertical = axis.options.vertical;\n            if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n                var 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    ZoomSelection.prototype._selectionPosition = function _selectionPosition (e) {\n        var clipBox = this._zoomPaneClipBox;\n        var startLocation = {\n            x: e.x.startLocation,\n            y: e.y.startLocation\n        };\n        var pageX = e.x.location;\n        var pageY = e.y.location;\n        var lock = (this.options.lock || \"\").toLowerCase();\n        var left = Math.min(startLocation.x, pageX);\n        var top = Math.min(startLocation.y, pageY);\n        var width = Math.abs(startLocation.x - pageX);\n        var 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    return ZoomSelection;\n}(Class));\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.\nvar MIN_RATE = 0.01;\nvar MAX_RATE = 0.9;\nvar DEFAULT_RATE = 0.3;\n\nvar MousewheelZoom = (function (Class) {\n    function MousewheelZoom(chart, options) {\n        Class.call(this);\n\n        this.chart = chart;\n        this.options = deepExtend({\n            rate: DEFAULT_RATE\n        }, this.options, options);\n    }\n\n    if ( Class ) MousewheelZoom.__proto__ = Class;\n    MousewheelZoom.prototype = Object.create( Class && Class.prototype );\n    MousewheelZoom.prototype.constructor = MousewheelZoom;\n\n    MousewheelZoom.prototype.updateRanges = function updateRanges (delta, coords) {\n        var this$1 = this;\n\n        var lock = (this.options.lock || \"\").toLowerCase();\n        var axisRanges = [];\n        var axes = this.chart._plotArea.axes;\n\n        for (var idx = 0; idx < axes.length; idx++) {\n            var axis = axes[idx];\n            var vertical = axis.options.vertical;\n\n            if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n                var rate = limitValue(this$1.options.rate, MIN_RATE, MAX_RATE);\n                var 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    MousewheelZoom.prototype.zoom = function zoom () {\n        var axisRanges = this.axisRanges;\n        var plotArea = this.chart._plotArea;\n\n        if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n            for (var idx = 0; idx < axisRanges.length; idx++) {\n                var axisRange = axisRanges[idx];\n                plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n            }\n            plotArea.redraw(plotArea.panes);\n        }\n    };\n\n    MousewheelZoom.prototype.destroy = function destroy () {\n        delete this.chart;\n    };\n\n    return MousewheelZoom;\n}(Class));\n\nexport default MousewheelZoom;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box, rectToBox } from '../../core';\nimport { CENTER, HORIZONTAL, START, END, VERTICAL } from '../../common/constants';\n\nvar alignItems = function (rtl) { return (rtl ? END : START); };\n\nvar LegendLayout = (function (ChartElement) {\n    function LegendLayout(options, chartService) {\n        ChartElement.call(this, options);\n\n        this.chartService = chartService;\n    }\n\n    if ( ChartElement ) LegendLayout.__proto__ = ChartElement;\n    LegendLayout.prototype = Object.create( ChartElement && ChartElement.prototype );\n    LegendLayout.prototype.constructor = LegendLayout;\n\n    LegendLayout.prototype.render = function render () {\n        var ref = this;\n        var children = ref.children;\n        var options = ref.options;\n        var 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 ? alignItems(options.rtl) : CENTER\n        });\n\n        for (var idx = 0; idx < children.length; idx++) {\n            var legendItem = children[idx];\n            legendItem.reflow(new Box());\n            legendItem.renderVisual();\n        }\n    };\n\n    LegendLayout.prototype.reflow = function reflow (box) {\n        this.visual.rect(box.toRect());\n        this.visual.reflow();\n        var bbox = this.visual.clippedBBox();\n\n        if (bbox) {\n            this.box = rectToBox(bbox);\n        } else {\n            this.box = new Box();\n        }\n    };\n\n    LegendLayout.prototype.renderVisual = function renderVisual () {\n        this.addVisual();\n    };\n\n    LegendLayout.prototype.createVisual = function createVisual () {};\n\n    return LegendLayout;\n}(ChartElement));\n\nexport default LegendLayout;\n","import { ShapeElement } from '../../core';\nimport { deepExtend, setDefaultOptions } from '../../common';\nimport { CROSS, LEFT, TOP, WHITE } from '../../common/constants';\nimport { valueOrDefault } from '../../drawing-utils';\n\nexport var DEFAULT_MARKER_SIZE = 10;\nexport var DEFAULT_MARKER_BORDER_WIDTH = 2;\n\nvar LegendItemMarker = (function (ShapeElement) {\n    function LegendItemMarker () {\n        ShapeElement.apply(this, arguments);\n    }\n\n    if ( ShapeElement ) LegendItemMarker.__proto__ = ShapeElement;\n    LegendItemMarker.prototype = Object.create( ShapeElement && ShapeElement.prototype );\n    LegendItemMarker.prototype.constructor = LegendItemMarker;\n\n    LegendItemMarker.prototype.visualStyle = function visualStyle () {\n        var options = this.markerOptions();\n        var 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    LegendItemMarker.prototype.markerOptions = function markerOptions () {\n        return this.options;\n    };\n\n    LegendItemMarker.prototype.markerHighlightOptions = function markerHighlightOptions () {\n        var options = this.markerOptions();\n        var borderWidth = options.highlight.border.width;\n\n        return deepExtend(\n            {},\n            options,\n            { background: options.border.color },\n            options.highlight,\n            options.type === CROSS ? {\n                background: options.highlight.border.color,\n                border: { color: options.highlight.background, width: borderWidth / 2 },\n                width: options.width,\n                height: options.height,\n                margin: { top: 0, left: 0 }\n            } : {}\n        );\n    };\n\n    LegendItemMarker.prototype.createHighlight = function createHighlight () {\n        var highlight = new ShapeElement(this.markerHighlightOptions());\n        var box = this.paddingBox.clone();\n        highlight.reflow(box.pad(highlight.options.border.width));\n        this.highlight = [ highlight.getElement() ];\n\n        return this.highlight;\n    };\n\n    return LegendItemMarker;\n}(ShapeElement));\n\nsetDefaultOptions(LegendItemMarker, {\n    border: {\n        width: DEFAULT_MARKER_BORDER_WIDTH\n    },\n    width: DEFAULT_MARKER_SIZE - DEFAULT_MARKER_BORDER_WIDTH,\n    height: DEFAULT_MARKER_SIZE - DEFAULT_MARKER_BORDER_WIDTH,\n    background: WHITE,\n    margin: {\n        top: -1,\n        left: -1\n    },\n    vAlign: TOP,\n    align: LEFT,\n    highlight: {\n        width: DEFAULT_MARKER_SIZE,\n        height: DEFAULT_MARKER_SIZE,\n        border: {\n            color: WHITE,\n            width: DEFAULT_MARKER_BORDER_WIDTH\n        }\n    }\n});\n\nexport default LegendItemMarker;\n","import { drawing as draw } from '@progress/kendo-drawing';\nimport ShapeElement from \"../../core/shape-element\";\nimport { setDefaultOptions } from '../../common';\nimport { BOTTOM, RIGHT } from '../../common/constants';\n\nvar MarkerLineArea = (function (ShapeElement) {\n    function MarkerLineArea () {\n        ShapeElement.apply(this, arguments);\n    }\n\n    if ( ShapeElement ) MarkerLineArea.__proto__ = ShapeElement;\n    MarkerLineArea.prototype = Object.create( ShapeElement && ShapeElement.prototype );\n    MarkerLineArea.prototype.constructor = MarkerLineArea;\n\n    MarkerLineArea.prototype.getElement = function getElement () {\n        var group = new draw.Group();\n        var element = new draw.MultiPath(this.visualStyle());\n        var ref = this;\n        var box = ref.paddingBox;\n        var halfHeight = box.height() / 2;\n\n        element\n            .moveTo(box.x1, box.y1 + halfHeight)\n            .lineTo(box.x1, box.y2)\n            .lineTo(box.x2, box.y2);\n\n        group.append(element);\n\n        return group;\n    };\n\n    return MarkerLineArea;\n}(ShapeElement));\n\nsetDefaultOptions(MarkerLineArea, {\n    width: 15,\n    height: 15,\n    align: RIGHT,\n    vAlign: BOTTOM,\n    margin: {\n        right: -2,\n        bottom: 2\n    }\n});\n\nexport default MarkerLineArea;\n","import { drawing as draw } from '@progress/kendo-drawing';\nimport ShapeElement from \"../../core/shape-element\";\nimport { deepExtend, setDefaultOptions } from '../../common';\nimport { CENTER, CIRCLE, LEFT, RECT, TOP, WHITE } from \"../../common/constants\";\nimport MarkerLineArea from \"./legend-item-line-area\";\nimport { DEFAULT_MARKER_BORDER_WIDTH, DEFAULT_MARKER_SIZE } from \"./legend-item-marker\";\n\nvar LegendItemLine = (function (ShapeElement) {\n    function LegendItemLine () {\n        ShapeElement.apply(this, arguments);\n    }\n\n    if ( ShapeElement ) LegendItemLine.__proto__ = ShapeElement;\n    LegendItemLine.prototype = Object.create( ShapeElement && ShapeElement.prototype );\n    LegendItemLine.prototype.constructor = LegendItemLine;\n\n    LegendItemLine.prototype.getElement = function getElement () {\n        var group = new draw.Group();\n        var element = new draw.MultiPath({\n            stroke: {\n                color: this.options.border.color,\n                opacity: this.options.opacity,\n                width: this.options.height,\n                dashType: this.options.dashType\n            }\n        });\n        var box = this.paddingBox;\n        var centerY = box.center().y;\n\n        element\n            .moveTo(box.x1, centerY)\n            .lineTo(box.x2, centerY);\n\n        group.append(element);\n\n        return group;\n    };\n\n    LegendItemLine.prototype.createHighlight = function createHighlight () {\n        this.highlight = [ this.createHighlightLine(), this.createHighlightMarker() ];\n        return this.highlight;\n    };\n\n    LegendItemLine.prototype.createHighlightLine = function createHighlightLine () {\n        var options = deepExtend({}, {\n            border: {\n                color: this.options.border.color,\n                opacity: this.options.border.opacity,\n                dashType: this.options.border.dashType\n            }\n        }, this.options.highlight);\n        var highlightLine = new MarkerLineArea(options);\n        highlightLine.reflow(this.parent.paddingBox.clone());\n\n        this.highlightLine = highlightLine.getElement();\n\n        return this.highlightLine;\n    };\n\n    LegendItemLine.prototype.createHighlightMarker = function createHighlightMarker () {\n        var options = deepExtend({}, {\n            background: this.options.background,\n        }, this.options.highlight.markers);\n        var highlightMarker = new ShapeElement(options);\n        var paddingBox = this.parent.paddingBox;\n        var borderWidth = options.border.width;\n        var box = this.parent.box.clone();\n\n        box.pad({\n            left: borderWidth - paddingBox.x1,\n            top: borderWidth - paddingBox.y1\n        });\n\n        highlightMarker.reflow(box);\n        this.highlightMarker = highlightMarker.getElement();\n\n        return this.highlightMarker;\n    };\n\n    return LegendItemLine;\n}(ShapeElement));\n\nsetDefaultOptions(LegendItemLine, {\n    border: {\n        width: 0\n    },\n    type: RECT,\n    align: LEFT,\n    vAlign: CENTER,\n    highlight: {\n        border: {\n            width: DEFAULT_MARKER_BORDER_WIDTH\n        },\n        markers: {\n            type: CIRCLE,\n            width: DEFAULT_MARKER_SIZE,\n            height: DEFAULT_MARKER_SIZE,\n            border: {\n                width: DEFAULT_MARKER_BORDER_WIDTH,\n                color: WHITE\n            },\n            align: LEFT,\n            vAlign: TOP\n        }\n    }\n});\n\nexport default LegendItemLine;\n","import ShapeElement from \"../../core/shape-element\";\nimport { deepExtend, setDefaultOptions } from '../../common';\nimport { CIRCLE, LEFT, TOP, WHITE, X, Y } from \"../../common/constants\";\nimport { DEFAULT_MARKER_BORDER_WIDTH, DEFAULT_MARKER_SIZE } from \"./legend-item-marker\";\n\nvar LegendItemSquare = (function (ShapeElement) {\n    function LegendItemSquare () {\n        ShapeElement.apply(this, arguments);\n    }\n\n    if ( ShapeElement ) LegendItemSquare.__proto__ = ShapeElement;\n    LegendItemSquare.prototype = Object.create( ShapeElement && ShapeElement.prototype );\n    LegendItemSquare.prototype.constructor = LegendItemSquare;\n\n    LegendItemSquare.prototype.createHighlight = function createHighlight () {\n        var options = deepExtend({}, {\n            background: this.options.background,\n        }, this.options.highlight.markers);\n        var highlight = new ShapeElement(options);\n\n        var box = this.paddingBox.clone();\n        var targetBox = this.parent.box.clone();\n        box.align(targetBox, X, LEFT);\n        box.align(targetBox, Y, TOP);\n        highlight.reflow(box);\n\n        this.highlight = [ highlight.getElement() ];\n\n        return this.highlight;\n    };\n\n    return LegendItemSquare;\n}(ShapeElement));\n\nsetDefaultOptions(LegendItemSquare, {\n    highlight: {\n        markers: {\n            type: CIRCLE,\n            width: DEFAULT_MARKER_SIZE,\n            height: DEFAULT_MARKER_SIZE,\n            border: {\n                width: DEFAULT_MARKER_BORDER_WIDTH,\n                color: WHITE\n            },\n            margin: {\n                top: -3,\n                left: -3\n            }\n        }\n    }\n});\n\nexport default LegendItemSquare;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { BoxElement, FloatElement, TextBox } from '../../core';\nimport { AREA, LEGEND_ITEM_ARIA_ROLE_DESCRIPTION, LEGEND_ITEM_CLASSNAME, LEGEND_ITEM_CLICK, LEGEND_ITEM_HOVER, LEGEND_ITEM_LEAVE, LEGEND_ITEM_ROLE, LINE } from '../constants';\nimport { BOTTOM, CENTER, WHITE } from '../../common/constants';\nimport { deepExtend, eventElement, setDefaultOptions } from '../../common';\nimport addAccessibilityAttributesToVisual from '../../core/utils/add-accessibility-attributes-to-visual';\nimport guid from '../../core/utils/guid';\nimport LegendItemMarker from './legend-item-marker';\nimport MarkerLineArea from './legend-item-line-area';\nimport LegendItemLine from './legend-item-line';\nimport LegendItemSquare from './legend-item-square';\n\nvar LegendItem = (function (BoxElement) {\n    function LegendItem(options) {\n        BoxElement.call(this, 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        this._id = guid();\n        this.options.accessibility.ariaChecked = options.active;\n    }\n\n    if ( BoxElement ) LegendItem.__proto__ = BoxElement;\n    LegendItem.prototype = Object.create( BoxElement && BoxElement.prototype );\n    LegendItem.prototype.constructor = LegendItem;\n\n    LegendItem.prototype.createContainer = function createContainer () {\n        this.container = new FloatElement({ vertical: false, wrap: false, align: CENTER, spacing: this.options.spacing });\n        this.append(this.container);\n    };\n\n    LegendItem.prototype.createMarker = function createMarker () {\n        this.markerWrap = new BoxElement({ vertical: false, shrinkToFit: true, wrap: false, margin: 1, width: 22, height: 22 });\n        this.container.append(this.markerWrap);\n\n        this.createMarkerArea();\n\n        if (this.options.markers.visible) {\n            this._marker = this._createMarker();\n            this.markerWrap.append(this._marker);\n        }\n    };\n\n    LegendItem.prototype.createMarkerArea = function createMarkerArea () {\n        var options = this.options;\n        var markerColor = options.markerColor;\n        var line = options.line; if ( line === void 0 ) line = {};\n        var lineOptions = {\n            border: {\n                color: line.color || markerColor,\n                opacity: line.opacity,\n                dashType: line.dashType\n            }\n        };\n        return this._createLine(lineOptions) ||\n            this._createMarkerLine(lineOptions, line) ||\n            this._createSquare();\n    };\n\n    LegendItem.prototype.markerOptions = function markerOptions () {\n        var options = this.options;\n        var markers = options.markers; if ( markers === void 0 ) markers = {};\n        var markerColor = options.markerColor;\n        var border = markers.border; if ( border === void 0 ) border = {};\n        markers.zIndex = undefined;\n\n        return deepExtend({}, markers, {\n            border: { color: border.color || markerColor },\n            highlight: options.highlight.markers\n        });\n    };\n\n    LegendItem.prototype._highlightOptions = function _highlightOptions () {\n        var options = this.options;\n        return deepExtend(\n            { markers: { type: options.markers.type } },\n            options.highlight\n        );\n    };\n\n    LegendItem.prototype._createLine = function _createLine (lineOptions) {\n        var options = this.options;\n        if (options.type === LINE && !options.markers.visible) {\n            this._line = new LegendItemLine(deepExtend({}, {\n                background: options.markerColor,\n                highlight: this._highlightOptions(),\n            }, lineOptions, options.line));\n\n            this.markerWrap.append(this._line);\n        }\n        return this._line;\n    };\n\n    LegendItem.prototype._createMarkerLine = function _createMarkerLine (lineOptions, line) {\n        var options = this.options;\n        if (options.type === LINE) {\n            this._markerLineArea = new MarkerLineArea(deepExtend({}, {\n                border: {\n                    width: line.height\n                }\n            }, lineOptions));\n\n            this.markerWrap.append(this._markerLineArea);\n        }\n\n        return this._markerLineArea;\n    };\n\n    LegendItem.prototype._reduceSize = function _reduceSize (object, prop, factor) {\n        if ( factor === void 0 ) factor = 0.6;\n\n        if (typeof object[prop] === 'number') {\n            object[prop] = object[prop] * factor;\n        }\n    };\n\n    LegendItem.prototype._createSquare = function _createSquare () {\n        var options = this.options;\n        if (options.type === AREA) {\n            var pattern = options.pattern || (options.series || {}).pattern;\n            if (pattern) {\n                if (typeof pattern === 'function') {\n                    pattern = pattern(options.series);\n                }\n                pattern = structuredClone(pattern);\n                this._reduceSize(pattern, 'gap');\n                this._reduceSize(pattern, 'width');\n                this._reduceSize(pattern, 'radius');\n            }\n\n            this._square = new LegendItemSquare(Object.assign({}, {border: options.border,\n                vAlign: options.markers.visible ? BOTTOM : CENTER,\n                highlight: this._highlightOptions()},\n                options.area,\n                {pattern: pattern,\n                background: options.area.background || options.markerColor}));\n            this.markerWrap.append(this._square);\n        }\n        return this._square;\n    };\n\n    LegendItem.prototype._createMarker = function _createMarker () {\n        return new LegendItemMarker(this.markerOptions());\n    };\n\n    LegendItem.prototype._highlightMarkers = function _highlightMarkers () {\n        if (this.options.active) {\n            this._toggleHighlight(true);\n        }\n    };\n\n    LegendItem.prototype._restoreMarkers = function _restoreMarkers () {\n        this._toggleHighlight(false);\n    };\n\n    LegendItem.prototype._toggleHighlight = function _toggleHighlight (show) {\n        var this$1 = this;\n\n        if (!this.options.highlight.visible) {\n            return;\n        }\n\n        var element = this._marker || this._square || this._line;\n\n        if (element && element === this._line) {\n            this._line.visual.visible(!show);\n        }\n\n        if (element) {\n            var highlight = element.highlight;\n\n            if (!highlight) {\n                highlight = element.createHighlight();\n                highlight.forEach(function (h) { return h && this$1.markerWrap.appendVisual(h); });\n            }\n\n            highlight.forEach(function (h) { return h && h.visible(show); });\n        }\n    };\n\n    LegendItem.prototype.createLabel = function createLabel () {\n        var options = this.options;\n        var labelOptions = deepExtend({}, options.labels);\n\n        this.container.append(new TextBox(options.text, labelOptions));\n    };\n\n    LegendItem.prototype.getAriaLabelText = function getAriaLabelText () {\n        return this.options.text;\n    };\n\n    LegendItem.prototype.focusVisual = function focusVisual () {\n        this.visual.options.set(\"id\", this._id);\n        this.toggleFocusHighlight(true);\n        this._highlightMarkers();\n    };\n\n    LegendItem.prototype.clearFocusFromVisual = function clearFocusFromVisual () {\n        this.visual.options.set(\"id\", \"\");\n        this.toggleFocusHighlight(false);\n        this._restoreMarkers();\n    };\n\n    LegendItem.prototype.renderComplete = function renderComplete () {\n        BoxElement.prototype.renderComplete.call(this);\n\n        var cursor = this.options.cursor || {};\n        var 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    LegendItem.prototype.click = function click (widget, e) {\n        var args = this.eventArgs(e);\n\n        if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n            e.preventDefault();\n        }\n    };\n\n    LegendItem.prototype.over = function over (widget, e) {\n        var args = this.eventArgs(e);\n\n        if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n            widget._legendItemHover(args.seriesIndex, args.pointIndex);\n            this._highlightMarkers();\n        }\n\n        // Don't trigger point hover for legend items\n        return true;\n    };\n\n    LegendItem.prototype.out = function out (widget, e) {\n        widget._unsetActivePoint();\n        this._restoreMarkers();\n\n        widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n    };\n\n    LegendItem.prototype.eventArgs = function eventArgs (e) {\n        var 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    LegendItem.prototype.createVisual = function createVisual () {\n        BoxElement.prototype.createVisual.call(this);\n        var options = this.options;\n\n        if (this.options.visible) {\n            var accessibilityOptions = deepExtend({\n                ariaLabel: options.accessibility.ariaLabel !== undefined ? options.accessibility.ariaLabel : options.text\n            }, options.accessibility);\n\n            addAccessibilityAttributesToVisual(this.visual, accessibilityOptions);\n        }\n    };\n\n    LegendItem.prototype.renderVisual = function renderVisual () {\n        var this$1 = this;\n\n        var options = this.options;\n        var 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                    type: options.type,\n                    // Passing the markerColor as a background option for backwards compatibility.\n                    // Example in jq docs - https://docs.telerik.com/kendo-ui/api/javascript/dataviz/ui/chart/configuration/legend.item#legenditemvisual\n                    markers: deepExtend({ background: this.options.markerColor }, this.markerOptions()),\n                    labels: options.labels\n                },\n                createVisual: function () {\n                    this$1.createVisual();\n                    this$1.renderChildren();\n                    this$1.renderComplete();\n\n                    var defaultVisual = this$1.visual;\n\n                    delete this$1.visual;\n\n                    return defaultVisual;\n                }\n            });\n            this._marker = this._markerLineArea = this._square = this._line = null;\n            this.addVisual();\n        } else {\n            BoxElement.prototype.renderVisual.call(this);\n        }\n    };\n\n    LegendItem.prototype.createFocusHighlight = function createFocusHighlight (style) {\n        var borderWidth = style.stroke.width;\n        return draw.Path.fromRect(this.container.box.pad(borderWidth / 2).toRect(), style);\n    };\n\n    return LegendItem;\n}(BoxElement));\n\nsetDefaultOptions(LegendItem, {\n    accessibility: {\n        role: LEGEND_ITEM_ROLE,\n        className: LEGEND_ITEM_CLASSNAME,\n        ariaRoleDescription: LEGEND_ITEM_ARIA_ROLE_DESCRIPTION\n    },\n    markers: {},\n    highlight: {\n        visible: true,\n        markers: {}\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, CIRCLE, POINTER, START, END, HORIZONTAL, SQUARE } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, getSpacing, inArray, setDefaultOptions } from '../../common';\n\nvar CUSTOM = \"custom\";\n\nvar Legend = (function (ChartElement) {\n    function Legend(options, chartService) {\n        if ( chartService === void 0 ) chartService = {};\n\n        ChartElement.call(this, 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    if ( ChartElement ) Legend.__proto__ = ChartElement;\n    Legend.prototype = Object.create( ChartElement && ChartElement.prototype );\n    Legend.prototype.constructor = Legend;\n\n    Legend.prototype.createContainers = function createContainers () {\n        var options = this.options;\n        var position = options.position;\n        var userAlign = options.align;\n        var align = position;\n        var 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    Legend.prototype.createItems = function createItems () {\n        var chartService = this.getService();\n        var options = this.options;\n        var vertical = this.isVertical();\n        var innerElement = new LegendLayout({\n            vertical: vertical,\n            spacing: options.spacing,\n            rtl: chartService.rtl\n        }, chartService);\n        var data = options.data;\n\n        if (options.reverse) {\n            data = data.slice(0).reverse();\n        }\n\n        var count = data.length;\n\n        for (var i = 0; i < count; i++) {\n            var dataItem = data[i];\n            var ref = dataItem.series || {};\n            var markers = ref.markers; if ( markers === void 0 ) markers = {};\n            var dashType = ref.dashType;\n            var legendItem = ref.legendItem;\n            var opacity = ref.opacity;\n            var markersOptions = deepExtend({ visible: markers.visible !== false, type: CIRCLE }, markers);\n            delete markersOptions.size;\n\n            var itemOptions = deepExtend({},\n                {\n                    markers: markersOptions,\n                    labels: options.labels,\n                    rtl: chartService.rtl,\n                    line: Object.assign({}, {dashType: dashType},\n                        options.line),\n                    area: Object.assign({}, {opacity: opacity},\n                        options.area),\n                    opacity: opacity,\n                    accessibility: options.accessibility,\n                    focusHighlight: options.focusHighlight\n                },\n                options.item,\n                legendItem,\n                dataItem,\n                { markers: options.markers }\n            );\n\n            innerElement.append(new LegendItem(itemOptions));\n        }\n\n        innerElement.render();\n        this.itemsContainer.append(innerElement);\n    };\n\n    Legend.prototype.isVertical = function isVertical () {\n        var ref = this.options;\n        var orientation = ref.orientation;\n        var position = ref.position;\n        var vertical = (position === CUSTOM && orientation !== HORIZONTAL) ||\n               (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\n\n        return vertical;\n    };\n\n    Legend.prototype.hasItems = function hasItems () {\n        return this.container.children[0].children.length > 0;\n    };\n\n    Legend.prototype.getItems = function getItems () {\n        return this.itemsContainer.children[0].children;\n    };\n\n    Legend.prototype.reflow = function reflow (targetBox) {\n        var options = this.options;\n        var 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    Legend.prototype.containerReflow = function containerReflow (targetBox) {\n        var ref = this;\n        var options = ref.options;\n        var container = ref.container;\n        var position = options.position;\n        var width = options.width;\n        var height = options.height;\n        var pos = position === TOP || position === BOTTOM ? X : Y;\n        var vertical = this.isVertical();\n        var alignTarget = targetBox.clone();\n        var 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        var 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    Legend.prototype.containerCustomReflow = function containerCustomReflow (targetBox) {\n        var ref = this;\n        var options = ref.options;\n        var container = ref.container;\n        var offsetX = options.offsetX;\n        var offsetY = options.offsetY;\n        var width = options.width;\n        var height = options.height;\n        var vertical = this.isVertical();\n        var 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    Legend.prototype.renderVisual = function renderVisual () {\n        if (this.hasItems()) {\n            ChartElement.prototype.renderVisual.call(this);\n        }\n    };\n\n    Legend.prototype.createLegendTitle = function createLegendTitle (title) {\n        var titleOptions = deepExtend({}, {\n            color: BLACK,\n            position: TOP,\n            align: CENTER\n        }, title);\n        var text = titleOptions.text;\n\n        if (!title || title.visible === false || !title.text) {\n            return;\n        }\n\n        if (defined(titleOptions) && titleOptions.visible) {\n            var 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    Legend.prototype.createTitleLayout = function createTitleLayout () {\n        this.layout = new FloatElement({\n            vertical: true,\n            wrap: false\n        });\n\n        this.container.append(this.layout);\n    };\n\n    Legend.prototype.hasTitle = function hasTitle () {\n        return Boolean(this.options.title && this.options.title.visible !== false && this.options.title.text);\n    };\n\n    Legend.prototype.appendTitleLayoutContent = function appendTitleLayoutContent () {\n        var 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    return Legend;\n}(ChartElement));\n\nsetDefaultOptions(Legend, {\n    position: RIGHT,\n    data: [],\n    offsetX: 0,\n    offsetY: 0,\n    margin: getSpacing(2),\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    line: {\n        width: 20,\n        height: 2,\n        cursor: POINTER,\n        opacity: 1\n    },\n    area: {\n        type: SQUARE,\n        align: RIGHT,\n        width: 15,\n        height: 15,\n    }\n});\n\nexport default Legend;\n","import filterSeriesByType from '../utils/filter-series-by-type';\nimport { Class } from '../../common';\nimport { TRENDLINE_SERIES } from '../constants';\n\nvar PlotAreaFactory = (function (Class) {\n    function PlotAreaFactory() {\n        Class.call(this);\n\n        this._registry = [];\n    }\n\n    if ( Class ) PlotAreaFactory.__proto__ = Class;\n    PlotAreaFactory.prototype = Object.create( Class && Class.prototype );\n    PlotAreaFactory.prototype.constructor = PlotAreaFactory;\n\n    PlotAreaFactory.prototype.register = function register (type, seriesTypes) {\n        this._registry.push({\n            type: type,\n            seriesTypes: seriesTypes\n        });\n    };\n\n    PlotAreaFactory.prototype.create = function create (srcSeries, options, chartService) {\n        var registry = this._registry;\n        var match = registry[0];\n        var series;\n\n        for (var idx = 0; idx < registry.length; idx++) {\n            var entry = registry[idx];\n            series = filterSeriesByType(srcSeries, entry.seriesTypes);\n            var trendlines = filterSeriesByType(srcSeries, TRENDLINE_SERIES);\n\n            if ((series.length - trendlines.length) > 0) {\n                match = entry;\n                break;\n            }\n        }\n\n        return new match.type(series, options, chartService);\n    };\n\n    return PlotAreaFactory;\n}(Class));\n\nPlotAreaFactory.current = new PlotAreaFactory();\n\nexport default PlotAreaFactory;\n","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, eventCoordinates, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';\nimport { parseDate } from '../date-utils';\n\nvar ZOOM_ACCELERATION = 3;\nvar SELECTOR_HEIGHT_ADJUST = 0.1;\n\nfunction createDiv(classNames) {\n    var element = document.createElement(\"div\");\n    if (classNames) {\n        element.className = classNames;\n    }\n\n    return element;\n}\n\nfunction closestHandle(element) {\n    var current = element;\n    while (current && !hasClasses(current, \"k-handle\")) {\n        current = current.parentNode;\n    }\n\n    return current;\n}\n\nvar Selection = (function (Class) {\n    function Selection(chart, categoryAxis, options, observer) {\n        Class.call(this);\n\n        var 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    if ( Class ) Selection.__proto__ = Class;\n    Selection.prototype = Object.create( Class && Class.prototype );\n    Selection.prototype.constructor = Selection;\n\n    Selection.prototype.onPane = function onPane (pane) {\n        return this.categoryAxis.pane === pane;\n    };\n\n    Selection.prototype.createElements = function createElements () {\n        var options = this.options;\n        var wrapper = this.wrapper = createDiv(\"k-selector k-pointer-events-none\");\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\n        var selection = this.selection = createDiv(\"k-selection k-pointer-events-none\");\n\n        this.leftMask = createDiv(\"k-mask k-pointer-events-none\");\n        this.rightMask = createDiv(\"k-mask k-pointer-events-none\");\n\n        wrapper.appendChild(this.leftMask);\n        wrapper.appendChild(this.rightMask);\n        wrapper.appendChild(selection);\n\n        var body = this.body = createDiv(\"k-selection-bg k-pointer-events-none\");\n        selection.appendChild(body);\n\n        var leftHandle = this.leftHandle = createDiv(\"k-handle k-left-handle k-pointer-events-auto\");\n        var rightHandle = this.rightHandle = createDiv(\"k-handle k-right-handle k-pointer-events-auto\");\n        leftHandle.appendChild(createDiv());\n        rightHandle.appendChild(createDiv());\n\n        selection.appendChild(leftHandle);\n        selection.appendChild(rightHandle);\n\n        this.chartElement.appendChild(wrapper);\n        var selectionStyles = elementStyles(selection, [ \"borderLeftWidth\", \"borderRightWidth\", \"height\" ]);\n        var leftHandleHeight = elementStyles(leftHandle, \"height\").height;\n        var 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        /* eslint no-self-assign: \"off\" */\n        wrapper.style.cssText = wrapper.style.cssText;\n    };\n\n    Selection.prototype.bindEvents = function bindEvents$1 () {\n        var obj;\n\n        if (this.options.mousewheel !== false) {\n            this._mousewheelHandler = this._mousewheel.bind(this);\n            bindEvents(this.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));\n        }\n\n        this._domEvents = DomEventsBuilder.create(this.chartElement, {\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    Selection.prototype.initOptions = function initOptions () {\n        var ref = this;\n        var options = ref.options;\n        var categoryAxis = ref.categoryAxis;\n        var box = categoryAxis.pane.chartsBox();\n        var 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        var ref$1 = elementStyles(this.chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n        var paddingLeft = ref$1.paddingLeft;\n        var paddingTop = ref$1.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    Selection.prototype.destroy = function destroy () {\n        var obj;\n\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.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));\n                this._mousewheelHandler = null;\n            }\n\n            this.chartElement.removeChild(this.wrapper);\n            this.wrapper = null;\n        }\n    };\n\n    Selection.prototype._rangeEventArgs = function _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    Selection.prototype._pointInPane = function _pointInPane (x, y) {\n        var paneBox = this.categoryAxis.pane.box;\n        var modelCoords = this.chart._toModelCoordinates(x, y);\n        return paneBox.containsPoint(modelCoords);\n    };\n\n    Selection.prototype._start = function _start (e) {\n        var options = this.options;\n        var target = eventElement(e);\n        if (this._state || !target) {\n            return;\n        }\n\n        var coords = eventCoordinates(e);\n        var inPane = this._pointInPane(coords.x, coords.y);\n        if (!inPane) {\n            return;\n        }\n\n        var handle = closestHandle(target);\n        var bodyRect = this.body.getBoundingClientRect();\n        var inBody = !handle && coords.x >= bodyRect.x && coords.x <= bodyRect.x + bodyRect.width &&\n                       coords.y >= bodyRect.y && coords.y <= bodyRect.y + bodyRect.height;\n\n        this.chart._unsetActivePoint();\n        this._state = {\n            moveTarget: handle,\n            startLocation: e.x ? e.x.location : 0,\n            inBody: inBody,\n            range: {\n                from: this._index(options.from),\n                to: this._index(options.to)\n            }\n        };\n\n        var 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    Selection.prototype._press = function _press (e) {\n        var 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    Selection.prototype._move = function _move (e) {\n        if (!this._state) {\n            return;\n        }\n\n        var ref = this;\n        var state = ref._state;\n        var options = ref.options;\n        var categoryAxis = ref.categoryAxis;\n        var range = state.range;\n        var target = state.moveTarget;\n        var reverse = categoryAxis.options.reverse;\n        var from = this._index(options.from);\n        var to = this._index(options.to);\n        var min = this._index(options.min);\n        var max = this._index(options.max);\n        var delta = state.startLocation - e.x.location;\n        var oldRange = { from: range.from, to: range.to };\n        var span = range.to - range.from;\n        var scale = elementStyles(this.wrapper, \"width\").width / (categoryAxis.categoriesCount() - 1);\n        var offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n\n        if (!target && !state.inBody) {\n            return;\n        }\n\n        var leftHandle = target && hasClasses(target, \"k-left-handle\");\n        var rightHandle = target && hasClasses(target, \"k-right-handle\");\n\n        if (state.inBody) {\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    Selection.prototype._end = function _end () {\n        if (this._state) {\n            var moveTarget = this._state.moveTarget;\n            if (moveTarget) {\n                removeClass(moveTarget, \"k-handle-active\");\n            }\n\n            var 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    Selection.prototype._tap = function _tap (e) {\n        var ref = this;\n        var options = ref.options;\n        var categoryAxis = ref.categoryAxis;\n        var coords = this.chart._eventCoordinates(e);\n        var categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n        var from = this._index(options.from);\n        var to = this._index(options.to);\n        var min = this._index(options.min);\n        var max = this._index(options.max);\n        var span = to - from;\n        var mid = from + span / 2;\n        var range = {};\n        var rightClick = e.event.which === 3;\n        var 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\n        if (this._state) {\n            this._state.range = range;\n            this.trigger(SELECT, this._rangeEventArgs(range));\n            this._end();\n        }\n    };\n\n    Selection.prototype._mousewheel = function _mousewheel (e) {\n        var this$1 = this;\n\n        var delta = mousewheelDelta(e);\n\n        this._start(e);\n\n        if (this._state) {\n            var 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(function () {\n                this$1._end();\n            }, MOUSEWHEEL_DELAY);\n        }\n    };\n\n    Selection.prototype._gesturestart = function _gesturestart (e) {\n        var options = this.options;\n        var touch = e.touches[0];\n        var inPane = this._pointInPane(touch.pageX, touch.pageY);\n\n        if (!inPane) {\n            return;\n        }\n\n        this._state = {\n            range: {\n                from: this._index(options.from),\n                to: this._index(options.to)\n            }\n        };\n        var 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    Selection.prototype._gestureend = function _gestureend () {\n        if (this._state) {\n            this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n            delete this._state;\n        }\n    };\n\n    Selection.prototype._gesturechange = function _gesturechange (e) {\n        if (!this._state) {\n            return;\n        }\n\n        var ref = this;\n        var chart = ref.chart;\n        var state = ref._state;\n        var options = ref.options;\n        var categoryAxis = ref.categoryAxis;\n        var range = state.range;\n        var p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n        var p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n        var left = Math.min(p0, p1);\n        var 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    Selection.prototype._index = function _index (value) {\n        var index = value;\n\n        if (value instanceof Date) {\n            index = this.categoryAxis.categoryIndex(value);\n        }\n\n        return index;\n    };\n\n    Selection.prototype._value = function _value (index) {\n        var 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    Selection.prototype._slot = function _slot (value) {\n        var categoryAxis = this.categoryAxis;\n        var index = this._index(value);\n\n        return categoryAxis.getSlot(index, index, true);\n    };\n\n    Selection.prototype.move = function move (from, to) {\n        var options = this.options;\n        var reverse = this.categoryAxis.options.reverse;\n        var offset = options.offset;\n        var padding = options.padding;\n        var border = options.selection.border;\n        var left = reverse ? to : from;\n        var right = reverse ? from : to;\n        var edge = 'x' + (reverse ? 2 : 1);\n\n        var box = this._slot(left);\n        var 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        var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n        elementStyles(this.rightMask, {\n            width: rightMaskWidth\n        });\n\n        var 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    Selection.prototype.set = function set (from, to) {\n        var options = this.options;\n        var min = this._index(options.min);\n        var max = this._index(options.max);\n        var fromValue = limitValue(this._index(from), min, max);\n        var 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    Selection.prototype.expand = function expand (delta) {\n        var options = this.options;\n        var min = this._index(options.min);\n        var max = this._index(options.max);\n        var zDir = options.mousewheel.zoom;\n        var from = this._index(options.from);\n        var to = this._index(options.to);\n        var range = { from: from, to: to };\n        var 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    Selection.prototype.zoom = function zoom (delta, coords) {\n        var options = this.options;\n        var min = this._index(options.min);\n        var max = this._index(options.max);\n        var from = this._index(options.from);\n        var to = this._index(options.to);\n        var range = { from: from, to: to };\n        var oldRange = deepExtend({}, range);\n\n        var ref = this.categoryAxis.options;\n        var reverse = ref.reverse;\n        var origin = X + (reverse ? '2' : '1');\n        var lineBox = this.categoryAxis.lineBox();\n        var relative = Math.abs(lineBox[origin] - coords[X]);\n        var size = lineBox.width();\n        var position = round(relative / size, 2);\n        var minDelta = round(position * delta);\n        var 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    Selection.prototype.trigger = function trigger (name, args) {\n        return (this.observer || this.chart).trigger(name, args);\n    };\n\n    return Selection;\n}(Class));\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\nvar Tooltip = (function (BaseTooltip) {\n    function Tooltip () {\n        BaseTooltip.apply(this, arguments);\n    }\n\n    if ( BaseTooltip ) Tooltip.__proto__ = BaseTooltip;\n    Tooltip.prototype = Object.create( BaseTooltip && BaseTooltip.prototype );\n    Tooltip.prototype.constructor = Tooltip;\n\n    Tooltip.prototype.show = function show (point) {\n        if (!point || !point.tooltipAnchor || (this._current && this._current === point)) {\n            return;\n        }\n\n        var options = deepExtend({}, this.options, point.options.tooltip);\n        var anchor = point.tooltipAnchor();\n\n        if (anchor) {\n            this._current = point;\n            BaseTooltip.prototype.show.call(this, {\n                point: point,\n                anchor: anchor\n            }, options, point);\n        } else {\n            this.hide();\n        }\n    };\n\n    Tooltip.prototype.hide = function hide () {\n        delete this._current;\n        BaseTooltip.prototype.hide.call(this);\n    };\n\n    return Tooltip;\n}(BaseTooltip));\n\nexport default Tooltip;","import BaseTooltip from './base-tooltip';\nimport { Point } from '../../core';\n\nimport { grep, setDefaultOptions } from '../../common';\n\nvar SharedTooltip = (function (BaseTooltip) {\n    function SharedTooltip(plotArea, options) {\n        BaseTooltip.call(this, plotArea.chartService, options);\n\n        this.plotArea = plotArea;\n        this.formatService = plotArea.chartService.format;\n    }\n\n    if ( BaseTooltip ) SharedTooltip.__proto__ = BaseTooltip;\n    SharedTooltip.prototype = Object.create( BaseTooltip && BaseTooltip.prototype );\n    SharedTooltip.prototype.constructor = SharedTooltip;\n\n    SharedTooltip.prototype.showAt = function showAt (points, coords) {\n        var tooltipPoints = grep(points, function(point) {\n            var tooltip = point.series.tooltip;\n            var excluded = tooltip && tooltip.visible === false;\n\n            return !excluded;\n        });\n\n        if (tooltipPoints.length > 0) {\n            var point = tooltipPoints[0];\n            var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n\n            var 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    SharedTooltip.prototype._slotAnchor = function _slotAnchor (point, slot) {\n        var axis = this.plotArea.categoryAxis;\n        var 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    SharedTooltip.prototype._defaultAnchor = function _defaultAnchor (point, slot) {\n        var box = point.owner.pane.chartsBox();\n        var vertical = this.plotArea.categoryAxis.options.vertical;\n        var center = box.center();\n        var slotCenter = slot.center();\n        var align = {\n            horizontal: \"center\",\n            vertical: \"center\"\n        };\n\n        var 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    return SharedTooltip;\n}(BaseTooltip));\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\nvar BarChartAnimation = (function (superclass) {\n    function BarChartAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) BarChartAnimation.__proto__ = superclass;\n    BarChartAnimation.prototype = Object.create( superclass && superclass.prototype );\n    BarChartAnimation.prototype.constructor = BarChartAnimation;\n\n    BarChartAnimation.prototype.setup = function setup () {\n        var ref = this;\n        var element = ref.element;\n        var options = ref.options;\n        var bbox = element.bbox();\n\n        if (bbox) {\n            this.origin = options.origin;\n            var axis = options.vertical ? Y : X;\n\n            var 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    BarChartAnimation.prototype.step = function step (pos) {\n        var scaleX = interpolateValue(this.fromScale.x, 1, pos);\n        var scaleY = interpolateValue(this.fromScale.y, 1, pos);\n\n        this.element.transform(geom.transform()\n            .scale(scaleX, scaleY, this.origin)\n        );\n    };\n\n    BarChartAnimation.prototype.abort = function abort () {\n        superclass.prototype.abort.call(this);\n        this.element.transform(null);\n    };\n\n    return BarChartAnimation;\n}(draw.Animation));\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\nvar BubbleAnimation = (function (superclass) {\n    function BubbleAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) BubbleAnimation.__proto__ = superclass;\n    BubbleAnimation.prototype = Object.create( superclass && superclass.prototype );\n    BubbleAnimation.prototype.constructor = BubbleAnimation;\n\n    BubbleAnimation.prototype.setup = function setup () {\n        var center = this.center = this.element.bbox().center();\n        this.element.transform(geom.transform()\n            .scale(START_SCALE, START_SCALE, center)\n        );\n    };\n\n    BubbleAnimation.prototype.step = function step (pos) {\n        this.element.transform(geom.transform()\n            .scale(pos, pos, this.center)\n        );\n    };\n\n    return BubbleAnimation;\n}(draw.Animation));\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\nvar FadeInAnimation = (function (superclass) {\n    function FadeInAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) FadeInAnimation.__proto__ = superclass;\n    FadeInAnimation.prototype = Object.create( superclass && superclass.prototype );\n    FadeInAnimation.prototype.constructor = FadeInAnimation;\n\n    FadeInAnimation.prototype.setup = function setup () {\n        this.fadeTo = this.element.opacity();\n        this.element.opacity(0);\n    };\n\n    FadeInAnimation.prototype.step = function step (pos) {\n        this.element.opacity(pos * this.fadeTo);\n    };\n\n    return FadeInAnimation;\n}(draw.Animation));\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\nvar PieAnimation = (function (superclass) {\n    function PieAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) PieAnimation.__proto__ = superclass;\n    PieAnimation.prototype = Object.create( superclass && superclass.prototype );\n    PieAnimation.prototype.constructor = PieAnimation;\n\n    PieAnimation.prototype.setup = function setup () {\n        this.element.transform(geom.transform()\n            .scale(START_SCALE, START_SCALE, this.options.center)\n        );\n    };\n\n    PieAnimation.prototype.step = function step (pos) {\n        this.element.transform(geom.transform()\n            .scale(pos, pos, this.options.center)\n        );\n    };\n\n    return PieAnimation;\n}(draw.Animation));\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\nvar ScatterLineChart = (function (ScatterChart) {\n    function ScatterLineChart () {\n        ScatterChart.apply(this, arguments);\n    }\n\n    if ( ScatterChart ) ScatterLineChart.__proto__ = ScatterChart;\n    ScatterLineChart.prototype = Object.create( ScatterChart && ScatterChart.prototype );\n    ScatterLineChart.prototype.constructor = ScatterLineChart;\n\n    ScatterLineChart.prototype.render = function render () {\n        ScatterChart.prototype.render.call(this);\n\n        this.renderSegments();\n    };\n\n    ScatterLineChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx) {\n        var style = currentSeries.style;\n        var 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    ScatterLineChart.prototype.animationPoints = function animationPoints () {\n        var points = ScatterChart.prototype.animationPoints.call(this);\n        return points.concat(this._segments);\n    };\n\n    ScatterLineChart.prototype.createMissingValue = function createMissingValue (value, missingValues) {\n        if (missingValues === ZERO) {\n            var 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    return ScatterLineChart;\n}(ScatterChart));\n\ndeepExtend(ScatterLineChart.prototype, LineChartMixin);\n\nexport default ScatterLineChart;","import autoMajorUnit from '../../core/utils/auto-major-unit';\nimport { valueOrDefault } from '../../common';\n\nfunction getScatterTrendlineData(valueMapper, range, options) {\n    var data = [];\n    var xMin = range.xMin;\n    var xMax = range.xMax;\n\n    var forecast = (options || {}).forecast;\n    if (forecast) {\n        if (forecast.before > 0) {\n            xMin -= forecast.before;\n        }\n\n        if (forecast.after > 0) {\n            xMax += forecast.after;\n        }\n    }\n\n    var samplingInterval = (options || {}).samplingInterval;\n    var delta = valueOrDefault(samplingInterval,  autoMajorUnit(xMin, xMax) / 10);\n    if (samplingInterval <= 0) {\n        delta = xMax - xMin;\n    }\n\n    for (var x = xMin; x <= xMax; x += delta) {\n        data.push([\n            x,\n            valueMapper(x)\n        ]);\n    }\n\n    return data;\n}\n\nexport default getScatterTrendlineData;\n","import calculateSlope from './calculate-slope';\nimport checkAllPositive from './check-all-positive';\nimport getScatterTrendlineData from './get-scatter-trendline-data';\n\nfunction scatterExponentialTrendline(context) {\n    var options = context.options;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: valueFields.x, yValue: Math.log(valueFields[fieldName]) });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var options = ref.options;\n\n    var sourceValues = seriesValues();\n    if (!checkAllPositive(sourceValues, options.field)) {\n        return null;\n    }\n\n    var ref$1 = calculateSlope(sourceValues, valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    var xMin = ref$1.xMin;\n    var xMax = ref$1.xMax;\n    var range = { xMin: xMin, xMax: xMax };\n\n    if (count > 0) {\n        // Exponential trendline equation:\n        // y = a * e ^ (b * x)\n        var a = Math.exp(intercept);\n        var b = slope;\n\n        return getScatterTrendlineData(function (x) { return a * Math.exp(b * x); }, range, options.trendline);\n    }\n\n    return null;\n}\n\nexport default scatterExponentialTrendline;\n","var scatterValueGetter = function (fieldName) { return function (ref) {\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: valueFields.x, yValue: valueFields[fieldName] });\n; }    };\n\nexport default scatterValueGetter;\n","import calculateSlope from './calculate-slope';\nimport getScatterTrendlineData from './get-scatter-trendline-data';\nimport scatterValueGetter from './scatter-value-getter';\n\nfunction scatterLinearTrendline(context) {\n    var options = context.options;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var options = ref.options;\n\n    var ref$1 = calculateSlope(seriesValues(), scatterValueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    var xMin = ref$1.xMin;\n    var xMax = ref$1.xMax;\n    var range = { xMin: xMin, xMax: xMax };\n\n    if (count > 0) {\n        return getScatterTrendlineData(function (x) { return slope * x + intercept; }, range, options.trendline);\n    }\n\n    return null;\n}\n\nexport default scatterLinearTrendline;\n","function xValueLimits(sourceValues, valueGetter) {\n    var xMin = Number.MAX_VALUE;\n    var xMax = Number.MIN_VALUE;\n\n    for (var i = 0; i < sourceValues.length; i++) {\n        var value = sourceValues[i];\n        var ref = valueGetter(value);\n        var xValue = ref.xValue;\n        var yValue = ref.yValue;\n\n        if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n            xMin = Math.min(xValue, xMin);\n            xMax = Math.max(xValue, xMax);\n        }\n    }\n\n    return { xMin: xMin, xMax: xMax };\n}\n\nexport default xValueLimits;\n","import calculateSlope from './calculate-slope';\nimport checkAllPositive from './check-all-positive';\nimport getScatterTrendlineData from './get-scatter-trendline-data';\nimport xValueLimits from './x-value-limits';\n\nfunction scatterLogarithmicTrendline(context) {\n    var options = context.options;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: valueFields.x, yValue: valueFields[fieldName] });\n; }    };\n\nvar logValueGetter = function (fieldName) { return function (ref) {\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: Math.log(valueFields.x), yValue: valueFields[fieldName] });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var options = ref.options;\n\n    var sourceValues = seriesValues();\n    if (!checkAllPositive(sourceValues, 'x')) {\n        return null;\n    }\n\n    var ref$1 = calculateSlope(sourceValues, logValueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    var range = xValueLimits(sourceValues, valueGetter(options.field));\n\n    if (count > 0) {\n        // Logarithmic trendline equation:\n        // y = a * ln (x) + b\n        var a = slope;\n        var b = intercept;\n\n        return getScatterTrendlineData(function (x) { return a * Math.log(x) + b; }, range, options.trendline);\n    }\n\n    return null;\n}\n\nexport default scatterLogarithmicTrendline;\n","import calculateMovingAverage from './calculate-moving-average';\nimport { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\nimport scatterValueGetter from './scatter-value-getter';\n\nfunction scatterMovingAverageTrendline(context) {\n    var options = context.options;\n\n    var data = getData(context);\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nfunction getData(ref) {\n    var options = ref.options;\n    var seriesValues = ref.seriesValues;\n\n    var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n    var range = { before: period, after: period };\n    var data = calculateMovingAverage(seriesValues(range), scatterValueGetter(options.field), period);\n\n    if (data.length > 0) {\n        return data;\n    }\n\n    return null;\n}\n\nexport default scatterMovingAverageTrendline;\n","import getScatterTrendlineData from './get-scatter-trendline-data';\nimport scatterValueGetter from './scatter-value-getter';\nimport calculatePolynomial from './calculate-polynomial';\n\nfunction scatterPolynomialTrendline(context) {\n    var options = context.options;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var options = ref.options;\n\n    var order = (options.trendline || {}).order;\n    var valueGetter = scatterValueGetter(options.field);\n    var ref$1 = calculatePolynomial(seriesValues(), valueGetter, order);\n    var count = ref$1.count;\n    var valueMapper = ref$1.valueMapper;\n    var xMin = ref$1.xMin;\n    var xMax = ref$1.xMax;\n    var range = { xMin: xMin, xMax: xMax };\n\n    if (count > 0) {\n        // Polynomial trendline equation:\n        // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n        return getScatterTrendlineData(valueMapper, range, options.trendline);\n    }\n\n    return null;\n}\n\nexport default scatterPolynomialTrendline;\n","import calculateSlope from './calculate-slope';\nimport checkAllPositive from './check-all-positive';\nimport getScatterTrendlineData from './get-scatter-trendline-data';\nimport scatterValueGetter from './scatter-value-getter';\nimport xValueLimits from './x-value-limits';\n\nfunction scatterPowerTrendline(context) {\n    var options = context.options;\n    var seriesValues = context.seriesValues;\n\n    var data = getData({ seriesValues: seriesValues, options: options });\n    if (data) {\n        return Object.assign({}, options,\n\n            {type: 'scatterLine',\n            data: data});\n    }\n\n    return null;\n}\n\nvar valueGetter = function (fieldName) { return function (ref) {\n        var valueFields = ref.valueFields;\n\n        return ({ xValue: Math.log(valueFields.x), yValue: Math.log(valueFields[fieldName]) });\n; }    };\n\nfunction getData(ref) {\n    var seriesValues = ref.seriesValues;\n    var options = ref.options;\n\n    var sourceValues = seriesValues();\n    if (!checkAllPositive(sourceValues, 'x')) {\n        return null;\n    }\n\n    var ref$1 = calculateSlope(sourceValues, valueGetter(options.field));\n    var slope = ref$1.slope;\n    var intercept = ref$1.intercept;\n    var count = ref$1.count;\n    var range = xValueLimits(sourceValues, scatterValueGetter(options.field));\n\n    if (count > 0) {\n        // Power trendline equation:\n        // y = a * x ^ b\n        var a = Math.exp(intercept);\n        var b = slope;\n        return getScatterTrendlineData(function (x) { return a * Math.pow(x, b); }, range, options.trendline);\n    }\n\n    return null;\n}\n\nexport default scatterPowerTrendline;\n","import {\n    TRENDLINE_EXPONENTIAL,\n    TRENDLINE_LINEAR,\n    TRENDLINE_LOGARITHMIC,\n    TRENDLINE_MOVING_AVERAGE,\n    TRENDLINE_POLYNOMIAL,\n    TRENDLINE_POWER\n} from '../constants';\nimport scatterExponentialTrendline from './scatter-exponential-trendline';\nimport scatterLinearTrendline from './scatter-linear-trendline';\nimport scatterLogarithmicTrendline from './scatter-logarithmic-trendline';\nimport scatterMovingAverageTrendline from './scatter-moving-average';\nimport scatterPolynomialTrendline from './scatter-polynomial-trendline';\nimport scatterPowerTrendline from './scatter-power-trendline';\n\nvar scatterRegistry = {};\nscatterRegistry[TRENDLINE_EXPONENTIAL] = scatterExponentialTrendline;\nscatterRegistry[TRENDLINE_LINEAR] = scatterLinearTrendline;\nscatterRegistry[TRENDLINE_LOGARITHMIC] = scatterLogarithmicTrendline;\nscatterRegistry[TRENDLINE_MOVING_AVERAGE] = scatterMovingAverageTrendline;\nscatterRegistry[TRENDLINE_POLYNOMIAL] = scatterPolynomialTrendline;\nscatterRegistry[TRENDLINE_POWER] = scatterPowerTrendline;\n\nexport default scatterRegistry;\n","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';\nimport trendlineFactory from '../trendlines/trendline-factory';\nimport scatterTrendlineRegistry from '../trendlines/scatter-trendline-registry';\n\nimport { NumericAxis, LogarithmicAxis, DateValueAxis, Point } from '../../core';\n\nimport { filterSeriesByType, equalsIgnoreCase, singleItemOrArray } from '../utils';\n\nimport { SCATTER, SCATTER_LINE, BUBBLE, LOGARITHMIC } from '../constants';\n\nimport { DATE } from '../../common/constants';\nimport { deepExtend, eventElement, grep, inArray, setDefaultOptions } from '../../common';\n\nvar XYPlotArea = (function (PlotAreaBase) {\n    function XYPlotArea () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) XYPlotArea.__proto__ = PlotAreaBase;\n    XYPlotArea.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    XYPlotArea.prototype.constructor = XYPlotArea;\n\n    XYPlotArea.prototype.initFields = function initFields () {\n        this.namedXAxes = {};\n        this.namedYAxes = {};\n\n        this.xAxisRangeTracker = new AxisGroupRangeTracker();\n        this.yAxisRangeTracker = new AxisGroupRangeTracker();\n    };\n\n    XYPlotArea.prototype.render = function render (panes) {\n        var this$1 = this;\n        if ( panes === void 0 ) panes = this.panes;\n\n        this.series = [].concat( this.originalSeries );\n        this.createTrendlineSeries();\n\n        var seriesByPane = this.groupSeriesByPane();\n        for (var i = 0; i < panes.length; i++) {\n            var pane = panes[i];\n            var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n            this$1.addToLegend(paneSeries);\n            var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n\n            if (!filteredSeries) {\n                continue;\n            }\n\n            this$1.createScatterChart(\n                filterSeriesByType(filteredSeries, SCATTER),\n                pane\n            );\n\n            this$1.createScatterLineChart(\n                filterSeriesByType(filteredSeries, SCATTER_LINE),\n                pane\n            );\n\n            this$1.createBubbleChart(\n                filterSeriesByType(filteredSeries, BUBBLE),\n                pane\n            );\n        }\n\n        this.createAxes(panes);\n    };\n\n    XYPlotArea.prototype.appendChart = function appendChart (chart, pane) {\n        this.xAxisRangeTracker.update(chart.xAxisRanges);\n        this.yAxisRangeTracker.update(chart.yAxisRanges);\n\n        PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n    };\n\n    XYPlotArea.prototype.removeAxis = function removeAxis (axis) {\n        var axisName = axis.options.name;\n\n        PlotAreaBase.prototype.removeAxis.call(this, 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    XYPlotArea.prototype.seriesPaneName = function seriesPaneName (series) {\n        var options = this.options;\n        var xAxisName = series.xAxis;\n        var xAxisOptions = [].concat(options.xAxis);\n        var xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n        var yAxisName = series.yAxis;\n        var yAxisOptions = [].concat(options.yAxis);\n        var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n        var panes = options.panes || [ {} ];\n        var defaultPaneName = panes[0].name || \"default\";\n        var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n        return paneName;\n    };\n\n    XYPlotArea.prototype.createScatterChart = function 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    XYPlotArea.prototype.createScatterLineChart = function 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    XYPlotArea.prototype.createBubbleChart = function 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    XYPlotArea.prototype.createXYAxis = function createXYAxis (options, vertical, axisIndex) {\n        var axisName = options.name;\n        var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n        var tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n        var axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n        var isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n        var defaultRange = tracker.query();\n        var defaultAxisRange = isLog ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n        var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n        var typeSamples = [ axisOptions.min, axisOptions.max ];\n        var series = this.series;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n            if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n                var 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        var inferredDate;\n\n        for (var i = 0; i < typeSamples.length; i++) {\n            if (typeSamples[i] instanceof Date) {\n                inferredDate = true;\n                break;\n            }\n        }\n\n        var 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        var 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    XYPlotArea.prototype.createAxes = function createAxes (panes) {\n        var this$1 = this;\n\n        var options = this.options;\n        var xAxesOptions = [].concat(options.xAxis);\n        var xAxes = [];\n        var yAxesOptions = [].concat(options.yAxis);\n        var yAxes = [];\n\n        for (var idx = 0; idx < xAxesOptions.length; idx++) {\n            var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n            if (inArray(axisPane, panes)) {\n                xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n            }\n        }\n\n        for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n            var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n            if (inArray(axisPane$1, panes)) {\n                yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n            }\n        }\n\n        this.axisX = this.axisX || xAxes[0];\n        this.axisY = this.axisY || yAxes[0];\n    };\n\n    XYPlotArea.prototype._dispatchEvent = function _dispatchEvent (chart, e, eventType) {\n        var coords = chart._eventCoordinates(e);\n        var point = new Point(coords.x, coords.y);\n        var allAxes = this.axes;\n        var length = allAxes.length;\n        var xValues = [];\n        var yValues = [];\n\n        for (var i = 0; i < length; i++) {\n            var axis = allAxes[i];\n            var values = axis.options.vertical ? yValues : xValues;\n            var 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    XYPlotArea.prototype.updateAxisOptions = function updateAxisOptions$1 (axis, options) {\n        var vertical = axis.options.vertical;\n        var axes = this.groupAxes(this.panes);\n        var 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    XYPlotArea.prototype.trendlineFactory = function trendlineFactory$1 (options, series) {\n        var seriesValues = this.seriesValues.bind(this, series.index);\n\n        var trendline = trendlineFactory(scatterTrendlineRegistry, options.type, {\n            options: options,\n            seriesValues: seriesValues\n        });\n\n        if (trendline) {\n            // Inherit settings\n            trendline.xAxis = series.xAxis;\n            trendline.yAxis = series.yAxis;\n        }\n\n        return trendline;\n    };\n\n    XYPlotArea.prototype.seriesValues = function seriesValues (seriesIx) {\n        var this$1 = this;\n\n        var result = [];\n        var currentSeries = this.series[seriesIx];\n\n        for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n            var data = this$1.bindPoint(currentSeries, pointIx);\n            result.push({ pointIx: pointIx, valueFields: data.valueFields });\n        }\n\n        return result;\n    };\n\n    return XYPlotArea;\n}(PlotAreaBase));\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n    var 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;\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, ShapeBuilder, TextBox, Box, createPatternFill } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { OUTSIDE_END, INSIDE_END, PIE, FADEIN, TOOLTIP_OFFSET, CHART_POINT_ROLE, CHART_POINT_CLASSNAME, CHART_POINT_ROLE_DESCRIPTION } 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';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\n\nvar PieSegment = (function (ChartElement) {\n    function PieSegment(value, sector, options) {\n        ChartElement.call(this, options);\n\n        this.value = value;\n        this.sector = sector;\n    }\n\n    if ( ChartElement ) PieSegment.__proto__ = ChartElement;\n    PieSegment.prototype = Object.create( ChartElement && ChartElement.prototype );\n    PieSegment.prototype.constructor = PieSegment;\n\n    PieSegment.prototype.render = function render () {\n        if (this._rendered || this.visible === false) {\n            return;\n        }\n        this._rendered = true;\n\n        this.createLabel();\n    };\n\n    PieSegment.prototype.createLabel = function createLabel () {\n        var labels = this.options.labels;\n        var chartService = this.owner.chartService;\n        var labelText = this.getLabelText(labels);\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                var 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            }), this.pointData());\n\n            this.append(this.label);\n        }\n    };\n\n    PieSegment.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        }\n\n        return this.owner.chartService.format.auto(options.format, this.value);\n    };\n\n    PieSegment.prototype.reflow = function reflow (targetBox) {\n        this.render();\n        this.box = targetBox;\n        this.reflowLabel();\n    };\n\n    PieSegment.prototype.reflowLabel = function reflowLabel () {\n        var ref = this;\n        var labelsOptions = ref.options.labels;\n        var label = ref.label;\n        var sector = this.sector.clone();\n        var labelsDistance = labelsOptions.distance;\n        var angle = sector.middle();\n\n        if (label) {\n            var labelHeight = label.box.height();\n            var labelWidth = label.box.width();\n            var 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                var 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    PieSegment.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var ref = this;\n        var sector = ref.sector;\n        var options = ref.options;\n\n        ChartElement.prototype.createVisual.call(this);\n\n        this.addAccessibilityAttributesToVisual();\n\n        if (this.value) {\n            if (options.visual) {\n                var startAngle = (sector.startAngle + 180) % 360;\n                var 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: function () {\n                        var group = new draw.Group();\n                        this$1.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    PieSegment.prototype.createSegmentVisual = function createSegmentVisual (group) {\n        var ref = this;\n        var sector = ref.sector;\n        var options = ref.options;\n        var borderOptions = options.border || {};\n        var 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        var color = options.color;\n        var fill = createPatternFill(options.pattern, {\n            color: color,\n            opacity: options.opacity\n        });\n        var 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    PieSegment.prototype.createSegment = function 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    PieSegment.prototype.createAnimation = function createAnimation () {\n        var ref = this;\n        var options = ref.options;\n        var center = ref.sector.center;\n\n        deepExtend(options, {\n            animation: {\n                center: [ center.x, center.y ],\n                delay: this.animationDelay\n            }\n        });\n\n        ChartElement.prototype.createAnimation.call(this);\n    };\n\n    PieSegment.prototype.createHighlight = function createHighlight (options) {\n        var highlight = this.options.highlight || {};\n        var 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    PieSegment.prototype.highlightVisual = function highlightVisual () {\n        return this.visual.children[0];\n    };\n\n    PieSegment.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        var 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    PieSegment.prototype.createFocusHighlight = function createFocusHighlight (style) {\n        var borderWidth = this.options.focusHighlight.border.width;\n        var result = this.createSegment(this.sector, deepExtend({}, style, {\n            stroke: {\n                width: borderWidth * 2\n            }\n        }));\n\n        var clipPath = new draw.MultiPath();\n\n        clipPath.paths.push(draw.Path.fromRect(result.bbox()));\n        clipPath.paths.push(this.createSegment(this.sector, {}));\n\n        result.clip(clipPath);\n\n        return result;\n    };\n\n    PieSegment.prototype.tooltipAnchor = function tooltipAnchor () {\n        var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n        var midAndle = sector.middle();\n        var midPoint = sector.point(midAndle);\n\n        return {\n            point: midPoint,\n            align: tooltipAlignment(midAndle + 180)\n        };\n    };\n\n    PieSegment.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    PieSegment.prototype.pointData = function 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    PieSegment.prototype.getIndex = function getIndex () {\n        return this.index;\n    };\n\n    return PieSegment;\n}(ChartElement));\n\nvar RAD_30 = round(rad(30), DEFAULT_PRECISION);\nvar RAD_60 = round(rad(60), DEFAULT_PRECISION);\n\nfunction tooltipAlignment(angle) {\n    var radians = rad(angle);\n    var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n    var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n\n\n    var 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    var 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    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n});\n\ndeepExtend(PieSegment.prototype, PointEventsMixin);\ndeepExtend(PieSegment.prototype, AccessibilityAttributesMixin);\n\nexport default PieSegment;\n","import { getTemplate } from '../../common';\nimport { hasValue } from '../utils';\n\nvar PieChartMixin = {\n    createLegendItem: function(value, point, options) {\n        var legendOptions = this.options.legend || {};\n        var labelsOptions = legendOptions.labels || {};\n        var inactiveItems = legendOptions.inactiveItems || {};\n        var inactiveItemsLabels = inactiveItems.labels || {};\n\n        if (options && options.visibleInLegend !== false) {\n            var pointVisible = options.visible !== false;\n            var labelTemplate = pointVisible ? getTemplate(labelsOptions) :\n                getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n            var 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            var 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                    pattern: point.pattern,\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\nvar PIE_SECTOR_ANIM_DELAY = 70;\n\nvar PieChart = (function (ChartElement) {\n    function PieChart(plotArea, options) {\n        ChartElement.call(this, options);\n\n        this.plotArea = plotArea;\n        this.chartService = plotArea.chartService;\n        this.points = [];\n        this.legendItems = [];\n        this.render();\n    }\n\n    if ( ChartElement ) PieChart.__proto__ = ChartElement;\n    PieChart.prototype = Object.create( ChartElement && ChartElement.prototype );\n    PieChart.prototype.constructor = PieChart;\n\n    PieChart.prototype.render = function render () {\n        this.traverseDataPoints(this.addValue.bind(this));\n    };\n\n    PieChart.prototype.traverseDataPoints = function traverseDataPoints (callback) {\n        var this$1 = this;\n\n        var ref = this;\n        var options = ref.options;\n        var seriesColors = ref.plotArea.options.seriesColors; if ( seriesColors === void 0 ) seriesColors = [];\n        var colorsCount = seriesColors.length;\n        var series = options.series;\n        var seriesCount = series.length;\n\n        for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var data = currentSeries.data;\n            var ref$1 = bindSegments(currentSeries);\n            var total = ref$1.total;\n            var points = ref$1.points;\n            var count = ref$1.count;\n            var anglePerValue = 360 / total;\n            var constantAngle = (void 0);\n            if (!isFinite(anglePerValue)) {\n                constantAngle = 360 / count;\n            }\n            var currentAngle = (void 0);\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 (var i = 0; i < points.length; i++) {\n                var pointData = points[i];\n                if (!pointData) {\n                    continue;\n                }\n\n                var fields = pointData.fields;\n                var value = pointData.value;\n                var visible = pointData.visible;\n                var angle = value !== 0 ? (constantAngle || (value * anglePerValue)) : 0;\n                var 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(value, new Ring(null, 0, 0, currentAngle, angle), {\n                    owner: this$1,\n                    category: defined(fields.category) ? fields.category : \"\",\n                    pattern: defined(fields.pattern) ? fields.pattern : currentSeries.pattern,\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$1.animationDelay(i, seriesIx, seriesCount)\n                });\n\n                if (visible !== false) {\n                    currentAngle += angle;\n                }\n            }\n        }\n    };\n\n    PieChart.prototype.evalSegmentOptions = function evalSegmentOptions (options, value, fields) {\n        var 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: [\n            \"data\", \"content\", \"template\", \"visual\", \"toggle\",\n            \"ariaTemplate\", \"ariaContent\"\n        ] });\n    };\n\n    PieChart.prototype.addValue = function addValue (value, sector, fields) {\n        var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n        segmentOptions.pattern = fields.pattern || segmentOptions.pattern;\n        this.evalSegmentOptions(segmentOptions, value, fields);\n\n        this.createLegendItem(value, segmentOptions, fields);\n\n        if (fields.visible === false) {\n            return;\n        }\n\n        var segment = new PieSegment(value, sector, segmentOptions);\n        Object.assign(segment, fields);\n        this.append(segment);\n        this.points.push(segment);\n    };\n\n    PieChart.prototype.reflow = function reflow (targetBox) {\n        var ref = this;\n        var options = ref.options;\n        var points = ref.points;\n        var seriesConfigs = ref.seriesConfigs; if ( seriesConfigs === void 0 ) seriesConfigs = [];\n        var count = points.length;\n        var box = targetBox.clone();\n        var space = 5;\n        var minWidth = Math.min(box.width(), box.height());\n        var halfMinWidth = minWidth / 2;\n        var defaultPadding = minWidth - minWidth * 0.85;\n        var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n        var newBoxCenter = newBox.center();\n        var boxCenter = box.center();\n        var seriesCount = options.series.length;\n        var leftSideLabels = [];\n        var rightSideLabels = [];\n        var 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        var radius = halfMinWidth - padding;\n        var center = new Point(\n            radius + newBox.x1 + padding,\n            radius + newBox.y1 + padding\n        );\n\n        for (var i = 0; i < count; i++) {\n            var segment = points[i];\n            var sector = segment.sector;\n            var seriesIndex = segment.seriesIx;\n            sector.radius = radius;\n            sector.center = center;\n\n            if (seriesConfigs.length) {\n                var 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            var 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    PieChart.prototype.leftLabelsReflow = function leftLabelsReflow (labels) {\n        var distances = this.distanceBetweenLabels(labels);\n\n        this.distributeLabels(distances, labels);\n    };\n\n    PieChart.prototype.rightLabelsReflow = function rightLabelsReflow (labels) {\n        var distances = this.distanceBetweenLabels(labels);\n\n        this.distributeLabels(distances, labels);\n    };\n\n    PieChart.prototype.distanceBetweenLabels = function distanceBetweenLabels (labels) {\n        var segment = last(this.points);\n        var sector = segment.sector;\n        var count = labels.length - 1;\n        var lr = sector.radius + segment.options.labels.distance;\n        var distances = [];\n        var firstBox = labels[0].box;\n        var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n\n        distances.push(distance);\n\n        for (var i = 0; i < count; i++) {\n            var 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    PieChart.prototype.distributeLabels = function distributeLabels (distances, labels) {\n        var this$1 = this;\n\n        var count = distances.length;\n        var left, right, remaining;\n\n        for (var 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$1._takeDistance(distances, i, --left, remaining);\n                remaining = this$1._takeDistance(distances, i, ++right, remaining);\n            }\n        }\n\n        this.reflowLabels(distances, labels);\n    };\n\n    PieChart.prototype._takeDistance = function _takeDistance (distances, anchor, position, amount) {\n        var result = amount;\n        if (distances[position] > 0) {\n            var 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    PieChart.prototype.reflowLabels = function reflowLabels (distances, labels) {\n        var this$1 = this;\n\n        var segment = last(this.points);\n        var sector = segment.sector;\n        var labelOptions = segment.options.labels;\n        var labelsCount = labels.length;\n        var labelDistance = labelOptions.distance;\n        var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n        var boxX;\n\n        distances[0] += 2;\n        for (var i = 0; i < labelsCount; i++) {\n            var label = labels[i];\n            var box = label.box;\n\n            boxY += distances[i];\n            boxX = this$1.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    PieChart.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var ref = this;\n        var connectors = ref.options.connectors;\n        var points = ref.points;\n        var count = points.length;\n        var space = 4;\n\n        ChartElement.prototype.createVisual.call(this);\n\n        this._connectorLines = [];\n\n        for (var i = 0; i < count; i++) {\n            var segment = points[i];\n            var sector = segment.sector;\n            var label = segment.label;\n            var angle = sector.middle();\n            var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n\n            if (label) {\n                var 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                    var box = label.box;\n                    var centerPoint = sector.center;\n                    var start = sector.point(angle);\n                    var middle = new Point(box.x1, box.center().y);\n                    var sr = (void 0), end = (void 0), crossing = (void 0);\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$1.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$1.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$1._connectorLines.push(connectorLine);\n                    this$1.visual.append(connectorLine);\n                }\n            }\n        }\n    };\n\n    PieChart.prototype.renderVisual = function renderVisual () {\n        ChartElement.prototype.renderVisual.call(this);\n\n        if (find(this.options.series, function (options) { return options.autoFit; })) {\n            var targetBox = this.targetBox;\n            var pieCenter = this.box.center();\n            var bbox = this.visual.bbox();\n            if (!bbox) {\n                return;\n            }\n\n            var bboxBottom = bbox.bottomRight();\n\n            var 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    PieChart.prototype.labelComparator = function labelComparator (reverse) {\n        var reverseValue = reverse ? -1 : 1;\n\n        return function(a, b) {\n            var first = (a.parent.sector.middle() + 270) % 360;\n            var second = (b.parent.sector.middle() + 270) % 360;\n            return (first - second) * reverseValue;\n        };\n    };\n\n    PieChart.prototype.hAlignLabel = function hAlignLabel (originalX, sector, y1, y2, direction) {\n        var radius = sector.radius;\n        var sector_center = sector.center;\n        var cx = sector_center.x;\n        var cy = sector_center.y;\n        var 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    PieChart.prototype.pointInCircle = function 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    PieChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        return this.chartService.format.auto(format, point.value);\n    };\n\n    PieChart.prototype.animationDelay = function animationDelay (categoryIndex) {\n        return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n    };\n\n    PieChart.prototype.stackRoot = function stackRoot () {\n        return this;\n    };\n\n    return PieChart;\n}(ChartElement));\n\nfunction intersection(a1, a2, b1, b2) {\n    var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n    var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n    var result;\n    if (ub !== 0) {\n        var 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\nvar PiePlotArea = (function (PlotAreaBase) {\n    function PiePlotArea () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) PiePlotArea.__proto__ = PlotAreaBase;\n    PiePlotArea.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    PiePlotArea.prototype.constructor = PiePlotArea;\n\n    PiePlotArea.prototype.render = function render () {\n        this.createPieChart(this.series);\n    };\n\n    PiePlotArea.prototype.createPieChart = function createPieChart (series) {\n        var firstSeries = series[0];\n        var 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    PiePlotArea.prototype.appendChart = function appendChart (chart, pane) {\n        PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n        append(this.options.legend.data, chart.legendItems);\n    };\n\n    PiePlotArea.prototype.getPointBelow = function getPointBelow (point) {\n        return this.getPointToTheRight(point);\n    };\n\n    PiePlotArea.prototype.getPointAbove = function getPointAbove (point) {\n        return this.getPointToTheLeft(point);\n    };\n\n    return PiePlotArea;\n}(PlotAreaBase));\n\nexport default PiePlotArea;\n","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\nvar DonutSegment = (function (PieSegment) {\n    function DonutSegment () {\n        PieSegment.apply(this, arguments);\n    }\n\n    if ( PieSegment ) DonutSegment.__proto__ = PieSegment;\n    DonutSegment.prototype = Object.create( PieSegment && PieSegment.prototype );\n    DonutSegment.prototype.constructor = DonutSegment;\n\n    DonutSegment.prototype.reflowLabel = function reflowLabel () {\n        var ref = this;\n        var labelsOptions = ref.options.labels;\n        var label = ref.label;\n        var sector = this.sector.clone();\n        var angle = sector.middle();\n\n        if (label) {\n            var labelHeight = label.box.height();\n            if (labelsOptions.position === CENTER) {\n                sector.radius -= (sector.radius - sector.innerRadius) / 2;\n\n                var lp = sector.point(angle);\n\n                label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n            } else {\n                PieSegment.prototype.reflowLabel.call(this);\n            }\n        }\n    };\n\n    DonutSegment.prototype.createSegment = function createSegment (sector, options) {\n        return ShapeBuilder.current.createRing(sector, options);\n    };\n\n    return DonutSegment;\n}(PieSegment));\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\nvar DONUT_SECTOR_ANIM_DELAY = 50;\n\nvar DonutChart = (function (PieChart) {\n    function DonutChart () {\n        PieChart.apply(this, arguments);\n    }\n\n    if ( PieChart ) DonutChart.__proto__ = PieChart;\n    DonutChart.prototype = Object.create( PieChart && PieChart.prototype );\n    DonutChart.prototype.constructor = DonutChart;\n\n    DonutChart.prototype.addValue = function addValue (value, sector, fields) {\n        var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n        segmentOptions.pattern = fields.pattern || segmentOptions.pattern;\n\n        this.evalSegmentOptions(segmentOptions, value, fields);\n\n        this.createLegendItem(value, segmentOptions, fields);\n\n        if (fields.visible === false) {\n            return;\n        }\n\n        var segment = new DonutSegment(value, sector, segmentOptions);\n\n        Object.assign(segment, fields);\n        this.append(segment);\n        this.points.push(segment);\n    };\n\n    DonutChart.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var options = this.options;\n        var box = targetBox.clone();\n        var space = 5;\n        var minWidth = Math.min(box.width(), box.height());\n        var halfMinWidth = minWidth / 2;\n        var defaultPadding = minWidth - minWidth * 0.85;\n        var series = options.series;\n        var seriesCount = series.length;\n\n        var padding = valueOrDefault(options.padding, defaultPadding);\n        padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n\n        var totalSize = halfMinWidth - padding;\n        var seriesWithoutSize = 0;\n        var holeSize;\n\n        for (var i = 0; i < seriesCount; i++) {\n            var 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            var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n            holeSize = currentSize * 0.75;\n            totalSize -= holeSize;\n        }\n\n        var innerRadius = holeSize;\n        var margin = 0;\n        var size, radius;\n\n        this.seriesConfigs = [];\n\n        for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n            var currentSeries$1 = series[i$1];\n            size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n            innerRadius += margin;\n            radius = innerRadius + size;\n            this$1.seriesConfigs.push({ innerRadius: innerRadius, radius: radius });\n            margin = currentSeries$1.margin || 0;\n            innerRadius = radius;\n        }\n\n        PieChart.prototype.reflow.call(this, targetBox);\n    };\n\n    DonutChart.prototype.animationDelay = function animationDelay (categoryIndex, seriesIndex, seriesCount) {\n        return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n            (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n    };\n\n    return DonutChart;\n}(PieChart));\n\n\nsetDefaultOptions(DonutChart, {\n    startAngle: 90,\n    connectors: {\n        width: 2,\n        color: \"#939393\",\n        padding: 8\n    }\n});\n\nexport default DonutChart;\n","import PiePlotArea from './pie-plotarea';\nimport DonutChart from '../donut-chart/donut-chart';\n\nvar DonutPlotArea = (function (PiePlotArea) {\n    function DonutPlotArea () {\n        PiePlotArea.apply(this, arguments);\n    }\n\n    if ( PiePlotArea ) DonutPlotArea.__proto__ = PiePlotArea;\n    DonutPlotArea.prototype = Object.create( PiePlotArea && PiePlotArea.prototype );\n    DonutPlotArea.prototype.constructor = DonutPlotArea;\n\n    DonutPlotArea.prototype.render = function render () {\n        this.createDonutChart(this.series);\n    };\n\n    DonutPlotArea.prototype.createDonutChart = function createDonutChart (series) {\n        var firstSeries = series[0];\n        var 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    // These were overriden in the Pie, so revert to original behavior\n    DonutPlotArea.prototype.getPointBelow = function getPointBelow (point) {\n        return this._getNextPoint(point, this._pointsByVertical, -1);\n    };\n\n    DonutPlotArea.prototype.getPointAbove = function getPointAbove (point) {\n        return this._getNextPoint(point, this._pointsByVertical, 1);\n    };\n\n    return DonutPlotArea;\n}(PiePlotArea));\n\nexport default DonutPlotArea;","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\nvar DEFAULT_PADDING = 0.15;\n\nvar PolarPlotAreaBase = (function (PlotAreaBase) {\n    function PolarPlotAreaBase () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) PolarPlotAreaBase.__proto__ = PlotAreaBase;\n    PolarPlotAreaBase.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    PolarPlotAreaBase.prototype.constructor = PolarPlotAreaBase;\n\n    PolarPlotAreaBase.prototype.initFields = function initFields () {\n        this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n    };\n\n    PolarPlotAreaBase.prototype.render = function render () {\n        this.addToLegend(this.series);\n        this.createPolarAxis();\n        this.createCharts();\n        this.createValueAxis();\n    };\n\n    PolarPlotAreaBase.prototype.alignAxes = function alignAxes () {\n        var axis = this.valueAxis;\n        var range = axis.range();\n        var crossingValue = axis.options.reverse ? range.max : range.min;\n        var slot = axis.getSlot(crossingValue);\n        var center = this.polarAxis.getSlot(0).center;\n        var axisBox = axis.box.translate(\n            center.x - slot.x1,\n            center.y - slot.y1\n        );\n\n        axis.reflow(axisBox);\n    };\n\n    PolarPlotAreaBase.prototype.createValueAxis = function createValueAxis () {\n        var tracker = this.valueAxisRangeTracker;\n        var defaultRange = tracker.query();\n        var axisOptions = this.valueAxisOptions({\n            roundToMajorUnit: false,\n            zIndex: -1\n        });\n        var 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        var 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        var 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    PolarPlotAreaBase.prototype.reflowAxes = function reflowAxes () {\n        var ref = this;\n        var options = ref.options.plotArea;\n        var valueAxis = ref.valueAxis;\n        var polarAxis = ref.polarAxis;\n        var box = ref.box;\n        var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n        var padding = getSpacing(options.padding || {}, defaultPadding);\n        var paddingBox = box.clone().unpad(padding);\n        var axisBox = paddingBox.clone();\n\n        axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n        axisBox.align(paddingBox, Y, CENTER);\n\n        var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\n        polarAxis.reflow(axisBox);\n        valueAxis.reflow(valueAxisBox);\n        var 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    PolarPlotAreaBase.prototype.backgroundBox = function backgroundBox () {\n        return this.box;\n    };\n\n    PolarPlotAreaBase.prototype.detachLabels = function detachLabels () {};\n\n    return PolarPlotAreaBase;\n}(PlotAreaBase));\n\nexport default PolarPlotAreaBase;\n","import ScatterChart from '../scatter-charts/scatter-chart';\n\nimport { Point, Box } from '../../core';\n\nimport { setDefaultOptions } from '../../common';\n\nvar PolarScatterChart = (function (ScatterChart) {\n    function PolarScatterChart () {\n        ScatterChart.apply(this, arguments);\n    }\n\n    if ( ScatterChart ) PolarScatterChart.__proto__ = ScatterChart;\n    PolarScatterChart.prototype = Object.create( ScatterChart && ScatterChart.prototype );\n    PolarScatterChart.prototype.constructor = PolarScatterChart;\n\n    PolarScatterChart.prototype.pointSlot = function pointSlot (slotX, slotY) {\n        var valueRadius = slotX.center.y - slotY.y1;\n        var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n\n        return new Box(slot.x, slot.y, slot.x, slot.y);\n    };\n\n    return PolarScatterChart;\n}(ScatterChart));\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\nvar PolarLineChart = (function (ScatterLineChart) {\n    function PolarLineChart () {\n        ScatterLineChart.apply(this, arguments);\n    }if ( ScatterLineChart ) PolarLineChart.__proto__ = ScatterLineChart;\n    PolarLineChart.prototype = Object.create( ScatterLineChart && ScatterLineChart.prototype );\n    PolarLineChart.prototype.constructor = PolarLineChart;\n\n    \n\n    return PolarLineChart;\n}(ScatterLineChart));\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\nvar SplinePolarAreaSegment = (function (SplineAreaSegment) {\n    function SplinePolarAreaSegment () {\n        SplineAreaSegment.apply(this, arguments);\n    }\n\n    if ( SplineAreaSegment ) SplinePolarAreaSegment.__proto__ = SplineAreaSegment;\n    SplinePolarAreaSegment.prototype = Object.create( SplineAreaSegment && SplineAreaSegment.prototype );\n    SplinePolarAreaSegment.prototype.constructor = SplinePolarAreaSegment;\n\n    SplinePolarAreaSegment.prototype.fillToAxes = function fillToAxes (fillPath) {\n        var center = this._polarAxisCenter();\n        fillPath.lineTo(center.x, center.y);\n    };\n\n    SplinePolarAreaSegment.prototype._polarAxisCenter = function _polarAxisCenter () {\n        var polarAxis = this.parent.plotArea.polarAxis;\n        var center = polarAxis.box.center();\n        return center;\n    };\n\n    SplinePolarAreaSegment.prototype.strokeSegments = function strokeSegments () {\n        var segments = this._strokeSegments;\n\n        if (!segments) {\n            var center = this._polarAxisCenter();\n            var curveProcessor = new CurveProcessor(false);\n            var 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    return SplinePolarAreaSegment;\n}(SplineAreaSegment));\n\nexport default SplinePolarAreaSegment;","import { geometry as geom } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nvar PolarAreaSegment = (function (AreaSegment) {\n    function PolarAreaSegment () {\n        AreaSegment.apply(this, arguments);\n    }\n\n    if ( AreaSegment ) PolarAreaSegment.__proto__ = AreaSegment;\n    PolarAreaSegment.prototype = Object.create( AreaSegment && AreaSegment.prototype );\n    PolarAreaSegment.prototype.constructor = PolarAreaSegment;\n\n    PolarAreaSegment.prototype.fillToAxes = function fillToAxes (fillPath) {\n        var polarAxis = this.parent.plotArea.polarAxis;\n        var center = polarAxis.box.center();\n        var centerSegment = new geom.Segment([ center.x, center.y ]);\n\n        fillPath.segments.unshift(centerSegment);\n        fillPath.segments.push(centerSegment);\n    };\n\n    return PolarAreaSegment;\n}(AreaSegment));\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\nvar PolarAreaChart = (function (PolarLineChart) {\n    function PolarAreaChart () {\n        PolarLineChart.apply(this, arguments);\n    }\n\n    if ( PolarLineChart ) PolarAreaChart.__proto__ = PolarLineChart;\n    PolarAreaChart.prototype = Object.create( PolarLineChart && PolarLineChart.prototype );\n    PolarAreaChart.prototype.constructor = PolarAreaChart;\n\n    PolarAreaChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx) {\n        var style = (currentSeries.line || {}).style;\n        var 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    PolarAreaChart.prototype.createMissingValue = function createMissingValue (value, missingValues) {\n        var 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    PolarAreaChart.prototype.seriesMissingValues = function seriesMissingValues (series) {\n        return series.missingValues || ZERO;\n    };\n\n    PolarAreaChart.prototype._hasMissingValuesGap = function _hasMissingValuesGap () {\n        var this$1 = this;\n\n        var series = this.options.series;\n\n        for (var idx = 0; idx < series.length; idx++) {\n            if (this$1.seriesMissingValues(series[idx]) === GAP) {\n                return true;\n            }\n        }\n    };\n\n    PolarAreaChart.prototype.sortPoints = function sortPoints (points) {\n        var this$1 = this;\n\n        points.sort(xComparer);\n\n        if (this._hasMissingValuesGap()) {\n            for (var idx = 0; idx < points.length; idx++) {\n                var point = points[idx];\n                if (point) {\n                    var value = point.value;\n                    if (!hasValue(value.y) && this$1.seriesMissingValues(point.series) === GAP) {\n                        delete points[idx];\n                    }\n                }\n            }\n        }\n\n        return points;\n    };\n\n    return PolarAreaChart;\n}(PolarLineChart));\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';\nimport XYPlotArea from './xy-plotarea';\n\nvar PolarPlotArea = (function (PolarPlotAreaBase) {\n    function PolarPlotArea () {\n        PolarPlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PolarPlotAreaBase ) PolarPlotArea.__proto__ = PolarPlotAreaBase;\n    PolarPlotArea.prototype = Object.create( PolarPlotAreaBase && PolarPlotAreaBase.prototype );\n    PolarPlotArea.prototype.constructor = PolarPlotArea;\n\n    PolarPlotArea.prototype.createPolarAxis = function createPolarAxis () {\n        var polarAxis = new PolarAxis(this.options.xAxis, this.chartService);\n\n        this.polarAxis = polarAxis;\n        this.axisX = polarAxis;\n        this.appendAxis(polarAxis);\n    };\n\n    PolarPlotArea.prototype.render = function render () {\n        this.series = [].concat( this.originalSeries );\n        this.createTrendlineSeries();\n\n        PolarPlotAreaBase.prototype.render.call(this);\n    };\n\n    PolarPlotArea.prototype.valueAxisOptions = function valueAxisOptions (defaults) {\n        return deepExtend(defaults, {\n            majorGridLines: { type: ARC },\n            minorGridLines: { type: ARC }\n        }, this.options.yAxis);\n    };\n\n    PolarPlotArea.prototype.createValueAxis = function createValueAxis () {\n        PolarPlotAreaBase.prototype.createValueAxis.call(this);\n        this.axisY = this.valueAxis;\n    };\n\n    PolarPlotArea.prototype.trendlineFactory = function trendlineFactory (options, series) {\n        var trendline = XYPlotArea.prototype.trendlineFactory.call(this, options, series);\n        if (trendline) {\n            trendline.type = POLAR_LINE;\n        }\n\n        return trendline;\n    };\n\n    PolarPlotArea.prototype.appendChart = function appendChart (chart, pane) {\n        this.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n        PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n    };\n\n    PolarPlotArea.prototype.createCharts = function createCharts () {\n        var series = this.filterVisibleSeries(this.series);\n        var 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    PolarPlotArea.prototype.createLineChart = function createLineChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var lineChart = new PolarLineChart(this, { series: series });\n\n        this.appendChart(lineChart, pane);\n    };\n\n    PolarPlotArea.prototype.createScatterChart = function createScatterChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var scatterChart = new PolarScatterChart(this, { series: series });\n\n        this.appendChart(scatterChart, pane);\n    };\n\n    PolarPlotArea.prototype.createAreaChart = function createAreaChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var areaChart = new PolarAreaChart(this, { series: series });\n\n        this.appendChart(areaChart, pane);\n    };\n\n    PolarPlotArea.prototype._dispatchEvent = function _dispatchEvent (chart, e, eventType) {\n        var coords = chart._eventCoordinates(e);\n        var point = new Point(coords.x, coords.y);\n        var xValue = this.axisX.getValue(point);\n        var 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    PolarPlotArea.prototype.createCrosshairs = function createCrosshairs () {};\n\n    return PolarPlotArea;\n}(PolarPlotAreaBase));\n\nsetDefaultOptions(PolarPlotArea, {\n    xAxis: {},\n    yAxis: {}\n});\n\ndeepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin, {\n    seriesValues: XYPlotArea.prototype.seriesValues\n});\n\nexport default PolarPlotArea;\n","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    var seriesSegments = [];\n    for (var idx = 0; idx < segments.length; idx++) {\n        var segment = segments[idx];\n        seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n        seriesSegments[segment.seriesIx].push(segment);\n    }\n\n    return seriesSegments;\n}\n\nvar RadarLineChart = (function (LineChart) {\n    function RadarLineChart () {\n        LineChart.apply(this, arguments);\n    }\n\n    if ( LineChart ) RadarLineChart.__proto__ = LineChart;\n    RadarLineChart.prototype = Object.create( LineChart && LineChart.prototype );\n    RadarLineChart.prototype.constructor = RadarLineChart;\n\n    RadarLineChart.prototype.pointSlot = function pointSlot (categorySlot, valueSlot) {\n        var valueRadius = categorySlot.center.y - valueSlot.y1;\n        var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n\n        return new Box(slot.x, slot.y, slot.x, slot.y);\n    };\n\n    RadarLineChart.prototype.renderSegments = function renderSegments () {\n        LineChart.prototype.renderSegments.call(this);\n\n        if (this._segments && this._segments.length > 1) {\n            var seriesSegments = groupBySeriesIx(this._segments);\n\n            for (var idx = 0; idx < seriesSegments.length; idx++) {\n                var segments = seriesSegments[idx];\n                if (segments && segments.length > 1) {\n                    var firstPoint = segments[0].linePoints[0];\n                    var lastSegment = last(segments);\n                    var lastPoint = last(lastSegment.linePoints);\n                    var isFirstDataPoint = firstPoint.categoryIx === 0;\n                    var isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n                    if (isFirstDataPoint && isLastDataPoint) {\n                        last(segments).linePoints.push(firstPoint);\n                    }\n                }\n            }\n        }\n    };\n\n    RadarLineChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx) {\n        var style = currentSeries.style;\n        var pointType;\n\n        if (style === SMOOTH) {\n            pointType = SplineSegment;\n        } else {\n            pointType = LineSegment;\n        }\n\n        var segment = new pointType(linePoints, currentSeries, seriesIx);\n        var 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    return RadarLineChart;\n}(LineChart));\n\nsetDefaultOptions(RadarLineChart, {\n    clip: false,\n    limitPoints: false\n});\n\nexport default RadarLineChart;\n","import SplineAreaSegment from '../area-chart/spline-area-segment';\n\nvar SplineRadarAreaSegment = (function (SplineAreaSegment) {\n    function SplineRadarAreaSegment () {\n        SplineAreaSegment.apply(this, arguments);\n    }\n\n    if ( SplineAreaSegment ) SplineRadarAreaSegment.__proto__ = SplineAreaSegment;\n    SplineRadarAreaSegment.prototype = Object.create( SplineAreaSegment && SplineAreaSegment.prototype );\n    SplineRadarAreaSegment.prototype.constructor = SplineRadarAreaSegment;\n\n    SplineRadarAreaSegment.prototype.fillToAxes = function fillToAxes () {};\n\n    return SplineRadarAreaSegment;\n}(SplineAreaSegment));\n\nexport default SplineRadarAreaSegment;","import AreaSegment from '../area-chart/area-segment';\n\nvar RadarAreaSegment = (function (AreaSegment) {\n    function RadarAreaSegment () {\n        AreaSegment.apply(this, arguments);\n    }\n\n    if ( AreaSegment ) RadarAreaSegment.__proto__ = AreaSegment;\n    RadarAreaSegment.prototype = Object.create( AreaSegment && AreaSegment.prototype );\n    RadarAreaSegment.prototype.constructor = RadarAreaSegment;\n\n    RadarAreaSegment.prototype.fillToAxes = function fillToAxes () {};\n\n    return RadarAreaSegment;\n}(AreaSegment));\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\nvar RadarAreaChart = (function (RadarLineChart) {\n    function RadarAreaChart () {\n        RadarLineChart.apply(this, arguments);\n    }\n\n    if ( RadarLineChart ) RadarAreaChart.__proto__ = RadarLineChart;\n    RadarAreaChart.prototype = Object.create( RadarLineChart && RadarLineChart.prototype );\n    RadarAreaChart.prototype.constructor = RadarAreaChart;\n\n    RadarAreaChart.prototype.createSegment = function createSegment (linePoints, currentSeries, seriesIx, prevSegment) {\n        var isStacked = this.options.isStacked;\n        var style = (currentSeries.line || {}).style;\n        var previousSegment;\n        var stackPoints;\n        var 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    RadarAreaChart.prototype.seriesMissingValues = function seriesMissingValues (series) {\n        return series.missingValues || ZERO;\n    };\n\n    return RadarAreaChart;\n}(RadarLineChart));\n\nexport default RadarAreaChart;","import DonutSegment from '../donut-chart/donut-segment';\n\nimport { setDefaultOptions } from '../../common';\n\nvar RadarSegment = (function (DonutSegment) {\n    function RadarSegment(value, options) {\n        DonutSegment.call(this, value, null, options);\n    }\n\n    if ( DonutSegment ) RadarSegment.__proto__ = DonutSegment;\n    RadarSegment.prototype = Object.create( DonutSegment && DonutSegment.prototype );\n    RadarSegment.prototype.constructor = RadarSegment;\n\n    RadarSegment.prototype.getIndex = function getIndex () {\n        return this.categoryIx;\n    };\n\n    return RadarSegment;\n}(DonutSegment));\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\nvar RadarClusterLayout = (function (ChartElement) {\n    function RadarClusterLayout(options) {\n        ChartElement.call(this, options);\n\n        this.forEach = options.rtl ? forEachReverse : forEach;\n    }\n\n    if ( ChartElement ) RadarClusterLayout.__proto__ = ChartElement;\n    RadarClusterLayout.prototype = Object.create( ChartElement && ChartElement.prototype );\n    RadarClusterLayout.prototype.constructor = RadarClusterLayout;\n\n    RadarClusterLayout.prototype.reflow = function reflow (sector) {\n        var ref = this;\n        var options = ref.options;\n        var children = ref.children;\n        var gap = options.gap;\n        var spacing = options.spacing;\n        var count = children.length;\n        var slots = count + gap + (spacing * (count - 1));\n        var slotAngle = sector.angle / slots;\n        var angle = sector.startAngle + slotAngle * (gap / 2);\n\n        this.forEach(children, function (child) {\n            var 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    return RadarClusterLayout;\n}(ChartElement));\n\nsetDefaultOptions(RadarClusterLayout, {\n    gap: 1,\n    spacing: 0\n});\n\nexport default RadarClusterLayout;","import { ChartElement, Box } from '../../core';\n\nvar RadarStackLayout = (function (ChartElement) {\n    function RadarStackLayout () {\n        ChartElement.apply(this, arguments);\n    }\n\n    if ( ChartElement ) RadarStackLayout.__proto__ = ChartElement;\n    RadarStackLayout.prototype = Object.create( ChartElement && ChartElement.prototype );\n    RadarStackLayout.prototype.constructor = RadarStackLayout;\n\n    RadarStackLayout.prototype.reflow = function reflow (sector) {\n        var ref = this;\n        var reverse = ref.options.reverse;\n        var children = ref.children;\n        var childrenCount = children.length;\n        var first = reverse ? childrenCount - 1 : 0;\n        var step = reverse ? -1 : 1;\n\n        this.box = new Box();\n\n        for (var i = first; i >= 0 && i < childrenCount; i += step) {\n            var childSector = children[i].sector;\n            childSector.startAngle = sector.startAngle;\n            childSector.angle = sector.angle;\n        }\n    };\n\n    return RadarStackLayout;\n}(ChartElement));\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\nvar RadarBarChart = (function (BarChart) {\n    function RadarBarChart () {\n        BarChart.apply(this, arguments);\n    }\n\n    if ( BarChart ) RadarBarChart.__proto__ = BarChart;\n    RadarBarChart.prototype = Object.create( BarChart && BarChart.prototype );\n    RadarBarChart.prototype.constructor = RadarBarChart;\n\n    RadarBarChart.prototype.pointType = function pointType () {\n        return RadarSegment;\n    };\n\n    RadarBarChart.prototype.clusterType = function clusterType () {\n        return RadarClusterLayout;\n    };\n\n    RadarBarChart.prototype.stackType = function stackType () {\n        return RadarStackLayout;\n    };\n\n    RadarBarChart.prototype.categorySlot = function categorySlot (categoryAxis, categoryIx) {\n        return categoryAxis.getSlot(categoryIx);\n    };\n\n    RadarBarChart.prototype.pointSlot = function pointSlot (categorySlot, valueSlot) {\n        var slot = categorySlot.clone();\n        var y = categorySlot.center.y;\n\n        slot.radius = y - valueSlot.y1;\n        slot.innerRadius = y - valueSlot.y2;\n\n        return slot;\n    };\n\n    RadarBarChart.prototype.reflowPoint = function reflowPoint (point, pointSlot) {\n        point.sector = pointSlot;\n        point.reflow();\n    };\n\n    RadarBarChart.prototype.createAnimation = function createAnimation () {\n        this.options.animation.center = this.box.toRect().center();\n        BarChart.prototype.createAnimation.call(this);\n    };\n\n    return RadarBarChart;\n}(BarChart));\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\nvar RadarPlotArea = (function (PolarPlotAreaBase) {\n    function RadarPlotArea () {\n        PolarPlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PolarPlotAreaBase ) RadarPlotArea.__proto__ = PolarPlotAreaBase;\n    RadarPlotArea.prototype = Object.create( PolarPlotAreaBase && PolarPlotAreaBase.prototype );\n    RadarPlotArea.prototype.constructor = RadarPlotArea;\n\n    RadarPlotArea.prototype.createPolarAxis = function createPolarAxis () {\n        var 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.createTrendlineSeries();\n        this.createCategoryAxesLabels();\n    };\n\n    RadarPlotArea.prototype.valueAxisOptions = function 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    RadarPlotArea.prototype.aggregateCategories = function aggregateCategories () {\n        // No separate panes in radar charts\n        CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n    };\n\n    RadarPlotArea.prototype.createCategoryAxesLabels = function createCategoryAxesLabels () {\n        CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n    };\n\n    RadarPlotArea.prototype.filterSeries = function filterSeries (currentSeries) {\n        // Not supported for radar charts\n        return currentSeries;\n    };\n\n    RadarPlotArea.prototype.trendlineFactory = function trendlineFactory (options, series) {\n        var trendline = CategoricalPlotArea.prototype.trendlineFactory.call(this, options, series);\n        if (trendline) {\n            trendline.type = RADAR_LINE;\n        }\n\n        return trendline;\n    };\n\n    RadarPlotArea.prototype.createCharts = function createCharts () {\n        var series = this.filterVisibleSeries(this.series);\n        var 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    RadarPlotArea.prototype.chartOptions = function chartOptions (series) {\n        var options = { series: series };\n        var firstSeries = series[0];\n        if (firstSeries) {\n            var filteredSeries = this.filterVisibleSeries(series);\n            var 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    RadarPlotArea.prototype.createAreaChart = function createAreaChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n        this.appendChart(areaChart, pane);\n    };\n\n    RadarPlotArea.prototype.createLineChart = function createLineChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var lineChart = new RadarLineChart(this, this.chartOptions(series));\n        this.appendChart(lineChart, pane);\n    };\n\n    RadarPlotArea.prototype.createBarChart = function createBarChart (series, pane) {\n        if (series.length === 0) {\n            return;\n        }\n\n        var firstSeries = series[0];\n        var options = this.chartOptions(series);\n        var filteredSeries = this.filterVisibleSeries(series);\n        var anyStackedSeries = filteredSeries.some(function (s) { return s.stack; });\n        var isStacked100 = filteredSeries.some(function (s) { return s.stack && s.stack.type === \"100%\"; });\n        options.gap = firstSeries.gap;\n        options.spacing = firstSeries.spacing;\n        options.defaultStack = firstSeries.stack && filteredSeries.length > 1;\n        options.isStacked = anyStackedSeries && filteredSeries.length > 1;\n        options.isStacked100 = isStacked100 && filteredSeries.length > 1;\n\n        var barChart = new RadarBarChart(this, options);\n        this.appendChart(barChart, pane);\n\n        this._hasBarCharts = true;\n    };\n\n    RadarPlotArea.prototype.seriesCategoryAxis = function seriesCategoryAxis () {\n        return this.categoryAxis;\n    };\n\n    RadarPlotArea.prototype._dispatchEvent = function _dispatchEvent (chart, e, eventType) {\n        var coords = chart._eventCoordinates(e);\n        var point = new Point(coords.x, coords.y);\n        var category = this.categoryAxis.getCategory(point);\n        var 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    RadarPlotArea.prototype.createCrosshairs = function createCrosshairs () {};\n\n    RadarPlotArea.prototype._pointsByVertical = function _pointsByVertical (basePoint) {\n        return PolarPlotAreaBase.prototype._pointsByVertical.call(this, basePoint).sort(this._getSeriesCompareFn());\n    };\n\n    RadarPlotArea.prototype._getSeriesCompareFn = function _getSeriesCompareFn () {\n        return function (a, b) { return b.value - a.value; };\n    };\n\n    return RadarPlotArea;\n}(PolarPlotAreaBase));\n\ndeepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n    appendChart: CategoricalPlotArea.prototype.appendChart,\n    aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n    seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints,\n    seriesValues: CategoricalPlotArea.prototype.seriesValues\n});\n\nsetDefaultOptions(RadarPlotArea, {\n    categoryAxis: {\n        categories: []\n    },\n    valueAxis: {}\n});\n\nexport default RadarPlotArea;\n","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, getTemplate } from '../../common';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\nimport { CHART_POINT_CLASSNAME, CHART_POINT_ROLE, CHART_POINT_ROLE_DESCRIPTION } from '../constants';\nimport { createPatternFill } from '../../core/pattern';\n\nvar FunnelSegment = (function (ChartElement) {\n    function FunnelSegment(value, options, segmentOptions) {\n        ChartElement.call(this, options);\n\n        this.value = value;\n        this.options.index = segmentOptions.index;\n    }\n\n    if ( ChartElement ) FunnelSegment.__proto__ = ChartElement;\n    FunnelSegment.prototype = Object.create( ChartElement && ChartElement.prototype );\n    FunnelSegment.prototype.constructor = FunnelSegment;\n\n    FunnelSegment.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        } else if (options.format) {\n            return this.formatValue(options.format);\n        }\n\n        return this.value;\n    };\n\n    FunnelSegment.prototype.reflow = function reflow (chartBox) {\n        var points = this.points;\n        var label = this.children[0];\n        var x1 = Math.min(points[0].x, points[3].x);\n        var x2 = Math.max(points[1].x, points[2].x);\n\n        this.box = new Box(x1, points[0].y, x2, 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    FunnelSegment.prototype.createVisual = function createVisual () {\n        var this$1 = this;\n\n        var options = this.options;\n        var visual;\n\n        ChartElement.prototype.createVisual.call(this);\n\n        this.addAccessibilityAttributesToVisual();\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: function () { return this$1.createPath(); }\n            });\n        } else {\n            visual = this.createPath();\n        }\n\n        if (visual) {\n            this.visual.append(visual);\n        }\n    };\n\n    FunnelSegment.prototype.createPath = function createPath () {\n        var options = this.options;\n        var border = options.border;\n        var path = draw.Path.fromPoints(this.points, {\n            fill: createPatternFill(options.pattern, {\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    FunnelSegment.prototype.createHighlight = function createHighlight (style) {\n        return draw.Path.fromPoints(this.points, style);\n    };\n\n    FunnelSegment.prototype.highlightVisual = function highlightVisual () {\n        return this.visual.children[0];\n    };\n\n    FunnelSegment.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        var path = draw.Path.fromPoints(this.points).close();\n\n        return {\n            options: this.options,\n            path: path\n        };\n    };\n\n    FunnelSegment.prototype.createFocusHighlight = function createFocusHighlight (style) {\n        var borderWidth = this.options.focusHighlight.border.width;\n        var result = draw.Path.fromPoints(this.points, deepExtend({}, style, {\n            stroke: {\n                width: borderWidth * 2\n            }\n        })).close();\n\n        var clipPath = new draw.MultiPath();\n\n        clipPath.paths.push(draw.Path.fromRect(this.box.clone().pad(borderWidth).toRect()));\n        clipPath.paths.push(draw.Path.fromPoints(this.points));\n\n        result.clip(clipPath);\n\n        return result;\n    };\n\n    FunnelSegment.prototype.tooltipAnchor = function tooltipAnchor () {\n        var 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    FunnelSegment.prototype.formatValue = function formatValue (format) {\n        var point = this;\n        return point.owner.formatPointValue(point, format);\n    };\n\n    FunnelSegment.prototype.pointData = function 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    FunnelSegment.prototype.getIndex = function getIndex () {\n        return this.index;\n    };\n\n    return FunnelSegment;\n}(ChartElement));\n\nsetDefaultOptions(FunnelSegment, {\n    color: WHITE,\n    border: {\n        width: 1\n    },\n    labels: {\n        format: \"\"\n    },\n    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n    }\n});\n\ndeepExtend(FunnelSegment.prototype, PointEventsMixin);\ndeepExtend(FunnelSegment.prototype, AccessibilityAttributesMixin);\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\nvar FunnelChart = (function (ChartElement) {\n    function FunnelChart(plotArea, options) {\n        ChartElement.call(this, options);\n\n        this.plotArea = plotArea;\n        this.chartService = plotArea.chartService;\n        this.points = [];\n        this.labels = [];\n        this.legendItems = [];\n        this.render();\n    }\n\n    if ( ChartElement ) FunnelChart.__proto__ = ChartElement;\n    FunnelChart.prototype = Object.create( ChartElement && ChartElement.prototype );\n    FunnelChart.prototype.constructor = FunnelChart;\n\n    FunnelChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        return this.plotArea.chartService.format.auto(format,point.value);\n    };\n\n    FunnelChart.prototype.render = function render () {\n        var this$1 = this;\n\n        var seriesIx = 0;\n        var ref = this;\n        var options = ref.options;\n        var seriesColors = ref.plotArea.options.seriesColors; if ( seriesColors === void 0 ) seriesColors = [];\n        var series = options.series[seriesIx];\n        var data = series.data;\n\n        if (!data) {\n            return;\n        }\n\n        var ref$1 = bindSegments(series);\n        var total = ref$1.total;\n        var points = ref$1.points;\n\n        for (var i = 0; i < points.length; i++) {\n            var pointData = points[i];\n\n            if (!pointData) {\n                continue;\n            }\n\n            var 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$1,\n                series: series,\n                seriesIx: seriesIx,\n                dataItem: data[i],\n                percentage: pointData.value / total\n            }, fields, { visible: pointData.visible });\n\n            var value = pointData.valueFields.value;\n            var segment = this$1.createSegment(value, fields);\n            var label = this$1.createLabel(value, fields);\n\n            if (segment && label) {\n                segment.append(label);\n            }\n        }\n    };\n\n    FunnelChart.prototype.evalSegmentOptions = function evalSegmentOptions (options, value, fields) {\n        var 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: [\n            \"data\", \"content\", \"template\", \"toggle\", \"visual\",\n            \"ariaTemplate\", \"ariaContent\"\n        ] });\n    };\n\n    FunnelChart.prototype.createSegment = function createSegment (value, fields) {\n        var seriesOptions = deepExtend({}, fields.series);\n        seriesOptions.pattern = fields.pattern || seriesOptions.pattern;\n\n        this.evalSegmentOptions(seriesOptions, value, fields);\n\n        this.createLegendItem(value, seriesOptions, fields);\n\n        if (fields.visible !== false) {\n\n            var 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    FunnelChart.prototype.createLabel = function createLabel (value, fields) {\n        var series = fields.series;\n        var dataItem = fields.dataItem;\n        var labels = deepExtend({}, this.options.labels, series.labels);\n        var text = value;\n\n        if (labels.visible) {\n            var labelTemplate = getTemplate(labels);\n            var 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.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            var 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    FunnelChart.prototype.labelPadding = function labelPadding () {\n        var labels = this.labels;\n        var padding = { left: 0, right: 0 };\n\n        for (var i = 0; i < labels.length; i++) {\n            var label = labels[i];\n            var align = label.options.align;\n            if (align !== CENTER) {\n                var 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    FunnelChart.prototype.dynamicSlopeReflow = function dynamicSlopeReflow (box, width, totalHeight) {\n        var ref = this;\n        var options = ref.options;\n        var segments = ref.points;\n        var count = segments.length;\n        var firstSegment = segments[0];\n        var maxSegment = firstSegment;\n\n        for (var idx = 0; idx < segments.length; idx++) {\n            if (segments[idx].percentage > maxSegment.percentage) {\n                maxSegment = segments[idx];\n            }\n        }\n\n        var lastUpperSide = (firstSegment.percentage / maxSegment.percentage) * width;\n        var previousOffset = (width - lastUpperSide) / 2;\n        var previousHeight = 0;\n\n        for (var idx$1 = 0; idx$1 < count; idx$1++) {\n            var percentage = segments[idx$1].percentage;\n            var nextSegment = segments[idx$1 + 1];\n            var nextPercentage = (nextSegment ? nextSegment.percentage : percentage);\n            var points = segments[idx$1].points = [];\n            var height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n            var offset = (void 0);\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    FunnelChart.prototype.constantSlopeReflow = function constantSlopeReflow (box, width, totalHeight) {\n        var ref = this;\n        var options = ref.options;\n        var segments = ref.points;\n        var count = segments.length;\n        var decreasingWidth = options.neckRatio <= 1;\n        var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n        var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n        var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n        var finalNarrow = (topMostWidth - neckRatio) / 2;\n        var previousHeight = 0;\n\n        for (var idx = 0; idx < count; idx++) {\n            var points = segments[idx].points = [];\n            var percentage = segments[idx].percentage;\n            var offset = (options.dynamicHeight) ? (finalNarrow * percentage) : (finalNarrow / count);\n            var 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    FunnelChart.prototype.reflow = function reflow (chartBox) {\n        var points = this.points;\n        var count = points.length;\n\n        if (!count) {\n            return;\n        }\n\n        var options = this.options;\n        var box = chartBox.clone().unpad(this.labelPadding());\n        var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n        var 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 (var idx = 0; idx < count; idx++) {\n            points[idx].reflow(chartBox);\n        }\n    };\n\n    return FunnelChart;\n}(ChartElement));\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 FunnelChart from './funnel-chart';\n\nvar MAX_NECK_RATIO = 1e6;\n\nvar PyramidChart = (function (FunnelChart) {\n    function PyramidChart(plotArea, options) {\n        options.dynamicSlope = false;\n        options.neckRatio = MAX_NECK_RATIO;\n\n        FunnelChart.call(this, plotArea, options);\n    }\n\n    if ( FunnelChart ) PyramidChart.__proto__ = FunnelChart;\n    PyramidChart.prototype = Object.create( FunnelChart && FunnelChart.prototype );\n    PyramidChart.prototype.constructor = PyramidChart;\n\n    return PyramidChart;\n}(FunnelChart));\n\nexport default PyramidChart;\n","import PlotAreaBase from './plotarea-base';\nimport FunnelChart from '../funnel-chart/funnel-chart';\nimport PyramidChart from '../funnel-chart/pyramid-chart';\n\nimport { append } from '../../common';\nimport { filterSeriesByType } from '../utils';\n\nimport { FUNNEL, PYRAMID } from '../constants';\n\nvar FunnelPlotArea = (function (PlotAreaBase) {\n    function FunnelPlotArea () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) FunnelPlotArea.__proto__ = PlotAreaBase;\n    FunnelPlotArea.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    FunnelPlotArea.prototype.constructor = FunnelPlotArea;\n\n    FunnelPlotArea.prototype.render = function render () {\n        this.createChart(FunnelChart, filterSeriesByType(this.series, [ FUNNEL ]));\n        this.createChart(PyramidChart, filterSeriesByType(this.series, [ PYRAMID ]));\n    };\n\n    FunnelPlotArea.prototype.createChart = function createChart (chartType, series) {\n        var firstSeries = series[0];\n        if (!firstSeries) {\n            return;\n        }\n\n        var chart = new chartType(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(chart);\n    };\n\n    FunnelPlotArea.prototype.appendChart = function appendChart (chart, pane) {\n        PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n        append(this.options.legend.data, chart.legendItems);\n    };\n\n    FunnelPlotArea.prototype._pointsByVertical = function _pointsByVertical (basePoint) {\n        return this.pointsBySeriesIndex(basePoint.series.index);\n    };\n\n    FunnelPlotArea.prototype.getPointToTheRight = function getPointToTheRight (point) {\n        return this.getPointBelow(point);\n    };\n\n    FunnelPlotArea.prototype.getPointToTheLeft = function getPointToTheLeft (point) {\n        return this.getPointAbove(point);\n    };\n\n    return FunnelPlotArea;\n}(PlotAreaBase));\n\nexport default FunnelPlotArea;\n","import { parseColor } from '@progress/kendo-drawing';\n\n// Linear color scale from the given color to white minus minimum lightness offset.\nvar colorScale = function (color, minLightnessOffset) {\n    if ( minLightnessOffset === void 0 ) minLightnessOffset = 0.05;\n\n    var baseColor = parseColor(color);\n    var offset = 1 - minLightnessOffset;\n\n    return function (value) {\n        var hsl = baseColor.toHSL();\n        var range = 100 - hsl.l;\n        var point = offset - value;\n        hsl.l += Math.min(point * range, range);\n\n        return hsl.toCss();\n    };\n};\n\nexport default colorScale;\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 { CHART_POINT_CLASSNAME, CHART_POINT_ROLE, CHART_POINT_ROLE_DESCRIPTION, TOOLTIP_OFFSET } from '../constants';\nimport AccessibilityAttributesMixin from '../mixins/accessibility-attributes-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nvar HeatmapPoint = (function (ChartElement) {\n    function HeatmapPoint(value, options) {\n        ChartElement.call(this);\n\n        this.options = options;\n        this.color = options.color || WHITE;\n        this.value = value;\n    }\n\n    if ( ChartElement ) HeatmapPoint.__proto__ = ChartElement;\n    HeatmapPoint.prototype = Object.create( ChartElement && ChartElement.prototype );\n    HeatmapPoint.prototype.constructor = HeatmapPoint;\n\n    HeatmapPoint.prototype.render = function 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    HeatmapPoint.prototype.createLabel = function createLabel () {\n        var options = this.options;\n        var labels = options.labels;\n\n        if (labels.visible) {\n            this.label = this.createLabelElement(labels);\n            this.append(this.label);\n        }\n    };\n\n    HeatmapPoint.prototype.createLabelElement = function createLabelElement (options) {\n        var labelColor = options.color;\n\n        if (!labelColor) {\n            labelColor = autoTextColor(this.color);\n        }\n\n        return new TextBox(this.getLabelText(options),\n            deepExtend({\n                align: CENTER,\n                vAlign: CENTER,\n                margin: {\n                    left: 5,\n                    right: 5\n                },\n                zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n            },\n            options, {\n                color: labelColor\n            }),\n            this.pointData()\n        );\n    };\n\n    HeatmapPoint.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = getTemplate(options);\n\n        if (labelTemplate) {\n            return labelTemplate(this.pointData());\n        }\n\n        return this.formatValue(options.format);\n    };\n\n    HeatmapPoint.prototype.formatValue = function formatValue (format) {\n        return this.owner.formatPointValue(this, format);\n    };\n\n    HeatmapPoint.prototype.reflow = function reflow (targetBox) {\n        this.render();\n\n        var 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    HeatmapPoint.prototype.createVisual = function createVisual () {\n        ChartElement.prototype.createVisual.call(this);\n\n        this.addAccessibilityAttributesToVisual();\n    };\n\n    HeatmapPoint.prototype.markerBox = function markerBox () {\n        var options = this.options;\n        var markers = options.markers;\n        var border = markers.border;\n        var rect = this.box.toRect();\n        var type = valueOrDefault(markers.type, 'rect');\n        var isRoundRect = type === ROUNDED_RECT;\n        var borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n        var halfBorderWidth = Math.round(borderWidth / 2);\n\n        if (markers.size) {\n            var 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    HeatmapPoint.prototype.markerBorder = function markerBorder () {\n        var options = this.options;\n        var markers = options.markers;\n        var border = markers.border;\n        var 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    HeatmapPoint.prototype.createMarker = function createMarker () {\n        var options = this.options;\n        var markerOptions = options.markers;\n        var 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            pattern: options.pattern,\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    HeatmapPoint.prototype.createHighlight = function createHighlight (style) {\n        var options = this.options;\n        var markerOptions = this.options.highlight.markers || this.options.markers;\n\n        var 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        var visual = highlight.getElement();\n\n        visual.options.fill = style.fill;\n        visual.options.stroke = style.stroke;\n\n        return visual;\n    };\n\n    HeatmapPoint.prototype.highlightVisual = function highlightVisual () {\n        return this.rectVisual;\n    };\n\n    HeatmapPoint.prototype.highlightVisualArgs = function highlightVisualArgs () {\n        return {\n            options: this.options,\n            rect: this.box.toRect(),\n            visual: this.rectVisual\n        };\n    };\n\n    HeatmapPoint.prototype.createFocusHighlight = function createFocusHighlight () {\n        var markerOptions = this.options.markers;\n        var highlightOptions = this.options.focusHighlight;\n\n        var highlight = new ShapeElement({\n            type: valueOrDefault(markerOptions.type, 'rect'),\n            width: markerOptions.size,\n            height: markerOptions.size,\n            rotation: markerOptions.rotation,\n            background: highlightOptions.color,\n            border: highlightOptions.border,\n            borderRadius: markerOptions.borderRadius,\n            padding: highlightOptions.border.width / 2,\n            zIndex: highlightOptions.zIndex\n        });\n\n        highlight.reflow(this.markerBox());\n\n        return highlight.getElement();\n    };\n\n    HeatmapPoint.prototype.tooltipAnchor = function tooltipAnchor () {\n        var left = this.box.center().x;\n        var 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    HeatmapPoint.prototype.overlapsBox = function overlapsBox (box) {\n        return this.box.overlaps(box);\n    };\n\n    HeatmapPoint.prototype.unclipElements = function unclipElements () {\n        /* noop, clip labels */\n    };\n\n    HeatmapPoint.prototype.pointData = function 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    return HeatmapPoint;\n}(ChartElement));\n\ndeepExtend(HeatmapPoint.prototype, PointEventsMixin);\ndeepExtend(HeatmapPoint.prototype, NoteMixin);\ndeepExtend(HeatmapPoint.prototype, AccessibilityAttributesMixin);\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    accessibility: {\n        role: CHART_POINT_ROLE,\n        className: CHART_POINT_CLASSNAME,\n        ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\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 evalOptions from '../utils/eval-options';\nimport colorScale from './color-scale';\nimport HeatmapPoint from './heatmap-point';\n\nvar HeatmapChart = (function (ChartElement) {\n    function HeatmapChart(plotArea, options) {\n        ChartElement.call(this, options);\n\n        this.plotArea = plotArea;\n        this.chartService = plotArea.chartService;\n        this._initFields();\n\n        this.render();\n    }\n\n    if ( ChartElement ) HeatmapChart.__proto__ = ChartElement;\n    HeatmapChart.prototype = Object.create( ChartElement && ChartElement.prototype );\n    HeatmapChart.prototype.constructor = HeatmapChart;\n\n    HeatmapChart.prototype._initFields = function _initFields () {\n        this.points = [];\n        this.seriesOptions = [];\n        this.valueRange = { min: MAX_VALUE, max: MIN_VALUE };\n        this._evalSeries = [];\n    };\n\n    HeatmapChart.prototype.render = function render () {\n        this.setRange();\n        this.traverseDataPoints(this.addValue.bind(this));\n    };\n\n    HeatmapChart.prototype.setRange = function setRange () {\n        var this$1 = this;\n\n        var ref = this;\n        var series = ref.options.series;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n\n            for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n                var ref$1 = this$1.plotArea.bindPoint(currentSeries, pointIx);\n                var valueFields = ref$1.valueFields;\n                if (defined(valueFields.value) && valueFields.value !== null) {\n                    this$1.valueRange.min = Math.min(this$1.valueRange.min, valueFields.value);\n                    this$1.valueRange.max = Math.max(this$1.valueRange.max, valueFields.value);\n                }\n            }\n        }\n    };\n\n    HeatmapChart.prototype.addValue = function addValue (value, fields) {\n        var 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    HeatmapChart.prototype.evalPointOptions = function evalPointOptions (options, value, fields) {\n        var series = fields.series;\n        var seriesIx = fields.seriesIx;\n        var state = {\n            defaults: series._defaults,\n            excluded: [\n                \"data\", \"tooltip\", \"content\", \"template\",\n                \"visual\", \"toggle\", \"drilldownSeriesFactory\",\n                \"ariaTemplate\", \"ariaContent\"\n            ]\n        };\n\n        var doEval = this._evalSeries[seriesIx];\n        if (!defined(doEval)) {\n            this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n        }\n\n        var 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    HeatmapChart.prototype.pointType = function pointType () {\n        return HeatmapPoint;\n    };\n\n    HeatmapChart.prototype.pointOptions = function pointOptions (series, seriesIx) {\n        var options = this.seriesOptions[seriesIx];\n        if (!options) {\n            var 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 Object.assign({}, options);\n    };\n\n    HeatmapChart.prototype.createPoint = function createPoint (value, fields) {\n        var series = fields.series;\n        var pointOptions = this.pointOptions(series, fields.seriesIx);\n        var color = fields.color || series.color;\n\n        pointOptions.pattern = fields.pattern || pointOptions.pattern;\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            var scale = colorScale(color);\n            color = scale(value.value / this.valueRange.max);\n        }\n\n        var point = new HeatmapPoint(value, pointOptions);\n        point.color = color;\n\n        this.append(point);\n\n        return point;\n    };\n\n    HeatmapChart.prototype.seriesAxes = function seriesAxes (series) {\n        var xAxisName = series.xAxis;\n        var yAxisName = series.yAxis;\n        var plotArea = this.plotArea;\n        var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n        var 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: xAxis, yAxis: yAxis };\n    };\n\n    HeatmapChart.prototype.reflow = function reflow (targetBox) {\n        var this$1 = this;\n\n        var chartPoints = this.points;\n        var limit = !this.options.clip;\n        var pointIx = 0;\n\n\n        this.traverseDataPoints(function (value, fields) {\n            var point = chartPoints[pointIx++];\n            var ref = this$1.seriesAxes(fields.series);\n            var xAxis = ref.xAxis;\n            var yAxis = ref.yAxis;\n            var indexX = xAxis.categoryIndex(value.x);\n            var indexY = yAxis.categoryIndex(value.y);\n            var slotX = xAxis.getSlot(indexX, indexX, limit);\n            var slotY = yAxis.getSlot(indexY, indexY, limit);\n\n            if (point) {\n                if (slotX && slotY) {\n                    var pointSlot = this$1.pointSlot(slotX, slotY);\n                    point.reflow(pointSlot);\n                } else {\n                    point.visible = false;\n                }\n            }\n        });\n\n        this.box = targetBox;\n    };\n\n    HeatmapChart.prototype.pointSlot = function pointSlot (slotX, slotY) {\n        return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n    };\n\n    HeatmapChart.prototype.traverseDataPoints = function traverseDataPoints (callback) {\n        var this$1 = this;\n\n        var ref = this;\n        var series = ref.options.series;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var ref$1 = this$1.seriesAxes(currentSeries);\n            var xAxis = ref$1.xAxis;\n            var yAxis = ref$1.yAxis;\n            var xRange = xAxis.currentRangeIndices();\n            var yRange = yAxis.currentRangeIndices();\n\n            for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n                var ref$2 = this$1.plotArea.bindPoint(currentSeries, pointIx);\n                var value = ref$2.valueFields;\n                var fields = ref$2.fields;\n                var xIndex = xAxis.totalIndex(value.x);\n                var yIndex = yAxis.totalIndex(value.y);\n                var xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n                var 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$1\n                    }, fields));\n                }\n            }\n        }\n    };\n\n    HeatmapChart.prototype.formatPointValue = function formatPointValue (point, format) {\n        var value = point.value;\n        return this.chartService.format.auto(format, value.x, value.y, value.value);\n    };\n\n    HeatmapChart.prototype.animationPoints = function animationPoints () {\n        var points = this.points;\n        var result = [];\n        for (var idx = 0; idx < points.length; idx++) {\n            result.push((points[idx] || {}).marker);\n        }\n        return result;\n    };\n\n    return HeatmapChart;\n}(ChartElement));\nsetDefaultOptions(HeatmapChart, {\n    series: [],\n    tooltip: {\n        format: \"{0}, {1}: {2}\"\n    },\n    labels: {\n        format: \"{2}\"\n    },\n    clip: true\n});\n\nexport default HeatmapChart;\n","import { deepExtend, eventElement, grep, inArray, setDefaultOptions, createHashSet, cycleIndex } from '../../common';\nimport { DATE } from '../../common/constants';\nimport { CategoryAxis, DateCategoryAxis, Point } from '../../core';\nimport { dateEquals } from '../../date-utils';\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\nvar HeatmapPlotArea = (function (PlotAreaBase) {\n    function HeatmapPlotArea () {\n        PlotAreaBase.apply(this, arguments);\n    }\n\n    if ( PlotAreaBase ) HeatmapPlotArea.__proto__ = PlotAreaBase;\n    HeatmapPlotArea.prototype = Object.create( PlotAreaBase && PlotAreaBase.prototype );\n    HeatmapPlotArea.prototype.constructor = HeatmapPlotArea;\n\n    HeatmapPlotArea.prototype.initFields = function initFields () {\n        this.namedXAxes = {};\n        this.namedYAxes = {};\n    };\n\n    HeatmapPlotArea.prototype.render = function render (panes) {\n        if ( panes === void 0 ) panes = this.panes;\n\n        this.bindCategories();\n        this.createAxes(panes);\n        this.createCharts(panes);\n        this.createAxisLabels();\n    };\n\n    HeatmapPlotArea.prototype.bindCategories = function bindCategories () {\n        var this$1 = this;\n\n        var series = this.srcSeries || this.series;\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n            var data = currentSeries.data || [];\n            var ref = this$1.seriesAxes(currentSeries);\n            var xAxis = ref.xAxis;\n            var yAxis = ref.yAxis;\n\n            var xCategories = createHashSet(xAxis.categories || []);\n            var yCategories = createHashSet(yAxis.categories || []);\n\n            for (var pointIndex = 0; pointIndex < data.length; pointIndex++) {\n                var ref$1 = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n                var x = ref$1.x;\n                var y = ref$1.y;\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    HeatmapPlotArea.prototype.createCharts = function createCharts (panes) {\n        var this$1 = this;\n\n        var seriesByPane = this.groupSeriesByPane();\n\n        for (var i = 0; i < panes.length; i++) {\n            var pane = panes[i];\n            var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n            this$1.addToLegend(paneSeries);\n            var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n\n            if (!filteredSeries) {\n                continue;\n            }\n\n            this$1.createHeatmapChart(\n                filterSeriesByType(filteredSeries, [ HEATMAP ]),\n                pane\n            );\n        }\n    };\n\n    HeatmapPlotArea.prototype.createHeatmapChart = function createHeatmapChart (series, pane) {\n        var chart = new HeatmapChart(this, {\n            series: series\n        });\n\n        this.appendChart(chart, pane);\n    };\n\n    HeatmapPlotArea.prototype.seriesPaneName = function seriesPaneName (series) {\n        var options = this.options;\n        var xAxisName = series.xAxis;\n        var xAxisOptions = [].concat(options.xAxis);\n        var xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n        var yAxisName = series.yAxis;\n        var yAxisOptions = [].concat(options.yAxis);\n        var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n        var panes = options.panes || [ {} ];\n        var defaultPaneName = panes[0].name || \"default\";\n        var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n        return paneName;\n    };\n\n    HeatmapPlotArea.prototype.seriesAxes = function seriesAxes (series) {\n        var xAxis;\n        var yAxis;\n\n        var options = this.options;\n\n        var xAxisOptions = [].concat(options.xAxis);\n        var xAxisName = series.xAxis;\n        if (xAxisName) {\n            xAxis = xAxisOptions.find(function (axis) { return axis.name === xAxisName; });\n        } else {\n            xAxis = xAxisOptions[0];\n        }\n\n        var yAxisOptions = [].concat(options.yAxis);\n        var yAxisName = series.yAxis;\n        if (yAxisName) {\n            yAxis = yAxisOptions.find(function (axis) { return 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: xAxis, yAxis: yAxis };\n    };\n\n    HeatmapPlotArea.prototype.createAxisLabels = function createAxisLabels () {\n        var axes = this.axes;\n        for (var i = 0; i < axes.length; i++) {\n            axes[i].createLabels();\n        }\n    };\n\n    HeatmapPlotArea.prototype.createXYAxis = function createXYAxis (options, vertical, axisIndex) {\n        var axisName = options.name;\n        var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n        var 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        var firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n        var typeSamples = [ axisOptions.min, axisOptions.max, firstCategory ];\n        var series = this.series;\n\n        for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n            var currentSeries = series[seriesIx];\n            var seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n            if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n                var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n                typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n                break;\n            }\n        }\n\n        var inferredDate;\n\n        for (var i = 0; i < typeSamples.length; i++) {\n            if (typeSamples[i] instanceof Date) {\n                inferredDate = true;\n                break;\n            }\n        }\n\n        var axisType;\n        if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n            axisType = DateCategoryAxis;\n        } else {\n            axisType = CategoryAxis;\n        }\n\n        var 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.indexCategories();\n\n        return axis;\n    };\n\n    HeatmapPlotArea.prototype.createAxes = function createAxes (panes) {\n        var this$1 = this;\n\n        var options = this.options;\n        var xAxesOptions = [].concat(options.xAxis);\n        var xAxes = [];\n        var yAxesOptions = [].concat(options.yAxis);\n        var yAxes = [];\n\n        for (var idx = 0; idx < xAxesOptions.length; idx++) {\n            var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n            if (inArray(axisPane, panes)) {\n                xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n            }\n        }\n\n        for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n            var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n            if (inArray(axisPane$1, panes)) {\n                yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n            }\n        }\n\n        this.axisX = this.axisX || xAxes[0];\n        this.axisY = this.axisY || yAxes[0];\n    };\n\n    HeatmapPlotArea.prototype.removeAxis = function removeAxis (axis) {\n        var axisName = axis.options.name;\n\n        PlotAreaBase.prototype.removeAxis.call(this, 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    HeatmapPlotArea.prototype._dispatchEvent = function _dispatchEvent (chart, e, eventType) {\n        var coords = chart._eventCoordinates(e);\n        var point = new Point(coords.x, coords.y);\n        var allAxes = this.axes;\n        var length = allAxes.length;\n        var xValues = [];\n        var yValues = [];\n\n        for (var i = 0; i < length; i++) {\n            var axis = allAxes[i];\n            var 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    HeatmapPlotArea.prototype.updateAxisOptions = function updateAxisOptions$1 (axis, options) {\n        var vertical = axis.options.vertical;\n        var axes = this.groupAxes(this.panes);\n        var 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    HeatmapPlotArea.prototype.crosshairOptions = function crosshairOptions (axis) {\n        // Stack the crosshair above the series points.\n        return Object.assign({}, axis.options.crosshair, { zIndex: 0 });\n    };\n\n    HeatmapPlotArea.prototype._pointsByVertical = function _pointsByVertical (basePoint, offset) {\n        var this$1 = this;\n        if ( offset === void 0 ) offset = 0;\n\n        var normalizedOffset = this.axisX.options.reverse ? offset * -1 : offset;\n        var axisXItems = this.axisX.children;\n        var xIndex = this._getPointAxisXIndex(basePoint) + normalizedOffset;\n\n        xIndex = cycleIndex(xIndex, axisXItems.length);\n        var targetXValue = axisXItems[xIndex].value;\n\n        var points = this\n            .filterPoints(function (point) { return compareValues(point.pointData().x, targetXValue); })\n            .sort(function (a, b) { return this$1._getPointAxisYIndex(a) - this$1._getPointAxisYIndex(b); });\n\n        if (this.axisY.options.reverse) {\n            return points.reverse();\n        }\n\n        return points;\n    };\n\n    HeatmapPlotArea.prototype._pointsByHorizontal = function _pointsByHorizontal (basePoint, offset) {\n        var this$1 = this;\n        if ( offset === void 0 ) offset = 0;\n\n        var normalizedOffset = this.axisY.options.reverse ? offset * -1 : offset;\n        var axisYItems = this.axisY.children;\n        var yIndex = this._getPointAxisYIndex(basePoint) + normalizedOffset;\n\n        yIndex = cycleIndex(yIndex, axisYItems.length);\n        var targetYValue = axisYItems[yIndex].value;\n\n        var points = this\n            .filterPoints(function (point) { return compareValues(point.pointData().y, targetYValue); })\n            .sort(function (a, b) { return this$1._getPointAxisXIndex(a) - this$1._getPointAxisXIndex(b); });\n\n        if (this.axisX.options.reverse) {\n            return points.reverse();\n        }\n\n        return points;\n    };\n\n    HeatmapPlotArea.prototype._getPointAxisXIndex = function _getPointAxisXIndex (point) {\n        return this._getPointAxisIndex(this.axisX, point.pointData().x);\n    };\n\n    HeatmapPlotArea.prototype._getPointAxisYIndex = function _getPointAxisYIndex (point) {\n        return this._getPointAxisIndex(this.axisY, point.pointData().y);\n    };\n\n    HeatmapPlotArea.prototype._getPointAxisIndex = function _getPointAxisIndex (axis, pointValue) {\n        return axis.children.findIndex(function (axisItem) { return compareValues(pointValue, axisItem.value); });\n    };\n\n    return HeatmapPlotArea;\n}(PlotAreaBase));\n\nfunction compareValues(a, b) {\n    if (a instanceof Date && b instanceof Date) {\n        return dateEquals(a, b);\n    }\n\n    return a === b;\n}\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n    var 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, PYRAMID, 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, DRILLDOWN_FIELD, TRENDLINE_SERIES, PATTERN_FIELD } from './constants';\nimport { X, Y, VALUE } from '../common/constants';\n\nvar COLOR = \"color\";\nvar FIRST = \"first\";\nvar FROM = \"from\";\nvar MAX = \"max\";\nvar MIN = \"min\";\nvar NOTE_TEXT = \"noteText\";\nvar SUMMARY_FIELD = \"summary\";\nvar 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 ].concat( TRENDLINE_SERIES\n));\n\nPlotAreaFactory.current.register(XYPlotArea, [\n    SCATTER, SCATTER_LINE, BUBBLE ].concat( TRENDLINE_SERIES\n));\n\nPlotAreaFactory.current.register(PiePlotArea, [ PIE ]);\nPlotAreaFactory.current.register(DonutPlotArea, [ DONUT ]);\nPlotAreaFactory.current.register(FunnelPlotArea, [ FUNNEL, PYRAMID ]);\n\nPlotAreaFactory.current.register(PolarPlotArea, [\n    POLAR_AREA, POLAR_LINE, POLAR_SCATTER ].concat( TRENDLINE_SERIES\n));\n\nPlotAreaFactory.current.register(RadarPlotArea, [\n    RADAR_AREA, RADAR_COLUMN, RADAR_LINE ].concat( TRENDLINE_SERIES\n));\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, DRILLDOWN_FIELD, PATTERN_FIELD ]\n);\n\nSeriesBinder.current.register(\n    [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n    [ FROM, TO ], [ CATEGORY, COLOR, NOTE_TEXT, DRILLDOWN_FIELD, PATTERN_FIELD ]\n);\n\nSeriesBinder.current.register(\n    [ WATERFALL, HORIZONTAL_WATERFALL ],\n    [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD, DRILLDOWN_FIELD, PATTERN_FIELD ]\n);\n\nSeriesBinder.current.register([ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ], [ X, Y ], [ COLOR, DRILLDOWN_FIELD, PATTERN_FIELD ]);\nSeriesBinder.current.register([ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ], [ VALUE ], [ CATEGORY, COLOR, DRILLDOWN_FIELD, PATTERN_FIELD ]);\n\nSeriesBinder.current.register(\n    [ FUNNEL, PYRAMID ],\n    [ VALUE ], [ CATEGORY, COLOR, \"visibleInLegend\", \"visible\", DRILLDOWN_FIELD, PATTERN_FIELD ]\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, PATTERN_FIELD ]\n);\n\nSeriesBinder.current.register(\n    [ HEATMAP ],\n    [ X, Y, VALUE ], [ COLOR, NOTE_TEXT, PATTERN_FIELD ]\n);\n\nSeriesBinder.current.register(\n    [ CANDLESTICK, OHLC ],\n    [ \"open\", \"high\", \"low\", \"close\" ], [ CATEGORY, COLOR, \"downColor\", NOTE_TEXT, PATTERN_FIELD ]\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, DRILLDOWN_FIELD, PATTERN_FIELD ]\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, DRILLDOWN_FIELD, PATTERN_FIELD ]\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\", DRILLDOWN_FIELD, PATTERN_FIELD ]\n);\n","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 isDateAxis from './utils/is-date-axis';\nimport { ChartPane, ChartPlotArea, findAxisByName } from './api-elements';\n\nimport { X, Y, VALUE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SERIES_OPACITY,\n    ARROW_DOWN, ARROW_UP, ARROW_LEFT, ARROW_RIGHT, ARIA_ACTIVE_DESCENDANT, TAB, TOP, LEFT, BLACK,\n    ENTER, ESCAPE, BOTTOM } from '../common/constants';\nimport { addClass, removeClass, Class, setDefaultOptions, deepExtend, defined, find, isObject, isFunction, elementSize, elementOffset,\n    elementScale, elementStyles, eventCoordinates, bindEvents, unbindEvents, mousewheelDelta, FontLoader, inArray, round,\n    valueOrDefault, isString, cycleUp, cycleDown, hasOwnProperty, hasClasses } from '../common';\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, PYRAMID, COLUMN, MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE, SHOW_TOOLTIP, SERIES_HOVER,\n    SERIES_OVER, SERIES_LEAVE, SERIES_CLICK, DRILLDOWN, LEGEND_ITEM_CLICK } from './constants';\n\nimport './animations';\nimport './register-charts';\nimport { parseDateCategory } from './utils';\n\nvar AXIS_NAMES = [ CATEGORY, VALUE, X, Y ];\n\nvar MOUSEDOWN = \"mousedown\";\nvar MOUSEMOVE = \"mousemove\";\nvar CONTEXTMENU = \"contextmenu\";\nvar MOUSELEAVE = \"mouseleave\";\nvar KEYDOWN = \"keydown\";\nvar FOCUS = \"focus\";\nvar BLUR = \"blur\";\nvar MOUSEMOVE_DELAY = 20;\nvar NO_DATA_OVERLAY_TOP_CLASS = \"k-chart-overlay-top\";\n\nvar Chart = (function (Class) {\n    function Chart(element, userOptions, themeOptions, context) {\n        var this$1 = this;\n        if ( context === void 0 ) context = {};\n\n        Class.call(this);\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        var options = deepExtend({}, this.options, userOptions);\n        this._originalOptions = deepExtend({}, options);\n        this._theme = themeOptions;\n        this._initTheme(options, themeOptions);\n        this._focusState = {};\n\n        this._initHandlers();\n        this._initSurface();\n\n        this.bindCategories();\n        FontLoader.preloadFonts(userOptions, function () {\n            this$1.fontLoaded = true;\n            if (!this$1._destroyed) {\n                this$1.trigger('init');\n                this$1._redraw();\n                this$1._attachEvents();\n                this$1._restoreOverlayElement();\n            }\n        });\n    }\n\n    if ( Class ) Chart.__proto__ = Class;\n    Chart.prototype = Object.create( Class && Class.prototype );\n    Chart.prototype.constructor = Chart;\n\n    Chart.prototype._initElement = function _initElement (element) {\n        var this$1 = this;\n\n        this._setElementClass(element);\n        element.style.position = \"relative\";\n        element.tabIndex = element.getAttribute(\"tabindex\") ? element.getAttribute(\"tabindex\") : 0;\n        // To support user agents and assistive technologies based on the ARIA 1.0 specification, authors may wish to include the document role as a fallback value, in the form role=\"graphics-document document\".\n        element.setAttribute(\"role\", \"graphics-document document\");\n\n        for (var i = element.childNodes.length - 1; i >= 0; i--) {\n            var child = element.childNodes[i];\n\n            if (!hasClasses(child, \"k-chart-overlay\")) {\n                element.removeChild(child);\n            } else {\n                // this is necessary if the overlay is rendered server-side, e.g. in blazor\n                // but drawing the surface clears the contents of the element\n                // and thus the no data overlay is lost\n                this$1.overlayElement = child;\n            }\n        }\n\n        this.element = element;\n    };\n\n    Chart.prototype._setElementClass = function _setElementClass (element) {\n        addClass(element, \"k-chart\");\n    };\n\n    Chart.prototype._restoreOverlayElement = function _restoreOverlayElement () {\n        if (!this.overlayElement) {\n            return;\n        }\n\n        if (this._hasSeriesData()) {\n            this.overlayElement.style.display = \"none\";\n        } else {\n            if (!this.options.title || (this.options.title && this.options.title.position !== BOTTOM)) {\n                addClass(this.overlayElement, NO_DATA_OVERLAY_TOP_CLASS);\n            } else {\n                removeClass(this.overlayElement, NO_DATA_OVERLAY_TOP_CLASS);\n            }\n\n            this.overlayElement.style.display = \"\";\n        }\n\n        if (this.overlayElement.parentElement !== this.element) {\n            this.element.appendChild(this.overlayElement);\n        }\n    };\n\n    Chart.prototype._hasSeriesData = function _hasSeriesData () {\n        var series = this.options.series || [];\n        var hasData = series.length > 0 && series.some(function (x) { return x.data && x.data.length > 0; });\n        return hasData;\n    };\n\n    Chart.prototype._initTheme = function _initTheme (options, themeOptions) {\n        var seriesCopies = [];\n        var series = options.series || [];\n\n        for (var 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        if (isString(options.title)) {\n            options.title = { text: options.title };\n        }\n\n        this.options = deepExtend({}, themeOptions, options);\n        this.applySeriesColors();\n    };\n\n    Chart.prototype.getSize = function getSize () {\n        var chartArea = this.options.chartArea || {};\n        var width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n        var 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    Chart.prototype.resize = function resize (force) {\n        var size = this.getSize();\n        var currentSize = this._size;\n        var 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, function (s) { return !s.visible; })) {\n            this._destroySelections();\n            this._setupSelection();\n        }\n    };\n\n    Chart.prototype._resize = function _resize () {\n        this._noTransitionsRedraw();\n    };\n\n    Chart.prototype.redraw = function redraw (paneName) {\n        this.applyDefaults(this.options);\n        this.applySeriesColors();\n\n        if (paneName) {\n            var plotArea = this._model._plotArea;\n            var pane = plotArea.findPane(paneName);\n            plotArea.redraw(pane);\n        } else {\n            this._redraw();\n        }\n    };\n\n    Chart.prototype.getAxis = function getAxis (name) {\n        return findAxisByName(name, this._plotArea.axes);\n    };\n\n    Chart.prototype.findAxisByName = function findAxisByName (name) {\n        return this.getAxis(name);\n    };\n\n    Chart.prototype.findPaneByName = function findPaneByName (name) {\n        var panes = this._plotArea.panes;\n\n        for (var idx = 0; idx < panes.length; idx++) {\n            if (panes[idx].options.name === name) {\n                return new ChartPane(panes[idx]);\n            }\n        }\n    };\n\n    Chart.prototype.findPaneByIndex = function findPaneByIndex (idx) {\n        var panes = this._plotArea.panes;\n        if (panes[idx]) {\n            return new ChartPane(panes[idx]);\n        }\n    };\n\n    Chart.prototype.plotArea = function plotArea () {\n        return new ChartPlotArea(this._plotArea);\n    };\n\n    Chart.prototype.toggleHighlight = function toggleHighlight (show, filter) {\n        var plotArea = this._plotArea;\n        var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n        var points;\n\n        if (isFunction(filter)) {\n            points = plotArea.filterPoints(filter);\n        } else {\n            var 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 (inArray(firstSeries.type, [ PIE, FUNNEL, PYRAMID ])) {\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    Chart.prototype.togglePointsHighlight = function togglePointsHighlight (show, points) {\n        var highlight = this._highlight;\n        for (var idx = 0; idx < points.length; idx++) {\n            highlight.togglePointHighlight(points[idx], show);\n        }\n    };\n\n    Chart.prototype.showTooltip = function showTooltip (filter) {\n        var shared = this._sharedTooltip();\n        var ref = this;\n        var tooltip = ref._tooltip;\n        var plotArea = ref._plotArea;\n        var 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                var points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n                tooltip.showAt(points);\n            }\n        } else if (point) {\n            tooltip.show(point);\n        }\n    };\n\n    Chart.prototype.hideTooltip = function hideTooltip () {\n        this._tooltip.hide();\n    };\n\n    Chart.prototype._initSurface = function _initSurface () {\n        var surface = this.surface;\n        var wrap = this._surfaceWrap();\n\n        var 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        // Override the surface _kendoExportVisual in order to accept export options with size.\n        this.element._kendoExportVisual = this._kendoExportVisual.bind(this);\n    };\n\n    Chart.prototype._surfaceWrap = function _surfaceWrap () {\n        return this.element;\n    };\n\n    Chart.prototype._redraw = function _redraw () {\n        var model = this._getModel();\n        this._size = {\n            width: model.options.width,\n            height: model.options.height\n        };\n\n        this._destroyView();\n\n        this._setElementAccessibilityAttributes();\n\n        this._model = model;\n        this._plotArea = model._plotArea;\n        this._legend = model._legend;\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        this._setComputedStyles();\n\n        this.trigger(RENDER);\n        triggerPaneRender(this._plotArea.panes);\n\n        if (!this._navState) {\n            this._cancelDomEvents();\n        }\n\n        this._redrawFocusHighlight();\n    };\n\n    Chart.prototype._setComputedStyles = function _setComputedStyles () {\n        var titleHeight = this.titleHeight();\n        this.element.style.setProperty('--kendo-chart-computed-title-height', (titleHeight + \"px\"));\n    };\n\n    Chart.prototype._redrawFocusHighlight = function _redrawFocusHighlight () {\n        if (this._destroyed) {\n            return;\n        }\n\n        var ref = this;\n        var ref_focusState = ref._focusState;\n        var legendInFocus = ref_focusState.legendInFocus;\n        var preserveHighlight = ref_focusState.preserveHighlight;\n\n        if (legendInFocus && preserveHighlight) {\n            this._focusElement(this._getFocusedLegendItem(), false);\n            this._focusState.preserveHighlight = false;\n        }\n    };\n\n    Chart.prototype._setElementAccessibilityAttributes = function _setElementAccessibilityAttributes () {\n        var titleOptions = this.options.title;\n        var title = isString(titleOptions) ? titleOptions : (titleOptions.description || titleOptions.text);\n\n        if (title) {\n            this.element.setAttribute(\"aria-roledescription\", title);\n        }\n    };\n\n    Chart.prototype._kendoExportVisual = function _kendoExportVisual (size) {\n        if (size && size.width && size.height) {\n            var chartArea = this._originalOptions.chartArea || {};\n            var exportOptions = {\n                width: chartArea.width || size.width,\n                height: chartArea.height || size.height\n            };\n\n            return this.exportVisual(exportOptions);\n        }\n\n        return this.exportVisual();\n    };\n\n    Chart.prototype.exportVisual = function exportVisual (exportOptions) {\n        var visual;\n        if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n            var currentOptions = this.options;\n            var 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            var 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    Chart.prototype._sharedTooltip = function _sharedTooltip () {\n        return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n    };\n\n    Chart.prototype._createPannable = function _createPannable () {\n        var options = this.options;\n        if (options.pannable !== false) {\n            this._pannable = new Pannable(this._plotArea, options.pannable);\n        }\n    };\n\n    Chart.prototype._createZoomSelection = function _createZoomSelection () {\n        var zoomable = this.options.zoomable;\n        var selection = (zoomable || {}).selection;\n        if (zoomable !== false && selection !== false) {\n            this._zoomSelection = new ZoomSelection(this, selection);\n        }\n    };\n\n    Chart.prototype._createMousewheelZoom = function _createMousewheelZoom () {\n        var zoomable = this.options.zoomable;\n        var mousewheel = (zoomable || {}).mousewheel;\n        if (zoomable !== false && mousewheel !== false) {\n            this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n        }\n    };\n\n    Chart.prototype._toggleDragZoomEvents = function _toggleDragZoomEvents () {\n        var pannable = this.options.pannable;\n        var zoomable = this.options.zoomable;\n        var selection = (zoomable || {}).selection;\n        var mousewheel = (zoomable || {}).mousewheel;\n        var allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ]);\n        var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([ ZOOM_START, ZOOM, ZOOM_END ]);\n        var 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    Chart.prototype._toggleDomEvents = function _toggleDomEvents (drag, zoom) {\n        var 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    Chart.prototype._createTooltip = function _createTooltip () {\n        var ref = this;\n        var tooltipOptions = ref.options.tooltip;\n        var 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    Chart.prototype._createSharedTooltip = function _createSharedTooltip (options) {\n        return new SharedTooltip(this._plotArea, options);\n    };\n\n    Chart.prototype.applyDefaults = function applyDefaults (options, themeOptions) {\n        applyAxisDefaults(options, themeOptions);\n        applySeriesDefaults(options, themeOptions);\n    };\n\n    Chart.prototype.applySeriesColors = function applySeriesColors () {\n        var options = this.options;\n        var series = options.series;\n        var colors = options.seriesColors || [];\n\n        for (var i = 0; i < series.length; i++) {\n            var currentSeries = series[i];\n            var seriesColor = colors[i % colors.length];\n            var defaults = currentSeries._defaults;\n\n            currentSeries.color = currentSeries.color || seriesColor;\n            if (defaults) {\n                defaults.color = defaults.color || seriesColor;\n            }\n        }\n    };\n\n    Chart.prototype._getModel = function _getModel () {\n        var options = this.options;\n        var plotArea = this._createPlotArea();\n        var model = new RootElement(this._modelOptions());\n        model.chart = this;\n        model._plotArea = plotArea;\n\n        var title = Title.buildTitle(options.title);\n        var subtitle = Title.buildTitle(options.subtitle, {\n            align: options.title.align,\n            position: options.title.position\n        });\n        model.append.apply(model, Title.orderTitles([title, subtitle]));\n\n        if (options.legend && options.legend.visible) {\n            var legend = new Legend(plotArea.options.legend, this.chartService);\n            model.append(legend);\n            model._legend = legend;\n        }\n        model.append(plotArea);\n        model.reflow();\n\n        this._setTitleBox(title, subtitle);\n\n        return model;\n    };\n\n    Chart.prototype._setTitleBox = function _setTitleBox (title, subtitle) {\n        if (!title && !subtitle) {\n            return;\n        }\n\n        this._titleBox = (title || subtitle).box.clone();\n\n        var titlePosition = title ? title.options.position : '';\n        var subtitlePosition = subtitle ? subtitle.options.position : '';\n        var samePosition = titlePosition === subtitlePosition;\n        var subtitleAtTop = subtitlePosition !== BOTTOM;\n\n        if (samePosition && subtitle) {\n            this._titleBox.wrap(subtitle.box);\n        } else if (title && subtitle && subtitleAtTop) {\n            this._titleBox = subtitle.box.clone();\n        }\n    };\n\n    Chart.prototype._modelOptions = function _modelOptions () {\n        var options = this.options;\n        var 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    Chart.prototype._createPlotArea = function _createPlotArea (skipSeries) {\n        var options = this.options;\n\n        var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n\n        return plotArea;\n    };\n\n    Chart.prototype._setupSelection = function _setupSelection () {\n        var this$1 = this;\n\n        var ref = this;\n        var axes = ref._plotArea.axes;\n        var selections = this._selections = [];\n\n        for (var i = 0; i < axes.length; i++) {\n            var axis = axes[i];\n            var options = axis.options;\n            if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n                var range = axis.range();\n\n                var selection = new Selection(this$1, axis,\n                    deepExtend({ min: range.min, max: range.max }, options.select)\n                );\n\n                selections.push(selection);\n            }\n        }\n    };\n\n    Chart.prototype._selectStart = function _selectStart (e) {\n        return this.trigger(SELECT_START, e);\n    };\n\n    Chart.prototype._select = function _select (e) {\n        return this.trigger(SELECT, e);\n    };\n\n    Chart.prototype._selectEnd = function _selectEnd (e) {\n        return this.trigger(SELECT_END, e);\n    };\n\n    Chart.prototype._initHandlers = function _initHandlers () {\n        this._clickHandler = this._click.bind(this);\n        this._keydownHandler = this._keydown.bind(this);\n        this._focusHandler = this._focus.bind(this);\n        this._blurHandler = this._blur.bind(this);\n        this._mousedownHandler = this._mousedown.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    Chart.prototype.addObserver = function addObserver (observer) {\n        if (observer) {\n            this.observers.push(observer);\n        }\n    };\n\n    Chart.prototype.removeObserver = function removeObserver (observer) {\n        var index = this.observers.indexOf(observer);\n        if (index >= 0) {\n            this.observers.splice(index, 1);\n        }\n    };\n\n    Chart.prototype.requiresHandlers = function requiresHandlers (eventNames) {\n        var observers = this.observers;\n        for (var idx = 0; idx < observers.length; idx++) {\n            if (observers[idx].requiresHandlers(eventNames)) {\n                return true;\n            }\n        }\n    };\n\n    Chart.prototype.trigger = function trigger (name, args) {\n        if ( args === void 0 ) args = {};\n\n        args.sender = this;\n\n        if (name === SHOW_TOOLTIP) {\n            args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n        } else if (name === SERIES_OVER) {\n            this._updateDrilldownPoint(args.point);\n        } else if (name === SERIES_LEAVE) {\n            this._resetDrilldownPoint();\n        } else if (name === SERIES_CLICK) {\n            this._focusPoint(args.point);\n            this._startDrilldown(args.point);\n        } else if (name === LEGEND_ITEM_CLICK) {\n            this._focusLegendItem(args);\n        }\n\n        var observers = this.observers;\n        var isDefaultPrevented = false;\n        for (var 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    Chart.prototype.titleHeight = function titleHeight () {\n        if (!this._titleBox) {\n            return 0;\n        }\n\n        return this._titleBox.height();\n    };\n\n    Chart.prototype._attachEvents = function _attachEvents () {\n        var obj, obj$1;\n\n        var element = this.element;\n\n        this._touchAction = element.style.touchAction;\n\n        bindEvents(element, ( obj = {}, obj[ CONTEXTMENU ] = this._clickHandler, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj[ MOUSELEAVE ] = this._mouseleaveHandler, obj[ KEYDOWN ] = this._keydownHandler, obj[ MOUSEDOWN ] = this._mousedownHandler, obj[ FOCUS ] = this._focusHandler, obj[ BLUR] = this._blurHandler, obj ));\n\n        if (this._shouldAttachMouseMove()) {\n            bindEvents(element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\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    Chart.prototype._mouseleave = function _mouseleave (e) {\n        if (this._hoveredPoint) {\n            this._hoveredPoint.out(this, e);\n            this._hoveredPoint = null;\n        }\n\n        if (this._plotAreaHovered) {\n            this._plotAreaHovered = false;\n            this.trigger(PLOT_AREA_LEAVE);\n        }\n\n        if (this._hasInactiveOpacity() && this._activeChartInstance) {\n            this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n            this._updateSeriesOpacity(null, true);\n        }\n    };\n\n    Chart.prototype._cancelDomEvents = function _cancelDomEvents () {\n        if (this.domEvents && this.domEvents.cancel) {\n            this.domEvents.cancel();\n        }\n    };\n\n    Chart.prototype._gesturestart = function _gesturestart (e) {\n        if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n            this._gestureDistance = e.distance;\n            this._unsetActivePoint();\n            this._clearFocusedElement();\n            this.surface.suspendTracking();\n        }\n    };\n\n    Chart.prototype._gestureend = function _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    Chart.prototype._gesturechange = function _gesturechange (e) {\n        var mousewheelZoom = this._mousewheelZoom;\n\n        if (mousewheelZoom && !this._stopChartHandlers(e)) {\n            e.preventDefault();\n            var previousGestureDistance = this._gestureDistance;\n            var 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                var args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n                if (this._zooming || !this.trigger(ZOOM_START, args)) {\n                    var coords = this._eventCoordinates(e);\n\n                    if (!this._zooming) {\n                        this._zooming = true;\n                    }\n\n                    var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\n                    if (ranges && !this.trigger(ZOOM, args)) {\n                        mousewheelZoom.zoom();\n                    }\n                }\n            }\n        }\n    };\n\n    Chart.prototype._mouseout = function _mouseout (e) {\n        if (e.element) {\n            var element = this._drawingChartElement(e.element, e);\n\n            if (element && element.leave) {\n                element.leave(this, e.originalEvent);\n            }\n        }\n    };\n\n    Chart.prototype._start = function _start (e) {\n        var 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._clearFocusedElement();\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    Chart.prototype._move = function _move (e) {\n        var ref = this;\n        var state = ref._navState;\n        var pannable = ref._pannable;\n\n        if (this._stopChartHandlers(e)) {\n            return;\n        }\n\n        if (pannable) {\n            var ranges = pannable.move(e);\n\n            if (ranges && !this.trigger(DRAG, { axisRanges: ranges, originalEvent: e })) {\n                pannable.pan();\n            }\n        } else if (state) {\n            var ranges$1 = {};\n            var axes = state.axes;\n\n            for (var i = 0; i < axes.length; i++) {\n                var currentAxis = axes[i];\n                var axisName = currentAxis.options.name;\n                if (axisName) {\n                    var axis = currentAxis.options.vertical ? e.y : e.x;\n                    var delta = axis.startLocation - axis.location;\n\n                    if (delta !== 0) {\n                        ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n                    }\n                }\n            }\n\n            state.axisRanges = ranges$1;\n            this.trigger(DRAG, {\n                axisRanges: ranges$1,\n                originalEvent: e\n            });\n        }\n\n        if (this._zoomSelection) {\n            this._zoomSelection.move(e);\n        }\n    };\n\n    Chart.prototype._end = function _end (e) {\n        if (this._stopChartHandlers(e)) {\n            return;\n        }\n\n        var 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            var 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    Chart.prototype._stopChartHandlers = function _stopChartHandlers (e) {\n        var selections = this._selections || [];\n        if (!selections.length) {\n            return false;\n        }\n\n        var coords = this._eventCoordinates(e);\n        var pane = this._plotArea.paneByPoint(coords);\n        if (pane) {\n            for (var idx = 0; idx < selections.length; idx++) {\n                if (selections[idx].onPane(pane)) {\n                    return true;\n                }\n            }\n        }\n    };\n\n    Chart.prototype._mousewheelZoomRate = function _mousewheelZoomRate () {\n        var zoomable = this.options.zoomable;\n        var mousewheel = (zoomable || {}).mousewheel || {};\n        return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n    };\n\n    Chart.prototype._mousewheel = function _mousewheel (e) {\n        var this$1 = this;\n\n        var delta = mousewheelDelta(e);\n        var mousewheelZoom = this._mousewheelZoom;\n        var coords = this._eventCoordinates(e);\n\n        if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n            return;\n        }\n\n        if (mousewheelZoom) {\n            var 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._clearFocusedElement();\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(function () {\n                    this$1.trigger(ZOOM_END, args);\n                    this$1._zooming = false;\n                    if (this$1.surface) {\n                        this$1.surface.resumeTracking();\n                    }\n                }, MOUSEWHEEL_DELAY);\n            }\n        } else {\n            var state = this._navState;\n            if (!state) {\n                var prevented = this._startNavigation(e, coords, ZOOM_START);\n                if (!prevented) {\n                    state = this._navState;\n                }\n            }\n\n            if (state) {\n                var totalDelta = state.totalDelta || delta;\n                state.totalDelta = totalDelta + delta;\n\n                var axes = this._navState.axes;\n                var ranges = {};\n\n                for (var i = 0; i < axes.length; i++) {\n                    var currentAxis = axes[i];\n                    var axisName = currentAxis.options.name;\n                    if (axisName) {\n                        ranges[axisName] = currentAxis.scaleRange(-totalDelta * this$1._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(function () {\n                    this$1._endNavigation(e, ZOOM_END);\n                }, MOUSEWHEEL_DELAY);\n            }\n        }\n    };\n\n    Chart.prototype._startNavigation = function _startNavigation (e, coords, chartEvent) {\n        var plotArea = this._model._plotArea;\n        var pane = plotArea.findPointPane(coords);\n        var axes = plotArea.axes.slice(0);\n\n        if (!pane) {\n            return;\n        }\n\n        var ranges = axisRanges(axes);\n\n        var 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._clearFocusedElement();\n            this._navState = {\n                axisRanges: ranges,\n                pane: pane,\n                axes: axes\n            };\n        }\n    };\n\n    Chart.prototype._endNavigation = function _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    Chart.prototype._getChartElement = function _getChartElement (e, match) {\n        var element = this.surface.eventTarget(e);\n        if (element) {\n            return this._drawingChartElement(element, e, match);\n        }\n    };\n\n    Chart.prototype._drawingChartElement = function _drawingChartElement (element, e, match) {\n        var current = element;\n        var 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    Chart.prototype._eventCoordinates = function _eventCoordinates (e) {\n        var coordinates = eventCoordinates(e);\n        return this._toModelCoordinates(coordinates.x, coordinates.y);\n    };\n\n    Chart.prototype._elementPadding = function _elementPadding () {\n        if (!this._padding) {\n            var ref = elementStyles(this.element, [ \"paddingLeft\", \"paddingTop\" ]);\n            var paddingLeft = ref.paddingLeft;\n            var paddingTop = ref.paddingTop;\n            this._padding = {\n                top: paddingTop,\n                left: paddingLeft\n            };\n        }\n\n        return this._padding;\n    };\n\n    Chart.prototype._toDocumentCoordinates = function _toDocumentCoordinates (point) {\n        var padding = this._elementPadding();\n        var 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    Chart.prototype._toModelCoordinates = function _toModelCoordinates (clientX, clientY) {\n        var element = this.element;\n        var offset = elementOffset(element);\n        var padding = this._elementPadding();\n        var inverseTransform = elementScale(element).invert();\n        var 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    Chart.prototype._tap = function _tap (e) {\n        var this$1 = this;\n\n        var drawingElement = this.surface.eventTarget(e);\n        var element = this._drawingChartElement(drawingElement, e);\n        var 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(function () {\n            this$1.handlingTap = false;\n        }, 0);\n    };\n\n    Chart.prototype._click = function _click (e) {\n        var element = this._getChartElement(e);\n        this._propagateClick(element, e);\n    };\n\n    Chart.prototype._propagateClick = function _propagateClick (element, e) {\n        var this$1 = this;\n\n        var current = element;\n        while (current) {\n            if (current.click) {\n                current.click(this$1, e);\n            }\n\n            current = current.parent;\n        }\n    };\n\n    Chart.prototype._isLegendBeforeChart = function _isLegendBeforeChart () {\n        var ref = this;\n        var legendPosition = ref.options.legend.position;\n        var legend = ref._legend;\n\n        return legend && legend.hasItems() && (legendPosition === TOP || legendPosition === LEFT);\n    };\n\n    Chart.prototype._focus = function _focus () {\n        if (!this._preventInitialPointFocus) {\n            if (this._isLegendBeforeChart()) {\n                this._focusFirstLegendItem();\n            } else {\n                this._focusFirstPoint();\n            }\n        }\n\n        this._preventInitialPointFocus = false;\n    };\n\n    Chart.prototype._keydown = function _keydown (e) {\n        var ref = this;\n        var ref_focusState = ref._focusState;\n        var legendInFocus = ref_focusState.legendInFocus;\n        var focusedElement = ref_focusState.focusedElement;\n        var legend = ref._legend;\n\n        if (e.key === TAB) {\n            this._clearFocusedElement();\n            var isLegendBeforeChart = this._isLegendBeforeChart();\n\n            if (legendInFocus && isLegendBeforeChart !== e.shiftKey) {\n                this._navigatePoints(e);\n            } else if (!legendInFocus && isLegendBeforeChart === e.shiftKey && legend.hasItems()) {\n                this._navigateLegend(e);\n            }\n        } else if (e.key === ESCAPE) {\n            if (focusedElement) {\n                e.stopPropagation();\n            }\n\n            if (this._tooltip && this._tooltip.visible) {\n                this._hideTooltip();\n            } else {\n                this._blur();\n            }\n        } else if (e.key === ENTER) {\n            if (focusedElement) {\n                this._focusState.preserveHighlight = true;\n                this._propagateClick(focusedElement, e);\n                this._focusElement(focusedElement);\n            }\n        } else if (!legendInFocus) {\n            this._navigatePoints(e);\n        } else {\n            this._navigateLegend(e);\n        }\n    };\n\n    Chart.prototype._navigatePoints = function _navigatePoints (e) {\n        var this$1 = this;\n\n        var ref = this;\n        var focusState = ref._focusState;\n        var plotArea = ref._plotArea;\n\n        focusState.legendInFocus = false;\n\n        if (!focusState.focusedElement) {\n            this._focusFirstPoint();\n            e.preventDefault();\n            return;\n        }\n\n        var moveFocus = function (point) {\n            focusState.focusedPoint = point;\n\n            this$1._focusElement(focusState.focusedPoint);\n            this$1._displayTooltip(point);\n            e.preventDefault();\n        };\n\n        switch (e.key) {\n            case ARROW_RIGHT:\n                moveFocus(plotArea.getPointToTheRight(focusState.focusedPoint));\n                break;\n            case ARROW_LEFT:\n                moveFocus(plotArea.getPointToTheLeft(focusState.focusedPoint));\n                break;\n            case ARROW_DOWN:\n                moveFocus(plotArea.getPointBelow(focusState.focusedPoint));\n                break;\n            case ARROW_UP:\n                moveFocus(plotArea.getPointAbove(focusState.focusedPoint));\n                break;\n            default:\n                break;\n        }\n    };\n\n    Chart.prototype._navigateLegend = function _navigateLegend (e) {\n        var this$1 = this;\n\n        var ref = this;\n        var focusState = ref._focusState;\n        var legend = ref._legend;\n        var rtl = ref.chartService.rtl;\n\n        focusState.legendInFocus = true;\n\n        if (!focusState.focusedElement) {\n            this._focusFirstLegendItem();\n            e.preventDefault();\n            return;\n        }\n\n        var itemsLength = legend.getItems().length;\n        var moveFocus = function (cycleFunc) {\n            focusState.focusedLegendItemIndex = cycleFunc(\n                focusState.focusedLegendItemIndex,\n                itemsLength\n            );\n            this$1._focusElement(this$1._getFocusedLegendItem());\n            e.preventDefault();\n        };\n\n        switch (e.key) {\n            case ARROW_UP:\n            case ARROW_LEFT:\n                moveFocus(rtl ? cycleUp : cycleDown);\n                break;\n            case ARROW_DOWN:\n            case ARROW_RIGHT:\n                moveFocus(rtl ? cycleDown : cycleUp);\n                break;\n            default:\n                break;\n        }\n    };\n\n    Chart.prototype._focusFirstPoint = function _focusFirstPoint () {\n        var point = this._focusState.focusedPoint = this._plotArea.getFirstPoint();\n\n        if (point) {\n            this._focusElement(point);\n            this._displayTooltip(point);\n        }\n    };\n\n    Chart.prototype._hasFocus = function _hasFocus () {\n        return this.element.ownerDocument.activeElement === this.element;\n    };\n\n    Chart.prototype._mousedown = function _mousedown () {\n        if (!this._hasFocus()) {\n            this._preventInitialPointFocus = true;\n        }\n    };\n\n    Chart.prototype._focusChart = function _focusChart () {\n        if (!this._hasFocus()) {\n            this._preventInitialPointFocus = true;\n            this.element.focus();\n        }\n    };\n\n    Chart.prototype._focusPoint = function _focusPoint (point) {\n        this._focusState.focusedPoint = point;\n\n        this._focusChart();\n\n        this._focusElement(point, true);\n    };\n\n    Chart.prototype._focusFirstLegendItem = function _focusFirstLegendItem () {\n        var ref = this;\n        var focusState = ref._focusState;\n\n        focusState.focusedLegendItemIndex = 0;\n        this._focusElement(this._getFocusedLegendItem());\n        focusState.legendInFocus = true;\n\n        this._hideTooltip();\n    };\n\n    Chart.prototype._focusLegendItem = function _focusLegendItem (args) {\n        var ref = this;\n        var focusState = ref._focusState;\n\n        focusState.focusedLegendItemIndex = this._legend\n            .getItems()\n            .findIndex(function (x) { return x.options.series.index === args.seriesIndex\n                && x.options.pointIndex === args.pointIndex; });\n\n        focusState.legendInFocus = true;\n\n        this._focusChart();\n\n        this._focusElement(this._getFocusedLegendItem(), true);\n    };\n\n    Chart.prototype._getFocusedLegendItem = function _getFocusedLegendItem () {\n        var ref = this;\n        var focusState = ref._focusState;\n        var legend = ref._legend;\n\n        return legend.getItems()[focusState.focusedLegendItemIndex];\n    };\n\n    Chart.prototype._focusElement = function _focusElement (element, omitHighlight) {\n        var ref = this;\n        var focusState = ref._focusState;\n\n        this._clearFocusedElement();\n\n        if (!element) {\n            return;\n        }\n\n        focusState.focusedElement = element;\n\n        this._setElementActiveDescendant(element);\n\n        if (!omitHighlight) {\n            element.focusVisual();\n\n            if (focusState.legendInFocus) {\n                var options = element.options;\n\n                this._showSeriesInactiveOpacity(options.series.index, options.pointIndex);\n            } else {\n                this._showInactiveOpacity(element);\n            }\n        }\n    };\n\n    Chart.prototype._clearFocusedElement = function _clearFocusedElement () {\n        var ref = this;\n        var focusState = ref._focusState;\n\n        if (!focusState) {\n            return;\n        }\n\n        if (focusState.focusedElement && focusState.focusedElement.clearFocusFromVisual) {\n            focusState.focusedElement.clearFocusFromVisual();\n            this._clearElementActiveDescendant();\n        }\n\n        focusState.focusedElement = null;\n    };\n\n    Chart.prototype._setElementActiveDescendant = function _setElementActiveDescendant (element) {\n        if (this.options.renderAs === \"canvas\") {\n            this._pseudoFocusedElement = this._createPseudoFocusedElement(element);\n            this.element.append(this._pseudoFocusedElement);\n        }\n\n        this.element.setAttribute(ARIA_ACTIVE_DESCENDANT, element._id);\n    };\n\n    Chart.prototype._clearElementActiveDescendant = function _clearElementActiveDescendant () {\n        if (this._pseudoFocusedElement) {\n            this._pseudoFocusedElement.remove();\n            this._pseudoFocusedElement = null;\n        }\n\n        this.element.removeAttribute(ARIA_ACTIVE_DESCENDANT);\n    };\n\n    Chart.prototype._createPseudoFocusedElement = function _createPseudoFocusedElement (element) {\n        var pseudoElement = document.createElement(\"div\");\n        var accessibilityOptions = element.options.accessibility;\n\n        pseudoElement.id = element._id;\n        pseudoElement.setAttribute(\"aria-label\", element.getAriaLabelText());\n        pseudoElement.setAttribute(\"role\", accessibilityOptions.role);\n        pseudoElement.setAttribute(\"aria-roledescription\", accessibilityOptions.ariaRoleDescription);\n\n        var checked = accessibilityOptions.ariaChecked;\n        if (defined(checked)) {\n            pseudoElement.setAttribute(\"aria-checked\", checked);\n        }\n\n        return pseudoElement;\n    };\n\n    Chart.prototype._blur = function _blur () {\n        this._focusState.legendInFocus = false;\n        this._clearFocusedElement();\n        this._hideInactiveOpacity();\n    };\n\n    Chart.prototype._startHover = function _startHover (element, e) {\n        if (this._suppressHover) {\n            return false;\n        }\n\n        var point = this._drawingChartElement(element, e, function(element) {\n            return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n        });\n\n        var activePoint = this._activePoint;\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                this._showInactiveOpacity(point);\n            }\n        }\n\n        return point;\n    };\n\n    Chart.prototype._displayTooltip = function _displayTooltip (point) {\n        var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n        if (tooltipOptions.visible) {\n            if (this._sharedTooltip() && point.box) {\n                this._trackSharedTooltip(point.box.center(), {});\n            } else {\n                this._tooltip.show(point);\n            }\n        }\n    };\n\n    Chart.prototype._hideTooltip = function _hideTooltip () {\n        if (this._tooltip) {\n            this._tooltip.hide();\n        }\n    };\n\n    Chart.prototype._displayInactiveOpacity = function _displayInactiveOpacity (activePoint, multipleSeries, highlightPoints) {\n        var 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            var 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    Chart.prototype._getInactivePoints = function _getInactivePoints (activePoint, chartInstance) {\n        var allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n\n        return allPoints.filter(function (point) { return point !== activePoint; });\n    };\n\n    Chart.prototype._getAllPointsOfType = function _getAllPointsOfType (container, type) {\n        var this$1 = this;\n\n        var points = [];\n\n        for (var i = 0; i < container.children.length; i++) {\n            var 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$1._getAllPointsOfType(element, type));\n            }\n        }\n\n        return points;\n    };\n\n    Chart.prototype._updateHoveredPoint = function _updateHoveredPoint (point, e) {\n        var 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    Chart.prototype._updateDrilldownPoint = function _updateDrilldownPoint (point) {\n        if (!point || !point.series) {\n            return;\n        }\n\n        var ref = SeriesBinder.current.bindPoint(point.series, null, point.dataItem);\n        var fields = ref.fields;\n        if (fields.drilldown) {\n            this._drilldownState = { cursor: this.element.style.cursor };\n            this.element.style.cursor = 'pointer';\n        }\n    };\n\n    Chart.prototype._resetDrilldownPoint = function _resetDrilldownPoint () {\n        if (this._drilldownState) {\n            this.element.style.cursor = this._drilldownState.cursor;\n            this._drilldownState = null;\n        }\n    };\n\n    Chart.prototype._startDrilldown = function _startDrilldown (point) {\n        if (!point || !point.series) {\n            return;\n        }\n\n        var series = point.series;\n        var ref = SeriesBinder.current.bindPoint(series, null, point.dataItem);\n        var fields = ref.fields;\n        var value = fields.drilldown;\n        if (value) {\n            var args = { series: series, point: point, value: value, sender: this };\n            this.trigger(DRILLDOWN, args);\n        }\n    };\n\n    Chart.prototype._updateSeriesOpacity = function _updateSeriesOpacity (point, resetOpacity) {\n        var this$1 = this;\n\n        var plotArea = this._plotArea;\n        var length = plotArea.series.length;\n\n        for (var i = 0; i < length; i++) {\n            var currSeries = plotArea.series[i];\n            var defaultOpacity = this$1._getDefaultOpacityForSeries(currSeries);\n            var inactiveOpacity = this$1._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    Chart.prototype._applySeriesOpacity = function _applySeriesOpacity (elements, activeSeries, reset, series) {\n        var this$1 = this;\n\n        for (var i = 0; i < elements.length; i++) {\n            var element = elements[i];\n            var currSeries = element.series || series;\n            var shouldHighlight = currSeries && (currSeries.highlight || {}).visible;\n\n            if (shouldHighlight && element.visual) {\n                var 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$1._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n            }\n        }\n    };\n\n    Chart.prototype._chartInstanceFromPoint = function _chartInstanceFromPoint (point) {\n        var chartInstance = point.parent;\n\n        while (chartInstance && !chartInstance.plotArea) {\n            chartInstance = chartInstance.parent;\n        }\n\n        return chartInstance;\n    };\n\n    Chart.prototype._showInactiveOpacity = function _showInactiveOpacity (point) {\n        var multipleSeries = this._plotArea.series.length > 1;\n        var hasInactiveOpacity = this._hasInactiveOpacity();\n\n        if (hasInactiveOpacity) {\n            this._displayInactiveOpacity(point, multipleSeries);\n        } else {\n            this._highlight.show(point);\n        }\n    };\n\n    Chart.prototype._hideInactiveOpacity = function _hideInactiveOpacity (point) {\n        var multipleSeries = this._plotArea.series.length > 1;\n        var hasInactiveOpacity = this._hasInactiveOpacity();\n        if (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\n    Chart.prototype._hasInactiveOpacity = function _hasInactiveOpacity () {\n        var hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n        var hasInactiveOpacity = this.options.series.filter(function (s) { return s.highlight.inactiveOpacity !== undefined; } ).length > 0;\n        return hasDefaultInactiveOpacity || hasInactiveOpacity;\n    };\n\n    Chart.prototype._getInactiveOpacityForSeries = function _getInactiveOpacityForSeries (series) {\n        var defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n        var seriesInactiveOpacity = series.highlight.inactiveOpacity;\n        return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n    };\n\n    Chart.prototype._getDefaultOpacityForSeries = function _getDefaultOpacityForSeries (series) {\n        return series.defaultOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n    };\n\n    Chart.prototype._mouseover = function _mouseover (e) {\n        var obj;\n\n        var 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, ( obj = {}, obj[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj ));\n        }\n    };\n\n    Chart.prototype._mouseMoveTracking = function _mouseMoveTracking (e) {\n        var obj;\n\n        var ref = this;\n        var options = ref.options;\n        var tooltip = ref._tooltip;\n        var highlight = ref._highlight;\n        var point = ref._activePoint;\n        var coords = this._eventCoordinates(e);\n\n        if (this._plotArea.box.containsPoint(coords)) {\n            if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n                var 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                        var 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, ( obj = {}, obj[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj ));\n            this._unsetActivePoint();\n            this._clearFocusedElement();\n            this._mouseMoveTrackHandler = null;\n\n            this._hideInactiveOpacity(point);\n        }\n    };\n\n    Chart.prototype._mousemove = function _mousemove (e) {\n        var coords = this._eventCoordinates(e);\n        var plotArea = this._plotArea;\n\n        this._trackCrosshairs(coords);\n\n        if (plotArea.hover) {\n            var overPlotArea = plotArea.backgroundContainsPoint(coords);\n            if (overPlotArea) {\n                this._plotAreaHovered = true;\n                this._plotArea.hover(this, e);\n            } else if (this._plotAreaHovered && !overPlotArea) {\n                this._plotAreaHovered = false;\n                this.trigger(PLOT_AREA_LEAVE);\n            }\n        }\n\n        if (this._sharedTooltip()) {\n            this._trackSharedTooltip(coords, e);\n        }\n    };\n\n    Chart.prototype._trackCrosshairs = function _trackCrosshairs (coords) {\n        var crosshairs = this._plotArea.crosshairs;\n\n        for (var i = 0; i < crosshairs.length; i++) {\n            var current = crosshairs[i];\n\n            if (current.box.containsPoint(coords)) {\n                current.showAt(coords);\n            } else {\n                current.hide();\n            }\n        }\n    };\n\n    Chart.prototype._trackSharedTooltip = function _trackSharedTooltip (coords, e, toggle) {\n        if (this._suppressHover) {\n            return;\n        }\n\n        var ref = this;\n        var tooltipOptions = ref.options.tooltip;\n        var plotArea = ref._plotArea;\n        var categoryAxis = ref._plotArea.categoryAxis;\n        var tooltip = ref._tooltip;\n        var highlight = ref._highlight;\n\n        if (plotArea.backgroundContainsPoint(coords)) {\n            var index = categoryAxis.pointCategoryIndex(coords);\n            if (index !== this._tooltipCategoryIx || (!this._sharedHighlight && toggle)) {\n                var points = plotArea.pointsByCategoryIndex(index);\n                var pointArgs = points.map(function(point) {\n                    return point.eventArgs(e);\n                });\n                var 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    Chart.prototype.hideElements = function hideElements (options) {\n        var plotArea = this._plotArea;\n        this._mousemove.cancel();\n\n        plotArea.hideCrosshairs();\n\n        this._unsetActivePoint(options);\n    };\n\n    Chart.prototype._unsetActivePoint = function _unsetActivePoint (options) {\n        var ref = this;\n        var highlight = ref._highlight;\n\n        this._activePoint = null;\n        this._hoveredPoint = null;\n\n        if (!options || !options.keepTooltipOpen) {\n            this._hideTooltip();\n        }\n\n        this._tooltipCategoryIx = null;\n        this._sharedHighlight = false;\n\n        if (highlight) {\n            highlight.hide();\n        }\n    };\n\n    Chart.prototype._deferRedraw = function _deferRedraw () {\n        this._redraw();\n    };\n\n    Chart.prototype._clearRedrawTimeout = function _clearRedrawTimeout () {\n        if (this._redrawTimeout) {\n            clearInterval(this._redrawTimeout);\n            this._redrawTimeout = null;\n        }\n    };\n\n    Chart.prototype.bindCategories = function bindCategories () {\n        var this$1 = this;\n\n        var options = this.options;\n        var definitions = [].concat(options.categoryAxis);\n\n        for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n            var axis = definitions[axisIx];\n            if (axis.autoBind !== false) {\n                this$1.bindCategoryAxisFromSeries(axis, axisIx);\n            }\n        }\n    };\n\n    Chart.prototype.bindCategoryAxisFromSeries = function bindCategoryAxisFromSeries (axis, axisIx) {\n        var this$1 = this;\n\n        var uniqueCategories = new Set();\n        var seriesOnAxis = this.options.series.filter(function (series) { return series.categoryAxis === axis.name || (!series.categoryAxis && axisIx === 0); });\n        var hasCategoryBinding = seriesOnAxis.some(function (series) { return Boolean(series.categoryField); });\n        var seriesWithData = seriesOnAxis.filter(function (series) { return series.data && series.data.length > 0; });\n        var categorySamples = seriesWithData.map(function (series) { return SeriesBinder.current.bindPoint(series, 0).fields.category; });\n        var dateAxis = categorySamples.reduce(function (result, firstCategory) { return result || isDateAxis(axis, firstCategory); }, false);\n        var seriesWithBinding = seriesWithData.filter(function (series, seriesIx) { return series.categoryField || defined(categorySamples[seriesIx]); });\n\n        seriesWithBinding.forEach(function (series) { return series.data.forEach(function (row, index) {\n            var category = SeriesBinder.current.bindPoint(series, index).fields.category;\n            if (dateAxis) {\n                var date = parseDateCategory(category, row, this$1.chartService.intl);\n                category = date ? date.getTime() : undefined;\n            }\n\n            uniqueCategories.add(category);\n        }); });\n\n        if (uniqueCategories.size > 0) {\n            var categories = Array.from(uniqueCategories.values());\n            if (dateAxis) {\n                categories = categories.sort().map(function (time) { return time && new Date(time); });\n            }\n\n            axis.categories = categories;\n        } else if (hasCategoryBinding) {\n            axis.categories = [];\n        }\n    };\n\n    Chart.prototype._isBindable = function _isBindable (series) {\n        var valueFields = SeriesBinder.current.valueFields(series);\n        var result = true;\n\n        for (var i = 0; i < valueFields.length; i++) {\n            var 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    Chart.prototype._noTransitionsRedraw = function _noTransitionsRedraw () {\n        var options = this.options;\n        var 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    Chart.prototype._legendItemHover = function _legendItemHover (seriesIndex, pointIndex) {\n        this._showSeriesInactiveOpacity(seriesIndex, pointIndex);\n    };\n\n    Chart.prototype._showSeriesInactiveOpacity = function _showSeriesInactiveOpacity (seriesIndex, pointIndex) {\n        var ref = this;\n        var plotArea = ref._plotArea;\n        var highlight = ref._highlight;\n        var currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n        var items;\n\n        if (inArray(currentSeries.type, [ PIE, DONUT, FUNNEL, PYRAMID ])) {\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            var multipleSeries = plotArea.series.length > 1;\n            var point = items.length ? items[0] : items;\n\n            this._displayInactiveOpacity(point, multipleSeries, items);\n        } else {\n            highlight.show(items);\n        }\n    };\n\n    Chart.prototype._shouldAttachMouseMove = function _shouldAttachMouseMove () {\n        return this._plotArea.crosshairs.length || (this._tooltip && this._sharedTooltip()) || this.requiresHandlers([ PLOT_AREA_HOVER, PLOT_AREA_LEAVE ]);\n    };\n\n    Chart.prototype.updateMouseMoveHandler = function updateMouseMoveHandler () {\n        var obj, obj$1;\n\n        unbindEvents(this.element, ( obj = {}, obj[ MOUSEMOVE ] = this._mousemove, obj ));\n\n        if (this._shouldAttachMouseMove()) {\n            bindEvents(this.element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\n        }\n    };\n\n    Chart.prototype.applyOptions = function 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    Chart.prototype.setOptions = function setOptions (options, theme) {\n        this.applyOptions(options, theme);\n        this.bindCategories();\n        this.redraw();\n        this.updateMouseMoveHandler();\n        this._restoreOverlayElement();\n    };\n\n    Chart.prototype.setDirection = function setDirection (rtl) {\n        this.chartService.rtl = Boolean(rtl);\n        if (this.surface && this.surface.type === 'svg') {\n            this._destroySurface();\n        }\n    };\n\n    Chart.prototype.setIntlService = function setIntlService (intl) {\n        this.chartService.intl = intl;\n    };\n\n    Chart.prototype.noTransitionsRedraw = function noTransitionsRedraw () {\n        this._noTransitionsRedraw();\n    };\n\n    Chart.prototype.destroy = function destroy () {\n        var obj, obj$1;\n\n        this._destroyed = true;\n\n        unbindEvents(this.element, ( obj = {}, obj[ CONTEXTMENU ] = this._clickHandler, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj[ MOUSEMOVE ] = this._mousemove, obj[ MOUSELEAVE ] = this._mouseleaveHandler, obj[ KEYDOWN ] = this._keydownHandler, obj[ FOCUS ] = this._focusHandler, obj[ BLUR] = this._blurHandler, obj ));\n\n        if (this.domEvents) {\n            this.domEvents.destroy();\n            delete this.domEvents;\n        }\n\n        if (this._mouseMoveTrackHandler) {\n            unbindEvents(document, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj$1 ));\n        }\n\n        this._focusState = null;\n\n        this._destroyView();\n\n        this._destroySurface();\n\n        this._clearRedrawTimeout();\n    };\n\n    Chart.prototype._destroySurface = function _destroySurface () {\n        var 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    Chart.prototype._destroySelections = function _destroySelections () {\n        var selections = this._selections;\n\n        if (selections) {\n            while (selections.length > 0) {\n                selections.shift().destroy();\n            }\n        }\n    };\n\n    Chart.prototype._destroyView = function _destroyView () {\n        var model = this._model;\n\n        if (model) {\n            model.destroy();\n            this._model = null;\n        }\n\n        this._unsetActivePoint();\n        this._clearFocusedElement();\n        this._resetDrilldownPoint();\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    return Chart;\n}(Class));\n\nfunction resolveAxisAliases(options) {\n    var aliases = AXIS_NAMES;\n\n    for (var idx = 0; idx < aliases.length; idx++) {\n        var 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 (var 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    var themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n    var axisName, axisDefaults, axes;\n\n    function mapAxisOptions(axisOptions) {\n        var axisColor = (axisOptions || {}).color || axisDefaults.color;\n        var 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 (var 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    var series = options.series;\n    var seriesLength = series.length;\n    var seriesDefaults = options.seriesDefaults;\n    var commonDefaults = deepExtend({}, options.seriesDefaults);\n    var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n    var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n\n    cleanupNestedSeriesDefaults(commonDefaults);\n    cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n    for (var i = 0; i < seriesLength; i++) {\n        var seriesType = series[i].type || options.seriesDefaults.type;\n\n        var 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    var ranges = {};\n\n    for (var i = 0; i < axes.length; i++) {\n        var axis = axes[i];\n        var axisName = axis.options.name;\n        if (axisName) {\n            ranges[axisName] = axis.range();\n        }\n    }\n\n    return ranges;\n}\n\nvar DATA_FIELDS = [ 'data', 'categories' ];\n\nfunction clearMissingValues(originalOptions, options) {\n    for (var field in options) {\n        if (!inArray(field, DATA_FIELDS) && hasOwnProperty(options, field)) {\n            var fieldValue = options[field];\n            var originalValue = originalOptions[field];\n            if (defined(originalValue)) {\n                var 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 (var 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        accessibility: {},\n        focusHighlight: {\n            border: {\n                opacity: 1,\n                color: BLACK,\n                width: 2\n            }\n        }\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        accessibility: {},\n        focusHighlight: {\n            border: {\n                opacity: 1,\n                width: 2\n            },\n            zIndex: 200\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';\nvar TOP_OFFSET = -2;\n\nvar SharedTooltip = (function (ChartSharedTooltip) {\n    function SharedTooltip () {\n        ChartSharedTooltip.apply(this, arguments);\n    }\n\n    if ( ChartSharedTooltip ) SharedTooltip.__proto__ = ChartSharedTooltip;\n    SharedTooltip.prototype = Object.create( ChartSharedTooltip && ChartSharedTooltip.prototype );\n    SharedTooltip.prototype.constructor = SharedTooltip;\n\n    SharedTooltip.prototype._slotAnchor = function _slotAnchor (coords, slot) {\n        var axis = this.plotArea.categoryAxis;\n        var vertical = axis.options.vertical;\n        var align = vertical ? {\n            horizontal: \"left\",\n            vertical: \"center\"\n        } : {\n            horizontal: \"center\",\n            vertical: \"bottom\"\n        };\n\n        var 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    SharedTooltip.prototype._defaultAnchor = function _defaultAnchor (point, slot) {\n        return this._slotAnchor({}, slot);\n    };\n\n    return SharedTooltip;\n}(ChartSharedTooltip));\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\nvar DEAULT_BAR_WIDTH = 150;\nvar DEAULT_BULLET_WIDTH = 150;\nvar NO_CROSSHAIR = [ BAR, BULLET ];\n\nfunction hide(children) {\n    var state = [];\n    for (var idx = 0; idx < children.length; idx++) {\n        var 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 (var 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\nvar Sparkline = (function (Chart) {\n    function Sparkline () {\n        Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) Sparkline.__proto__ = Chart;\n    Sparkline.prototype = Object.create( Chart && Chart.prototype );\n    Sparkline.prototype.constructor = Sparkline;\n\n    Sparkline.prototype._setElementClass = function _setElementClass (element) {\n        addClass(element, 'k-sparkline');\n    };\n\n    Sparkline.prototype._initElement = function _initElement (element) {\n        Chart.prototype._initElement.call(this, element);\n\n        this._initialWidth = Math.floor(elementSize(element).width);\n    };\n\n    Sparkline.prototype._resize = function _resize () {\n        var element = this.element;\n        var state = hide(element.childNodes);\n\n        this._initialWidth = Math.floor(elementSize(element).width);\n\n        show(element.childNodes, state);\n\n        Chart.prototype._resize.call(this);\n    };\n\n    Sparkline.prototype._modelOptions = function _modelOptions () {\n        var chartOptions = this.options;\n        var stage = this._surfaceWrap();\n        var displayState = hide(stage.childNodes);\n\n        var space = document.createElement('span');\n        space.innerHTML = '&nbsp;';\n\n        stage.appendChild(space);\n\n        var 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    Sparkline.prototype._surfaceWrap = function _surfaceWrap () {\n        if (!this.stage) {\n            var stage = this.stage = document.createElement('span');\n            this.element.appendChild(stage);\n        }\n        return this.stage;\n    };\n\n    Sparkline.prototype._createPlotArea = function _createPlotArea (skipSeries) {\n        var plotArea = Chart.prototype._createPlotArea.call(this, skipSeries);\n        this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n\n        return plotArea;\n    };\n\n    Sparkline.prototype._calculateWidth = function _calculateWidth (plotArea) {\n        var options = this.options;\n        var margin = getSpacing(options.chartArea.margin);\n        var charts = plotArea.charts;\n        var stage = this._surfaceWrap();\n        var total = 0;\n\n\n        for (var i = 0; i < charts.length; i++) {\n            var currentChart = charts[i];\n            var 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            var categoryAxis = currentChart.categoryAxis;\n            if (categoryAxis) {\n                var 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        var size = total * options.pointWidth;\n        if (size > 0) {\n            size += margin.left + margin.right;\n        }\n\n        return size;\n    };\n\n    Sparkline.prototype._createSharedTooltip = function _createSharedTooltip (options) {\n        return new SharedTooltip(this._plotArea, options);\n    };\n\n    Sparkline.normalizeOptions = function normalizeOptions (userOptions) {\n        var 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    return Sparkline;\n}(Chart));\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\nvar FadeOutAnimation = (function (superclass) {\n    function FadeOutAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) FadeOutAnimation.__proto__ = superclass;\n    FadeOutAnimation.prototype = Object.create( superclass && superclass.prototype );\n    FadeOutAnimation.prototype.constructor = FadeOutAnimation;\n\n    FadeOutAnimation.prototype.setup = function setup () {\n        this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n    };\n\n    FadeOutAnimation.prototype.step = function step (pos) {\n        elementStyles(this.element, {\n            opacity: String(interpolateValue(this._initialOpacity, 0, pos))\n        });\n    };\n\n    FadeOutAnimation.prototype.abort = function abort () {\n        superclass.prototype.abort.call(this);\n        elementStyles(this.element, {\n            display: 'none',\n            opacity: String(this._initialOpacity)\n        });\n    };\n\n    FadeOutAnimation.prototype.cancel = function cancel () {\n        superclass.prototype.abort.call(this);\n        elementStyles(this.element, {\n            opacity: String(this._initialOpacity)\n        });\n    };\n\n    return FadeOutAnimation;\n}(draw.Animation));\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    var div = document.createElement(\"div\");\n    div.className = className;\n    if (style) {\n        div.style.cssText = style;\n    }\n\n    return div;\n}\n\nvar NavigatorHint = (function (Class) {\n    function NavigatorHint(container, chartService, options) {\n        Class.call(this);\n\n        this.options = deepExtend({}, this.options, options);\n        this.container = container;\n        this.chartService = chartService;\n\n        var 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    if ( Class ) NavigatorHint.__proto__ = Class;\n    NavigatorHint.prototype = Object.create( Class && Class.prototype );\n    NavigatorHint.prototype.constructor = NavigatorHint;\n\n    NavigatorHint.prototype.createElements = function createElements () {\n        var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n        var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n        var scroll = this.scroll = createDiv('k-scroll');\n\n        tooltip.innerHTML = '&nbsp;';\n\n        element.appendChild(tooltip);\n        element.appendChild(scroll);\n    };\n\n    NavigatorHint.prototype.show = function show (from, to, bbox) {\n        var ref = this;\n        var element = ref.element;\n        var options = ref.options;\n        var scroll = ref.scroll;\n        var tooltip = ref.tooltip;\n        var middle = toDate(toTime(from) + toTime(to - from) / 2);\n        var scrollWidth = bbox.width() * 0.4;\n        var minPos = bbox.center().x - scrollWidth;\n        var maxPos = bbox.center().x;\n        var posRange = maxPos - minPos;\n        var range = options.max - options.min;\n        var scale = posRange / range;\n        var offset = middle - options.min;\n        var text = this.chartService.intl.format(options.format, from, to);\n        var 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        var 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    NavigatorHint.prototype.clearHideTimeout = function clearHideTimeout () {\n        if (this._hideTimeout) {\n            clearTimeout(this._hideTimeout);\n        }\n\n        if (this._hideAnimation) {\n            this._hideAnimation.cancel();\n        }\n    };\n\n    NavigatorHint.prototype.hide = function hide () {\n        var this$1 = this;\n\n        this.clearHideTimeout();\n\n        this._hideTimeout = setTimeout(function () {\n            this$1._visible = false;\n            this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n            this$1._hideAnimation.setup();\n            this$1._hideAnimation.play();\n        }, this.options.hideDelay);\n    };\n\n    NavigatorHint.prototype.destroy = function 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    return NavigatorHint;\n}(Class));\n\nsetDefaultOptions(NavigatorHint, {\n    format: \"{0:d} - {1:d}\",\n    hideDelay: 500\n});\n\nexport default NavigatorHint;","var NAVIGATOR_PANE = \"_navigator\";\nvar NAVIGATOR_AXIS = NAVIGATOR_PANE;\nvar DEFAULT_PANE = \"_default\";\n\nexport { NAVIGATOR_AXIS, NAVIGATOR_PANE, DEFAULT_PANE };\n","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, DEFAULT_PANE } from './constants';\n\nvar ZOOM_ACCELERATION = 3;\n\nvar Navigator = (function (Class) {\n    function Navigator(chart) {\n        var obj;\n\n        Class.call(this);\n\n        this.chart = chart;\n        var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n        var 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, ( obj = {}, obj[DRAG] = '_drag', obj[DRAG_END] = '_dragEnd', obj[ZOOM] = '_zoom', obj[ZOOM_END] = '_zoomEnd', obj ));\n        chart.addObserver(this.chartObserver);\n    }\n\n    if ( Class ) Navigator.__proto__ = Class;\n    Navigator.prototype = Object.create( Class && Class.prototype );\n    Navigator.prototype.constructor = Navigator;\n\n    Navigator.prototype.parseDate = function parseDate$1 (value) {\n        return parseDate(this.chart.chartService.intl, value);\n    };\n\n    Navigator.prototype.clean = function 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    Navigator.prototype.destroy = function destroy () {\n        if (this.chart) {\n            this.chart.removeObserver(this.chartObserver);\n            delete this.chart;\n        }\n\n        this.clean();\n    };\n\n    Navigator.prototype.redraw = function redraw () {\n        this._redrawSelf();\n        this.initSelection();\n    };\n\n    Navigator.prototype.initSelection = function initSelection () {\n        var ref = this;\n        var chart = ref.chart;\n        var options = ref.options;\n        var axis = this.mainAxis();\n        var ref$1 = axis.roundedRange();\n        var min = ref$1.min;\n        var max = ref$1.max;\n        var ref$2 = options.select;\n        var from = ref$2.from;\n        var to = ref$2.to;\n        var mousewheel = ref$2.mousewheel;\n        var 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    Navigator.prototype.setRange = function setRange () {\n        var plotArea = this.chart._createPlotArea(true);\n        var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n\n        var ref = axis.roundedRange();\n        var min = ref.min;\n        var max = ref.max;\n\n        var select = this.options.select || {};\n        var from = select.from || min;\n        if (from < min) {\n            from = min;\n        }\n\n        var 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    Navigator.prototype._redrawSelf = function _redrawSelf (silent) {\n        var plotArea = this.chart._plotArea;\n\n        if (plotArea) {\n            plotArea.redraw(last(plotArea.panes), silent);\n        }\n    };\n\n    Navigator.prototype.redrawSlaves = function redrawSlaves () {\n        var chart = this.chart;\n        var plotArea = chart._plotArea;\n        var slavePanes = plotArea.panes.filter(function (pane) { return pane.options.name !== NAVIGATOR_PANE; });\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    Navigator.prototype._drag = function _drag (e) {\n        var ref = this;\n        var chart = ref.chart;\n        var selection = ref.selection;\n        var coords = chart._eventCoordinates(e.originalEvent);\n        var navigatorAxis = this.mainAxis();\n        var naviRange = navigatorAxis.roundedRange();\n        var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n        var axis = chart._plotArea.categoryAxis;\n        var range = e.axisRanges[axis.options.name];\n        var select = this.options.select;\n        var 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        var from = toDate(limitValue(\n            toTime(range.min),\n            naviRange.min, toTime(naviRange.max) - duration\n        ));\n\n        var 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    Navigator.prototype._dragEnd = function _dragEnd () {\n        this.filterAxes();\n        this.filter();\n        this.redrawSlaves();\n\n        if (this.hint) {\n            this.hint.hide();\n        }\n    };\n\n    Navigator.prototype.readSelection = function readSelection () {\n        var ref = this;\n        var ref_selection_options = ref.selection.options;\n        var from = ref_selection_options.from;\n        var to = ref_selection_options.to;\n        var select = ref.options.select;\n\n        select.from = from;\n        select.to = to;\n    };\n\n    Navigator.prototype.filterAxes = function filterAxes () {\n        var ref = this;\n        var select = ref.options.select; if ( select === void 0 ) select = { };\n        var chart = ref.chart;\n        var allAxes = chart.options.categoryAxis;\n        var from = select.from;\n        var to = select.to;\n\n        for (var idx = 0; idx < allAxes.length; idx++) {\n            var axis = allAxes[idx];\n            if (axis.pane !== NAVIGATOR_PANE) {\n                axis.min = from;\n                axis.max = to;\n            }\n        }\n    };\n\n    Navigator.prototype.filter = function filter () {\n        var ref = this;\n        var chart = ref.chart;\n        var select = ref.options.select;\n\n        if (!chart.requiresHandlers([ \"navigatorFilter\" ])) {\n            return;\n        }\n\n        var mainAxis = this.mainAxis();\n        var args = {\n            from: select.from,\n            to: select.to\n        };\n\n        if (mainAxis.options.type !== 'category') {\n            var 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    Navigator.prototype._zoom = function _zoom (e) {\n        var ref = this;\n        var axis = ref.chart._plotArea.categoryAxis;\n        var selection = ref.selection;\n        var ref_options = ref.options;\n        var select = ref_options.select;\n        var liveDrag = ref_options.liveDrag;\n        var mainAxis = this.mainAxis();\n        var delta = e.delta;\n\n        if (!selection) {\n            return;\n        }\n\n        var fromIx = mainAxis.categoryIndex(selection.options.from);\n        var toIx = mainAxis.categoryIndex(selection.options.to);\n        var 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    Navigator.prototype._zoomEnd = function _zoomEnd (e) {\n        this._dragEnd(e);\n    };\n\n    Navigator.prototype.showHint = function showHint (from, to) {\n        var plotArea = this.chart._plotArea;\n\n        if (this.hint) {\n            this.hint.show(from, to, plotArea.backgroundBox());\n        }\n    };\n\n    Navigator.prototype._selectStart = function _selectStart (e) {\n        return this.chart._selectStart(e);\n    };\n\n    Navigator.prototype._select = function _select (e) {\n        this.showHint(e.from, e.to);\n\n        return this.chart._select(e);\n    };\n\n    Navigator.prototype._selectEnd = function _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    Navigator.prototype.mainAxis = function mainAxis () {\n        var plotArea = this.chart._plotArea;\n\n        if (plotArea) {\n            return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n        }\n    };\n\n    Navigator.prototype.select = function select (from, to) {\n        var 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    Navigator.setup = function setup (options, themeOptions) {\n        if ( options === void 0 ) options = {};\n        if ( themeOptions === void 0 ) themeOptions = {};\n\n        if (options.__navi) {\n            return;\n        }\n        options.__navi = true;\n\n        var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n        var panes = options.panes = [].concat(options.panes);\n        var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n\n        if (!naviOptions.visible) {\n            paneOptions.visible = false;\n            paneOptions.height = 0.1;\n        }\n\n        if (options.navigator.position !== 'top') {\n            panes.push(paneOptions);\n        } else {\n            panes.unshift(paneOptions);\n        }\n\n        panes.forEach(function (pane) {\n            pane.name = pane.name || DEFAULT_PANE;\n        });\n\n        Navigator.attachAxes(options, naviOptions);\n        Navigator.attachSeries(options, naviOptions, themeOptions);\n    };\n\n    Navigator.attachAxes = function attachAxes (options, naviOptions) {\n        var series = naviOptions.series || [];\n        var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n        var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n        var allAxes = categoryAxes.concat(valueAxes);\n        allAxes.forEach(function (axis) {\n            axis.pane = axis.pane || DEFAULT_PANE;\n        });\n\n        var equallySpacedSeries = filterSeriesByType(series, EQUALLY_SPACED_SERIES);\n        var justifyAxis = equallySpacedSeries.length === 0;\n\n        var 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        var 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    Navigator.attachSeries = function attachSeries (options, naviOptions, themeOptions) {\n        var series = options.series = options.series || [];\n        var navigatorSeries = [].concat(naviOptions.series || []);\n        var seriesColors = themeOptions.seriesColors;\n        var defaults = naviOptions.seriesDefaults;\n\n        for (var 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    return Navigator;\n}(Class));\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\nvar AUTO_CATEGORY_WIDTH = 28;\n\nvar StockChart = (function (Chart) {\n    function StockChart () {\n        Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) StockChart.__proto__ = Chart;\n    StockChart.prototype = Object.create( Chart && Chart.prototype );\n    StockChart.prototype.constructor = StockChart;\n\n    StockChart.prototype.applyDefaults = function applyDefaults (options, themeOptions) {\n        var width = elementSize(this.element).width || DEFAULT_WIDTH;\n        var theme = themeOptions;\n\n        var 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        Chart.prototype.applyDefaults.call(this, options, theme);\n    };\n\n    StockChart.prototype._setElementClass = function _setElementClass (element) {\n        addClass(element, 'k-chart k-stockchart');\n    };\n\n    StockChart.prototype.setOptions = function setOptions (options) {\n        this.destroyNavigator();\n        Chart.prototype.setOptions.call(this, options);\n    };\n\n    StockChart.prototype.noTransitionsRedraw = function noTransitionsRedraw () {\n        var transitions = this.options.transitions;\n\n        this.options.transitions = false;\n        this._fullRedraw();\n        this.options.transitions = transitions;\n    };\n\n    StockChart.prototype._resize = function _resize () {\n        this.noTransitionsRedraw();\n    };\n\n    StockChart.prototype._redraw = function _redraw () {\n        var navigator = this.navigator;\n\n        if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n            navigator.redrawSlaves();\n        } else {\n            this._fullRedraw();\n        }\n    };\n\n    StockChart.prototype._dirty = function _dirty () {\n        var options = this.options;\n        var series = [].concat(options.series, options.navigator.series);\n        var seriesCount = grep(series, function(s) { return s && s.visible; }).length;\n        var dirty = this._seriesCount !== seriesCount;\n        this._seriesCount = seriesCount;\n\n        return dirty;\n    };\n\n    StockChart.prototype._fullRedraw = function _fullRedraw () {\n        var 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        Chart.prototype._redraw.call(this);\n\n        navigator.initSelection();\n    };\n\n    StockChart.prototype._trackSharedTooltip = function _trackSharedTooltip (coords) {\n        var plotArea = this._plotArea;\n        var pane = plotArea.paneByPoint(coords);\n\n        if (pane && pane.options.name === NAVIGATOR_PANE) {\n            this._unsetActivePoint();\n        } else {\n            Chart.prototype._trackSharedTooltip.call(this, coords);\n        }\n    };\n\n    StockChart.prototype.bindCategories = function bindCategories () {\n        Chart.prototype.bindCategories.call(this);\n        this.copyNavigatorCategories();\n    };\n\n    StockChart.prototype.copyNavigatorCategories = function copyNavigatorCategories () {\n        var definitions = [].concat(this.options.categoryAxis);\n        var categories;\n\n        for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n            var 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    StockChart.prototype.destroyNavigator = function destroyNavigator () {\n        if (this.navigator) {\n            this.navigator.destroy();\n            this.navigator = null;\n        }\n    };\n\n    StockChart.prototype.destroy = function destroy () {\n        this.destroyNavigator();\n        Chart.prototype.destroy.call(this);\n    };\n\n    StockChart.prototype._stopChartHandlers = function _stopChartHandlers (e) {\n        var coords = this._eventCoordinates(e);\n        var pane = this._plotArea.paneByPoint(coords);\n\n        return Chart.prototype._stopChartHandlers.call(this, e) || (pane && pane.options.name === NAVIGATOR_PANE);\n    };\n\n    StockChart.prototype._toggleDragZoomEvents = function _toggleDragZoomEvents () {\n        if (!this._dragZoomEnabled) {\n            this.element.style.touchAction = \"none\";\n\n            this._dragZoomEnabled = true;\n        }\n    };\n\n    return StockChart;\n}(Chart));\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: false\n            },\n            highlight: {\n                visible: false\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;\n","var ANGULAR_SPEED = 150;\nvar LINEAR_SPEED = 250;\nvar ARROW = \"arrow\";\nvar ARROW_POINTER = \"arrowPointer\";\nvar BAR_POINTER = \"barPointer\";\nvar DEFAULT_HEIGHT = 200;\nvar DEFAULT_LINE_WIDTH = 0.5;\nvar DEFAULT_WIDTH = 200;\nvar DEGREE = Math.PI / 180;\nvar INSIDE = \"inside\";\nvar LINEAR = \"linear\";\nvar OUTSIDE = \"outside\";\nvar RADIAL_POINTER = \"radialPointer\";\nvar 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    var origin = bbox.getOrigin();\n    var size = bbox.getSize();\n    var 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\nvar Group = drawing.Group;\nvar Path = drawing.Path;\nvar Text = drawing.Text;\n\nexport default function buildLabelElement(label, options) {\n    var labelBox = label.box;\n    var textBox = label.children[0].box;\n    var border = options.border || {};\n    var background = options.background || \"\";\n\n    var wrapper = Path.fromRect(new geo.Rect([ labelBox.x1, labelBox.y1 ], [ labelBox.width(), labelBox.height() ]), {\n        stroke: {}\n    });\n\n    var text = new Text(label.text, new geo.Point(textBox.x1, textBox.y1), {\n        font: options.font,\n        fill: { color: options.color }\n    });\n\n    var styleGeometry = pad(text.bbox().clone(), options.padding);\n\n    var 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    var 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    var from = defined(range.from) ? range.from : MIN_VALUE;\n    var 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    var 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\nvar DEFAULT_MARGIN = 5;\nvar Path = drawing.Path;\nvar Surface = drawing.Surface;\n\nvar Gauge = (function (Class) {\n    function Gauge(element, userOptions, theme, context) {\n        if ( context === void 0 ) context = {};\n\n        Class.call(this);\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    if ( Class ) Gauge.__proto__ = Class;\n    Gauge.prototype = Object.create( Class && Class.prototype );\n    Gauge.prototype.constructor = Gauge;\n\n    Gauge.prototype.destroy = function 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    Gauge.prototype.value = function value (pointerValue) {\n        var 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    Gauge.prototype._draw = function _draw () {\n        var surface = this.surface;\n\n        surface.clear();\n        surface.draw(this._visuals);\n    };\n\n    Gauge.prototype.exportVisual = function exportVisual () {\n        return this._visuals;\n    };\n\n    Gauge.prototype.allValues = function allValues (values) {\n        var pointers = this.pointers;\n        var allValues = [];\n\n        if (arguments.length === 0) {\n            for (var 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 (var i$1 = 0; i$1 < values.length; i$1++) {\n                if (isNumber(values[i$1])) {\n                    pointers[i$1].value(values[i$1]);\n                }\n            }\n        }\n\n        this._setValueOptions(values);\n    };\n\n    Gauge.prototype._setValueOptions = function _setValueOptions (values) {\n        var pointers = [].concat(this.options.pointer);\n        var arrayValues = [].concat(values);\n\n        for (var i = 0; i < arrayValues.length; i++) {\n            pointers[i].value = arrayValues[i];\n        }\n    };\n\n    Gauge.prototype.resize = function resize () {\n        this.noTransitionsRedraw();\n    };\n\n    Gauge.prototype.noTransitionsRedraw = function noTransitionsRedraw () {\n        var transitions = this.options.transitions;\n\n        this._toggleTransitions(false);\n\n        this.redraw();\n\n        this._toggleTransitions(transitions);\n    };\n\n    Gauge.prototype.redraw = function redraw () {\n        var size = this._surfaceSize();\n        var 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        var bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n        this.reflow(bbox);\n    };\n\n    Gauge.prototype.setOptions = function 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    Gauge.prototype.setDirection = function 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    Gauge.prototype.setIntlService = function setIntlService (intl) {\n        this.contextService.intl = intl;\n    };\n\n    Gauge.prototype._initTheme = function _initTheme (theme) {\n        var currentTheme = theme || this.theme || {};\n        this.theme = currentTheme;\n\n        this.options = deepExtend({}, currentTheme, this.options);\n        var options = this.options;\n        var pointer = options.pointer;\n\n        if (isArray(pointer)) {\n            var pointers = [];\n            for (var i = 0; i < pointer.length; i++) {\n                pointers.push(deepExtend({}, currentTheme.pointer, pointer[i]));\n            }\n            options.pointer = pointers;\n        }\n    };\n\n    Gauge.prototype._createGaugeArea = function _createGaugeArea () {\n        var options = this.options.gaugeArea;\n        var size = this.surface.size();\n        var border = options.border || {};\n        var 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        var gaugeArea = Path.fromRect(areaGeometry, {\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: options.background\n            }\n        });\n\n        return gaugeArea;\n    };\n\n    Gauge.prototype._initSurface = function _initSurface () {\n        var ref = this;\n        var options = ref.options;\n        var surface = ref.surface;\n        var element = this._surfaceElement();\n        var 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    Gauge.prototype._surfaceSize = function _surfaceSize () {\n        var options = this.options;\n        var size = this._getSize();\n\n        if (options.gaugeArea) {\n            deepExtend(size, options.gaugeArea);\n        }\n\n        return size;\n    };\n\n    Gauge.prototype._surfaceElement = function _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    Gauge.prototype.getSize = function getSize () {\n        return this._getSize();\n    };\n\n    Gauge.prototype._getSize = function _getSize () {\n        var element = this.element;\n        var defaultSize = this._defaultSize();\n        var width = element.offsetWidth;\n        var 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    Gauge.prototype._defaultSize = function _defaultSize () {\n        return {\n            width: DEFAULT_WIDTH,\n            height: DEFAULT_HEIGHT\n        };\n    };\n\n    Gauge.prototype._toggleTransitions = function _toggleTransitions (value) {\n        var this$1 = this;\n\n        this.options.transitions = value;\n        for (var i = 0; i < this.pointers.length; i++) {\n            this$1.pointers[i].options.animation.transitions = value;\n        }\n    };\n\n    return Gauge;\n}(Class));\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\nvar Path = drawing.Path;\nvar Group = drawing.Group;\nvar Point = geo.Point;\n\nfunction renderAxisTick(tickRenderOptions, tickOptions) {\n    var position = tickRenderOptions.position;\n    var tickX = tickRenderOptions.tickX;\n    var tickY = tickRenderOptions.tickY;\n    var 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    var 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    var count = tickPositions.length;\n\n    if (tickOptions.visible) {\n        var mirror = tickRenderOptions.mirror;\n        var lineBox = tickRenderOptions.lineBox;\n        for (var 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\nvar LinearScale = (function (NumericAxis) {\n    function LinearScale(options, service) {\n        var scaleOptions = options || {};\n        if (!defined(scaleOptions.reverse) && scaleOptions.vertical === false && (service || {}).rtl) {\n            scaleOptions = Object.assign({}, scaleOptions, {\n                reverse: true\n            });\n        }\n\n        NumericAxis.call(this, 0, 1, scaleOptions, service);\n\n        this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n    }\n\n    if ( NumericAxis ) LinearScale.__proto__ = NumericAxis;\n    LinearScale.prototype = Object.create( NumericAxis && NumericAxis.prototype );\n    LinearScale.prototype.constructor = LinearScale;\n\n    LinearScale.prototype.initUserOptions = function initUserOptions (options) {\n        var 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    LinearScale.prototype.initFields = function initFields () {\n    };\n\n    LinearScale.prototype.render = function render () {\n        var elements = this.elements = new Group();\n        var labels = this.renderLabels();\n        var scaleLine = this.renderLine();\n        var scaleTicks = this.renderTicks();\n        var ranges = this.renderRanges();\n\n        elements.append(scaleLine, labels, scaleTicks, ranges);\n\n        return elements;\n    };\n\n    LinearScale.prototype.renderRanges = function renderRanges () {\n        var this$1 = this;\n\n        var options = this.options;\n        var min = options.min;\n        var max = options.max;\n        var vertical = options.vertical;\n        var mirror = options.labels.mirror;\n        var ranges = options.ranges || [];\n        var elements = new Group();\n        var count = ranges.length;\n        var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n\n        for (var i = 0; i < count; i++) {\n            var range = getRange(ranges[i], min, max);\n            var slot = this$1.getSlot(range.from, range.to);\n            var slotX = vertical ? this$1.lineBox() : slot;\n            var slotY = vertical ? slot : this$1.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    LinearScale.prototype.renderLabels = function renderLabels () {\n        var ref = this;\n        var labels = ref.labels;\n        var options = ref.options;\n        var elements = new Group();\n\n        for (var i = 0; i < labels.length; i++) {\n            elements.append(buildLabelElement(labels[i], options.labels));\n        }\n\n        return elements;\n    };\n\n    LinearScale.prototype.renderLine = function renderLine () {\n        var line = this.options.line;\n        var lineBox = this.lineBox();\n        var elements = new Group();\n\n        if (line.width > 0 && line.visible) {\n            var 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    LinearScale.prototype.renderTicks = function renderTicks$1 () {\n        var ticks = new Group();\n        var options = this.options;\n        var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n        var 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    return LinearScale;\n}(NumericAxis));\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\nvar Pointer = (function (Class) {\n    function Pointer(scale, userOptions) {\n        Class.call(this);\n\n        var ref = scale.options;\n        var min = ref.min;\n        var max = ref.max;\n        var 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    if ( Class ) Pointer.__proto__ = Class;\n    Pointer.prototype = Object.create( Class && Class.prototype );\n    Pointer.prototype.constructor = Pointer;\n\n    Pointer.prototype.value = function value (newValue) {\n        var options = this.options;\n        var value = options.value;\n\n        if (arguments.length === 0) {\n            return value;\n        }\n\n        var ref = this.scale.options;\n        var min = ref.min;\n        var max = ref.max;\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    return Pointer;\n}(Class));\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\nvar LinearPointer = (function (Pointer) {\n    function LinearPointer(scale, options) {\n        Pointer.call(this, scale, options);\n\n        this.options = deepExtend({\n            track: {\n                visible: defined(options.track)\n            }\n        }, this.options);\n    }\n\n    if ( Pointer ) LinearPointer.__proto__ = Pointer;\n    LinearPointer.prototype = Object.create( Pointer && Pointer.prototype );\n    LinearPointer.prototype.constructor = LinearPointer;\n\n    LinearPointer.prototype.reflow = function reflow () {\n        var ref = this;\n        var options = ref.options;\n        var scale = ref.scale;\n        var ref$1 = scale.options;\n        var mirror = ref$1.mirror;\n        var vertical = ref$1.vertical;\n        var scaleLine = scale.lineBox();\n        var trackSize = options.track.size || options.size;\n        var pointerHalfSize = options.size / 2;\n        var margin = getSpacing(options.margin);\n        var space = vertical ?\n            margin[mirror ? \"left\" : \"right\"] :\n            margin[mirror ? \"bottom\" : \"top\"];\n        var 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    LinearPointer.prototype.getElementOptions = function getElementOptions () {\n        var 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    LinearPointer.prototype._margin = function _margin () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var ref$1 = scale.options;\n        var mirror = ref$1.mirror;\n        var vertical = ref$1.vertical;\n        var margin = getSpacing(options.margin);\n\n        var space = vertical ?\n            margin[mirror ? \"left\" : \"right\"] :\n            margin[mirror ? \"bottom\" : \"top\"];\n\n        return space;\n    };\n\n    return LinearPointer;\n}(Pointer));\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\nvar ArrowLinearPointerAnimation = (function (superclass) {\n    function ArrowLinearPointerAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) ArrowLinearPointerAnimation.__proto__ = superclass;\n    ArrowLinearPointerAnimation.prototype = Object.create( superclass && superclass.prototype );\n    ArrowLinearPointerAnimation.prototype.constructor = ArrowLinearPointerAnimation;\n\n    ArrowLinearPointerAnimation.prototype.setup = function setup () {\n        var options = this.options;\n        var margin = options.margin;\n        var from = options.from;\n        var to = options.to;\n        var vertical = options.vertical;\n        var 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        var fromScale = this.fromScale = new geometry.Point(from.x1, from.y1);\n        var 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    ArrowLinearPointerAnimation.prototype.step = function step (pos) {\n        var translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n        var translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n\n        this.element.transform(geometry.transform().translate(translateX, translateY));\n    };\n\n    return ArrowLinearPointerAnimation;\n}(drawing.Animation));\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\nvar Point = geo.Point;\nvar Path = drawing.Path;\n\nvar ArrowLinearPointer = (function (LinearPointer) {\n    function ArrowLinearPointer(scale, options) {\n        LinearPointer.call(this, scale, options);\n\n        if (!defined(this.options.size)) {\n            this.options.size = this.scale.options.majorTicks.size * 0.6;\n        }\n    }\n\n    if ( LinearPointer ) ArrowLinearPointer.__proto__ = LinearPointer;\n    ArrowLinearPointer.prototype = Object.create( LinearPointer && LinearPointer.prototype );\n    ArrowLinearPointer.prototype.constructor = ArrowLinearPointer;\n\n    ArrowLinearPointer.prototype.pointerShape = function pointerShape () {\n        var ref = this;\n        var scale = ref.scale;\n        var size = ref.options.size;\n        var halfSize = size / 2;\n        var sign = (scale.options.mirror ? -1 : 1);\n        var 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    ArrowLinearPointer.prototype.repaint = function repaint () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var 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    ArrowLinearPointer.prototype.render = function render () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var elementOptions = this.getElementOptions();\n        var shape = this.pointerShape(options.value);\n\n        options.animation.type = ARROW_POINTER;\n\n        var elements = new Path({\n            stroke: elementOptions.stroke,\n            fill: elementOptions.fill\n        }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n\n        var 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    return ArrowLinearPointer;\n}(LinearPointer));\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\nvar BarLinearPointerAnimation = (function (superclass) {\n    function BarLinearPointerAnimation () {\n        superclass.apply(this, arguments);\n    }\n\n    if ( superclass ) BarLinearPointerAnimation.__proto__ = superclass;\n    BarLinearPointerAnimation.prototype = Object.create( superclass && superclass.prototype );\n    BarLinearPointerAnimation.prototype.constructor = BarLinearPointerAnimation;\n\n    BarLinearPointerAnimation.prototype.setup = function setup () {\n        var options = this.options;\n        var axis = this.axis = options.vertical ? Y : X;\n        var to = this.to = options.newPoints[0][axis];\n        var 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    BarLinearPointerAnimation.prototype.step = function step (pos) {\n        var value = interpolateValue(this.from, this.to, pos);\n        this._set(value);\n    };\n\n    BarLinearPointerAnimation.prototype._set = function _set (value) {\n        var setter = \"set\" + this.axis.toUpperCase();\n        var points = this.options.newPoints;\n\n        points[0][setter](value);\n        points[1][setter](value);\n    };\n\n    return BarLinearPointerAnimation;\n}(drawing.Animation));\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\nvar Group = drawing.Group;\nvar Path = drawing.Path;\n\nvar BarLinearPointer = (function (LinearPointer) {\n    function BarLinearPointer(scale, options) {\n        LinearPointer.call(this, scale, options);\n\n        if (!defined(this.options.size)) {\n            this.options.size = this.scale.options.majorTicks.size * 0.3;\n        }\n    }\n\n    if ( LinearPointer ) BarLinearPointer.__proto__ = LinearPointer;\n    BarLinearPointer.prototype = Object.create( LinearPointer && LinearPointer.prototype );\n    BarLinearPointer.prototype.constructor = BarLinearPointer;\n\n    BarLinearPointer.prototype.pointerShape = function pointerShape (value) {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var ref$1 = scale.options;\n        var mirror = ref$1.mirror;\n        var vertical = ref$1.vertical;\n        var dir = mirror === vertical ? -1 : 1;\n        var size = options.size * dir;\n        var minSlot = scale.getSlot(scale.options.min);\n        var slot = scale.getSlot(value);\n        var axis = vertical ? Y : X;\n        var sizeAxis = vertical ? X : Y;\n        var margin = this._margin() * dir;\n\n        var p1 = new geo.Point();\n        p1[axis] = minSlot[axis + \"1\"];\n        p1[sizeAxis] = minSlot[sizeAxis + \"1\"];\n\n        var 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        var p3 = p2.clone();\n        var 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    BarLinearPointer.prototype.repaint = function repaint () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var shape = this.pointerShape(options.value);\n        var pointerPath = this.pointerPath;\n        var oldShape = this.pointerShape(options._oldValue);\n\n        pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n\n        var 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    BarLinearPointer.prototype.render = function render () {\n        var group = new Group();\n        var elementOptions = this.getElementOptions();\n\n        if (this.options.track.visible) {\n            group.append(this.renderTrack());\n        }\n\n        var 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    BarLinearPointer.prototype.renderTrack = function renderTrack () {\n        var trackOptions = this.options.track;\n        var border = trackOptions.border || {};\n        var 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    return BarLinearPointer;\n}(LinearPointer));\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\nvar DEFAULT_MIN_WIDTH = 60;\nvar DEFAULT_MIN_HEIGHT = 60;\n\nvar Group = drawing.Group;\n\nvar LinearGauge = (function (Gauge) {\n    function LinearGauge () {\n        Gauge.apply(this, arguments);\n    }\n\n    if ( Gauge ) LinearGauge.__proto__ = Gauge;\n    LinearGauge.prototype = Object.create( Gauge && Gauge.prototype );\n    LinearGauge.prototype.constructor = LinearGauge;\n\n    LinearGauge.prototype.reflow = function reflow (bbox) {\n        var pointers = this.pointers;\n        var bboxX = bbox.origin.x;\n        var bboxY = bbox.origin.y;\n\n        var box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n\n        this.scale.reflow(box);\n        this._shrinkScaleWidth(box);\n\n        for (var 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    LinearGauge.prototype._buildVisual = function _buildVisual () {\n        var visuals = new Group();\n        var scaleElements = this.scale.render();\n        var pointers = this.pointers;\n\n        visuals.append(this.gaugeArea);\n        visuals.append(scaleElements);\n\n        for (var i = 0; i < pointers.length; i++) {\n            var current = pointers[i];\n            visuals.append(current.render());\n            current.value(current.options.value);\n        }\n\n        this._visuals = visuals;\n    };\n\n    LinearGauge.prototype._createModel = function _createModel () {\n        var this$1 = this;\n\n        var options = this.options;\n        var scale = this.scale = new LinearScale(options.scale, this.contextService);\n\n        this.pointers = [];\n\n        var pointers = options.pointer;\n        pointers = isArray(pointers) ? pointers : [ pointers ];\n\n        for (var i = 0; i < pointers.length; i++) {\n            var currentOptions = deepExtend({}, pointers[i], {\n                animation: {\n                    transitions: options.transitions\n                }\n            });\n            var pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n\n            this$1.pointers.push(new pointerType(scale, currentOptions));\n        }\n    };\n\n    LinearGauge.prototype._defaultSize = function _defaultSize () {\n        var 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    LinearGauge.prototype._getBox = function _getBox (box) {\n        var ref = this;\n        var scale = ref.scale;\n        var pointers = ref.pointers;\n        var boxCenter = box.center();\n        var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n\n        for (var i = 0; i < pointers.length; i++) {\n            plotAreaBox.wrap(pointers[i].box.clone());\n        }\n\n        var 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    LinearGauge.prototype._alignElements = function _alignElements () {\n        var this$1 = this;\n\n        var ref = this;\n        var scale = ref.scale;\n        var pointers = ref.pointers;\n        var scaleBox = scale.box;\n        var box = pointers[0].box.clone().wrap(scale.box);\n        var plotAreaBox = this.bbox;\n\n        for (var i = 0; i < pointers.length; i++) {\n            box.wrap(pointers[i].box.clone());\n        }\n\n        var 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 (var i$1 = 0; i$1 < pointers.length; i$1++) {\n            pointers[i$1].reflow(this$1.bbox);\n        }\n    };\n\n    LinearGauge.prototype._shrinkScaleWidth = function _shrinkScaleWidth (bbox) {\n        var ref = this;\n        var scale = ref.scale;\n        if (!scale.options.vertical) {\n            var 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    LinearGauge.prototype._shrinkElements = function _shrinkElements () {\n        var this$1 = this;\n\n        var ref = this;\n        var scale = ref.scale;\n        var pointers = ref.pointers;\n        var scaleBox = scale.box.clone();\n        var pos = scale.options.vertical ? \"y\" : \"x\";\n        var pointerBox = pointers[0].box;\n\n        for (var 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 (var i$1 = 0; i$1 < pointers.length; i$1++) {\n            pointers[i$1].reflow(this$1.bbox);\n        }\n    };\n\n    return LinearGauge;\n}(Gauge));\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\nvar GEO_ARC_ADJUST_ANGLE = 180;\n\nvar Arc = drawing.Arc;\nvar Path = drawing.Path;\nvar Group = drawing.Group;\n\nfunction drawTicks(arc, tickAngles, unit, tickOptions) {\n    var ticks = new Group();\n    var center = arc.center;\n    var radius = arc.getRadiusX();\n\n    if (tickOptions.visible) {\n        for (var i = 0; i < tickAngles.length; i++) {\n            var tickStart = arc.pointAt(tickAngles[i]);\n            var 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\nvar RadialScale = (function (NumericAxis) {\n    function RadialScale(options, service) {\n        NumericAxis.call(this, 0, 1, options, service);\n    }\n\n    if ( NumericAxis ) RadialScale.__proto__ = NumericAxis;\n    RadialScale.prototype = Object.create( NumericAxis && NumericAxis.prototype );\n    RadialScale.prototype.constructor = RadialScale;\n\n    RadialScale.prototype.initUserOptions = function initUserOptions (options) {\n        var 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    RadialScale.prototype.initFields = function initFields () {\n    };\n\n    RadialScale.prototype.render = function render (center, radius) {\n        var 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    RadialScale.prototype.reflow = function reflow (bbox) {\n        var center = bbox.center();\n        var 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    RadialScale.prototype.slotAngle = function slotAngle (value) {\n        var ref = this.options;\n        var min = ref.min;\n        var max = ref.max;\n        var reverse = ref.reverse;\n        var startAngle = ref.startAngle;\n        var endAngle = ref.endAngle;\n        var angle = endAngle - startAngle;\n        var 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    RadialScale.prototype.hasRanges = function hasRanges () {\n        var ranges = this.options.ranges;\n\n        return ranges && ranges.length;\n    };\n\n    RadialScale.prototype.ticksSize = function ticksSize () {\n        var ref = this.options;\n        var majorTicks = ref.majorTicks;\n        var minorTicks = ref.minorTicks;\n        var 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    RadialScale.prototype.labelsCount = function labelsCount () {\n        var count = NumericAxis.prototype.labelsCount.call(this);\n        var options = this.options;\n        var 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    RadialScale.prototype.renderLabels = function renderLabels () {\n        var this$1 = this;\n\n        var options = this.options;\n        var arc = this.arc.clone();\n        var radius = arc.getRadiusX();\n        var tickAngles = this.tickAngles(arc, options.majorUnit);\n        var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n        var labelsGroup = new Group();\n\n        var rangeDistance = radius * 0.05;\n        if (defined(options.rangeDistance)) {\n            rangeDistance = options.rangeDistance;\n        } else {\n            options.rangeDistance = rangeDistance;\n        }\n\n        var labelsOptions = options.labels;\n        var isInside = labelsOptions.position === INSIDE;\n        var 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        var labels = this.labels;\n        var count = labels.length;\n        var padding = getSpacing(labelsOptions.padding);\n        var paddingWidth = (padding.left + padding.right) / 2;\n        var paddingHeight = (padding.top + padding.bottom) / 2;\n\n        for (var i = 0; i < count; i++) {\n            var label = labels[i];\n            var halfWidth = label.box.width() / 2;\n            var halfHeight = label.box.height() / 2;\n            var angle = tickAngles[i];\n            var labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n\n            var lp = arc.pointAt(angle);\n            var cx = lp.x + (Math.cos(labelAngle) * (halfWidth + paddingWidth) * (isInside ? 1 : -1));\n            var 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            var labelPos = new geo.Point(label.box.x1, label.box.y1);\n\n            var labelElement = (void 0);\n            if (!hasLabelElements) {\n                labelElement = buildLabelElement(label, options.labels);\n                labelsGroup.append(labelElement);\n            } else {\n                labelElement = this$1.labelElements.children[i];\n                var prevLabelPos = labelElement.bbox().origin;\n\n                var labelTransform = labelElement.transform() || geo.transform();\n                labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n                labelElement.transform(labelTransform);\n            }\n\n            this$1.bbox = geo.Rect.union(this$1.bbox, labelElement.bbox());\n        }\n\n        return labelsGroup;\n    };\n\n    RadialScale.prototype.repositionRanges = function repositionRanges () {\n        var ranges = this.ranges.children;\n\n        if (ranges.length > 0) {\n            var ref = this.options;\n            var rangeDistance = ref.rangeDistance;\n            var rangeSize = ref.rangeSize;\n            var rangeRadius = this.getRangeRadius();\n\n            if (this.options.labels.position === INSIDE) {\n                rangeRadius += rangeSize + rangeDistance;\n            }\n\n            var newRadius = rangeRadius + (rangeSize / 2);\n\n            for (var 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    RadialScale.prototype.renderRanges = function renderRanges () {\n        var this$1 = this;\n\n        var segments = this.rangeSegments();\n        var segmentsCount = segments.length;\n        var result = new Group();\n\n        if (segmentsCount) {\n            var ref = this.options;\n            var rangeSize = ref.rangeSize;\n            var reverse = ref.reverse;\n            var rangeDistance = ref.rangeDistance;\n            var 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 (var i = 0; i < segmentsCount; i++) {\n                var segment = segments[i];\n                var from = this$1.slotAngle(segment[reverse ? \"to\" : \"from\"]);\n                var to = this$1.slotAngle(segment[!reverse ? \"to\" : \"from\"]);\n\n                if (to - from !== 0) {\n                    result.append(this$1.createRange(from, to, rangeRadius, segment));\n                }\n            }\n        }\n\n        return result;\n    };\n\n    RadialScale.prototype.createRange = function createRange (startAngle, endAngle, rangeRadius, options) {\n        var rangeSize = this.options.rangeSize;\n        var 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    RadialScale.prototype.rangeSegments = function rangeSegments () {\n        var options = this.options;\n        var ranges = options.ranges || [];\n        var count = ranges.length;\n        var segments = [];\n\n        if (count) {\n            var min = options.min;\n            var max = options.max;\n            var defaultColor = options.rangePlaceholderColor;\n            segments.push(rangeSegment(min, max, defaultColor));\n\n            for (var i = 0; i < count; i++) {\n                var range = getRange(ranges[i], min, max);\n                var segmentsCount = segments.length;\n\n                for (var j = 0; j < segmentsCount; j++) {\n                    var 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    RadialScale.prototype.getRangeRadius = function getRangeRadius () {\n        var ref = this;\n        var arc = ref.arc;\n        var options = ref.options;\n        var rangeSize = options.rangeSize;\n        var rangeDistance = options.rangeDistance;\n        var majorTickSize = options.majorTicks.size;\n        var 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    RadialScale.prototype.renderArc = function renderArc (center, radius) {\n        var options = this.options;\n\n        var 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    RadialScale.prototype.renderTicks = function renderTicks () {\n        var ref = this;\n        var arc = ref.arc;\n        var options = ref.options;\n        var 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        var allTicks = new Group();\n        allTicks.append(this.majorTicks);\n\n        var majorTickSize = options.majorTicks.size;\n        var minorTickSize = options.minorTicks.size;\n\n        this._tickDifference = majorTickSize - minorTickSize;\n\n        if (options.labels.position === OUTSIDE) {\n            var 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    RadialScale.prototype.normalizeTickAngles = function normalizeTickAngles (angles) {\n        var options = this.options;\n        var skip = options.majorUnit / options.minorUnit;\n\n        for (var 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    RadialScale.prototype.tickAngles = function tickAngles (ring, stepValue) {\n        var options = this.options;\n        var reverse = options.reverse;\n        var range = options.max - options.min;\n        var angle = ring.endAngle - ring.startAngle;\n        var tickCount = range / stepValue;\n        var pos = ring.startAngle;\n        var 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        var positions = [];\n        for (var 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    RadialScale.prototype.radius = function 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    RadialScale.prototype.repositionTicks = function repositionTicks (ticks, tickAngles, minor) {\n        var diff = minor ? (this._tickDifference || 0) : 0;\n        var tickArc = this.arc;\n        var 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 (var i = 0; i < ticks.length; i++) {\n            var newPoint = tickArc.pointAt(tickAngles[i]);\n            var segments = ticks[i].segments;\n            var xDiff = newPoint.x - segments[0].anchor().x;\n            var yDiff = newPoint.y - segments[0].anchor().y;\n\n            ticks[i].transform(new geo.transform().translate(xDiff, yDiff));\n        }\n    };\n\n    return RadialScale;\n}(NumericAxis));\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\nvar RadialPointerAnimation = (function (superclass) {\n    function RadialPointerAnimation(element, options) {\n        superclass.call(this, element, options);\n\n        var animationOptions = this.options;\n\n        animationOptions.duration = Math.max((Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000, 1);\n    }\n\n    if ( superclass ) RadialPointerAnimation.__proto__ = superclass;\n    RadialPointerAnimation.prototype = Object.create( superclass && superclass.prototype );\n    RadialPointerAnimation.prototype.constructor = RadialPointerAnimation;\n\n    RadialPointerAnimation.prototype.step = function step (pos) {\n        var options = this.options;\n        var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n\n        this.element.transform(geometry.transform().rotate(angle, options.center));\n    };\n\n    return RadialPointerAnimation;\n}(drawing.Animation));\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\nvar CAP_SIZE = 0.05;\nvar Circle = drawing.Circle;\nvar Group = drawing.Group;\nvar Path = drawing.Path;\n\nvar RadialPointer = (function (Pointer) {\n    function RadialPointer () {\n        Pointer.apply(this, arguments);\n    }\n\n    if ( Pointer ) RadialPointer.__proto__ = Pointer;\n    RadialPointer.prototype = Object.create( Pointer && Pointer.prototype );\n    RadialPointer.prototype.constructor = RadialPointer;\n\n    RadialPointer.prototype.setAngle = function setAngle (angle) {\n        this.elements.transform(geo.transform().rotate(angle, this.center));\n    };\n\n    RadialPointer.prototype.repaint = function repaint () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var oldAngle = scale.slotAngle(options._oldValue);\n        var 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    RadialPointer.prototype.render = function render () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var 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    RadialPointer.prototype.reflow = function reflow (arc) {\n        var center = this.center = arc.center;\n        var length = limitValue(this.options.length || 1, 0.1, 1.5);\n        var radius = this.radius = arc.getRadiusX() * length;\n        var 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    RadialPointer.prototype._renderNeedle = function _renderNeedle () {\n        var minorTickSize = this.scale.options.minorTicks.size;\n        var center = this.center;\n        var needleColor = this.options.color;\n\n        var 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    RadialPointer.prototype._renderCap = function _renderCap () {\n        var options = this.options;\n        var capColor = options.cap.color || options.color;\n        var circle = new geo.Circle(this.center, this.capSize);\n\n        var cap = new Circle(circle, {\n            fill: { color: capColor },\n            stroke: { color: capColor }\n        });\n\n        return cap;\n    };\n\n    return RadialPointer;\n}(Pointer));\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\nvar Group = drawing.Group;\n\nvar RadialGauge = (function (Gauge) {\n    function RadialGauge () {\n        Gauge.apply(this, arguments);\n    }\n\n    if ( Gauge ) RadialGauge.__proto__ = Gauge;\n    RadialGauge.prototype = Object.create( Gauge && Gauge.prototype );\n    RadialGauge.prototype.constructor = RadialGauge;\n\n    RadialGauge.prototype.reflow = function reflow (bbox) {\n        var this$1 = this;\n\n        var pointers = this.pointers;\n        this.scale.reflow(bbox);\n        this._initialPlotArea = this.scale.bbox;\n\n        for (var i = 0; i < pointers.length; i++) {\n            pointers[i].reflow(this$1.scale.arc);\n            this$1._initialPlotArea = geo.Rect.union(this$1._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    RadialGauge.prototype._buildVisual = function _buildVisual (gaugeArea, pointers, scale) {\n        var 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    RadialGauge.prototype._buildPointers = function _buildPointers (pointers) {\n        var this$1 = this;\n\n        for (var i = 0; i < pointers.length; i++) {\n            var current = pointers[i];\n            current.render();\n            this$1._visuals.append(current.elements);\n\n            current.value(current.options.value);\n        }\n    };\n\n    RadialGauge.prototype.fitScale = function fitScale (bbox) {\n        var this$1 = this;\n\n        var arc = this.scale.arc;\n        var plotAreaBox = this._initialPlotArea;\n        var step = Math.abs(this.getDiff(plotAreaBox, bbox));\n        var min = round(step, COORD_PRECISION);\n        var max = round(-step, COORD_PRECISION);\n        var minDiff, midDiff, maxDiff, mid, oldDiff;\n        var staleFlag = 0;\n        var 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$1.getPlotBox(min, bbox, arc);\n                if (0 <= minDiff && minDiff <= 2) {\n                    break;\n                }\n            }\n\n            if (max !== mid) {\n                maxDiff = this$1.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$1.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    RadialGauge.prototype.getPlotBox = function getPlotBox (step, bbox, arc) {\n        var this$1 = this;\n\n        var scale = this.scale;\n        var pointers = this.pointers;\n        var radius = arc.getRadiusX();\n        var 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 (var i = 0; i < pointers.length; i++) {\n            pointers[i].reflow(scaleArc);\n            this$1.plotBbox = geo.Rect.union(this$1.plotBbox, pointers[i].bbox);\n        }\n\n        return this.getDiff(this.plotBbox, bbox);\n    };\n\n    RadialGauge.prototype.getDiff = function getDiff (plotBox, box) {\n        return Math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n    };\n\n    RadialGauge.prototype.alignScale = function alignScale (bbox) {\n        var this$1 = this;\n\n        var plotBoxCenter = this.plotBbox.center();\n        var boxCenter = bbox.center();\n        var paddingX = plotBoxCenter.x - boxCenter.x;\n        var paddingY = plotBoxCenter.y - boxCenter.y;\n        var ref = this;\n        var scale = ref.scale;\n        var pointers = ref.pointers;\n\n        scale.arc.center.x -= paddingX;\n        scale.arc.center.y -= paddingY;\n\n        scale.reflow(bbox);\n\n        for (var i = 0; i < pointers.length; i++) {\n            pointers[i].reflow(scale.arc);\n            this$1.plotBbox = geo.Rect.union(scale.bbox, pointers[i].bbox);\n        }\n    };\n\n    RadialGauge.prototype._createModel = function _createModel () {\n        var this$1 = this;\n\n        var options = this.options;\n        var pointers = options.pointer;\n        var scale = this.scale = new RadialScale(options.scale, this.contextService);\n\n        this.pointers = [];\n\n        var pointersArr = isArray(pointers) ? pointers : [ pointers ];\n        for (var i = 0; i < pointersArr.length; i++) {\n            var current = new RadialPointer(scale, deepExtend({}, pointersArr[i], {\n                animation: {\n                    transitions: options.transitions\n                }\n            }));\n\n            this$1.pointers.push(current);\n        }\n    };\n\n    return RadialGauge;\n}(Gauge));\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\nvar ArcScale = (function (RadialScale) {\n    function ArcScale () {\n        RadialScale.apply(this, arguments);\n    }\n\n    if ( RadialScale ) ArcScale.__proto__ = RadialScale;\n    ArcScale.prototype = Object.create( RadialScale && RadialScale.prototype );\n    ArcScale.prototype.constructor = ArcScale;\n\n    ArcScale.prototype.rangeSegments = function rangeSegments () {\n        var ref = this.options;\n        var min = ref.min;\n        var max = ref.max;\n        var rangePlaceholderColor = ref.rangePlaceholderColor;\n        var rangeLineCap = ref.rangeLineCap;\n\n        return [ { from: min, to: max, color: rangePlaceholderColor, lineCap: rangeLineCap } ];\n    };\n\n    ArcScale.prototype.hasRanges = function hasRanges () {\n        return true;\n    };\n\n    ArcScale.prototype.placeholderRangeAngle = function placeholderRangeAngle (angle) {\n        var 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    ArcScale.prototype.addRange = function addRange (from, to, options) {\n        var reverse = this.options.reverse;\n\n        var startAngle = this.slotAngle(reverse ? to : from);\n        var endAngle = this.slotAngle(reverse ? from : to);\n\n        var range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n\n        this.ranges.append(range);\n\n        return range;\n    };\n\n    return ArcScale;\n}(RadialScale));\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\nvar MAX_DURATION = 800;\n\nvar RangePointerAnimation = (function (superclass) {\n    function RangePointerAnimation(element, options) {\n        superclass.call(this, element, options);\n\n        var animationOptions = this.options;\n        var duration = (Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000;\n        animationOptions.duration = limitValue(duration, ANGULAR_SPEED, MAX_DURATION);\n\n        var startColor = element.elements.options.get(\"stroke.color\");\n        var color = element.currentColor();\n        if (startColor !== color) {\n            this.startColor = new Color(startColor);\n            this.color = new Color(color);\n        }\n    }\n\n    if ( superclass ) RangePointerAnimation.__proto__ = superclass;\n    RangePointerAnimation.prototype = Object.create( superclass && superclass.prototype );\n    RangePointerAnimation.prototype.constructor = RangePointerAnimation;\n\n    RangePointerAnimation.prototype.step = function step (pos) {\n        var ref = this;\n        var options = ref.options;\n        var startColor = ref.startColor;\n        var color = ref.color;\n        var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n        this.element.angle(angle);\n\n        if (color) {\n            var r = round(interpolateValue(startColor.r, color.r, pos));\n            var g = round(interpolateValue(startColor.g, color.g, pos));\n            var b = round(interpolateValue(startColor.b, color.b, pos));\n\n            this.element.stroke(new Color(r, g, b).toHex());\n        }\n    };\n\n    return RangePointerAnimation;\n}(drawing.Animation));\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\nvar RangePointer = (function (Pointer) {\n    function RangePointer () {\n        Pointer.apply(this, arguments);\n    }\n\n    if ( Pointer ) RangePointer.__proto__ = Pointer;\n    RangePointer.prototype = Object.create( Pointer && Pointer.prototype );\n    RangePointer.prototype.constructor = RangePointer;\n\n    RangePointer.prototype.repaint = function repaint () {\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\n        var oldAngle = scale.slotAngle(options._oldValue);\n        var 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    RangePointer.prototype.angle = function angle (value) {\n        var 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    RangePointer.prototype.stroke = function stroke (value) {\n        this.elements.stroke(value);\n    };\n\n    RangePointer.prototype.render = function render () {\n        if (this.elements) {\n            return;\n        }\n\n        var ref = this;\n        var scale = ref.scale;\n        var options = ref.options;\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    RangePointer.prototype.currentColor = function currentColor () {\n        var ref = this.scale.options;\n        var min = ref.min;\n        var max = ref.max;\n        var ref$1 = this.options;\n        var colors = ref$1.colors;\n        var color = ref$1.color;\n        var value = ref$1.value;\n        var currentValue = isNumber(value) ? value : min;\n\n        if (colors) {\n            for (var idx = 0; idx < colors.length; idx++) {\n                var ref$2 = colors[idx];\n                var rangeColor = ref$2.color;\n                var from = ref$2.from; if ( from === void 0 ) from = min;\n                var to = ref$2.to; if ( to === void 0 ) to = max;\n\n                if (from <= currentValue && currentValue <= to) {\n                    return rangeColor;\n                }\n            }\n        }\n\n        return color;\n    };\n\n    RangePointer.prototype.reflow = function reflow () {\n        this.render();\n\n        this.bbox = this.elements.bbox();\n    };\n\n    return RangePointer;\n}(Pointer));\n\nsetDefaultOptions(RangePointer, {\n    animation: {\n        type: RADIAL_RANGE_POINTER,\n        duration: ANGULAR_SPEED\n    }\n});\n\nexport default RangePointer;\n","import RadialGauge from '../radial/radial-gauge';\nimport ArcScale from './arc-scale';\nimport RangePointer from './range-pointer';\n\nimport { deepExtend } from '../../common';\n\n\nvar ArcGauge = (function (RadialGauge) {\n    function ArcGauge () {\n        RadialGauge.apply(this, arguments);\n    }\n\n    if ( RadialGauge ) ArcGauge.__proto__ = RadialGauge;\n    ArcGauge.prototype = Object.create( RadialGauge && RadialGauge.prototype );\n    ArcGauge.prototype.constructor = ArcGauge;\n\n    ArcGauge.prototype._initTheme = function _initTheme (theme) {\n        RadialGauge.prototype._initTheme.call(this, theme);\n\n        this.options.color = this.options.color || (this.theme.pointer || {}).color;\n    };\n\n    ArcGauge.prototype._createModel = function _createModel () {\n        var options = this.options;\n        var scale = this.scale = new ArcScale(options.scale, this.contextService);\n\n        var pointer = new RangePointer(scale, deepExtend({}, {\n            colors: options.colors,\n            color: options.color,\n            value: options.value,\n            opacity: options.opacity,\n            animation: {\n                transitions: options.transitions\n            }\n        }));\n\n        this.pointers = [ pointer ];\n    };\n\n    ArcGauge.prototype._buildPointers = function _buildPointers (pointers) {\n        for (var i = 0; i < pointers.length; i++) {\n            var current = pointers[i];\n            current.render();\n\n            current.value(current.options.value);\n        }\n    };\n\n    ArcGauge.prototype._setValueOptions = function _setValueOptions (value) {\n        this.options.value = value;\n    };\n\n    ArcGauge.prototype.currentColor = function currentColor () {\n        var pointer = this.pointers[0];\n        if (pointer) {\n            return pointer.currentColor();\n        }\n    };\n\n    ArcGauge.prototype.centerLabelPosition = function centerLabelPosition (width, height) {\n        var size = this.getSize();\n        var center = this.scale.arc.center;\n\n        var left = center.x - width / 2;\n        var top = center.y - height / 2;\n\n        if (width < size.width) {\n            var right = left + width;\n\n            left = Math.max(left, 0);\n\n            if (right > size.width) {\n                left -= right - size.width;\n            }\n        }\n\n        if (height < size.height) {\n            var bbox = this.scale.bbox;\n            var yLimit = bbox.bottomRight().y;\n            var bottom = top + height;\n\n            top = Math.max(top, bbox.origin.y);\n\n            if (bottom > yLimit) {\n                top -= bottom - yLimit;\n            }\n        }\n\n        return {\n            left: left,\n            top: top\n        };\n    };\n\n    return ArcGauge;\n}(RadialGauge));\n\nexport default ArcGauge;","import ArcGauge from '../arc/arc-gauge';\n\nvar defaultStartAngle = 90;\n\nvar CircularGauge = (function (ArcGauge) {\n    function CircularGauge () {\n        ArcGauge.apply(this, arguments);\n    }\n\n    if ( ArcGauge ) CircularGauge.__proto__ = ArcGauge;\n    CircularGauge.prototype = Object.create( ArcGauge && ArcGauge.prototype );\n    CircularGauge.prototype.constructor = CircularGauge;\n\n    CircularGauge.prototype._createModel = function _createModel () {\n        var scaleOptions = this.options.scale;\n        if (typeof scaleOptions.startAngle !== 'number') {\n            scaleOptions.startAngle = defaultStartAngle;\n        }\n\n        scaleOptions.endAngle = scaleOptions.startAngle + 360;\n\n        ArcGauge.prototype._createModel.call(this);\n    };\n\n    return CircularGauge;\n}(ArcGauge));\n\nexport default CircularGauge;\n","import {\n    Class,\n    defined,\n    setDefaultOptions\n} from '../../common';\n\nvar DEFAULT_QUIET_ZONE_LENGTH = 10;\n\nexport var Encoding = (function (Class) {\n    function Encoding(options) {\n        Class.call(this);\n        this.setOptions(options);\n        this.initProperties();\n    }\n\n    if ( Class ) Encoding.__proto__ = Class;\n    Encoding.prototype = Object.create( Class && Class.prototype );\n    Encoding.prototype.constructor = Encoding;\n\n    Encoding.prototype.initProperties = function initProperties () { };\n\n    Encoding.prototype.setOptions = function setOptions (options) {\n        this.options = Object.assign({}, this.options, options);\n        this.quietZoneLength = this.options.addQuietZone ? 2 * this.options.quietZoneLength : 0;\n    };\n\n    Encoding.prototype.encode = function encode (value, width, height) {\n        var 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    Encoding.prototype.initValue = function initValue () { };\n\n    Encoding.prototype.addQuietZone = function addQuietZone () {\n        this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIET_ZONE_LENGTH);\n    };\n\n    Encoding.prototype.addData = function addData () { };\n\n    Encoding.prototype.invalidCharacterError = function invalidCharacterError (character) {\n        throw new Error((\"Character \\\"\" + character + \"\\\" is not valid for symbology \" + (this.name) + \".\"));\n    };\n\n    return Encoding;\n}(Class));\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\nvar extend = Object.assign;\n\nexport var Code11 = (function (Encoding) {\n    function Code11 () {\n        Encoding.apply(this, arguments);\n    }\n\n    if ( Encoding ) Code11.__proto__ = Encoding;\n    Code11.prototype = Object.create( Encoding && Encoding.prototype );\n    Code11.prototype.constructor = Code11;\n\n    Code11.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\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    Code11.prototype.initValue = function initValue (value, width) {\n        this.pattern = [];\n        this.value = value;\n        this.width = width;\n        this.totalUnits = 0;\n    };\n\n    Code11.prototype.addData = function addData () {\n        var this$1 = this;\n\n        var value = this.value;\n\n        this.addPattern(this.START);\n\n        for (var i = 0; i < value.length; i++) {\n            this$1.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    Code11.prototype.setBaseUnit = function setBaseUnit () {\n        this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n    };\n\n    Code11.prototype.addCheckSum = function addCheckSum () {\n        var value = this.value;\n        var length = value.length;\n        var 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            var kValue = (cValue + this.getWeightedSum(value, length, this.kCheckSumTotal)) % this.checkSumMod;\n            this.checksum += kValue;\n            this.addPattern(this.characterMap[kValue]);\n        }\n    };\n\n    Code11.prototype.getWeightedSum = function getWeightedSum (value, length, total) {\n        var this$1 = this;\n\n        var weightedSum = 0;\n\n        for (var i = 0; i < value.length; i++) {\n            weightedSum += this$1.weightedValue(this$1.getValue(value.charAt(i)), length, i, total);\n        }\n\n        return weightedSum;\n    };\n\n    Code11.prototype.weightedValue = function weightedValue (value, length, index, total) {\n        var weight = (length - index) % total || total;\n        return weight * value;\n    };\n\n    Code11.prototype.getValue = function 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    Code11.prototype.addCharacter = function addCharacter (character) {\n        var value = this.getValue(character);\n        var pattern = this.characterMap[value];\n\n        this.addPattern(pattern);\n    };\n\n    Code11.prototype.addPattern = function addPattern (pattern) {\n        var this$1 = this;\n\n        var value;\n\n        for (var i = 0; i < pattern.length; i++) {\n            value = parseInt(pattern.charAt(i), 10);\n            this$1.pattern.push(value);\n            this$1.totalUnits += value;\n        }\n    };\n\n    return Code11;\n}(Encoding));\n\nsetDefaultOptions(Code11, {\n    addCheckSum: true\n});\n","import { setDefaultOptions } from '../../common';\nimport { Encoding } from './encoding';\n\nvar extend = Object.assign;\n\nexport var Code39Base = (function (Encoding) {\n    function Code39Base () {\n        Encoding.apply(this, arguments);\n    }\n\n    if ( Encoding ) Code39Base.__proto__ = Encoding;\n    Code39Base.prototype = Object.create( Encoding && Encoding.prototype );\n    Code39Base.prototype.constructor = Code39Base;\n\n    Code39Base.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\n\n        extend(this, {\n            minBaseUnitLength: 0.7\n        });\n    };\n\n    Code39Base.prototype.addData = function addData () {\n        var this$1 = this;\n\n        var value = this.value;\n\n        this.addStart();\n\n        for (var idx = 0; idx < value.length; idx++) {\n            this$1.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    Code39Base.prototype.addCharacter = function addCharacter (character) {\n        var characterData = this.characterMap[character];\n\n        if (!characterData) {\n            this.invalidCharacterError(character);\n        }\n\n        this.addBase(characterData);\n    };\n\n    Code39Base.prototype.addBase = function addBase () { };\n\n    return Code39Base;\n}(Encoding));\n\nexport var Code39 = (function (Code39Base) {\n    function Code39 () {\n        Code39Base.apply(this, arguments);\n    }\n\n    if ( Code39Base ) Code39.__proto__ = Code39Base;\n    Code39.prototype = Object.create( Code39Base && Code39Base.prototype );\n    Code39.prototype.constructor = Code39;\n\n    Code39.prototype.initProperties = function initProperties () {\n        Code39Base.prototype.initProperties.call(this);\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    Code39.prototype.initValue = function 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    Code39.prototype.prepareValues = function prepareValues () {\n        var this$1 = this;\n\n        var minBaseUnit = this.minBaseUnitLength;\n        var minRatio = this.minRatio;\n        var minHeight = Math.ceil(Math.max(0.15 * this.width, 24));\n        var baseUnit;\n        var 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$1.getBaseUnit(ratio);\n        }\n\n        if (baseUnit < minBaseUnit) {\n            var 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    Code39.prototype.getBaseUnit = function getBaseUnit (ratio) {\n        return this.width / this.getBaseWidth(ratio);\n    };\n\n    Code39.prototype.getBaseWidth = function getBaseWidth (ratio) {\n        var characterLength = 3 * (ratio + 2);\n        return this.quietZoneLength + characterLength * (this.dataLength + 2) + this.gapWidth * (this.dataLength + 1);\n    };\n\n    Code39.prototype.addStart = function addStart () {\n        this.addPattern(this.characterMap.START.pattern);\n        this.addCharacterGap();\n    };\n\n    Code39.prototype.addBase = function addBase (character) {\n        this.addPattern(character.pattern);\n        this.addCharacterGap();\n    };\n\n    Code39.prototype.addStop = function addStop () {\n        this.addPattern(this.characterMap.START.pattern);\n    };\n\n    Code39.prototype.addPattern = function addPattern (pattern) {\n        var this$1 = this;\n\n        for (var i = 0; i < pattern.length; i++) {\n            this$1.patternString += this$1.patternMappings[pattern.charAt(i)];\n        }\n    };\n\n    Code39.prototype.addCharacterGap = function addCharacterGap () {\n        this.patternString += this.gapWidth + this.splitCharacter;\n    };\n\n    return Code39;\n}(Code39Base));\n\nsetDefaultOptions(Code39, {\n    addCheckSum: false\n});\n","import { Code39 } from './code39';\nimport deepExtend from '../../common/deep-extend';\n\nexport var Code39ExtendedBase = {\n    addCharacter: function 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: function addExtended(code) {\n        var this$1 = this;\n\n        var patterns;\n\n        for (var i = 0; i < this.extendedMappings.length; i++) {\n            patterns = this$1.extendedMappings[i].call(this$1, code);\n\n            if (patterns) {\n                for (var patternIndex = 0; patternIndex < patterns.length; patternIndex++) {\n                    var pattern = patterns[patternIndex];\n                    this$1.addBase(pattern);\n                }\n\n                this$1.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            var this$1 = this;\n\n            var result;\n            var 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 (var i = 0; i < this.specialAsciiCodes[code].length; i++) {\n                    result.push(this$1.characterMap[this$1.shiftCharacters[3]]);\n                    result.push(this$1.characterMap[this$1.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 var Code39Extended = (function (Code39) {\n    function Code39Extended () {\n        Code39.apply(this, arguments);\n    }\n\n    if ( Code39 ) Code39Extended.__proto__ = Code39;\n    Code39Extended.prototype = Object.create( Code39 && Code39.prototype );\n    Code39Extended.prototype.constructor = Code39Extended;\n\n    Code39Extended.prototype.initProperties = function initProperties () {\n        Code39.prototype.initProperties.call(this);\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    return Code39Extended;\n}(Code39));\n","import { Code39Base } from './code39';\n\nvar extend = Object.assign;\n\nexport var Code93 = (function (Code39Base) {\n    function Code93 () {\n        Code39Base.apply(this, arguments);\n    }\n\n    if ( Code39Base ) Code93.__proto__ = Code39Base;\n    Code93.prototype = Object.create( Code39Base && Code39Base.prototype );\n    Code93.prototype.constructor = Code93;\n\n    Code93.prototype.initProperties = function initProperties () {\n        Code39Base.prototype.initProperties.call(this);\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    Code93.prototype.initValue = function 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    Code93.prototype.prepareValues = function prepareValues () {\n        var 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            var 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    Code93.prototype.setBaseUnit = function setBaseUnit () {\n        var checkSumLength = 2;\n\n        this.baseUnit = this.width / (9 * (this.dataLength + 2 + checkSumLength) + this.quietZoneLength + 1);\n    };\n\n    Code93.prototype.addStart = function addStart () {\n        var pattern = this.characterMap.START.pattern;\n        this.addPattern(pattern);\n    };\n\n    Code93.prototype.addStop = function addStop () {\n        this.addStart();\n        this.pattern.push(this.characterMap.TERMINATION_BAR);\n    };\n\n    Code93.prototype.addBase = function addBase (charData) {\n        this.addPattern(charData.pattern);\n        this.values.push(charData.value);\n    };\n\n    Code93.prototype.pushCheckSum = function pushCheckSum () {\n        var this$1 = this;\n\n        var checkValues = this._getCheckValues();\n        var charData;\n\n        this.checksum = checkValues.join(\"\");\n\n        for (var i = 0; i < checkValues.length; i++) {\n            charData = this$1.characterMap[this$1._findCharacterByValue(checkValues[i])];\n            this$1.addPattern(charData.pattern);\n        }\n    };\n\n    Code93.prototype._getCheckValues = function _getCheckValues () {\n        var this$1 = this;\n\n        var values = this.values;\n        var length = values.length;\n        var wightedSum = 0;\n        var cValue;\n        var kValue;\n        var idx;\n\n        for (idx = length - 1; idx >= 0; idx--) {\n            wightedSum += this$1.weightedValue(values[idx], length - idx, this$1.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$1.weightedValue(values[idx], length - idx + 1, this$1.kCheckSumTotal);\n        }\n\n        kValue = wightedSum % this.checkSumMod;\n        return [cValue, kValue];\n    };\n\n    Code93.prototype._findCharacterByValue = function _findCharacterByValue (value) {\n        var this$1 = this;\n\n        for (var character in this$1.characterMap) {\n            if (this$1.characterMap[character].value === value) {\n                return character;\n            }\n        }\n    };\n\n    Code93.prototype.weightedValue = function weightedValue (value, index, total) {\n        return (index % total || total) * value;\n    };\n\n    Code93.prototype.addPattern = function addPattern (pattern) {\n        var this$1 = this;\n\n        var value;\n\n        for (var i = 0; i < pattern.length; i++) {\n            value = parseInt(pattern.charAt(i), 10);\n            this$1.pattern.push(value);\n        }\n    };\n\n    return Code93;\n}(Code39Base));\n","import { Code93 } from './code93';\nimport { Code39ExtendedBase } from './code39-extended';\nimport deepExtend from '../../common/deep-extend';\n\nexport var Code93Extended = (function (Code93) {\n    function Code93Extended () {\n        Code93.apply(this, arguments);\n    }\n\n    if ( Code93 ) Code93Extended.__proto__ = Code93;\n    Code93Extended.prototype = Object.create( Code93 && Code93.prototype );\n    Code93Extended.prototype.constructor = Code93Extended;\n\n    Code93Extended.prototype.initProperties = function initProperties () {\n        Code93.prototype.initProperties.call(this);\n\n        deepExtend(this, Code39ExtendedBase, {\n            name: \"Code 93 extended\",\n            pushCheckSum: function() {\n                var this$1 = this;\n\n                var checkValues = this._getCheckValues();\n                var value;\n\n                this.checksum = checkValues.join(\"\");\n\n                for (var i = 0; i < checkValues.length; i++) {\n                    value = checkValues[i];\n\n                    if (this$1.shiftValuesAsciiCodes[value]) {\n                        this$1.addExtended(this$1.shiftValuesAsciiCodes[value]);\n                    } else {\n                        var characterByValue = this$1._findCharacterByValue(value);\n                        this$1.addPattern(this$1.characterMap[characterByValue].pattern);\n                    }\n                }\n            }\n        });\n    };\n\n    return Code93Extended;\n}(Code93));\n","import { Encoding } from './encoding';\nimport inArray from '../../common/in-array';\n\nvar numberRegex = /^\\d+$/;\nvar extend = Object.assign;\n\nexport var Postnet = (function (Encoding) {\n    function Postnet () {\n        Encoding.apply(this, arguments);\n    }\n\n    if ( Encoding ) Postnet.__proto__ = Encoding;\n    Postnet.prototype = Object.create( Encoding && Encoding.prototype );\n    Postnet.prototype.constructor = Postnet;\n\n    Postnet.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\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    Postnet.prototype.initValue = function 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    Postnet.prototype.addData = function addData () {\n        var this$1 = this;\n\n        var value = this.value;\n\n        this.addPattern(this.START);\n\n        for (var i = 0; i < value.length; i++) {\n            this$1.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    Postnet.prototype.addCharacter = function addCharacter (character) {\n        var pattern = this.characterMap[character];\n        this.checkSum += parseInt(character, 10);\n        this.addPattern(pattern);\n    };\n\n    Postnet.prototype.addCheckSum = function addCheckSum () {\n        this.checksum = (10 - (this.checkSum % 10)) % 10;\n        this.addCharacter(this.checksum);\n    };\n\n    Postnet.prototype.setBaseUnit = function setBaseUnit () {\n        var startStopLength = 3;\n\n        this.baseUnit = this.width / ((this.value.length + 1) * 10 + startStopLength + this.quietZoneLength);\n    };\n\n    Postnet.prototype.validate = function 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    Postnet.prototype.addPattern = function addPattern (pattern) {\n        var this$1 = this;\n\n        var y1;\n\n        for (var i = 0; i < pattern.length; i++) {\n            y1 = this$1.height - this$1.baseHeight * pattern.charAt(i);\n            this$1.pattern.push({ width: 1, y1: y1, y2: this$1.height });\n            this$1.pattern.push(1);\n        }\n    };\n\n    return Postnet;\n}(Encoding));\n","import { Class } from '../../common';\nimport { Encoding } from './encoding';\nimport deepExtend from '../../common/deep-extend';\nimport inArray from '../../common/in-array';\n\nvar numberRegex = /^\\d+$/;\nvar alphanumericRegex = /^[a-z0-9]+$/i;\nvar extend = Object.assign;\n\nexport var State128 = (function (Class) {\n    function State128(encoding) {\n        Class.call(this);\n        this.encoding = encoding;\n        this.initProperties();\n    }\n\n    if ( Class ) State128.__proto__ = Class;\n    State128.prototype = Object.create( Class && Class.prototype );\n    State128.prototype.constructor = State128;\n\n    State128.prototype.initProperties = function initProperties () { };\n\n    State128.prototype.addStart = function addStart () { };\n\n    State128.prototype.is = function is () { };\n\n    State128.prototype.isCode = function isCode () {\n        return false;\n    };\n\n    State128.prototype.move = function move () { };\n\n    State128.prototype.pushState = function pushState () { };\n\n    return State128;\n}(Class));\n\nexport var State128AB = (function (State128) {\n    function State128AB(encoding, states) {\n        State128.call(this, encoding);\n        this.states = states;\n        this._initMoves(states);\n    }\n\n    if ( State128 ) State128AB.__proto__ = State128;\n    State128AB.prototype = Object.create( State128 && State128.prototype );\n    State128AB.prototype.constructor = State128AB;\n\n    State128AB.prototype.initProperties = function initProperties () {\n        State128.prototype.initProperties.call(this);\n\n        deepExtend(this, {\n            FNC4: \"FNC4\",\n            SHIFT: 98\n        });\n    };\n\n    State128AB.prototype.addStart = function addStart () {\n        this.encoding.addPattern(this.START);\n    };\n\n    State128AB.prototype.is = function is (value, index) {\n        var code = value.charCodeAt(index);\n        return this.isCode(code);\n    };\n\n    State128AB.prototype.move = function move (encodingState) {\n        var idx = 0;\n\n        while (!this._moves[idx].call(this, encodingState) && idx < this._moves.length) {\n            idx++;\n        }\n    };\n\n    State128AB.prototype.pushState = function pushState (encodingState) {\n        var this$1 = this;\n\n        var states = this.states,\n            value = encodingState.value,\n            maxLength = value.length,\n            code;\n\n        if (inArray(\"C\", states)) {\n            var 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$1.encoding.addPattern(this$1.getValue(code));\n            encodingState.index++;\n        }\n    };\n\n    State128AB.prototype._initMoves = function _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    State128AB.prototype._moveFNC = function _moveFNC (encodingState) {\n        if (encodingState.fnc) {\n            encodingState.fnc = false;\n            return encodingState.previousState === this.key;\n        }\n    };\n\n    State128AB.prototype._shiftState = function _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    State128AB.prototype._moveState = function _moveState () {\n        this.encoding.addPattern(this.MOVE);\n        return true;\n    };\n\n    return State128AB;\n}(State128));\n\nvar states128 = {};\n\nstates128.A = (function (State128AB) {\n    function State128A () {\n        State128AB.apply(this, arguments);\n    }\n\n    if ( State128AB ) State128A.__proto__ = State128AB;\n    State128A.prototype = Object.create( State128AB && State128AB.prototype );\n    State128A.prototype.constructor = State128A;\n\n    State128A.prototype.initProperties = function initProperties () {\n        State128AB.prototype.initProperties.call(this);\n\n        extend(this, {\n            key: \"A\",\n            shiftKey: \"B\",\n            MOVE: 101,\n            START: 103\n        });\n    };\n\n    State128A.prototype.isCode = function isCode (code) {\n        return 0 <= code && code < 96;\n    };\n\n    State128A.prototype.getValue = function getValue (code) {\n        if (code < 32) {\n            return code + 64;\n        }\n\n        return code - 32;\n    };\n\n    return State128A;\n}(State128AB));\n\nstates128.B = (function (State128AB) {\n    function State128B () {\n        State128AB.apply(this, arguments);\n    }\n\n    if ( State128AB ) State128B.__proto__ = State128AB;\n    State128B.prototype = Object.create( State128AB && State128AB.prototype );\n    State128B.prototype.constructor = State128B;\n\n    State128B.prototype.initProperties = function initProperties () {\n        State128AB.prototype.initProperties.call(this);\n\n        extend(this, {\n            key: \"B\",\n            shiftKey: \"A\",\n            MOVE: 100,\n            START: 104\n        });\n    };\n\n    State128B.prototype.isCode = function isCode (code) {\n        return 32 <= code && code < 128;\n    };\n\n    State128B.prototype.getValue = function getValue (code) {\n        return code - 32;\n    };\n\n    return State128B;\n}(State128AB));\n\nstates128.C = (function (State128) {\n    function State128C () {\n        State128.apply(this, arguments);\n    }\n\n    if ( State128 ) State128C.__proto__ = State128;\n    State128C.prototype = Object.create( State128 && State128.prototype );\n    State128C.prototype.constructor = State128C;\n\n    State128C.prototype.initProperties = function initProperties () {\n        State128.prototype.initProperties.call(this);\n\n        extend(this, {\n            key: \"C\",\n            MOVE: 99,\n            START: 105\n        });\n    };\n\n    State128C.prototype.addStart = function addStart () {\n        this.encoding.addPattern(this.START);\n    };\n\n    State128C.prototype.is = function is (value, index) {\n        var next4 = getSubstring(value, index, 4);\n        return (index + 4 <= value.length || value.length === 2) && numberRegex.test(next4);\n    };\n\n    State128C.prototype.move = function move () {\n        this.encoding.addPattern(this.MOVE);\n    };\n\n    State128C.prototype.pushState = function pushState (encodingState) {\n        var this$1 = this;\n\n        var code;\n\n        while ((code = getSubstring(encodingState.value, encodingState.index, 2)) &&\n            numberRegex.test(code) && code.length === 2) {\n            this$1.encoding.addPattern(parseInt(code, 10));\n            encodingState.index += 2;\n        }\n    };\n\n    State128C.prototype.getValue = function getValue (code) {\n        return code;\n    };\n\n    return State128C;\n}(State128));\n\nstates128.FNC4 = (function (State128) {\n    function State128FNC4(encoding, states) {\n        State128.call(this, encoding);\n        this._initSubStates(states);\n    }\n\n    if ( State128 ) State128FNC4.__proto__ = State128;\n    State128FNC4.prototype = Object.create( State128 && State128.prototype );\n    State128FNC4.prototype.constructor = State128FNC4;\n\n    State128FNC4.prototype.initProperties = function initProperties () {\n        State128.prototype.initProperties.call(this);\n\n        extend(this, {\n            key: \"FNC4\",\n            dependentStates: [\"A\", \"B\"]\n        });\n    };\n\n    State128FNC4.prototype.addStart = function addStart (encodingState) {\n        var code = encodingState.value.charCodeAt(0) - 128,\n            subState = this._getSubState(code);\n\n        this.encoding[subState].addStart();\n    };\n\n    State128FNC4.prototype.is = function is (value, index) {\n        var code = value.charCodeAt(index);\n        return this.isCode(code);\n    };\n\n    State128FNC4.prototype.isCode = function isCode (code) {\n        return 128 <= code && code < 256;\n    };\n\n    State128FNC4.prototype.pushState = function pushState (encodingState) {\n        var this$1 = this;\n\n        var subState = this._initSubState(encodingState),\n            encoding = this.encoding,\n            length = subState.value.length;\n        var 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$1._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    State128FNC4.prototype._pushStart = function _pushStart (subState) {\n        this.encoding.addPattern(this.encoding[subState.state].MOVE);\n        this.encoding.addPattern(this.encoding[subState.state].MOVE);\n    };\n\n    State128FNC4.prototype._initSubState = function _initSubState (encodingState) {\n        var 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    State128FNC4.prototype._initSubStates = function _initSubStates (states) {\n        var this$1 = this;\n\n        this.subStates = [];\n\n        for (var i = 0; i < states.length; i++) {\n            if (inArray(states[i], this$1.dependentStates)) {\n                this$1.subStates.push(states[i]);\n            }\n        }\n    };\n\n    State128FNC4.prototype._getSubState = function _getSubState (code) {\n        var this$1 = this;\n\n        for (var i = 0; i < this.subStates.length; i++) {\n            if (this$1.encoding[this$1.subStates[i]].isCode(code)) {\n                return this$1.subStates[i];\n            }\n        }\n    };\n\n    State128FNC4.prototype._getAll = function _getAll (value, index) {\n        var code;\n        var result = \"\";\n        var 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    return State128FNC4;\n}(State128));\n\nstates128.FNC1 = (function (State128) {\n    function States128FNC1(encoding, states) {\n        State128.call(this, encoding);\n        this.states = states;\n    }\n\n    if ( State128 ) States128FNC1.__proto__ = State128;\n    States128FNC1.prototype = Object.create( State128 && State128.prototype );\n    States128FNC1.prototype.constructor = States128FNC1;\n\n    States128FNC1.prototype.initProperties = function initProperties () {\n        State128.prototype.initProperties.call(this);\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    States128FNC1.prototype.addStart = function addStart () {\n        this.encoding[this.startState].addStart();\n    };\n\n    States128FNC1.prototype.is = function is () {\n        return inArray(this.key, this.states);\n    };\n\n    States128FNC1.prototype.pushState = function pushState (encodingState) {\n        var this$1 = this;\n\n        var 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        var trueCondition = true;\n\n        while (trueCondition) {\n            subState.index = 0;\n\n            separatorLength = value.charAt(index) === this$1.startAI ? 2 : 0;\n            current = separatorLength > 0 ? this$1.getBySeparator(value, index) : this$1.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$1.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$1.validate(current, subState.value);\n            encoding.pushData(subState, this$1.dependentStates);\n\n            if (nextStart >= value.length) {\n                break;\n            }\n\n            index = nextStart;\n\n            if (subState.state !== this$1.startState) {\n                encoding[this$1.startState].move(subState);\n                subState.state = this$1.startState;\n            }\n\n            if (!current.ai.length) {\n                encoding.addPattern(this$1.START);\n            }\n        }\n\n        encodingState.index = encodingState.value.length;\n    };\n\n    States128FNC1.prototype.validate = function validate (current, value) {\n        var 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    States128FNC1.prototype.getByLength = function getByLength (value, index) {\n        var this$1 = this;\n\n        var id;\n        var applicationIdentifier;\n\n        for (var i = 2; i <= 4; i++) {\n            id = getSubstring(value, index, i);\n            applicationIdentifier = this$1.getApplicationIdentifier(id) || this$1.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    States128FNC1.prototype.unsupportedAIError = function unsupportedAIError (id) {\n        throw new Error(\"'\" + id + \"' is not a supported Application Identifier\");\n    };\n\n    States128FNC1.prototype.getBySeparator = function getBySeparator (value, index) {\n        var 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    States128FNC1.prototype.getApplicationIdentifier = function getApplicationIdentifier (id) {\n        var applicationIdentifier = this.applicationIdentifiers,\n            multiKey = applicationIdentifier.multiKey;\n\n        if (applicationIdentifier[id]) {\n            return applicationIdentifier[id];\n        }\n\n        for (var 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                var ranges = multiKey[i].ranges;\n\n                for (var 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    return States128FNC1;\n}(State128));\n\nexport var Code128Base = (function (Encoding) {\n    function Code128Base(options) {\n        Encoding.call(this, options);\n        this._initStates();\n    }\n\n    if ( Encoding ) Code128Base.__proto__ = Encoding;\n    Code128Base.prototype = Object.create( Encoding && Encoding.prototype );\n    Code128Base.prototype.constructor = Code128Base;\n\n    Code128Base.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\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    Code128Base.prototype._initStates = function _initStates () {\n        var this$1 = this;\n\n        for (var i = 0; i < this.states.length; i++) {\n            this$1[this$1.states[i]] = new states128[this$1.states[i]](this$1, this$1.states);\n        }\n    };\n\n    Code128Base.prototype.initValue = function 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    Code128Base.prototype.addData = function addData () {\n        var 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    Code128Base.prototype.pushData = function pushData (encodingState, states) {\n        var this$1 = this;\n\n        var trueCondition = true;\n\n        while (trueCondition) {\n            this$1[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$1.getNextState(encodingState, states);\n                this$1[encodingState.state].move(encodingState);\n            } else {\n                var temp = encodingState.state;\n                encodingState.state = encodingState.previousState;\n                encodingState.previousState = temp;\n                encodingState.shifted = false;\n            }\n        }\n    };\n\n    Code128Base.prototype.addStart = function addStart (encodingState) {\n        this[encodingState.state].addStart(encodingState);\n        this.position = 1;\n    };\n\n    Code128Base.prototype.addCheckSum = function addCheckSum () {\n        this.checksum = this.checkSum % 103;\n        this.addPattern(this.checksum);\n    };\n\n    Code128Base.prototype.addStop = function addStop () {\n        this.addPattern(this.STOP);\n    };\n\n    Code128Base.prototype.setBaseUnit = function setBaseUnit () {\n        this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n    };\n\n    Code128Base.prototype.addPattern = function addPattern (code) {\n        var this$1 = this;\n\n        var pattern = this.characterMap[code].toString();\n        var value;\n\n        for (var i = 0; i < pattern.length; i++) {\n            value = parseInt(pattern.charAt(i), 10);\n            this$1.pattern.push(value);\n            this$1.totalUnits += value;\n        }\n        this.checkSum += code * this.position++;\n    };\n\n    Code128Base.prototype.getNextState = function getNextState (encodingState, states) {\n        var this$1 = this;\n\n        for (var i = 0; i < states.length; i++) {\n            if (this$1[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    return Code128Base;\n}(Encoding));\n\nexport var Code128a = (function (Code128Base) {\n    function Code128a () {\n        Code128Base.apply(this, arguments);\n    }\n\n    if ( Code128Base ) Code128a.__proto__ = Code128Base;\n    Code128a.prototype = Object.create( Code128Base && Code128Base.prototype );\n    Code128a.prototype.constructor = Code128a;\n\n    Code128a.prototype.initProperties = function initProperties () {\n        Code128Base.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"Code 128 A\",\n            states: [\"A\"]\n        });\n    };\n\n    return Code128a;\n}(Code128Base));\n\nexport var Code128b = (function (Code128Base) {\n    function Code128b () {\n        Code128Base.apply(this, arguments);\n    }\n\n    if ( Code128Base ) Code128b.__proto__ = Code128Base;\n    Code128b.prototype = Object.create( Code128Base && Code128Base.prototype );\n    Code128b.prototype.constructor = Code128b;\n\n    Code128b.prototype.initProperties = function initProperties () {\n        Code128Base.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"Code 128 B\",\n            states: [\"B\"]\n        });\n    };\n\n    return Code128b;\n}(Code128Base));\n\nexport var Code128c = (function (Code128Base) {\n    function Code128c () {\n        Code128Base.apply(this, arguments);\n    }\n\n    if ( Code128Base ) Code128c.__proto__ = Code128Base;\n    Code128c.prototype = Object.create( Code128Base && Code128Base.prototype );\n    Code128c.prototype.constructor = Code128c;\n\n    Code128c.prototype.initProperties = function initProperties () {\n        Code128Base.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"Code 128 C\",\n            states: [\"C\"]\n        });\n    };\n\n    return Code128c;\n}(Code128Base));\n\nexport var Code128 = (function (Code128Base) {\n    function Code128 () {\n        Code128Base.apply(this, arguments);\n    }\n\n    if ( Code128Base ) Code128.__proto__ = Code128Base;\n    Code128.prototype = Object.create( Code128Base && Code128Base.prototype );\n    Code128.prototype.constructor = Code128;\n\n    Code128.prototype.initProperties = function initProperties () {\n        Code128Base.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"Code 128\",\n            states: [\"C\", \"B\", \"A\", \"FNC4\"]\n        });\n    };\n\n    return Code128;\n}(Code128Base));\n\nexport var CodeGS1128 = (function (Code128Base) {\n    function CodeGS1128 () {\n        Code128Base.apply(this, arguments);\n    }\n\n    if ( Code128Base ) CodeGS1128.__proto__ = Code128Base;\n    CodeGS1128.prototype = Object.create( Code128Base && Code128Base.prototype );\n    CodeGS1128.prototype.constructor = CodeGS1128;\n\n    CodeGS1128.prototype.initProperties = function initProperties () {\n        Code128Base.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"Code GS1-128\",\n            states: [\"FNC1\", \"C\", \"B\"]\n        });\n    };\n\n    return CodeGS1128;\n}(Code128Base));\n\nfunction getSubstring(value, index, count) {\n    return value.substring(index, index + count);\n}\n","import { Encoding } from './encoding';\n\nvar extend = Object.assign;\n\nexport var MsiBase = (function (Encoding) {\n    function MsiBase () {\n        Encoding.apply(this, arguments);\n    }\n\n    if ( Encoding ) MsiBase.__proto__ = Encoding;\n    MsiBase.prototype = Object.create( Encoding && Encoding.prototype );\n    MsiBase.prototype.constructor = MsiBase;\n\n    MsiBase.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\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    MsiBase.prototype.initValue = function initValue (value, width) {\n        this.pattern = [];\n        this.value = value;\n        this.checkSumLength = 0;\n        this.width = width;\n    };\n\n    MsiBase.prototype.setBaseUnit = function setBaseUnit () {\n        var startStopLength = 7;\n\n        this.baseUnit = this.width /\n            (12 * (this.value.length + this.checkSumLength) + this.quietZoneLength + startStopLength);\n    };\n\n    MsiBase.prototype.addData = function addData () {\n        var this$1 = this;\n\n        var value = this.value;\n\n        this.addPattern(this.START);\n\n        for (var i = 0; i < value.length; i++) {\n            this$1.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    MsiBase.prototype.addCharacter = function addCharacter (character) {\n        var pattern = this.characterMap[character];\n\n        if (!pattern) {\n            this.invalidCharacterError(character);\n        }\n\n        this.addPattern(pattern);\n    };\n\n    MsiBase.prototype.addPattern = function addPattern (pattern) {\n        var this$1 = this;\n\n        for (var i = 0; i < pattern.length; i++) {\n            this$1.pattern.push(parseInt(pattern.charAt(i), 10));\n        }\n    };\n\n    MsiBase.prototype.addCheckSum = function addCheckSum () {\n        var this$1 = this;\n\n        var checkSumFunction = this.checkSums[this.checkSumType];\n        var checkValues = checkSumFunction.call(this.checkSums, this.value);\n\n        this.checksum = checkValues.join(\"\");\n\n        for (var i = 0; i < checkValues.length; i++) {\n            this$1.checkSumLength++;\n            this$1.addPattern(this$1.characterMap[checkValues[i]]);\n        }\n    };\n\n    return MsiBase;\n}(Encoding));\n\nexport var MsiMod10 = (function (MsiBase) {\n    function MsiMod10 () {\n        MsiBase.apply(this, arguments);\n    }\n\n    if ( MsiBase ) MsiMod10.__proto__ = MsiBase;\n    MsiMod10.prototype = Object.create( MsiBase && MsiBase.prototype );\n    MsiMod10.prototype.constructor = MsiMod10;\n\n    MsiMod10.prototype.initProperties = function initProperties () {\n        MsiBase.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"MSI Modulo10\",\n            checkSumType: \"Modulo10\"\n        });\n    };\n\n    return MsiMod10;\n}(MsiBase));\n\nexport var MsiMod11 = (function (MsiBase) {\n    function MsiMod11 () {\n        MsiBase.apply(this, arguments);\n    }\n\n    if ( MsiBase ) MsiMod11.__proto__ = MsiBase;\n    MsiMod11.prototype = Object.create( MsiBase && MsiBase.prototype );\n    MsiMod11.prototype.constructor = MsiMod11;\n\n    MsiMod11.prototype.initProperties = function initProperties () {\n        MsiBase.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"MSI Modulo11\",\n            checkSumType: \"Modulo11\"\n        });\n    };\n\n    return MsiMod11;\n}(MsiBase));\n\nexport var MsiMod1010 = (function (MsiBase) {\n    function MsiMod1010 () {\n        MsiBase.apply(this, arguments);\n    }\n\n    if ( MsiBase ) MsiMod1010.__proto__ = MsiBase;\n    MsiMod1010.prototype = Object.create( MsiBase && MsiBase.prototype );\n    MsiMod1010.prototype.constructor = MsiMod1010;\n\n    MsiMod1010.prototype.initProperties = function initProperties () {\n        MsiBase.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"MSI Modulo10 Modulo10\",\n            checkSumType: \"Modulo10Modulo10\"\n        });\n    };\n\n    return MsiMod1010;\n}(MsiBase));\n\nexport var MsiMod1110 = (function (MsiBase) {\n    function MsiMod1110 () {\n        MsiBase.apply(this, arguments);\n    }\n\n    if ( MsiBase ) MsiMod1110.__proto__ = MsiBase;\n    MsiMod1110.prototype = Object.create( MsiBase && MsiBase.prototype );\n    MsiMod1110.prototype.constructor = MsiMod1110;\n\n    MsiMod1110.prototype.initProperties = function initProperties () {\n        MsiBase.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"MSI Modulo11 Modulo10\",\n            checkSumType: \"Modulo11Modulo10\"\n        });\n    };\n\n    return MsiMod1110;\n}(MsiBase));\n\nvar checkSums = {\n    Modulo10: function Modulo10(value) {\n        var 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: function Modulo11(value) {\n        var weightedSum = 0,\n            mod = 11,\n            length = value.length,\n            weight,\n            checkValue;\n\n        for (var 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: function Modulo11Modulo10(value) {\n        var checkValues = this.Modulo11(value),\n            mod11Value;\n        mod11Value = value + checkValues[0];\n\n        return checkValues.concat(this.Modulo10(mod11Value));\n    },\n    Modulo10Modulo10: function Modulo10Modulo10(value) {\n        var 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\nvar extend = Object.assign;\n\nexport var Ean13 = (function (Encoding) {\n    function Ean13 () {\n        Encoding.apply(this, arguments);\n    }\n\n    if ( Encoding ) Ean13.__proto__ = Encoding;\n    Ean13.prototype = Object.create( Encoding && Encoding.prototype );\n    Ean13.prototype.constructor = Ean13;\n\n    Ean13.prototype.initProperties = function initProperties () {\n        Encoding.prototype.initProperties.call(this);\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    Ean13.prototype.initValue = function initValue (value, width, height) {\n        var 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    Ean13.prototype.addData = function 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    Ean13.prototype.addSide = function addSide (leftPart, key) {\n        var this$1 = this;\n\n        for (var i = 0; i < leftPart.length; i++) {\n            if (key && parseInt(this$1.keyTable[key].charAt(i), 10)) {\n                this$1.addPieces(Array.prototype.slice.call(this$1.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n            } else {\n                this$1.addPieces(this$1.characterMap.digits[leftPart.charAt(i)], true);\n            }\n        }\n    };\n\n    Ean13.prototype.addPieces = function addPieces (arrToAdd, limitedHeight) {\n        var this$1 = this;\n\n        for (var i = 0; i < arrToAdd.length; i++) {\n            if (limitedHeight) {\n                this$1.pattern.push({\n                    y1: 0,\n                    y2: this$1.options.height * 0.95,\n                    width: arrToAdd[i]\n                });\n            } else {\n                this$1.pattern.push(arrToAdd[i]);\n            }\n        }\n    };\n\n    Ean13.prototype.calculateChecksum = function calculateChecksum () {\n        var odd = 0,\n            even = 0,\n            value = this.value.split(\"\").reverse().join(\"\");\n\n        for (var 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        var checksum = (10 - ((3 * odd + even) % 10)) % 10;\n\n        return checksum;\n    };\n\n    return Ean13;\n}(Encoding));\n","import { Ean13 } from './ean13';\n\nvar extend = Object.assign;\n\nexport var Ean8 = (function (Ean13) {\n    function Ean8 () {\n        Ean13.apply(this, arguments);\n    }\n\n    if ( Ean13 ) Ean8.__proto__ = Ean13;\n    Ean8.prototype = Object.create( Ean13 && Ean13.prototype );\n    Ean8.prototype.constructor = Ean8;\n\n    Ean8.prototype.initProperties = function initProperties () {\n        Ean13.prototype.initProperties.call(this);\n\n        extend(this, {\n            name: \"EAN 8\"\n        });\n    };\n\n    Ean8.prototype.initValue = function 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    return Ean8;\n}(Ean13));\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 var 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};\nEncodings[\"gs1-128\"] = CodeGS1128;\nEncodings.msimod10 = MsiMod10;\nEncodings.msimod11 = MsiMod11;\nEncodings.msimod1010 = MsiMod1010;\nEncodings.msimod1110 = MsiMod1110;\nEncodings.postnet = Postnet;\nEncodings.ean8 = Ean8;\nEncodings.ean13 = Ean13;\n","export function surfaceSize(element, surfaceType) {\n    var 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    var 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\nvar DEFAULT_BARCODE_WIDTH = 300;\nvar DEFAULT_BARCODE_HEIGHT = 100;\n\nvar Barcode = (function (Class) {\n    function Barcode(element, options, errorHandler) {\n        if ( errorHandler === void 0 ) errorHandler = defaultErrorHandler;\n\n        Class.call(this);\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    if ( Class ) Barcode.__proto__ = Class;\n    Barcode.prototype = Object.create( Class && Class.prototype );\n    Barcode.prototype.constructor = Barcode;\n\n    Barcode.prototype.destroy = function destroy () {\n        this._destroySurface();\n    };\n\n    Barcode.prototype._initElement = function _initElement () {\n        addClass(this.element, \"k-barcode\");\n    };\n\n    Barcode.prototype._initSurface = function _initSurface () {\n        var ref = this;\n        var options = ref.options;\n        var surface = ref.surface;\n\n        if (!surface || surface.options.type !== options.renderAs) {\n            this._destroySurface();\n            this._initSurfaceElement();\n            this.surface = this._createSurface();\n        }\n    };\n\n    Barcode.prototype._createSurface = function _createSurface () {\n        return draw.Surface.create(this.surfaceElement, {\n            type: this.options.renderAs\n        });\n    };\n\n    Barcode.prototype._destroySurface = function _destroySurface () {\n        if (this.surface) {\n            this.surface.destroy();\n            this.surface = null;\n            this._destroySurfaceElement();\n        }\n    };\n\n    Barcode.prototype._initSurfaceElement = function _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    Barcode.prototype._destroySurfaceElement = function _destroySurfaceElement () {\n        if (this.surfaceElement && this.surfaceElement.parentNode) {\n            this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n            this.surfaceElement = null;\n        }\n    };\n\n    Barcode.prototype.setOptions = function setOptions (options) {\n        this._setOptions(options);\n        this._initSurface();\n        this.redraw();\n    };\n\n    Barcode.prototype.redraw = function redraw () {\n        var 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    Barcode.prototype.getSize = function getSize () {\n        return {\n            width: this.element.offsetWidth,\n            height: this.element.offsetHeight\n        };\n    };\n\n    Barcode.prototype._resize = function _resize () {\n        this.redraw();\n    };\n\n    Barcode.prototype.createVisual = function createVisual () {\n        this.visual = this._render();\n    };\n\n    Barcode.prototype._render = function _render () {\n        var options = this.options;\n        var value = options.value;\n        var textOptions = options.text;\n        var textMargin = getSpacing(textOptions.margin);\n        var size = this._getSize();\n        var border = options.border || {};\n        var encoding = this.encoding;\n        var contentBox = new Box(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding);\n        var barHeight = contentBox.height();\n        var encodedValue;\n        var textToDisplay;\n        var textHeight;\n        var 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    Barcode.prototype.exportVisual = function exportVisual () {\n        return this._render();\n    };\n\n    Barcode.prototype._getSize = function _getSize () {\n        var element = this.element;\n        var elementSize = surfaceSize(element, this.options.renderAs);\n        var 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    Barcode.prototype.value = function value (value$1) {\n        if (!defined(value$1)) {\n            return this.options.value;\n        }\n\n        this.options.value = String(value$1);\n        this.redraw();\n    };\n\n    Barcode.prototype._getBands = function _getBands (pattern, baseUnit) {\n        var this$1 = this;\n\n        var contentBox = this.contentBox;\n        var offsetX = contentBox.x1;\n        var stepX;\n        var patternItem;\n        var group = new draw.Group();\n\n        for (var i = 0; i < pattern.length; i++) {\n            patternItem = isObject(pattern[i]) ? pattern[i] : {\n                width: pattern[i],\n                y1: 0,\n                y2: this$1.barHeight\n            };\n\n            stepX = patternItem.width * baseUnit;\n\n            if (i % 2) {\n                var 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                var path = draw.Path.fromRect(rect, {\n                    fill: {\n                        color: this$1.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    Barcode.prototype._getBackground = function _getBackground (size) {\n        var options = this.options;\n        var border = options.border || {};\n        var box = new Box(0, 0, size.width, size.height).unpad(border.width / 2);\n        var 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    Barcode.prototype._getText = function _getText (value) {\n        var textOptions = this.options.text;\n        var 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    Barcode.prototype._setOptions = function _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    return Barcode;\n}(Class));\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","export var extend = Object.assign;\n\nexport function splitInto(str, chunkLength) {\n    var result = [];\n    var 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    var 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 var FreeCellVisitor = (function (Class) {\n    function FreeCellVisitor(matrix) {\n        Class.call(this);\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    if ( Class ) FreeCellVisitor.__proto__ = Class;\n    FreeCellVisitor.prototype = Object.create( Class && Class.prototype );\n    FreeCellVisitor.prototype.constructor = FreeCellVisitor;\n\n    FreeCellVisitor.prototype.move = function move () {\n        this.row += this.dir * this.c;\n        this.c ^= 1;\n        this.column = this.startColumn - this.c;\n    };\n\n    FreeCellVisitor.prototype.getNextCell = function getNextCell () {\n        var this$1 = this;\n\n        while (this.matrix[this.row][this.column] !== undefined) {\n            this$1.move();\n\n            if (this$1.row < 0 || this$1.row >= this$1.matrix.length) {\n                this$1.dir = -this$1.dir;\n                this$1.startColumn -= this$1.startColumn !== 8 ? 2 : 3;\n                this$1.column = this$1.startColumn;\n                this$1.row = this$1.dir < 0 ? this$1.matrix.length - 1 : 0;\n            }\n        }\n\n        return {\n            row: this.row,\n            column: this.column\n        };\n    };\n\n    FreeCellVisitor.prototype.getNextRemainderCell = function 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    return FreeCellVisitor;\n}(Class));\n","import { Class } from '../../common';\n\nexport var EncodingResult = (function (Class) {\n    function EncodingResult(dataString, version) {\n        Class.call(this);\n\n        this.dataString = dataString;\n        this.version = version;\n    }\n\n    if ( Class ) EncodingResult.__proto__ = Class;\n    EncodingResult.prototype = Object.create( Class && Class.prototype );\n    EncodingResult.prototype.constructor = EncodingResult;\n\n    return EncodingResult;\n}(Class));\n","import { Class } from '../../../common';\nimport { EncodingResult } from '../encoding-result';\nimport {\n    getModes,\n    getVersion,\n    getDataCodewordsCount,\n    getDataString\n} from '../encoding';\n\nexport var IsoEncoder = (function (Class) {\n    function IsoEncoder () {\n        Class.apply(this, arguments);\n    }\n\n    if ( Class ) IsoEncoder.__proto__ = Class;\n    IsoEncoder.prototype = Object.create( Class && Class.prototype );\n    IsoEncoder.prototype.constructor = IsoEncoder;\n\n    IsoEncoder.prototype.getEncodingResult = function getEncodingResult (inputString, errorCorrectionLevel) {\n        var 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    return IsoEncoder;\n}(Class));\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\nvar 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        function (row, column) { return (row + column) % 2 === 0; },\n        function (row, column) { return row % 2 === 0; },\n        function (row, column) { return column % 3 === 0; },\n        function (row, column) { return (row + column) % 3 === 0; },\n        function (row, column) { return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0; },\n        function (row, column) { return ((row * column) % 2) + ((row * column) % 3) === 0; },\n        function (row, column) { return (((row * column) % 2) + ((row * column) % 3)) % 2 === 0; },\n        function (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 var generatorPolynomials = [[1, 0], [1, 25, 0]];\n\nexport function fillFunctionCell(matrices, bit, x, y) {\n    for (var i = 0; i < matrices.length; i++) {\n        matrices[i][x][y] = bit;\n    }\n}\n\nexport function fillDataCell(matrices, bit, x, y) {\n    for (var 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    var cellVisitor = new FreeCellVisitor(matrices[0]),\n        block,\n        codewordIdx,\n        cell;\n\n    for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n        block = blocks[blockIdx];\n        codewordIdx = 0;\n\n        while (block.length > 0) {\n            for (var i = 0; i < block.length; i++) {\n                for (var 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    var dataBitsCount = totalDataCodewords * 8,\n        terminatorIndex = 0,\n        paddingCodewordIndex = 0;\n    var 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    var result;\n    var 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    var result = [],\n        idx = x.length - 2;\n\n    for (var 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    var result = [];\n\n    for (var i = 0; i < x.length; i++) {\n        for (var 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    var maxErrorCorrectionCodeWordsCount = 68;\n\n    for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n        var 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    var 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    var 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    var codewordStart = 0,\n        dataBlocks = [],\n        errorBlocks = [],\n        dataBlock,\n        versionGroups = versionCodewordsInformation.groups,\n        blockCodewordsCount,\n        groupBlocksCount,\n        messagePolynomial,\n        codeword;\n\n    for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n        groupBlocksCount = versionGroups[groupIdx][0];\n\n        for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n            blockCodewordsCount = versionGroups[groupIdx][1];\n            dataBlock = [];\n            messagePolynomial = [];\n\n            for (var 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    var 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    var modes = [],\n        previousMode,\n        idx = 0;\n    var 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        var 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    var length = 0,\n        mode;\n\n    for (var 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    var 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    var dataString = \"\",\n        mode;\n\n    for (var 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    var 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 (var 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    var 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    var yLength = numberY.toString(2).length,\n        xLength = numberX.toString(2).length;\n    var 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    var matrices = [],\n        modules = 17 + 4 * version;\n\n    for (var i = 0; i < maskPatternConditions.length; i++) {\n        matrices[i] = new Array(modules);\n\n        for (var 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    var 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    var 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 (var 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    var size = pattern.length + 2,\n        length = pattern.length + 1,\n        value;\n\n    for (var i = 0; i < pattern.length; i++) {\n        for (var 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    var 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    var 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    var 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 (var i = 0; i < points.length; i++) {\n        for (var 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    var row = 6,\n        column = 6,\n        value = 1,\n        modules = matrices[0].length;\n\n    for (var 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    var 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 (var rowIndex = 0; rowIndex < modulesLength; rowIndex++) {\n        for (var columnIndex = 0; columnIndex < modulesLength; columnIndex++) {\n            for (var 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    var 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    var 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    var 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    var minIdx = scoreMaskMatrixes(matrices),\n        optimalMatrix = matrices[minIdx];\n\n    if (version >= 7) {\n        addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n    }\n\n    var 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 var QRDataMode = (function (Class) {\n    function QRDataMode() {\n        Class.call(this);\n\n        this.initProperties();\n    }\n\n    if ( Class ) QRDataMode.__proto__ = Class;\n    QRDataMode.prototype = Object.create( Class && Class.prototype );\n    QRDataMode.prototype.constructor = QRDataMode;\n\n    QRDataMode.prototype.initProperties = function initProperties () {\n        extend(this, {\n            modeIndicator: \"\",\n            bitsInCharacterCount: []\n        });\n    };\n\n    QRDataMode.prototype.getVersionIndex = function 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    QRDataMode.prototype.getBitsCharacterCount = function getBitsCharacterCount (version) {\n        return this.bitsInCharacterCount[this.getVersionIndex(version || 40)];\n    };\n\n    QRDataMode.prototype.getModeCountString = function getModeCountString (length, version) {\n        return this.modeIndicator + toBitsString(length, this.getBitsCharacterCount(version));\n    };\n\n    QRDataMode.prototype.encode = function encode () { };\n\n    QRDataMode.prototype.getStringBitsLength = function getStringBitsLength () { };\n\n    QRDataMode.prototype.getValue = function getValue () { };\n\n    return QRDataMode;\n}(Class));\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n    toBitsString,\n    splitInto\n} from '../../utils';\n\nexport var NumericQRDataMode = (function (QRDataMode) {\n    function NumericQRDataMode () {\n        QRDataMode.apply(this, arguments);\n    }\n\n    if ( QRDataMode ) NumericQRDataMode.__proto__ = QRDataMode;\n    NumericQRDataMode.prototype = Object.create( QRDataMode && QRDataMode.prototype );\n    NumericQRDataMode.prototype.constructor = NumericQRDataMode;\n\n    NumericQRDataMode.prototype.initProperties = function initProperties () {\n        QRDataMode.prototype.initProperties.call(this);\n\n        extend(this, {\n            bitsInCharacterCount: [10, 12, 14],\n            modeIndicator: \"0001\"\n        });\n    };\n\n    NumericQRDataMode.prototype.getValue = function getValue (character) {\n        return parseInt(character, 10);\n    };\n\n    NumericQRDataMode.prototype.encode = function encode (str, version) {\n        var mode = this,\n            parts = splitInto(str, 3),\n            result = mode.getModeCountString(str.length, version);\n        var 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    NumericQRDataMode.prototype.getStringBitsLength = function getStringBitsLength (inputLength, version) {\n        var mod3 = inputLength % 3;\n        return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n    };\n\n    return NumericQRDataMode;\n}(QRDataMode));\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n    toBitsString,\n    splitInto\n} from '../../utils';\n\nexport var AlphaNumericQRDataMode = (function (QRDataMode) {\n    function AlphaNumericQRDataMode () {\n        QRDataMode.apply(this, arguments);\n    }\n\n    if ( QRDataMode ) AlphaNumericQRDataMode.__proto__ = QRDataMode;\n    AlphaNumericQRDataMode.prototype = Object.create( QRDataMode && QRDataMode.prototype );\n    AlphaNumericQRDataMode.prototype.constructor = AlphaNumericQRDataMode;\n\n    AlphaNumericQRDataMode.prototype.initProperties = function initProperties () {\n        QRDataMode.prototype.initProperties.call(this);\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    AlphaNumericQRDataMode.prototype.getValue = function getValue (character) {\n        return this.characters[character];\n    };\n\n    AlphaNumericQRDataMode.prototype.encode = function encode (str, version) {\n        var this$1 = this;\n\n        var\n            parts = splitInto(str, 2),\n            result = this.getModeCountString(str.length, version),\n            value;\n        var i;\n\n        for (i = 0; i < parts.length - 1; i++) {\n            value = 45 * this$1.getValue(parts[i].charAt(0)) + this$1.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    AlphaNumericQRDataMode.prototype.getStringBitsLength = function getStringBitsLength (inputLength, version) {\n        return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n    };\n\n    return AlphaNumericQRDataMode;\n}(QRDataMode));\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n    toBitsString\n} from '../../utils';\n\nexport var ByteQRDataMode = (function (QRDataMode) {\n    function ByteQRDataMode () {\n        QRDataMode.apply(this, arguments);\n    }\n\n    if ( QRDataMode ) ByteQRDataMode.__proto__ = QRDataMode;\n    ByteQRDataMode.prototype = Object.create( QRDataMode && QRDataMode.prototype );\n    ByteQRDataMode.prototype.constructor = ByteQRDataMode;\n\n    ByteQRDataMode.prototype.initProperties = function initProperties () {\n        QRDataMode.prototype.initProperties.call(this);\n\n        extend(this, {\n            bitsInCharacterCount: [8, 16, 16],\n            modeIndicator: \"0100\"\n        });\n    };\n\n    ByteQRDataMode.prototype.getValue = function getValue (character) {\n        var 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    ByteQRDataMode.prototype.encode = function encode (str, version) {\n        var mode = this,\n            result = mode.getModeCountString(str.length, version);\n\n        for (var i = 0; i < str.length; i++) {\n            result += toBitsString(mode.getValue(str.charAt(i)), 8);\n        }\n\n        return result;\n    };\n\n    ByteQRDataMode.prototype.getStringBitsLength = function getStringBitsLength (inputLength, version) {\n        return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n    };\n\n    return ByteQRDataMode;\n}(QRDataMode));\n","import { NumericQRDataMode } from './numeric-data-mode';\nimport { AlphaNumericQRDataMode } from './alpha-numeric-data-mode';\nimport { ByteQRDataMode } from './byte-data-mode';\n\nvar NUMERIC = \"numeric\";\nvar ALPHA_NUMERIC = \"alphanumeric\";\nvar BYTE = \"byte\";\n\nexport var DataModeInstances = {};\nDataModeInstances[NUMERIC] = new NumericQRDataMode();\nDataModeInstances[ALPHA_NUMERIC] = new AlphaNumericQRDataMode();\nDataModeInstances[BYTE] = new ByteQRDataMode();\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\nvar BYTE = \"byte\";\n\nexport var Utf8Encoder = (function (Class) {\n    function Utf8Encoder() {\n        Class.call(this);\n\n        this.initProperties();\n\n        this.mode = DataModeInstances[this.encodingMode];\n    }\n\n    if ( Class ) Utf8Encoder.__proto__ = Class;\n    Utf8Encoder.prototype = Object.create( Class && Class.prototype );\n    Utf8Encoder.prototype.constructor = Utf8Encoder;\n\n    Utf8Encoder.prototype.initProperties = function initProperties () {\n        extend(this, {\n            encodingMode: BYTE,\n            utfBOM: \"111011111011101110111111\",\n            initialModeCountStringLength: 20,\n            ranges: [128, 2048, 65536, 2097152, 67108864]\n        });\n    };\n\n    Utf8Encoder.prototype.getEncodingResult = function getEncodingResult (inputString, errorCorrectionLevel) {\n        var 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    Utf8Encoder.prototype.getDataCodewordsCount = function getDataCodewordsCount (data) {\n        var dataLength = data.length,\n            dataCodewordsCount = Math.ceil((this.initialModeCountStringLength + dataLength) / 8);\n\n        return dataCodewordsCount;\n    };\n\n    Utf8Encoder.prototype.encode = function encode (str) {\n        var this$1 = this;\n\n        var result = this.utfBOM;\n\n        for (var i = 0; i < str.length; i++) {\n            result += this$1.encodeCharacter(str.charCodeAt(i));\n        }\n\n        return result;\n    };\n\n    Utf8Encoder.prototype.encodeCharacter = function encodeCharacter (code) {\n        var bytesCount = this.getBytesCount(code),\n            bc = bytesCount - 1,\n            result = \"\";\n\n        if (bytesCount === 1) {\n            result = toBitsString(code, 8);\n        } else {\n            var significantOnes = 8 - bytesCount;\n\n            for (var 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    Utf8Encoder.prototype.getBytesCount = function getBytesCount (code) {\n        var ranges = this.ranges;\n\n        for (var i = 0; i < ranges.length; i++) {\n            if (code < ranges[i]) {\n                return i + 1;\n            }\n        }\n    };\n\n    return Utf8Encoder;\n}(Class));\n","export var 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\nvar round = Math.round;\nvar crossPattern = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 1], [3, 1], [3, 0], [2, 0], [2, -1], [1, -1], [1, 0]];\nvar squarePattern = [[0, 1], [1, 1], [1, 0]];\n\nvar 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\nvar QRCode = (function (Class) {\n    function QRCode(element, options, errorHandler) {\n        if ( errorHandler === void 0 ) errorHandler = defaultErrorHandler;\n\n        Class.call(this);\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    if ( Class ) QRCode.__proto__ = Class;\n    QRCode.prototype = Object.create( Class && Class.prototype );\n    QRCode.prototype.constructor = QRCode;\n\n    QRCode.prototype.destroy = function destroy () {\n        this._destroySurface();\n    };\n\n    QRCode.prototype._initElement = function _initElement () {\n        addClass(this.element, \"k-qrcode\");\n    };\n\n    QRCode.prototype._initSurface = function _initSurface () {\n        var ref = this;\n        var options = ref.options;\n        var surface = ref.surface;\n\n        if (!surface || surface.options.type !== options.renderAs) {\n            this._destroySurface();\n            this._initSurfaceElement();\n            this.surface = this._createSurface();\n        }\n    };\n\n    QRCode.prototype._createSurface = function _createSurface () {\n        return draw.Surface.create(this.surfaceElement, {\n            type: this.options.renderAs\n        });\n    };\n\n    QRCode.prototype._destroySurface = function _destroySurface () {\n        if (this.surface) {\n            this.surface.destroy();\n            this.surface = null;\n            this._destroySurfaceElement();\n        }\n    };\n\n    QRCode.prototype._initSurfaceElement = function _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    QRCode.prototype._destroySurfaceElement = function _destroySurfaceElement () {\n        if (this.surfaceElement && this.surfaceElement.parentNode) {\n            this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n            this.surfaceElement = null;\n        }\n    };\n\n    QRCode.prototype.redraw = function redraw () {\n        var 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    QRCode.prototype.getSize = function getSize () {\n        var element = this.element;\n        var elementWidth = element.clientWidth;\n        var elementHeight = element.clientHeight;\n        var 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    QRCode.prototype._resize = function _resize () {\n        this.redraw();\n    };\n\n    QRCode.prototype.createVisual = function createVisual () {\n        this.visual = this._render();\n    };\n\n    QRCode.prototype.exportVisual = function exportVisual () {\n        return this._render();\n    };\n\n    QRCode.prototype._render = function _render () {\n        var 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        var 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    QRCode.prototype._renderLogo = function _renderLogo (qrSize, baseUnit) {\n        var image;\n        var imageRect;\n        var center = round(qrSize / 2);\n        var logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n        var logoUrl = this.options.overlay.imageUrl;\n        var 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    QRCode.prototype._renderSwissCode = function _renderSwissCode (qrSize, baseUnit) {\n        var logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n        logoSize = Math.max(logoSize.width, logoSize.height);\n        var crossSize = logoSize / 4;\n        var crossOffset = crossSize / 2;\n        var center = qrSize / 2;\n        var start = {};\n        var 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    QRCode.prototype._renderShape = function _renderShape (start, step, pattern, color) {\n        var 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 (var 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    QRCode.prototype._getSize = function _getSize () {\n        var size;\n\n        if (this.options.size) {\n            size = parseInt(this.options.size, 10);\n        } else {\n            var element = this.element;\n            var elementSize = surfaceSize(element, this.options.renderAs);\n            var 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    QRCode.prototype._calculateBaseUnit = function _calculateBaseUnit (size, matrixSize) {\n        var baseUnit = Math.floor(size / matrixSize);\n\n        if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n            var 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    QRCode.prototype._renderMatrix = function _renderMatrix (matrix, baseUnit, quietZoneSize) {\n        var path = new draw.MultiPath({\n            fill: {\n                color: this.options.color\n            },\n            stroke: null\n        });\n\n        for (var row = 0; row < matrix.length; row++) {\n            var y = quietZoneSize + row * baseUnit;\n            var 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                    var x = column;\n                    while (matrix[row][column] === 1) {\n                        column++;\n                    }\n\n                    var x1 = round(quietZoneSize + x * baseUnit);\n                    var y1 = round(y);\n                    var x2 = round(quietZoneSize + column * baseUnit);\n                    var 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    QRCode.prototype._renderBackground = function _renderBackground (size, border) {\n        var box = new Box(0, 0, size, size).unpad(border.width / 2);\n        var 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    QRCode.prototype.setOptions = function setOptions (options) {\n        var 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    QRCode.prototype.value = function value (value$1) {\n        if (value$1 === undefined) {\n            return this._value;\n        }\n\n        this._value = String(value$1);\n\n        this.redraw();\n    };\n\n    QRCode.prototype._hasCustomLogo = function _hasCustomLogo () {\n        return Boolean(this.options.overlay.imageUrl);\n    };\n\n    QRCode.prototype._isSwiss = function _isSwiss () {\n        return this.options.overlay.type === \"swiss\";\n    };\n\n    QRCode.prototype._getLogoSize = function _getLogoSize (defautLogoSize) {\n        var width = this.options.overlay.width;\n        var 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    return QRCode;\n}(Class));\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","// Coordinate reference system\n// World Geodetic System of 1984\nvar 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 var datums = {\n    WGS84: 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\nvar 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 var Location = (function (Class) {\n    function Location(lat, lng) {\n        Class.call(this);\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    if ( Class ) Location.__proto__ = Class;\n    Location.prototype = Object.create( Class && Class.prototype );\n    Location.prototype.constructor = Location;\n\n    Location.prototype.initProperties = function 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    Location.prototype.toArray = function toArray () {\n        return [\n            this.lat,\n            this.lng\n        ];\n    };\n\n    Location.prototype.equals = function equals (loc) {\n        return loc && loc.lat === this.lat && loc.lng === this.lng;\n    };\n\n    Location.prototype.clone = function clone () {\n        return new Location(this.lat, this.lng);\n    };\n\n    Location.prototype.round = function round$1 (precision) {\n        this.lng = round(this.lng, precision);\n        this.lat = round(this.lat, precision);\n        return this;\n    };\n\n    Location.prototype.wrap = function wrap () {\n        this.lng = this.lng % 180;\n        this.lat = this.lat % 90;\n        return this;\n    };\n\n    Location.prototype.distanceTo = function distanceTo (dest, datum) {\n        return this.greatCircleTo(dest, datum).distance;\n    };\n\n    Location.prototype.destination = function destination (distance, initialBearing, initialDatum) {\n        var bearing = rad(initialBearing);\n        var datum = initialDatum || datums.WGS84;\n        var fromLat = rad(this.lat);\n        var fromLng = rad(this.lng);\n        var dToR = distance / datum.a;\n        var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n        var 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    Location.prototype.greatCircleTo = function greatCircleTo (initialDest, initialDatum) {\n        var this$1 = this;\n\n        var dest = Location.create(dest);\n        var 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        var a = datum.a;\n        var b = datum.b;\n        var f = datum.f;\n        var L = rad(dest.lng - this.lng);\n        var U1 = atan((1 - f) * tan(rad(this.lat)));\n        var sinU1 = sin(U1);\n        var cosU1 = cos(U1);\n        var U2 = atan((1 - f) * tan(rad(dest.lat)));\n        var sinU2 = sin(U2);\n        var cosU2 = cos(U2);\n        var lambda = L;\n        var prevLambda;\n        var i = this.DISTANCE_ITERATIONS;\n        var converged = false;\n        var sinLambda;\n        var cosLambda;\n        var sino;\n        var cosA2;\n        var coso;\n        var cos2om;\n        var 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            var 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            var 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$1.DISTANCE_CONVERGENCE;\n        }\n\n        var u2 = cosA2 * (toSquare(a) - toSquare(b)) / toSquare(b);\n        var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n        var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n        var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * toSquare(cos2om)) - B / 6 * cos2om * (-3 + 4 * toSquare(sino)) * (-3 + 4 * toSquare(cos2om))));\n\n        var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n        var 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    Location.prototype.toString = function toString () {\n        // return kendo.format(this.FORMAT, this.lat, this.lng);\n        return String(this.lat) + \",\" + String(this.lng);\n    };\n\n    Location.fromLngLat = function fromLngLat (lngAndLat) {\n        return new Location(lngAndLat[1], lngAndLat[0]);\n    };\n\n    Location.fromLatLng = function fromLatLng (lngAndLat) {\n        return new Location(lngAndLat[0], lngAndLat[1]);\n    };\n\n    Location.create = function 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    return Location;\n}(Class));\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\nvar 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\nvar PI = math.PI,\n    PI_DIV_2 = PI / 2,\n    PI_DIV_4 = PI / 4,\n    DEG_TO_RAD = PI / 180;\n\nvar WGS84 = datums.WGS84;\n\n// WGS 84 / World Mercator\nexport var Mercator = (function (Class) {\n    function Mercator(options) {\n        Class.call(this);\n        this.initProperties();\n        this._initOptions(options);\n    }\n\n    if ( Class ) Mercator.__proto__ = Class;\n    Mercator.prototype = Object.create( Class && Class.prototype );\n    Mercator.prototype.constructor = Mercator;\n\n    Mercator.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Mercator.prototype.initProperties = function 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    Mercator.prototype.forward = function forward (loc, clamp) {\n        var 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    Mercator.prototype._projectLat = function _projectLat (lat) {\n        var 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    Mercator.prototype.inverse = function inverse (point, clamp) {\n        var 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    Mercator.prototype._inverseY = function _inverseY (y) {\n        var 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            var 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    return Mercator;\n}(Class));\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 var SphericalMercator = (function (Mercator) {\n    function SphericalMercator () {\n        Mercator.apply(this, arguments);\n    }\n\n    if ( Mercator ) SphericalMercator.__proto__ = Mercator;\n    SphericalMercator.prototype = Object.create( Mercator && Mercator.prototype );\n    SphericalMercator.prototype.constructor = SphericalMercator;\n\n    SphericalMercator.prototype.initProperties = function initProperties () {\n        Mercator.prototype.initProperties.call(this);\n\n        deepExtend(this, {\n            MAX_LAT: 85.0511287798\n        });\n    };\n\n    SphericalMercator.prototype._projectLat = function _projectLat (lat) {\n        var 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    SphericalMercator.prototype._inverseY = function _inverseY (y) {\n        var r = this.options.datum.a,\n            ts = exp(-y / r);\n        return deg(PI_DIV_2 - 2 * atan(ts));\n    };\n\n    return SphericalMercator;\n}(Mercator));\n\nexport var Equirectangular = (function (Class) {\n    function Equirectangular () {\n        Class.apply(this, arguments);\n    }\n\n    if ( Class ) Equirectangular.__proto__ = Class;\n    Equirectangular.prototype = Object.create( Class && Class.prototype );\n    Equirectangular.prototype.constructor = Equirectangular;\n\n    Equirectangular.prototype.forward = function forward (loc) {\n        return new Point(loc.lng, loc.lat);\n    };\n    Equirectangular.prototype.inverse = function inverse (point) {\n        return new Location(point.y, point.x);\n    };\n\n    return Equirectangular;\n}(Class));\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 var EPSG3857 = (function (Class) {\n    function EPSG3857() {\n        Class.call(this);\n        var crs = this,\n            proj = crs._proj = new SphericalMercator();\n        var 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    if ( Class ) EPSG3857.__proto__ = Class;\n    EPSG3857.prototype = Object.create( Class && Class.prototype );\n    EPSG3857.prototype.constructor = EPSG3857;\n\n    // Location <-> Point (screen coordinates for a given scale)\n    EPSG3857.prototype.toPoint = function toPoint (loc, scale, clamp) {\n        var point = this._proj.forward(loc, clamp);\n        return point.transform(this._tm).scale(scale || 1);\n    };\n    EPSG3857.prototype.toLocation = function toLocation (point, scale, clamp) {\n        var newPoint = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n        return this._proj.inverse(newPoint, clamp);\n    };\n\n    return EPSG3857;\n}(Class));\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 var EPSG3395 = (function (Class) {\n    function EPSG3395() {\n        Class.call(this);\n        this._proj = new Mercator();\n    }\n\n    if ( Class ) EPSG3395.__proto__ = Class;\n    EPSG3395.prototype = Object.create( Class && Class.prototype );\n    EPSG3395.prototype.constructor = EPSG3395;\n    EPSG3395.prototype.toPoint = function toPoint (loc) {\n        return this._proj.forward(loc);\n    };\n    EPSG3395.prototype.toLocation = function toLocation (point) {\n        return this._proj.inverse(point);\n    };\n\n    return EPSG3395;\n}(Class));\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 var EPSG4326 = (function (Class) {\n    function EPSG4326() {\n        Class.call(this);\n        this._proj = new Equirectangular();\n    }\n\n    if ( Class ) EPSG4326.__proto__ = Class;\n    EPSG4326.prototype = Object.create( Class && Class.prototype );\n    EPSG4326.prototype.constructor = EPSG4326;\n    EPSG4326.prototype.toPoint = function toPoint (loc) {\n        return this._proj.forward(loc);\n    };\n    EPSG4326.prototype.toLocation = function toLocation (point) {\n        return this._proj.inverse(point);\n    };\n\n    return EPSG4326;\n}(Class));\n","import { getSupportedFeatures } from '../common';\n\n/* eslint-disable arrow-body-style, no-useless-escape */\n\nexport var extend = Object.assign;\n\nexport var proxy = function (method, context) {\n    return method.bind(context);\n};\n\nexport var convertToHtml = function (html) {\n    var div = document.createElement(\"div\");\n    div.innerHTML = html;\n    return div.firstChild;\n};\n\nexport var appendHtml = function (html, element) {\n    var 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 var removeChildren = function (element) {\n    while (element.firstChild) {\n        element.removeChild(element.firstChild);\n    }\n};\n\nexport var prepend = function (element, originElement) {\n    originElement.insertBefore(element, originElement.firstChild);\n};\n\nexport var wrapInner = function (parent, wrapper) {\n    parent.appendChild(wrapper);\n\n    while (parent.firstChild !== wrapper) {\n        wrapper.appendChild(parent.firstChild);\n    }\n};\n\nexport var toHyphens = function (str) {\n    var 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 var toPixels = function (value) {\n    var 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\nexport var hasNativeScrolling = function (userAgent) {\n    var ref = getSupportedFeatures(userAgent);\n    var mobileOS = ref.mobileOS;\n    return mobileOS.ios || mobileOS.android;\n};\n\nexport var setDefaultEvents = function (type, events) {\n    var proto = type.prototype;\n\n    if (proto.events) {\n        events.forEach(function (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 var wheelDeltaY = function (e) {\n    var deltaY = e.wheelDeltaY;\n    var 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 var renderPos = function (pos) {\n    var result = [];\n\n    if (pos) {\n        var parts = toHyphens(pos).split(\"-\");\n\n        for (var i = 0; i < parts.length; i++) {\n            result.push(\"k-pos-\" + parts[i]);\n        }\n    }\n\n    return result.join(\" \");\n};\n\n/* eslint-enable arrow-body-style, no-useless-escape */\n","import {\n    addClass,\n    defined,\n    Observable,\n    valueOrDefault,\n    deepExtend,\n    setDefaultOptions\n} from '../common';\n\nimport {\n    appendHtml,\n    removeChildren\n} from './utils';\n\nexport var Attribution = (function (Observable) {\n    function Attribution(element, options) {\n        Observable.call(this);\n        this.element = element;\n\n        this._initOptions(options);\n        this.items = [];\n\n        addClass(this.element, 'k-widget k-attribution');\n    }\n\n    if ( Observable ) Attribution.__proto__ = Observable;\n    Attribution.prototype = Object.create( Observable && Observable.prototype );\n    Attribution.prototype.constructor = Attribution;\n\n    Attribution.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Attribution.prototype.filter = function filter (extent, zoom) {\n        this._extent = extent;\n        this._zoom = zoom;\n        this._render();\n    };\n\n    Attribution.prototype.add = function add (item) {\n        var 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    Attribution.prototype.remove = function remove (text) {\n        var this$1 = this;\n\n        var result = [];\n\n        for (var i = 0; i < this.items.length; i++) {\n            var item = this$1.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    Attribution.prototype.clear = function clear () {\n        this.items = [];\n        removeChildren(this.element);\n    };\n\n    Attribution.prototype._render = function _render () {\n        var this$1 = this;\n\n        var result = [];\n\n        for (var i = 0; i < this.items.length; i++) {\n            var item = this$1.items[i];\n            var text = this$1._itemText(item);\n\n            if (text !== '') {\n                result.push(text);\n            }\n        }\n\n        if (result.length > 0) {\n            removeChildren(this.element);\n\n            var html = result.join(this.options.separator);\n            appendHtml(html, this.element);\n\n            this.showElement();\n        } else {\n            this.hideElement();\n        }\n    };\n\n    Attribution.prototype.hideElement = function hideElement () {\n        this.element.style.display = \"none\";\n    };\n\n    Attribution.prototype.showElement = function showElement () {\n        this.element.style.display = \"\";\n    };\n\n    Attribution.prototype._itemText = function _itemText (item) {\n        var text = '';\n        var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n        var inArea = this._inArea(item.extent);\n\n        if (inZoomLevel && inArea) {\n            text += item.text;\n        }\n\n        return text;\n    };\n\n    Attribution.prototype._inZoomLevel = function _inZoomLevel (min, max) {\n        var result = true;\n        var newMin = valueOrDefault(min, -Number.MAX_VALUE);\n        var newMax = valueOrDefault(max, Number.MAX_VALUE);\n\n        result = this._zoom > newMin && this._zoom < newMax;\n        return result;\n    };\n\n    Attribution.prototype._inArea = function _inArea (area) {\n        var result = true;\n\n        if (area) {\n            result = area.contains(this._extent);\n        }\n\n        return result;\n    };\n\n    return Attribution;\n}(Observable));\n\nsetDefaultOptions(Attribution, {\n    name: 'Attribution',\n    separator: '&nbsp;|&nbsp;'\n});\n","import {\n    deepExtend,\n    addClass,\n    Observable,\n    keys,\n    setDefaultOptions,\n    renderIcon,\n    on,\n    off,\n} from '../common';\n\nimport {\n    proxy,\n    setDefaultEvents,\n    convertToHtml\n} from './utils';\n\nvar PAN = \"pan\";\n\nvar directionsMap = {\n    up: {\n        className: \"k-navigator-n\",\n        iconClass: \"k-i-caret-alt-up\"\n    },\n    down: {\n        className: \"k-navigator-s\",\n        iconClass: \"k-i-caret-alt-down\"\n    },\n    right: {\n        className: \"k-navigator-e\",\n        iconClass: \"k-i-caret-alt-right\"\n    },\n    left: {\n        className: \"k-navigator-w\",\n        iconClass: \"k-i-caret-alt-left\"\n    }\n};\n\nfunction createButton(direction, iconOptions) {\n    var html =\n        '<button class=\"k-button k-button-square k-rounded-full k-button-flat k-button-flat-base k-icon-button ' +\n            directionsMap[direction].className +\n            '\" aria-label=\"move ' + direction + '\">' +\n            renderIcon({ icon: (\"caret-alt-\" + direction), iconClass: \"k-button-icon\", svgIcons: iconOptions.svgIcons, type: iconOptions.type }) +\n        '</button>';\n\n    return convertToHtml(html);\n}\n\nexport var Navigator = (function (Observable) {\n    function Navigator(element, options) {\n        Observable.call(this);\n\n        this.element = element;\n        this._initOptions(options);\n\n        var navigateUpButton = createButton(\"up\", options.icons);\n        var navigateRightlButton = createButton(\"right\", options.icons);\n        var navigateDownButton = createButton(\"down\", options.icons);\n        var navigateLeftButton = createButton(\"left\", options.icons);\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        var 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    if ( Observable ) Navigator.__proto__ = Observable;\n    Navigator.prototype = Object.create( Observable && Observable.prototype );\n    Navigator.prototype.constructor = Navigator;\n\n    Navigator.prototype.destroy = function destroy () {\n        this.dispose();\n    };\n\n    // originates from the kendo.jquery version\n    Navigator.prototype.dispose = function dispose () {\n        off(this._keyroot, \"keydown\", this._keydownHandler);\n    };\n\n    Navigator.prototype._tabindex = function _tabindex (target) {\n        var targetElement = target || this.wrapper || this.element;\n\n        var 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    Navigator.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Navigator.prototype._pan = function _pan (x, y) {\n        var panStep = this.options.panStep;\n\n        this.trigger(PAN, {\n            x: x * panStep,\n            y: y * panStep\n        });\n    };\n\n    Navigator.prototype._click = function _click (e) {\n        var x = 0;\n        var y = 0;\n        var 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    Navigator.prototype._keydown = function _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\n    return Navigator;\n}(Observable));\n\nsetDefaultOptions(Navigator, {\n    name: 'Navigator',\n    panStep: 1\n});\n\n\nsetDefaultEvents(Navigator, [\n    PAN\n]);\n","import {\n    deepExtend,\n    addClass,\n    Observable,\n    keys,\n    hasClasses,\n    setDefaultOptions,\n    renderIcon,\n    on,\n    off,\n} from '../common';\n\nimport {\n    setDefaultEvents,\n    convertToHtml\n} from './utils';\n\nfunction createButton(direction, icon, iconOptions) {\n    var html =\n        '<button class=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button k-zoom-' + direction +\n            '\" title=\"zoom-' + direction +\n            '\" aria-label=\"zoom-' + direction + '\">' +\n            renderIcon({ icon: icon, iconClass: \"k-button-icon\", svgIcons: iconOptions.svgIcons, type: iconOptions.type }) +\n        '</button>';\n\n    return convertToHtml(html);\n}\n\nvar PLUS = 187;\nvar MINUS = 189;\nvar FF_PLUS = 61;\nvar FF_MINUS = 173;\nvar CHANGE = \"change\";\n\nexport var ZoomControl = (function (Observable) {\n    function ZoomControl(element, options, iconOptions) {\n        Observable.call(this);\n        this.element = element;\n        this._initOptions(options);\n\n        var zoomInButton = createButton('in', 'plus', iconOptions);\n        var zoomOutButton = createButton('out', 'minus', iconOptions);\n\n        this.element.appendChild(zoomInButton);\n        this.element.appendChild(zoomOutButton);\n        this.element.setAttribute(\"role\", \"group\");\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        var 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    if ( Observable ) ZoomControl.__proto__ = Observable;\n    ZoomControl.prototype = Object.create( Observable && Observable.prototype );\n    ZoomControl.prototype.constructor = ZoomControl;\n\n    ZoomControl.prototype.destroy = function 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    ZoomControl.prototype._tabindex = function _tabindex (target) {\n        var targetElement = target || this.wrapper || this.element;\n\n        var 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    ZoomControl.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    ZoomControl.prototype._change = function _change (direction) {\n        var zoomStep = this.options.zoomStep;\n        this.trigger(CHANGE, { delta: direction * zoomStep });\n    };\n\n    ZoomControl.prototype._click = function _click (e) {\n        var button = e.currentTarget;\n        var 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    ZoomControl.prototype._keydown = function _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\n    return ZoomControl;\n}(Observable));\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\nvar math = Math,\n    max = math.max,\n    min = math.min;\n\nexport var Extent = (function (Class) {\n    function Extent(initialNw, initialSe) {\n        Class.call(this);\n        var nw = Location.create(initialNw);\n        var 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    if ( Class ) Extent.__proto__ = Class;\n    Extent.prototype = Object.create( Class && Class.prototype );\n    Extent.prototype.constructor = Extent;\n\n    var staticAccessors = { World: { configurable: true } };\n\n    Extent.prototype.contains = function contains (loc) {\n        var 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    Extent.prototype.center = function center () {\n        var nw = this.nw;\n        var se = this.se;\n        var lng = nw.lng + (se.lng - nw.lng) / 2;\n        var lat = nw.lat + (se.lat - nw.lat) / 2;\n\n        return new Location(lat, lng);\n    };\n\n    Extent.prototype.containsAny = function containsAny (locs) {\n        var this$1 = this;\n\n        var result = false;\n\n        for (var i = 0; i < locs.length; i++) {\n            result = result || this$1.contains(locs[i]);\n        }\n\n        return result;\n    };\n\n    Extent.prototype.include = function include (loc) {\n        var 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    Extent.prototype.includeAll = function includeAll (locs) {\n        var this$1 = this;\n\n        for (var i = 0; i < locs.length; i++) {\n            this$1.include(locs[i]);\n        }\n    };\n\n    Extent.prototype.edges = function edges () {\n        var 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    Extent.prototype.toArray = function toArray () {\n        var 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    Extent.prototype.overlaps = function overlaps (extent) {\n        return this.containsAny(extent.toArray()) ||\n            extent.containsAny(this.toArray());\n    };\n\n    Extent.create = function 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    staticAccessors.World.get = function () {\n        return new Extent([ 90, -180 ], [ -90, 180 ]);\n    };\n\n    Object.defineProperties( Extent, staticAccessors );\n\n    return Extent;\n}(Class));\n","export var SHOW_TOOLTIP = 'showTooltip';\nexport var HIDE_TOOLTIP = 'hideTooltip';\nexport var CENTER_CHANGE = 'centerChange';\nexport var ZOOM_CHANGE = 'zoomChange';\nexport var INIT = 'init';\n","import { Class, deepExtend, setDefaultOptions } from '../../common';\nimport { SHOW_TOOLTIP, HIDE_TOOLTIP } from '../constants';\n\nexport var Tooltip = (function (Class) {\n    function Tooltip(widgetService, options) {\n        Class.call(this);\n\n        this.widgetService = widgetService;\n        this.options = deepExtend({}, this.options, options);\n        this.offset = { x: 0, y: 0 };\n    }\n\n    if ( Class ) Tooltip.__proto__ = Class;\n    Tooltip.prototype = Object.create( Class && Class.prototype );\n    Tooltip.prototype.constructor = Tooltip;\n\n    var prototypeAccessors = { anchor: { configurable: true } };\n\n    Tooltip.prototype.show = function show (anchor, args) {\n        if (this.location === args.location) {\n            return;\n        }\n\n        this.anchor = anchor;\n        this.location = args.location;\n\n        this.widgetService.notify(SHOW_TOOLTIP,\n            Object.assign({ anchor: this.anchor }, args)\n        );\n\n        this.visible = true;\n    };\n\n    Tooltip.prototype.hide = function hide () {\n        if (this.widgetService) {\n            this.widgetService.notify(HIDE_TOOLTIP);\n        }\n\n        this.visible = false;\n        this.location = null;\n    };\n\n    prototypeAccessors.anchor.get = function () {\n        return this._anchor;\n    };\n\n    prototypeAccessors.anchor.set = function (anchor) {\n        var documentPoint = this.widgetService.widget._toDocumentCoordinates({\n            x: anchor.left - this.offset.x,\n            y: anchor.top - this.offset.y\n        });\n\n        this._anchor = {\n            left: documentPoint.left,\n            top: documentPoint.top\n        };\n    };\n\n    Tooltip.prototype.destroy = function destroy () {\n        this.widgetService = null;\n    };\n\n    Object.defineProperties( Tooltip.prototype, prototypeAccessors );\n\n    return Tooltip;\n}(Class));\n\nsetDefaultOptions(Tooltip, {\n    border: {\n        width: 1\n    },\n    opacity: 1\n});\n","import {\n    Class,\n    addClass,\n    deepExtend,\n    defined,\n    getSupportedFeatures\n} from '../../common';\n\nimport {\n    Extent\n} from './../extent';\n\nexport var Layer = (function (Class) {\n    function Layer(map, options) {\n        Class.call(this);\n\n        this.support = getSupportedFeatures();\n\n        this._initOptions(options);\n        this.map = map;\n\n        var 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    if ( Class ) Layer.__proto__ = Class;\n    Layer.prototype = Object.create( Class && Class.prototype );\n    Layer.prototype.constructor = Layer;\n\n    Layer.prototype.destroy = function destroy () {\n        this._deactivate();\n    };\n\n    Layer.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Layer.prototype.show = function show () {\n        this.reset();\n        this._activate();\n        this._applyExtent(true);\n    };\n\n    Layer.prototype.hide = function hide () {\n        this._deactivate();\n        this._setVisibility(false);\n    };\n\n    Layer.prototype.reset = function reset () {\n        this._beforeReset();\n        this._reset();\n    };\n\n    Layer.prototype._reset = function _reset () {\n        this._applyExtent();\n    };\n\n    Layer.prototype._beforeReset = function _beforeReset () {\n\n    };\n\n    Layer.prototype._resize = function _resize () {\n\n    };\n\n    Layer.prototype._panEnd = function _panEnd () {\n        this._applyExtent();\n    };\n\n    Layer.prototype._applyExtent = function _applyExtent () {\n        var options = this.options;\n        var zoom = this.map.zoom();\n        var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n        var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n        var extent = Extent.create(options.extent);\n        var inside = !extent || extent.overlaps(this.map.extent());\n\n        this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n    };\n\n    Layer.prototype._setVisibility = function _setVisibility (visible) {\n        this.element.style.display = visible ? '' : 'none';\n    };\n\n    Layer.prototype._activate = function _activate () {\n        var 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    Layer.prototype._deactivate = function _deactivate () {\n        var 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    Layer.prototype._updateAttribution = function _updateAttribution () {\n        var attribution = this.map.attribution;\n\n        if (attribution) {\n            attribution.add(this.options.attribution);\n        }\n    };\n\n    Layer.prototype._readData = function _readData () {\n        var data = this.options.data || [];\n        return data;\n    };\n\n    Layer.prototype._hasData = function _hasData () {\n        return this._data && this._data.length > 0;\n    };\n\n    Layer.prototype._layerIndex = function _layerIndex () {\n        var layers = this.map.layers || [];\n        return layers.indexOf(this);\n    };\n\n    return Layer;\n}(Class));\n","import {\n    geometry as g,\n    throttle\n} from '@progress/kendo-drawing';\n\nimport {\n    Class,\n    deepExtend,\n    round,\n    limitValue,\n    hashKey,\n    setDefaultOptions,\n    isFunction\n} from '../../common';\n\nimport { removeChildren } from '../utils';\n\nimport { Layer } from './layer';\n\nimport TemplateService from '../../services/template-service';\n\nvar math = Math,\n    Point = g.Point;\n\nfunction compileTemplate(template) {\n    if (isFunction(template)) {\n        return template;\n    }\n\n    return TemplateService.compile(template);\n}\n\nfunction roundPoint(point) {\n    return new Point(round(point.x), round(point.y));\n}\n\nfunction renderSize(size) {\n    var newSize = size;\n\n    if (typeof(size) !== \"string\") {\n        newSize += \"px\";\n    }\n\n    return newSize;\n}\n\nexport var TileLayer = (function (Layer) {\n    function TileLayer(map, options) {\n        Layer.call(this, map, options);\n\n        if (typeof this.options.subdomains === 'string') {\n            this.options.subdomains = this.options.subdomains.split('');\n        }\n\n        var viewType = this._viewType();\n        this._view = new viewType(this.element, this.options);\n    }\n\n    if ( Layer ) TileLayer.__proto__ = Layer;\n    TileLayer.prototype = Object.create( Layer && Layer.prototype );\n    TileLayer.prototype.constructor = TileLayer;\n\n    TileLayer.prototype.destroy = function destroy () {\n        Layer.prototype.destroy.call(this);\n        this._view.destroy();\n        this._view = null;\n    };\n\n    TileLayer.prototype._beforeReset = function _beforeReset () {\n        var map = this.map;\n        var origin = map.locationToLayer(map.extent().nw).round();\n        this._view.viewOrigin(origin);\n    };\n\n    TileLayer.prototype._reset = function _reset () {\n        Layer.prototype._reset.call(this);\n        this._updateView();\n        this._view.reset();\n    };\n\n    TileLayer.prototype._viewType = function _viewType () {\n        return TileView;\n    };\n\n    TileLayer.prototype._activate = function _activate () {\n        Layer.prototype._activate.call(this);\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    TileLayer.prototype._deactivate = function _deactivate () {\n        Layer.prototype._deactivate.call(this);\n\n        if (this._pan) {\n            this.map.unbind('pan', this._pan);\n        }\n    };\n\n    TileLayer.prototype._updateView = function _updateView () {\n        var 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    TileLayer.prototype._resize = function _resize () {\n        this._render();\n    };\n\n    TileLayer.prototype._panEnd = function _panEnd (e) {\n        Layer.prototype._panEnd.call(this, e);\n        this._render();\n    };\n\n    TileLayer.prototype._render = function _render () {\n        this._updateView();\n        this._view.render();\n    };\n\n    return TileLayer;\n}(Layer));\n\nsetDefaultOptions(TileLayer, {\n    tileSize: 256,\n    subdomains: ['a', 'b', 'c'],\n    urlTemplate: '',\n    zIndex: 1\n});\n\nexport var TileView = (function (Class) {\n    function TileView(element, options) {\n        Class.call(this);\n        this.element = element;\n        this._initOptions(options);\n        this.pool = new TilePool();\n    }\n\n    if ( Class ) TileView.__proto__ = Class;\n    TileView.prototype = Object.create( Class && Class.prototype );\n    TileView.prototype.constructor = TileView;\n\n    TileView.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    TileView.prototype.center = function center (center$1) {\n        this._center = center$1;\n    };\n\n    TileView.prototype.extent = function extent (extent$1) {\n        this._extent = extent$1;\n    };\n\n    TileView.prototype.viewOrigin = function viewOrigin (origin) {\n        this._viewOrigin = origin;\n    };\n\n    TileView.prototype.zoom = function zoom (zoom$1) {\n        this._zoom = zoom$1;\n    };\n\n    TileView.prototype.pointToTileIndex = function pointToTileIndex (point) {\n        return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n    };\n\n    TileView.prototype.tileCount = function tileCount () {\n        var 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    TileView.prototype.size = function size () {\n        var 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    TileView.prototype.indexToPoint = function indexToPoint (index) {\n        var x = index.x,\n            y = index.y;\n\n        return new Point(x * this.options.tileSize, y * this.options.tileSize);\n    };\n\n    TileView.prototype.subdomainText = function subdomainText () {\n        var subdomains = this.options.subdomains;\n        return subdomains[this.subdomainIndex++ % subdomains.length];\n    };\n\n    TileView.prototype.destroy = function destroy () {\n        removeChildren(this.element);\n        this.pool.empty();\n    };\n\n    TileView.prototype.reset = function reset () {\n        this.pool.reset();\n        this.subdomainIndex = 0;\n        this.render();\n    };\n\n    TileView.prototype.render = function render () {\n        var this$1 = this;\n\n        var 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$1.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    TileView.prototype.createTile = function createTile (currentIndex) {\n        var options = this.tileOptions(currentIndex);\n        var 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    TileView.prototype.tileOptions = function tileOptions (currentIndex) {\n        var 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    TileView.prototype.wrapIndex = function wrapIndex (index) {\n        var 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    TileView.prototype.wrapValue = function wrapValue (value, boundary) {\n        var remainder = math.abs(value) % boundary;\n        var 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    return TileView;\n}(Class));\n\nexport var ImageTile = (function (Class) {\n    function ImageTile(id, options) {\n        Class.call(this);\n        this.id = id;\n        this.visible = true;\n        this._initOptions(options);\n        this.createElement();\n        this.show();\n    }\n\n    if ( Class ) ImageTile.__proto__ = Class;\n    ImageTile.prototype = Object.create( Class && Class.prototype );\n    ImageTile.prototype.constructor = ImageTile;\n\n    ImageTile.prototype.destroy = function destroy () {\n        var element = this.element;\n        var 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    ImageTile.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    ImageTile.prototype.createElement = function createElement () {\n        var el = document.createElement(\"img\");\n        var size = this.options.size + \"px\";\n        el.setAttribute(\"alt\", \"\");\n        el.style.position = \"absolute\";\n        el.style.display = \"block\";\n        el.style.width = el.style.maxWidth = size;\n        el.style.height = el.style.maxHeight = size;\n\n        this.element = el;\n\n        // todo\n        // add on error handler\n\n        // this.element =\n        // $('<img style=\\'position: absolute; display: block;\\' alt=\\'\\' />')\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    ImageTile.prototype.show = function show () {\n        var element = this.element;\n        element.style.top = renderSize(this.options.offset.y);\n        element.style.left = renderSize(this.options.offset.x);\n\n        var 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    ImageTile.prototype.hide = function hide () {\n        this.element.style.visibility = 'hidden';\n        this.visible = false;\n    };\n\n    ImageTile.prototype.url = function url () {\n        var urlResult = compileTemplate(this.options.urlTemplate);\n        return urlResult(this.urlOptions());\n    };\n\n    ImageTile.prototype.errorUrl = function errorUrl () {\n        var urlResult = compileTemplate(this.options.errorUrlTemplate);\n        return urlResult(this.urlOptions());\n    };\n\n    ImageTile.prototype.urlOptions = function urlOptions () {\n        var 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    return ImageTile;\n}(Class));\n\nsetDefaultOptions(ImageTile, {\n    urlTemplate: '',\n    errorUrlTemplate: ''\n});\n\nexport var TilePool = (function (Class) {\n    function TilePool() {\n        Class.call(this);\n        this._items = [];\n    }\n\n    if ( Class ) TilePool.__proto__ = Class;\n    TilePool.prototype = Object.create( Class && Class.prototype );\n    TilePool.prototype.constructor = TilePool;\n\n    TilePool.prototype.get = function 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    TilePool.prototype.empty = function empty () {\n        var items = this._items;\n\n        for (var i = 0; i < items.length; i++) {\n            items[i].destroy();\n        }\n\n        this._items = [];\n    };\n\n    TilePool.prototype.reset = function reset () {\n        var items = this._items;\n\n        for (var i = 0; i < items.length; i++) {\n            items[i].hide();\n        }\n    };\n\n    TilePool.prototype._create = function _create (options) {\n        var items = this._items;\n        var tile;\n        var id = hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n\n        for (var 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    TilePool.prototype._remove = function _remove (center) {\n        var items = this._items;\n        var maxDist = -1;\n        var index = -1;\n\n        for (var i = 0; i < items.length; i++) {\n            var 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    return TilePool;\n}(Class));\n\nsetDefaultOptions(TilePool, {\n    maxSize: 100\n});\n","import {\n    Class,\n    Observable,\n    elementOffset,\n    eventMap\n} from '../../common';\n\nimport {\n    proxy\n} from '../utils';\n\nvar extend = Object.assign;\n\nvar CHANGE = 'change';\n\nexport var TapCapture = (function (Observable) {\n    function TapCapture(element, options) {\n        Observable.call(this);\n        var that = this,\n            domElement = element[0] || element;\n\n        that.capture = false;\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    if ( Observable ) TapCapture.__proto__ = Observable;\n    TapCapture.prototype = Object.create( Observable && Observable.prototype );\n    TapCapture.prototype.constructor = TapCapture;\n\n    TapCapture.prototype.captureNext = function captureNext () {\n        this.capture = true;\n    };\n\n    TapCapture.prototype.cancelCapture = function cancelCapture () {\n        this.capture = false;\n    };\n\n    TapCapture.prototype._press = function _press (e) {\n        var that = this;\n\n        that.trigger('press');\n\n        if (that.capture) {\n            e.preventDefault();\n        }\n    };\n\n    TapCapture.prototype._release = function _release (e) {\n        var that = this;\n\n        that.trigger('release');\n\n        if (that.capture) {\n            e.preventDefault();\n            that.cancelCapture();\n        }\n    };\n\n    return TapCapture;\n}(Observable));\n\nexport var PaneDimension = (function (Observable) {\n    function PaneDimension(options) {\n        Observable.call(this);\n        var 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    if ( Observable ) PaneDimension.__proto__ = Observable;\n    PaneDimension.prototype = Object.create( Observable && Observable.prototype );\n    PaneDimension.prototype.constructor = PaneDimension;\n\n    PaneDimension.prototype.makeVirtual = function makeVirtual () {\n        extend(this, {\n            virtual: true,\n            forcedEnabled: true,\n            _virtualMin: 0,\n            _virtualMax: 0\n        });\n    };\n\n    PaneDimension.prototype.virtualSize = function 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    PaneDimension.prototype.outOfBounds = function outOfBounds (offset) {\n        return offset > this.max || offset < this.min;\n    };\n\n    PaneDimension.prototype.forceEnabled = function forceEnabled () {\n        this.forcedEnabled = true;\n    };\n\n    PaneDimension.prototype.getSize = function getSize () {\n        return this.container[this.measure];\n    };\n\n    PaneDimension.prototype.getTotal = function getTotal () {\n        return this.element[this.scrollSize];\n    };\n\n    PaneDimension.prototype.rescale = function rescale (scale) {\n        this.scale = scale;\n    };\n\n    PaneDimension.prototype.update = function update (silent) {\n        var 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    return PaneDimension;\n}(Observable));\n\nexport var PaneDimensions = (function (Observable) {\n    function PaneDimensions(options) {\n        Observable.call(this);\n        var 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    if ( Observable ) PaneDimensions.__proto__ = Observable;\n    PaneDimensions.prototype = Object.create( Observable && Observable.prototype );\n    PaneDimensions.prototype.constructor = PaneDimensions;\n\n    PaneDimensions.prototype.rescale = function rescale (newScale) {\n        this.x.rescale(newScale);\n        this.y.rescale(newScale);\n        this.refresh();\n    };\n\n    PaneDimensions.prototype.centerCoordinates = function centerCoordinates () {\n        return {\n            x: Math.min(0, -this.x.centerOffset),\n            y: Math.min(0, -this.y.centerOffset)\n        };\n    };\n\n    PaneDimensions.prototype.refresh = function refresh () {\n        var 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    return PaneDimensions;\n}(Observable));\n\nexport var PaneAxis = (function (Observable) {\n    function PaneAxis(options) {\n        Observable.call(this);\n        extend(this, options);\n    }\n\n    if ( Observable ) PaneAxis.__proto__ = Observable;\n    PaneAxis.prototype = Object.create( Observable && Observable.prototype );\n    PaneAxis.prototype.constructor = PaneAxis;\n\n    PaneAxis.prototype.outOfBounds = function outOfBounds () {\n        return this.dimension.outOfBounds(this.movable[this.axis]);\n    };\n\n    PaneAxis.prototype.dragMove = function dragMove (delta) {\n        var 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        var 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    return PaneAxis;\n}(Observable));\n\nexport var Pane = (function (Class) {\n    function Pane(options) {\n        Class.call(this);\n\n        var 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: function gesturestart(e) {\n                that.gesture = e;\n\n                that.offset = elementOffset(that.dimensions.container);\n            },\n            press: function press(e) {\n                var 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: function gesturechange(e) {\n                var 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                var 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: function 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: function end(e) {\n                e.preventDefault();\n            }\n        });\n    }\n\n    if ( Class ) Pane.__proto__ = Class;\n    Pane.prototype = Object.create( Class && Class.prototype );\n    Pane.prototype.constructor = Pane;\n\n    return Pane;\n}(Class));\n\nvar translate = function(x, y, scale) {\n    return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n};\n\nexport var Movable = (function (Observable) {\n    function Movable(element) {\n        Observable.call(this);\n\n        var that = this;\n\n        that.element = element;\n        that.element.style.transformOrigin = 'left top';\n        that.x = 0;\n        that.y = 0;\n        that.scale = 1;\n\n        var coordinates = translate(that.x, that.y, that.scale);\n        that.element.style.transform = coordinates;\n\n        that._saveCoordinates(coordinates);\n    }\n\n    if ( Observable ) Movable.__proto__ = Observable;\n    Movable.prototype = Object.create( Observable && Observable.prototype );\n    Movable.prototype.constructor = Movable;\n\n    Movable.prototype.translateAxis = function translateAxis (axis, by) {\n        this[axis] += by;\n        this.refresh();\n    };\n\n    Movable.prototype.scaleTo = function scaleTo (scale) {\n        this.scale = scale;\n        this.refresh();\n    };\n\n    Movable.prototype.scaleWith = function scaleWith (scaleDelta) {\n        this.scale *= scaleDelta;\n        this.refresh();\n    };\n\n    Movable.prototype.translate = function translate (coordinates) {\n        this.x += coordinates.x;\n        this.y += coordinates.y;\n        this.refresh();\n    };\n\n    Movable.prototype.moveAxis = function moveAxis (axis, value) {\n        this[axis] = value;\n        this.refresh();\n    };\n\n    Movable.prototype.moveTo = function moveTo (coordinates) {\n        extend(this, coordinates);\n        this.refresh();\n    };\n\n    Movable.prototype.refresh = function refresh () {\n        var 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.transform = newCoordinates;\n\n            that._saveCoordinates(newCoordinates);\n            that.trigger(CHANGE);\n        }\n    };\n\n    Movable.prototype._saveCoordinates = function _saveCoordinates (coordinates) {\n        this.coordinates = coordinates;\n    };\n\n    return Movable;\n}(Observable));\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\nvar Group = d.Group;\n\nexport var ShapeLayer = (function (Layer) {\n    function ShapeLayer(map, options) {\n        Layer.call(this, 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._mouseleave = this._handler('shapeMouseLeave');\n        this.surface.bind('mouseleave', this._mouseleave);\n        this.surface.bind('mouseenter', this._mouseenter.bind(this));\n    }\n\n    if ( Layer ) ShapeLayer.__proto__ = Layer;\n    ShapeLayer.prototype = Object.create( Layer && Layer.prototype );\n    ShapeLayer.prototype.constructor = ShapeLayer;\n\n    ShapeLayer.prototype.destroy = function destroy () {\n        Layer.prototype.destroy.call(this);\n\n        this.surface.destroy();\n    };\n\n    ShapeLayer.prototype._reset = function _reset () {\n        Layer.prototype._reset.call(this);\n\n        this._translateSurface();\n\n        this._data = this._readData();\n\n        if (this._hasData()) {\n            this._load(this._data);\n        }\n    };\n\n    ShapeLayer.prototype._initRoot = function _initRoot () {\n        this._root = new Group();\n        this.surface.draw(this._root);\n    };\n\n    ShapeLayer.prototype._beforeReset = function _beforeReset () {\n        this.surface.clear();\n        this._initRoot();\n    };\n\n    ShapeLayer.prototype._resize = function _resize () {\n        this.surface.size(this.map.size());\n    };\n\n    ShapeLayer.prototype._readData = function _readData () {\n        var data = Layer.prototype._readData.call(this);\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    ShapeLayer.prototype._load = function _load (data) {\n        var this$1 = this;\n\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        var container = new Group();\n\n        for (var i = 0; i < data.length; i++) {\n            var shape = this$1._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    ShapeLayer.prototype.shapeCreated = function shapeCreated (shape) {\n        var 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            var args = {\n                layer: this,\n                shape: shape\n            };\n\n            cancelled = this.map.trigger('shapeCreated', args);\n        }\n\n        return cancelled;\n    };\n\n    ShapeLayer.prototype.featureCreated = function featureCreated (e) {\n        e.layer = this;\n        this.map.trigger('shapeFeatureCreated', e);\n    };\n\n    ShapeLayer.prototype._createMarker = function _createMarker (shape) {\n        var 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    ShapeLayer.prototype._clearMarkers = function _clearMarkers () {\n        var this$1 = this;\n\n        for (var i = 0; i < this._markers.length; i++) {\n            this$1.map.markers.remove(this$1._markers[i]);\n        }\n\n        this._markers = [];\n    };\n\n    ShapeLayer.prototype._pan = function _pan () {\n        if (!this._panning) {\n            this._panning = true;\n            this.surface.suspendTracking();\n        }\n    };\n\n    ShapeLayer.prototype._panEnd = function _panEnd (e) {\n        Layer.prototype._panEnd.call(this, e);\n        this._translateSurface();\n        this.surface.resumeTracking();\n        this._panning = false;\n    };\n\n    ShapeLayer.prototype._translateSurface = function _translateSurface () {\n        var map = this.map;\n        var 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    ShapeLayer.prototype._eventArgs = function _eventArgs (e) {\n        return {\n            layer: this,\n            layerIndex: this._layerIndex(),\n            shape: e.element,\n            shapeIndex: (this._data || []).indexOf(e.element.dataItem),\n            originalEvent: e.originalEvent\n        };\n    };\n\n    ShapeLayer.prototype._handler = function _handler (eventName) {\n        var this$1 = this;\n\n        return function (e) {\n            if (e.element) {\n                this$1.map.trigger(eventName, this$1._eventArgs(e));\n            }\n        };\n    };\n\n    ShapeLayer.prototype._mouseenter = function _mouseenter (e) {\n        if (!e.element) {\n            return;\n        }\n\n        this.map.trigger('shapeMouseEnter', this._eventArgs(e));\n\n        var shape = e.element;\n        var anchor = this._tooltipAnchor(e);\n        this.map._tooltip.show(anchor, this._tooltipContext(shape));\n    };\n\n    ShapeLayer.prototype._tooltipContext = function _tooltipContext (shape) {\n        return {\n            type: 'shape',\n            layerIndex: this._layerIndex(),\n            className: 'k-map-shape-tooltip',\n            dataItem: shape.dataItem,\n            location: shape.location\n        };\n    };\n\n    ShapeLayer.prototype._tooltipAnchor = function _tooltipAnchor (e) {\n        var cursor = this.map.eventOffset(e.originalEvent);\n        return {\n            top: cursor.y,\n            left: cursor.x\n        };\n    };\n\n    ShapeLayer.prototype._activate = function _activate () {\n        Layer.prototype._activate.call(this);\n        this._panHandler = proxy(this._pan, this);\n        this.map.bind('pan', this.panHandler);\n    };\n\n    ShapeLayer.prototype._deactivate = function _deactivate () {\n        Layer.prototype._deactivate.call(this);\n        this.map.unbind('pan', this._panHandler);\n    };\n\n    return ShapeLayer;\n}(Layer));\n\nsetDefaultOptions(ShapeLayer, {\n    autoBind: true,\n    zIndex: 100\n});\n\nvar GeoJsonLoader = (function (Class) {\n    function GeoJsonLoader(locator, defaultStyle, observer) {\n        Class.call(this);\n        this.observer = observer;\n        this.locator = locator;\n        this.style = defaultStyle;\n    }\n\n    if ( Class ) GeoJsonLoader.__proto__ = Class;\n    GeoJsonLoader.prototype = Object.create( Class && Class.prototype );\n    GeoJsonLoader.prototype.constructor = GeoJsonLoader;\n\n    GeoJsonLoader.prototype.parse = function parse (item) {\n        var root = new Group();\n        var 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    GeoJsonLoader.prototype._shapeCreated = function _shapeCreated (shape) {\n        var cancelled = false;\n\n        if (this.observer && this.observer.shapeCreated) {\n            cancelled = this.observer.shapeCreated(shape);\n        }\n\n        return cancelled;\n    };\n\n    GeoJsonLoader.prototype._featureCreated = function _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    GeoJsonLoader.prototype._loadGeometryTo = function _loadGeometryTo (container, geometry, dataItem) {\n        var this$1 = this;\n\n        var coords = geometry.coordinates;\n        var i;\n        var 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$1._loadPolygon(container, [coords[i]], dataItem);\n                    this$1._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$1._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$1._loadPoint(container, coords[i], dataItem);\n                }\n                break;\n            default:\n                break;\n        }\n    };\n\n    GeoJsonLoader.prototype._setLineFill = function _setLineFill (path) {\n        var 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    GeoJsonLoader.prototype._loadShape = function _loadShape (container, shape) {\n        if (!this._shapeCreated(shape)) {\n            container.append(shape);\n        }\n\n        return shape;\n    };\n\n    GeoJsonLoader.prototype._loadPolygon = function _loadPolygon (container, rings, dataItem) {\n        var shape = this._buildPolygon(rings);\n        shape.dataItem = dataItem;\n        shape.location = this.locator.viewToLocation(shape.bbox().center());\n        return this._loadShape(container, shape);\n    };\n\n    GeoJsonLoader.prototype._buildPolygon = function _buildPolygon (rings) {\n        var this$1 = this;\n\n        var type = rings.length > 1 ? d.MultiPath : d.Path;\n        var path = new type(this.style);\n\n        for (var i = 0; i < rings.length; i++) {\n            for (var j = 0; j < rings[i].length; j++) {\n                var point = this$1.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    GeoJsonLoader.prototype._loadPoint = function _loadPoint (container, coords, dataItem) {\n        var location = Location.fromLngLat(coords);\n        var point = this.locator.locationToView(location);\n        var circle = new g.Circle(point, 10);\n        var 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    return GeoJsonLoader;\n}(Class));\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 var BubbleLayer = (function (ShapeLayer) {\n    function BubbleLayer () {\n        ShapeLayer.apply(this, arguments);\n    }\n\n    if ( ShapeLayer ) BubbleLayer.__proto__ = ShapeLayer;\n    BubbleLayer.prototype = Object.create( ShapeLayer && ShapeLayer.prototype );\n    BubbleLayer.prototype.constructor = BubbleLayer;\n\n    BubbleLayer.prototype._readData = function _readData () {\n        var data = this.options.data || [];\n        return data;\n    };\n\n    BubbleLayer.prototype._load = function _load (data) {\n        var this$1 = this;\n\n        this._data = data;\n        this.surface.clear();\n\n        if (data.length === 0) {\n            return;\n        }\n\n        var options = this.options;\n        var getValue = getter(options.valueField);\n\n        var newData = data.slice(0);\n        newData.sort(function(a, b) {\n            return getValue(b) - getValue(a);\n        });\n\n        var scaleType = this._scaleType();\n        var scale;\n        var getLocation = getter(this.options.locationField);\n\n        for (var i = 0; i < newData.length; i++) {\n            var dataItem = newData[i];\n            var location = getLocation(dataItem);\n            var 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                var center = this$1.map.locationToView(location);\n                var size = scale.map(value);\n                var symbol = this$1._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$1._drawSymbol(symbol);\n            }\n        }\n    };\n\n    BubbleLayer.prototype._scaleType = function _scaleType () {\n        var scale = this.options.scale;\n\n        if (isFunction(scale)) {\n            return scale;\n        }\n\n        return Scales[scale];\n    };\n\n    BubbleLayer.prototype._createSymbol = function _createSymbol (args) {\n        var symbol = this.options.symbol;\n\n        if (!isFunction(symbol)) {\n            symbol = Symbols[symbol];\n        }\n\n        return symbol(args);\n    };\n\n    BubbleLayer.prototype._drawSymbol = function _drawSymbol (shape) {\n        var args = {\n            layer: this,\n            shape: shape\n        };\n\n        var cancelled = this.map.trigger('shapeCreated', args);\n\n        if (!cancelled) {\n            this.surface.draw(shape);\n        }\n    };\n\n    BubbleLayer.prototype._tooltipContext = function _tooltipContext (shape) {\n        return {\n            type: 'bubble',\n            layerIndex: this._layerIndex(),\n            className: 'k-map-bubble-tooltip',\n            dataItem: shape.dataItem,\n            location: shape.location,\n            value: shape.value\n        };\n    };\n\n    BubbleLayer.prototype._tooltipAnchor = function _tooltipAnchor (e) {\n        var shape = e.element;\n        var center = shape.bbox().center();\n\n        return {\n            top: center.y,\n            left: center.x\n        };\n    };\n\n    return BubbleLayer;\n}(ShapeLayer));\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\nvar SqrtScale = (function (Class) {\n    function SqrtScale(domain, range) {\n        Class.call(this);\n\n        this._domain = domain;\n        this._range = range;\n\n        var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n        var outputRange = range[1] - range[0];\n\n        this._ratio = outputRange / domainRange;\n    }\n\n    if ( Class ) SqrtScale.__proto__ = Class;\n    SqrtScale.prototype = Object.create( Class && Class.prototype );\n    SqrtScale.prototype.constructor = SqrtScale;\n\n    SqrtScale.prototype.map = function map (value) {\n        var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n        return this._range[0] + rel;\n    };\n\n    return SqrtScale;\n}(Class));\n\nvar Scales = {\n    sqrt: SqrtScale\n};\n\nvar Symbols = {\n    circle: function(args) {\n        var geo = new g.Circle(args.center, args.size / 2);\n        return new d.Circle(geo, args.style);\n    },\n\n    square: function(args) {\n        var path = new d.Path(args.style);\n        var halfSize = args.size / 2;\n        var 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    renderIcon,\n    on,\n    off,\n} from '../../common';\n\nimport { Layer } from './layer';\nimport { Location } from '../location';\nimport {\n    proxy,\n    toHyphens,\n    toPixels,\n    convertToHtml\n} from '../utils';\nimport TemplateService from '../../services/template-service';\n\nvar CLICK = \"click\";\nvar MOUSE_ENTER = \"mouseenter\";\nvar MOUSE_LEAVE = \"mouseleave\";\n\nvar extend = Object.assign;\nvar MARKER_CLASS_NAME = \"k-marker\";\nvar MARKER_CLASS = \".\" + MARKER_CLASS_NAME;\n\nexport var MarkerLayer = (function (Layer) {\n    function MarkerLayer(map, options) {\n        Layer.call(this, 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    if ( Layer ) MarkerLayer.__proto__ = Layer;\n    MarkerLayer.prototype = Object.create( Layer && Layer.prototype );\n    MarkerLayer.prototype.constructor = MarkerLayer;\n\n    MarkerLayer.prototype.destroy = function destroy () {\n        Layer.prototype.destroy.call(this);\n        off(this.element, CLICK, this._markerClickHandler);\n        this.clear();\n    };\n\n    MarkerLayer.prototype.add = function add (args) {\n        var this$1 = this;\n\n        if (isArray(args)) {\n            for (var i = 0; i < args.length; i++) {\n                this$1._addOne(args[i]);\n            }\n        } else {\n            return this._addOne(args);\n        }\n    };\n\n    MarkerLayer.prototype.remove = function remove (marker) {\n        marker.destroy();\n        var index = (this.items || []).indexOf(marker);\n\n        if (index > -1) {\n            this.items.splice(index, 1);\n        }\n    };\n\n    MarkerLayer.prototype.clear = function clear () {\n        var this$1 = this;\n\n        for (var i = 0; i < this.items.length; i++) {\n            this$1.items[i].destroy();\n        }\n\n        this.items = [];\n    };\n\n    MarkerLayer.prototype.update = function update (marker) {\n        var location = marker.location();\n\n        if (location) {\n            marker.showAt(this.map.locationToView(location));\n\n            var args = {\n                marker: marker,\n                layer: this\n            };\n\n            this.map.trigger('markerActivate', args);\n        }\n    };\n\n    MarkerLayer.prototype._reset = function _reset () {\n        var this$1 = this;\n\n        Layer.prototype._reset.call(this);\n\n        var items = this.items;\n\n        for (var i = 0; i < items.length; i++) {\n            this$1.update(items[i]);\n        }\n    };\n\n    MarkerLayer.prototype.bind = function bind (options, dataItem) {\n        var marker = Marker.create(options, this.options);\n        marker.dataItem = dataItem;\n\n        var args = {\n            marker: marker,\n            layer: this\n        };\n\n        var cancelled = this.map.trigger('markerCreated', args);\n\n        if (!cancelled) {\n            this.add(marker);\n            return marker;\n        }\n    };\n\n    MarkerLayer.prototype._addOne = function _addOne (arg) {\n        var marker = Marker.create(arg, this.options);\n        marker.addTo(this);\n        return marker;\n    };\n\n    MarkerLayer.prototype._readData = function _readData () {\n        var data = this.options.data || [];\n        return data;\n    };\n\n    MarkerLayer.prototype._load = function _load (data) {\n        var this$1 = this;\n\n        this._data = data;\n        this.clear();\n\n        var getLocation = getter(this.options.locationField);\n        var getTitle = getter(this.options.titleField);\n\n        for (var i = 0; i < data.length; i++) {\n            var dataItem = data[i];\n\n            this$1.bind({\n                location: getLocation(dataItem),\n                title: getTitle(dataItem)\n            }, dataItem);\n        }\n    };\n\n    MarkerLayer.prototype._markerClick = function _markerClick (e) {\n        var marker = e.currentTarget._kendoNode;\n\n        var args = {\n            layer: this,\n            layerIndex: this._layerIndex(),\n            marker: marker,\n            markerIndex: (this.items || []).indexOf(marker),\n            originalEvent: e\n        };\n\n        this.map.trigger('markerClick', args);\n    };\n\n    MarkerLayer.prototype._markerMouseEnter = function _markerMouseEnter (e) {\n        var args = this._createMarkerEventArgs(e);\n        this.map.trigger(\"markerMouseEnter\", args);\n    };\n\n    MarkerLayer.prototype._markerMouseLeave = function _markerMouseLeave (e) {\n        var args = this._createMarkerEventArgs(e);\n        this.map.trigger(\"markerMouseLeave\", args);\n    };\n\n    MarkerLayer.prototype._createMarkerEventArgs = function _createMarkerEventArgs (e) {\n        var marker = e.marker;\n\n        var args = extend({}, {\n            layer: this,\n            layerIndex: this._layerIndex(),\n            marker: marker,\n            markerIndex: (this.items || []).indexOf(marker)\n        }, e);\n\n        return args;\n    };\n\n    return MarkerLayer;\n}(Layer));\n\nsetDefaultOptions(MarkerLayer, {\n    zIndex: 1000,\n    autoBind: true,\n    locationField: 'location',\n    titleField: 'title',\n    template: \"\"\n});\n\nexport var Marker = (function (Class) {\n    function Marker(options) {\n        Class.call(this);\n        this.options = options || {};\n    }\n\n    if ( Class ) Marker.__proto__ = Class;\n    Marker.prototype = Object.create( Class && Class.prototype );\n    Marker.prototype.constructor = Marker;\n\n    Marker.prototype.destroy = function destroy () {\n        this.layer = null;\n        this.unbindEvents();\n        this.hide();\n    };\n\n    Marker.prototype.addTo = function addTo (parent) {\n        this.layer = parent.markers || parent;\n        this.layer.items.push(this);\n        this.layer.update(this);\n    };\n\n    Marker.prototype.location = function 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    Marker.prototype.showAt = function showAt (point) {\n        this.render();\n\n        this._anchor = { left: Math.round(point.x), top: Math.round(point.y) };\n        this.element.style.left = toPixels(this._anchor.left);\n        this.element.style.top = toPixels(this._anchor.top);\n    };\n\n    Marker.prototype.hide = function hide () {\n        if (this.element) {\n            this.element.remove();\n            this.element = null;\n        }\n    };\n\n    Marker.prototype.bindEvents = function 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    Marker.prototype.unbindEvents = function 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    Marker.prototype.render = function render () {\n        if (!this.element) {\n            var options = this.options;\n            var layer = this.layer;\n            var element = document.createElement('span');\n            addClass(element, MARKER_CLASS_NAME);\n\n            if (this.options.template) {\n                var templateFn = this._compileTemplate(this.options.template);\n                var templateHtml = templateFn(this.dataItem);\n                var templateElement = convertToHtml(templateHtml);\n                element.appendChild(templateElement);\n            } else if (options.svgIcon) {\n                renderIcon(element, { icon: options.svgIcon, iconClass: \"k-icon-xxl\", svgIcons: this.options.icons.svgIcons, type: \"svg\" });\n            } else {\n                var iconOptions = { icon: \"map-marker\", iconClass: \"k-icon-xxl\", svgIcons: this.options.icons.svgIcons, type: this.options.icons.type };\n\n                if (options.shape) {\n                    if (options.shape === \"pinTarget\") {\n                        iconOptions.icon = \"map-marker-target\";\n                        renderIcon(element, iconOptions);\n                    } else if (options.shape === \"pin\") {\n                        renderIcon(element, iconOptions);\n                    } else {\n                        addClass(element, 'k-icon k-icon-xxl k-i-marker-' + toHyphens(options.shape || 'pin'));\n                    }\n                } else {\n                    renderIcon(element, iconOptions);\n                }\n            }\n\n            if (options.title) {\n                element.setAttribute(\"title\", options.title);\n            }\n\n            var attributes = options.attributes || {};\n            Object.keys(attributes).forEach(function(key) {\n                element.setAttribute(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    };\n\n    Marker.prototype._mouseEnter = function _mouseEnter (e) {\n        var args = this._createEventArgs(e);\n        this.layer._markerMouseEnter(args);\n\n        this.layer.map._tooltip.show({\n            top: this._anchor.top - this.element.offsetHeight,\n            left: this._anchor.left\n        }, this._tooltipContext());\n    };\n\n    Marker.prototype._tooltipContext = function _tooltipContext () {\n        return {\n            type: 'marker',\n            layerIndex: this.layer._layerIndex(),\n            className: 'k-map-marker-tooltip',\n            dataItem: this.dataItem,\n            title: this.options.title,\n            location: this.location()\n        };\n    };\n\n    Marker.prototype._mouseLeave = function _mouseLeave (e) {\n        var args = this._createEventArgs(e);\n        this.layer._markerMouseLeave(args);\n    };\n\n    Marker.prototype._createEventArgs = function _createEventArgs (e) {\n        var args = {\n            marker: this,\n            originalEvent: e\n        };\n\n        return args;\n    };\n\n    Marker.prototype._compileTemplate = function _compileTemplate (template) {\n        return TemplateService.compile(template, {\n            paramName: \"dataItem\",\n            useWithBlock: false\n        });\n    };\n\n    Marker.create = function create (arg, defaults) {\n        if (arg instanceof Marker) {\n            return arg;\n        }\n\n        return new Marker(deepExtend({}, defaults, arg));\n    };\n\n    return Marker;\n}(Class));\n","import {\n    Class,\n    now\n} from '../../common';\n\nimport {\n    proxy,\n} from '../utils';\n\nvar extend = Object.assign;\n\nfunction animationFrame(callback) {\n    window.requestAnimationFrame(callback);\n}\n\nexport var Animation = (function (Class) {\n    function Animation() {\n        Class.call(this);\n        var that = this;\n\n        that._tickProxy = proxy(that._tick, that);\n        that._started = false;\n    }\n\n    if ( Class ) Animation.__proto__ = Class;\n    Animation.prototype = Object.create( Class && Class.prototype );\n    Animation.prototype.constructor = Animation;\n\n    Animation.prototype.tick = function tick () { };\n    Animation.prototype.done = function done () { };\n    Animation.prototype.onEnd = function onEnd () { };\n    Animation.prototype.onCancel = function onCancel () { };\n\n    Animation.prototype.start = function 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    Animation.prototype.enabled = function enabled () {\n        return true;\n    };\n\n    Animation.prototype.cancel = function cancel () {\n        this._started = false;\n        this.onCancel();\n    };\n\n    Animation.prototype._tick = function _tick () {\n        var 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    return Animation;\n}(Class));\n\nexport var Transition = (function (Animation) {\n    function Transition(options) {\n        Animation.call(this);\n        extend(this, options);\n    }\n\n    if ( Animation ) Transition.__proto__ = Animation;\n    Transition.prototype = Object.create( Animation && Animation.prototype );\n    Transition.prototype.constructor = Transition;\n\n    Transition.prototype.done = function done () {\n        return this.timePassed() >= this.duration;\n    };\n\n    Transition.prototype.timePassed = function timePassed () {\n        return Math.min(this.duration, now() - this.startDate);\n    };\n\n    Transition.prototype.moveTo = function moveTo (options) {\n        var 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    Transition.prototype._easeProxy = function _easeProxy (ease) {\n        var 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    Transition.easeOutExpo = function easeOutExpo (t, b, c, d) {\n        return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n    };\n\n    return Transition;\n}(Animation));\n","// todo: extract to a separate place\n\nimport {\n    Class,\n    deepExtend,\n    addClass,\n    Observable,\n    isFunction,\n    setDefaultOptions,\n    on,\n    off,\n    UserEvents\n} from '../../common';\n\nimport {\n    convertToHtml,\n    prepend,\n    wrapInner,\n    hasNativeScrolling,\n    wheelDeltaY,\n    proxy,\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\nvar\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\nvar ZoomSnapBack = (function (Animation) {\n    function ZoomSnapBack(options) {\n        Animation.call(this, options);\n        var 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    if ( Animation ) ZoomSnapBack.__proto__ = Animation;\n    ZoomSnapBack.prototype = Object.create( Animation && Animation.prototype );\n    ZoomSnapBack.prototype.constructor = ZoomSnapBack;\n\n    ZoomSnapBack.prototype.enabled = function enabled () {\n        return this.movable.scale < this.dimensions.minScale;\n    };\n\n    ZoomSnapBack.prototype.done = function done () {\n        return this.dimensions.minScale - this.movable.scale < 0.01;\n    };\n\n    ZoomSnapBack.prototype.tick = function tick () {\n        var movable = this.movable;\n        movable.scaleWith(1.1);\n        this.dimensions.rescale(movable.scale);\n    };\n\n    ZoomSnapBack.prototype.onEnd = function onEnd () {\n        var movable = this.movable;\n        movable.scaleTo(this.dimensions.minScale);\n        this.dimensions.rescale(movable.scale);\n    };\n\n    return ZoomSnapBack;\n}(Animation));\n\nvar DragInertia = (function (Animation) {\n    function DragInertia(options) {\n        Animation.call(this);\n        var that = this;\n\n        extend(that, options, {\n            transition: new Transition({\n                axis: options.axis,\n                movable: options.movable,\n                onEnd: function 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    if ( Animation ) DragInertia.__proto__ = Animation;\n    DragInertia.prototype = Object.create( Animation && Animation.prototype );\n    DragInertia.prototype.constructor = DragInertia;\n\n    DragInertia.prototype.onCancel = function onCancel () {\n        this.transition.cancel();\n    };\n\n    DragInertia.prototype.freeze = function freeze (location) {\n        var that = this;\n        that.cancel();\n        that._moveTo(location);\n    };\n\n    DragInertia.prototype.onEnd = function onEnd () {\n        var that = this;\n        if (that.paneAxis.outOfBounds()) {\n            that._snapBack();\n        } else {\n            that._end();\n        }\n    };\n\n    DragInertia.prototype.done = function done () {\n        return abs(this.velocity) < 1;\n    };\n\n    DragInertia.prototype.start = function start (e) {\n        var 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                Animation.prototype.start.call(this);\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            Animation.prototype.start.call(this);\n        }\n    };\n\n    DragInertia.prototype.tick = function tick () {\n        var 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    DragInertia.prototype._end = function _end () {\n        this.tapCapture.cancelCapture();\n        this.end();\n    };\n\n    DragInertia.prototype._snapBack = function _snapBack () {\n        var 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    DragInertia.prototype._moveTo = function _moveTo (location) {\n        this.transition.moveTo({\n            location: location,\n            duration: SNAPBACK_DURATION,\n            ease: Transition.easeOutExpo\n        });\n    };\n\n    return DragInertia;\n}(Animation));\n\nvar AnimatedScroller = (function (Animation) {\n    function AnimatedScroller(options) {\n        Animation.call(this, options);\n        var that = this;\n\n        extend(that, options, {\n            origin: {},\n            destination: {},\n            offset: {}\n        });\n    }\n\n    if ( Animation ) AnimatedScroller.__proto__ = Animation;\n    AnimatedScroller.prototype = Object.create( Animation && Animation.prototype );\n    AnimatedScroller.prototype.constructor = AnimatedScroller;\n\n    AnimatedScroller.prototype.tick = function tick () {\n        this._updateCoordinates();\n        this.moveTo(this.origin);\n    };\n\n    AnimatedScroller.prototype.done = function done () {\n        return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n    };\n\n    AnimatedScroller.prototype.onEnd = function onEnd () {\n        this.moveTo(this.destination);\n        if (this.callback) {\n            this.callback.call();\n        }\n    };\n\n    AnimatedScroller.prototype.setCoordinates = function setCoordinates (from, to) {\n        this.offset = {};\n        this.origin = from;\n        this.destination = to;\n    };\n\n    /* eslint-disable no-param-reassign */\n    AnimatedScroller.prototype.setCallback = function 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    AnimatedScroller.prototype._updateCoordinates = function _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    return AnimatedScroller;\n}(Animation));\n\nvar ScrollBar = (function (Class) {\n    function ScrollBar(options) {\n        Class.call(this);\n        var that = this,\n            horizontal = options.axis === 'x';\n\n        var orientation = (horizontal ? 'horizontal' : 'vertical');\n        var element = convertToHtml('<div class=\"km-touch-scrollbar km-' + orientation + '-scrollbar\" />');\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    if ( Class ) ScrollBar.__proto__ = Class;\n    ScrollBar.prototype = Object.create( Class && Class.prototype );\n    ScrollBar.prototype.constructor = ScrollBar;\n\n    ScrollBar.prototype.refresh = function refresh () {\n        var 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    ScrollBar.prototype.show = function show () {\n        this.element.style.opacity = SCROLLBAR_OPACITY;\n        this.element.style.visibility = \"visible\";\n    };\n\n    ScrollBar.prototype.hide = function hide () {\n        if (!this.alwaysVisible) {\n            this.element.style.opacity = 0;\n        }\n    };\n\n    return ScrollBar;\n}(Class));\n\n// export class Scroller extends Class {\nexport var Scroller = (function (Observable) {\n    function Scroller(element, options) {\n        Observable.call(this);\n        var that = this;\n        this.element = element;\n\n        this._initOptions(options);\n\n        var hasScrolling = hasNativeScrolling(navigator.userAgent);\n        that._native = that.options.useNative && hasScrolling;\n        var scrollHeader = convertToHtml('<div class=\"km-scroll-header\"/>');\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        var scrollContainer = convertToHtml('<div class=\"km-scroll-container\"/>');\n        wrapInner(element, scrollContainer);\n        prepend(scrollHeader, element);\n\n        var 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: 'none',\n                allowSelection: true,\n                preventDragEvent: true,\n                captureUpIfMoved: true,\n                multiTouch: that.options.zoom,\n                supportDoubleTap: that.options.supportDoubleTap,\n                start: function start(e) {\n                    dimensions.refresh();\n                    var velocityX = abs(e.x.velocity),\n                        velocityY = abs(e.y.velocity),\n                        horizontalSwipe = velocityX * 2 >= velocityY,\n                        originatedFromFixedContainer = that.fixedContainer.contains(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: function 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, 'wheel', 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    if ( Observable ) Scroller.__proto__ = Observable;\n    Scroller.prototype = Object.create( Observable && Observable.prototype );\n    Scroller.prototype.constructor = Scroller;\n\n    Scroller.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Scroller.prototype._wheelScroll = function _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        var 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    Scroller.prototype.makeVirtual = function makeVirtual () {\n        this.dimensions.y.makeVirtual();\n    };\n\n    Scroller.prototype.virtualSize = function virtualSize (min, max) {\n        this.dimensions.y.virtualSize(min, max);\n    };\n\n    Scroller.prototype.height = function height () {\n        return this.dimensions.y.size;\n    };\n\n    Scroller.prototype.scrollHeight = function scrollHeight () {\n        return this.scrollElement.scrollHeight;\n    };\n\n    Scroller.prototype.scrollWidth = function scrollWidth () {\n        return this.scrollElement.scrollWidth;\n    };\n\n    Scroller.prototype._resize = function _resize () {\n        if (!this._native) {\n            this.contentResized();\n        }\n    };\n\n    Scroller.prototype.setOptions = function setOptions (options) {\n        var that = this;\n\n        this._initOptions(options);\n\n        if (options.pullToRefresh) {\n            that._initPullToRefresh();\n        }\n    };\n\n    Scroller.prototype.reset = function 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    Scroller.prototype.contentResized = function 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    Scroller.prototype.zoomOut = function zoomOut () {\n        var dimensions = this.dimensions;\n        dimensions.refresh();\n        this._scale(dimensions.fitScale);\n        this.movable.moveTo(dimensions.centerCoordinates());\n    };\n\n    Scroller.prototype.enable = function enable () {\n        this.enabled = true;\n    };\n\n    Scroller.prototype.disable = function disable () {\n        this.enabled = false;\n    };\n\n    Scroller.prototype.scrollTo = function 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    Scroller.prototype.animatedScrollTo = function animatedScrollTo (x, y, callback) {\n        var 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    Scroller.prototype.pullHandled = function 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    Scroller.prototype.destroy = function destroy () {\n        var element = this.element;\n\n        off(element, 'wheel', this._wheelScrollHandler);\n\n        if (this.userEvents) {\n            this.userEvents.destroy();\n        }\n    };\n\n    Scroller.prototype._scale = function _scale (scale) {\n        this.dimensions.rescale(scale);\n        this.movable.scaleTo(scale);\n    };\n\n    Scroller.prototype._initPullToRefresh = function _initPullToRefresh () {\n    };\n\n    // kept for API compatibility, not used\n    Scroller.prototype._dragEnd = function _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    Scroller.prototype._paneChange = function _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    Scroller.prototype._initAxis = function _initAxis (axis) {\n        var 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: function 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    return Scroller;\n}(Observable));\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: function 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","var MapService = function MapService(widget, context) {\n    if ( context === void 0 ) context = {};\n\n    this.sender = context.sender || widget;\n    this.widget = widget;\n    this.rtl = Boolean(context.rtl);\n};\n\nMapService.prototype.notify = function notify (name, args) {\n    if (this.widget) {\n        this.widget.trigger(name, args);\n    }\n};\n\nexport default MapService;\n","import {\n    geometry as g,\n    throttle\n} from '@progress/kendo-drawing';\n\nimport {\n    addClass,\n    setDefaultOptions,\n    valueOrDefault,\n    defined,\n    Observable,\n    mousewheelDelta,\n    limitValue,\n    deepExtend,\n    elementOffset,\n    isArray,\n    round,\n    now,\n    on,\n    off,\n    getSupportedFeatures,\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 { Tooltip } from './tooltip/tooltip';\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    proxy,\n    setDefaultEvents,\n    convertToHtml,\n    renderPos\n} from './utils';\n\nimport {\n    Scroller\n} from './scroller/scroller';\n\nimport MapService from './../services/map-service';\n\nimport { CENTER_CHANGE, INIT, ZOOM_CHANGE } from './constants';\n\nvar 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 = 'wheel',\n    MOUSEWHEEL_THROTTLE = 50,\n    VELOCITY_MULTIPLIER = 5,\n    DEFAULT_ZOOM_RATE = 1;\n\nvar layersMap = {\n    bubble: BubbleLayer,\n    shape: ShapeLayer,\n    tile: TileLayer\n};\nlayersMap[MARKER] = MarkerLayer;\n\nvar Map = (function (Observable) {\n    function Map(element, options, themeOptions, context) {\n        if ( options === void 0 ) options = {};\n        if ( themeOptions === void 0 ) themeOptions = {};\n        if ( context === void 0 ) context = {};\n\n        Observable.call(this);\n\n        this._init(element, options, themeOptions, context);\n    }\n\n    if ( Observable ) Map.__proto__ = Observable;\n    Map.prototype = Object.create( Observable && Observable.prototype );\n    Map.prototype.constructor = Map;\n\n    Map.prototype.destroy = function destroy () {\n        var this$1 = this;\n\n        this.scroller.destroy();\n\n        if (this._tooltip) {\n            this._tooltip.destroy();\n        }\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(function (markerLayer) {\n                markerLayer.destroy();\n            });\n        } else {\n            this.markers.destroy();\n        }\n\n        for (var i = 0; i < this.layers.length; i++) {\n            this$1.layers[i].destroy();\n        }\n\n        off(this.element, MOUSEWHEEL, this._mousewheelHandler);\n\n        Observable.prototype.destroy.call(this);\n    };\n\n    // eslint-disable-next-line no-unused-vars\n    Map.prototype._init = function _init (element, options, themeOptions, context) {\n        if ( options === void 0 ) options = {};\n        if ( themeOptions === void 0 ) themeOptions = {};\n        if ( context === void 0 ) context = {};\n\n        this.support = getSupportedFeatures();\n        this.context = context;\n\n        this.initObserver(context);\n        this.initServices(context);\n        this._notifyObserver(INIT);\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._tooltip = this._createTooltip();\n        this._initScroller();\n        this._initMarkers();\n        this._initControls();\n        this._initLayers();\n        this._reset();\n\n        var mousewheelThrottled = throttle(this._mousewheel.bind(this), MOUSEWHEEL_THROTTLE);\n        this._mousewheelHandler = function (e) {\n            e.preventDefault();\n            mousewheelThrottled(e);\n        };\n        on(this.element, MOUSEWHEEL, this._mousewheelHandler);\n    };\n\n    Map.prototype._initOptions = function _initOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    Map.prototype._initElement = function _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        var div = convertToHtml(\"<div />\");\n        this.element.appendChild(div);\n    };\n\n    Map.prototype.initServices = function initServices (context) {\n        if ( context === void 0 ) context = {};\n\n        this.widgetService = new MapService(this, context);\n    };\n\n    Map.prototype.initObserver = function initObserver (context) {\n        if ( context === void 0 ) context = {};\n\n        this.observers = [];\n        this.addObserver(context.observer);\n    };\n\n    Map.prototype.addObserver = function addObserver (observer) {\n        if (observer) {\n            this.observers.push(observer);\n        }\n    };\n\n    Map.prototype.removeObserver = function removeObserver (observer) {\n        var index = this.observers.indexOf(observer);\n\n        if (index >= 0) {\n            this.observers.splice(index, 1);\n        }\n    };\n\n    Map.prototype.requiresHandlers = function requiresHandlers (eventNames) {\n        var observers = this.observers;\n\n        for (var idx = 0; idx < observers.length; idx++) {\n            if (observers[idx].requiresHandlers(eventNames)) {\n                return true;\n            }\n        }\n    };\n\n    Map.prototype.trigger = function trigger (name, args) {\n        if ( args === void 0 ) args = {};\n\n        args.sender = this;\n\n        var observers = this.observers;\n        var isDefaultPrevented = false;\n\n        for (var idx = 0; idx < observers.length; idx++) {\n            if (observers[idx].trigger(name, args)) {\n                isDefaultPrevented = true;\n            }\n        }\n\n        if (!isDefaultPrevented) {\n            Observable.prototype.trigger.call(this, name, args);\n        }\n\n        return isDefaultPrevented;\n    };\n\n    Map.prototype._notifyObserver = function _notifyObserver (name, args) {\n        if ( args === void 0 ) args = {};\n\n        args.sender = this;\n\n        var observers = this.observers;\n        var isDefaultPrevented = false;\n\n        for (var 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    Map.prototype.zoom = function zoom (level) {\n        var options = this.options;\n        var result;\n\n        if (defined(level)) {\n            var zoomLevel = math.round(limitValue(level, options.minZoom, options.maxZoom));\n\n            if (options.zoom !== zoomLevel) {\n                options.zoom = zoomLevel;\n                this.widgetService.notify(ZOOM_CHANGE, { zoom: options.zoom });\n\n                this._reset();\n            }\n            result = this;\n        } else {\n            result = options.zoom;\n        }\n\n        return result;\n    };\n\n    Map.prototype.center = function center (center$1) {\n        var result;\n\n        if (center$1) {\n            var current = Location.create(center$1);\n            var previous = Location.create(this.options.center);\n            if (!current.equals(previous)) {\n                this.options.center = current.toArray();\n                this.widgetService.notify(CENTER_CHANGE, { center: this.options.center });\n                this._reset();\n            }\n\n            result = this;\n        } else {\n            result = Location.create(this.options.center);\n        }\n\n        return result;\n    };\n\n    Map.prototype.extent = function extent (extent$1) {\n        var result;\n\n        if (extent$1) {\n            this._setExtent(extent$1);\n            result = this;\n        } else {\n            result = this._getExtent();\n        }\n\n        return result;\n    };\n\n    Map.prototype.setOptions = function setOptions (options) {\n        if ( options === void 0 ) options = {};\n\n        var element = this.element;\n\n        this.destroy();\n        removeChildren(element);\n        this._init(element, options, {}, this.context);\n\n        this._reset();\n    };\n\n    Map.prototype.locationToLayer = function locationToLayer (location, zoom) {\n        var clamp = !this.options.wraparound;\n        var locationObject = Location.create(location);\n\n        return this.crs.toPoint(locationObject, this._layerSize(zoom), clamp);\n    };\n\n    Map.prototype.layerToLocation = function layerToLocation (point, zoom) {\n        var clamp = !this.options.wraparound;\n        var pointObject = Point.create(point);\n\n        return this.crs.toLocation(pointObject, this._layerSize(zoom), clamp);\n    };\n\n    Map.prototype.locationToView = function locationToView (location) {\n        var locationObject = Location.create(location);\n        var origin = this.locationToLayer(this._viewOrigin);\n        var point = this.locationToLayer(locationObject);\n\n        return point.translateWith(origin.scale(-1));\n    };\n\n    Map.prototype.viewToLocation = function viewToLocation (point, zoom) {\n        var origin = this.locationToLayer(this._getOrigin(), zoom);\n        var pointObject = Point.create(point);\n        var pointResult = pointObject.clone().translateWith(origin);\n\n        return this.layerToLocation(pointResult, zoom);\n    };\n\n    Map.prototype.eventOffset = function eventOffset (e) {\n        var x;\n        var y;\n        var 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            var 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        var point = new g.Point(x, y);\n\n        return point;\n    };\n\n    Map.prototype.eventToView = function eventToView (e) {\n        var cursor = this.eventOffset(e);\n        return this.locationToView(this.viewToLocation(cursor));\n    };\n\n    Map.prototype.eventToLayer = function eventToLayer (e) {\n        return this.locationToLayer(this.eventToLocation(e));\n    };\n\n    Map.prototype.eventToLocation = function eventToLocation (e) {\n        var cursor = this.eventOffset(e);\n        return this.viewToLocation(cursor);\n    };\n\n    Map.prototype.viewSize = function viewSize () {\n        var element = this.element;\n        var scale = this._layerSize();\n        var 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    Map.prototype.exportVisual = function exportVisual () {\n        this._reset();\n        return false;\n    };\n\n    Map.prototype.hideTooltip = function hideTooltip () {\n        if (this._tooltip) {\n            this._tooltip.hide();\n        }\n    };\n\n    Map.prototype._setOrigin = function _setOrigin (origin, zoom) {\n        var size = this.viewSize(),\n            topLeft;\n\n        var 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        this.widgetService.notify(CENTER_CHANGE, { center: this.options.center });\n\n        return this;\n    };\n\n    Map.prototype._getOrigin = function _getOrigin (invalidate) {\n        var 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    Map.prototype._setExtent = function _setExtent (newExtent) {\n        var this$1 = this;\n\n        var raw = Extent.create(newExtent);\n        var 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        var extent = new Extent(raw.nw, se);\n        this.center(extent.center());\n        var width = this.element.clientWidth;\n        var height = this.element.clientHeight;\n        var zoom;\n\n        for (zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n            var topLeft = this$1.locationToLayer(extent.nw, zoom);\n            var bottomRight = this$1.locationToLayer(extent.se, zoom);\n            var layerWidth = math.abs(bottomRight.x - topLeft.x);\n            var 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    Map.prototype._getExtent = function _getExtent () {\n        var nw = this._getOrigin();\n        var bottomRight = this.locationToLayer(nw);\n        var size = this.viewSize();\n\n        bottomRight.x += size.width;\n        bottomRight.y += size.height;\n\n        var se = this.layerToLocation(bottomRight);\n\n        return new Extent(nw, se);\n    };\n\n    Map.prototype._zoomAround = function _zoomAround (pivot, level) {\n        this._setOrigin(this.layerToLocation(pivot, level), level);\n        this.zoom(level);\n    };\n\n    Map.prototype._initControls = function _initControls () {\n        var 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    Map.prototype._createControlElement = function _createControlElement (options, defaultPosition) {\n        var pos = options.position || defaultPosition;\n        var posSelector = '.' + renderPos(pos).replace(' ', '.');\n        var wrap = this.element.querySelector('.k-map-controls' + posSelector) || [];\n\n        if (wrap.length === 0) {\n            var div$1 = document.createElement(\"div\");\n            addClass(div$1, 'k-map-controls ' + renderPos(pos));\n            wrap = div$1;\n            this.element.appendChild(wrap);\n        }\n\n        var div = document.createElement(\"div\");\n\n        wrap.appendChild(div);\n\n        return div;\n    };\n\n    Map.prototype._createAttribution = function _createAttribution (options) {\n        var element = this._createControlElement(options, 'bottomRight');\n        this.attribution = new Attribution(element, options);\n    };\n\n    Map.prototype._createNavigator = function _createNavigator (options) {\n        var element = this._createControlElement(options, 'topLeft');\n        var navigator = this.navigator = new Navigator(element, deepExtend({}, options, { icons: this.options.icons }));\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    Map.prototype._navigatorPan = function _navigatorPan (e) {\n        var scroller = this.scroller;\n        var x = scroller.scrollLeft + e.x;\n        var y = scroller.scrollTop - e.y;\n        var bounds = this._virtualSize;\n        var width = this.element.clientWidth;\n        var 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    Map.prototype._navigatorCenter = function _navigatorCenter () {\n        this.center(this.options.center);\n    };\n\n    Map.prototype._createZoomControl = function _createZoomControl (options) {\n        var element = this._createControlElement(options, 'topLeft');\n        var zoomControl = this.zoomControl = new ZoomControl(element, options, this.options.icons);\n\n        this._zoomControlChange = this._zoomControlChange.bind(this);\n        zoomControl.bind('change', this._zoomControlChange);\n    };\n\n    Map.prototype._zoomControlChange = function _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    Map.prototype._initScroller = function _initScroller () {\n        var friction = this.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n        var zoomable = this.options.zoomable !== false;\n        var 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    Map.prototype._initLayers = function _initLayers () {\n        var this$1 = this;\n\n        var defs = this.options.layers,\n            layers = this.layers = [];\n\n        for (var i = 0; i < defs.length; i++) {\n            var options = defs[i];\n\n            var layer = this$1._createLayer(options);\n            layers.push(layer);\n        }\n    };\n\n    Map.prototype._createLayer = function _createLayer (options) {\n        var type = options.type || 'shape';\n        var layerDefaults = this.options.layerDefaults[type];\n        var layerOptions = type === MARKER ?\n            deepExtend({}, this.options.markerDefaults, options, { icons: this.options.icons }) :\n            deepExtend({}, layerDefaults, options);\n\n        var layerConstructor = layersMap[type];\n        var layer = new layerConstructor(this, layerOptions);\n\n        if (type === MARKER) {\n            this.markers = layer;\n        }\n\n        return layer;\n    };\n\n    Map.prototype._createTooltip = function _createTooltip () {\n        return new Tooltip(this.widgetService, this.options.tooltip);\n    };\n\n    /* eslint-disable arrow-body-style */\n    Map.prototype._initMarkers = function _initMarkers () {\n        var markerLayers = (this.options.layers || []).filter(function (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, deepExtend({}, this.options.markerDefaults, { icons: this.options.icons }));\n        this.markers.add(this.options.markers);\n    };\n    /* eslint-enable arrow-body-style */\n\n    Map.prototype._scroll = function _scroll (e) {\n        var origin = this.locationToLayer(this._viewOrigin).round();\n        var movable = e.sender.movable;\n        var 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._tooltip.offset = offset;\n        this.hideTooltip();\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    Map.prototype._scrollEnd = function _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    Map.prototype._panComplete = function _panComplete () {\n        return now() - (this._panEndTimestamp || 0) > 50;\n    };\n\n    Map.prototype._scaleStart = function _scaleStart (e) {\n        if (this.trigger('zoomStart', { originalEvent: e })) {\n            var touch = e.touches[1];\n\n            if (touch) {\n                touch.cancel();\n            }\n        }\n    };\n\n    Map.prototype._scale = function _scale (e) {\n        var scale = this.scroller.movable.scale;\n        var zoom = this._scaleToZoom(scale);\n        var gestureCenter = new g.Point(e.center.x, e.center.y);\n        var centerLocation = this.viewToLocation(gestureCenter, zoom);\n        var centerPoint = this.locationToLayer(centerLocation, zoom);\n        var 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    Map.prototype._scaleToZoom = function _scaleToZoom (scaleDelta) {\n        var scale = this._layerSize() * scaleDelta;\n        var tiles = scale / this.options.minSize;\n        var zoom = math.log(tiles) / math.log(2);\n\n        return math.round(zoom);\n    };\n\n    Map.prototype._reset = function _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        this.hideTooltip();\n\n        this.trigger('beforeReset');\n        this.trigger('reset');\n    };\n\n    Map.prototype._resetScroller = function _resetScroller () {\n        var scroller = this.scroller;\n        var x = scroller.dimensions.x;\n        var y = scroller.dimensions.y;\n        var scale = this._layerSize();\n        var nw = this.extent().nw;\n        var topLeft = this.locationToLayer(nw).round();\n\n        scroller.movable.round = true;\n        scroller.reset();\n        scroller.userEvents.cancel();\n\n        var 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        var xBounds = {\n            min: -topLeft.x,\n            max: scale - topLeft.x\n        };\n\n        var 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            var 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    Map.prototype._renderLayers = function _renderLayers () {\n    };\n\n    Map.prototype._layerSize = function _layerSize (zoom) {\n        var newZoom = valueOrDefault(zoom, this.options.zoom);\n        return this.options.minSize * pow(2, newZoom);\n    };\n\n    Map.prototype._tap = function _tap (e) {\n        if (!this._panComplete()) {\n            return;\n        }\n\n        var cursor = this.eventOffset(e);\n        this.hideTooltip();\n\n        this.trigger('click', {\n            originalEvent: e,\n            location: this.viewToLocation(cursor)\n        });\n    };\n\n    Map.prototype._doubleTap = function _doubleTap (e) {\n        var options = this.options;\n\n        if (options.zoomable !== false) {\n            if (!this.trigger('zoomStart', { originalEvent: e })) {\n                var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n                var cursor = this.eventOffset(e);\n                var location = this.viewToLocation(cursor);\n                var postZoom = this.locationToLayer(location, toZoom);\n                var 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    Map.prototype._mousewheel = function _mousewheel (e) {\n        var delta = mousewheelDelta(e) > 0 ? -1 : 1;\n        var options = this.options;\n        var fromZoom = this.zoom();\n        var toZoom = limitValue(fromZoom + delta, options.minZoom, options.maxZoom);\n\n        if (options.zoomable !== false && toZoom !== fromZoom) {\n            if (!this.trigger('zoomStart', { originalEvent: e })) {\n                var cursor = this.eventOffset(e);\n                var location = this.viewToLocation(cursor);\n                var postZoom = this.locationToLayer(location, toZoom);\n                var 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    Map.prototype._toDocumentCoordinates = function _toDocumentCoordinates (point) {\n        var offset = elementOffset(this.element);\n\n        return {\n            left: round(point.x + offset.left),\n            top: round(point.y + offset.top)\n        };\n    };\n\n    return Map;\n}(Observable));\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    icons: {\n        type: \"font\",\n        svgIcons: {}\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","import { deepExtend } from '../common';\n\nvar max = function (array, mapFn) { return Math.max.apply(null, array.map(mapFn)); };\nvar min = function (array, mapFn) { return Math.min.apply(null, array.map(mapFn)); };\nvar sum = function (array, mapFn) { return array.map(mapFn).reduce(function (acc, curr) { return (acc + curr); }, 0); };\nvar sortAsc = function (a, b) { return (a.y0 === b.y0 ? a.index - b.index : a.y0 + a.y1 - b.y0 - b.y1); };\nvar sortSource = function (a, b) { return sortAsc(a.source, b.source); };\nvar sortTarget = function (a, b) { return sortAsc(a.target, b.target); };\nvar value = function (node) { return node.value; };\n\nfunction sortLinks(nodes) {\n    nodes.forEach(function (node) {\n        node.targetLinks.forEach(function (link) {\n            link.source.sourceLinks.sort(sortTarget);\n        });\n        node.sourceLinks.forEach(function (link) {\n            link.target.targetLinks.sort(sortSource);\n        });\n    });\n}\n\nvar calcLayer = function (node, maxDepth) {\n    if (node.align === 'left') {\n        return node.depth;\n    }\n\n    if (node.align === 'right') {\n        return maxDepth - node.height;\n    }\n\n    return node.sourceLinks.length ? node.depth : maxDepth;\n};\n\nvar Sankey = function Sankey(options) {\n    var ref = options.nodesOptions;\n    var offset = ref.offset; if ( offset === void 0 ) offset = {};\n    var align = ref.align;\n    this.data = {\n        nodes: options.nodes.map(function (node) { return deepExtend({}, { offset: offset, align: align }, node); }),\n        links: options.links.map(function (link) { return deepExtend({}, link); })\n    };\n\n    this.width = options.width;\n    this.height = options.height;\n    this.offsetX = options.offsetX || 0;\n    this.offsetY = options.offsetY || 0;\n    this.nodeWidth = options.nodesOptions.width;\n    this.nodePadding = options.nodesOptions.padding;\n    this.reverse = options.reverse;\n    this.targetColumnIndex = options.targetColumnIndex;\n    this.loops = options.loops;\n    this.autoLayout = options.autoLayout;\n};\n\nSankey.prototype.calculate = function calculate () {\n    var ref = this.data;\n        var nodes = ref.nodes;\n        var links = ref.links;\n    this.connectLinksToNodes(nodes, links);\n    this.calculateNodeValues(nodes);\n\n    var circularLinks = this.calculateNodeHeights(nodes);\n\n    if (circularLinks) {\n        return { nodes: [], links: [], columns: [], circularLinks: circularLinks };\n    }\n\n    this.calculateNodeDepths(nodes);\n    var columns = this.calculateNodeColumns(nodes);\n    this.calculateNodeBreadths(columns);\n    this.applyNodesOffset(nodes);\n    this.calculateLinkBreadths(nodes);\n\n    return Object.assign({}, this.data, {columns: columns});\n};\n\nSankey.prototype.connectLinksToNodes = function connectLinksToNodes (nodes, links) {\n    var nodesMap = new Map();\n\n    nodes.forEach(function (node, i) {\n        node.index = i;\n        node.sourceLinks = [];\n        node.targetLinks = [];\n        node.id = node.id !== undefined ? node.id : node.label.text;\n        nodesMap.set(node.id, node);\n    });\n\n    links.forEach(function (link) {\n        link.source = nodesMap.get(link.sourceId);\n        link.target = nodesMap.get(link.targetId);\n        link.source.sourceLinks.push(link);\n        link.target.targetLinks.push(link);\n    });\n};\n\nSankey.prototype.calculateNodeValues = function calculateNodeValues (nodes) {\n    nodes.forEach(function (node) {\n        node.value = Math.max(\n            sum(node.sourceLinks, value),\n            sum(node.targetLinks, value)\n        );\n    });\n};\n\nSankey.prototype.calculateNodeDepths = function calculateNodeDepths (nodes) {\n    var current = new Set(nodes);\n    var next = new Set();\n    var currDepth = 0;\n    while (current.size) {\n        var currentNodes = Array.from(current);\n        for (var n = 0; n < currentNodes.length; n++) {\n            var node = currentNodes[n];\n            node.depth = currDepth;\n            for (var l = 0; l < node.sourceLinks.length; l++) {\n                var link = node.sourceLinks[l];\n                next.add(link.target);\n            }\n        }\n        currDepth++;\n        current = next;\n        next = new Set();\n    }\n};\n\nSankey.prototype.calculateNodeHeights = function calculateNodeHeights (nodes) {\n    var nodesLength = nodes.length;\n    var current = new Set(nodes);\n    var next = new Set;\n    var currentHeight = 0;\n    var eachNode = function (node) {\n        node.height = currentHeight;\n        node.targetLinks.forEach(function (link) {\n            next.add(link.source);\n        });\n    };\n    while (current.size) {\n        current.forEach(eachNode);\n        currentHeight++;\n        if (currentHeight > nodesLength) {\n            return true;\n        }\n        current = next;\n        next = new Set;\n    }\n    return false;\n};\n\nSankey.prototype.calculateNodeColumns = function calculateNodeColumns (nodes) {\n        var this$1 = this;\n\n    var maxDepth = max(nodes, function (d) { return d.depth; });\n    var columnWidth = (this.width - this.offsetX - this.nodeWidth) / maxDepth;\n    var columns = new Array(maxDepth + 1);\n    for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        var layer = Math.max(0, Math.min(maxDepth, calcLayer(node, maxDepth)));\n        node.x0 = this$1.offsetX + layer * columnWidth;\n        node.x1 = node.x0 + this$1.nodeWidth;\n        node.layer = layer;\n        columns[layer] = columns[layer] || [];\n        columns[layer].push(node);\n    }\n\n    return columns;\n};\n\nSankey.prototype.calculateNodeBreadths = function calculateNodeBreadths (columns) {\n        var this$1 = this;\n\n    var kSize = min(columns, function (c) { return (this$1.height - this$1.offsetY - (c.length - 1) * this$1.nodePadding) / sum(c, value); });\n\n    columns.forEach(function (nodes) {\n        var y = this$1.offsetY;\n        nodes.forEach(function (node) {\n            node.y0 = y;\n            node.y1 = y + node.value * kSize;\n            y = node.y1 + this$1.nodePadding;\n            node.sourceLinks.forEach(function (link) {\n                link.width = link.value * kSize;\n            });\n        });\n        y = (this$1.height - y + this$1.nodePadding) / (nodes.length + 1);\n        nodes.forEach(function (node, i) {\n            node.y0 += y * (i + 1);\n            node.y1 += y * (i + 1);\n        });\n    });\n\n    if (this.autoLayout !== false) {\n        var loops = this.loops !== undefined ? this.loops : columns.length - 1;\n        var targetColumnIndex = this.targetColumnIndex || 1;\n\n        for (var i = 0; i < loops; i++) {\n            if (!this$1.reverse) {\n                this$1.uncurlLinksToLeft(columns, targetColumnIndex);\n                this$1.uncurlLinksToRight(columns, targetColumnIndex);\n            } else {\n                this$1.uncurlLinksToRight(columns, targetColumnIndex);\n                this$1.uncurlLinksToLeft(columns, targetColumnIndex);\n            }\n        }\n    }\n\n    columns.forEach(sortLinks);\n};\n\nSankey.prototype.applyNodesOffset = function applyNodesOffset (nodes) {\n    nodes.forEach(function (node) {\n        var offsetX = (node.offset ? node.offset.left : 0) || 0;\n        var offsetY = (node.offset ? node.offset.top : 0) || 0;\n        node.x0 += offsetX;\n        node.x1 += offsetX;\n        node.y0 += offsetY;\n        node.y1 += offsetY;\n    });\n};\n\nSankey.prototype.calculateLinkBreadths = function calculateLinkBreadths (nodes) {\n    nodes.forEach(function (node) {\n        var sourceLinks = node.sourceLinks;\n            var targetLinks = node.targetLinks;\n        var y = node.y0;\n        var y1 = y;\n        sourceLinks.forEach(function (link) {\n            link.x0 = link.source.x1;\n            link.y0 = y + link.width / 2;\n            y += link.width;\n        });\n        targetLinks.forEach(function (link) {\n            link.x1 = link.target.x0;\n            link.y1 = y1 + link.width / 2;\n            y1 += link.width;\n        });\n    });\n};\n\nSankey.prototype.uncurlLinksToRight = function uncurlLinksToRight (columns, targetColumnIndex) {\n        var this$1 = this;\n\n    var n = columns.length;\n    for (var i = targetColumnIndex; i < n; i++) {\n        var column = columns[i];\n        column.forEach(function (target) {\n            var y = 0;\n            var sum = 0;\n            target.targetLinks.forEach(function (link) {\n                var kValue = link.value * (target.layer - link.source.layer);\n                y += this$1.targetTopPos(link.source, target) * kValue;\n                sum += kValue;\n            });\n\n            var dy = y === 0 ? 0 : (y / sum - target.y0);\n            target.y0 += dy;\n            target.y1 += dy;\n            sortLinks([target]);\n        });\n        column.sort(sortAsc);\n        this$1.arrangeNodesVertically(column);\n    }\n};\n\nSankey.prototype.uncurlLinksToLeft = function uncurlLinksToLeft (columns, targetColumnIndex) {\n        var this$1 = this;\n\n    var l = columns.length;\n    var startIndex = l - 1 - targetColumnIndex;\n    for (var i = startIndex; i >= 0; i--) {\n        var column = columns[i];\n        var loop = function ( j ) {\n            var source = column[j];\n            var y = 0;\n            var sum = 0;\n            source.sourceLinks.forEach(function (link) {\n                var kValue = link.value * (link.target.layer - source.layer);\n                y += this$1.sourceTopPos(source, link.target) * kValue;\n                sum += kValue;\n            });\n            var dy = y === 0 ? 0 : (y / sum - source.y0);\n            source.y0 += dy;\n            source.y1 += dy;\n            sortLinks([source]);\n        };\n\n            for (var j = 0; j < column.length; j++) loop( j );\n\n        column.sort(sortAsc);\n        this$1.arrangeNodesVertically(column);\n    }\n};\n\nSankey.prototype.arrangeNodesVertically = function arrangeNodesVertically (nodes) {\n    var startIndex = 0;\n    var endIndex = nodes.length - 1;\n\n    this.arrangeUp(nodes, this.height, endIndex);\n    this.arrangeDown(nodes, this.offsetY, startIndex);\n};\n\nSankey.prototype.arrangeDown = function arrangeDown (nodes, yPos, index) {\n        var this$1 = this;\n\n    var currentY = yPos;\n\n    for (var i = index; i < nodes.length; i++) {\n        var node = nodes[i];\n        var dy = Math.max(0, currentY - node.y0);\n        node.y0 += dy;\n        node.y1 += dy;\n        currentY = node.y1 + this$1.nodePadding;\n    }\n};\n\nSankey.prototype.arrangeUp = function arrangeUp (nodes, yPos, index) {\n        var this$1 = this;\n\n    var currentY = yPos;\n    for (var i = index; i >= 0; --i) {\n        var node = nodes[i];\n        var dy = Math.max(0, node.y1 - currentY);\n        node.y0 -= dy;\n        node.y1 -= dy;\n        currentY = node.y0 - this$1.nodePadding;\n    }\n};\n\nSankey.prototype.sourceTopPos = function sourceTopPos (source, target) {\n        var this$1 = this;\n\n    var y = target.y0 - ((target.targetLinks.length - 1) * this.nodePadding) / 2;\n    for (var i = 0; i < target.targetLinks.length; i++) {\n        var link = target.targetLinks[i];\n        if (link.source === source) {\n            break;\n        }\n        y += link.width + this$1.nodePadding;\n    }\n    for (var i$1 = 0; i$1 < source.sourceLinks.length; i$1++) {\n        var link$1 = source.sourceLinks[i$1];\n        if (link$1.target === target) {\n            break;\n        }\n        y -= link$1.width;\n    }\n    return y;\n};\n\nSankey.prototype.targetTopPos = function targetTopPos (source, target) {\n        var this$1 = this;\n\n    var y = source.y0 - ((source.sourceLinks.length - 1) * this.nodePadding) / 2;\n    for (var i = 0; i < source.sourceLinks.length; i++) {\n        var link = source.sourceLinks[i];\n        if (link.target === target) {\n            break;\n        }\n        y += link.width + this$1.nodePadding;\n    }\n    for (var i$1 = 0; i$1 < target.targetLinks.length; i$1++) {\n        var link$1 = target.targetLinks[i$1];\n        if (link$1.source === source) {\n            break;\n        }\n        y -= link$1.width;\n    }\n    return y;\n};\n\nexport var calculateSankey = function (options) { return new Sankey(options).calculate(); };\n\nexport var crossesValue = function (links) {\n    var value = 0;\n    var linksLength = links.length;\n\n    for (var i = 0; i < linksLength; i++) {\n        var link = links[i];\n\n        for (var lNext = i + 1; lNext < linksLength; lNext++) {\n            var nextLink = links[lNext];\n\n            if (intersect(link, nextLink)) {\n                value += Math.min(link.value, nextLink.value);\n            }\n        }\n    }\n\n    return value;\n};\n\nfunction rotationDirection(p1x, p1y, p2x, p2y, p3x, p3y) {\n    var expression1 = (p3y - p1y) * (p2x - p1x);\n    var expression2 = (p2y - p1y) * (p3x - p1x);\n\n    if (expression1 > expression2) {\n        return 1;\n    } else if (expression1 === expression2) {\n        return 0;\n    }\n\n    return -1;\n}\n\nfunction intersect(link1, link2) {\n    var f1 = rotationDirection(link1.x0, link1.y0, link1.x1, link1.y1, link2.x1, link2.y1);\n    var f2 = rotationDirection(link1.x0, link1.y0, link1.x1, link1.y1, link2.x0, link2.y0);\n    var f3 = rotationDirection(link1.x0, link1.y0, link2.x0, link2.y0, link2.x1, link2.y1);\n    var f4 = rotationDirection(link1.x1, link1.y1, link2.x0, link2.y0, link2.x1, link2.y1);\n\n    return f1 !== f2 && f3 !== f4;\n}\n","import {\n    Class,\n    deepExtend\n} from '../common';\n\nexport var SankeyElement = (function (Class) {\n    function SankeyElement(options) {\n        Class.call(this);\n        this.options = deepExtend({}, this.options, options);\n        this.createVisual();\n    }\n\n    if ( Class ) SankeyElement.__proto__ = Class;\n    SankeyElement.prototype = Object.create( Class && Class.prototype );\n    SankeyElement.prototype.constructor = SankeyElement;\n\n    SankeyElement.prototype.createVisual = function createVisual () {\n        this.visual = this.createElement();\n    };\n\n    SankeyElement.prototype.exportVisual = function exportVisual () {\n        return this.visual;\n    };\n\n    SankeyElement.prototype.createElement = function createElement () {\n        var this$1 = this;\n\n        var customVisual = this.options.visual;\n        var visual;\n\n        if (customVisual) {\n            visual = customVisual({\n                sender: this.getSender(),\n                options: this.visualOptions(),\n                createVisual: function () { return this$1.getElement(); }\n            });\n        } else {\n            visual = this.getElement();\n        }\n\n        return visual;\n    };\n\n    SankeyElement.prototype.getSender = function getSender () {\n        return this;\n    };\n\n    return SankeyElement;\n}(Class));\n","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { SankeyElement } from './element';\nimport { deepExtend } from '../common';\nimport { ARIA_ACTIVE_DESCENDANT } from '../common/constants';\n\nexport var Node = (function (SankeyElement) {\n    function Node () {\n        SankeyElement.apply(this, arguments);\n    }\n\n    if ( SankeyElement ) Node.__proto__ = SankeyElement;\n    Node.prototype = Object.create( SankeyElement && SankeyElement.prototype );\n    Node.prototype.constructor = Node;\n\n    Node.prototype.getElement = function getElement () {\n        return drawing.Path.fromRect(this.getRect(), this.visualOptions());\n    };\n\n    Node.prototype.getRect = function getRect () {\n        var node = this.options.node;\n        return new geometry.Rect([node.x0, node.y0], [node.x1 - node.x0, node.y1 - node.y0]);\n    };\n\n    Node.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = options.labels.ariaTemplate;\n\n        if (labelTemplate) {\n            return labelTemplate({ node: options.node });\n        }\n    };\n\n    Node.prototype.visualOptions = function visualOptions () {\n        var options = deepExtend({}, this.options, this.options.node);\n        var ariaLabel = this.getLabelText(options);\n\n        return {\n            fill: {\n                color: options.color,\n                opacity: options.opacity\n            },\n            stroke: { width: 0 },\n            className: 'k-sankey-node',\n            role: 'graphics-symbol',\n            ariaRoleDescription: 'Node',\n            ariaLabel: ariaLabel\n        };\n    };\n\n    Node.prototype.createFocusHighlight = function createFocusHighlight () {\n        if (!this.options.navigatable) {\n            return;\n        }\n\n        this._highlight = drawing.Path.fromRect(this.getRect(), {\n            stroke: this.options.focusHighlight.border,\n            visible: false\n        });\n\n        return this._highlight;\n    };\n\n    Node.prototype.focus = function focus (options) {\n        if (this._highlight) {\n            var ref = options || {};\n            var highlight = ref.highlight; if ( highlight === void 0 ) highlight = true;\n            if (highlight) {\n                this._highlight.options.set('visible', true);\n            }\n            var id = this.options.node.id;\n            this.visual.options.set('id', id);\n\n            if (this.options.root()) {\n                this.options.root().setAttribute(ARIA_ACTIVE_DESCENDANT, id);\n            }\n        }\n    };\n\n    Node.prototype.blur = function blur () {\n        if (this._highlight) {\n            this._highlight.options.set('visible', false);\n            this.visual.options.set('id', '');\n\n            if (this.options.root()) {\n                this.options.root().removeAttribute(ARIA_ACTIVE_DESCENDANT);\n            }\n        }\n    };\n\n    return Node;\n}(SankeyElement));\n\nvar nodeColor = function (node, nodeColors, index) { return node.color || nodeColors[index % nodeColors.length]; };\n\nexport var resolveNodeOptions = function (node, options, nodeColors, index) {\n    var nodeOptions = deepExtend({}, options, options.node);\n    return deepExtend({},\n        { color: nodeColor(node, nodeColors, index) },\n        nodeOptions,\n        { node: node },\n        {\n            visual: node.visual,\n            opacity: node.opacity,\n            offset: node.offset,\n            color: node.color\n        }\n    );\n};\n","/* eslint-disable camelcase */\nimport { drawing } from '@progress/kendo-drawing';\nimport { SankeyElement } from './element';\nimport { deepExtend } from '../common';\nimport { defined } from '../drawing-utils';\nimport { ARIA_ACTIVE_DESCENDANT } from '../common/constants';\n\nvar bezierPoint = function (p1, p2, p3, p4, t) {\n    var t1 = 1 - t;\n    var t1t1 = t1 * t1;\n    var tt = t * t;\n    return (p1 * t1t1 * t1) + (3 * p2 * t * t1t1) + (3 * p3 * tt * t1) + (p4 * tt * t);\n};\n\nfunction calculatePerpendicularLine(x1, y1, x2, y2, L) {\n    // 1. Calculate the midpoint M\n    var xM = (x1 + x2) / 2;\n    var yM = (y1 + y2) / 2;\n\n    var dx, dy;\n    if (y1 === y2) {\n        // The line AB is horizontal\n        dx = 0;\n        dy = L / 2;\n    } else if (x1 === x2) {\n        // The line AB is vertical\n        dx = L / 2;\n        dy = 0;\n    } else {\n        // Common case when the line is not horizontal or vertical\n        // 2. Calculate the slope of the original line\n        var m = (y2 - y1) / (x2 - x1);\n\n        // 3. Calculate the slope of the perpendicular line\n        var mPerp = -1 / m;\n\n        // 4. Calculate dx and dy\n        dx = (L / 2) / Math.sqrt(1 + mPerp * mPerp);\n        dy = mPerp * dx;\n    }\n\n    // 5. Coordinates of the points of the perpendicular line\n    var P1 = { x: xM - dx, y: yM - dy };\n    var P2 = { x: xM + dx, y: yM + dy };\n\n    return { P1: P1, P2: P2 };\n}\n\nfunction findIntersection(a, b, L, p, q) {\n    // Midpoint between a and b\n    var midpoint = {\n        x: (a.x + b.x) / 2,\n        y: (a.y + b.y) / 2\n    };\n\n    // Vector of the line ab\n    var ab_dx = b.x - a.x;\n    var ab_dy = b.y - a.y;\n\n    // Vector, perpendicular to ab\n    var perp_dx = -ab_dy;\n    var perp_dy = ab_dx;\n\n    // Normalize the perpendicular vector and scale it to 2*L\n    var magnitude = Math.sqrt(perp_dx * perp_dx + perp_dy * perp_dy);\n    perp_dx = (perp_dx / magnitude) * L;\n    perp_dy = (perp_dy / magnitude) * L;\n\n    // The endpoints of the perpendicular, 2*L long\n    var c1 = {\n        x: midpoint.x + perp_dx,\n        y: midpoint.y + perp_dy\n    };\n    var c2 = {\n        x: midpoint.x - perp_dx,\n        y: midpoint.y - perp_dy\n    };\n\n    // Check for intersection of the lines pq and the perpendicular\n    var pq_dx = q.x - p.x;\n    var pq_dy = q.y - p.y;\n\n    var denominator = (pq_dy) * (c1.x - c2.x) - (pq_dx) * (c1.y - c2.y);\n\n    if (Math.abs(denominator) < 1e-10) {\n        // The lines are almost parallel, no intersection\n        return null;\n    }\n\n    var ua = (pq_dx * (c2.y - p.y) - pq_dy * (c2.x - p.x)) / denominator;\n    var ub = ((c1.x - c2.x) * (c2.y - p.y) - (c1.y - c2.y) * (c2.x - p.x)) / denominator;\n\n    if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n        var intersection = {\n            x: c2.x + ua * (c1.x - c2.x),\n            // y: c2.y + ua * (c1.y - c2.y)\n        };\n        return intersection;\n    }\n\n    // No intersection of the segments\n    return null;\n}\n\nvar calculateControlPointsOffsetX = function (link, rtl) {\n    var halfWidth = link.width / 2;\n    var x0 = rtl ? link.x1 : link.x0;\n    var x1 = rtl ? link.x0 : link.x1;\n    var y0 = rtl ? link.y1 : link.y0;\n    var y1 = rtl ? link.y0 : link.y1;\n\n    var xC = (x0 + x1) / 2;\n    var middlePoint = [xC, bezierPoint(y0, y0, y1, y1, 0.5)];\n\n    var tH = 0.4999;\n\n    var pointH = [\n        bezierPoint(x0, xC, xC, x1, tH),\n        bezierPoint(y0, y0, y1, y1, tH)\n    ];\n\n    var line = calculatePerpendicularLine(middlePoint[0], middlePoint[1], pointH[0], pointH[1], link.width);\n\n    var middlePointDown = [xC, bezierPoint(y0 + halfWidth, y0 + halfWidth, y1 + halfWidth, y1 + halfWidth, 0.5)];\n    // const middlePointUp = [xC, bezierPoint(y0 - halfWidth, y0 - halfWidth, y1 - halfWidth, y1 - halfWidth, 0.5)];\n\n    var P = line.P1.y > line.P2.y ? line.P1 : line.P2;\n    var L = halfWidth;\n    var LDir = (y0 > y1 ? 1 : -1) * L;\n    var a = P;\n    var b = { x: middlePointDown[0], y: middlePointDown[1] };\n    var p = { x: middlePointDown[0], y: middlePointDown[1] };\n    var q = { x: Math.max(1, middlePointDown[0] + LDir), y: middlePointDown[1] };\n    var Pmx = findIntersection(a, b, L, p, q) || { x: (middlePointDown[0] + P.x) / 2 };\n    var P1 = x0;\n    var P4 = x1;\n    var P2 = (Pmx.x - (0.125 * P1) - (0.125 * P4)) / 0.75;\n\n    return xC - P2;\n};\n\nexport var Link = (function (SankeyElement) {\n    function Link () {\n        SankeyElement.apply(this, arguments);\n    }\n\n    if ( SankeyElement ) Link.__proto__ = SankeyElement;\n    Link.prototype = Object.create( SankeyElement && SankeyElement.prototype );\n    Link.prototype.constructor = Link;\n\n    Link.prototype.getElement = function getElement () {\n        var link = this.options.link;\n        var x0 = link.x0;\n        var x1 = link.x1;\n        var y0 = link.y0;\n        var y1 = link.y1;\n        var xC = (x0 + x1) / 2;\n\n        return new drawing.Path(this.visualOptions())\n            .moveTo(x0, y0).curveTo([xC, y0], [xC, y1], [x1, y1]);\n    };\n\n    Link.prototype.getLabelText = function getLabelText (options) {\n        var labelTemplate = options.labels.ariaTemplate;\n\n        if (labelTemplate) {\n            return labelTemplate({ link: options.link });\n        }\n    };\n\n    Link.prototype.visualOptions = function visualOptions () {\n        var options = this.options;\n        var link = this.options.link;\n        var ariaLabel = this.getLabelText(options);\n\n        return {\n            stroke: {\n                width: options.link.width,\n                color: link.color || options.color,\n                opacity: defined(link.opacity) ? link.opacity : options.opacity\n            },\n            role: 'graphics-symbol',\n            ariaRoleDescription: 'Link',\n            ariaLabel: ariaLabel\n        };\n    };\n\n    Link.prototype.createFocusHighlight = function createFocusHighlight () {\n        if (!this.options.navigatable) {\n            return;\n        }\n\n        var ref = this.options;\n        var link = ref.link;\n        var x0 = link.x0;\n        var x1 = link.x1;\n        var y0 = link.y0;\n        var y1 = link.y1;\n        var xC = (x0 + x1) / 2;\n        var halfWidth = link.width / 2;\n\n        var offset = calculateControlPointsOffsetX(link, this.options.rtl);\n\n        this._highlight = new drawing.Path({ stroke: this.options.focusHighlight.border, visible: false })\n            .moveTo(x0, y0 + halfWidth)\n            .lineTo(x0, y0 - halfWidth)\n            .curveTo([xC + offset, y0 - halfWidth], [xC + offset, y1 - halfWidth], [x1, y1 - halfWidth])\n            .lineTo(x1, y1 + halfWidth)\n            .curveTo([xC - offset, y1 + halfWidth], [xC - offset, y0 + halfWidth], [x0, y0 + halfWidth]);\n    };\n\n    Link.prototype.focus = function focus (options) {\n        if (this._highlight) {\n            var ref = options || {};\n            var highlight = ref.highlight; if ( highlight === void 0 ) highlight = true;\n            if (highlight) {\n                this._highlight.options.set('visible', true);\n            }\n            var id = (this.options.link.sourceId) + \"->\" + (this.options.link.targetId);\n            this.visual.options.set('id', id);\n\n            if (this.options.root()) {\n                this.options.root().setAttribute(ARIA_ACTIVE_DESCENDANT, id);\n            }\n        }\n    };\n\n    Link.prototype.blur = function blur () {\n        if (this._highlight) {\n            this._highlight.options.set('visible', false);\n            this.visual.options.set('id', '');\n\n            if (this.options.root()) {\n                this.options.root().removeAttribute(ARIA_ACTIVE_DESCENDANT);\n            }\n        }\n    };\n\n    return Link;\n}(SankeyElement));\n\nexport var resolveLinkOptions = function (link, options, sourceNode, targetNode) {\n    var linkOptions = deepExtend({},\n        options,\n        {\n            link: link,\n            opacity: link.opacity,\n            color: link.color,\n            colorType: link.colorType,\n            visual: link.visual,\n            highlight: link.highlight\n        }\n    );\n\n    if (linkOptions.colorType === 'source') {\n        linkOptions.color = sourceNode.options.fill.color;\n    } else if (linkOptions.colorType === 'target') {\n        linkOptions.color = targetNode.options.fill.color;\n    }\n\n    return linkOptions;\n};\n","import { setDefaultOptions, deepExtend } from '../common';\nimport { SankeyElement } from './element';\nimport { Box, TextBox } from '../core';\nvar INSIDE = 'inside';\nvar BEFORE = 'before';\nvar AFTER = 'after';\n\nexport var Label = (function (SankeyElement) {\n    function Label () {\n        SankeyElement.apply(this, arguments);\n    }\n\n    if ( SankeyElement ) Label.__proto__ = SankeyElement;\n    Label.prototype = Object.create( SankeyElement && SankeyElement.prototype );\n    Label.prototype.constructor = Label;\n\n    Label.prototype.getElement = function getElement () {\n        var options = deepExtend({}, this.options, this.options.node.label);\n        var node = options.node;\n        var diagramMinX = options.diagramMinX;\n        var diagramMaxX = options.diagramMaxX;\n        var text = options.text;\n        var offset = options.offset;\n        var rtl = options.rtl;\n        var position = options.position;\n        if (rtl && position !== INSIDE) {\n            position = position === BEFORE ? AFTER : BEFORE;\n        }\n\n        if (!options.visible || !text) {\n            return null;\n        }\n\n        var nodeBox = new Box(node.x0, node.y0, node.x1, node.y1);\n        var visualOptions = this.visualOptions();\n        if (rtl && !visualOptions.align) {\n            visualOptions.align = 'right';\n        }\n        var textbox = new TextBox(text, visualOptions);\n        textbox.reflow(new Box());\n        var textSizeBox = textbox.box;\n        var textY = nodeBox.center().y - (textSizeBox.height() / 2);\n\n        var labelAfterLastNode = node.x1 + textSizeBox.width() > diagramMaxX;\n        var labelBeforeFirstNode = node.x0 - textSizeBox.width() < diagramMinX;\n        var side = position === BEFORE || (position === INSIDE && labelAfterLastNode) ? BEFORE : AFTER;\n        if (rtl) {\n            side = position === AFTER || (position === INSIDE && labelBeforeFirstNode) ? AFTER : BEFORE;\n        }\n        var textOrigin = [side === BEFORE ? node.x0 - textSizeBox.width() : node.x1, textY];\n\n        var textRect = new Box(textOrigin[0], textOrigin[1], textOrigin[0] + textSizeBox.width(), textOrigin[1] + textSizeBox.height());\n        textRect.translate(offset.left || 0, offset.top || 0);\n        textbox.reflow(textRect);\n\n        textbox.renderVisual();\n\n        return textbox.visual;\n    };\n\n    Label.prototype.visualOptions = function visualOptions () {\n        var options = deepExtend({}, this.options, this.options.node.label);\n        return {\n            color: options.color,\n            font: options.font,\n            border: options.border,\n            margin: options.margin,\n            padding: options.padding,\n            align: options.align,\n            paintOrder: options.paintOrder,\n            stroke: options.stroke,\n        };\n    };\n\n    return Label;\n}(SankeyElement));\n\nsetDefaultOptions(Label, {\n    position: INSIDE, // inside, before, after\n});\n\nexport var resolveLabelOptions = function (node, options, rtl, diagramMinX, diagramMaxX) { return deepExtend({},\n    options,\n    {\n        node: node,\n        diagramMinX: diagramMinX,\n        diagramMaxX: diagramMaxX,\n        rtl: rtl,\n        visual: node.label.visual,\n        visible: node.label.visible,\n        margin: node.label.margin,\n        padding: node.label.padding,\n        border: node.label.border,\n        align: node.label.align,\n        offset: node.label.offset\n    }\n); };\n","import { Title as ChartTitle } from \"../core\";\nimport { SankeyElement } from \"./element\";\nimport { setDefaultOptions, getSpacing } from '../common';\nimport { CENTER } from \"../common/constants\";\n\nexport var Title = (function (SankeyElement) {\n    function Title () {\n        SankeyElement.apply(this, arguments);\n    }\n\n    if ( SankeyElement ) Title.__proto__ = SankeyElement;\n    Title.prototype = Object.create( SankeyElement && SankeyElement.prototype );\n    Title.prototype.constructor = Title;\n\n    Title.prototype.getElement = function getElement () {\n        var options = this.options;\n        var drawingRect = options.drawingRect;\n        var text = options.text;\n\n        if (options.visible === false || !text) {\n            return null;\n        }\n\n        var title = ChartTitle.buildTitle(text, options);\n\n        title.reflow(drawingRect);\n\n        title.renderVisual();\n        return title.visual;\n    };\n\n    Title.prototype.createElement = function createElement () {\n        return this.getElement();\n    };\n\n    return Title;\n}(SankeyElement));\n\nsetDefaultOptions(Title, {\n    align: CENTER, // 'left', 'right', 'center'\n    border: {\n        width: 0\n    },\n    margin: getSpacing(5),\n    padding: getSpacing(5)\n});\n","import { default as ChartLegend } from \"../chart/legend/legend\";\nimport { SankeyElement } from \"./element\";\nimport { setDefaultOptions } from '../common';\nimport { BOTTOM, CENTER, LEFT, POINTER, RIGHT } from \"../common/constants\";\nimport { AREA } from \"../chart/constants\";\n\nvar sortData = function (a, b) {\n    if (a.node.x0 - b.node.x0 !== 0) {\n        return a.node.x0 - b.node.x0;\n    }\n    return a.node.y0 - b.node.y0;\n};\n\nvar sortDataRTL = function (a, b) {\n    if (a.node.x1 - b.node.x1 !== 0) {\n        return a.node.x1 - b.node.x1;\n    }\n    return b.node.y0 - a.node.y0;\n};\n\nvar sort = function (rtl) { return (rtl ? sortDataRTL : sortData); };\n\nexport var Legend = (function (SankeyElement) {\n    function Legend () {\n        SankeyElement.apply(this, arguments);\n    }\n\n    if ( SankeyElement ) Legend.__proto__ = SankeyElement;\n    Legend.prototype = Object.create( SankeyElement && SankeyElement.prototype );\n    Legend.prototype.constructor = Legend;\n\n    Legend.prototype.getElement = function getElement () {\n        var options = this.options;\n        var drawingRect = options.drawingRect;\n        var rtl = options.rtl;\n        var nodes = options.nodes; if ( nodes === void 0 ) nodes = [];\n        var item = options.item;\n        var position = options.position;\n\n        if (options.visible === false || !nodes.length) {\n            return null;\n        }\n\n        var data = nodes.map(function (node) { return ({\n            text: (node.label && node.label.text) || '',\n            area: {\n                background: item.areaBackground !== undefined ? item.areaBackground : node.color,\n                opacity: item.areaOpacity !== undefined ? item.areaOpacity : node.opacity\n            },\n            node: node\n        }); });\n\n        data.sort(sort(rtl));\n\n        var reverse = rtl && position !== LEFT && position !== RIGHT;\n        var legend = new ChartLegend(Object.assign({}, options, {data: data, reverse: reverse}), { rtl: rtl });\n        legend.reflow(drawingRect);\n\n        legend.renderVisual();\n        return legend.visual;\n    };\n\n    Legend.prototype.createElement = function createElement () {\n        return this.getElement();\n    };\n\n    return Legend;\n}(SankeyElement));\n\nsetDefaultOptions(Legend, {\n    markers: { visible: false },\n    item: {\n        type: AREA,\n        cursor: POINTER,\n        opacity: 1\n    },\n    position: BOTTOM,\n    align: CENTER,\n    accessibility: {\n        role: 'presentation',\n        ariaLabel: null,\n        ariaRoleDescription: null\n    },\n    border: {\n        width: 0\n    }\n});\n","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { deepExtend, addClass, Observable, setDefaultOptions } from '../common';\nimport { calculateSankey, crossesValue } from './calculation';\nimport { Node, resolveNodeOptions } from './node';\nimport { Link, resolveLinkOptions } from './link';\nimport { Label, resolveLabelOptions } from './label';\nimport { Title } from './title';\nimport { BLACK, BOTTOM, LEFT, RIGHT, TOP } from '../common/constants';\nimport { Box, rectToBox } from '../core';\nimport { Legend } from './legend';\nimport { defined } from '../drawing-utils';\n\nvar LINK = 'link';\nvar NODE = 'node';\n\nvar toRtl = function (sankey) {\n    var nodes = sankey.nodes;\n    var links = sankey.links;\n    var startX = Math.min.apply(Math, nodes.map(function (node) { return node.x0; }));\n    var endX = Math.max.apply(Math, nodes.map(function (node) { return node.x1; }));\n    var width = endX - startX;\n\n    nodes.forEach(function (node) {\n        var x0 = width - (node.x1 - 2 * startX);\n        var x1 = width - (node.x0 - 2 * startX);\n        node.x0 = x0;\n        node.x1 = x1;\n    });\n\n    links.forEach(function (link) {\n        var x0 = width - (link.x1 - 2 * startX);\n        var x1 = width - (link.x0 - 2 * startX);\n        link.x1 = x0;\n        link.x0 = x1;\n    });\n};\n\nexport var Sankey = (function (Observable) {\n    function Sankey(element, options, theme) {\n        Observable.call(this);\n\n        this._initTheme(theme);\n        this._setOptions(options);\n        this._initElement(element);\n        this._initSurface();\n\n        if (options && options.data) {\n            this._redraw();\n            this._initResizeObserver();\n            this._initNavigation(element);\n        }\n    }\n\n    if ( Observable ) Sankey.__proto__ = Observable;\n    Sankey.prototype = Object.create( Observable && Observable.prototype );\n    Sankey.prototype.constructor = Sankey;\n\n    Sankey.prototype.destroy = function destroy () {\n        this.unbind();\n        this._destroySurface();\n        this._destroyResizeObserver();\n\n        if (this.element) {\n            this.element.removeEventListener('keydown', this._keydownHandler);\n            this.element.removeEventListener('focus', this._focusHandler);\n            this.element.removeEventListener('mousedown', this._onDownHandler);\n            this.element.removeEventListener('touchstart', this._onDownHandler);\n            this.element.removeEventListener('pointerdown', this._onDownHandler);\n        }\n\n        this._focusState = null;\n\n        this.element = null;\n    };\n\n    Sankey.prototype._initElement = function _initElement (element) {\n        this.element = element;\n        addClass(element, [ \"k-chart\", \"k-sankey\" ]);\n        element.setAttribute('role', 'graphics-document');\n\n        var ref = this.options;\n        var title = ref.title;\n\n        if (title.text) {\n            element.setAttribute('aria-label', title.text);\n        }\n\n        if (title.description) {\n            element.setAttribute(\"aria-roledescription\", title.description);\n        }\n    };\n\n    Sankey.prototype._initSurface = function _initSurface () {\n        if (!this.surface) {\n            this._destroySurface();\n            this._initSurfaceElement();\n            this.surface = this._createSurface();\n        }\n    };\n\n    Sankey.prototype._initNavigation = function _initNavigation (element) {\n        element.tabIndex = element.getAttribute(\"tabindex\") || 0;\n\n        if (this.options.disableKeyboardNavigation) {\n            return;\n        }\n\n        this._keydownHandler = this._keydown.bind(this);\n        this._focusHandler = this._focus.bind(this);\n        this._blurHandler = this._blur.bind(this);\n        this._onDownHandler = this._onDown.bind(this);\n\n        element.addEventListener('keydown', this._keydownHandler);\n        element.addEventListener('focus', this._focusHandler);\n        element.addEventListener('blur', this._blurHandler);\n        element.addEventListener('mousedown', this._onDownHandler);\n        element.addEventListener('touchstart', this._onDownHandler);\n        element.addEventListener('pointerdown', this._onDownHandler);\n\n        this._focusState = {\n            node: this.firstFocusableNode(),\n            link: null\n        };\n    };\n\n    Sankey.prototype.firstFocusableNode = function firstFocusableNode () {\n        return this.columns[0][0];\n    };\n\n    Sankey.prototype._initResizeObserver = function _initResizeObserver () {\n        var this$1 = this;\n\n        var observer = new ResizeObserver(function (entries) {\n            entries.forEach(function (entry) {\n                var ref = entry.contentRect;\n                var width = ref.width;\n                var height = ref.height;\n                if (entry.target !== this$1.element ||\n                    (this$1.size && this$1.size.width === width && this$1.size.height === height)) {\n                    return;\n                }\n                this$1.size = { width: width, height: height };\n                this$1.surface.setSize(this$1.size);\n                this$1.resize = true;\n                this$1._redraw();\n            });\n        });\n        this._resizeObserver = observer;\n        observer.observe(this.element);\n    };\n\n    Sankey.prototype._createSurface = function _createSurface () {\n        return drawing.Surface.create(this.surfaceElement, {\n            mouseenter: this._mouseenter.bind(this),\n            mouseleave: this._mouseleave.bind(this),\n            mousemove: this._mousemove.bind(this),\n            click: this._click.bind(this)\n        });\n    };\n\n    Sankey.prototype._initTheme = function _initTheme (theme) {\n        var currentTheme = theme || this.theme || {};\n        this.theme = currentTheme;\n        this.options = deepExtend({}, currentTheme, this.options);\n    };\n\n    Sankey.prototype.setLinksOpacity = function setLinksOpacity (opacity) {\n        var this$1 = this;\n\n        this.linksVisuals.forEach(function (link) {\n            this$1.setOpacity(link, opacity, link.linkOptions.opacity);\n        });\n    };\n\n    Sankey.prototype.setLinksInactivityOpacity = function setLinksInactivityOpacity (inactiveOpacity) {\n        var this$1 = this;\n\n        this.linksVisuals.forEach(function (link) {\n            this$1.setOpacity(link, inactiveOpacity, link.linkOptions.highlight.inactiveOpacity);\n        });\n    };\n\n    Sankey.prototype.setOpacity = function setOpacity (link, opacity, linkValue) {\n        link.options.set('stroke', Object.assign({}, link.options.stroke,\n            {opacity: defined(linkValue) ? linkValue : opacity}));\n    };\n\n    Sankey.prototype.trigger = function trigger (name, ev) {\n        var dataItem = ev.element.dataItem;\n        var targetType = ev.element.type;\n\n        var event = Object.assign({}, ev,\n            {type: name,\n            targetType: targetType,\n            dataItem: dataItem});\n\n        return Observable.prototype.trigger.call(this, name, event);\n    };\n\n    Sankey.prototype._mouseenter = function _mouseenter (ev) {\n        var element = ev.element;\n        var isLink = element.type === LINK;\n        var isNode = element.type === NODE;\n        var isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);\n\n        if ((isLink && this.trigger('linkEnter', ev)) ||\n            (isNode && this.trigger('nodeEnter', ev))) {\n            return;\n        }\n\n        var ref = this.options.links;\n        var highlight = ref.highlight;\n        if (isLink) {\n            this.setLinksInactivityOpacity(highlight.inactiveOpacity);\n            this.setOpacity(element, highlight.opacity, element.linkOptions.highlight.opacity);\n        } else if (isNode) {\n            this.highlightLinks(element, highlight);\n        } else if (isLegendItem) {\n            var nodeVisual = this.nodesVisuals.get(element.chartElement.options.node.id);\n            this.highlightLinks(nodeVisual, highlight);\n        }\n    };\n\n    Sankey.prototype._mouseleave = function _mouseleave (ev) {\n        var this$1 = this;\n\n        var element = ev.element;\n        var isLink = element.type === LINK;\n        var isNode = element.type === NODE;\n        var isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);\n        var target = ev.originalEvent.relatedTarget;\n\n        if (isLink && target && target.nodeName === 'text') {\n            return;\n        }\n\n        if (isLink || isNode) {\n            if (this.tooltipTimeOut) {\n                clearTimeout(this.tooltipTimeOut);\n                this.tooltipTimeOut = null;\n            }\n            this.tooltipShown = false;\n            this.trigger('tooltipHide', ev);\n        }\n\n        if ((isLink && this.trigger('linkLeave', ev)) ||\n            (isNode && this.trigger('nodeLeave', ev))) {\n            return;\n        }\n\n        if (isLink || isNode || isLegendItem) {\n            this.linksVisuals.forEach(function (link) {\n                this$1.setOpacity(link, this$1.options.links.opacity, link.linkOptions.opacity);\n            });\n        }\n    };\n\n    Sankey.prototype._mousemove = function _mousemove (ev) {\n        var this$1 = this;\n\n        var ref = this.options.tooltip;\n        var followPointer = ref.followPointer;\n        var delay = ref.delay;\n        var element = ev.element;\n        var tooltipElType = element.type;\n\n        if ((tooltipElType !== LINK && tooltipElType !== NODE) || (this.tooltipShown && !followPointer)) {\n            return;\n        }\n\n        var mouseEvent = ev.originalEvent;\n        var rect = this.element.getBoundingClientRect();\n        var isLeft = mouseEvent.clientX - rect.left < rect.width / 2;\n        var isTop = mouseEvent.clientY - rect.top < rect.height / 2;\n\n        ev.tooltipData = {\n            popupOffset: {\n                left: mouseEvent.pageX,\n                top: mouseEvent.pageY\n            },\n            popupAlign: {\n                horizontal: isLeft ? 'left' : 'right',\n                vertical: isTop ? 'top' : 'bottom'\n            }\n        };\n\n        if (tooltipElType === NODE) {\n            var ref$1 = element.dataItem;\n            var sourceLinks = ref$1.sourceLinks;\n            var targetLinks = ref$1.targetLinks;\n            var links = targetLinks.length ? targetLinks : sourceLinks;\n            ev.nodeValue = links.reduce(function (acc, link) { return acc + link.value; }, 0);\n        }\n\n        if (this.tooltipTimeOut) {\n            clearTimeout(this.tooltipTimeOut);\n            this.tooltipTimeOut = null;\n        }\n\n        var nextDelay = followPointer && this.tooltipShown ? 0 : delay;\n\n        this.tooltipTimeOut = setTimeout(function () {\n            this$1.trigger('tooltipShow', ev);\n            this$1.tooltipShown = true;\n            this$1.tooltipTimeOut = null;\n        }, nextDelay);\n    };\n\n    Sankey.prototype._click = function _click (ev) {\n        var element = ev.element;\n        var dataItem = element.dataItem;\n        var isLink = element.type === LINK;\n        var isNode = element.type === NODE;\n        var focusState = this._focusState || {};\n\n        if (isNode) {\n            var focusedNodeClicked = !focusState.link && this.sameNode(focusState.node, dataItem);\n\n            if (!focusedNodeClicked) {\n                this._focusState = { node: dataItem, link: null };\n                this._focusNode({ highlight: false });\n            }\n\n            this.trigger('nodeClick', ev);\n        } else if (isLink) {\n            var link = {\n                sourceId: dataItem.source.id,\n                targetId: dataItem.target.id,\n                value: dataItem.value\n            };\n            var focusedLinkClicked = this.sameLink(focusState.link, link);\n\n            if (!focusedLinkClicked) {\n                this._focusState = { node: dataItem.source, link: link };\n                this._focusLink({ highlight: false });\n            }\n\n            this.trigger('linkClick', ev);\n        }\n    };\n\n    Sankey.prototype.sameNode = function sameNode (node1, node2) {\n        return node1 && node2 && node1.id === node2.id;\n    };\n\n    Sankey.prototype.sameLink = function sameLink (link1, link2) {\n        return link1 && link2 && link1.sourceId === link2.sourceId && link1.targetId === link2.targetId;\n    };\n\n    Sankey.prototype._focusNode = function _focusNode (options) {\n        this._cleanFocusHighlight();\n\n        var nodeData = this._focusState.node;\n        var node = this.models.map.get(nodeData.id);\n        node.focus(options);\n    };\n\n    Sankey.prototype._focusLink = function _focusLink (options) {\n        this._cleanFocusHighlight();\n\n        var linkData = this._focusState.link;\n        var link = this.models.map.get(((linkData.sourceId) + \"-\" + (linkData.targetId)));\n        link.focus(options);\n    };\n\n    Sankey.prototype._focusNextNode = function _focusNextNode (direction) {\n        if ( direction === void 0 ) direction = 1;\n\n        var current = this._focusState.node;\n\n        var columnIndex = this.columns.findIndex(function (column) { return column.find(function (n) { return n.id === current.id; }); });\n        var columnNodes = this.columns[columnIndex];\n        var nodeIndex = columnNodes.findIndex(function (n) { return n.id === current.id; });\n\n        var nextNode = columnNodes[nodeIndex + direction];\n        if (nextNode) {\n            this._focusState.node = nextNode;\n            this._focusNode();\n        }\n    };\n\n    Sankey.prototype._focusNextLink = function _focusNextLink (direction) {\n        if ( direction === void 0 ) direction = 1;\n\n        var node = this._focusState.node;\n        var link = this._focusState.link;\n\n        var sourceLinkIndex = node.sourceLinks.findIndex(function (l) { return l.sourceId === link.sourceId && l.targetId === link.targetId; });\n        var targetLinkIndex = node.targetLinks.findIndex(function (l) { return l.sourceId === link.sourceId && l.targetId === link.targetId; });\n\n        if (sourceLinkIndex !== -1) {\n            var nextLink = node.sourceLinks[sourceLinkIndex + direction];\n\n            if (nextLink) {\n                this._focusState.link = nextLink;\n                this._focusLink();\n            }\n        } else if (targetLinkIndex !== -1) {\n            var nextLink$1 = node.targetLinks[targetLinkIndex + direction];\n\n            if (nextLink$1) {\n                this._focusState.link = nextLink$1;\n                this._focusLink();\n            }\n        }\n    };\n\n    Sankey.prototype._focusSourceNode = function _focusSourceNode () {\n        var linkData = this._focusState.link;\n        var sourceNode = this.models.map.get(linkData.sourceId);\n        this._focusState = { node: sourceNode.options.node, link: null };\n        this._focusNode();\n    };\n\n    Sankey.prototype._focusTargetNode = function _focusTargetNode () {\n        var linkData = this._focusState.link;\n        var targetNode = this.models.map.get(linkData.targetId);\n        this._focusState = { node: targetNode.options.node, link: null };\n        this._focusNode();\n    };\n\n    Sankey.prototype._focusSourceLink = function _focusSourceLink () {\n        var nodeData = this._focusState.node;\n        var sourceLinks = nodeData.sourceLinks;\n        var linkData = sourceLinks[0];\n        if (linkData) {\n            this._focusState.link = linkData;\n            this._focusLink();\n        }\n    };\n\n    Sankey.prototype._focusTargetLink = function _focusTargetLink () {\n        var nodeData = this._focusState.node;\n        var targetLinks = nodeData.targetLinks;\n        var linkData = targetLinks[0];\n        if (linkData) {\n            this._focusState.link = linkData;\n            this._focusLink();\n        }\n    };\n\n    Sankey.prototype._focus = function _focus () {\n        if (!this._skipFocusHighlight) {\n            if (this._focusState.link) {\n                this._focusLink();\n            } else {\n                this._focusNode();\n            }\n        }\n\n        this._skipFocusHighlight = false;\n    };\n\n    Sankey.prototype._blur = function _blur () {\n        this._cleanFocusHighlight();\n    };\n\n    Sankey.prototype._onDown = function _onDown () {\n        if (!this._hasFocus()) {\n            this._skipFocusHighlight = true;\n        }\n    };\n\n    Sankey.prototype._hasFocus = function _hasFocus () {\n        return this.element.ownerDocument.activeElement === this.element;\n    };\n\n    Sankey.prototype._cleanFocusHighlight = function _cleanFocusHighlight () {\n        this.models.nodes.forEach(function (node) { return node.blur(); });\n        this.models.links.forEach(function (link) { return link.blur(); });\n    };\n\n    Sankey.prototype._keydown = function _keydown (ev) {\n        var handler = this['on' + ev.key];\n        var rtl = this.options.rtl;\n\n        if (rtl && ev.key === 'ArrowLeft') {\n            handler = this.onArrowRight;\n        } else if (rtl && ev.key === 'ArrowRight') {\n            handler = this.onArrowLeft;\n        }\n\n        if (handler) {\n            handler.call(this, ev);\n        }\n    };\n\n    Sankey.prototype.onEscape = function onEscape (ev) {\n        ev.preventDefault();\n\n        this._focusState = { node: this.firstFocusableNode(), link: null };\n        this._focusNode();\n    };\n\n    Sankey.prototype.onArrowDown = function onArrowDown (ev) {\n        ev.preventDefault();\n\n        if (this._focusState.link) {\n            this._focusNextLink(1);\n        } else {\n            this._focusNextNode(1);\n        }\n    };\n\n    Sankey.prototype.onArrowUp = function onArrowUp (ev) {\n        ev.preventDefault();\n\n        if (this._focusState.link) {\n            this._focusNextLink(-1);\n        } else {\n            this._focusNextNode(-1);\n        }\n    };\n\n    Sankey.prototype.onArrowLeft = function onArrowLeft (ev) {\n        ev.preventDefault();\n\n        if (this._focusState.link) {\n            this._focusSourceNode();\n        } else {\n            this._focusTargetLink();\n        }\n    };\n\n    Sankey.prototype.onArrowRight = function onArrowRight (ev) {\n        ev.preventDefault();\n\n        if (this._focusState.link) {\n            this._focusTargetNode();\n        } else {\n            this._focusSourceLink();\n        }\n    };\n\n    Sankey.prototype.highlightLinks = function highlightLinks (node, highlight) {\n        var this$1 = this;\n\n        if (node) {\n            this.setLinksInactivityOpacity(highlight.inactiveOpacity);\n            node.links.forEach(function (link) {\n                this$1.setOpacity(link, highlight.opacity, link.linkOptions.highlight.opacity);\n            });\n        }\n    };\n\n    Sankey.prototype._destroySurface = function _destroySurface () {\n        if (this.surface) {\n            this.surface.destroy();\n            this.surface = null;\n            this._destroySurfaceElement();\n        }\n    };\n\n    Sankey.prototype._destroyResizeObserver = function _destroyResizeObserver () {\n        if (this._resizeObserver) {\n            this._resizeObserver.disconnect();\n            this._resizeObserver = null;\n        }\n    };\n\n    Sankey.prototype._initSurfaceElement = function _initSurfaceElement () {\n        if (!this.surfaceElement) {\n            this.surfaceElement = document.createElement('div');\n            this.element.appendChild(this.surfaceElement);\n        }\n    };\n\n    Sankey.prototype._destroySurfaceElement = function _destroySurfaceElement () {\n        if (this.surfaceElement && this.surfaceElement.parentNode) {\n            this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n            this.surfaceElement = null;\n        }\n    };\n\n    Sankey.prototype.setOptions = function setOptions (options, theme) {\n        this._setOptions(options);\n        this._initTheme(theme);\n        this._initSurface();\n        this._redraw();\n    };\n\n    Sankey.prototype._redraw = function _redraw () {\n        this.surface.clear();\n\n        var ref = this._getSize();\n        var width = ref.width;\n        var height = ref.height;\n        this.size = { width: width, height: height };\n        this.surface.setSize(this.size);\n\n        this.createVisual();\n\n        this.surface.draw(this.visual);\n    };\n\n    Sankey.prototype._getSize = function _getSize () {\n        return this.element.getBoundingClientRect();\n    };\n\n    Sankey.prototype.createVisual = function createVisual () {\n        this.visual = this._render();\n    };\n\n    Sankey.prototype.titleBox = function titleBox (title, drawingRect) {\n        if (!title || title.visible === false || !title.text) {\n            return null;\n        }\n\n        var titleElement = new Title(Object.assign({}, {drawingRect: drawingRect}, title));\n        var titleVisual = titleElement.exportVisual();\n        return titleVisual.chartElement.box;\n    };\n\n    Sankey.prototype.legendBox = function legendBox (options, nodes, drawingRect) {\n        if (!options || options.visible === false) {\n            return null;\n        }\n\n        var legend = new Legend(Object.assign({}, {nodes: nodes}, options, {drawingRect: drawingRect}));\n        var legendVisual = legend.exportVisual();\n\n        return legendVisual.chartElement.box;\n    };\n\n    Sankey.prototype.calculateSankey = function calculateSankey$1 (calcOptions, sankeyOptions) {\n        var title = sankeyOptions.title;\n        var legend = sankeyOptions.legend;\n        var data = sankeyOptions.data;\n        var nodes = sankeyOptions.nodes;\n        var labels = sankeyOptions.labels;\n        var nodeColors = sankeyOptions.nodeColors;\n        var disableAutoLayout = sankeyOptions.disableAutoLayout;\n        var disableKeyboardNavigation = sankeyOptions.disableKeyboardNavigation;\n        var rtl = sankeyOptions.rtl;\n        var autoLayout = !disableAutoLayout;\n        var focusHighlightWidth = ((nodes.focusHighlight || {}).border || {}).width || 0;\n        var padding = disableKeyboardNavigation ? 0 : focusHighlightWidth / 2;\n\n        var sankeyBox = new Box(0, 0, calcOptions.width, calcOptions.height);\n        sankeyBox.unpad(padding);\n\n        var titleBox = this.titleBox(title, sankeyBox);\n\n        var legendArea = sankeyBox.clone();\n\n        if (titleBox) {\n            var titleHeight = titleBox.height();\n            if (title.position === TOP) {\n                sankeyBox.unpad({ top: titleHeight });\n                legendArea = new Box(0, titleHeight, calcOptions.width, calcOptions.height);\n            } else {\n                sankeyBox.shrink(0, titleHeight);\n                legendArea = new Box(0, 0, calcOptions.width, calcOptions.height - titleHeight);\n            }\n        }\n\n        var legendBox = this.legendBox(legend, data.nodes, legendArea);\n        var legendPosition = (legend && legend.position) || Legend.prototype.options.position;\n\n        if (legendBox) {\n            if (legendPosition === LEFT) {\n                sankeyBox.unpad({ left: legendBox.width() });\n            }\n\n            if (legendPosition === RIGHT) {\n                sankeyBox.shrink(legendBox.width(), 0);\n            }\n\n            if (legendPosition === TOP) {\n                sankeyBox.unpad({ top: legendBox.height() });\n            }\n\n            if (legendPosition === BOTTOM) {\n                sankeyBox.shrink(0, legendBox.height());\n            }\n        }\n\n        var ref = calculateSankey(Object.assign({}, calcOptions, {offsetX: 0, offsetY: 0, width: sankeyBox.width(), height: sankeyBox.height()}));\n        var calculatedNodes = ref.nodes;\n        var circularLinks = ref.circularLinks;\n        if (circularLinks) {\n            console.warn('Circular links detected. Kendo Sankey diagram does not support circular links.');\n            return { sankey: { nodes: [], links: [], columns: [[]], circularLinks: circularLinks }, legendBox: legendBox, titleBox: titleBox };\n        }\n\n        var box = new Box();\n\n        var diagramMinX = calculatedNodes.reduce(function (acc, node) { return Math.min(acc, node.x0); }, Infinity);\n        var diagramMaxX = calculatedNodes.reduce(function (acc, node) { return Math.max(acc, node.x1); }, 0);\n\n        calculatedNodes.forEach(function (nodeEl, i) {\n            if (rtl) {\n                var x0 = nodeEl.x0;\n                var x1 = nodeEl.x1;\n                nodeEl.x0 = diagramMaxX - x1;\n                nodeEl.x1 = diagramMaxX - x0;\n            }\n            var nodeOps = resolveNodeOptions(nodeEl, nodes, nodeColors, i);\n            var nodeInstance = new Node(nodeOps);\n            box.wrap(rectToBox(nodeInstance.exportVisual().rawBBox()));\n\n            var labelInstance = new Label(resolveLabelOptions(nodeEl, labels, rtl, diagramMinX, diagramMaxX));\n            var labelVisual = labelInstance.exportVisual();\n            if (labelVisual) {\n                box.wrap(rectToBox(labelVisual.rawBBox()));\n            }\n        });\n\n        var offsetX = sankeyBox.x1;\n        var offsetY = sankeyBox.y1;\n\n        var width = sankeyBox.width() + offsetX;\n        var height = sankeyBox.height() + offsetY;\n\n        width -= box.x2 > sankeyBox.width() ? box.x2 - sankeyBox.width() : 0;\n        height -= box.y2 > sankeyBox.height() ? box.y2 - sankeyBox.height() : 0;\n\n        offsetX += box.x1 < 0 ? -box.x1 : 0;\n        offsetY += box.y1 < 0 ? -box.y1 : 0;\n\n        if (autoLayout === false) {\n            return {\n                sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, autoLayout: false})),\n                legendBox: legendBox,\n                titleBox: titleBox\n            };\n        }\n\n        if (this.resize && autoLayout && this.permutation) {\n            this.resize = false;\n            return {\n                sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height}, this.permutation)),\n                legendBox: legendBox,\n                titleBox: titleBox\n            };\n        }\n\n        var startColumn = 1;\n        var loops = 2;\n        var columnsLength = calculateSankey(Object.assign({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, autoLayout: false})).columns.length;\n        var results = [];\n\n        var permutation = function (targetColumnIndex, reverse) {\n            var currPerm = calculateSankey(Object.assign({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, loops: loops, targetColumnIndex: targetColumnIndex, reverse: reverse}));\n            var crosses = crossesValue(currPerm.links);\n            results.push({\n                crosses: crosses,\n                reverse: reverse,\n                targetColumnIndex: targetColumnIndex\n            });\n            return crosses === 0;\n        };\n\n        for (var index = startColumn; index <= columnsLength - 1; index++) {\n            if (permutation(index, false) || permutation(index, true)) {\n                break;\n            }\n        }\n\n        var minCrosses = Math.min.apply(null, results.map(function (r) { return r.crosses; }));\n        var bestResult = results.find(function (r) { return r.crosses === minCrosses; });\n        this.permutation = { targetColumnIndex: bestResult.targetColumnIndex, reverse: bestResult.reverse };\n        var result = calculateSankey(Object.assign({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height}, this.permutation));\n\n        return {\n            sankey: result,\n            legendBox: legendBox,\n            titleBox: titleBox\n        };\n    };\n\n    Sankey.prototype._render = function _render (options, context) {\n        var sankeyOptions = options || this.options;\n        var sankeyContext = context || this;\n\n        var labelOptions = sankeyOptions.labels;\n        var nodesOptions = sankeyOptions.nodes;\n        var linkOptions = sankeyOptions.links;\n        var nodeColors = sankeyOptions.nodeColors;\n        var title = sankeyOptions.title;\n        var legend = sankeyOptions.legend;\n        var rtl = sankeyOptions.rtl;\n        var disableKeyboardNavigation = sankeyOptions.disableKeyboardNavigation;\n        var data = sankeyOptions.data;\n        var ref = sankeyContext.size;\n        var width = ref.width;\n        var height = ref.height;\n\n        var calcOptions = Object.assign({}, data, {width: width, height: height, nodesOptions: nodesOptions, title: title, legend: legend});\n        var ref$1 = this.calculateSankey(calcOptions, sankeyOptions);\n        var sankey = ref$1.sankey;\n        var titleBox = ref$1.titleBox;\n        var legendBox = ref$1.legendBox;\n        if (rtl) {\n            toRtl(sankey);\n        }\n        var nodes = sankey.nodes;\n        var links = sankey.links;\n        var columns = sankey.columns;\n\n        sankeyContext.columns = columns.map(function (column) {\n            var newColumn = column.slice();\n            newColumn.sort(function (a, b) { return a.y0 - b.y0; });\n            return newColumn;\n        });\n\n        var visual = new drawing.Group({\n            clip: drawing.Path.fromRect(new geometry.Rect([0, 0], [width, height]))\n        });\n\n        if (titleBox) {\n            var titleElement = new Title(Object.assign({}, title, {drawingRect: titleBox}));\n            var titleVisual = titleElement.exportVisual();\n            visual.append(titleVisual);\n        }\n\n        if (sankey.circularLinks) {\n            return visual;\n        }\n\n        var visualNodes = new Map();\n        sankeyContext.nodesVisuals = visualNodes;\n\n        var models = {\n            nodes: [],\n            links: [],\n            map: new Map()\n        };\n        sankeyContext.models = models;\n\n        var focusHighlights = [];\n\n        nodes.forEach(function (node, i) {\n            var nodeOps = resolveNodeOptions(node, nodesOptions, nodeColors, i);\n            nodeOps.root = function () { return sankeyContext.element; };\n            nodeOps.navigatable = disableKeyboardNavigation !== true;\n\n            var nodeInstance = new Node(nodeOps);\n            var nodeVisual = nodeInstance.exportVisual();\n            nodeVisual.links = [];\n            nodeVisual.type = NODE;\n\n            node.color = nodeOps.color;\n            node.opacity = nodeOps.opacity;\n\n            nodeVisual.dataItem = Object.assign({}, data.nodes[i],\n                {color: nodeOps.color,\n                opacity: nodeOps.opacity,\n                sourceLinks: node.sourceLinks.map(function (link) { return ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value }); }),\n                targetLinks: node.targetLinks.map(function (link) { return ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value }); })});\n            visualNodes.set(node.id, nodeVisual);\n\n            models.nodes.push(nodeInstance);\n            models.map.set(node.id, nodeInstance);\n\n            visual.append(nodeVisual);\n\n            nodeInstance.createFocusHighlight();\n\n            if (nodeInstance._highlight) {\n                focusHighlights.push(nodeInstance._highlight);\n            }\n        });\n\n        var sortedLinks = links.slice().sort(function (a, b) { return b.value - a.value; });\n\n        var linksVisuals = [];\n        sankeyContext.linksVisuals = linksVisuals;\n\n        sortedLinks.forEach(function (link) {\n            var source = link.source;\n            var target = link.target;\n            var sourceNode = visualNodes.get(source.id);\n            var targetNode = visualNodes.get(target.id);\n            var resolvedOptions = resolveLinkOptions(link, linkOptions, sourceNode, targetNode);\n            resolvedOptions.root = function () { return sankeyContext.element; };\n            resolvedOptions.navigatable = disableKeyboardNavigation !== true;\n            resolvedOptions.rtl = rtl;\n            var linkInstance = new Link(resolvedOptions);\n            var linkVisual = linkInstance.exportVisual();\n\n            linkVisual.type = LINK;\n            linkVisual.dataItem = {\n                source: Object.assign({}, sourceNode.dataItem),\n                target: Object.assign({}, targetNode.dataItem),\n                value: link.value\n            };\n            linkVisual.linkOptions = resolvedOptions;\n            linksVisuals.push(linkVisual);\n\n            sourceNode.links.push(linkVisual);\n            targetNode.links.push(linkVisual);\n\n            models.links.push(linkInstance);\n            models.map.set(((source.id) + \"-\" + (target.id)), linkInstance);\n\n            linkInstance.createFocusHighlight();\n\n            if (linkInstance._highlight) {\n                focusHighlights.push(linkInstance._highlight);\n            }\n\n            visual.append(linkVisual);\n        });\n\n        var diagramMinX = nodes.reduce(function (acc, node) { return Math.min(acc, node.x0); }, Infinity);\n        var diagramMaxX = nodes.reduce(function (acc, node) { return Math.max(acc, node.x1); }, 0);\n\n        nodes.forEach(function (node) {\n            var textOps = resolveLabelOptions(node, labelOptions, rtl, diagramMinX, diagramMaxX);\n            var labelInstance = new Label(textOps);\n            var labelVisual = labelInstance.exportVisual();\n\n            if (labelVisual) {\n                visual.append(labelVisual);\n            }\n        });\n\n        if (legendBox) {\n            var legendElement = new Legend(Object.assign({}, legend, {rtl: rtl, drawingRect: legendBox, nodes: nodes}));\n            var legendVisual = legendElement.exportVisual();\n            visual.append(legendVisual);\n        }\n\n        if (focusHighlights.length !== 0) {\n            var focusHighlight = new drawing.Group();\n            focusHighlight.append.apply(focusHighlight, focusHighlights);\n            visual.append(focusHighlight);\n        }\n\n        return visual;\n    };\n\n    Sankey.prototype.exportVisual = function exportVisual (exportOptions) {\n        var options = (exportOptions && exportOptions.options) ?\n            deepExtend({}, this.options, exportOptions.options) : this.options;\n\n        var context = {\n            size: {\n                width: defined(exportOptions && exportOptions.width) ? exportOptions.width : this.size.width,\n                height: defined(exportOptions && exportOptions.height) ? exportOptions.height : this.size.height\n            }\n        };\n\n        return this._render(options, context);\n    };\n\n    Sankey.prototype._setOptions = function _setOptions (options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    return Sankey;\n}(Observable));\n\nvar highlightOptions = {\n    opacity: 1,\n    width: 2,\n    color: BLACK\n};\n\nsetDefaultOptions(Sankey, {\n    title: {\n        position: TOP, // 'top', 'bottom'\n    },\n    labels: {\n        visible: true,\n        margin: {\n            left: 8,\n            right: 8\n        },\n        padding: 0,\n        border: {\n            width: 0\n        },\n        paintOrder: 'stroke',\n        stroke: {\n            lineJoin: \"round\",\n            width: 1\n        },\n        offset: { left: 0, top: 0 }\n    },\n    nodes: {\n        width: 24,\n        padding: 16,\n        opacity: 1,\n        align: 'stretch', // 'left', 'right', 'stretch'\n        offset: { left: 0, top: 0 },\n        focusHighlight: {\n            border: Object.assign({}, highlightOptions)\n        },\n        labels: {\n            ariaTemplate: function (ref) {\n                var node = ref.node;\n\n                return node.label.text;\n}\n        }\n    },\n    links: {\n        colorType: 'static', // 'source', 'target', 'static'\n        opacity: 0.4,\n        highlight: {\n            opacity: 0.8,\n            inactiveOpacity: 0.2\n        },\n        focusHighlight: {\n            border: Object.assign({}, highlightOptions)\n        },\n        labels: {\n            ariaTemplate: function (ref) {\n                var link = ref.link;\n\n                return ((link.source.label.text) + \" to \" + (link.target.label.text));\n}\n        }\n    },\n    tooltip: {\n        followPointer: false,\n        delay: 200\n    }\n});\n","export var createSankeyData = function (data, dimensions, measure) {\n    var nodes = new Set();\n    var links = new Map();\n    var linksMap = new Map();\n\n    data.forEach(function (row) {\n        dimensions.forEach(function (dimension) {\n            nodes.add(dimension.value(row));\n        });\n\n        for (var i = 0; i < dimensions.length - 1; i++) {\n            var source = dimensions[i].value(row);\n            var target = dimensions[i + 1].value(row);\n            var key = source + \"_\" + target;\n            var value = measure.value(row);\n            var existingValue = links.get(key);\n\n            if (existingValue !== undefined) {\n                links.set(key, existingValue + value);\n            } else {\n                links.set(key, value);\n                linksMap.set(key, { source: source, target: target });\n            }\n        }\n    });\n\n    var nodesId = new Map();\n    var nodesArray = Array.from(nodes).map(function (node, index) {\n        nodesId.set(node, index);\n        return { id: index, label: { text: String(node) } };\n    });\n\n    var linksArray = Array.from(links).map(function (ref) {\n        var key = ref[0];\n        var value = ref[1];\n\n        var ref$1 = linksMap.get(key);\n        var source = ref$1.source;\n        var target = ref$1.target;\n        return {\n            sourceId: nodesId.get(source),\n            targetId: nodesId.get(target),\n            value: value\n        };\n    });\n\n    return { nodes: nodesArray, links: linksArray };\n};\n","var ActionTypes = Object.freeze({\n    seriesType: 0,\n    stacked: 1,\n\n    categoryAxisX: 2,\n    valueAxisY: 3,\n\n    seriesChange: 4,\n\n    areaMarginLeft: 5,\n    areaMarginRight: 6,\n    areaMarginTop: 7,\n    areaMarginBottom: 8,\n    areaBackground: 9,\n\n    titleText: 10,\n    titleFontName: 11,\n    titleFontSize: 12,\n    titleColor: 13,\n\n    subtitleText: 14,\n    subtitleFontName: 15,\n    subtitleFontSize: 16,\n    subtitleColor: 17,\n\n    seriesColor: 18,\n    seriesLabel: 19,\n\n    legendVisible: 20,\n    legendFontName: 21,\n    legendFontSize: 22,\n    legendColor: 23,\n    legendPosition: 24,\n\n    categoryAxisTitleText: 25,\n    categoryAxisTitleFontName: 26,\n    categoryAxisTitleFontSize: 27,\n    categoryAxisTitleColor: 28,\n    categoryAxisLabelsFontName: 29,\n    categoryAxisLabelsFontSize: 30,\n    categoryAxisLabelsColor: 31,\n    categoryAxisLabelsRotation: 32,\n    categoryAxisReverseOrder: 33,\n\n    valueAxisTitleText: 34,\n    valueAxisTitleFontName: 35,\n    valueAxisTitleFontSize: 36,\n    valueAxisTitleColor: 37,\n    valueAxisLabelsFormat: 38,\n    valueAxisLabelsFontName: 39,\n    valueAxisLabelsFontSize: 40,\n    valueAxisLabelsColor: 41,\n    valueAxisLabelsRotation: 42,\n});\n\nvar fontSizes = [\n    { text: \"10\", value: \"10px\" },\n    { text: \"12\", value: \"12px\" },\n    { text: \"14\", value: \"14px\" },\n    { text: \"16\", value: \"16px\" },\n    { text: \"20\", value: \"20px\" },\n    { text: \"28\", value: \"28px\" },\n    { text: \"42\", value: \"42px\" },\n    { text: \"56\", value: \"56px\" }\n];\n\nvar titleSizeDefault = '20px';\nvar subtitleSizeDefault = '16px';\nvar labelSizeDefault = '12px';\nvar axisTitleSizeDefault = '16px';\n\nvar fontNames = [\n    {\n        text: \"Arial\",\n        value: \"Arial, Helvetica, sans-serif\",\n        style: { fontFamily: \"Arial, Helvetica, sans-serif\" },\n    },\n    {\n        text: \"Courier New\",\n        value: \"'Courier New', Courier, monospace\",\n        style: { fontFamily: \"'Courier New', Courier, monospace\" },\n    },\n    {\n        text: \"Georgia\",\n        value: \"Georgia, serif\",\n        style: { fontFamily: \"Georgia, serif\" },\n    },\n    {\n        text: \"Impact\",\n        value: \"Impact, Charcoal, sans-serif\",\n        style: { fontFamily: \"Impact, Charcoal, sans-serif\" },\n    },\n    {\n        text: \"Lucida Console\",\n        value: \"'Lucida Console', Monaco, monospace\",\n        style: { fontFamily: \"'Lucida Console', Monaco, monospace\" },\n    },\n    {\n        text: \"Tahoma\",\n        value: \"Tahoma, Geneva, sans-serif\",\n        style: { fontFamily: \"Tahoma, Geneva, sans-serif\" },\n    },\n    {\n        text: \"Times New Roman\",\n        value: \"'Times New Roman', Times,serif\",\n        style: { fontFamily: \"'Times New Roman', Times,serif\" },\n    },\n    {\n        text: \"Trebuchet MS\",\n        value: \"'Trebuchet MS', Helvetica, sans-serif\",\n        style: { fontFamily: \"'Trebuchet MS', Helvetica, sans-serif\" },\n    },\n    {\n        text: \"Verdana\",\n        value: \"Verdana, Geneva, sans-serif\",\n        style: { fontFamily: \"Verdana, Geneva, sans-serif\" },\n    } ];\n\nvar fontNameDefault = fontNames[0].value;\n\nvar columnType = \"column\";\nvar barType = \"bar\";\nvar lineType = \"line\";\nvar pieType = \"pie\";\nvar scatterType = \"scatter\";\nvar categoricalTypes = [columnType, barType, lineType, scatterType];\n\nvar scatterSeries = {\n    type: lineType,\n    width: 0,\n};\n\nfunction isCategorical(type) {\n    return type && categoricalTypes.includes(type);\n}\n\nvar categoryTypes = [\"string\", \"date\", \"number\"];\nvar valueTypes = [\"number\"];\n\nvar axesDefinitions = {\n    bar: [\n        { axisType: \"category\", types: categoryTypes },\n        { axisType: \"value\", types: valueTypes } ],\n    column: [\n        { axisType: \"category\", types: categoryTypes },\n        { axisType: \"value\", types: valueTypes } ],\n    line: [\n        { axisType: \"category\", types: categoryTypes },\n        { axisType: \"value\", types: valueTypes } ],\n    pie: [\n        { axisType: \"category\", types: categoryTypes },\n        { axisType: \"value\", types: valueTypes, count: 1 } ],\n    scatter: [\n        { axisType: \"category\", types: categoryTypes },\n        { axisType: \"value\", types: valueTypes } ],\n};\n\nfunction getFont(font, size) {\n    return ((size || \"\") + \" \" + (font || \"\")).trim();\n}\n\nfunction parseFont(font) {\n    var spaceIndex = (font || \"\").indexOf(\" \");\n    var size = font && font.substring(0, spaceIndex);\n    var name = font && font.substring(spaceIndex + 1);\n    return { size: size, name: name };\n}\n\nvar updateFontName = function (fontName, defaultSize, currentFont) {\n    var ref = parseFont(currentFont);\n    var size = ref.size;\n    return fontName ? getFont(fontName, size || defaultSize) : \"\";\n};\n\nvar updateFontSize = function (fontSize, defaultFontName, currentFont) {\n    var ref = parseFont(currentFont);\n    var name = ref.name;\n    return fontSize ? getFont(name || defaultFontName, fontSize) : \"\";\n};\n\nvar hasValue = function (value) { return value !== undefined && value !== null; };\n\nvar recordWithValues = function (data) {\n    var result = structuredClone(data[0]);\n    result.forEach(function (item, i) {\n        if (!hasValue(item.value)) {\n            for (var index = 0; index < data.length; index++) {\n                var value = data[index][i].value;\n                if (hasValue(value)) {\n                    item.value = value;\n                    break;\n                }\n            }\n        }\n    });\n\n    return result;\n};\n\nvar getCategoryColumnIndex = function (data, categoryDef) {\n    var candidates = [];\n    var sampleRecord = recordWithValues(data);\n\n    categoryDef.types.forEach(function (type) {\n        sampleRecord.forEach(function (item, i) {\n            if (typeof item.value === type) {\n                candidates.push(i);\n            }\n        });\n    });\n\n    var result = candidates.findIndex(function (index) {\n        var values = data.map(function (record) { return record[index].value; });\n        return new Set(values).size === values.length;\n    });\n\n    return Math.max(result, 0);\n};\n\nvar getValueColumnIndexes = function (data, valuesDef) {\n    var candidates = [];\n    var sampleRecord = recordWithValues(data);\n\n    valuesDef.forEach(function (def) {\n        def.types.forEach(function (type) {\n            sampleRecord.forEach(function (item, i) {\n                if (typeof item.value === type) {\n                    candidates.push(i);\n                }\n            });\n        });\n    });\n\n    return candidates;\n};\n\nvar emptyState = function () { return structuredClone({\n        columns: [],\n        data: [],\n        series: [],\n        initialSeries: [],\n        categoryAxis: [ { categories: [], labels: { visible: true, rotation: \"auto\" }, title: { text: '' } } ],\n        valueAxis: [{ labels: { visible: true, rotation: 'auto' } }],\n        area: {\n            margin: {\n                left: undefined,\n                right: undefined,\n                top: undefined,\n                bottom: undefined,\n            },\n        },\n        title: { text: '' },\n        subtitle: { text: '' },\n        stack: false,\n    }); };\n\nvar categoryValueChartState = function (data, seriesType, options) {\n    var state = emptyState();\n    state.seriesType = seriesType;\n    state.data = data || [];\n    state.legend = { visible: true, position: \"bottom\" };\n    var chartDef = axesDefinitions[seriesType];\n\n    if (!chartDef || !data.length) {\n        return state;\n    }\n\n    var firstRecord = data[0].slice();\n    state.columns = data[0].map(function (i) { return String(i.field); });\n\n    var categoryDef = chartDef.find(function (def) { return def.axisType === \"category\"; });\n    var catIndex = -1;\n    if (categoryDef) {\n        catIndex =\n            options && options.categoryAxis\n                ? state.columns.indexOf(options.categoryAxis)\n                : getCategoryColumnIndex(data, categoryDef);\n    }\n\n    var valuesDef = chartDef.filter(function (def) { return def.axisType === \"value\"; });\n    var valuesIndexes = getValueColumnIndexes(data, valuesDef);\n\n    if (valuesIndexes.includes(catIndex)) {\n        if (valuesIndexes.length > 1) {\n            valuesIndexes = valuesIndexes.filter(function (index) { return index !== catIndex; });\n        } else {\n            catIndex = -1;\n        }\n    }\n\n    var series = [];\n    valuesIndexes.forEach(function (index) {\n        var valuesColumn = firstRecord[index];\n        var valuesResult = [];\n        data.forEach(function (record) {\n            valuesResult.push(record[index].value);\n        });\n        series.push(Object.assign({}, {name: valuesColumn.field,\n            type: seriesType,\n            data: valuesResult,\n            stack: false,\n            labels: { visible: false }},\n            (seriesType === scatterType ? scatterSeries : {})));\n    });\n\n    var categories =\n        catIndex > -1\n            ? data.map(function (item) { return String(\n                    hasValue(item[catIndex].value)\n                        ? item[catIndex].value\n                        : \" \"\n                ); }\n            )\n            : [];\n\n    if (series.length) {\n        state.series = series.map(function (s, i) { return (Object.assign({}, s, {id: i})); });\n        state.initialSeries = structuredClone(state.series);\n    }\n\n    state.categoryAxis = [\n        { categories: categories, labels: { visible: true, rotation: \"auto\" } } ];\n    state.categoryField = state.columns[catIndex];\n\n    return state;\n};\n\nvar pieChartState = function (data, seriesType, options) {\n    var state = emptyState();\n    state.seriesType = seriesType;\n    state.data = data || [];\n\n    var chartDef = axesDefinitions[seriesType];\n\n    if (!chartDef || !data.length) {\n        return state;\n    }\n\n    var categoriesAxis = data[0].map(function (i) { return i.field; });\n    var categoryDef = chartDef.find(function (def) { return def.axisType === \"category\"; });\n    var catIndex = -1;\n    if (categoryDef) {\n        catIndex =\n            options && options.categoryAxis\n                ? categoriesAxis.indexOf(options.categoryAxis)\n                : getCategoryColumnIndex(data, categoryDef);\n    }\n\n    var valuesDef = chartDef.filter(function (def) { return def.axisType === \"value\"; });\n\n    var valuesIndexes = [];\n    if (options && options.valueAxis) {\n        valuesIndexes = [categoriesAxis.indexOf(options.valueAxis)];\n    } else {\n        valuesIndexes = getValueColumnIndexes(data, valuesDef);\n    }\n\n    if (valuesIndexes.includes(catIndex) && valuesIndexes.length > 1) {\n        valuesIndexes = valuesIndexes.filter(function (index) { return index !== catIndex; });\n    }\n\n    if (typeof valuesDef[0].count === \"number\") {\n        valuesIndexes = valuesIndexes.slice(0, valuesDef[0].count);\n    }\n\n    var categories =\n        catIndex > -1 ? data.map(function (item) { return String(item[catIndex].value); }) : [];\n\n    var flatData = [];\n\n    data.forEach(function (item) {\n        var record = {};\n        valuesIndexes.forEach(function (index) {\n            var col = item[index];\n            record[col.field] = col.value || 0;\n            record[item[catIndex].field] = item[catIndex].value || \" \";\n        });\n        flatData.push(record);\n    });\n\n    state.columns = categoriesAxis;\n    state.categoryAxis = [{ categories: categories, title: { text: \"\" } }];\n\n    state.series = [\n        {\n            id: 0,\n            data: flatData,\n            type: seriesType,\n            name: categoriesAxis[catIndex],\n            labels: { visible: true },\n            categoryField: categoriesAxis[catIndex],\n            field: categoriesAxis[valuesIndexes[0]],\n        } ];\n\n    state.categoryField = categoriesAxis[catIndex];\n    state.valueField = categoriesAxis[valuesIndexes[0]];\n\n    state.initialSeries = structuredClone(state.series);\n\n    return state;\n};\n\nfunction createInitialState(data, seriesType, defaultState) {\n    var state = createState(\n        data,\n        (defaultState && defaultState.seriesType) || seriesType\n    );\n\n    return typeof (defaultState && defaultState.stack) !== \"undefined\"\n        ? updateState(state, ActionTypes.stacked, defaultState.stack)\n        : state;\n}\n\nfunction createState(data, seriesType) {\n    return (isCategorical(seriesType) ? categoryValueChartState : pieChartState)(\n        data,\n        seriesType\n    );\n}\n\nfunction mergeStates(source, target) {\n    var newState = structuredClone(target);\n    newState.legend = source.legend;\n    newState.area = source.area;\n    newState.title = source.title;\n    newState.subtitle = source.subtitle;\n    if (newState.series.length === source.series.length) {\n        for (var i = 0; i < newState.series.length; i++) {\n            newState.series[i].color = source.series[i].color;\n            newState.series[i].labels = source.series[i].labels;\n        }\n    }\n\n    if (\n        source.series.every(function (s) { return s.labels && s.labels.visible; }) &&\n        isCategorical(newState.seriesType) &&\n        isCategorical(source.seriesType)\n    ) {\n        newState.series.forEach(function (s) {\n            s.labels = s.labels || {};\n            s.labels.visible = true;\n        });\n    }\n\n    return newState;\n}\n\n/* eslint-disable complexity */\nfunction updateState(currentState, action, value) {\n    var state = Object.assign({}, currentState);\n\n    switch (action) {\n        case ActionTypes.seriesType:\n            return createState(state.data, value);\n\n        case ActionTypes.stacked:\n            state.series = state.series.map(function (s) { return (Object.assign({}, s, {stack: value})); });\n            state.stack = value;\n            return state;\n\n        case ActionTypes.categoryAxisX: {\n            if (state.seriesType && isCategorical(state.seriesType)) {\n                var newState = categoryValueChartState(\n                    state.data,\n                    state.seriesType,\n                    { categoryAxis: value }\n                );\n                return mergeStates(state, newState);\n            } else if (state.seriesType === pieType) {\n                var newState$1 = pieChartState(state.data, state.seriesType, {\n                    categoryAxis: value,\n                });\n                return mergeStates(state, newState$1);\n            }\n\n            return state;\n        }\n\n        case ActionTypes.valueAxisY: {\n            if (state.seriesType === pieType) {\n                var newState$2 = pieChartState(state.data, state.seriesType, {\n                    categoryAxis: state.categoryField,\n                    valueAxis: value,\n                });\n                return mergeStates(state, newState$2);\n            }\n\n            return state;\n        }\n\n        case ActionTypes.seriesChange:\n            state.series = value;\n            return state;\n\n        case ActionTypes.areaMarginLeft:\n            state.area = Object.assign({}, state.area,\n                {margin: Object.assign({}, ((state.area && state.area.margin) || {}),\n                    {left: value})});\n            return state;\n\n        case ActionTypes.areaMarginRight:\n            state.area = Object.assign({}, state.area,\n                {margin: Object.assign({}, ((state.area && state.area.margin) || {}),\n                    {right: value})});\n            return state;\n\n        case ActionTypes.areaMarginTop:\n            state.area = Object.assign({}, state.area,\n                {margin: Object.assign({}, ((state.area && state.area.margin) || {}),\n                    {top: value})});\n            return state;\n\n        case ActionTypes.areaMarginBottom:\n            state.area = Object.assign({}, state.area,\n                {margin: Object.assign({}, ((state.area && state.area.margin) || {}),\n                    {bottom: value})});\n            return state;\n\n        case ActionTypes.areaBackground:\n            state.area = Object.assign({}, state.area, {background: value});\n            return state;\n\n        case ActionTypes.titleText:\n            state.title = Object.assign({}, state.title, {text: value});\n            return state;\n\n        case ActionTypes.titleFontName: {\n            state.title = Object.assign({}, state.title,\n                {font: updateFontName(\n                    value,\n                    titleSizeDefault,\n                    state.title && state.title.font\n                )});\n            return state;\n        }\n        case ActionTypes.titleFontSize:\n            state.title = Object.assign({}, state.title,\n                {font: updateFontSize(\n                    value,\n                    fontNameDefault,\n                    state.title && state.title.font\n                )});\n            return state;\n\n        case ActionTypes.titleColor:\n            state.title = Object.assign({}, state.title, {color: value});\n            return state;\n\n        case ActionTypes.subtitleText:\n            state.subtitle = Object.assign({}, state.subtitle, {text: value});\n            return state;\n\n        case ActionTypes.subtitleFontName:\n            state.subtitle = Object.assign({}, state.subtitle,\n                {font: updateFontName(\n                    value,\n                    subtitleSizeDefault,\n                    state.subtitle && state.subtitle.font\n                )});\n            return state;\n\n        case ActionTypes.subtitleFontSize:\n            state.subtitle = Object.assign({}, state.subtitle,\n                {font: updateFontSize(\n                    value,\n                    fontNameDefault,\n                    state.subtitle && state.subtitle.font\n                )});\n            return state;\n\n        case ActionTypes.subtitleColor:\n            state.subtitle = Object.assign({}, state.subtitle, {color: value});\n            return state;\n\n        case ActionTypes.seriesColor:\n            state.series = state.series.map(function (s) { return (Object.assign({}, s,\n                {color: value.seriesName === s.name ? value.color : s.color})); });\n            return state;\n\n        case ActionTypes.seriesLabel:\n            state.series = state.series.map(function (s) {\n                if (value.all || value.seriesName === s.name) {\n                    return Object.assign({}, s, {labels: { visible: value.visible }});\n                }\n                return s;\n            });\n            return state;\n\n        case ActionTypes.legendVisible:\n            state.legend = Object.assign({}, state.legend, {visible: value});\n            return state;\n\n        case ActionTypes.legendFontName: {\n            var legend = state.legend || {};\n            state.legend = Object.assign({}, legend,\n                {labels: Object.assign({}, legend.labels,\n                    {font: updateFontName(\n                        value,\n                        labelSizeDefault,\n                        legend.labels && legend.labels.font\n                    )})});\n            return state;\n        }\n        case ActionTypes.legendFontSize: {\n            var legend$1 = state.legend || {};\n            state.legend = Object.assign({}, legend$1,\n                {labels: Object.assign({}, legend$1.labels,\n                    {font: updateFontSize(\n                        value,\n                        fontNameDefault,\n                        legend$1.labels && legend$1.labels.font\n                    )})});\n            return state;\n        }\n        case ActionTypes.legendColor: {\n            var legend$2 = state.legend || {};\n            state.legend = Object.assign({}, legend$2,\n                {labels: Object.assign({}, legend$2.labels, {color: value})});\n            return state;\n        }\n        case ActionTypes.legendPosition:\n            state.legend = Object.assign({}, state.legend, {position: value});\n            return state;\n\n        case ActionTypes.categoryAxisTitleText:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {text: value})})); });\n            return state;\n\n        case ActionTypes.categoryAxisTitleFontName: {\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {font: updateFontName(value, axisTitleSizeDefault, axis.title && axis.title.font)})})); });\n            return state;\n        }\n        case ActionTypes.categoryAxisTitleFontSize:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {font: updateFontSize(value, fontNameDefault, axis.title && axis.title.font)})})); });\n            return state;\n\n        case ActionTypes.categoryAxisTitleColor:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {color: value})})); });\n            return state;\n\n        case ActionTypes.categoryAxisLabelsFontName: {\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {font: updateFontName(value, labelSizeDefault, axis.labels && axis.labels.font)})})); });\n            return state;\n        }\n\n        case ActionTypes.categoryAxisLabelsFontSize:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {font: updateFontSize(value, fontNameDefault, axis.labels && axis.labels.font)})})); });\n            return state;\n\n        case ActionTypes.categoryAxisLabelsColor:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {color: value})})); });\n            return state;\n\n        case ActionTypes.categoryAxisLabelsRotation: {\n            var rotation = hasValue(value) ? value : 'auto';\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {rotation: rotation})})); });\n            return state;\n        }\n        case ActionTypes.categoryAxisReverseOrder:\n            state.categoryAxis = (state.categoryAxis || []).map(function (axis) { return (Object.assign({}, axis, {reverse: value})); });\n            return state;\n\n        case ActionTypes.valueAxisTitleText: {\n            if (!state.valueAxis || state.valueAxis.length === 0) {\n                state.valueAxis = [{ title: { text: value } }];\n            } else {\n                state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {text: value})})); });\n            }\n            return state;\n        }\n        case ActionTypes.valueAxisTitleFontName: {\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {font: updateFontName(value, axisTitleSizeDefault, axis.title && axis.title.font)})})); });\n            return state;\n        }\n        case ActionTypes.valueAxisTitleFontSize:\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {font: updateFontSize(value, fontNameDefault, axis.title && axis.title.font)})})); });\n            return state;\n        case ActionTypes.valueAxisTitleColor:\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {title: Object.assign({}, axis.title, {color: value})})); });\n            return state;\n\n        case ActionTypes.valueAxisLabelsFormat:\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {format: value})})); });\n            return state;\n\n        case ActionTypes.valueAxisLabelsFontName: {\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {font: updateFontName(value, labelSizeDefault, axis.labels && axis.labels.font)})})); });\n            return state;\n        }\n        case ActionTypes.valueAxisLabelsFontSize:\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {font: updateFontSize(value, fontNameDefault, axis.labels && axis.labels.font)})})); });\n            return state;\n        case ActionTypes.valueAxisLabelsColor:\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {color: value})})); });\n            return state;\n\n        case ActionTypes.valueAxisLabelsRotation: {\n            var rotation$1 = hasValue(value) ? value : 'auto';\n            state.valueAxis = (state.valueAxis || []).map(function (axis) { return (Object.assign({}, axis, {labels: Object.assign({}, axis.labels, {rotation: rotation$1})})); });\n            return state;\n        }\n\n        default:\n            return state;\n    }\n}\n\nexport {\n    ActionTypes,\n    fontSizes,\n    fontNames,\n    isCategorical,\n    parseFont,\n    createInitialState,\n    createState,\n    mergeStates,\n    updateState\n};\n","export var messages = Object.freeze({\n    windowTitle: 'Chart Preview',\n    exportButton: 'Export',\n    exportPDFButton: 'PDF File',\n    exportSVGButton: 'SVG File',\n    exportPNGButton: 'PNG File',\n    tabChart: 'Chart',\n    tabData: 'Data',\n    tabFormat: 'Format',\n    barChart: 'Bar Chart',\n    barChartBar: 'Bar',\n    barChartStackedBar: 'Stacked Bar',\n    barChart100StackedBar: '100% Stacked Bar',\n    pieChart: 'Pie Chart',\n    pieChartPie: 'Pie',\n    columnChart: 'Column Chart',\n    columnChartColumn: 'Column',\n    columnChartStackedColumn: 'Stacked Column',\n    columnChart100StackedColumn: '100% Stacked Column',\n    lineChart: 'Line Chart',\n    lineChartLine: 'Line',\n    lineChartStackedLine: 'Stacked Line',\n    lineChart100StackedLine: '100% Stacked Line',\n    scatterChart: 'Scatter Chart',\n    scatterChartScatter: 'Scatter',\n    configuration: 'Configuration',\n    configurationCategoryAxis: 'Category Axis',\n    configurationXAxis: 'X Axis',\n    configurationValueAxis: 'Value Axis',\n    configurationSeries: 'Series',\n    configurationSeriesAdd: 'Add',\n    formatChartArea: 'Chart Area',\n    formatChartAreaMargins: 'Margins',\n    formatChartAreaMarginsAuto: 'Auto',\n    formatChartAreaMarginsLeft: 'Left',\n    formatChartAreaMarginsRight: 'Right',\n    formatChartAreaMarginsTop: 'Top',\n    formatChartAreaMarginsBottom: 'Bottom',\n    formatChartAreaBackground: 'Background',\n    formatChartAreaBackgroundColor: 'Color',\n    formatTitle: 'Title',\n    formatTitleApplyTo: 'Apply to',\n    formatTitleChartTitle: 'Chart Title',\n    formatTitleChartSubtitle: 'Chart Subtitle',\n    formatTitleLabel: 'Title',\n    formatTitleFont: 'Font',\n    formatTitleFontPlaceholder: '(inherited font)',\n    formatTitleSize: 'Size',\n    formatTitleSizePlaceholder: 'px',\n    formatTitleColor: 'Color',\n    formatSeries: 'Series',\n    formatSeriesApplyTo: 'Apply to',\n    formatSeriesAllSeries: 'All Series',\n    formatSeriesColor: 'Color',\n    formatSeriesShowLabels: 'Show Labels',\n    formatLegend: 'Legend',\n    formatLegendShowLegend: 'Show Legend',\n    formatLegendFont: 'Font',\n    formatLegendFontPlaceholder: '(inherited font)',\n    formatLegendSize: 'Size',\n    formatLegendSizePlaceholder: 'px',\n    formatLegendColor: 'Color',\n    formatLegendPosition: 'Position',\n    formatLegendPositionTop: 'Top',\n    formatLegendPositionBottom: 'Bottom',\n    formatLegendPositionLeft: 'Left',\n    formatLegendPositionRight: 'Right',\n    formatCategoryAxis: 'Category Axis',\n    formatXAxis: 'X Axis',\n    formatCategoryAxisTitle: 'Title',\n    formatCategoryAxisTitlePlaceholder: 'Axis Title',\n    formatCategoryAxisTitleFont: 'Font',\n    formatCategoryAxisTitleFontPlaceholder: '(inherited font)',\n    formatCategoryAxisTitleSize: 'Size',\n    formatCategoryAxisTitleSizePlaceholder: 'px',\n    formatCategoryAxisTitleColor: 'Color',\n    formatCategoryAxisLabels: 'Labels',\n    formatCategoryAxisLabelsFont: 'Font',\n    formatCategoryAxisLabelsFontPlaceholder: '(inherited font)',\n    formatCategoryAxisLabelsSize: 'Size',\n    formatCategoryAxisLabelsSizePlaceholder: 'px',\n    formatCategoryAxisLabelsColor: 'Color',\n    formatCategoryAxisLabelsRotation: 'Rotation',\n    formatCategoryAxisLabelsRotationAuto: 'Auto',\n    formatCategoryAxisLabelsReverseOrder: 'Reverse Order',\n    formatValueAxis: 'Value Axis',\n    formatYAxis: 'Y Axis',\n    formatValueAxisTitle: 'Title',\n    formatValueAxisTitlePlaceholder: 'Axis Title',\n    formatValueAxisTitleFont: 'Font',\n    formatValueAxisTitleFontPlaceholder: '(inherited font)',\n    formatValueAxisTitleSize: 'Size',\n    formatValueAxisTitleSizePlaceholder: 'px',\n    formatValueAxisTitleColor: 'Color',\n    formatValueAxisLabels: 'Labels',\n    formatValueAxisLabelsFormat: 'Label Format',\n    formatValueAxisLabelsFormatText: 'Text',\n    formatValueAxisLabelsFormatNumber: 'Number',\n    formatValueAxisLabelsFormatCurrency: 'Currency',\n    formatValueAxisLabelsFormatPercent: 'Percent',\n    formatValueAxisLabelsFont: 'Font',\n    formatValueAxisLabelsFontPlaceholder: '(inherited font)',\n    formatValueAxisLabelsSize: 'Size',\n    formatValueAxisLabelsSizePlaceholder: 'px',\n    formatValueAxisLabelsColor: 'Color',\n    formatValueAxisLabelsRotation: 'Rotation',\n    formatValueAxisLabelsRotationAuto: 'Auto'\n});\n","import { AREA, LINE } from '../constants';\nimport { INHERIT } from '../../common/constants';\n\nvar BAR_GAP = 1.5;\nvar BAR_SPACING = 0.4;\nvar BLACK = '#000';\nvar SANS = 'Arial, Helvetica, sans-serif';\nvar SANS11 = \"11px \" + SANS;\nvar SANS12 = '12px ' + SANS;\nvar SANS16 = '16px ' + SANS;\nvar TRANSPARENT = 'transparent';\nvar WHITE = '#fff';\n\nvar lineSeriesLegendItem = {\n    type: LINE\n};\n\nvar areaSeriesLegendItem = {\n    type: AREA\n};\n\nvar areaNoMarkersSeriesLegendItem = Object.assign({}, areaSeriesLegendItem,\n    {markers: {\n        visible: false\n    },\n    highlight: {\n        visible: false\n    }});\n\nvar notes = function () { return ({\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    legendItem: areaNoMarkersSeriesLegendItem,\n    visible: true\n}); };\n\nvar axisDefaults = function () { return ({\n    labels: {\n        font: SANS12\n    },\n    notes: notes(),\n    title: {\n        font: SANS16,\n        margin: 5\n    }\n}); };\n\nvar areaSeries = function () { return ({\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    legendItem: areaSeriesLegendItem,\n    opacity: 0.4\n}); };\n\nvar rangeAreaSeries = function () { return ({\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    legendItem: areaSeriesLegendItem,\n    opacity: 0.4\n}); };\n\nvar barSeries = function () { return ({\n    gap: BAR_GAP,\n    spacing: BAR_SPACING,\n    legendItem: areaNoMarkersSeriesLegendItem,\n}); };\n\nvar boxPlotSeries = function () { return ({\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    legendItem: areaNoMarkersSeriesLegendItem,\n}); };\n\nvar bubbleSeries = function () { return ({\n    border: {\n        width: 0\n    },\n    labels: {\n        background: TRANSPARENT\n    },\n    legendItem: areaNoMarkersSeriesLegendItem,\n    opacity: 0.6\n}); };\n\nvar bulletSeries = function () { return ({\n    gap: BAR_GAP,\n    spacing: BAR_SPACING,\n    target: {\n        color: \"#ff0000\"\n    },\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar candlestickSeries = function () { return ({\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    legendItem: areaNoMarkersSeriesLegendItem,\n    spacing: 0.3\n}); };\n\nvar columnSeries = function () { return ({\n    gap: BAR_GAP,\n    spacing: BAR_SPACING,\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar radarColumnSeries = function () { return ({\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar polarScatterSeries = function () { return ({\n    legendItem: lineSeriesLegendItem\n}); };\n\nvar scatterSeries = function () { return ({\n    legendItem: lineSeriesLegendItem\n}); };\n\nvar donutSeries = function () { return ({\n    margin: 1,\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar lineSeries = function () { return ({\n    width: 2,\n    legendItem: lineSeriesLegendItem\n}); };\n\nvar ohlcSeries = function () { return ({\n    gap: 1,\n    highlight: {\n        line: {\n            opacity: 1,\n            width: 3\n        }\n    },\n    line: {\n        width: 1\n    },\n    legendItem: areaNoMarkersSeriesLegendItem,\n    spacing: 0.3\n}); };\n\nvar radarAreaSeries = function () { return ({\n    line: {\n        opacity: 1,\n        width: 0\n    },\n    markers: {\n        size: 6,\n        visible: false\n    },\n    legendItem: areaSeriesLegendItem,\n    opacity: 0.5\n}); };\n\nvar radarLineSeries = function () { return ({\n    markers: {\n        visible: false\n    },\n    legendItem: lineSeriesLegendItem,\n    width: 2\n}); };\n\nvar rangeBarSeries = function () { return ({\n    gap: BAR_GAP,\n    spacing: BAR_SPACING,\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar rangeColumnSeries = function () { return ({\n    gap: BAR_GAP,\n    spacing: BAR_SPACING,\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar scatterLineSeries = function () { return ({\n    width: 1,\n    legendItem: lineSeriesLegendItem\n}); };\n\nvar waterfallSeries = function () { return ({\n    gap: 0.5,\n    line: {\n        color: BLACK,\n        width: 1\n    },\n    legendItem: areaNoMarkersSeriesLegendItem,\n    spacing: BAR_SPACING\n}); };\n\nvar pieSeries = function () { return ({\n    labels: {\n        background: '',\n        color: '',\n        padding: {\n            top: 5,\n            bottom: 5,\n            left: 7,\n            right: 7\n        }\n    },\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar funnelSeries = function () { return ({\n    labels: {\n        background: '',\n        color: '',\n        padding: {\n            top: 5,\n            bottom: 5,\n            left: 7,\n            right: 7\n        }\n    },\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar pyramidSeries = funnelSeries;\n\nvar heatmapSeries = function () { return ({\n    labels: {\n        color: '',\n        background: TRANSPARENT,\n        visible: true\n    },\n    highlight: {\n        border: {\n            width: 0\n        }\n    },\n    legendItem: areaNoMarkersSeriesLegendItem\n}); };\n\nvar trendlineSeriesDefaults = function (options) { return Object.assign({\n    color: INHERIT,\n    trendline: {},\n    markers: {\n        visible: false\n    },\n    width: 1,\n    dashType: 'longDash',\n    legendItem: lineSeriesLegendItem\n}, options); };\n\nvar seriesDefaults = function (options) { return ({\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    pyramid: pyramidSeries(),\n    horizontalWaterfall: waterfallSeries(),\n    line: lineSeries(),\n    notes: notes(),\n    ohlc: ohlcSeries(),\n    radarArea: radarAreaSeries(),\n    radarLine: radarLineSeries(),\n    radarColumn: radarColumnSeries(),\n    polarArea: radarAreaSeries(),\n    polarLine: radarLineSeries(),\n    polarScatter: polarScatterSeries(),\n    rangeBar: rangeBarSeries(),\n    rangeColumn: rangeColumnSeries(),\n    scatter: scatterSeries(),\n    scatterLine: scatterLineSeries(),\n    verticalArea: areaSeries(),\n    verticalBoxPlot: boxPlotSeries(),\n    verticalBullet: bulletSeries(),\n    verticalLine: lineSeries(),\n    waterfall: waterfallSeries(),\n    linearTrendline: trendlineSeriesDefaults(),\n    exponentialTrendline: trendlineSeriesDefaults({ style: 'smooth' }),\n    logarithmicTrendline: trendlineSeriesDefaults({ style: 'smooth' }),\n    polynomialTrendline: trendlineSeriesDefaults({ style: 'smooth' }),\n    powerTrendline: trendlineSeriesDefaults({ style: 'smooth' }),\n    movingAverageTrendline: trendlineSeriesDefaults()\n}); };\n\nvar title = function () { return ({\n    font: SANS16\n}); };\n\nvar subtitle = function () { return ({\n    font: SANS12\n}); };\n\nvar legend = function () { return ({\n    labels: {\n        font: SANS12\n    }\n}); };\n\nexport var baseTheme = function (options) {\n    if ( options === void 0 ) options = {};\n\n    return ({\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    subtitle: subtitle(),\n    legend: legend()\n});\n};\n\n","import { getWizardDataFromDataRows } from './chart-wizard/get-wizard-data-from-data-rows';\nimport { ActionTypes, createInitialState, createState, fontNames, fontSizes, isCategorical, mergeStates, parseFont, updateState } from './chart-wizard/state';\nimport {\n    messages\n} from './chart-wizard/messages';\n\nexport var ChartWizardCommon = Object.freeze({\n    getWizardDataFromDataRows: getWizardDataFromDataRows,\n    ActionTypes: ActionTypes,\n    createInitialState: createInitialState,\n    createState: createState,\n    fontNames: fontNames,\n    fontSizes: fontSizes,\n    isCategorical: isCategorical,\n    mergeStates: mergeStates,\n    parseFont: parseFont,\n    updateState: updateState,\n    messages: messages\n});\n","import getter from './../common/getter';\n\nexport function getWizardDataFromDataRows(dataRows) {\n    var result = [];\n\n    dataRows.forEach(function (item) {\n        var dataItem = item.dataItem;\n        var dataColumns = item.dataColumns;\n\n        var row = [];\n        dataColumns.forEach(function (column) {\n            row.push({\n                field: column.title || column.field,\n                value: getter(column.field)(dataItem)\n            });\n        });\n\n        result.push(row);\n    });\n\n    return result;\n}\n","var SERIES_COLORS = 30;\nvar seriesVar = '--kendo-chart-series-';\nvar elementStyles = function (element) { return element.ownerDocument.defaultView.getComputedStyle(element); };\nvar cache = {};\n\nvar toColor = function (colorMix, element) {\n    if (cache[colorMix]) {\n        return cache[colorMix];\n    }\n\n    var curColor = element.style.color;\n    element.style.color = colorMix;\n    var color = elementStyles(element).color;\n    element.style.color = curColor;\n\n    cache[colorMix] = color;\n\n    return color;\n};\n\nvar getProp = function (element, prop) {\n    var value = elementStyles(element).getPropertyValue(prop);\n    if (/^color-mix/i.test(value)) {\n        value = toColor(value, element);\n    }\n    return value;\n};\n\nvar getNumberProp = function (element, prop) { return parseFloat(elementStyles(element).getPropertyValue(prop)); };\n\nvar getFont = function (element, weightProp, sizeProp, familyProp) {\n    var styles = elementStyles(element);\n    return [styles.getPropertyValue(weightProp), styles.getPropertyValue(sizeProp), styles.getPropertyValue(familyProp) || styles.fontFamily].join(\" \");\n};\n\nvar getSeriesColors = function (element) {\n    var styles = elementStyles(element);\n    var result = [];\n    var count = 1;\n    var color = styles.getPropertyValue((\"\" + seriesVar + count));\n    while (color || count <= SERIES_COLORS) {\n        result.push(color);\n        count++;\n        color = styles.getPropertyValue((\"\" + seriesVar + count));\n    }\n    return result;\n};\n\nvar defaultFont = function (element) { return getFont(element, \"--kendo-font-weight\", '--kendo-chart-font-size', \"--kendo-font-family\"); };\nvar paneTitleFont = function (element) { return getFont(element, \"--kendo-chart-pane-title-font-weight\", '--kendo-chart-pane-title-font-size', \"--kendo-font-family\"); };\nvar normalTextColor = function (element) { return getProp(element, \"--kendo-chart-text\"); };\n\nvar title = function (element) { return ({\n    color: normalTextColor(element),\n    font: getFont(element, \"--kendo-font-weight\", '--kendo-chart-title-font-size', \"--kendo-font-family\"),\n}); };\n\nvar sankeyLegend = function (element) {\n    var textColorNormal = normalTextColor(element);\n    return {\n        labels: {\n            color: textColorNormal,\n            font: defaultFont(element),\n        },\n        title: {\n            color: textColorNormal,\n        }\n    };\n};\n\nvar chartLegend = function (element) {\n    var inactiveColor = getProp(element, \"--kendo-chart-inactive\");\n    return Object.assign({}, {inactiveItems: {\n            labels: {\n                color: inactiveColor,\n            },\n            markers: {\n                color: inactiveColor,\n            },\n        }},\n        sankeyLegend(element));\n};\n\nexport var gaugeTheme = function (element) {\n    var textColorNormal = normalTextColor(element);\n    return {\n        pointer: {\n            color: getProp(element, \"--kendo-chart-gauge-pointer\")\n        },\n        scale: {\n            labels: {\n                color: textColorNormal\n            },\n\n            rangePlaceholderColor: getProp(element, \"--kendo-chart-gauge-track\"),\n\n            minorTicks: {\n                color: textColorNormal\n            },\n\n            majorTicks: {\n                color: textColorNormal\n            },\n\n            line: {\n                color: textColorNormal\n            }\n        }\n    };\n};\n\nexport var sankeyTheme = function (element) { return ({\n    labels: {\n        color: normalTextColor(element),\n        font: defaultFont(element),\n        stroke: {\n            color: getProp(element, \"--kendo-chart-bg\"),\n        },\n    },\n    links: {\n        color: getProp(element, \"--kendo-color-subtle\"),\n    },\n    nodeColors: getSeriesColors(element),\n    title: title(element),\n    legend: sankeyLegend(element),\n}); };\n\nvar notes = function (element) { return ({\n    icon: {\n        background: getProp(element, \"--kendo-chart-notes-bg\"),\n        border: {\n            color: getProp(element, \"--kendo-chart-notes-border\"),\n        },\n    },\n    line: {\n        color: getProp(element, \"--kendo-chart-notes-lines\"),\n    },\n    label: {\n        font: defaultFont(element),\n    },\n}); };\n\nexport var chartTheme = function (element) {\n    var majorLines = getProp(element, \"--kendo-chart-major-lines\");\n    var normalTextColor = getProp(element, \"--kendo-chart-text\");\n    var axisLabelFont = getFont(element, \"--kendo-font-weight\", \"--kendo-chart-label-font-size\", \"--kendo-font-family\");\n    var chartBg = getProp(element, \"--kendo-chart-bg\");\n    var notesProps = notes(element);\n    var areaOpacity = getNumberProp(element, \"--kendo-chart-area-opacity\");\n    var surfaceColor = getProp(element, \"--kendo-color-surface\");\n    var primaryBg = getProp(element, \"--kendo-chart-primary-bg\");\n\n    var boxPlot = function () { return ({\n        downColor: majorLines,\n        mean: {\n            color: surfaceColor,\n        },\n        median: {\n            color: surfaceColor,\n        },\n        whiskers: {\n            color: primaryBg,\n        },\n    }); };\n\n    var waterfall = function () { return ({\n        line: {\n            color: majorLines,\n        },\n    }); };\n\n    var area = function () { return ({\n        opacity: areaOpacity,\n        highlight: {\n            inactiveOpacity: getNumberProp(element, \"--kendo-chart-area-inactive-opacity\"),\n        },\n    }); };\n\n    var line = function () { return ({\n        highlight: {\n            inactiveOpacity: getNumberProp(element, \"--kendo-chart-line-inactive-opacity\"),\n        },\n    }); };\n\n    var bullet = function () { return ({\n        target: {\n            color: normalTextColor,\n        },\n    }); };\n\n    return {\n        axisDefaults: {\n            crosshair: {\n                color: getProp(element, \"--kendo-chart-crosshair-bg\"),\n            },\n            labels: {\n                color: normalTextColor,\n                font: axisLabelFont,\n            },\n            line: {\n                color: majorLines,\n            },\n            majorGridLines: {\n                color: majorLines,\n            },\n            minorGridLines: {\n                color: getProp(element, \"--kendo-chart-minor-lines\"),\n            },\n            notes: structuredClone(notesProps),\n            title: {\n                color: normalTextColor,\n                font: defaultFont(element),\n            }\n        },\n        chartArea: {\n            background: chartBg,\n        },\n        legend: chartLegend(element),\n        seriesColors: getSeriesColors(element),\n        seriesDefaults: {\n            area: area(),\n            verticalArea: area(),\n            radarArea: area(),\n\n            boxPlot: boxPlot(),\n            verticalBoxPlot: boxPlot(),\n\n            bullet: bullet(),\n            verticalBullet: bullet(),\n\n            horizontalWaterfall: waterfall(),\n            waterfall: waterfall(),\n\n            line: line(),\n            verticalLine: line(),\n\n            candlestick: {\n                downColor: normalTextColor,\n                line: {\n                    color: normalTextColor,\n                },\n            },\n            errorBars: {\n                color: getProp(element, \"--kendo-chart-error-bars-bg\"),\n            },\n            icon: {\n                border: {\n                    color: majorLines,\n                },\n            },\n            labels: {\n                background: chartBg,\n                color: normalTextColor,\n                font: axisLabelFont,\n                opacity: areaOpacity,\n            },\n            notes: structuredClone(notesProps),\n        },\n        subtitle: {\n            color: normalTextColor,\n            font: paneTitleFont(element),\n        },\n        title: title(element),\n        paneDefaults: {\n            title: {\n                font: paneTitleFont(element),\n            }\n        }\n    };\n};\n"],"names":["ARC","ARROW_UP","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","ARIA_ACTIVE_DESCENDANT","BLACK","BOTTOM","CENTER","CIRCLE","CROSS","DATE","DEFAULT_FONT","DEFAULT_PRECISION","END","FORMAT_REGEX","HEIGHT","INSIDE","INHERIT","LEFT","MAX_VALUE","Number","MIN_VALUE","NONE","OBJECT","OUTSIDE","RIGHT","ROUNDED_RECT","START","STRING","TOP","VALUE","WHITE","WIDTH","X","Y","POINTER","HORIZONTAL","isArray","value","Array","addClass","element","classes","classArray","idx","length","className","indexOf","SPACE_REGEX","removeClass","replace","alignPathToPixel","path","offset","options","stroke","drawing","util","defined","width","i","segments","anchor","round","translate","clockwise","angle1","angle2","x","y","isNumber","isNaN","isString","convertableToNumber","isFinite","cycleUp","index","count","cycleDown","result","cycleIndex","isFunction","fn","UNDEFINED","deepExtendOne","destination","source","property","propValue","propType","propInit","constructor","Date","getTime","clone","destProp","deepExtend","arguments$1","arguments","isObject","styleValue","SIZE_STYLES_REGEX","isSizeField","field","test","elementStyles","styles","stylesArray","style","window","getComputedStyle","parseFloat","field$1","getSpacing","defaultSpacing","spacing","top","right","bottom","left","current","compile","template","TemplateService","register","userImplementation","getTemplate","content","ariaTemplate","ariaContent","FIELD_REGEX","getterCache","getter","fields","match","indexAccessor","push","obj","grep","array","callback","hasClasses","classNames","names","split","HashMap","this","_map","Map","prototype","get","key","set","inArray","interpolateValue","start","end","progress","TRIGGER","InstanceObserver","observer","handlers","handlerMap","trigger","name","args","isDefaultPrevented","callObserver","fnName","len","apply","requiresHandlers","map","browser","support","mousewheelDelta","e","delta","wheelDelta","webkit","Math","max","devicePixelRatio","detail","ceil","floor","ref","append","bindEvents","deg","elementOffset","elementSize","eventCoordinates","eventElement","hashKey","last","limitValue","objectKey","rad","unbindEvents","valueOrDefault","FontLoader","fetchFonts","fonts","state","depth","document","Object","keys","forEach","loadFonts","promises","font","load","logToConsole","Promise","all","then","preloadFonts","setDefaultOptions","type","proto","KI_PREFFIX","KSVG_PREFFIX","HTMLBaseIcon","wrapper","addClasses","html","outerHTML","size","themeColor","flip","iconClass","stylingOptions","HTMLFontIcon","call","__proto__","create","currentIconClass","find","startsWith","icon","_className","HTMLSvgIcon","innerHTML","iconNameMatch","toUpperCase","svgIcons","setAttribute","toString","isPlainObject","svgElement","createElementNS","viewBox","appendChild","ICON_TYPES","renderIcon","iconElement","iconOptions","HTMLElement","createElement","sparseArrayLimits","arr","min","undefined","predicate","item","Matrix","geometry","matrixRegexp","transformMatrix","transform","unit","matrixString","members","Function","bind","concat","parseMatrix","color","Color","isDark","DELETED","LegacySet","values","_index","_values","slice","prototypeAccessors","configurable","filter","has","add","delete","clear","defineProperties","SetWrapper","_set","Set","prototypeAccessors$1","from","createHashSet","supported","supportsSet","defaultErrorHandler","error","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","UP","DOWN","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","hasOwnProperty","height","data","m","row","col","line","each","f","includeEmpty","val","el","transpose","n","a","j","multiply","b","s","va","vb","inverse","augment","loop","k","imax","pos","v","argmax","tmp","returned","i$1","j$1","k$1","i$2","j$2","ret","eventMap","down","move","up","cancel","queryEventMap","applyEventMap","events","guid","random","id","elementEventHandlers","WeakMap","ID","Symbol","on","handler","useCapture","eventNames","eventName","event","eventFilter","eventHandler","attachedHandler","closestMatchingTarget","target","closest","currentTarget","defineProperty","eventHandlers","addEventListener","Boolean","addEventListeners","off","handlerId","removeEventListener","removeEventListeners","getSupportedFeatures","os","ua","agentRxs","wp","fire","android","iphone","ipad","playbook","windows","tizen","sailfish","osRxs","ios","flat","agent","navigator","device","testRegex","detectOS","userAgent","mobileOS","regexes","dflt","regex","noop","now","FUNCTION","preventDefault","_defaultPrevented","Class","Observable","_events","destroy","unbind","one","original","that","handlersIsFunction","first","eventName$1","unshift","eventArgs","sender","splice","_setEvents","this$1","extend","assign","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","getTouches","touches","originalEvent","api","location","pointerId","TouchAxis","axis","invalidZeroEvents","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","client","screen","Touch","userEvents","touchInfo","threshold","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","setTimeout","_hold","minHold","_trigger","_tap","_clickTimeout","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","clearTimeout","activeTouches","activeTouchIndex","skip","isMoved","startTime","touch","notify","xDelta","yDelta","sqrt","withEachUpEvent","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","surface","stopPropagation","pressed","_surfaceMoveHandler","_move","_surfaceEndHandler","_end","_elementStartHandler","touchAction","preventDragEvent","_elementDragStartHandler","_elementSelectHandler","_select","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","_destroyed","_disposeAll","capture","_isMultiTouch","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","touchDelta","_apiCall","_maxTouchesReached","pop","which","eventTouches","eventTouch","_eachTouch","methodName","matchingTouch","dict","hasPointerCapture","setPointerCapture","pageX","pageY","clientX","clientY","defaultThreshold","autoMajorUnit","diff","abs","scale","pow","log","relativeValue","Point","equals","point","rotate","degrees","theta","cosT","cos","sinT","sin","cx","cy","distanceTo","onCircle","angle","radius","radians","Box","box","wrap","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","expand","pad","padding","unpad","containsPoint","points","getHash","join","overlaps","rotation","r1","rotatePoint","r2","r3","r4","toRect","geom","Rect","hasSize","align","alignment","c1","c2","sizeFunc","Ring","innerRadius","startAngle","middle","setRadius","newRadius","radianAngle","ax","ay","adjacentBox","sector","midAndle","midPoint","hw","hh","sa","ca","p","endAngle","vector","startPoint","startVector","endPoint","endVector","dist","getBBox","angles","allAngles","sort","numericComparer","startAngleIndex","endAngleIndex","Sector","ShapeBuilder","createRing","arc","Arc","radiusX","radiusY","draw","Path","fromArc","close","innerEnd","pointAt","lineTo","ChartElement","children","initUserOptions","reflow","currentChild","animation","getRoot","parent","getSender","service","getService","chartService","translateChildren","childrenCount","renderVisual","visible","createVisual","addVisual","renderChildren","createAnimation","renderComplete","visual","chartElement","appendVisual","Group","zIndex","Animation","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","sibling","insert","traverse","child","matched","hasHighlight","highlight","createHighlight","toggleHighlight","show","opacity","customVisual","_highlight","highlightOptions","fill","highlightVisualArgs","series","dataItem","category","percentage","runningTotal","total","toggleFocusHighlight","focusHighlight","_focusHighlight","rootBackground","background","highlightColor","autoTextColor","focusHighlightOptions","border","createFocusHighlight","createGradientOverlay","gradientOptions","overlay","createGradient","closed","elements","supportsPointInactiveOpacity","patternMap","dots","dotsPattern","verticalStripes","verticalStripesPattern","crosshatch","crosshatchPattern","diagonalStripes","diagonalStripesPattern","grid","gridPattern","createPatternFill","patternOptions","evaluatePattern","pattern","BoxElement","margin","shrinkToFit","hasSetSize","borderWidth","reflowPaddingBox","vAlign","paddingBox","contentBox","hasBox","fromRect","visualStyle","dashType","cursor","addAccessibilityAttributesToVisual","accessibilityOptions","role","ariaLabel","ariaRoleDescription","ariaChecked","ShapeElement","pointData","getElement","halfWidth","halfHeight","Circle","fromPoints","MultiPath","moveTo","rect","borderRadius","setCornerRadius","visualOptions","RADIAL","glass","stops","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","boxDiff","r","c","d","g","h","boxes","RootElement","rootOptions","parseInt","gradients","currentBox","createBackground","drawingGradient","hashCode","gradient","GRADIENTS","LinearGradient","usedSpace","currentStops","currentStop","innerRadialStops","RadialGradient","cleanGradients","_observers","FloatElement","_initDirection","vertical","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","ref$1","groupOptions","groups","groupsSize","maxGroupElementsSize","groupsCount","groupsStart","alignStart","groupStart","groupIdx","group","groupElements","elementStart","groupElementsCount","groupElementStart","groupSize","elementBox","maxSize","groupElementsSize","DrawingText","Text","measureText","baseline","paintOrder","topLeft","rectToBox","origin","bottomRight","ROWS_SPLIT_REGEX","TextBox","_initContainer","_autoReflow","rows","String","floatElement","textOptions","container","rowIdx","text","trim","visualFn","_boxReflow","visualBox","visualContext","clippedBBox","normalBox","rotatedBox","rotationTransform","context","getDefaultVisual","boxCenter","Title","_textBox","position","buildTitle","defaultOptions","title","titleOptions","orderTitles","titles","items","collapseVerticalMargins","reverse","prevBox","AxisLabel","format","culture","click","widget","alignRotation","bbox","matrix","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","transformCopy","topRight","bottomLeft","alignEnd","distanceLeft","distanceRight","alignCenter","Note","render","hide","label","childAlias","noteTemplate","auto","aliasFor","marker","wrapperBox","lineStart","linePoints","createLine","defaultVisual","over","out","defaultImplementation","parseDate","firstDay","IntlService","staticAccessors","implementation","FORMAT_REPLACE_REGEX","FormatService","intlService","_intlService","intl","formatString","localeAuto","locale","placeholderFormat","substring","ChartService","chart","rtl","isPannable","pannable","lock","DomEventsBuilder","createAxisTick","tickOptions","tickX","tickY","tick","createAxisGridLine","gridLine","lineEnd","Axis","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","normalizeLabelRotation","labelOptions","step","clearLabels","autoRotateLabels","range","labelContext","createAxisLabel","clearTitle","lineBox","mirror","axisX","axisY","lineWidth","visualSize","notes","parseNoteValue","note","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","majorUnit","tickLineOptions","tickPositions","skipUnit","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","sizeFn","titleSize","space","boxSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","labelsBetweenTicks","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelBox","labelOffset","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","labelAngle","idx$1","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","justified","prepareUserOptions","axisCrossingValue","MILLISECONDS","SECONDS","MINUTES","HOURS","DAYS","WEEKS","MONTHS","YEARS","TIME_PER_SECOND","TIME_PER_MINUTE","TIME_PER_HOUR","TIME_PER_DAY","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","TIME_PER_UNIT","absoluteDateDiff","getTimezoneOffset","addTicks","date","ticks","toDate","adjustDST","hours","getHours","setHours","addDuration","dateValue","weekStartDay","getFullYear","getMonth","daysToSubtract","day","getDay","startOfWeek","getDate","roundedDate","setMinutes","tzDiff","addHours","getSeconds","setSeconds","getMilliseconds","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","dateIndex","baseUnitStep","startDate","duration","parseDates","dates","CategoryAxis","_ticks","categoriesHash","copy","categories","srcCategories","definedMin","definedMax","rangeIndices","totalRange","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","startValue","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","scaleRange","limitedRangeIndices","minDelta","maxDelta","zoomRange","totalMin","totalMax","dataItems","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","totalCount","totalLimit","totalRangeIndices","indexCategories","COORDINATE_LIMIT","DateLabelFormats","milliseconds","seconds","minutes","days","weeks","months","years","BASE_UNITS","FIT","categoryRange","clearCache","_range","EmptyDateRange","displayIndices","displayRange","valueIndex","valuesCount","dateAt","DateRange","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","next","valueEnd","displayEnd","autoBaseUnit","startUnit","startStep","unitSteps","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","autoUnitIx","units","totalUnits","shift","initUnit","toLowerCase","lastCategory","minDiff","categoryIx","defaultBaseUnit","_indices","minIdx","maxIdx","upper","roundedStep","DateCategoryAxis","dataRange","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","safeOptions","forecast","_forecast","before","after","divisionOptions","dataRangeOptions","divisionRange","rangeLabels","isEmpty","totalLimits","panRange","datesRange","indicesRange","fit","autoBaseUnitStep","maxDiff","rangeDiff","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","position$1","autoRotateRangeLabels","hideOverlappingLabels","firstRangeLabel","clip","lastRangeLabel","rangeLabel","unitFormat","dateFormats","createLabel","rotateLabel","dateRange","limitCoordinate","MIN_VALUE_RANGE","NumericAxis","autoOptions","narrowRange","autoMin","narrow","axisMin","autoAxisMin","autoMax","axisMax","autoAxisMax","roundToMajorUnit","remainderClose","autoAxisOptions","totalOptions","totalAxisOptions","userOptions","userSetMin","userSetMax","clearNullValues","userSetLimits","axisOptions","totalMajorUnit","getDivisions","stepValue","divisions","skipStep","getValue","endValue","isValidRange","divisor","ratio","remainder","DateValueAxis","timeUnits","baseUnitTime","userMajorUnit","actualUnits","unitsToAdd","head","tail","applyDefaults","axisCrossingValues","dir","limittedRange","LogarithmicAxis","base","logMaxRemainder","throwNegativeValuesError","initRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","power","minorOptions","_minorIntervalOptions","minorStep","info","Error","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","intervalAngle","RadarCategoryAxis","reflowLabels","measureBox","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","interval","minorAngle","minorRadius","band","plotBandSlot","ring","totalDivs","slotAngle","fromValue","slotStart","GridLinesMixin","PolarAxis","instanceOptions","atan2","PI","RadarNumericAxisMixin","polarAxis","bandStyle","shape","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","angularDistance","gamma","beta","axisType","RadarNumericAxis","minorSkipStep","RadarLogarithmicAxis","numberSign","CurveProcessor","process","dataPoints","removeDuplicates","initialControlPoint","lastControlPoint","p0","Segment","tangent","controlOut","firstControlPoint","secondControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","cp1","controlPoints$2","tangent$2","invertAxis","lineFunction","calculateFunction","isLine","xField","yField","restrict","switchOrientation","monotonic","isMonotonicByField","oldXField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","ChartAxis","_axis","findAxisByName","ChartPane","chartsVisual","chartContainer","_pane","ChartPlotArea","_plotArea","backgroundVisual","_bgVisual","countNumbers","Aggregates","sum","sumOrNull","avg","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","seriesTypes","valueFields","otherFields","_makeValue","canonicalFields","bindPoint","pointIx","fieldData","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","initialValue","object","srcFields","fieldName","srcFieldName","sourceFieldName","percentRegex","standardDeviationRegex","RegExp","ErrorRangeCalculator","errorValue","initGlobalRanges","deviationMatch","exec","valueGetter","createValueGetter","average","getAverage","deviation","getStandardDeviation","multiple","errorRange","low","high","globalRange","standardError","getStandardError","binder","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","INITIAL_ANIMATION_DURATION","FADEIN","BORDER_BRIGHTNESS","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","PYRAMID","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","TRENDLINE_EXPONENTIAL","TRENDLINE_LINEAR","TRENDLINE_LOGARITHMIC","TRENDLINE_MOVING_AVERAGE","TRENDLINE_POLYNOMIAL","TRENDLINE_POWER","TRENDLINE_SERIES","LEGEND_ITEM_CLICK","SERIES_CLICK","SERIES_HOVER","SERIES_OVER","SERIES_LEAVE","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT_END","SHOW_TOOLTIP","HIDE_TOOLTIP","CHART_POINT_ROLE","CHART_POINT_CLASSNAME","CHART_POINT_ROLE_DESCRIPTION","LOGARITHMIC","CATEGORY","INSIDE_END","OUTSIDE_END","MOUSEWHEEL","DRILLDOWN_FIELD","PATTERN_FIELD","ErrorBarBase","isVertical","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","delay","CategoricalErrorBar","seriesValueAxis","anyHasZIndex","appendIfNotNull","areNumbers","segmentVisible","pointVisibility","bindSegments","seriesCount","equalsIgnoreCase","evalOptions","dryRun","defaults","needsEval","excluded","filterSeriesByType","types","currentSeries","dateCache","parseDateCategory","hasGradientOverlay","hasValue","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","AREA_REGEX","findNext","pointHasValue","outPoint","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","minPoint","maxPoint","missingValues","stack","seriesMissingValues","_outOfRangeMinPoint","_outOfRangeMaxPoint","CategoricalChart","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","seriesIx","pointType","invertAxes","plotValue","isStacked100","otherValues","categorySum","other","otherStack","plotRange","isStacked","positive","prevValue","isStackedBar","defaultStack","isNonGroupStack","otherValue","categoryAxisCrossingValue","stackLimits","axisName","stackName","pIx","updateStackRange","chartSeries","limitsCache","limits","errorTotals","negative","addErrorBar","errorBars","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","updateRange","errorBar","createPoint","owner","noteText","evalPointOptions","_defaults","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","limitedSlot","axisIndex","_outOfRangeCallback","seriesIx$1","currentCategory","seriesIx$2","outOfRangePoint","formatPointValue","PointEventsMixin","hover","createNote","LinePoint","tooltipTracking","_id","markers","_rendered","createMarker","createLabelElement","getLabelText","formatValue","getAriaLabelText","getAriaTemplate","markerBorder","brightness","toHex","accessibility","markerBox","_childBox","childBox","reflowLabel","noteTargetBox","defaultColor","shadow","highlightVisual","halfSize","markerOptions","tooltipAnchor","clipBox","verticalAlign","horizontalAlign","horizontal","overlapsBox","unclipElements","focusVisual","clearFocusFromVisual","getIndex","tabIndex","NoteMixin","LineSegment","toGeometryPoints","segmentVisual","coords","getNearestPoint","StepLineMixin","calculateStepPoints","stepAxis","stepDir","previousPoint","toGeometryPoint","stepPoint","lintPoint","StepLineSegment","SplineSegment","curve","LineChartMixin","renderSegments","lastSegment","_segments","sortedPoints","sortPoints","pointCount","createSegment","_addSegment","segment","nearestPoint","allPoints","nearestPointDistance","pointDistance","ClipAnimation","superclass","setup","_setEnd","suspend","setX","resume","AnimationFactory","root","transitions","clipPath","_setChildrenAnimation","animationPoints","LineChart","ClipAnimationMixin","AreaSegment","prevSegment","stackPoints","createFill","createStroke","lineCap","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","StepAreaSegment","SplineAreaSegment","curveProcessor","controlIn","AreaChart","previousSegment","_gapStackPoints","_stackPoints","stackPoint","startIdx","endIdx","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","AxisGroupRangeTracker","axisRanges","update","chartAxisRanges","chartRange","reset","query","BarLabel","textBox","boxesDiff","alignToClipBox","parentBox","Bar","rectVisual","createRect","strokeOpacity","getBorderColor","lineJoin","baseColor","_brightness","borderColor","AccessibilityAttributesMixin","forEachReverse","ClusterLayout","gap","slots","slotSize","StackWrap","positionAxis","BarChart","clusterType","stackType","stackOrDefault","negativeColor","cluster","getStackWrap","stackWrap","stackGroup","wraps","_stackGroup","zeroSlot","stackAxis","childrenLength","_setAnimationOptions","pointVisual","Candlestick","ocSlot","open","lhSlot","realBody","mid","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","body","drawLines","lineStyle","normalColor","meanPoints","medianPoints","whiskerPoints","tooltip","CandlestickChart","splitValue","downColor","parts","BoxPlot","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","lower","reflowWhiskerSlot","medianSlot","median","mean","meanSlot","calcMeanPoints","calcWhiskerPoints","calcMedianPoints","renderOutliers","outliers","outerFence","outlierValue","markersBorder","extremes","reflowOutliers","whiskers","VerticalBoxPlot","BoxPlotChart","filterOutliers","ScatterErrorBar","seriesAxes","ScatterChart","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","namedYAxes","Bubble","highlightGroup","BubbleChart","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minR","minSize","maxR","minArea","areaRatio","area","Target","Bullet","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","BulletChart","seriesItem","wrapData","bulletOptions","bullet","BaseTooltip","getStyle","pointColor","backgroundColor","paddingTop","paddingBottom","paddingLeft","paddingRight","tooltipOptions","CrosshairTooltip","crosshair","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","ref_options","Crosshair","moveLine","getBox","dim","axisLineBox","currentAxis","ChartContainer","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","Pane","appendAxis","appendAxisAt","appendChart","empty","removeAxis","removeChart","allAxes","vGridLines","hGridLines","refresh","notifyRender","axisValueField","length$1","axis$1","lineBox$1","paneIndex","visiblePoint","PlotAreaBase","initSeries","legend","crosshairs","originalOptions","originalSeries","_bindCache","createPanes","createCrosshairs","cached","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","crossingValues","valuesToAdd","defaultValue","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","alignAxes","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","_overlap","_mirrored","paneYAnchor","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","shrinkAxisWidth","axisGroupBox","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","offsetX","paneBox","offsetY","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","allPaneAxes","chartPane","remainingHeight","autoHeightPanes","percents","currentPane$1","currentPane$2","backgroundBox","axesCount","axisA","axisB","chartsBoxes","addBackgroundPaths","multipath","paths","backgroundContainsPoint","bg","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsByPointIndex","pointIndex","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","onAxis","edge","isTrendline","trendlineFactory","createTrendlineSeries","modifiedSeries","forSeries","seriesByName","for","trendlineSeries","getFirstPoint","getPointBelow","_getNextPoint","_pointsByVertical","getPointAbove","getPointToTheRight","_pointsByHorizontal","getPointToTheLeft","getPointsFunc","increment","nextIndex","loopPoints","direction","at","basePoint","isSingleAxis","some","reduce","acc","PlotAreaEventsMixin","_dispatchEvent","SeriesAggregator","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","aggregatePoints","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","setValue","parentObj","DefaultAggregates","aggregates","seriesType","RangeBar","fromOptions","toOptions","labelFrom","labelTo","RangeBarChart","plotLimits","RangeLinePoint","AUTO","RangeAreaPoint","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","RangeAreaSegment","toPoints","fromSegments","toPath","fromPath","SplineRangeAreaSegment","createCurveSegments","StepRangeAreaSegment","RangeAreaChart","fromSlot","toSlot","OHLCPoint","oPoints","cPoints","lhPoints","oSlot","cSlot","OHLCChart","WaterfallSegment","WaterfallChart","createSegments","totalCategories","summary","prevPoint","registry","impl","sourceValues","slope","intercept","xy","xMin","xMax","every","valueMapper","currentRange","seriesValues","checkAllPositive","calculateSlope","exp","getTrendlineData","getData","categoryField","period","averagePoints","lastValue","trendline","calculateMovingAverage","calculatePoints","order","coefficients","Xt","B","linearRegression","calculatePolynomial","exponentialTrendline","linearTrendline","logarithmicTrendline","movingAverageTrendline","polynomialTrendline","powerTrendline","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","namedCategoryAxes","valueAxisRangeTracker","_seriesPointsCache","_currentPointsCache","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","trendlineRegistry","filterSeries","trendlineAggregateForecast","srcSeries","aggregateSeries","paneSeries","visibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","processedSeries","axisPane","dataLength","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","dateAxis","srcData","aggregator","categoryItem","categoryIdx","categoriesToAdd","defaultPaneName","stackableChartOptions","anyStackedSeries","categoryAxes","unique","axisSeries","groupSeries","firstSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","aggregatedAxis","definitions","isJustified","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","eventType","_eventCoordinates","pointPane","updateAxisOptions","_siblingsBySeriesIndex","_siblingsByPointIndex","siblings","_getSeriesCompareFn","_isInStackedSeries","sortableSeries","stackableSeries","targetOptions","Highlight","_points","arrayPoints","togglePointHighlight","toggleHandler","toggle","isHighlighted","acceptKey","mouseKey","ctrlKey","shiftKey","altKey","toChartAxisRanges","ranges","Pannable","_active","_panAxes","updatedAxes","ZoomSelection","marquee","_marquee","marqueeColor","removeElement","parentNode","removeChild","setStyles","zoomPane","_zoomPane","_elementOffset","_zoomPaneClipBox","_selectionPosition","selectionPosition","_updateAxisRanges","zoom","MousewheelZoom","rate","updateRanges","LegendLayout","Layout","lineSpacing","orientation","alignItems","legendItem","DEFAULT_MARKER_SIZE","LegendItemMarker","markerHighlightOptions","MarkerLineArea","LegendItemLine","centerY","createHighlightLine","createHighlightMarker","highlightLine","highlightMarker","LegendItemSquare","LegendItem","createContainer","markerWrap","createMarkerArea","_marker","_createMarker","_createLine","_createMarkerLine","_createSquare","_highlightOptions","_line","_markerLineArea","_reduceSize","prop","factor","structuredClone","_square","_highlightMarkers","_toggleHighlight","_restoreMarkers","eventSink","_itemOverlay","_legendItemHover","_unsetActivePoint","CUSTOM","Legend","createContainers","createLegendTitle","createItems","userAlign","hasTitle","itemsContainer","innerElement","markersOptions","itemOptions","hasItems","getItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","PlotAreaFactory","_registry","entry","trendlines","createDiv","closestHandle","Selection","_dateAxis","initOptions","offsetHeight","createElements","onPane","selection","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","cssText","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","tap","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","_pointInPane","modelCoords","_toModelCoordinates","handle","bodyRect","getBoundingClientRect","inBody","moveTarget","oldRange","rightClick","_slot","leftMaskWidth","rightMaskWidth","toValue","zDir","relative","Tooltip","_current","SharedTooltip","tooltipPoints","_slotAnchor","_defaultAnchor","shared","categoryText","categoryFormat","slotCenter","BarChartAnimation","fromScale","abort","scaleX","scaleY","BubbleAnimation","easing","FadeInAnimation","fadeTo","PieAnimation","ScatterLineChart","missingValue","samplingInterval","getScatterTrendlineData","scatterValueGetter","logValueGetter","xValueLimits","scatterRegistry","scatterExponentialTrendline","scatterLinearTrendline","scatterLogarithmicTrendline","scatterMovingAverageTrendline","scatterPolynomialTrendline","scatterPowerTrendline","XYPlotArea","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","createXYAxis","inferredDate","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","xAxesOptions","yAxesOptions","xValues","yValues","currentValue","scatterTrendlineRegistry","PieSegment","labelText","themeLabels","theme","seriesDefaults","animationDelay","labelsOptions","labelsDistance","lp","labelHeight","labelWidth","createSegmentVisual","borderOptions","fallbackFill","userSpace","singleSegment","tooltipAlignment","RAD_30","RAD_60","sine","cosine","PieChartMixin","createLegendItem","legendOptions","pointVisible","legendItems","PieChart","seriesColors","colorsCount","anglePerValue","constantAngle","currentAngle","explode","evalSegmentOptions","segmentOptions","seriesConfigs","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","secondBox","remaining","_takeDistance","amount","available","boxX","labelDistance","boxY","hAlignLabel","connectors","_connectorLines","connectorsColor","connectorLine","centerPoint","sr","crossing","intersection","pointInCircle","autoFit","pieCenter","bboxBottom","reverseValue","originalX","sector_center","t","a1","a2","b1","b2","uat","ub","PiePlotArea","createPieChart","pieChart","DonutSegment","DonutChart","holeSize","totalSize","seriesWithoutSize","currentSeries$1","DonutPlotArea","createDonutChart","donutChart","PolarPlotAreaBase","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","PolarScatterChart","valueRadius","PolarLineChart","SplinePolarAreaSegment","_polarAxisCenter","PolarAreaSegment","centerSegment","PolarAreaChart","_hasMissingValuesGap","xComparer","PolarPlotArea","scatterChart","RadarLineChart","seriesSegments","groupBySeriesIx","isFirstDataPoint","isLastDataPoint","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","slotSector","RadarStackLayout","childSector","RadarBarChart","RadarPlotArea","_hasBarCharts","_isStacked100","chartOptions","FunnelSegment","chartBox","createPath","FunnelChart","labelPadding","dynamicSlopeReflow","totalHeight","firstSegment","maxSegment","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","finalNarrow","dynamicSlope","PyramidChart","FunnelPlotArea","createChart","chartType","minLightnessOffset","parseColor","hsl","toHSL","l","toCss","HeatmapPoint","labelColor","isRoundRect","halfBorderWidth","HeatmapChart","setRange","colorScale","indexX","indexY","xRange","yRange","ref$2","xIndex","yIndex","xIn","yIn","HeatmapPlotArea","bindCategories","createAxisLabels","xCategories","yCategories","createHeatmapChart","xAxisOptions","yAxisOptions","firstCategory","normalizedOffset","axisXItems","_getPointAxisXIndex","targetXValue","compareValues","_getPointAxisYIndex","axisYItems","targetYValue","_getPointAxisIndex","findIndex","axisItem","COLOR","FIRST","MAX","MIN","NOTE_TEXT","errorLow","errorHigh","AXIS_NAMES","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","KEYDOWN","FOCUS","BLUR","NO_DATA_OVERLAY_TOP_CLASS","Chart","themeOptions","observers","addObserver","_initElement","_originalOptions","_theme","_initTheme","_focusState","_initHandlers","_initSurface","fontLoaded","_redraw","_attachEvents","_restoreOverlayElement","_setElementClass","getAttribute","childNodes","overlayElement","_hasSeriesData","display","parentElement","seriesCopies","aliases","alias","resolveAxisAliases","applySeriesColors","getSize","chartArea","offsetWidth","resize","force","currentSize","_size","_resize","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","pointByCategoryName","togglePointsHighlight","showTooltip","_sharedTooltip","_tooltip","hideTooltip","_surfaceWrap","renderAs","_destroySurface","Surface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_kendoExportVisual","model","_getModel","_destroyView","_setElementAccessibilityAttributes","_legend","play","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","_setComputedStyles","triggerPaneRender","_navState","_cancelDomEvents","_redrawFocusHighlight","titleHeight","setProperty","ref_focusState","legendInFocus","preserveHighlight","_focusElement","_getFocusedLegendItem","description","exportOptions","exportVisual","currentOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","axisDefaults","themeAxisDefaults","mapAxisOptions","axisColor","applyAxisDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","applySeriesDefaults","colors","seriesColor","_createPlotArea","_modelOptions","subtitle","_setTitleBox","_titleBox","titlePosition","subtitlePosition","subtitleAtTop","skipSeries","selections","select","_selectStart","_selectEnd","_clickHandler","_click","_keydownHandler","_keydown","_focusHandler","_focus","_blurHandler","_blur","_mousedownHandler","_mousedown","_mouseleaveHandler","_mouseleave","_mouseover","_mouseout","_mousemove","throttle","removeObserver","_toDocumentCoordinates","_updateDrilldownPoint","_resetDrilldownPoint","_focusPoint","_startDrilldown","_focusLegendItem","obj$1","_shouldAttachMouseMove","_hoveredPoint","_plotAreaHovered","_hasInactiveOpacity","_activeChartInstance","_applySeriesOpacity","_updateSeriesOpacity","_stopChartHandlers","_gestureDistance","_clearFocusedElement","suspendTracking","_zooming","resumeTracking","mousewheelZoom","previousGestureDistance","scaleDelta","_drawingChartElement","leave","_startNavigation","_suppressHover","ranges$1","_endNavigation","_mousewheelZoomRate","totalDelta","chartEvent","_getChartElement","eventTarget","coordinates","_elementPadding","_padding","inverseTransform","parentMatrix","multiplyCopy","elementScale","invert","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","_isLegendBeforeChart","legendPosition","_preventInitialPointFocus","_focusFirstLegendItem","_focusFirstPoint","focusedElement","isLegendBeforeChart","_navigatePoints","_navigateLegend","_hideTooltip","focusState","moveFocus","focusedPoint","_displayTooltip","itemsLength","cycleFunc","focusedLegendItemIndex","_hasFocus","ownerDocument","activeElement","_focusChart","focus","omitHighlight","_setElementActiveDescendant","_showSeriesInactiveOpacity","_showInactiveOpacity","_clearElementActiveDescendant","_pseudoFocusedElement","_createPseudoFocusedElement","remove","removeAttribute","pseudoElement","checked","_hideInactiveOpacity","activePoint","_activePoint","_updateHoveredPoint","_displayInactiveOpacity","multipleSeries","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","drilldown","_drilldownState","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","inactiveOpacity","activeSeries","hasDefaultInactiveOpacity","hasInactiveOpacity","defaultInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","autoBind","bindCategoryAxisFromSeries","uniqueCategories","seriesOnAxis","hasCategoryBinding","seriesWithData","categorySamples","time","_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","ChartSharedTooltip","NO_CROSSHAIR","wrapNumber","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","FadeOutAnimation","_initialOpacity","div","NavigatorHint","chartPadding","scroll","scrollWidth","minPos","clearHideTimeout","_visible","visibility","tooltipStyle","marginTop","borderTopWidth","_hideTimeout","_hideAnimation","hideDelay","NAVIGATOR_PANE","NAVIGATOR_AXIS","DEFAULT_PANE","Navigator","hint","chartObserver","clean","_redrawSelf","initSelection","mainAxis","axisClone","ClonedObject","selectStart","selectEnd","filterAxes","silent","redrawSlaves","slavePanes","_drag","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","_dragEnd","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","__navi","naviOptions","attachAxes","attachSeries","valueAxes","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","StockChart","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","dirty","_seriesCount","copyNavigatorCategories","ANGULAR_SPEED","ARROW_POINTER","BAR_POINTER","DEFAULT_LINE_WIDTH","DEGREE","LINEAR","RADIAL_POINTER","RADIAL_RANGE_POINTER","getOrigin","setOrigin","setSize","buildLabelElement","geo","styleGeometry","styleBox","getRange","Gauge","contextService","pointerValue","pointer","pointers","_setValueOptions","_draw","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","renderAxisTick","tickRenderOptions","renderTicks","tickGroup","LinearScale","renderLabels","scaleLine","renderLine","scaleTicks","renderRanges","linePath","Pointer","newValue","_oldValue","repaint","LinearPointer","track","pointerBox","pointerRangeBox","trackBox","trackSize","pointerHalfSize","getElementOptions","_margin","ArrowLinearPointerAnimation","toScale","translateX","translateY","ArrowLinearPointer","pointerShape","sign","elementOptions","BarLinearPointerAnimation","newPoints","oldPoints","speed","setter","BarLinearPointer","minSlot","sizeAxis","p4","pointerPath","oldShape","renderTrack","trackOptions","LinearGauge","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","scaleElements","pointerType","plotAreaBox","scaleBox","overflow","GEO_ARC_ADJUST_ANGLE","drawTicks","tickAngles","getRadiusX","tickStart","tickEnd","rangeSegment","RadialScale","renderArc","labelElements","repositionRanges","hasRanges","ticksSize","labelsGroup","rangeDistance","isInside","hasLabelElements","setRadiusX","setRadiusY","paddingWidth","paddingHeight","labelPos","labelElement","prevLabelPos","labelTransform","union","rangeRadius","getRangeRadius","_geometry","rangeSegments","segmentsCount","createRange","rangeGeom","rangePlaceholderColor","tickArc","majorTickAngles","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","RadialPointerAnimation","newAngle","oldAngle","RadialPointer","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","arrow","RadialGauge","_initialPlotArea","fitScale","alignScale","_buildPointers","midDiff","oldDiff","getDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","ArcScale","rangeLineCap","placeholderRangeAngle","setEndAngle","setStartAngle","addRange","RangePointerAnimation","startColor","currentColor","RangePointer","rangeColor","ArcGauge","centerLabelPosition","yLimit","CircularGauge","Encoding","initProperties","quietZoneLength","addQuietZone","encode","convertedValue","initValue","addData","invalidCharacterError","character","addCheckSum","Code11","characterMap","cCheckSumTotal","kCheckSumTotal","kCheckSumMinLength","checkSumMod","DASH_VALUE","DASH","STOP","addPattern","addCharacter","charAt","setBaseUnit","cValue","getWeightedSum","checksum","kValue","weightedSum","weightedValue","Code39Base","minBaseUnitLength","addStart","pushCheckSum","addStop","prepareValues","characterData","addBase","Code39","minRatio","maxRatio","gapWidth","splitCharacter","patternMappings","patternString","minBaseUnit","minHeight","getBaseUnit","toFixed","getBaseWidth","characterLength","addCharacterGap","Code39ExtendedBase","charCodeAt","addExtended","code","patterns","extendedMappings","patternIndex","shiftCharacters","fromCharCode","dataCharacter","specialAsciiCodes","shiftValuesAsciiCodes","Code39Extended","SHIFT0","SHIFT1","SHIFT2","SHIFT3","Code93","TERMINATION_BAR","charData","checkValues","_getCheckValues","_findCharacterByValue","wightedSum","Code93Extended","characterByValue","numberRegex","Postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","validate","checkSum","alphanumericRegex","State128","encoding","is","isCode","pushState","State128AB","states","_initMoves","FNC4","SHIFT","encodingState","_moves","maxLength","numberMatch","substr","_moveFNC","_shiftState","_moveState","fnc","previousState","shifted","states128","A","State128A","State128B","C","State128C","next4","getSubstring","State128FNC4","_initSubStates","dependentStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","States128FNC1","startState","startAI","endAI","applicationIdentifiers","multiKey","ids","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","ai","applicationIdentifier","getApplicationIdentifier","unsupportedAIError","Code128Base","_initStates","getNextState","temp","Code128a","Code128b","Code128c","Code128","CodeGS1128","MsiBase","checkSumType","checkSums","checkSumLength","MsiMod10","MsiMod11","MsiMod1010","MsiMod1110","Modulo10","evenSum","oddSum","odd","Modulo11","checkValue","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","Ean13","keyTable","digits","valueAsString","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","arrToAdd","limitedHeight","even","Ean8","Encodings","code11","code39","code39extended","code93","code93extended","code128","code128a","code128b","code128c","surfaceSize","surfaceType","clientWidth","clientHeight","msimod10","msimod11","msimod1010","msimod1110","postnet","ean8","ean13","Barcode","errorHandler","onError","_setOptions","_initSurfaceElement","_createSurface","_destroySurfaceElement","_render","encodedValue","textToDisplay","textMargin","barHeight","_getBackground","_getText","_bandsGroup","_getBands","Size","value$1","stepX","patternItem","_textbox","splitInto","str","chunkLength","toBitsString","bitString","toDecimal","FreeCellVisitor","startColumn","getNextCell","getNextRemainderCell","EncodingResult","dataString","version","IsoEncoder","getEncodingResult","inputString","errorCorrectionLevel","modes","previousMode","chooseMode","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","mode","modeString","nextMode","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","getModes","dataCodewordsCount","DataModeInstances","getStringBitsLength","getDataCodewordsCount","getVersion","getDataString","QRDataMode","modeIndicator","bitsInCharacterCount","getVersionIndex","getBitsCharacterCount","getModeCountString","NumericQRDataMode","inputLength","mod3","AlphaNumericQRDataMode","characters","ByteQRDataMode","Utf8Encoder","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","bytesCount","getBytesCount","bc","significantOnes","VersionsCodewordsInformation","L","totalDataCodewords","errorCodewordsPerBlock","M","Q","H","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","powersOfTwo","powersOfTwoResult","irregularAlignmentPatternsStartDistance","finderPattern","alignmentPattern","errorCorrectionPatterns","paddingCodewords","maskPatternConditions","alphaPattern","alphaRegex","alphaNumericRegex","byteRegex","generatorPolynomials","fillFunctionCell","matrices","bit","fillDataCell","xorPolynomials","multiplyPolynomials","multiplyByConstant","polynomial","generateErrorCodewords","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","encodeBCH","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","dividePolynomials","getNumberAt","addFormatInformation","addVersionInformation","quotient","mod","modules","addCentricPattern","addFinderSeparator","nextX","nextY","scoreFinderPatternOccurance","scores","rowColumn","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","percent","mod5","previous","encodeData","encoder","createQRCodeDataEncoder","encodingResult","versionInformation","blocks","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","blockIdx","codewordIdx","getBlocks","initialDataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","padDataString","initMatrices","addFinderPatterns","startDistance","addAlignmentPatterns","addTimingFunctions","block","cell","cellVisitor","fillData","adjacentSameBits","modulesLength","rowIndex","columnIndex","matrixIndex","scoreMaskMatrixes","optimalMatrix","encodeVersionInformation","encodedString","encodeFormatInformation","generatePowersOfTwo","firstPolynomial","secondPolynomial","generateGeneratorPolynomials","crossPattern","squarePattern","QRCodeDefaults","QRCode","elementWidth","elementHeight","quietZoneSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","imageRect","logoSize","_getLogoSize","logoUrl","imageUrl","Image","crossSize","crossOffset","_renderShape","matrixSize","newOptions","defautLogoSize","datums","WGS84","toSquare","math","atan","tan","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","toArray","loc","precision","dest","datum","greatCircleTo","initialBearing","initialDatum","bearing","fromLat","fromLng","dToR","asin","initialDest","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sinA","u2","deltao","fromLngLat","lngAndLat","fromLatLng","PI_DIV_2","PI_DIV_4","DEG_TO_RAD","Mercator","_initOptions","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","forward","clamp","proj","lng0","centralMeridian","_projectLat","ecc","ts","con","_inverseY","ecch","phi","dphi","SphericalMercator","Equirectangular","EPSG3857","_proj","_tm","_itm","toLocation","proxy","EPSG3395","EPSG4326","method","convertToHtml","firstChild","removeChildren","prepend","originElement","insertBefore","toHyphens","toPixels","endsWith","setDefaultEvents","renderPos","Attribution","extent","_extent","newItem","_itemText","appendHtml","separator","showElement","hideElement","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","newMin","newMax","contains","directionsMap","createButton","navigateUpButton","icons","navigateRightlButton","navigateDownButton","navigateLeftButton","_keyroot","_tabindex","targetElement","TABINDEX","tabindex","_pan","panStep","button","matches","CHANGE","ZoomControl","zoomInButton","zoomOutButton","_change","zoomStep","Extent","initialNw","initialSe","nw","se","World","containsAny","locs","include","includeAll","edges","ne","sw","CENTER_CHANGE","widgetService","_anchor","documentPoint","Layer","scrollElement","_beforeReset","_reset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","_readData","_hasData","_data","_layerIndex","layers","compileTemplate","roundPoint","renderSize","newSize","TileLayer","subdomains","viewType","_viewType","_view","locationToLayer","viewOrigin","_updateView","TileView","view","extentToPoint","tileSize","urlTemplate","pool","TilePool","center$1","_center","extent$1","_viewOrigin","zoom$1","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","boundary","wrapValue","ImageTile","maxWidth","maxHeight","url","urlResult","urlOptions","errorUrl","z","quadkey","q","_items","_remove","_create","maxDist","TapCapture","domElement","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","enabled","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","movable","dragMove","dragDelta","resistance","translateAxis","elastic","dimensions","gesture","closestAnchor","previousGesture","previousCenter","scaleWith","tagName","Movable","transformOrigin","_saveCoordinates","by","scaleTo","moveAxis","newCoordinates","ShapeLayer","_initRoot","_markers","_handler","_mouseenter","_translateSurface","_load","_root","features","geometries","_clearMarkers","_loader","GeoJsonLoader","parse","shapeCreated","cancelled","renderPointsAsMarkers","layer","featureCreated","_panning","locationToView","_eventArgs","layerIndex","shapeIndex","_tooltipAnchor","_tooltipContext","eventOffset","_panHandler","panHandler","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","properties","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","viewToLocation","BubbleLayer","valueField","newData","scaleType","_scaleType","getLocation","locationField","symbol","_createSymbol","_drawSymbol","Scales","Symbols","SqrtScale","domain","_domain","domainRange","outputRange","_ratio","rel","square","CLICK","MOUSE_ENTER","MOUSE_LEAVE","MARKER_CLASS_NAME","MARKER_CLASS","MarkerLayer","_markerClickHandler","_markerClick","_addOne","Marker","arg","addTo","getTitle","titleField","_kendoNode","markerIndex","_markerMouseEnter","_createMarkerEventArgs","_markerMouseLeave","_mouseEnterHandler","_mouseEnter","_mouseLeaveHandler","_mouseLeave","templateHtml","_compileTemplate","templateFn","templateElement","svgIcon","attributes","_createEventArgs","paramName","useWithBlock","animationFrame","requestAnimationFrame","_tickProxy","_tick","_started","done","onEnd","onCancel","Transition","timePassed","initial","_easeProxy","ease","easeOutExpo","SCROLL","ZoomSnapBack","tapCapture","DragInertia","transition","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","scrollMovable","alwaysVisible","paneSize","sizeRatio","Scroller","hasScrolling","hasNativeScrolling","_native","useNative","scrollHeader","fixedContainer","wrapInner","inner","avoidScrolling","velocityX","velocityY","horizontalSwipe","verticalSwipe","zoomSnapBack","animatedScroller","scrollTo","scrollTop","scrollLeft","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","visibleScrollHints","pullOffset","messages","pullTemplate","releaseTemplate","refreshTemplate","MapService","MARKER","LOCATION","layersMap","_init","scroller","zoomControl","markerLayer","initObserver","initServices","_notifyObserver","crs","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","mousewheelThrottled","level","zoomLevel","_setExtent","_getExtent","wraparound","locationObject","_layerSize","layerToLocation","pointObject","translateWith","pointResult","eventToView","eventToLayer","eventToLocation","viewSize","_setOrigin","originLocation","_origin","invalidate","newExtent","raw","layerWidth","layerHeight","_zoomAround","pivot","controls","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPosition","posSelector","querySelector","div$1","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","defs","_createLayer","layerDefaults","layerOptions","markerDefaults","layerConstructor","_scrollOffset","_panComplete","_panEndTimestamp","_scaleToZoom","gestureCenter","centerLocation","originPoint","tiles","_resetScroller","xBounds","yBounds","_renderLayers","newZoom","toZoom","fromZoom","mapFn","curr","sortAsc","y0","sortSource","sortTarget","node","sortLinks","nodes","targetLinks","link","sourceLinks","calcLayer","maxDepth","Sankey","nodesOptions","links","nodeWidth","nodePadding","targetColumnIndex","loops","autoLayout","calculate","connectLinksToNodes","calculateNodeValues","circularLinks","calculateNodeHeights","columns","calculateNodeDepths","calculateNodeColumns","calculateNodeBreadths","applyNodesOffset","calculateLinkBreadths","nodesMap","sourceId","targetId","currDepth","currentNodes","nodesLength","currentHeight","eachNode","columnWidth","x0","kSize","uncurlLinksToRight","uncurlLinksToLeft","targetTopPos","arrangeNodesVertically","sourceTopPos","arrangeUp","arrangeDown","yPos","currentY","link$1","calculateSankey","rotationDirection","p1x","p1y","p2x","p2y","p3x","p3y","expression1","expression2","intersect","link1","link2","f1","f2","f3","f4","SankeyElement","Node","getRect","navigatable","blur","nodeColor","nodeColors","resolveNodeOptions","nodeOptions","bezierPoint","t1t1","tt","calculateControlPointsOffsetX","xC","middlePoint","tH","pointH","xM","yM","mPerp","P1","P2","calculatePerpendicularLine","middlePointDown","P","LDir","Pmx","midpoint","ab_dx","perp_dx","perp_dy","magnitude","pq_dx","pq_dy","denominator","findIntersection","P4","Link","curveTo","BEFORE","AFTER","Label","diagramMinX","diagramMaxX","nodeBox","textSizeBox","textY","labelAfterLastNode","labelBeforeFirstNode","side","textOrigin","textRect","resolveLabelOptions","drawingRect","ChartTitle","sortData","sortDataRTL","areaBackground","areaOpacity","ChartLegend","LINK","NODE","_initResizeObserver","_initNavigation","_destroyResizeObserver","_onDownHandler","disableKeyboardNavigation","_onDown","firstFocusableNode","ResizeObserver","entries","contentRect","_resizeObserver","observe","mouseenter","mouseleave","mousemove","setLinksOpacity","linksVisuals","setOpacity","linkOptions","setLinksInactivityOpacity","linkValue","ev","targetType","isLink","isNode","isLegendItem","highlightLinks","nodeVisual","nodesVisuals","relatedTarget","nodeName","tooltipTimeOut","tooltipShown","followPointer","tooltipElType","mouseEvent","isLeft","isTop","tooltipData","popupOffset","popupAlign","nodeValue","nextDelay","sameNode","_focusNode","sameLink","_focusLink","node1","node2","_cleanFocusHighlight","nodeData","models","linkData","_focusNextNode","columnNodes","nodeIndex","nextNode","_focusNextLink","sourceLinkIndex","targetLinkIndex","nextLink","nextLink$1","_focusSourceNode","sourceNode","_focusTargetNode","targetNode","_focusSourceLink","_focusTargetLink","_skipFocusHighlight","onArrowRight","onArrowLeft","onEscape","onArrowDown","onArrowUp","disconnect","titleBox","calcOptions","sankeyOptions","disableAutoLayout","focusHighlightWidth","sankeyBox","legendArea","calculatedNodes","console","warn","sankey","Infinity","nodeEl","nodeOps","nodeInstance","rawBBox","labelVisual","permutation","columnsLength","results","crosses","linksLength","lNext","crossesValue","minCrosses","bestResult","sankeyContext","startX","toRtl","newColumn","titleVisual","visualNodes","focusHighlights","sortedLinks","resolvedOptions","colorType","resolveLinkOptions","linkInstance","linkVisual","textOps","legendVisual","createSankeyData","linksMap","existingValue","nodesId","nodesArray","linksArray","ActionTypes","stacked","categoryAxisX","valueAxisY","seriesChange","areaMarginLeft","areaMarginRight","areaMarginTop","areaMarginBottom","titleText","titleFontName","titleFontSize","titleColor","subtitleText","subtitleFontName","subtitleFontSize","subtitleColor","seriesLabel","legendVisible","legendFontName","legendFontSize","legendColor","categoryAxisTitleText","categoryAxisTitleFontName","categoryAxisTitleFontSize","categoryAxisTitleColor","categoryAxisLabelsFontName","categoryAxisLabelsFontSize","categoryAxisLabelsColor","categoryAxisLabelsRotation","categoryAxisReverseOrder","valueAxisTitleText","valueAxisTitleFontName","valueAxisTitleFontSize","valueAxisTitleColor","valueAxisLabelsFormat","valueAxisLabelsFontName","valueAxisLabelsFontSize","valueAxisLabelsColor","valueAxisLabelsRotation","labelSizeDefault","axisTitleSizeDefault","fontNames","fontFamily","fontNameDefault","lineType","scatterType","categoricalTypes","scatterSeries","isCategorical","includes","categoryTypes","valueTypes","axesDefinitions","getFont","parseFont","spaceIndex","updateFontName","fontName","currentFont","updateFontSize","fontSize","defaultFontName","recordWithValues","getCategoryColumnIndex","categoryDef","candidates","sampleRecord","record","getValueColumnIndexes","valuesDef","def","emptyState","initialSeries","categoryValueChartState","chartDef","firstRecord","catIndex","valuesIndexes","valuesColumn","valuesResult","pieChartState","categoriesAxis","flatData","createState","mergeStates","newState","updateState","currentState","action","legend$1","legend$2","rotation$1","windowTitle","exportButton","exportPDFButton","exportSVGButton","exportPNGButton","tabChart","tabData","tabFormat","barChartBar","barChartStackedBar","barChart100StackedBar","pieChartPie","columnChart","columnChartColumn","columnChartStackedColumn","columnChart100StackedColumn","lineChartLine","lineChartStackedLine","lineChart100StackedLine","scatterChartScatter","configuration","configurationCategoryAxis","configurationXAxis","configurationValueAxis","configurationSeries","configurationSeriesAdd","formatChartArea","formatChartAreaMargins","formatChartAreaMarginsAuto","formatChartAreaMarginsLeft","formatChartAreaMarginsRight","formatChartAreaMarginsTop","formatChartAreaMarginsBottom","formatChartAreaBackground","formatChartAreaBackgroundColor","formatTitle","formatTitleApplyTo","formatTitleChartTitle","formatTitleChartSubtitle","formatTitleLabel","formatTitleFont","formatTitleFontPlaceholder","formatTitleSize","formatTitleSizePlaceholder","formatTitleColor","formatSeries","formatSeriesApplyTo","formatSeriesAllSeries","formatSeriesColor","formatSeriesShowLabels","formatLegend","formatLegendShowLegend","formatLegendFont","formatLegendFontPlaceholder","formatLegendSize","formatLegendSizePlaceholder","formatLegendColor","formatLegendPosition","formatLegendPositionTop","formatLegendPositionBottom","formatLegendPositionLeft","formatLegendPositionRight","formatCategoryAxis","formatXAxis","formatCategoryAxisTitle","formatCategoryAxisTitlePlaceholder","formatCategoryAxisTitleFont","formatCategoryAxisTitleFontPlaceholder","formatCategoryAxisTitleSize","formatCategoryAxisTitleSizePlaceholder","formatCategoryAxisTitleColor","formatCategoryAxisLabels","formatCategoryAxisLabelsFont","formatCategoryAxisLabelsFontPlaceholder","formatCategoryAxisLabelsSize","formatCategoryAxisLabelsSizePlaceholder","formatCategoryAxisLabelsColor","formatCategoryAxisLabelsRotation","formatCategoryAxisLabelsRotationAuto","formatCategoryAxisLabelsReverseOrder","formatValueAxis","formatYAxis","formatValueAxisTitle","formatValueAxisTitlePlaceholder","formatValueAxisTitleFont","formatValueAxisTitleFontPlaceholder","formatValueAxisTitleSize","formatValueAxisTitleSizePlaceholder","formatValueAxisTitleColor","formatValueAxisLabels","formatValueAxisLabelsFormat","formatValueAxisLabelsFormatText","formatValueAxisLabelsFormatNumber","formatValueAxisLabelsFormatCurrency","formatValueAxisLabelsFormatPercent","formatValueAxisLabelsFont","formatValueAxisLabelsFontPlaceholder","formatValueAxisLabelsSize","formatValueAxisLabelsSizePlaceholder","formatValueAxisLabelsColor","formatValueAxisLabelsRotation","formatValueAxisLabelsRotationAuto","BAR_GAP","getWizardDataFromDataRows","dataRows","dataColumns","createInitialState","defaultState","fontSizes","BAR_SPACING","SANS","SANS11","SANS12","SANS16","TRANSPARENT","lineSeriesLegendItem","areaSeriesLegendItem","areaNoMarkersSeriesLegendItem","areaSeries","rangeAreaSeries","boxPlotSeries","outliersField","meanField","bulletSeries","lineSeries","radarAreaSeries","radarLineSeries","waterfallSeries","funnelSeries","pyramidSeries","trendlineSeriesDefaults","rangeArea","verticalRangeArea","heatmap","funnel","pyramid","horizontalWaterfall","radarColumn","polarScatter","rangeBar","verticalBoxPlot","baseTheme","seriesVar","defaultView","getProp","getPropertyValue","colorMix","curColor","toColor","getNumberProp","weightProp","sizeProp","familyProp","getSeriesColors","defaultFont","paneTitleFont","normalTextColor","sankeyLegend","textColorNormal","chartLegend","inactiveColor","sankeyTheme","chartTheme","majorLines","axisLabelFont","chartBg","notesProps","surfaceColor","primaryBg"],"sourceRoot":""}