@progress/kendo-charts 1.19.1 → 1.20.0-dev.202111121622

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cdn/js/kendo-charts.js +1 -1
  2. package/dist/cdn/main.js +1 -1
  3. package/dist/es/chart/chart.js +15 -6
  4. package/dist/es/chart/constants.js +3 -1
  5. package/dist/es/chart/pan-and-zoom/mousewheel-zoom.js +8 -4
  6. package/dist/es/chart/selection.js +41 -1
  7. package/dist/es/common/mousewheel-delta.js +4 -7
  8. package/dist/es/core/axis.js +47 -0
  9. package/dist/es/core/category-axis.js +62 -20
  10. package/dist/es/core/date-category-axis.js +26 -38
  11. package/dist/es/core/date-value-axis.js +37 -40
  12. package/dist/es/core/logarithmic-axis.js +62 -88
  13. package/dist/es/core/numeric-axis.js +57 -81
  14. package/dist/es/main.js +1 -0
  15. package/dist/es/qrcode/encodings/data-modes/alpha-numeric-data-mode.js +103 -0
  16. package/dist/es/qrcode/encodings/data-modes/byte-data-mode.js +51 -0
  17. package/dist/es/qrcode/encodings/data-modes/data-mode-instances.js +12 -0
  18. package/dist/es/qrcode/encodings/data-modes/numeric-data-mode.js +49 -0
  19. package/dist/es/qrcode/encodings/data-modes/qr-data-mode.js +50 -0
  20. package/dist/es/qrcode/encodings/encoders/iso-encoder.js +29 -0
  21. package/dist/es/qrcode/encodings/encoders/utf8-encoder.js +91 -0
  22. package/dist/es/qrcode/encodings/encoding-result.js +16 -0
  23. package/dist/es/qrcode/encodings/encoding.js +701 -0
  24. package/dist/es/qrcode/encodings/free-cell-visitor.js +57 -0
  25. package/dist/es/qrcode/encodings/version-codewords.js +1289 -0
  26. package/dist/es/qrcode/qrcode.js +403 -0
  27. package/dist/es/qrcode/utils.js +28 -0
  28. package/dist/es/qrcode.js +1 -0
  29. package/dist/es/stock/navigator.js +3 -2
  30. package/dist/es2015/chart/chart.js +15 -6
  31. package/dist/es2015/chart/constants.js +3 -1
  32. package/dist/es2015/chart/pan-and-zoom/mousewheel-zoom.js +6 -4
  33. package/dist/es2015/chart/selection.js +40 -1
  34. package/dist/es2015/common/mousewheel-delta.js +4 -7
  35. package/dist/es2015/core/axis.js +39 -0
  36. package/dist/es2015/core/category-axis.js +56 -18
  37. package/dist/es2015/core/date-category-axis.js +27 -36
  38. package/dist/es2015/core/date-value-axis.js +35 -40
  39. package/dist/es2015/core/logarithmic-axis.js +52 -83
  40. package/dist/es2015/core/numeric-axis.js +47 -78
  41. package/dist/es2015/main.js +1 -0
  42. package/dist/es2015/qrcode/encodings/data-modes/alpha-numeric-data-mode.js +91 -0
  43. package/dist/es2015/qrcode/encodings/data-modes/byte-data-mode.js +41 -0
  44. package/dist/es2015/qrcode/encodings/data-modes/data-mode-instances.js +13 -0
  45. package/dist/es2015/qrcode/encodings/data-modes/numeric-data-mode.js +39 -0
  46. package/dist/es2015/qrcode/encodings/data-modes/qr-data-mode.js +44 -0
  47. package/dist/es2015/qrcode/encodings/encoders/iso-encoder.js +19 -0
  48. package/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js +83 -0
  49. package/dist/es2015/qrcode/encodings/encoding-result.js +10 -0
  50. package/dist/es2015/qrcode/encodings/encoding.js +701 -0
  51. package/dist/es2015/qrcode/encodings/free-cell-visitor.js +49 -0
  52. package/dist/es2015/qrcode/encodings/version-codewords.js +1289 -0
  53. package/dist/es2015/qrcode/qrcode.js +395 -0
  54. package/dist/es2015/qrcode/utils.js +28 -0
  55. package/dist/es2015/qrcode.js +1 -0
  56. package/dist/es2015/stock/navigator.js +3 -2
  57. package/dist/npm/main.d.ts +1 -0
  58. package/dist/npm/main.js +3172 -283
  59. package/dist/npm/qrcode.d.ts +5 -0
  60. package/dist/systemjs/kendo-charts.js +1 -1
  61. package/package.json +1 -1
@@ -22,12 +22,13 @@ import { ChartPane, ChartPlotArea, findAxisByName } from './api-elements';
22
22
 
23
23
  import { X, Y, VALUE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SERIES_OPACITY } from '../common/constants';
24
24
  import { addClass, Class, setDefaultOptions, deepExtend, defined, find, isObject, isFunction, elementSize, elementOffset,
25
- elementScale, elementStyles, eventCoordinates, bindEvents, unbindEvents, mousewheelDelta, FontLoader, inArray, last, round, HashMap } from '../common';
25
+ elementScale, elementStyles, eventCoordinates, bindEvents, unbindEvents, mousewheelDelta, FontLoader, inArray, last, round,
26
+ HashMap, valueOrDefault } from '../common';
26
27
 
27
28
  import { dateComparer } from '../date-utils';
28
29
 
29
30
  import { DRAG_START, DRAG, DRAG_END, ZOOM_START, ZOOM, ZOOM_END, SELECT_START, SELECT, SELECT_END, PLOT_AREA_HOVER, PLOT_AREA_LEAVE,
30
- RENDER, CATEGORY, PIE, DONUT, FUNNEL, COLUMN, MOUSEWHEEL, MOUSEWHEEL_DELAY, SHOW_TOOLTIP, SERIES_HOVER } from './constants';
31
+ RENDER, CATEGORY, PIE, DONUT, FUNNEL, COLUMN, MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE, SHOW_TOOLTIP, SERIES_HOVER } from './constants';
31
32
 
32
33
  import './animations';
33
34
  import './register-charts';
@@ -664,12 +665,13 @@ var Chart = (function (Class) {
664
665
  this._gestureDistance = e.distance;
665
666
  var args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };
666
667
  if (this._zooming || !this.trigger(ZOOM_START, args)) {
668
+ var coords = this._eventCoordinates(e);
667
669
 
668
670
  if (!this._zooming) {
669
671
  this._zooming = true;
670
672
  }
671
673
 
672
- var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta);
674
+ var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);
673
675
  if (ranges && !this.trigger(ZOOM, args)) {
674
676
  mousewheelZoom.zoom();
675
677
  }
@@ -802,6 +804,12 @@ var Chart = (function (Class) {
802
804
  }
803
805
  };
804
806
 
807
+ Chart.prototype._mousewheelZoomRate = function _mousewheelZoomRate () {
808
+ var zoomable = this.options.zoomable;
809
+ var mousewheel = (zoomable || {}).mousewheel || {};
810
+ return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);
811
+ };
812
+
805
813
  Chart.prototype._mousewheel = function _mousewheel (e) {
806
814
  var this$1 = this;
807
815
 
@@ -828,7 +836,7 @@ var Chart = (function (Class) {
828
836
  clearTimeout(this._mwTimeout);
829
837
  }
830
838
 
831
- args.axisRanges = mousewheelZoom.updateRanges(delta);
839
+ args.axisRanges = mousewheelZoom.updateRanges(delta, coords);
832
840
  if (args.axisRanges && !this.trigger(ZOOM, args)) {
833
841
  mousewheelZoom.zoom();
834
842
  }
@@ -861,7 +869,7 @@ var Chart = (function (Class) {
861
869
  var currentAxis = axes[i];
862
870
  var axisName = currentAxis.options.name;
863
871
  if (axisName) {
864
- ranges[axisName] = currentAxis.scaleRange(-totalDelta);
872
+ ranges[axisName] = currentAxis.scaleRange(-totalDelta * this$1._mousewheelZoomRate(), coords);
865
873
  }
866
874
  }
867
875
 
@@ -1185,8 +1193,9 @@ var Chart = (function (Class) {
1185
1193
  for (var i = 0; i < elements.length; i++) {
1186
1194
  var element = elements[i];
1187
1195
  var currSeries = element.series || series;
1196
+ var shouldHighlight = currSeries && (currSeries.highlight || {}).visible;
1188
1197
 
1189
- if (currSeries && element.visual) {
1198
+ if (shouldHighlight && element.visual) {
1190
1199
  var opacity = series ? series.opacity : element.series.opacity;
1191
1200
  if (currSeries !== activeSeries || reset) {
1192
1201
  element.visual.opacity(reset ? 1 : opacity);
@@ -94,6 +94,7 @@ var OUTSIDE_END = "outsideEnd";
94
94
 
95
95
  var MOUSEWHEEL = "DOMMouseScroll mousewheel";
96
96
  var MOUSEWHEEL_DELAY = 150;
97
+ var MOUSEWHEEL_ZOOM_RATE = 0.3;
97
98
 
98
99
  export {
99
100
  INITIAL_ANIMATION_DURATION, FADEIN,
@@ -115,7 +116,8 @@ export {
115
116
  LOGARITHMIC, DRAG, DRAG_START, DRAG_END, ZOOM_START, ZOOM, ZOOM_END,
116
117
  SELECT_START, SELECT, SELECT_END, PANE_RENDER, GAP,
117
118
  DONUT, INSIDE_END, INSIDE_BASE, OUTSIDE_END,
118
- MOUSEWHEEL, MOUSEWHEEL_DELAY, SHOW_TOOLTIP, HIDE_TOOLTIP,
119
+ MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE,
120
+ SHOW_TOOLTIP, HIDE_TOOLTIP,
119
121
  EQUALLY_SPACED_SERIES, ABOVE, BELOW,
120
122
  HEATMAP
121
123
  };
@@ -9,14 +9,18 @@ var MousewheelZoom = (function (Class) {
9
9
  Class.call(this);
10
10
 
11
11
  this.chart = chart;
12
- this.options = deepExtend({}, this.options, options);
12
+ this.options = deepExtend({
13
+ rate: 0.3
14
+ }, this.options, options);
13
15
  }
14
16
 
15
17
  if ( Class ) MousewheelZoom.__proto__ = Class;
16
18
  MousewheelZoom.prototype = Object.create( Class && Class.prototype );
17
19
  MousewheelZoom.prototype.constructor = MousewheelZoom;
18
20
 
19
- MousewheelZoom.prototype.updateRanges = function updateRanges (delta) {
21
+ MousewheelZoom.prototype.updateRanges = function updateRanges (delta, coords) {
22
+ var this$1 = this;
23
+
20
24
  var lock = (this.options.lock || "").toLowerCase();
21
25
  var axisRanges = [];
22
26
  var axes = this.chart._plotArea.axes;
@@ -26,7 +30,7 @@ var MousewheelZoom = (function (Class) {
26
30
  var vertical = axis.options.vertical;
27
31
 
28
32
  if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {
29
- var range = axis.zoomRange(-delta);
33
+ var range = axis.zoomRange(-delta * this$1.options.rate, coords);
30
34
 
31
35
  if (range) {
32
36
  axisRanges.push({
@@ -61,4 +65,4 @@ var MousewheelZoom = (function (Class) {
61
65
  return MousewheelZoom;
62
66
  }(Class));
63
67
 
64
- export default MousewheelZoom;
68
+ export default MousewheelZoom;
@@ -4,7 +4,7 @@ import { DateCategoryAxis, Point } from '../core';
4
4
 
5
5
  import { MOUSEWHEEL_DELAY, MOUSEWHEEL, SELECT_START, SELECT, SELECT_END } from './constants';
6
6
 
7
- import { LEFT, RIGHT, MIN_VALUE, MAX_VALUE } from '../common/constants';
7
+ import { LEFT, RIGHT, MIN_VALUE, MAX_VALUE, X } from '../common/constants';
8
8
  import { addClass, Class, removeClass, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';
9
9
  import { parseDate } from '../date-utils';
10
10
 
@@ -564,6 +564,46 @@ var Selection = (function (Class) {
564
564
  }
565
565
  };
566
566
 
567
+ Selection.prototype.zoom = function zoom (delta, coords) {
568
+ var options = this.options;
569
+ var min = this._index(options.min);
570
+ var max = this._index(options.max);
571
+ var from = this._index(options.from);
572
+ var to = this._index(options.to);
573
+ var range = { from: from, to: to };
574
+ var oldRange = deepExtend({}, range);
575
+
576
+ var ref = this.categoryAxis.options;
577
+ var reverse = ref.reverse;
578
+ var origin = X + (reverse ? '2' : '1');
579
+ var lineBox = this.categoryAxis.lineBox();
580
+ var relative = Math.abs(lineBox[origin] - coords[X]);
581
+ var size = lineBox.width();
582
+ var position = round(relative / size, 2);
583
+ var minDelta = round(position * delta);
584
+ var maxDelta = round((1 - position) * delta);
585
+
586
+ if (this._state) {
587
+ range = this._state.range;
588
+ }
589
+
590
+ range.from = limitValue(
591
+ limitValue(from - minDelta, 0, to - 1),
592
+ min, max
593
+ );
594
+
595
+ range.to = limitValue(
596
+ limitValue(to + maxDelta, range.from + 1, max),
597
+ min,
598
+ max
599
+ );
600
+
601
+ if (range.from !== oldRange.from || range.to !== oldRange.to) {
602
+ this.set(range.from, range.to);
603
+ return true;
604
+ }
605
+ };
606
+
567
607
  Selection.prototype.trigger = function trigger (name, args) {
568
608
  return (this.observer || this.chart).trigger(name, args);
569
609
  };
@@ -1,16 +1,13 @@
1
- import { drawing } from '@progress/kendo-drawing';
2
-
3
1
  export default function mousewheelDelta(e) {
4
2
  var delta = 0;
5
3
 
6
4
  if (e.wheelDelta) {
7
5
  delta = -e.wheelDelta / 120;
8
- delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);
6
+ } else if (e.detail) {
7
+ delta = e.detail / 3;
9
8
  }
10
9
 
11
- if (e.detail) {
12
- delta = drawing.util.round(e.detail / 3);
13
- }
10
+ delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);
14
11
 
15
12
  return delta;
16
- }
13
+ }
@@ -860,6 +860,53 @@ var Axis = (function (ChartElement) {
860
860
  };
861
861
  };
862
862
 
863
+ Axis.prototype.lineDir = function lineDir () {
864
+ /*
865
+ * Axis line direction:
866
+ * * Vertical: up.
867
+ * * Horizontal: right.
868
+ */
869
+
870
+ var ref = this.options;
871
+ var vertical = ref.vertical;
872
+ var reverse = ref.reverse;
873
+ return (vertical ? -1 : 1) * (reverse ? -1 : 1);
874
+ };
875
+
876
+ Axis.prototype.lineInfo = function lineInfo () {
877
+ var ref = this.options;
878
+ var vertical = ref.vertical;
879
+ var lineBox = this.lineBox();
880
+ var lineSize = vertical ? lineBox.height() : lineBox.width();
881
+ var axis = vertical ? Y : X;
882
+ var axisDir = this.lineDir();
883
+ var startEdge = axisDir === 1 ? 1 : 2;
884
+ var axisOrigin = axis + startEdge.toString();
885
+ var lineStart = lineBox[axisOrigin];
886
+
887
+ return {
888
+ axis: axis,
889
+ axisOrigin: axisOrigin,
890
+ axisDir: axisDir,
891
+ lineBox: lineBox,
892
+ lineSize: lineSize,
893
+ lineStart: lineStart
894
+ };
895
+ };
896
+
897
+ Axis.prototype.pointOffset = function pointOffset (point) {
898
+ var ref = this.lineInfo();
899
+ var axis = ref.axis;
900
+ var axisDir = ref.axisDir;
901
+ var axisOrigin = ref.axisOrigin;
902
+ var lineBox = ref.lineBox;
903
+ var lineSize = ref.lineSize;
904
+ var relative = axisDir > 0 ? point[axis] - lineBox[axisOrigin] : lineBox[axisOrigin] - point[axis];
905
+ var offset = relative / lineSize;
906
+
907
+ return offset;
908
+ };
909
+
863
910
  Axis.prototype.labelsBetweenTicks = function labelsBetweenTicks () {
864
911
  return !this.options.justified;
865
912
  };
@@ -6,6 +6,7 @@ import { defined, isNumber, last, limitValue, round, setDefaultOptions, valueOrD
6
6
  import { dateEquals } from '../date-utils';
7
7
 
8
8
  var MIN_CATEGORY_POINTS_RANGE = 0.01;
9
+ var MIN_CATEGORY_RANGE = 0.1;
9
10
 
10
11
  function indexOf(value, arr) {
11
12
  if (value instanceof Date) {
@@ -263,18 +264,53 @@ var CategoryAxis = (function (Axis) {
263
264
  return positions.slice(startIndex, endIndex + 1);
264
265
  };
265
266
 
267
+ CategoryAxis.prototype.lineInfo = function lineInfo () {
268
+ var ref = this.options;
269
+ var vertical = ref.vertical;
270
+ var reverse = ref.reverse;
271
+ var lineBox = this.lineBox();
272
+ var lineSize = vertical ? lineBox.height() : lineBox.width();
273
+ var axis = vertical ? Y : X;
274
+ var axisDir = reverse ? -1 : 1;
275
+ var startEdge = axisDir === 1 ? 1 : 2;
276
+ var axisOrigin = axis + startEdge.toString();
277
+ var lineStart = lineBox[axisOrigin];
278
+
279
+ return {
280
+ axis: axis,
281
+ axisOrigin: axisOrigin,
282
+ axisDir: axisDir,
283
+ lineBox: lineBox,
284
+ lineSize: lineSize,
285
+ lineStart: lineStart
286
+ };
287
+ };
288
+
289
+ CategoryAxis.prototype.lineDir = function lineDir () {
290
+ /*
291
+ * Category axis line direction:
292
+ * * Vertical: down.
293
+ * * Horizontal: right.
294
+ */
295
+
296
+ var ref = this.options;
297
+ var reverse = ref.reverse;
298
+ return reverse ? -1 : 1;
299
+ };
300
+
266
301
  // TODO: Rename to slotBox, valueSlot, slotByIndex?
267
302
  CategoryAxis.prototype.getSlot = function getSlot (from, to, limit) {
268
303
  var options = this.options;
269
304
  var reverse = options.reverse;
270
305
  var justified = options.justified;
271
- var vertical = options.vertical;
272
306
  var ref = this.scaleOptions();
273
307
  var scale = ref.scale;
274
308
  var box = ref.box;
275
309
  var min = ref.min;
276
- var valueAxis = vertical ? Y : X;
277
- var lineStart = box[valueAxis + (reverse ? 2 : 1)];
310
+ var ref$1 = this.lineInfo();
311
+ var valueAxis = ref$1.axis;
312
+ var lineStart = ref$1.lineStart;
313
+
278
314
  var slotBox = box.clone();
279
315
  var singleSlot = !defined(to);
280
316
 
@@ -406,29 +442,35 @@ var CategoryAxis = (function (Axis) {
406
442
  };
407
443
  };
408
444
 
409
- CategoryAxis.prototype.zoomRange = function zoomRange (rate) {
445
+ CategoryAxis.prototype.scaleRange = function scaleRange (scale, cursor) {
446
+ var position = Math.abs(this.pointOffset(cursor));
410
447
  var rangeIndices = this.totalRangeIndices();
411
- var ref = this.totalRange();
412
- var totalMin = ref.min;
413
- var totalMax = ref.max;
414
- var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);
415
- var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);
416
-
417
- if (max - min > 0) {
418
- return {
419
- min: min,
420
- max: max
421
- };
448
+ var delta = (rangeIndices.max - rangeIndices.min) * Math.min(1, scale);
449
+ var minDelta = position * delta;
450
+ var maxDelta = (1 - position) * delta;
451
+ var min = rangeIndices.min + minDelta;
452
+ var max = rangeIndices.max - maxDelta;
453
+
454
+ if (max - min < MIN_CATEGORY_RANGE) {
455
+ max = min + MIN_CATEGORY_RANGE;
422
456
  }
457
+
458
+
459
+ return {
460
+ min: min,
461
+ max: max
462
+ };
423
463
  };
424
464
 
425
- CategoryAxis.prototype.scaleRange = function scaleRange (scale) {
426
- var range = this.options.categories.length;
427
- var delta = scale * range;
465
+ CategoryAxis.prototype.zoomRange = function zoomRange (scale, cursor) {
466
+ var ref = this.totalRange();
467
+ var totalMin = ref.min;
468
+ var totalMax = ref.max;
469
+ var range = this.scaleRange(scale, cursor);
428
470
 
429
471
  return {
430
- min: -delta,
431
- max: range + delta
472
+ min: limitValue(range.min, totalMin, totalMax),
473
+ max: limitValue(range.max, totalMin, totalMax)
432
474
  };
433
475
  };
434
476
 
@@ -471,31 +471,6 @@ var DateCategoryAxis = (function (CategoryAxis) {
471
471
  return range;
472
472
  };
473
473
 
474
- DateCategoryAxis.prototype.scaleRange = function scaleRange (delta) {
475
- var rounds = Math.abs(delta);
476
- var result = this.range();
477
- var from = result.min;
478
- var to = result.max;
479
-
480
- if (from && to) {
481
- while (rounds--) {
482
- var range = dateDiff(from, to);
483
- var step = Math.round(range * 0.1);
484
- if (delta < 0) {
485
- from = addTicks(from, step);
486
- to = addTicks(to, -step);
487
- } else {
488
- from = addTicks(from, -step);
489
- to = addTicks(to, step);
490
- }
491
- }
492
-
493
- result = { min: from, max: to };
494
- }
495
-
496
- return result;
497
- };
498
-
499
474
  DateCategoryAxis.prototype.labelsRange = function labelsRange () {
500
475
  return {
501
476
  min: this.options.labels.skip,
@@ -556,9 +531,9 @@ var DateCategoryAxis = (function (CategoryAxis) {
556
531
  };
557
532
  };
558
533
 
559
- DateCategoryAxis.prototype.zoomRange = function zoomRange (delta) {
534
+ DateCategoryAxis.prototype.scaleRange = function scaleRange (scale, cursor) {
560
535
  if (this.isEmpty()) {
561
- return null;
536
+ return {};
562
537
  }
563
538
 
564
539
  var options = this.options;
@@ -567,12 +542,16 @@ var DateCategoryAxis = (function (CategoryAxis) {
567
542
  var ref = this.dataRange.displayRange();
568
543
  var rangeMin = ref.min;
569
544
  var rangeMax = ref.max;
545
+
546
+ var position = Math.abs(this.pointOffset(cursor));
547
+ var delta = (rangeMax - rangeMin) * scale;
548
+ var minDelta = Math.round(position * delta);
549
+ var maxDelta = Math.round((1 - position) * delta);
550
+
570
551
  var ref$1 = this.dataRange.options;
571
- var weekStartDay = ref$1.weekStartDay;
572
552
  var baseUnit = ref$1.baseUnit;
573
- var baseUnitStep = ref$1.baseUnitStep;
574
- var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);
575
- var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);
553
+ var min = new Date(rangeMin.getTime() + minDelta);
554
+ var max = new Date(rangeMax.getTime() - maxDelta);
576
555
 
577
556
  if (fit) {
578
557
  var autoBaseUnitSteps = options.autoBaseUnitSteps;
@@ -615,13 +594,6 @@ var DateCategoryAxis = (function (CategoryAxis) {
615
594
  }
616
595
  }
617
596
 
618
- if (min < totalLimits.min) {
619
- min = totalLimits.min;
620
- }
621
- if (max > totalLimits.max) {
622
- max = totalLimits.max;
623
- }
624
-
625
597
  if (min && max && dateDiff(max, min) > 0) {
626
598
  return {
627
599
  min: min,
@@ -632,6 +604,22 @@ var DateCategoryAxis = (function (CategoryAxis) {
632
604
  }
633
605
  };
634
606
 
607
+ DateCategoryAxis.prototype.zoomRange = function zoomRange (scale, cursor) {
608
+ var totalLimits = this.dataRange.total();
609
+ var range = this.scaleRange(scale, cursor);
610
+
611
+ if (range) {
612
+ if (range.min < totalLimits.min) {
613
+ range.min = totalLimits.min;
614
+ }
615
+ if (range.max > totalLimits.max) {
616
+ range.max = totalLimits.max;
617
+ }
618
+ }
619
+
620
+ return range;
621
+ };
622
+
635
623
  DateCategoryAxis.prototype.range = function range () {
636
624
  return this.dataRange.displayRange();
637
625
  };
@@ -3,7 +3,7 @@ import NumericAxis from './numeric-axis';
3
3
  import AxisLabel from './axis-label';
4
4
  import { DateLabelFormats } from './constants';
5
5
 
6
- import { BLACK, DATE, COORD_PRECISION, DEFAULT_PRECISION, X, Y } from '../common/constants';
6
+ import { BLACK, DATE, COORD_PRECISION, DEFAULT_PRECISION } from '../common/constants';
7
7
  import { setDefaultOptions, deepExtend, limitValue, round } from '../common';
8
8
 
9
9
  import autoMajorUnit from './utils/auto-major-unit';
@@ -12,6 +12,8 @@ import ceil from './utils/ceil';
12
12
  import { toDate, toTime, floorDate, ceilDate, duration, addDuration, addTicks, dateDiff, absoluteDateDiff, dateComparer, parseDate, parseDates, firstDay } from '../date-utils';
13
13
  import { HOURS, DAYS, WEEKS, MONTHS, YEARS, TIME_PER_DAY, TIME_PER_WEEK, TIME_PER_MONTH, TIME_PER_YEAR, TIME_PER_UNIT } from '../date-utils/constants';
14
14
 
15
+ var MIN_VALUE_RANGE = 1000;
16
+
15
17
  var DateValueAxis = (function (Axis) {
16
18
  function DateValueAxis(seriesMin, seriesMax, axisOptions, chartService) {
17
19
  var min = toDate(seriesMin);
@@ -61,14 +63,12 @@ var DateValueAxis = (function (Axis) {
61
63
 
62
64
  DateValueAxis.prototype.getTickPositions = function getTickPositions (step) {
63
65
  var options = this.options;
64
- var vertical = options.vertical;
65
- var lineBox = this.lineBox();
66
- var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);
67
- var startEdge = dir === 1 ? 1 : 2;
68
- var start = lineBox[(vertical ? Y : X) + startEdge];
66
+ var ref = this.lineInfo();
67
+ var dir = ref.axisDir;
68
+ var lineSize = ref.lineSize;
69
+ var start = ref.lineStart;
69
70
  var divisions = this.getDivisions(step);
70
71
  var timeRange = dateDiff(options.max, options.min);
71
- var lineSize = vertical ? lineBox.height() : lineBox.width();
72
72
  var scale = lineSize / timeRange;
73
73
  var weekStartDay = options.weekStartDay || 0;
74
74
 
@@ -124,23 +124,23 @@ var DateValueAxis = (function (Axis) {
124
124
  return new AxisLabel(date, text, index, null, labelOptions);
125
125
  };
126
126
 
127
- DateValueAxis.prototype.translateRange = function translateRange (delta, exact) {
127
+ DateValueAxis.prototype.translateRange = function translateRange (delta) {
128
128
  var options = this.options;
129
- var baseUnit = options.baseUnit;
130
- var weekStartDay = options.weekStartDay || 0;
131
129
  var lineBox = this.lineBox();
132
- var size = options.vertical ? lineBox.height() : lineBox.width();
130
+ var vertical = options.vertical;
131
+ var reverse = options.reverse;
132
+ var size = vertical ? lineBox.height() : lineBox.width();
133
133
  var range = this.range();
134
134
  var scale = size / dateDiff(range.max, range.min);
135
- var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);
136
- var from = addTicks(options.min, offset);
137
- var to = addTicks(options.max, offset);
138
135
 
139
- if (!exact) {
140
- from = addDuration(from, 0, baseUnit, weekStartDay);
141
- to = addDuration(to, 0, baseUnit, weekStartDay);
136
+ var offset = round(delta / scale, DEFAULT_PRECISION);
137
+ if ((vertical || reverse) && !(vertical && reverse )) {
138
+ offset = -offset;
142
139
  }
143
140
 
141
+ var from = addTicks(options.min, offset);
142
+ var to = addTicks(options.max, offset);
143
+
144
144
  return {
145
145
  min: from,
146
146
  max: to,
@@ -148,27 +148,6 @@ var DateValueAxis = (function (Axis) {
148
148
  };
149
149
  };
150
150
 
151
- DateValueAxis.prototype.scaleRange = function scaleRange (delta) {
152
- var ref = this.options;
153
- var from = ref.min;
154
- var to = ref.max;
155
- var rounds = Math.abs(delta);
156
-
157
- while (rounds--) {
158
- var range = dateDiff(from, to);
159
- var step = Math.round(range * 0.1);
160
- if (delta < 0) {
161
- from = addTicks(from, step);
162
- to = addTicks(to, -step);
163
- } else {
164
- from = addTicks(from, -step);
165
- to = addTicks(to, step);
166
- }
167
- }
168
-
169
- return { min: from, max: to };
170
- };
171
-
172
151
  DateValueAxis.prototype.shouldRenderNote = function shouldRenderNote (value) {
173
152
  var range = this.range();
174
153
 
@@ -199,8 +178,26 @@ var DateValueAxis = (function (Axis) {
199
178
  };
200
179
  };
201
180
 
202
- DateValueAxis.prototype.zoomRange = function zoomRange (delta) {
203
- var range = this.scaleRange(delta);
181
+ DateValueAxis.prototype.scaleRange = function scaleRange (scale, cursor) {
182
+ var position = Math.abs(this.pointOffset(cursor));
183
+ var delta = (this.options.max - this.options.min) * Math.min(1, scale);
184
+ var minDelta = position * delta;
185
+ var maxDelta = (1 - position) * delta;
186
+ var min = toDate(toTime(this.options.min) + minDelta);
187
+ var max = toDate(toTime(this.options.max) - maxDelta);
188
+
189
+ if (max - min < MIN_VALUE_RANGE) {
190
+ max = toDate(toTime(min) + MIN_VALUE_RANGE);
191
+ }
192
+
193
+ return {
194
+ min: min,
195
+ max: max
196
+ };
197
+ };
198
+
199
+ DateValueAxis.prototype.zoomRange = function zoomRange (scale, cursor) {
200
+ var range = this.scaleRange(scale, cursor);
204
201
  var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));
205
202
  var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));
206
203