From 79a693ea67fc77c21403c737533c5a186d3cb1b2 Mon Sep 17 00:00:00 2001 From: Mark Silverwood <3482679+SlicedSilver@users.noreply.github.com> Date: Mon, 29 Jul 2024 19:22:40 +0100 Subject: [PATCH 01/12] add pane primitives --- .../src/axis-pane-renderer.ts | 4 +- .../template-primitive/src/axis-pane-view.ts | 8 +- .../template-primitive/src/pane-renderer.ts | 4 +- .../template-primitive/src/pane-view.ts | 4 +- .../plugins/anchored-text/anchored-text.ts | 8 +- .../bands-indicator/bands-indicator.ts | 8 +- .../delta-tooltip/crosshair-line-pane.ts | 14 +- .../delta-tooltip/delta-tooltip-pane.ts | 14 +- .../plugins/delta-tooltip/delta-tooltip.ts | 4 +- .../expiring-price-alerts/primitive.ts | 10 +- .../plugins/expiring-price-alerts/renderer.ts | 4 +- .../highlight-bar-crosshair.ts | 14 +- .../image-watermark/image-watermark.ts | 12 +- .../overlay-price-scale.ts | 10 +- .../partial-price-line/partial-price-line.ts | 10 +- .../rectangle-drawing-tool.ts | 16 +- .../session-highlighting.ts | 12 +- .../src/plugins/tooltip/tooltip.ts | 14 +- .../src/plugins/trend-line/trend-line.ts | 8 +- .../plugins/user-price-alerts/pane-view.ts | 12 +- .../user-price-alerts/renderer-base.ts | 4 +- .../user-price-alerts/user-price-alerts.ts | 6 +- .../user-price-lines/user-price-lines.ts | 14 +- .../plugins/vertical-line/vertical-line.ts | 8 +- .../plugins/volume-profile/volume-profile.ts | 8 +- src/api/chart-api.ts | 2 +- src/api/ichart-api.ts | 15 +- src/api/ipane-api.ts | 16 ++ src/api/ipane-primitive-api.ts | 28 +++ src/api/pane-api.ts | 25 ++- src/gui/draw-functions.ts | 25 ++- src/gui/iaxis-view-getters.ts | 6 +- src/gui/ipane-view-getter.ts | 4 +- src/gui/pane-hit-test.ts | 39 +++-- src/gui/pane-widget.ts | 30 ++-- src/gui/price-axis-widget.ts | 15 +- src/gui/time-axis-widget.ts | 10 +- src/model/chart-model.ts | 14 +- src/model/idata-source.ts | 16 +- src/model/ipane-primitive.ts | 143 +++++++++++++++ src/model/iseries-primitive.ts | 60 +------ src/model/pane-primitive-wrapper.ts | 110 ++++++++++++ src/model/pane.ts | 29 +++- src/model/series-primitive-wrapper.ts | 60 ++----- src/model/series.ts | 11 +- .../test-cases/plugins/pane-primitives.js | 152 ++++++++++++++++ .../plugins/pane-primitive-hit-test.js | 163 ++++++++++++++++++ website/docs/migrations/from-v4-to-v5.md | 11 ++ 48 files changed, 925 insertions(+), 289 deletions(-) create mode 100644 src/api/ipane-primitive-api.ts create mode 100644 src/model/ipane-primitive.ts create mode 100644 src/model/pane-primitive-wrapper.ts create mode 100644 tests/e2e/graphics/test-cases/plugins/pane-primitives.js create mode 100644 tests/e2e/interactions/test-cases/plugins/pane-primitive-hit-test.js create mode 100644 website/docs/migrations/from-v4-to-v5.md diff --git a/packages/create-lwc-plugin/template-primitive/src/axis-pane-renderer.ts b/packages/create-lwc-plugin/template-primitive/src/axis-pane-renderer.ts index 2b984b708c..acbfbfd77b 100644 --- a/packages/create-lwc-plugin/template-primitive/src/axis-pane-renderer.ts +++ b/packages/create-lwc-plugin/template-primitive/src/axis-pane-renderer.ts @@ -1,8 +1,8 @@ import { CanvasRenderingTarget2D } from 'fancy-canvas'; -import { ISeriesPrimitivePaneRenderer } from 'lightweight-charts'; +import { IPrimitivePaneRenderer } from 'lightweight-charts'; import { positionsBox } from './helpers/dimensions/positions'; -export class _CLASSNAME_AxisPaneRenderer implements ISeriesPrimitivePaneRenderer { +export class _CLASSNAME_AxisPaneRenderer implements IPrimitivePaneRenderer { _p1: number | null; _p2: number | null; _fillColor: string; diff --git a/packages/create-lwc-plugin/template-primitive/src/axis-pane-view.ts b/packages/create-lwc-plugin/template-primitive/src/axis-pane-view.ts index 0b2caac371..12ba3d7400 100644 --- a/packages/create-lwc-plugin/template-primitive/src/axis-pane-view.ts +++ b/packages/create-lwc-plugin/template-primitive/src/axis-pane-view.ts @@ -1,12 +1,12 @@ import { Coordinate, - ISeriesPrimitivePaneView, - SeriesPrimitivePaneViewZOrder, + IPrimitivePaneView, + PrimitivePaneViewZOrder, } from 'lightweight-charts'; import { _CLASSNAME_AxisPaneRenderer } from './axis-pane-renderer'; import { _CLASSNAME_DataSource } from './data-source'; -abstract class _CLASSNAME_AxisPaneView implements ISeriesPrimitivePaneView { +abstract class _CLASSNAME_AxisPaneView implements IPrimitivePaneView { _source: _CLASSNAME_DataSource; _p1: number | null = null; _p2: number | null = null; @@ -31,7 +31,7 @@ abstract class _CLASSNAME_AxisPaneView implements ISeriesPrimitivePaneView { this._vertical ); } - zOrder(): SeriesPrimitivePaneViewZOrder { + zOrder(): PrimitivePaneViewZOrder { return 'bottom'; } } diff --git a/packages/create-lwc-plugin/template-primitive/src/pane-renderer.ts b/packages/create-lwc-plugin/template-primitive/src/pane-renderer.ts index 663cda036c..f9abeb3c74 100644 --- a/packages/create-lwc-plugin/template-primitive/src/pane-renderer.ts +++ b/packages/create-lwc-plugin/template-primitive/src/pane-renderer.ts @@ -1,9 +1,9 @@ import { CanvasRenderingTarget2D } from 'fancy-canvas'; -import { ISeriesPrimitivePaneRenderer } from 'lightweight-charts'; +import { IPrimitivePaneRenderer } from 'lightweight-charts'; import { ViewPoint } from './pane-view'; import { positionsBox } from './helpers/dimensions/positions'; -export class _CLASSNAME_PaneRenderer implements ISeriesPrimitivePaneRenderer { +export class _CLASSNAME_PaneRenderer implements IPrimitivePaneRenderer { _p1: ViewPoint; _p2: ViewPoint; _fillColor: string; diff --git a/packages/create-lwc-plugin/template-primitive/src/pane-view.ts b/packages/create-lwc-plugin/template-primitive/src/pane-view.ts index 0ddf569262..0fb6d4791b 100644 --- a/packages/create-lwc-plugin/template-primitive/src/pane-view.ts +++ b/packages/create-lwc-plugin/template-primitive/src/pane-view.ts @@ -1,4 +1,4 @@ -import { Coordinate, ISeriesPrimitivePaneView } from 'lightweight-charts'; +import { Coordinate, IPrimitivePaneView } from 'lightweight-charts'; import { _CLASSNAME_PaneRenderer } from './pane-renderer'; import { _CLASSNAME_DataSource } from './data-source'; @@ -7,7 +7,7 @@ export interface ViewPoint { y: Coordinate | null; } -export class _CLASSNAME_PaneView implements ISeriesPrimitivePaneView { +export class _CLASSNAME_PaneView implements IPrimitivePaneView { _source: _CLASSNAME_DataSource; _p1: ViewPoint = { x: null, y: null }; _p2: ViewPoint = { x: null, y: null }; diff --git a/plugin-examples/src/plugins/anchored-text/anchored-text.ts b/plugin-examples/src/plugins/anchored-text/anchored-text.ts index 55d17cdc00..bcab720953 100644 --- a/plugin-examples/src/plugins/anchored-text/anchored-text.ts +++ b/plugin-examples/src/plugins/anchored-text/anchored-text.ts @@ -1,8 +1,8 @@ import { CanvasRenderingTarget2D } from 'fancy-canvas'; import { ISeriesPrimitive, - ISeriesPrimitivePaneRenderer, - ISeriesPrimitivePaneView, + IPrimitivePaneRenderer, + IPrimitivePaneView, SeriesAttachedParameter, Time, } from 'lightweight-charts'; @@ -16,7 +16,7 @@ interface AnchoredTextOptions { color: string; } -class AnchoredTextRenderer implements ISeriesPrimitivePaneRenderer { +class AnchoredTextRenderer implements IPrimitivePaneRenderer { _data: AnchoredTextOptions; constructor(options: AnchoredTextOptions) { @@ -61,7 +61,7 @@ class AnchoredTextRenderer implements ISeriesPrimitivePaneRenderer { } } -class AnchoredTextPaneView implements ISeriesPrimitivePaneView { +class AnchoredTextPaneView implements IPrimitivePaneView { private _source: AnchoredText; constructor(source: AnchoredText) { this._source = source; diff --git a/plugin-examples/src/plugins/bands-indicator/bands-indicator.ts b/plugin-examples/src/plugins/bands-indicator/bands-indicator.ts index 83bcc35874..e02808588b 100644 --- a/plugin-examples/src/plugins/bands-indicator/bands-indicator.ts +++ b/plugin-examples/src/plugins/bands-indicator/bands-indicator.ts @@ -5,8 +5,8 @@ import { Coordinate, DataChangedScope, ISeriesPrimitive, - ISeriesPrimitivePaneRenderer, - ISeriesPrimitivePaneView, + IPrimitivePaneRenderer, + IPrimitivePaneView, LineData, Logical, SeriesAttachedParameter, @@ -25,7 +25,7 @@ interface BandRendererData { lower: Coordinate | number; } -class BandsIndicatorPaneRenderer implements ISeriesPrimitivePaneRenderer { +class BandsIndicatorPaneRenderer implements IPrimitivePaneRenderer { _viewData: BandViewData; constructor(data: BandViewData) { this._viewData = data; @@ -69,7 +69,7 @@ interface BandViewData { options: Required; } -class BandsIndicatorPaneView implements ISeriesPrimitivePaneView { +class BandsIndicatorPaneView implements IPrimitivePaneView { _source: BandsIndicator; _data: BandViewData; diff --git a/plugin-examples/src/plugins/delta-tooltip/crosshair-line-pane.ts b/plugin-examples/src/plugins/delta-tooltip/crosshair-line-pane.ts index 991ad240f1..fda73cbbe9 100644 --- a/plugin-examples/src/plugins/delta-tooltip/crosshair-line-pane.ts +++ b/plugin-examples/src/plugins/delta-tooltip/crosshair-line-pane.ts @@ -1,12 +1,12 @@ import { CanvasRenderingTarget2D } from 'fancy-canvas'; import { - ISeriesPrimitivePaneRenderer, - ISeriesPrimitivePaneView, - SeriesPrimitivePaneViewZOrder, + IPrimitivePaneRenderer, + IPrimitivePaneView, + PrimitivePaneViewZOrder, } from 'lightweight-charts'; import { positionsLine } from '../../helpers/dimensions/positions'; -class TooltipCrosshairLinePaneRenderer implements ISeriesPrimitivePaneRenderer { +class TooltipCrosshairLinePaneRenderer implements IPrimitivePaneRenderer { _data: TooltipCrosshairLineData[]; constructor(data: TooltipCrosshairLineData[]) { @@ -61,7 +61,7 @@ class TooltipCrosshairLinePaneRenderer implements ISeriesPrimitivePaneRenderer { } } -export class MultiTouchCrosshairPaneView implements ISeriesPrimitivePaneView { +export class MultiTouchCrosshairPaneView implements IPrimitivePaneView { _data: TooltipCrosshairLineData[]; constructor(data: TooltipCrosshairLineData[]) { this._data = data; @@ -71,11 +71,11 @@ export class MultiTouchCrosshairPaneView implements ISeriesPrimitivePaneView { this._data = data; } - renderer(): ISeriesPrimitivePaneRenderer | null { + renderer(): IPrimitivePaneRenderer | null { return new TooltipCrosshairLinePaneRenderer(this._data); } - zOrder(): SeriesPrimitivePaneViewZOrder { + zOrder(): PrimitivePaneViewZOrder { return 'top'; } } diff --git a/plugin-examples/src/plugins/delta-tooltip/delta-tooltip-pane.ts b/plugin-examples/src/plugins/delta-tooltip/delta-tooltip-pane.ts index 3c48997d31..ac0d349093 100644 --- a/plugin-examples/src/plugins/delta-tooltip/delta-tooltip-pane.ts +++ b/plugin-examples/src/plugins/delta-tooltip/delta-tooltip-pane.ts @@ -1,8 +1,8 @@ import { CanvasRenderingTarget2D, Size } from 'fancy-canvas'; import { - ISeriesPrimitivePaneRenderer, - ISeriesPrimitivePaneView, - SeriesPrimitivePaneViewZOrder, + IPrimitivePaneRenderer, + IPrimitivePaneView, + PrimitivePaneViewZOrder, } from 'lightweight-charts'; const styles = { @@ -233,7 +233,7 @@ function calculateDrawingPositions( }; } -class DeltaTooltipPaneRenderer implements ISeriesPrimitivePaneRenderer { +class DeltaTooltipPaneRenderer implements IPrimitivePaneRenderer { _data: DeltaTooltipData; constructor(data: DeltaTooltipData) { @@ -347,7 +347,7 @@ class DeltaTooltipPaneRenderer implements ISeriesPrimitivePaneRenderer { } } -export class DeltaTooltipPaneView implements ISeriesPrimitivePaneView { +export class DeltaTooltipPaneView implements IPrimitivePaneView { _data: DeltaTooltipData; constructor(data: Partial) { this._data = { @@ -363,11 +363,11 @@ export class DeltaTooltipPaneView implements ISeriesPrimitivePaneView { }; } - renderer(): ISeriesPrimitivePaneRenderer | null { + renderer(): IPrimitivePaneRenderer | null { return new DeltaTooltipPaneRenderer(this._data); } - zOrder(): SeriesPrimitivePaneViewZOrder { + zOrder(): PrimitivePaneViewZOrder { return 'top'; } } diff --git a/plugin-examples/src/plugins/delta-tooltip/delta-tooltip.ts b/plugin-examples/src/plugins/delta-tooltip/delta-tooltip.ts index 677360b0d5..8f6064ebd8 100644 --- a/plugin-examples/src/plugins/delta-tooltip/delta-tooltip.ts +++ b/plugin-examples/src/plugins/delta-tooltip/delta-tooltip.ts @@ -8,7 +8,7 @@ import { ColorType, LineStyleOptions, AreaStyleOptions, - ISeriesPrimitivePaneView, + IPrimitivePaneView, Time, } from 'lightweight-charts'; import { Delegate, ISubscription } from '../../helpers/delegate'; @@ -58,7 +58,7 @@ export class DeltaTooltipPrimitive implements ISeriesPrimitive