@tradecanvas/core 1.2.0 → 1.4.0
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.
- package/LICENSE +21 -21
- package/README.md +4 -6
- package/dist/axis/GridRenderer.d.ts.map +1 -1
- package/dist/axis/PriceAxis.d.ts +6 -0
- package/dist/axis/PriceAxis.d.ts.map +1 -1
- package/dist/axis/TimeAxis.d.ts +2 -0
- package/dist/axis/TimeAxis.d.ts.map +1 -1
- package/dist/charts/AreaRenderer.d.ts.map +1 -1
- package/dist/charts/BarRenderer.d.ts.map +1 -1
- package/dist/charts/BaselineRenderer.d.ts.map +1 -1
- package/dist/charts/CandlestickRenderer.d.ts.map +1 -1
- package/dist/charts/EquivolumeRenderer.d.ts.map +1 -1
- package/dist/charts/HLCAreaRenderer.d.ts.map +1 -1
- package/dist/charts/HollowCandleRenderer.d.ts.map +1 -1
- package/dist/charts/KagiRenderer.d.ts.map +1 -1
- package/dist/charts/LineRenderer.d.ts.map +1 -1
- package/dist/charts/LineWithMarkersRenderer.d.ts.map +1 -1
- package/dist/charts/MarketProfileRenderer.d.ts.map +1 -1
- package/dist/charts/PivotMarkersRenderer.d.ts.map +1 -1
- package/dist/charts/PointAndFigureRenderer.d.ts.map +1 -1
- package/dist/charts/RenkoRenderer.d.ts.map +1 -1
- package/dist/charts/StepLineRenderer.d.ts.map +1 -1
- package/dist/charts/VolumeCandleRenderer.d.ts.map +1 -1
- package/dist/charts/VolumeProfileRenderer.d.ts.map +1 -1
- package/dist/drawings/DrawingManager.d.ts +60 -0
- package/dist/drawings/DrawingManager.d.ts.map +1 -1
- package/dist/drawings/tools/AnchoredVWAP.d.ts +7 -0
- package/dist/drawings/tools/AnchoredVWAP.d.ts.map +1 -1
- package/dist/drawings/tools/RiskReward.d.ts +1 -1
- package/dist/engine/LayerManager.d.ts +8 -1
- package/dist/engine/LayerManager.d.ts.map +1 -1
- package/dist/engine/RenderEngine.d.ts +22 -4
- package/dist/engine/RenderEngine.d.ts.map +1 -1
- package/dist/engine/RenderLoop.d.ts.map +1 -1
- package/dist/features/AlertManager.d.ts.map +1 -1
- package/dist/features/ChartState.d.ts +18 -12
- package/dist/features/ChartState.d.ts.map +1 -1
- package/dist/features/MeasureOverlay.d.ts +1 -1
- package/dist/features/MeasureOverlay.d.ts.map +1 -1
- package/dist/features/ReplayManager.d.ts +16 -1
- package/dist/features/ReplayManager.d.ts.map +1 -1
- package/dist/features/SelectionBoxOverlay.d.ts +29 -0
- package/dist/features/SelectionBoxOverlay.d.ts.map +1 -0
- package/dist/features/UndoRedoManager.d.ts +3 -1
- package/dist/features/UndoRedoManager.d.ts.map +1 -1
- package/dist/features/index.d.ts +4 -1
- package/dist/features/index.d.ts.map +1 -1
- package/dist/finance/GaugeRenderer.d.ts +39 -1
- package/dist/finance/GaugeRenderer.d.ts.map +1 -1
- package/dist/index.cjs +11 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2509 -1737
- package/dist/index.js.map +1 -1
- package/dist/indicators/IndicatorEngine.d.ts +2 -0
- package/dist/indicators/IndicatorEngine.d.ts.map +1 -1
- package/dist/indicators/panel/VolumeProfile.d.ts.map +1 -1
- package/dist/interaction/AxisDragHandler.d.ts +1 -1
- package/dist/interaction/CrosshairHandler.d.ts +25 -1
- package/dist/interaction/CrosshairHandler.d.ts.map +1 -1
- package/dist/interaction/CrosshairTooltip.d.ts +50 -15
- package/dist/interaction/CrosshairTooltip.d.ts.map +1 -1
- package/dist/interaction/InteractionManager.d.ts +26 -1
- package/dist/interaction/InteractionManager.d.ts.map +1 -1
- package/dist/interaction/PanHandler.d.ts +11 -3
- package/dist/interaction/PanHandler.d.ts.map +1 -1
- package/dist/interaction/index.d.ts +2 -1
- package/dist/interaction/index.d.ts.map +1 -1
- package/dist/realtime/CurrentPriceLine.d.ts +1 -0
- package/dist/realtime/CurrentPriceLine.d.ts.map +1 -1
- package/dist/trading/OrderRenderer.d.ts +1 -1
- package/dist/trading/PositionRenderer.d.ts +1 -1
- package/dist/trading/TradingManager.d.ts +4 -2
- package/dist/trading/TradingManager.d.ts.map +1 -1
- package/dist/trading/TradingRenderer.d.ts +1 -1
- package/dist/ui/ChartLegend.d.ts +7 -1
- package/dist/ui/ChartLegend.d.ts.map +1 -1
- package/dist/viewport/ScaleMapping.d.ts +40 -4
- package/dist/viewport/ScaleMapping.d.ts.map +1 -1
- package/dist/viewport/Viewport.d.ts +30 -1
- package/dist/viewport/Viewport.d.ts.map +1 -1
- package/dist/viewport/index.d.ts +3 -1
- package/dist/viewport/index.d.ts.map +1 -1
- package/dist/viewport/rangePresets.d.ts +10 -0
- package/dist/viewport/rangePresets.d.ts.map +1 -0
- package/package.json +3 -2
|
@@ -37,6 +37,8 @@ export declare class IndicatorEngine {
|
|
|
37
37
|
descriptor: IndicatorDescriptor;
|
|
38
38
|
visible: boolean;
|
|
39
39
|
}[];
|
|
40
|
+
/** The style the indicator draws with (a copy). */
|
|
41
|
+
getIndicatorStyle(instanceId: string): ResolvedIndicatorStyle | null;
|
|
40
42
|
/** Update indicator style (colors, line widths) at runtime */
|
|
41
43
|
updateIndicatorStyle(instanceId: string, style: Partial<ResolvedIndicatorStyle>): void;
|
|
42
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndicatorEngine.d.ts","sourceRoot":"","sources":["../../src/indicators/IndicatorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"IndicatorEngine.d.ts","sourceRoot":"","sources":["../../src/indicators/IndicatorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;AAY9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,SAAS,CAAwC;IAEzD,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAIvC,sBAAsB,IAAI,mBAAmB,EAAE;IAI/C,YAAY,CACV,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,EACtD,IAAI,CAAC,EAAE,UAAU,GAChB,MAAM;IAkCT,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAS/G,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMtC;;;;;;;;;OASG;IACH,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWrD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIrD,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQ5E,WAAW,CACT,GAAG,EAAE,wBAAwB,EAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,GACtB,IAAI;IAMP,kDAAkD;IAClD,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI9D,qFAAqF;IACrF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAOhE,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAItC,sDAAsD;IACtD,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAItE,oEAAoE;IACpE,mBAAmB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,UAAU,EAAE,mBAAmB,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE;IAc/I,mDAAmD;IACnD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAMpE,8DAA8D;IAC9D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAMtF;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA6BnF,kBAAkB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,mBAAmB,CAAA;KAAE,EAAE;CAShF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VolumeProfile.d.ts","sourceRoot":"","sources":["../../../src/indicators/panel/VolumeProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAkB,sBAAsB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChJ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"VolumeProfile.d.ts","sourceRoot":"","sources":["../../../src/indicators/panel/VolumeProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAkB,sBAAsB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChJ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,UAAU;;;;;;;MAKR;IAEF,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe;IAmCrE,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,sBAAsB,GAAG,IAAI;CAqB7H"}
|
|
@@ -2,7 +2,7 @@ import { Point } from '@tradecanvas/commons';
|
|
|
2
2
|
export type AxisScaleCallback = (factor: number) => void;
|
|
3
3
|
export type AxisResetCallback = () => void;
|
|
4
4
|
/**
|
|
5
|
-
* Drag-to-scale handler for price + time axes
|
|
5
|
+
* Drag-to-scale handler for price + time axes.
|
|
6
6
|
*
|
|
7
7
|
* Price axis: drag down compresses (factor > 1, expand price range);
|
|
8
8
|
* drag up expands (factor < 1, compress price range).
|
|
@@ -13,10 +13,14 @@ export declare class CrosshairHandler {
|
|
|
13
13
|
/** Fixed decimals for the price pill; `null` follows the price axis. */
|
|
14
14
|
private pricePrecision;
|
|
15
15
|
private locale;
|
|
16
|
+
private syncedSlot;
|
|
16
17
|
private pendingBarIndex;
|
|
17
18
|
private pendingPoint;
|
|
18
19
|
private callbackScheduled;
|
|
19
20
|
private lastCallbackBarIndex;
|
|
21
|
+
/** Vertical span (px) where the hovered bar is reported; null = the price pane only. */
|
|
22
|
+
private reportTop;
|
|
23
|
+
private reportBottom;
|
|
20
24
|
setCallback(cb: CrosshairCallback): void;
|
|
21
25
|
setData(data: DataSeries): void;
|
|
22
26
|
setMagnetMode(enabled: boolean): void;
|
|
@@ -25,18 +29,38 @@ export declare class CrosshairHandler {
|
|
|
25
29
|
setPricePrecision(precision: number | null): void;
|
|
26
30
|
setLocale(locale: string): void;
|
|
27
31
|
getPosition(): Point | null;
|
|
32
|
+
/**
|
|
33
|
+
* Mirror another chart's crosshair: a vertical line and time label at bar
|
|
34
|
+
* slot `slot` (null clears it). Never fires the callback, so a mirrored
|
|
35
|
+
* crosshair is not echoed back. The pointer's own crosshair wins.
|
|
36
|
+
*/
|
|
37
|
+
setSyncedSlot(slot: number | null): void;
|
|
38
|
+
getSyncedSlot(): number | null;
|
|
39
|
+
/**
|
|
40
|
+
* Also report the hovered bar between `top` and `bottom` (px), e.g. over
|
|
41
|
+
* indicator panes stacked above and below the price pane. The crosshair is
|
|
42
|
+
* still drawn on the price pane only. `null` reports on the price pane only.
|
|
43
|
+
*/
|
|
44
|
+
setReportBounds(bounds: {
|
|
45
|
+
top: number;
|
|
46
|
+
bottom: number;
|
|
47
|
+
} | null): void;
|
|
28
48
|
onPointerMove(pos: Point): void;
|
|
29
49
|
onPointerLeave(): void;
|
|
30
50
|
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
|
31
51
|
/**
|
|
32
52
|
* Render the axis hover labels — price pill on the right, time pill on the
|
|
33
53
|
* bottom. Called on the UI pass (after the axes) so the badges always sit
|
|
34
|
-
* on top of the static axis labels
|
|
54
|
+
* on top of the static axis labels, with a small notch.
|
|
35
55
|
*
|
|
36
56
|
* `timeAxisY` lets the host place the bottom label at the actual time axis
|
|
37
57
|
* baseline (which moves when bottom panels are open).
|
|
38
58
|
*/
|
|
39
59
|
renderAxisLabels(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, data: DataSeries, timeAxisY?: number): void;
|
|
60
|
+
/** The mirrored crosshair: only the time is shared, so only the vertical line. */
|
|
61
|
+
private renderSynced;
|
|
62
|
+
private renderSyncedTimeLabel;
|
|
63
|
+
private drawTimePill;
|
|
40
64
|
/** Fire callback outside of render frame via microtask */
|
|
41
65
|
private scheduleCallback;
|
|
42
66
|
private flushCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrosshairHandler.d.ts","sourceRoot":"","sources":["../../src/interaction/CrosshairHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIpF,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAE9C,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG/C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,IAAI,CAA2B;IACvC,wEAAwE;IACxE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAW;IAGzB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAM;
|
|
1
|
+
{"version":3,"file":"CrosshairHandler.d.ts","sourceRoot":"","sources":["../../src/interaction/CrosshairHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIpF,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAE9C,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG/C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,IAAI,CAA2B;IACvC,wEAAwE;IACxE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAW;IAGzB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAM;IAClC,wFAAwF;IACxF,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAAuB;IAE3C,WAAW,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAIxC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI/B,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKrC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKlC,OAAO,IAAI,aAAa;IAIxB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,IAAI,KAAK,GAAG,IAAI;IAI3B;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAKrE,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAI/B,cAAc,IAAI,IAAI;IAQtB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAsDlF;;;;;;;OAOG;IACH,gBAAgB,CACd,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAqCP,kFAAkF;IAClF,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,YAAY;IAuBpB,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -1,32 +1,67 @@
|
|
|
1
1
|
import { OHLCBar, Theme, Point } from '@tradecanvas/commons';
|
|
2
|
+
/** Per-show context the chart knows and the bar alone does not. */
|
|
3
|
+
export interface CrosshairTooltipContext {
|
|
4
|
+
/** Previous bar's close: the change is measured from it, like the legend. */
|
|
5
|
+
prevClose?: number;
|
|
6
|
+
/** Visible price range, for picking decimals when no precision is set. */
|
|
7
|
+
priceRange?: {
|
|
8
|
+
min: number;
|
|
9
|
+
max: number;
|
|
10
|
+
};
|
|
11
|
+
/** The plot area: the card stays inside it and flips before the price axis. */
|
|
12
|
+
plot?: {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
18
|
+
/** Spacing of the bars in ms: daily-or-larger shows a date, sub-minute adds seconds. */
|
|
19
|
+
barStepMs?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The bar's time as the card shows it, in the chart's timezone and locale:
|
|
23
|
+
* "Mar 4, 2026" for daily-or-larger bars, "Mar 4 · 14:05" for intraday ones
|
|
24
|
+
* and "Mar 4 · 14:05:30" for sub-minute ones ("4 thg 3 · 14:05" in vi-VN).
|
|
25
|
+
* Pass the bar spacing in ms when known: without it, a midnight bar can't be
|
|
26
|
+
* told from a daily one.
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatTooltipTime(rawTime: number, tzOffsetMinutes: number | null, barStepMs?: number, locale?: string): string;
|
|
2
29
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
30
|
+
* Floating OHLCV card that follows the crosshair.
|
|
31
|
+
*
|
|
32
|
+
* The DOM is built once; a hover only rewrites text, and colours are applied
|
|
33
|
+
* again only when the theme changes. It is positioned with a transform so a
|
|
34
|
+
* move never triggers layout.
|
|
6
35
|
*/
|
|
7
36
|
export declare class CrosshairTooltip {
|
|
8
37
|
private el;
|
|
9
38
|
private visible;
|
|
39
|
+
private appliedTheme;
|
|
40
|
+
private locale;
|
|
41
|
+
private pricePrecision;
|
|
42
|
+
private tzOffsetMinutes;
|
|
43
|
+
private dirEl;
|
|
10
44
|
private timeEl;
|
|
11
|
-
private openEl;
|
|
12
|
-
private highEl;
|
|
13
|
-
private lowEl;
|
|
14
|
-
private closeEl;
|
|
15
45
|
private changeEl;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private
|
|
46
|
+
private valueEls;
|
|
47
|
+
private labelEls;
|
|
48
|
+
private dividerEl;
|
|
49
|
+
private width;
|
|
50
|
+
private height;
|
|
20
51
|
create(container: HTMLElement): void;
|
|
52
|
+
/** Locale for number formatting (BCP 47). */
|
|
53
|
+
setLocale(locale: string): void;
|
|
54
|
+
/** Fixed decimals (a market's precision); `null` picks them from the visible range. */
|
|
55
|
+
setPricePrecision(precision: number | null): void;
|
|
56
|
+
/** Timezone for the time line: `null` = browser-local, a number = UTC offset in minutes. */
|
|
57
|
+
setTimezoneOffset(minutes: number | null): void;
|
|
21
58
|
show(pos: Point, bar: OHLCBar, theme: Theme, containerRect: {
|
|
22
59
|
width: number;
|
|
23
60
|
height: number;
|
|
24
|
-
}): void;
|
|
61
|
+
}, context?: CrosshairTooltipContext): void;
|
|
25
62
|
hide(): void;
|
|
26
63
|
isVisible(): boolean;
|
|
27
64
|
destroy(): void;
|
|
28
|
-
private
|
|
29
|
-
private label;
|
|
30
|
-
private val;
|
|
65
|
+
private applyTheme;
|
|
31
66
|
}
|
|
32
67
|
//# sourceMappingURL=CrosshairTooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrosshairTooltip.d.ts","sourceRoot":"","sources":["../../src/interaction/CrosshairTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"CrosshairTooltip.d.ts","sourceRoot":"","sources":["../../src/interaction/CrosshairTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AASlE,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,+EAA+E;IAC/E,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,SAAU,GACf,MAAM,CAYR;AAUD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAAuB;IAG9C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAuG;IACvH,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,MAAM,CAAO;IAErB,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IA4DpC,6CAA6C;IAC7C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,uFAAuF;IACvF,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,4FAA4F;IAC5F,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI/C,IAAI,CACF,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAChD,OAAO,GAAE,uBAA4B,GACpC,IAAI;IAmDP,IAAI,IAAI,IAAI;IAOZ,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,UAAU;CAenB"}
|
|
@@ -18,6 +18,8 @@ export declare class InteractionManager {
|
|
|
18
18
|
private onAxisDoubleClick;
|
|
19
19
|
private measureHandlers;
|
|
20
20
|
private measuring;
|
|
21
|
+
private boxSelectHandlers;
|
|
22
|
+
private boxSelecting;
|
|
21
23
|
private onAltClick;
|
|
22
24
|
private onEscape;
|
|
23
25
|
private onConfirm;
|
|
@@ -29,6 +31,7 @@ export declare class InteractionManager {
|
|
|
29
31
|
private tradingManager;
|
|
30
32
|
private paneResizeHandler;
|
|
31
33
|
private viewportGetter;
|
|
34
|
+
/** `hoverOnly`: only pointer-tied visuals changed (crosshair, measure ruler, selection box). */
|
|
32
35
|
private onOverlayDirty;
|
|
33
36
|
private boundHandlers;
|
|
34
37
|
private lastTouchDist;
|
|
@@ -40,7 +43,12 @@ export declare class InteractionManager {
|
|
|
40
43
|
private readonly longPressMaxMove;
|
|
41
44
|
private cachedRect;
|
|
42
45
|
constructor(element: HTMLElement);
|
|
43
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Called when a pointer event changed what's drawn. `hoverOnly` is true when
|
|
48
|
+
* only pointer-tied visuals changed (crosshair, axis pills, measure ruler,
|
|
49
|
+
* selection box) — the chart then redraws just its thin top canvas.
|
|
50
|
+
*/
|
|
51
|
+
setOverlayDirtyCallback(cb: (hoverOnly?: boolean) => void): void;
|
|
44
52
|
setPanHandler(handler: PanHandler): void;
|
|
45
53
|
setZoomHandler(handler: ZoomHandler): void;
|
|
46
54
|
setCrosshairHandler(handler: CrosshairHandler): void;
|
|
@@ -65,6 +73,17 @@ export declare class InteractionManager {
|
|
|
65
73
|
setConfirmHandler(handler: () => boolean): void;
|
|
66
74
|
/** Wire a plain left-click on the chart area (press + release without drag). */
|
|
67
75
|
setClickHandler(handler: (pos: Point) => void): void;
|
|
76
|
+
/**
|
|
77
|
+
* Ctrl/⌘-drag selection box: `begin`/`move` track the box, `end` selects
|
|
78
|
+
* what it covers (or toggles the drawing under a plain Ctrl/⌘-click),
|
|
79
|
+
* `cancel` drops it (Escape).
|
|
80
|
+
*/
|
|
81
|
+
setBoxSelectHandlers(handlers: {
|
|
82
|
+
begin: (pos: Point) => void;
|
|
83
|
+
move: (pos: Point) => void;
|
|
84
|
+
end: () => void;
|
|
85
|
+
cancel: () => void;
|
|
86
|
+
}): void;
|
|
68
87
|
setMeasureHandlers(handlers: {
|
|
69
88
|
begin: (pos: Point) => void;
|
|
70
89
|
move: (pos: Point) => void;
|
|
@@ -83,6 +102,12 @@ export declare class InteractionManager {
|
|
|
83
102
|
/** Force the cached bounding rect to be re-read on next access. */
|
|
84
103
|
invalidateRect(): void;
|
|
85
104
|
private getRect;
|
|
105
|
+
/**
|
|
106
|
+
* Whether drawing shortcuts are this chart's: not while typing in a text
|
|
107
|
+
* field; the chart holding focus if any does; else the chart pressed last
|
|
108
|
+
* (so clicking a toolbar button beside it keeps them working); else any.
|
|
109
|
+
*/
|
|
110
|
+
private ownsShortcuts;
|
|
86
111
|
private getMousePos;
|
|
87
112
|
private getTouchPos;
|
|
88
113
|
private getTouchDistance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,17 +16,25 @@ export declare class PanHandler {
|
|
|
16
16
|
private dragging;
|
|
17
17
|
private lastX;
|
|
18
18
|
private lastY;
|
|
19
|
-
private
|
|
20
|
-
private velocityX;
|
|
21
|
-
private velocityY;
|
|
19
|
+
private samples;
|
|
22
20
|
private momentumId;
|
|
23
21
|
private callback;
|
|
24
22
|
private onStart?;
|
|
25
23
|
private friction;
|
|
26
24
|
constructor(callback: PanCallback, onStart?: () => void);
|
|
25
|
+
isDragging(): boolean;
|
|
27
26
|
onPointerDown(pos: Point): void;
|
|
28
27
|
onPointerMove(pos: Point): void;
|
|
29
28
|
onPointerUp(): void;
|
|
29
|
+
/** Stop any coasting immediately (e.g. a new gesture or a programmatic jump). */
|
|
30
|
+
cancelMomentum(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Velocity (px/ms, delta convention) over the last VELOCITY_WINDOW_MS, or
|
|
33
|
+
* null when the pointer had come to rest before release. Measuring over a
|
|
34
|
+
* window instead of the final sample keeps one jittery event from either
|
|
35
|
+
* killing a flick or launching the chart after the user had stopped.
|
|
36
|
+
*/
|
|
37
|
+
private releaseVelocity;
|
|
30
38
|
private startMomentum;
|
|
31
39
|
private stopMomentum;
|
|
32
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanHandler.d.ts","sourceRoot":"","sources":["../../src/interaction/PanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PanHandler.d.ts","sourceRoot":"","sources":["../../src/interaction/PanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAkBnE;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI;IAKvD,UAAU,IAAI,OAAO;IAIrB,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAS/B,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAiB/B,WAAW,IAAI,IAAI;IAWnB,iFAAiF;IACjF,cAAc,IAAI,IAAI;IAItB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,YAAY;CAMrB"}
|
|
@@ -7,6 +7,7 @@ export { PaneResizeHandler } from './PaneResizeHandler.js';
|
|
|
7
7
|
export { CrosshairHandler } from './CrosshairHandler.js';
|
|
8
8
|
export type { CrosshairMode } from './CrosshairHandler.js';
|
|
9
9
|
export { KeyboardHandler } from './KeyboardHandler.js';
|
|
10
|
-
export { CrosshairTooltip } from './CrosshairTooltip.js';
|
|
10
|
+
export { CrosshairTooltip, formatTooltipTime } from './CrosshairTooltip.js';
|
|
11
|
+
export type { CrosshairTooltipContext } from './CrosshairTooltip.js';
|
|
11
12
|
export { PinnedTooltip } from './PinnedTooltip.js';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -14,6 +14,7 @@ export declare class CurrentPriceLine {
|
|
|
14
14
|
setLocale(locale: string): void;
|
|
15
15
|
setPrice(price: number, previousClose?: number): void;
|
|
16
16
|
setVisible(v: boolean): void;
|
|
17
|
+
isVisible(): boolean;
|
|
17
18
|
setPricePrecision(precision: number | null): void;
|
|
18
19
|
getPrice(): number | null;
|
|
19
20
|
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentPriceLine.d.ts","sourceRoot":"","sources":["../../src/realtime/CurrentPriceLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIjE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAW;IAEzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAQrD,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5B,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAkDnF"}
|
|
1
|
+
{"version":3,"file":"CurrentPriceLine.d.ts","sourceRoot":"","sources":["../../src/realtime/CurrentPriceLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIjE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAW;IAEzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAQrD,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5B,SAAS,IAAI,OAAO;IAIpB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAkDnF"}
|
|
@@ -8,7 +8,7 @@ export interface DragState {
|
|
|
8
8
|
export declare class OrderRenderer {
|
|
9
9
|
render(ctx: CanvasRenderingContext2D, orders: TradingOrder[], viewport: ViewportState, theme: Theme, config: TradingConfig, dragState: DragState | null): void;
|
|
10
10
|
/**
|
|
11
|
-
* Draw order price badges on the price axis. Called
|
|
11
|
+
* Draw order price badges on the price axis. Called after the price axis
|
|
12
12
|
* so they paint ON TOP of the regular axis tick labels.
|
|
13
13
|
*/
|
|
14
14
|
renderAxisBadges(ctx: CanvasRenderingContext2D, orders: TradingOrder[], viewport: ViewportState, theme: Theme, config: TradingConfig, dragState: DragState | null): void;
|
|
@@ -2,7 +2,7 @@ import { TradingPosition, TradingConfig, ViewportState, Theme } from '@tradecanv
|
|
|
2
2
|
export declare class PositionRenderer {
|
|
3
3
|
render(ctx: CanvasRenderingContext2D, positions: TradingPosition[], currentPrice: number | null, viewport: ViewportState, theme: Theme, config: TradingConfig): void;
|
|
4
4
|
/**
|
|
5
|
-
* Draw position entry badges on the price axis. Called
|
|
5
|
+
* Draw position entry badges on the price axis. Called after the price axis
|
|
6
6
|
* so they paint ON TOP of the regular axis tick labels.
|
|
7
7
|
*/
|
|
8
8
|
renderAxisBadges(ctx: CanvasRenderingContext2D, positions: TradingPosition[], viewport: ViewportState, theme: Theme, config: TradingConfig): void;
|
|
@@ -36,14 +36,16 @@ export declare class TradingManager {
|
|
|
36
36
|
/** Emit `orderPlace` with the drafted order (type inferred vs the market). */
|
|
37
37
|
confirmOrderDraft(): boolean;
|
|
38
38
|
isOrderDraftActive(): boolean;
|
|
39
|
+
/** Whether `pos` is over an order line or a position's SL/TP that can be dragged. */
|
|
40
|
+
isOverDraggableLine(pos: Point, viewport: ViewportState, tolerance?: number): boolean;
|
|
39
41
|
onPointerDown(pos: Point, viewport: ViewportState): boolean;
|
|
40
42
|
onPointerMove(pos: Point, viewport: ViewportState): boolean;
|
|
41
43
|
onPointerUp(): boolean;
|
|
42
44
|
onContextMenu(pos: Point, viewport: ViewportState): boolean;
|
|
43
45
|
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
|
44
46
|
/**
|
|
45
|
-
* Draw position/order price badges on the price axis.
|
|
46
|
-
*
|
|
47
|
+
* Draw position/order price badges on the price axis. Drawn after the
|
|
48
|
+
* price axis so they paint ON TOP of the regular axis labels.
|
|
47
49
|
*/
|
|
48
50
|
renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
|
49
51
|
destroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,EACL,KAAK,EACN,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAyD;IAC9E,OAAO,CAAC,SAAS,CAA4B;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAS3C,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAI1C,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAMlE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAKvC,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI;IAKhD,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAK3C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAO/C,uEAAuE;IACvE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlD,aAAa,IAAI,IAAI;IAMrB,kFAAkF;IAClF,cAAc,IAAI,OAAO;IAezB,eAAe,IAAI,OAAO;IAM1B,kEAAkE;IAClE,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrD,gBAAgB,IAAI,IAAI;IAMxB,8EAA8E;IAC9E,iBAAiB,IAAI,OAAO;IAS5B,kBAAkB,IAAI,OAAO;
|
|
1
|
+
{"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,EACL,KAAK,EACN,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAyD;IAC9E,OAAO,CAAC,SAAS,CAA4B;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAS3C,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAI1C,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAMlE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAKvC,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI;IAKhD,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAK3C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAO/C,uEAAuE;IACvE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlD,aAAa,IAAI,IAAI;IAMrB,kFAAkF;IAClF,cAAc,IAAI,OAAO;IAezB,eAAe,IAAI,OAAO;IAM1B,kEAAkE;IAClE,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrD,gBAAgB,IAAI,IAAI;IAMxB,8EAA8E;IAC9E,iBAAiB,IAAI,OAAO;IAS5B,kBAAkB,IAAI,OAAO;IAI7B,qFAAqF;IACrF,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAI,GAAG,OAAO;IAehF,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAc3D,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAiB3D,WAAW,IAAI,OAAO;IA+BtB,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAS3D,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA6BlF;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAU5F,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -6,7 +6,7 @@ export declare class TradingRenderer {
|
|
|
6
6
|
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
|
7
7
|
/**
|
|
8
8
|
* Draw position/order price badges on the price axis. Call this from the
|
|
9
|
-
*
|
|
9
|
+
* scene pass AFTER priceAxis.render() so the badges paint on top of the
|
|
10
10
|
* regular tick labels — matching MT4/MT5 behaviour.
|
|
11
11
|
*/
|
|
12
12
|
renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
|
package/dist/ui/ChartLegend.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface LegendConfig {
|
|
|
10
10
|
}
|
|
11
11
|
export declare const DEFAULT_LEGEND_CONFIG: LegendConfig;
|
|
12
12
|
/**
|
|
13
|
-
* Renders an OHLCV legend overlay
|
|
13
|
+
* Renders an OHLCV legend overlay in the chart's top-left corner.
|
|
14
14
|
* Shows: Symbol, O, H, L, C, Change%, Volume
|
|
15
15
|
* Updates on crosshair hover or shows last bar by default.
|
|
16
16
|
*/
|
|
@@ -40,6 +40,12 @@ export declare class ChartLegend {
|
|
|
40
40
|
value: string;
|
|
41
41
|
}[]): void;
|
|
42
42
|
setStatusText(text: string | null): void;
|
|
43
|
+
/**
|
|
44
|
+
* How far below the plot's top edge the symbol, OHLC and volume rows reach
|
|
45
|
+
* (the indicator row excluded), so other content can stack under them.
|
|
46
|
+
* 0 when hidden or drawn in the top-right corner.
|
|
47
|
+
*/
|
|
48
|
+
getHeight(): number;
|
|
43
49
|
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, data: DataSeries): void;
|
|
44
50
|
}
|
|
45
51
|
//# sourceMappingURL=ChartLegend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartLegend.d.ts","sourceRoot":"","sources":["../../src/ui/ChartLegend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGtF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAQnC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,cAAc,CAAuB;IAE7C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAI9C;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IAItC,kBAAkB,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI;IAIlF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;CAsGrG"}
|
|
1
|
+
{"version":3,"file":"ChartLegend.d.ts","sourceRoot":"","sources":["../../src/ui/ChartLegend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGtF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAQnC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,cAAc,CAAuB;IAE7C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAI9C;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IAItC,kBAAkB,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI;IAIlF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAWnB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;CAsGrG"}
|
|
@@ -1,16 +1,51 @@
|
|
|
1
1
|
import { ViewportState } from '@tradecanvas/commons';
|
|
2
2
|
export declare function barIndexToX(index: number, viewport: ViewportState): number;
|
|
3
3
|
export declare function priceToY(price: number, viewport: ViewportState): number;
|
|
4
|
+
/**
|
|
5
|
+
* `priceToY` for one frame, with the per-call work hoisted out: for renderers
|
|
6
|
+
* that map every visible bar. Follows the log scale and the inverted scale.
|
|
7
|
+
*/
|
|
8
|
+
export declare function priceToYMapper(viewport: ViewportState): (price: number) => number;
|
|
9
|
+
/**
|
|
10
|
+
* Where bucket `b` of `count` equal price buckets across the price range sits
|
|
11
|
+
* on screen (bucket 0 holds the lowest prices), on any scale. `toY` is the
|
|
12
|
+
* frame's `priceToYMapper`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function priceBucketRow(b: number, count: number, viewport: ViewportState, toY: (price: number) => number): {
|
|
15
|
+
top: number;
|
|
16
|
+
height: number;
|
|
17
|
+
mid: number;
|
|
18
|
+
};
|
|
4
19
|
export declare function xToBarIndex(x: number, viewport: ViewportState): number;
|
|
5
20
|
export declare function yToPrice(y: number, viewport: ViewportState): number;
|
|
21
|
+
type TimedSeries = ReadonlyArray<{
|
|
22
|
+
time: number;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Typical spacing between bar times — the median of the last ~20 intervals,
|
|
26
|
+
* so a weekend or halt gap doesn't skew it. Used to place times beyond either
|
|
27
|
+
* end of the data (the empty future the chart can be panned into). Cached per
|
|
28
|
+
* series and length; 0 when there are fewer than two bars.
|
|
29
|
+
*/
|
|
30
|
+
export declare function barTimeStep(data: TimedSeries): number;
|
|
31
|
+
/**
|
|
32
|
+
* `barTimeStep` in milliseconds whatever unit the series uses: bar times
|
|
33
|
+
* below 1e12 are seconds (the same rule as `normalizeBarTime`).
|
|
34
|
+
*/
|
|
35
|
+
export declare function barTimeStepMs(data: TimedSeries): number;
|
|
36
|
+
/**
|
|
37
|
+
* Time at bar index `index`, extrapolated by `barTimeStep` past either end of
|
|
38
|
+
* the data — e.g. the future area right of the newest bar.
|
|
39
|
+
*/
|
|
40
|
+
export declare function barIndexToTime(index: number, data: TimedSeries): number;
|
|
6
41
|
/**
|
|
7
42
|
* Convert a bar timestamp to its data-array index via binary search.
|
|
8
|
-
* Falls back to fractional interpolation when the timestamp falls between bars
|
|
43
|
+
* Falls back to fractional interpolation when the timestamp falls between bars,
|
|
44
|
+
* and extrapolates (by `barTimeStep`) for times beyond either end — so a drawing
|
|
45
|
+
* anchored in the future keeps its place instead of collapsing onto the last bar.
|
|
9
46
|
* Returns -1 if data is empty.
|
|
10
47
|
*/
|
|
11
|
-
export declare function timestampToBarIndex(timestamp: number, data:
|
|
12
|
-
time: number;
|
|
13
|
-
}>): number;
|
|
48
|
+
export declare function timestampToBarIndex(timestamp: number, data: TimedSeries): number;
|
|
14
49
|
/**
|
|
15
50
|
* Resolve an anchor `time` value to a (possibly fractional) bar index in the
|
|
16
51
|
* current series. When `viewport.data` is set, `time` is interpreted as a real
|
|
@@ -29,4 +64,5 @@ export declare function timeToX(time: number, viewport: ViewportState): number;
|
|
|
29
64
|
* returns a bar index for legacy callers.
|
|
30
65
|
*/
|
|
31
66
|
export declare function xToTime(x: number, viewport: ViewportState): number;
|
|
67
|
+
export {};
|
|
32
68
|
//# sourceMappingURL=ScaleMapping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScaleMapping.d.ts","sourceRoot":"","sources":["../../src/viewport/ScaleMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAG1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ScaleMapping.d.ts","sourceRoot":"","sources":["../../src/viewport/ScaleMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAG1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAevE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAkBjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAC7B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGtE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAUnE;AAED,KAAK,WAAW,GAAG,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAInD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAWrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAIvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CASvE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CA0BhF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAM7E;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAErE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CASlE"}
|
|
@@ -17,6 +17,8 @@ export declare class Viewport {
|
|
|
17
17
|
private minBarWidth;
|
|
18
18
|
private maxBarWidth;
|
|
19
19
|
private rightMarginBars;
|
|
20
|
+
private freePan;
|
|
21
|
+
private minVisibleBars;
|
|
20
22
|
constructor(containerWidth: number, containerHeight: number, minBarWidth?: number, maxBarWidth?: number, rightMarginBars?: number);
|
|
21
23
|
/**
|
|
22
24
|
* Returns a snapshot (deep copy). Safe to store/pass. Cached: repeated
|
|
@@ -30,9 +32,26 @@ export declare class Viewport {
|
|
|
30
32
|
/** Set the price-scale presentation. Keeps `logScale` mirrored for back-compat. */
|
|
31
33
|
setScaleMode(mode: PriceScaleMode): void;
|
|
32
34
|
getScaleMode(): PriceScaleMode;
|
|
35
|
+
/** Turn the price scale upside down (higher prices lower on screen). */
|
|
36
|
+
setInvertScale(inverted: boolean): void;
|
|
37
|
+
isInvertScale(): boolean;
|
|
33
38
|
/** Reference price for percentage / indexed-to-100 axis labels. */
|
|
34
39
|
setScaleBaseline(price: number | undefined): void;
|
|
35
40
|
setRightMargin(bars: number): void;
|
|
41
|
+
getRightMargin(): number;
|
|
42
|
+
/**
|
|
43
|
+
* How far the chart can be dragged. `freePan` (default) allows dragging
|
|
44
|
+
* past the newest bar into empty future space, or past the
|
|
45
|
+
* oldest bar, until only `minVisibleBars` bars remain at the edge. With
|
|
46
|
+
* `freePan: false` the newest bar stops at its resting position, as in 1.x
|
|
47
|
+
* before 1.3.
|
|
48
|
+
*/
|
|
49
|
+
setPanLimits(limits: {
|
|
50
|
+
freePan?: boolean;
|
|
51
|
+
minVisibleBars?: number;
|
|
52
|
+
}): void;
|
|
53
|
+
/** Offset at which the newest bar sits `rightMargin` bars from the right edge — the resting view. */
|
|
54
|
+
private endOffset;
|
|
36
55
|
/** Width of the price axis strip; see `ViewportState.priceAxisWidth`. */
|
|
37
56
|
setPriceAxisWidth(width: number): void;
|
|
38
57
|
private computeChartRect;
|
|
@@ -58,10 +77,20 @@ export declare class Viewport {
|
|
|
58
77
|
* chart-body panning, the counterpart to `scrollBy` on the time axis.
|
|
59
78
|
*/
|
|
60
79
|
panPriceRange(deltaPixels: number): void;
|
|
61
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Whether the view rests at the latest bars (within two bars of the resting
|
|
82
|
+
* position). Panned into history — or out into empty future space — it is
|
|
83
|
+
* not, so a new bar doesn't yank the view back.
|
|
84
|
+
*/
|
|
62
85
|
isAtEnd(): boolean;
|
|
63
86
|
scrollToEnd(): void;
|
|
64
87
|
zoom(delta: number, centerX: number): void;
|
|
88
|
+
/**
|
|
89
|
+
* Fit bar slots `from`..`to` (inclusive, fractional allowed, may extend past
|
|
90
|
+
* the data) across the chart width. If the bar width hits its min/max the
|
|
91
|
+
* range is centred instead.
|
|
92
|
+
*/
|
|
93
|
+
zoomToBarRange(from: number, to: number): void;
|
|
65
94
|
private clampOffset;
|
|
66
95
|
private updateVisibleRange;
|
|
67
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Viewport.d.ts","sourceRoot":"","sources":["../../src/viewport/Viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI5F,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,cAAc,CAAoB;IAC1C;;;;;;;;;OASG;IACH,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;
|
|
1
|
+
{"version":3,"file":"Viewport.d.ts","sourceRoot":"","sources":["../../src/viewport/Viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI5F,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,cAAc,CAAoB;IAC1C;;;;;;;;;OASG;IACH,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAK;gBAGzB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,WAAW,SAAI,EACf,WAAW,SAAK,EAChB,eAAe,SAAI;IAgBrB;;;OAGG;IACH,QAAQ,IAAI,aAAa;IAmBzB,8EAA8E;IAC9E,OAAO,CAAC,UAAU;IAIlB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,UAAU,IAAI,OAAO;IAIrB,mFAAmF;IACnF,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAMxC,YAAY,IAAI,cAAc;IAI9B,wEAAwE;IACxE,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKvC,aAAa,IAAI,OAAO;IAIxB,mEAAmE;IACnE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,cAAc,IAAI,MAAM;IAIxB;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO1E,qGAAqG;IACrG,OAAO,CAAC,SAAS;IAKjB,yEAAyE;IACzE,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOtC,OAAO,CAAC,gBAAgB;IASxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM3C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAY9B,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAsBtD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAK7C;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUrC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAOnC;;;;;;;;;OASG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAsBxC;;;;OAIG;IACH,OAAO,IAAI,OAAO;IAKlB,WAAW,IAAI,IAAI;IAUnB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB1C;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAY9C,OAAO,CAAC,WAAW;IAgDnB,OAAO,CAAC,kBAAkB;CAS3B"}
|
package/dist/viewport/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { Viewport } from './Viewport.js';
|
|
2
|
-
export { barIndexToX, priceToY, xToBarIndex, yToPrice, timestampToBarIndex, resolveBarIndex, timeToX, xToTime, } from './ScaleMapping.js';
|
|
2
|
+
export { barIndexToX, priceToY, priceToYMapper, priceBucketRow, xToBarIndex, yToPrice, timestampToBarIndex, resolveBarIndex, barTimeStep, barTimeStepMs, barIndexToTime, timeToX, xToTime, } from './ScaleMapping.js';
|
|
3
3
|
export { getVisibleData } from './DataWindow.js';
|
|
4
|
+
export { RANGE_PRESETS, rangePresetStart } from './rangePresets.js';
|
|
5
|
+
export type { RangePreset } from './rangePresets.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,cAAc,EACd,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,OAAO,EACP,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Spans that end at the last bar, as on a chart's range bar. */
|
|
2
|
+
export type RangePreset = '1D' | '5D' | '1M' | '3M' | '6M' | 'YTD' | '1Y' | '5Y' | 'All';
|
|
3
|
+
export declare const RANGE_PRESETS: readonly RangePreset[];
|
|
4
|
+
/**
|
|
5
|
+
* Where the preset's span starts when it ends at `end` (ms): days are counted
|
|
6
|
+
* back from `end`, months and YTD in calendar terms in the display timezone
|
|
7
|
+
* (`tzOffsetMinutes` east of UTC; null = the browser's). Null for 'All'.
|
|
8
|
+
*/
|
|
9
|
+
export declare function rangePresetStart(preset: RangePreset, end: number, tzOffsetMinutes?: number | null): number | null;
|
|
10
|
+
//# sourceMappingURL=rangePresets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rangePresets.d.ts","sourceRoot":"","sources":["../../src/viewport/rangePresets.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAEzF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAA6D,CAAC;AA6B9G;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,GAAG,IAAQ,GAAG,MAAM,GAAG,IAAI,CAepH"}
|