@tradecanvas/core 1.2.0 → 1.3.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.
Files changed (57) hide show
  1. package/README.md +4 -6
  2. package/dist/axis/GridRenderer.d.ts.map +1 -1
  3. package/dist/axis/PriceAxis.d.ts +6 -0
  4. package/dist/axis/PriceAxis.d.ts.map +1 -1
  5. package/dist/axis/TimeAxis.d.ts.map +1 -1
  6. package/dist/drawings/DrawingManager.d.ts +39 -0
  7. package/dist/drawings/DrawingManager.d.ts.map +1 -1
  8. package/dist/drawings/tools/AnchoredVWAP.d.ts +7 -0
  9. package/dist/drawings/tools/AnchoredVWAP.d.ts.map +1 -1
  10. package/dist/drawings/tools/RiskReward.d.ts +1 -1
  11. package/dist/engine/LayerManager.d.ts +8 -1
  12. package/dist/engine/LayerManager.d.ts.map +1 -1
  13. package/dist/engine/RenderEngine.d.ts +20 -4
  14. package/dist/engine/RenderEngine.d.ts.map +1 -1
  15. package/dist/engine/RenderLoop.d.ts.map +1 -1
  16. package/dist/features/AlertManager.d.ts.map +1 -1
  17. package/dist/features/MeasureOverlay.d.ts +1 -1
  18. package/dist/features/MeasureOverlay.d.ts.map +1 -1
  19. package/dist/features/SelectionBoxOverlay.d.ts +29 -0
  20. package/dist/features/SelectionBoxOverlay.d.ts.map +1 -0
  21. package/dist/features/UndoRedoManager.d.ts +3 -1
  22. package/dist/features/UndoRedoManager.d.ts.map +1 -1
  23. package/dist/features/index.d.ts +2 -0
  24. package/dist/features/index.d.ts.map +1 -1
  25. package/dist/finance/GaugeRenderer.d.ts +39 -1
  26. package/dist/finance/GaugeRenderer.d.ts.map +1 -1
  27. package/dist/index.cjs +7 -7
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.js +2016 -1483
  30. package/dist/index.js.map +1 -1
  31. package/dist/indicators/IndicatorEngine.d.ts.map +1 -1
  32. package/dist/interaction/AxisDragHandler.d.ts +1 -1
  33. package/dist/interaction/CrosshairHandler.d.ts +1 -1
  34. package/dist/interaction/CrosshairHandler.d.ts.map +1 -1
  35. package/dist/interaction/CrosshairTooltip.d.ts +49 -15
  36. package/dist/interaction/CrosshairTooltip.d.ts.map +1 -1
  37. package/dist/interaction/InteractionManager.d.ts +20 -1
  38. package/dist/interaction/InteractionManager.d.ts.map +1 -1
  39. package/dist/interaction/PanHandler.d.ts +11 -3
  40. package/dist/interaction/PanHandler.d.ts.map +1 -1
  41. package/dist/interaction/index.d.ts +2 -1
  42. package/dist/interaction/index.d.ts.map +1 -1
  43. package/dist/realtime/CurrentPriceLine.d.ts +1 -0
  44. package/dist/realtime/CurrentPriceLine.d.ts.map +1 -1
  45. package/dist/trading/OrderRenderer.d.ts +1 -1
  46. package/dist/trading/PositionRenderer.d.ts +1 -1
  47. package/dist/trading/TradingManager.d.ts +4 -2
  48. package/dist/trading/TradingManager.d.ts.map +1 -1
  49. package/dist/trading/TradingRenderer.d.ts +1 -1
  50. package/dist/ui/ChartLegend.d.ts +1 -1
  51. package/dist/viewport/ScaleMapping.d.ts +20 -4
  52. package/dist/viewport/ScaleMapping.d.ts.map +1 -1
  53. package/dist/viewport/Viewport.d.ts +27 -1
  54. package/dist/viewport/Viewport.d.ts.map +1 -1
  55. package/dist/viewport/index.d.ts +1 -1
  56. package/dist/viewport/index.d.ts.map +1 -1
  57. package/package.json +3 -2
@@ -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;AAW9B,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;IA6BT,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,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
+ {"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;IA4BT,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,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"}
@@ -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 (TradingView style).
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).
@@ -31,7 +31,7 @@ export declare class CrosshairHandler {
31
31
  /**
32
32
  * Render the axis hover labels — price pill on the right, time pill on the
33
33
  * bottom. Called on the UI pass (after the axes) so the badges always sit
34
- * on top of the static axis labels. TradingView-style with a small notch.
34
+ * on top of the static axis labels, with a small notch.
35
35
  *
36
36
  * `timeAxisY` lets the host place the bottom label at the actual time axis
37
37
  * baseline (which moves when bottom panels are open).
@@ -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;IAElC,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,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;IAqDlF;;;;;;;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;IA8CP,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,aAAa;CAGtB"}
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;IAElC,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,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;IAyDlF;;;;;;;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;IA8CP,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,aAAa;CAGtB"}
@@ -1,32 +1,66 @@
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: "Mar 4, 2026"
23
+ * for daily-or-larger bars, "Mar 4 · 14:05" for intraday ones and
24
+ * "Mar 4 · 14:05:30" for sub-minute ones. Pass the bar spacing when known:
25
+ * without it, a midnight bar can't be told from a daily one.
26
+ */
27
+ export declare function formatTooltipTime(rawTime: number, tzOffsetMinutes: number | null, barStepMs?: number): string;
2
28
  /**
3
- * High-performance floating tooltip.
4
- * Pre-builds DOM structure once, updates only textContent on hover.
5
- * No innerHTML, no offsetWidth reads, no layout thrashing.
29
+ * Floating OHLCV card that follows the crosshair.
30
+ *
31
+ * The DOM is built once; a hover only rewrites text, and colours are applied
32
+ * again only when the theme changes. It is positioned with a transform so a
33
+ * move never triggers layout.
6
34
  */
7
35
  export declare class CrosshairTooltip {
8
36
  private el;
9
37
  private visible;
38
+ private appliedTheme;
39
+ private locale;
40
+ private pricePrecision;
41
+ private tzOffsetMinutes;
42
+ private dirEl;
10
43
  private timeEl;
11
- private openEl;
12
- private highEl;
13
- private lowEl;
14
- private closeEl;
15
44
  private changeEl;
16
- private volEl;
17
- private measuredWidth;
18
- private measuredHeight;
19
- private measured;
45
+ private valueEls;
46
+ private labelEls;
47
+ private dividerEl;
48
+ private width;
49
+ private height;
20
50
  create(container: HTMLElement): void;
51
+ /** Locale for number formatting (BCP 47). */
52
+ setLocale(locale: string): void;
53
+ /** Fixed decimals (a market's precision); `null` picks them from the visible range. */
54
+ setPricePrecision(precision: number | null): void;
55
+ /** Timezone for the time line: `null` = browser-local, a number = UTC offset in minutes. */
56
+ setTimezoneOffset(minutes: number | null): void;
21
57
  show(pos: Point, bar: OHLCBar, theme: Theme, containerRect: {
22
58
  width: number;
23
59
  height: number;
24
- }): void;
60
+ }, context?: CrosshairTooltipContext): void;
25
61
  hide(): void;
26
62
  isVisible(): boolean;
27
63
  destroy(): void;
28
- private addLine;
29
- private label;
30
- private val;
64
+ private applyTheme;
31
65
  }
32
66
  //# 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;AAElE;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,KAAK,CAAe;IAG5B,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,QAAQ,CAAS;IAEzB,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAgCpC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwEpG,IAAI,IAAI,IAAI;IAOZ,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,GAAG;CAGZ"}
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;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAY7G;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
- setOverlayDirtyCallback(cb: () => void): void;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"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"}
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 lastTime;
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;AAEnE;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,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,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAW/B,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAmB/B,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,YAAY;CAMrB"}
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;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,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 from the UI layer
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 from the UI layer
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. Intended for the
46
- * UI layer so they paint ON TOP of the regular axis labels.
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;IAM7B,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"}
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
- * UI layer AFTER priceAxis.render() so the badges paint on top of the
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;
@@ -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 on the chart (like TradingView top-left).
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
  */
@@ -3,14 +3,29 @@ export declare function barIndexToX(index: number, viewport: ViewportState): num
3
3
  export declare function priceToY(price: number, viewport: ViewportState): number;
4
4
  export declare function xToBarIndex(x: number, viewport: ViewportState): number;
5
5
  export declare function yToPrice(y: number, viewport: ViewportState): number;
6
+ type TimedSeries = ReadonlyArray<{
7
+ time: number;
8
+ }>;
9
+ /**
10
+ * Typical spacing between bar times — the median of the last ~20 intervals,
11
+ * so a weekend or halt gap doesn't skew it. Used to place times beyond either
12
+ * end of the data (the empty future the chart can be panned into). Cached per
13
+ * series and length; 0 when there are fewer than two bars.
14
+ */
15
+ export declare function barTimeStep(data: TimedSeries): number;
16
+ /**
17
+ * Time at bar index `index`, extrapolated by `barTimeStep` past either end of
18
+ * the data — e.g. the future area right of the newest bar.
19
+ */
20
+ export declare function barIndexToTime(index: number, data: TimedSeries): number;
6
21
  /**
7
22
  * Convert a bar timestamp to its data-array index via binary search.
8
- * Falls back to fractional interpolation when the timestamp falls between bars.
23
+ * Falls back to fractional interpolation when the timestamp falls between bars,
24
+ * and extrapolates (by `barTimeStep`) for times beyond either end — so a drawing
25
+ * anchored in the future keeps its place instead of collapsing onto the last bar.
9
26
  * Returns -1 if data is empty.
10
27
  */
11
- export declare function timestampToBarIndex(timestamp: number, data: ReadonlyArray<{
12
- time: number;
13
- }>): number;
28
+ export declare function timestampToBarIndex(timestamp: number, data: TimedSeries): number;
14
29
  /**
15
30
  * Resolve an anchor `time` value to a (possibly fractional) bar index in the
16
31
  * current series. When `viewport.data` is set, `time` is interpreted as a real
@@ -29,4 +44,5 @@ export declare function timeToX(time: number, viewport: ViewportState): number;
29
44
  * returns a bar index for legacy callers.
30
45
  */
31
46
  export declare function xToTime(x: number, viewport: ViewportState): number;
47
+ export {};
32
48
  //# 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,CAcvE;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,CASnE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAmBpG;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,CAQlE"}
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,CAcvE;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,CASnE;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,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
@@ -33,6 +35,20 @@ export declare class Viewport {
33
35
  /** Reference price for percentage / indexed-to-100 axis labels. */
34
36
  setScaleBaseline(price: number | undefined): void;
35
37
  setRightMargin(bars: number): void;
38
+ getRightMargin(): number;
39
+ /**
40
+ * How far the chart can be dragged. `freePan` (default) allows dragging
41
+ * past the newest bar into empty future space, or past the
42
+ * oldest bar, until only `minVisibleBars` bars remain at the edge. With
43
+ * `freePan: false` the newest bar stops at its resting position, as in 1.x
44
+ * before 1.3.
45
+ */
46
+ setPanLimits(limits: {
47
+ freePan?: boolean;
48
+ minVisibleBars?: number;
49
+ }): void;
50
+ /** Offset at which the newest bar sits `rightMargin` bars from the right edge — the resting view. */
51
+ private endOffset;
36
52
  /** Width of the price axis strip; see `ViewportState.priceAxisWidth`. */
37
53
  setPriceAxisWidth(width: number): void;
38
54
  private computeChartRect;
@@ -58,10 +74,20 @@ export declare class Viewport {
58
74
  * chart-body panning, the counterpart to `scrollBy` on the time axis.
59
75
  */
60
76
  panPriceRange(deltaPixels: number): void;
61
- /** Returns true if the viewport is scrolled to show the latest bars. */
77
+ /**
78
+ * Whether the view rests at the latest bars (within two bars of the resting
79
+ * position). Panned into history — or out into empty future space — it is
80
+ * not, so a new bar doesn't yank the view back.
81
+ */
62
82
  isAtEnd(): boolean;
63
83
  scrollToEnd(): void;
64
84
  zoom(delta: number, centerX: number): void;
85
+ /**
86
+ * Fit bar slots `from`..`to` (inclusive, fractional allowed, may extend past
87
+ * the data) across the chart width. If the bar width hits its min/max the
88
+ * range is centred instead.
89
+ */
90
+ zoomToBarRange(from: number, to: number): void;
65
91
  private clampOffset;
66
92
  private updateVisibleRange;
67
93
  }
@@ -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;gBAG9B,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,WAAW,SAAI,EACf,WAAW,SAAK,EAChB,eAAe,SAAI;IAgBrB;;;OAGG;IACH,QAAQ,IAAI,aAAa;IAkBzB,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,mEAAmE;IACnE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,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;IAkBtD,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;IAqBxC,wEAAwE;IACxE,OAAO,IAAI,OAAO;IAUlB,WAAW,IAAI,IAAI;IAanB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB1C,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,kBAAkB;CAS3B"}
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;IAkBzB,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,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;IAqBxC;;;;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"}
@@ -1,4 +1,4 @@
1
1
  export { Viewport } from './Viewport.js';
2
- export { barIndexToX, priceToY, xToBarIndex, yToPrice, timestampToBarIndex, resolveBarIndex, timeToX, xToTime, } from './ScaleMapping.js';
2
+ export { barIndexToX, priceToY, xToBarIndex, yToPrice, timestampToBarIndex, resolveBarIndex, barTimeStep, barIndexToTime, timeToX, xToTime, } from './ScaleMapping.js';
3
3
  export { getVisibleData } from './DataWindow.js';
4
4
  //# 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,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradecanvas/core",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "description": "Canvas rendering engine for @tradecanvas/chart",
6
6
  "license": "MIT",
@@ -34,9 +34,10 @@
34
34
  "README.md"
35
35
  ],
36
36
  "dependencies": {
37
- "@tradecanvas/commons": "1.2.0"
37
+ "@tradecanvas/commons": "1.3.0"
38
38
  },
39
39
  "devDependencies": {
40
+ "jsdom": "^25.0.1",
40
41
  "vitest": "^2.1.8"
41
42
  },
42
43
  "scripts": {