scichart 3.2.528 → 3.2.538

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 (74) hide show
  1. package/Charting/ChartModifiers/CursorModifier.js +0 -1
  2. package/Charting/ChartModifiers/DataPointSelectionModifier.js +2 -5
  3. package/Charting/ChartModifiers/RolloverModifier.d.ts +5 -0
  4. package/Charting/ChartModifiers/RolloverModifier.js +18 -18
  5. package/Charting/ChartModifiers/VerticalSliceModifier.js +8 -5
  6. package/Charting/Model/BaseDataSeries.d.ts +3 -2
  7. package/Charting/Model/BaseDataSeries.js +8 -4
  8. package/Charting/Model/HlcDataSeries.d.ts +2 -1
  9. package/Charting/Model/HlcDataSeries.js +4 -2
  10. package/Charting/Model/IDataSeries.d.ts +2 -1
  11. package/Charting/Model/IPaletteProvider.d.ts +24 -0
  12. package/Charting/Model/IPaletteProvider.js +23 -7
  13. package/Charting/Model/OhlcDataSeries.d.ts +2 -1
  14. package/Charting/Model/OhlcDataSeries.js +4 -2
  15. package/Charting/Model/XyyDataSeries.d.ts +2 -1
  16. package/Charting/Model/XyyDataSeries.js +4 -2
  17. package/Charting/Visuals/Annotations/AnnotationBase.js +3 -3
  18. package/Charting/Visuals/Legend/SciChartLegend.js +4 -4
  19. package/Charting/Visuals/Legend/SciChartLegendBase.js +3 -4
  20. package/Charting/Visuals/RenderableSeries/BaseOhlcRenderableSeries.d.ts +3 -0
  21. package/Charting/Visuals/RenderableSeries/BaseRenderableSeries.d.ts +15 -4
  22. package/Charting/Visuals/RenderableSeries/BaseRenderableSeries.js +55 -8
  23. package/Charting/Visuals/RenderableSeries/BaseStackedCollection.d.ts +7 -0
  24. package/Charting/Visuals/RenderableSeries/BaseStackedCollection.js +22 -3
  25. package/Charting/Visuals/RenderableSeries/BaseStackedRenderableSeries.js +2 -1
  26. package/Charting/Visuals/RenderableSeries/DataLabels/DataLabelProvider.js +0 -6
  27. package/Charting/Visuals/RenderableSeries/DrawingProviders/BandSeriesDrawingProvider.js +18 -13
  28. package/Charting/Visuals/RenderableSeries/DrawingProviders/BaseSeriesDrawingProvider.d.ts +10 -2
  29. package/Charting/Visuals/RenderableSeries/DrawingProviders/BaseSeriesDrawingProvider.js +83 -23
  30. package/Charting/Visuals/RenderableSeries/DrawingProviders/BubbleSeriesDrawingProvider.js +4 -2
  31. package/Charting/Visuals/RenderableSeries/DrawingProviders/ColumnSeriesDrawingProvider.js +1 -0
  32. package/Charting/Visuals/RenderableSeries/DrawingProviders/LineSeriesDrawingProvider.js +22 -16
  33. package/Charting/Visuals/RenderableSeries/DrawingProviders/MountainSeriesDrawingProvider.js +16 -12
  34. package/Charting/Visuals/RenderableSeries/DrawingProviders/PointMarkerDrawingProvider.js +17 -11
  35. package/Charting/Visuals/RenderableSeries/FastErrorBarsRenderableSeries.js +1 -1
  36. package/Charting/Visuals/RenderableSeries/HitTest/OhlcSeriesHitTestProvider.js +78 -0
  37. package/Charting/Visuals/RenderableSeries/HitTest/hitTestHelpers.d.ts +4 -0
  38. package/Charting/Visuals/RenderableSeries/HitTest/hitTestHelpers.js +6 -1
  39. package/Charting/Visuals/RenderableSeries/IBaseRenderableSeriesOptions.d.ts +3 -0
  40. package/Charting/Visuals/RenderableSeries/IRenderableSeries.d.ts +5 -2
  41. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/BaseRenderDataTransform.d.ts +30 -0
  42. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/BaseRenderDataTransform.js +63 -0
  43. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/SplineRenderDataTransform.d.ts +10 -0
  44. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/SplineRenderDataTransform.js +53 -0
  45. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/XyySplineRenderDataTransform.d.ts +10 -0
  46. package/Charting/Visuals/RenderableSeries/RenderDataTransforms/XyySplineRenderDataTransform.js +55 -0
  47. package/Charting/Visuals/RenderableSeries/RolloverModifier/RolloverModifierRenderableSeriesProps.js +2 -0
  48. package/Charting/Visuals/RenderableSeries/SplineBandRenderableSeries.d.ts +13 -8
  49. package/Charting/Visuals/RenderableSeries/SplineBandRenderableSeries.js +63 -46
  50. package/Charting/Visuals/RenderableSeries/SplineLineRenderableSeries.d.ts +12 -13
  51. package/Charting/Visuals/RenderableSeries/SplineLineRenderableSeries.js +60 -52
  52. package/Charting/Visuals/RenderableSeries/SplineMountainRenderableSeries.d.ts +12 -7
  53. package/Charting/Visuals/RenderableSeries/SplineMountainRenderableSeries.js +54 -43
  54. package/Charting/Visuals/RenderableSeries/constants.d.ts +2 -1
  55. package/Charting/Visuals/RenderableSeries/constants.js +1 -0
  56. package/Charting/Visuals/createMaster.d.ts +12 -2
  57. package/Charting/Visuals/createMaster.js +14 -2
  58. package/Core/BuildStamp.d.ts +1 -1
  59. package/Core/BuildStamp.js +2 -2
  60. package/Core/ObservableArray.d.ts +11 -9
  61. package/Core/ObservableArray.js +44 -21
  62. package/_wasm/scichart.browser.js +1 -1
  63. package/_wasm/scichart2d.wasm +0 -0
  64. package/_wasm/scichart3d.wasm +0 -0
  65. package/index.d.ts +9 -0
  66. package/index.dev.js +754 -303
  67. package/index.js +27 -13
  68. package/index.min.js +1 -1
  69. package/package.json +1 -1
  70. package/types/TSciChart.d.ts +4 -0
  71. package/types/YRangeMode.d.ts +10 -0
  72. package/types/YRangeMode.js +14 -0
  73. package/utils/debug.d.ts +2 -0
  74. package/utils/debug.js +17 -0
@@ -735,7 +735,6 @@ var defaultTooltipTemplate = function (seriesInfos, svgAnnotation) {
735
735
  var tooltipFill = svgAnnotation.containerBackground;
736
736
  var tooltipStroke = svgAnnotation.textStroke;
737
737
  var shadowColor = svgAnnotation.cursorModifier.tooltipShadow;
738
- console.log(shadowColor);
739
738
  var blur = "<feGaussianBlur result=\"blurOut\" in=\"offOut\" stdDeviation=\"3\" />";
740
739
  if (shadowColor !== undefined) {
741
740
  var shadowRGBA = (0, parseColor_1.parseColorToTArgb)(shadowColor);
@@ -200,11 +200,8 @@ var DataPointSelectionModifier = /** @class */ (function (_super) {
200
200
  if (!translatedPoint) {
201
201
  return;
202
202
  }
203
- var pointFromTrans = (0, translate_1.translateFromCanvasToSeriesViewRect)(args.mousePoint, this.parentSurface.seriesViewRect);
204
- if (pointFromTrans) {
205
- this.startPoint = pointFromTrans;
206
- this.isClicked = true;
207
- }
203
+ this.startPoint = translatedPoint;
204
+ this.isClicked = true;
208
205
  args.handled = true;
209
206
  };
210
207
  /**
@@ -91,6 +91,11 @@ export interface IRolloverModifierOptions extends IChartModifierBaseOptions {
91
91
  * If this is set greater than the default of zero, the toolip will only show values for points in this radius, rather than all points on the vertical line
92
92
  */
93
93
  hitTestRadius?: number;
94
+ /**
95
+ * Sets if the axis label for the rollover Line should be shown. default false.
96
+ * Customize this futher after the modifier has been created by setting properties on rolloverModifer.rolloverLineAnnotation
97
+ */
98
+ showAxisLabel?: boolean;
94
99
  }
95
100
  /**
96
101
  * The RolloverModifier provides tooltip and cursor behavior on a 2D {@link SciChartSurface}
@@ -118,7 +118,7 @@ var RolloverModifier = /** @class */ (function (_super) {
118
118
  return _this;
119
119
  }
120
120
  RolloverModifier.prototype.createLine = function (options) {
121
- var _a, _b;
121
+ var _a, _b, _c;
122
122
  return new LineAnnotation_1.LineAnnotation({
123
123
  xCoordinateMode: AnnotationBase_1.ECoordinateMode.Pixel,
124
124
  yCoordinateMode: AnnotationBase_1.ECoordinateMode.Pixel,
@@ -126,7 +126,8 @@ var RolloverModifier = /** @class */ (function (_super) {
126
126
  strokeThickness: (_a = options === null || options === void 0 ? void 0 : options.rolloverLineStrokeThickness) !== null && _a !== void 0 ? _a : 2,
127
127
  stroke: (_b = options === null || options === void 0 ? void 0 : options.rolloverLineStroke) !== null && _b !== void 0 ? _b : SciChartSurfaceBase_1.SciChartSurfaceBase.DEFAULT_THEME.cursorLineBrush,
128
128
  xAxisId: this.xAxisId,
129
- yAxisId: this.yAxisId
129
+ yAxisId: this.yAxisId,
130
+ showLabel: (_c = options === null || options === void 0 ? void 0 : options.showAxisLabel) !== null && _c !== void 0 ? _c : false
130
131
  });
131
132
  };
132
133
  /**
@@ -378,6 +379,7 @@ var RolloverModifier = /** @class */ (function (_super) {
378
379
  };
379
380
  /** @inheritDoc */
380
381
  RolloverModifier.prototype.toJSON = function () {
382
+ var _a, _b;
381
383
  var json = _super.prototype.toJSON.call(this);
382
384
  var options = {
383
385
  snapToDataPoint: this.snapToDataPoint,
@@ -389,6 +391,7 @@ var RolloverModifier = /** @class */ (function (_super) {
389
391
  rolloverLineStrokeThickness: this.rolloverLineStrokeThickness,
390
392
  showRolloverLine: this.showRolloverLine,
391
393
  showTooltip: this.showTooltip,
394
+ showAxisLabel: (_b = (_a = this.rolloverLineAnnotation) === null || _a === void 0 ? void 0 : _a.showLabel) !== null && _b !== void 0 ? _b : false,
392
395
  tooltipDataTemplate: this.typeMap.get("tooltipDataTemplate"),
393
396
  tooltipLegendOffsetX: this.tooltipLegendOffsetX,
394
397
  tooltipLegendOffsetY: this.tooltipLegendOffsetY,
@@ -465,12 +468,15 @@ var RolloverModifier = /** @class */ (function (_super) {
465
468
  }
466
469
  this.getRolloverProps(rs).rolloverModifier = this;
467
470
  createAnnotations(rs, this.getRolloverProps(rs), this.getRolloverProps1(rs), this.placementDivIdProperty);
468
- this.parentSurface.modifierAnnotations.add(this.getRolloverProps(rs).marker);
469
- this.parentSurface.modifierAnnotations.add(this.getRolloverProps(rs).tooltip);
470
- if (rs.type === SeriesType_1.ESeriesType.BandSeries) {
471
- this.getRolloverProps1(rs).rolloverModifier = this;
472
- this.parentSurface.modifierAnnotations.add(this.getRolloverProps1(rs).marker);
473
- this.parentSurface.modifierAnnotations.add(this.getRolloverProps1(rs).tooltip);
471
+ var marker = this.getRolloverProps(rs).marker;
472
+ if (!this.parentSurface.modifierAnnotations.contains(marker)) {
473
+ this.parentSurface.modifierAnnotations.add(this.getRolloverProps(rs).marker);
474
+ this.parentSurface.modifierAnnotations.add(this.getRolloverProps(rs).tooltip);
475
+ if (rs.type === SeriesType_1.ESeriesType.BandSeries) {
476
+ this.getRolloverProps1(rs).rolloverModifier = this;
477
+ this.parentSurface.modifierAnnotations.add(this.getRolloverProps1(rs).marker);
478
+ this.parentSurface.modifierAnnotations.add(this.getRolloverProps1(rs).tooltip);
479
+ }
474
480
  }
475
481
  };
476
482
  RolloverModifier.prototype.getRolloverProps = function (rs) {
@@ -789,11 +795,8 @@ var createAnnotations = function (rs, rolloverModifierProps, rolloverModifierPro
789
795
  var _a, _b, _c, _d;
790
796
  if (!rolloverModifierProps.marker) {
791
797
  rolloverModifierProps.marker = new RolloverMarkerSvgAnnotation_1.RolloverMarkerSvgAnnotation(rolloverModifierProps);
792
- // Rollover tooltips for multiple Y-Axes are not supported for stacked series
793
- if (!rs.isStacked) {
794
- rolloverModifierProps.marker.xAxisId = rs.xAxisId;
795
- rolloverModifierProps.marker.yAxisId = rs.yAxisId;
796
- }
798
+ rolloverModifierProps.marker.xAxisId = rs.xAxisId;
799
+ rolloverModifierProps.marker.yAxisId = rs.yAxisId;
797
800
  }
798
801
  if (!rolloverModifierProps.tooltip) {
799
802
  rolloverModifierProps.tooltipTitle = (_b = (_a = rolloverModifierProps.tooltipTitle) !== null && _a !== void 0 ? _a : rs.getDataSeriesName()) !== null && _b !== void 0 ? _b : "";
@@ -803,11 +806,8 @@ var createAnnotations = function (rs, rolloverModifierProps, rolloverModifierPro
803
806
  seriesType: rs.type,
804
807
  placementDivId: placementDivId
805
808
  });
806
- // Rollover tooltips for multiple Y-Axes are not supported for stacked series
807
- if (!rs.isStacked) {
808
- rolloverModifierProps.tooltip.xAxisId = rs.xAxisId;
809
- rolloverModifierProps.tooltip.yAxisId = rs.yAxisId;
810
- }
809
+ rolloverModifierProps.tooltip.xAxisId = rs.xAxisId;
810
+ rolloverModifierProps.tooltip.yAxisId = rs.yAxisId;
811
811
  }
812
812
  if (rs.type === SeriesType_1.ESeriesType.BandSeries) {
813
813
  var bandRs = rs;
@@ -124,19 +124,22 @@ var VerticalSliceModifier = /** @class */ (function (_super) {
124
124
  var xAxis = this.parentSurface.getXAxisById(this.xAxisId);
125
125
  var coordCalc = xAxis.getCurrentCoordinateCalculator();
126
126
  if (this.xCoordinateMode === AnnotationBase_1.ECoordinateMode.Pixel) {
127
- this.x1 = (0, translate_1.translateToNotScaled)(x);
127
+ this.x1 = Math.min(Math.max(xAxis.viewRect.left, (0, translate_1.translateToNotScaled)(x)), xAxis.viewRect.right);
128
128
  }
129
129
  else if (this.xCoordinateMode === AnnotationBase_1.ECoordinateMode.Relative) {
130
- this.x1 =
131
- (x - (this.isVerticalChart() ? xAxis.viewRect.top : xAxis.viewRect.left)) /
132
- coordCalc.viewportDimension;
130
+ var newX = (x - (this.isVerticalChart() ? xAxis.viewRect.top : xAxis.viewRect.left)) /
131
+ coordCalc.viewportDimension;
132
+ this.x1 = Math.min(Math.max(0, newX), 1);
133
133
  }
134
134
  else {
135
135
  // DataValue
136
136
  var xt = this.isVerticalChart()
137
137
  ? (0, translate_1.translateFromCanvasToSeriesViewRectY)(x, this.parentSurface.seriesViewRect)
138
138
  : (0, translate_1.translateFromCanvasToSeriesViewRectX)(x, this.parentSurface.seriesViewRect);
139
- this.x1 = coordCalc.getDataValue(xt);
139
+ var newX = coordCalc.getDataValue(xt);
140
+ if (!isNaN(newX)) {
141
+ this.x1 = newX;
142
+ }
140
143
  }
141
144
  // Consider optional snap to dataPoint here
142
145
  this.update();
@@ -5,6 +5,7 @@ import { NumberRange } from "../../Core/NumberRange";
5
5
  import { NumberArray } from "../../types/NumberArray";
6
6
  import { ESearchMode } from "../../types/SearchMode";
7
7
  import { SCRTDoubleVector, TSciChart } from "../../types/TSciChart";
8
+ import { EYRangeMode } from "../../types/YRangeMode";
8
9
  import { SeriesAnimation } from "../Visuals/RenderableSeries/Animations/SeriesAnimation";
9
10
  import { IDataDistributionCalculator } from "./DataDistributionCalculator/IDataDistributionCalculator";
10
11
  import { IDoubleVectorProvider } from "./DoubleVectorProvider";
@@ -218,7 +219,7 @@ export declare abstract class BaseDataSeries extends DeletableEntity implements
218
219
  /** @inheritDoc */
219
220
  getXRange(dataSeriesValueType?: EDataSeriesValueType): NumberRange;
220
221
  /** @inheritDoc */
221
- getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType): NumberRange;
222
+ getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType, yRangeMode?: EYRangeMode): NumberRange;
222
223
  /** @inheritDoc */
223
224
  getIndicesRange(xRange: NumberRange, isCategoryData?: boolean, downSearchMode?: ESearchMode, upSearchMode?: ESearchMode): NumberRange;
224
225
  /** @inheritDoc */
@@ -289,4 +290,4 @@ export declare abstract class BaseDataSeries extends DeletableEntity implements
289
290
  }
290
291
  /** @ignore */
291
292
  export declare const getIndicesRange: (webAssemblyContext: TSciChart, xValues: SCRTDoubleVector, xRange: NumberRange, isSorted: boolean, downSearchMode?: ESearchMode, upSearchMode?: ESearchMode) => NumberRange;
292
- export declare const getWindowedYRange: (webAssemblyContext: TSciChart, xValues: SCRTDoubleVector, yValues: SCRTDoubleVector, xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis: boolean, isSorted: boolean) => NumberRange;
293
+ export declare const getWindowedYRange: (webAssemblyContext: TSciChart, xValues: SCRTDoubleVector, yValues: SCRTDoubleVector, xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis: boolean, isSorted: boolean, minSearchMode?: ESearchMode, maxSearchMode?: ESearchMode) => NumberRange;
@@ -35,6 +35,7 @@ var Guard_1 = require("../../Core/Guard");
35
35
  var NumberRange_1 = require("../../Core/NumberRange");
36
36
  var BaseType_1 = require("../../types/BaseType");
37
37
  var SearchMode_1 = require("../../types/SearchMode");
38
+ var YRangeMode_1 = require("../../types/YRangeMode");
38
39
  var array_1 = require("../../utils/array");
39
40
  var guid_1 = require("../../utils/guid");
40
41
  var isRealNumber_1 = require("../../utils/isRealNumber");
@@ -338,12 +339,13 @@ var BaseDataSeries = /** @class */ (function (_super) {
338
339
  return new NumberRange_1.NumberRange(0, 0);
339
340
  };
340
341
  /** @inheritDoc */
341
- BaseDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType) {
342
+ BaseDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType, yRangeMode) {
342
343
  if (isXCategoryAxis === void 0) { isXCategoryAxis = false; }
343
344
  if (dataSeriesValueType === void 0) { dataSeriesValueType = IDataSeries_1.EDataSeriesValueType.Default; }
345
+ if (yRangeMode === void 0) { yRangeMode = YRangeMode_1.EYRangeMode.Visible; }
344
346
  var xValues = this.getXValues(dataSeriesValueType);
345
347
  var yValues = this.getYValues(dataSeriesValueType);
346
- return (0, exports.getWindowedYRange)(this.webAssemblyContext, xValues, yValues, xRange, getPositiveRange, isXCategoryAxis, this.dataDistributionCalculator.isSortedAscending);
348
+ return (0, exports.getWindowedYRange)(this.webAssemblyContext, xValues, yValues, xRange, getPositiveRange, isXCategoryAxis, this.dataDistributionCalculator.isSortedAscending, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundUp : SearchMode_1.ESearchMode.RoundDown, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundDown : SearchMode_1.ESearchMode.RoundUp);
347
349
  };
348
350
  /** @inheritDoc */
349
351
  BaseDataSeries.prototype.getIndicesRange = function (xRange, isCategoryData, downSearchMode, upSearchMode) {
@@ -703,7 +705,9 @@ var getIndicesRange = function (webAssemblyContext, xValues, xRange, isSorted, d
703
705
  };
704
706
  exports.getIndicesRange = getIndicesRange;
705
707
  var getWindowedYRange = function (webAssemblyContext, xValues, yValues, xRange, getPositiveRange, isXCategoryAxis, // false
706
- isSorted) {
708
+ isSorted, minSearchMode, maxSearchMode) {
709
+ if (minSearchMode === void 0) { minSearchMode = SearchMode_1.ESearchMode.RoundUp; }
710
+ if (maxSearchMode === void 0) { maxSearchMode = SearchMode_1.ESearchMode.RoundDown; }
707
711
  // TODO: getPositiveRange
708
712
  var count = xValues.size();
709
713
  // if one point
@@ -714,7 +718,7 @@ isSorted) {
714
718
  }
715
719
  var indicesRange = isXCategoryAxis
716
720
  ? xRange
717
- : (0, exports.getIndicesRange)(webAssemblyContext, xValues, xRange, isSorted, SearchMode_1.ESearchMode.RoundUp, SearchMode_1.ESearchMode.RoundDown);
721
+ : (0, exports.getIndicesRange)(webAssemblyContext, xValues, xRange, isSorted, minSearchMode, maxSearchMode);
718
722
  var iMin = Math.max(Math.floor(indicesRange.min), 0);
719
723
  var iMax = Math.min(Math.ceil(indicesRange.max), count - 1);
720
724
  if (iMax < iMin) {
@@ -1,6 +1,7 @@
1
1
  import { NumberRange } from "../../Core/NumberRange";
2
2
  import { NumberArray } from "../../types/NumberArray";
3
3
  import { SCRTDoubleVector, TSciChart } from "../../types/TSciChart";
4
+ import { EYRangeMode } from "../../types/YRangeMode";
4
5
  import { SeriesAnimation } from "../Visuals/RenderableSeries/Animations/SeriesAnimation";
5
6
  import { BaseDataSeries, IBaseDataSeriesOptions } from "./BaseDataSeries";
6
7
  import { EDataSeriesType, EDataSeriesValueType } from "./IDataSeries";
@@ -172,7 +173,7 @@ export declare class HlcDataSeries extends BaseDataSeries {
172
173
  /** @inheritDoc */
173
174
  getXRange(dataSeriesValueType?: EDataSeriesValueType, isHorizontalDirection?: boolean, hasHighCap?: boolean, hasLowCap?: boolean): NumberRange;
174
175
  /** @inheritDoc */
175
- getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType, isHorizontalDirection?: boolean, hasHighCap?: boolean, hasLowCap?: boolean): NumberRange;
176
+ getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType, yRangeMode?: EYRangeMode, isHorizontalDirection?: boolean, hasHighCap?: boolean, hasLowCap?: boolean): NumberRange;
176
177
  /** @inheritDoc */
177
178
  delete(): void;
178
179
  /** @inheritDoc */
@@ -21,6 +21,7 @@ var Guard_1 = require("../../Core/Guard");
21
21
  var NumberRange_1 = require("../../Core/NumberRange");
22
22
  var NumberArray_1 = require("../../types/NumberArray");
23
23
  var SearchMode_1 = require("../../types/SearchMode");
24
+ var YRangeMode_1 = require("../../types/YRangeMode");
24
25
  var appendDoubleVectorFromJsArray_1 = require("../../utils/ccall/appendDoubleVectorFromJsArray");
25
26
  var isRealNumber_1 = require("../../utils/isRealNumber");
26
27
  var animationHelpers_1 = require("../Visuals/RenderableSeries/Animations/animationHelpers");
@@ -392,9 +393,10 @@ var HlcDataSeries = /** @class */ (function (_super) {
392
393
  return new NumberRange_1.NumberRange(0, 0);
393
394
  };
394
395
  /** @inheritDoc */
395
- HlcDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType, isHorizontalDirection, hasHighCap, hasLowCap) {
396
+ HlcDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType, yRangeMode, isHorizontalDirection, hasHighCap, hasLowCap) {
396
397
  if (isXCategoryAxis === void 0) { isXCategoryAxis = false; }
397
398
  if (dataSeriesValueType === void 0) { dataSeriesValueType = IDataSeries_1.EDataSeriesValueType.Default; }
399
+ if (yRangeMode === void 0) { yRangeMode = YRangeMode_1.EYRangeMode.Visible; }
398
400
  if (isHorizontalDirection === void 0) { isHorizontalDirection = false; }
399
401
  var _a = this.getHlcValues(dataSeriesValueType), hValues = _a.hValues, lValues = _a.lValues, yValues = _a.yValues;
400
402
  // TODO: getPositiveRange
@@ -412,7 +414,7 @@ var HlcDataSeries = /** @class */ (function (_super) {
412
414
  }
413
415
  var indicesRange = isXCategoryAxis
414
416
  ? xRange
415
- : this.getIndicesRange(xRange, false, SearchMode_1.ESearchMode.RoundUp, SearchMode_1.ESearchMode.RoundDown);
417
+ : this.getIndicesRange(xRange, false, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundUp : SearchMode_1.ESearchMode.RoundDown, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundDown : SearchMode_1.ESearchMode.RoundUp);
416
418
  var yMin = Number.MAX_VALUE;
417
419
  var yMax = Number.MIN_VALUE;
418
420
  var iMin = Math.max(Math.floor(indicesRange.min), 0);
@@ -4,6 +4,7 @@ import { IDeletable } from "../../Core/IDeletable";
4
4
  import { NumberRange } from "../../Core/NumberRange";
5
5
  import { ESearchMode } from "../../types/SearchMode";
6
6
  import { SCRTDoubleVector } from "../../types/TSciChart";
7
+ import { EYRangeMode } from "../../types/YRangeMode";
7
8
  import { IDataDistributionCalculator } from "./DataDistributionCalculator/IDataDistributionCalculator";
8
9
  /**
9
10
  * Defines {@link BaseDataSeries | DataSeries} types available within SciChart's
@@ -215,7 +216,7 @@ export interface IDataSeries extends IDeletable {
215
216
  * an axis type which measures by x-index not x-value
216
217
  * @param dataSeriesValueType The data series values to use {@link EDataSeriesValueType}
217
218
  */
218
- getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isCategoryAxis: boolean, dataSeriesValueType?: EDataSeriesValueType): NumberRange;
219
+ getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isCategoryAxis: boolean, dataSeriesValueType?: EDataSeriesValueType, yRangeMode?: EYRangeMode): NumberRange;
219
220
  /**
220
221
  * Convert the object to a definition that can be serialized to JSON, or used directly with the builder api
221
222
  * @param excludeData if set true, data values will not be included in the json.
@@ -1,4 +1,6 @@
1
1
  import { TPaletteProviderDefinition } from "../../Builder/buildSeries";
2
+ import { SCRTDoubleVector } from "../../types/TSciChart";
3
+ import { TPalettingState } from "../Visuals/RenderableSeries/DrawingProviders/BaseSeriesDrawingProvider";
2
4
  import { IRenderableSeries } from "../Visuals/RenderableSeries/IRenderableSeries";
3
5
  import { IPointMetadata } from "./IPointMetadata";
4
6
  /**
@@ -19,9 +21,22 @@ export interface IPaletteProvider {
19
21
  * Called when the PaletteProvider instance is detached from a {@link BaseRenderableSeries | RenderableSeries}.
20
22
  */
21
23
  onDetached(): void;
24
+ /**
25
+ * Set true if the paletting does not depend on the visible Range. This prevents the palette being recalculated if only the visible range changes.
26
+ */
27
+ isRangeIndependant?: boolean;
28
+ /**
29
+ * Called once before the per-vertex loop starts.
30
+ * @Returns true if paletting should be forced to run. If this exists and returns false, the existing paletting state is reused if possible.
31
+ * Use this to force the palette to be recalculated if some external parameter to it changes.
32
+ */
33
+ shouldUpdatePalette?(): boolean;
22
34
  /** Convert the object to a definition that can be serialized to JSON, or used directly with the builder api */
23
35
  toJSON?(): TPaletteProviderDefinition;
24
36
  }
37
+ export interface IAdvancedPaletteProvider extends IPaletteProvider {
38
+ applyPaletting(palettingState: TPalettingState, xValues: SCRTDoubleVector, yValues: SCRTDoubleVector, indexes: SCRTDoubleVector, startIndex: number, count: number): void;
39
+ }
25
40
  export declare enum EStrokePaletteMode {
26
41
  GRADIENT = "GRADIENT",
27
42
  SOLID = "SOLID"
@@ -122,6 +137,7 @@ export declare class DefaultPaletteProvider implements IStrokePaletteProvider, I
122
137
  static createEmpty(): DefaultPaletteProvider;
123
138
  strokePaletteMode: EStrokePaletteMode;
124
139
  fillPaletteMode: EFillPaletteMode;
140
+ protected parentSeries: IRenderableSeries;
125
141
  /**
126
142
  * @inheritDoc
127
143
  */
@@ -130,6 +146,14 @@ export declare class DefaultPaletteProvider implements IStrokePaletteProvider, I
130
146
  * @inheritDoc
131
147
  */
132
148
  onDetached(): void;
149
+ /**
150
+ * @inheritDoc
151
+ */
152
+ get isRangeIndependant(): boolean;
153
+ /**
154
+ * @inheritDoc
155
+ */
156
+ shouldUpdatePalette(): boolean;
133
157
  /**
134
158
  * @inheritDoc
135
159
  */
@@ -30,8 +30,6 @@ var DefaultPaletteProvider = /** @class */ (function () {
30
30
  }
31
31
  DefaultPaletteProvider.createEmpty = function () {
32
32
  var pp = new DefaultPaletteProvider();
33
- pp.onAttached = undefined;
34
- pp.onDetached = undefined;
35
33
  pp.overrideFillArgb = undefined;
36
34
  pp.overrideStrokeArgb = undefined;
37
35
  pp.overridePointMarkerArgb = undefined;
@@ -40,13 +38,31 @@ var DefaultPaletteProvider = /** @class */ (function () {
40
38
  /**
41
39
  * @inheritDoc
42
40
  */
43
- // tslint:disable-next-line:no-empty
44
- DefaultPaletteProvider.prototype.onAttached = function (parentSeries) { };
41
+ DefaultPaletteProvider.prototype.onAttached = function (parentSeries) {
42
+ this.parentSeries = parentSeries;
43
+ };
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ DefaultPaletteProvider.prototype.onDetached = function () {
48
+ this.parentSeries = undefined;
49
+ };
50
+ Object.defineProperty(DefaultPaletteProvider.prototype, "isRangeIndependant", {
51
+ /**
52
+ * @inheritDoc
53
+ */
54
+ get: function () {
55
+ return false;
56
+ },
57
+ enumerable: false,
58
+ configurable: true
59
+ });
45
60
  /**
46
61
  * @inheritDoc
47
62
  */
48
- // tslint:disable-next-line:no-empty
49
- DefaultPaletteProvider.prototype.onDetached = function () { };
63
+ DefaultPaletteProvider.prototype.shouldUpdatePalette = function () {
64
+ return false;
65
+ };
50
66
  /**
51
67
  * @inheritDoc
52
68
  */
@@ -66,7 +82,7 @@ var DefaultPaletteProvider = /** @class */ (function () {
66
82
  return undefined;
67
83
  };
68
84
  DefaultPaletteProvider.prototype.toJSON = function () {
69
- // No need to serialise this as it is created automatiicaly if a palletprovider is not specified.
85
+ // No need to serialise this as it is created automaticaly if a palletprovider is not specified.
70
86
  return undefined;
71
87
  };
72
88
  return DefaultPaletteProvider;
@@ -1,6 +1,7 @@
1
1
  import { NumberRange } from "../../Core/NumberRange";
2
2
  import { NumberArray } from "../../types/NumberArray";
3
3
  import { SCRTDoubleVector, TSciChart } from "../../types/TSciChart";
4
+ import { EYRangeMode } from "../../types/YRangeMode";
4
5
  import { SeriesAnimation } from "../Visuals/RenderableSeries/Animations/SeriesAnimation";
5
6
  import { BaseDataSeries, IBaseDataSeriesOptions } from "./BaseDataSeries";
6
7
  import { EDataSeriesType, EDataSeriesValueType } from "./IDataSeries";
@@ -199,7 +200,7 @@ export declare class OhlcDataSeries extends BaseDataSeries {
199
200
  /** @inheritDoc */
200
201
  delete(): void;
201
202
  /** @inheritDoc */
202
- getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType): NumberRange;
203
+ getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType, yRangeMode?: EYRangeMode): NumberRange;
203
204
  /** @inheritDoc */
204
205
  createAnimationVectors(): void;
205
206
  /** @inheritDoc */
@@ -21,6 +21,7 @@ var Guard_1 = require("../../Core/Guard");
21
21
  var NumberRange_1 = require("../../Core/NumberRange");
22
22
  var NumberArray_1 = require("../../types/NumberArray");
23
23
  var SearchMode_1 = require("../../types/SearchMode");
24
+ var YRangeMode_1 = require("../../types/YRangeMode");
24
25
  var appendDoubleVectorFromJsArray_1 = require("../../utils/ccall/appendDoubleVectorFromJsArray");
25
26
  var animationHelpers_1 = require("../Visuals/RenderableSeries/Animations/animationHelpers");
26
27
  var BaseDataSeries_1 = require("./BaseDataSeries");
@@ -353,9 +354,10 @@ var OhlcDataSeries = /** @class */ (function (_super) {
353
354
  _super.prototype.delete.call(this);
354
355
  };
355
356
  /** @inheritDoc */
356
- OhlcDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType) {
357
+ OhlcDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType, yRangeMode) {
357
358
  if (isXCategoryAxis === void 0) { isXCategoryAxis = false; }
358
359
  if (dataSeriesValueType === void 0) { dataSeriesValueType = IDataSeries_1.EDataSeriesValueType.Default; }
360
+ if (yRangeMode === void 0) { yRangeMode = YRangeMode_1.EYRangeMode.Visible; }
359
361
  var _a = this.getOHLCValues(dataSeriesValueType), closeValues = _a.closeValues, highValues = _a.highValues, lowValues = _a.lowValues;
360
362
  if (this.count() === 1) {
361
363
  var y = closeValues.get(0);
@@ -363,7 +365,7 @@ var OhlcDataSeries = /** @class */ (function (_super) {
363
365
  }
364
366
  var indicesRange = isXCategoryAxis
365
367
  ? xRange
366
- : this.getIndicesRange(xRange, false, SearchMode_1.ESearchMode.RoundUp, SearchMode_1.ESearchMode.RoundDown);
368
+ : this.getIndicesRange(xRange, false, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundUp : SearchMode_1.ESearchMode.RoundDown, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundDown : SearchMode_1.ESearchMode.RoundUp);
367
369
  var yMin = Number.MAX_VALUE;
368
370
  var yMax = Number.MIN_VALUE;
369
371
  var iMin = Math.max(indicesRange.min, 0);
@@ -1,6 +1,7 @@
1
1
  import { NumberRange } from "../../Core/NumberRange";
2
2
  import { NumberArray } from "../../types/NumberArray";
3
3
  import { SCRTDoubleVector, TSciChart } from "../../types/TSciChart";
4
+ import { EYRangeMode } from "../../types/YRangeMode";
4
5
  import { SeriesAnimation } from "../Visuals/RenderableSeries/Animations/SeriesAnimation";
5
6
  import { BaseDataSeries, IBaseDataSeriesOptions } from "./BaseDataSeries";
6
7
  import { EDataSeriesType, EDataSeriesValueType } from "./IDataSeries";
@@ -148,7 +149,7 @@ export declare class XyyDataSeries extends BaseDataSeries {
148
149
  */
149
150
  clear(): void;
150
151
  /** @inheritDoc */
151
- getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType): NumberRange;
152
+ getWindowedYRange(xRange: NumberRange, getPositiveRange: boolean, isXCategoryAxis?: boolean, dataSeriesValueType?: EDataSeriesValueType, yRangeMode?: EYRangeMode): NumberRange;
152
153
  /** @inheritDoc */
153
154
  delete(): void;
154
155
  createAnimationVectors(): void;
@@ -21,6 +21,7 @@ var Guard_1 = require("../../Core/Guard");
21
21
  var NumberRange_1 = require("../../Core/NumberRange");
22
22
  var NumberArray_1 = require("../../types/NumberArray");
23
23
  var SearchMode_1 = require("../../types/SearchMode");
24
+ var YRangeMode_1 = require("../../types/YRangeMode");
24
25
  var appendDoubleVectorFromJsArray_1 = require("../../utils/ccall/appendDoubleVectorFromJsArray");
25
26
  var isRealNumber_1 = require("../../utils/isRealNumber");
26
27
  var animationHelpers_1 = require("../Visuals/RenderableSeries/Animations/animationHelpers");
@@ -290,9 +291,10 @@ var XyyDataSeries = /** @class */ (function (_super) {
290
291
  }
291
292
  };
292
293
  /** @inheritDoc */
293
- XyyDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType) {
294
+ XyyDataSeries.prototype.getWindowedYRange = function (xRange, getPositiveRange, isXCategoryAxis, dataSeriesValueType, yRangeMode) {
294
295
  if (isXCategoryAxis === void 0) { isXCategoryAxis = false; }
295
296
  if (dataSeriesValueType === void 0) { dataSeriesValueType = IDataSeries_1.EDataSeriesValueType.Default; }
297
+ if (yRangeMode === void 0) { yRangeMode = YRangeMode_1.EYRangeMode.Visible; }
296
298
  var _a = this.getYY1Values(dataSeriesValueType), yValues = _a.yValues, y1Values = _a.y1Values;
297
299
  // TODO: getPositiveRange
298
300
  // if one point
@@ -303,7 +305,7 @@ var XyyDataSeries = /** @class */ (function (_super) {
303
305
  }
304
306
  var indicesRange = isXCategoryAxis
305
307
  ? xRange
306
- : this.getIndicesRange(xRange, false, SearchMode_1.ESearchMode.RoundUp, SearchMode_1.ESearchMode.RoundDown);
308
+ : this.getIndicesRange(xRange, false, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundUp : SearchMode_1.ESearchMode.RoundDown, yRangeMode === YRangeMode_1.EYRangeMode.Visible ? SearchMode_1.ESearchMode.RoundDown : SearchMode_1.ESearchMode.RoundUp);
307
309
  var iMin = Math.max(Math.floor(indicesRange.min), 0);
308
310
  var iMax = Math.min(Math.ceil(indicesRange.max), this.count() - 1);
309
311
  if (iMax < iMin) {
@@ -809,8 +809,8 @@ var AnnotationBase = /** @class */ (function (_super) {
809
809
  case ECoordinateMode.Relative: {
810
810
  // Value is 0.5 means 50% of the viewport size
811
811
  return this.isSvgAnnotation
812
- ? (value * calculator.viewportDimension) / DpiHelper_1.DpiHelper.PIXEL_RATIO
813
- : value * calculator.viewportDimension;
812
+ ? (value * calculator.viewportDimension + calculator.offset) / DpiHelper_1.DpiHelper.PIXEL_RATIO
813
+ : value * calculator.viewportDimension + calculator.offset;
814
814
  }
815
815
  default: {
816
816
  throw new Error("AnnotationBase.getCoordinate with CoordinateMode.".concat(coordinateMode, " is not implemented"));
@@ -948,7 +948,7 @@ var AnnotationBase = /** @class */ (function (_super) {
948
948
  return value !== undefined && value !== null ? calculator.getDataValue(value) : undefined;
949
949
  }
950
950
  case ECoordinateMode.Relative: {
951
- return value / calculator.viewportDimension;
951
+ return (value - calculator.offset) / calculator.viewportDimension;
952
952
  }
953
953
  default: {
954
954
  throw new Error("Not implemented");
@@ -125,9 +125,9 @@ var SciChartLegend = /** @class */ (function (_super) {
125
125
  };
126
126
  /** @inheritDoc */
127
127
  SciChartLegend.prototype.getInnerHTML = function () {
128
- var _a, _b;
129
- var backgroundColor = (_a = this.backgroundColor) !== null && _a !== void 0 ? _a : this.parentSurfaceProperty.themeProvider.legendBackgroundBrush;
130
- var color = (_b = this.textColor) !== null && _b !== void 0 ? _b : this.parentSurfaceProperty.themeProvider.labelForegroundBrush;
128
+ var _a, _b, _c, _d, _e, _f;
129
+ var backgroundColor = (_a = this.backgroundColor) !== null && _a !== void 0 ? _a : (_c = (_b = this.parentSurfaceProperty) === null || _b === void 0 ? void 0 : _b.themeProvider) === null || _c === void 0 ? void 0 : _c.legendBackgroundBrush;
130
+ var color = (_d = this.textColor) !== null && _d !== void 0 ? _d : (_f = (_e = this.parentSurfaceProperty) === null || _e === void 0 ? void 0 : _e.themeProvider) === null || _f === void 0 ? void 0 : _f.labelForegroundBrush;
131
131
  var legendItems = this.renderableSeriesArray.map(function (rs, index) {
132
132
  var _a;
133
133
  return ({
@@ -138,7 +138,7 @@ var SciChartLegend = /** @class */ (function (_super) {
138
138
  gradient: undefined
139
139
  });
140
140
  });
141
- var _c = this.parentSurfaceProperty.getSeriesViewRectPadding(false), left = _c.left, top = _c.top, right = _c.right, bottom = _c.bottom;
141
+ var _g = this.parentSurfaceProperty.getSeriesViewRectPadding(false), left = _g.left, top = _g.top, right = _g.right, bottom = _g.bottom;
142
142
  var margin = this.isExternal()
143
143
  ? new Thickness_1.Thickness(this.margin, this.margin, this.margin, this.margin)
144
144
  : new Thickness_1.Thickness(top + this.margin, right + this.margin, bottom + this.margin, left + this.margin);
@@ -81,6 +81,7 @@ var SciChartLegendBase = /** @class */ (function (_super) {
81
81
  // No default here as need theme from parent surface
82
82
  _this.backgroundColorProperty = options === null || options === void 0 ? void 0 : options.backgroundColor;
83
83
  _this.textColorProperty = options === null || options === void 0 ? void 0 : options.textColor;
84
+ _this.update = _this.update.bind(_this);
84
85
  return _this;
85
86
  }
86
87
  SciChartLegendBase.prototype.setInvalidateParentSurface = function (value) {
@@ -108,16 +109,14 @@ var SciChartLegendBase = /** @class */ (function (_super) {
108
109
  * @param sciChartSurface
109
110
  */
110
111
  SciChartLegendBase.prototype.attachTo = function (sciChartSurface) {
111
- var _this = this;
112
112
  this.setParentSurface(sciChartSurface);
113
113
  this.setRootDiv(sciChartSurface.domDivContainer);
114
114
  this.setInvalidateParentSurface(sciChartSurface.invalidateElement);
115
- sciChartSurface.rendered.subscribe(function () {
116
- _this.update();
117
- });
115
+ sciChartSurface.rendered.subscribe(this.update);
118
116
  };
119
117
  SciChartLegendBase.prototype.detach = function () {
120
118
  this.setRootDiv(undefined);
119
+ this.parentSurfaceProperty.rendered.unsubscribe(this.update);
121
120
  this.setInvalidateParentSurface(undefined);
122
121
  this.setParentSurface(undefined);
123
122
  this.delete();
@@ -8,8 +8,11 @@ import { BaseRenderableSeries } from "./BaseRenderableSeries";
8
8
  import { IHitTestProvider } from "./HitTest/IHitTestProvider";
9
9
  import { IBaseRenderableSeriesOptions } from "./IBaseRenderableSeriesOptions";
10
10
  export interface IBaseOhlcRenderableSeriesOptions extends IBaseRenderableSeriesOptions {
11
+ /** Sets the stoke when candlestick close is greater than open, as an HTML color code */
11
12
  strokeUp?: string;
13
+ /** Sets the stoke when candlestick close is less than open, as an HTML color code */
12
14
  strokeDown?: string;
15
+ /** Sets the width of candles as a fraction of available space. Valid values range from 0.0 - 1.0 */
13
16
  dataPointWidth?: number;
14
17
  }
15
18
  export declare abstract class BaseOhlcRenderableSeries extends BaseRenderableSeries {