@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
package/README.md CHANGED
@@ -16,17 +16,15 @@ npm install @tradecanvas/chart
16
16
 
17
17
  ### Rendering Engine
18
18
 
19
- Multi-layer canvas rendering for optimal performance -- only dirty layers repaint each frame:
19
+ Two stacked canvases — a hover repaints only the thin top one:
20
20
 
21
21
  ```
22
- UI Layer (price axis, legend, live price) z=3
23
- Overlay Layer (drawings, trading positions/orders) z=2
24
- Main Layer (candles, indicators, volume) z=1
25
- Background (grid, watermark) z=0
22
+ Top canvas (crosshair + axis pills, legend, countdown, measure) z=1
23
+ Scene canvas (grid, candles, indicators, drawings, orders, axes) z=0
26
24
  ```
27
25
 
28
26
  - `RenderEngine` -- orchestrates the render pipeline
29
- - `LayerManager` -- manages canvas layer stack
27
+ - `LayerManager` -- the scene and top canvases
30
28
  - `RenderLoop` -- requestAnimationFrame loop with dirty tracking
31
29
  - `DPRManager` -- device pixel ratio handling for crisp rendering
32
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../../src/axis/GridRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGjE,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC5B,SAAS,IAAI,OAAO;IAEpB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAoCnF"}
1
+ {"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../../src/axis/GridRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGjE,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC5B,SAAS,IAAI,OAAO;IAEpB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAuCnF"}
@@ -1,6 +1,12 @@
1
1
  import { ViewportState, Theme } from '@tradecanvas/commons';
2
2
  export declare class PriceAxis {
3
3
  private locale;
4
+ private reservedPrice;
5
+ /**
6
+ * Price whose tag sits on the axis (the last-price tag). Tick labels it
7
+ * would cover are skipped instead of showing half-hidden behind it.
8
+ */
9
+ setReservedPriceProvider(provider: (() => number | null) | null): void;
4
10
  setLocale(locale: string): void;
5
11
  render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
6
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PriceAxis.d.ts","sourceRoot":"","sources":["../../src/axis/PriceAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGjE,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IAEzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAuDnF"}
1
+ {"version":3,"file":"PriceAxis.d.ts","sourceRoot":"","sources":["../../src/axis/PriceAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAOjE,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,aAAa,CAAsC;IAE3D;;;OAGG;IACH,wBAAwB,CAAC,QAAQ,EAAE,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAItE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA0DnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimeAxis.d.ts","sourceRoot":"","sources":["../../src/axis/TimeAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAK7E,qBAAa,QAAQ;IACnB,6EAA6E;IAC7E,OAAO,CAAC,eAAe,CAAuB;IAE9C,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI/C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;CAmE7H"}
1
+ {"version":3,"file":"TimeAxis.d.ts","sourceRoot":"","sources":["../../src/axis/TimeAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAM7E,qBAAa,QAAQ;IACnB,6EAA6E;IAC7E,OAAO,CAAC,eAAe,CAAuB;IAE9C,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI/C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;CAsE7H"}
@@ -13,6 +13,10 @@ export declare class DrawingManager {
13
13
  private committedAnchors;
14
14
  private previewAnchor;
15
15
  private selectedDrawingId;
16
+ /** Drawings selected together with `selectedDrawingId` (Ctrl/⌘-drag or Ctrl/⌘-click). */
17
+ private groupIds;
18
+ /** Start state of the other group members while the group is dragged. */
19
+ private groupDrag;
16
20
  private dragAnchorIndex;
17
21
  private dragStartPoint;
18
22
  private dragStartAnchors;
@@ -42,7 +46,34 @@ export declare class DrawingManager {
42
46
  undo(): boolean;
43
47
  redo(): boolean;
44
48
  private applyUndoAction;
49
+ private undoOne;
45
50
  private applyRedoAction;
51
+ private redoOne;
52
+ /**
53
+ * Run `fn`, recording every undo action it pushes as one undo step, so a
54
+ * group move/delete/restyle comes back with a single Ctrl+Z.
55
+ */
56
+ private batchUndo;
57
+ private isSelectedId;
58
+ private clearSelection;
59
+ private addToSelection;
60
+ /** Ids of every selected drawing, the primary one first. */
61
+ getSelectedDrawingIds(): string[];
62
+ /**
63
+ * Select every visible drawing with an anchor inside the pixel rectangle
64
+ * (the Ctrl/⌘-drag selection). Replaces the current selection.
65
+ * Returns how many were selected.
66
+ */
67
+ selectInRect(rect: {
68
+ x0: number;
69
+ y0: number;
70
+ x1: number;
71
+ y1: number;
72
+ }, viewport: ViewportState): number;
73
+ /** Ctrl/⌘-click: add the drawing under `pos` to the selection, or take it out. */
74
+ toggleSelectionAt(pos: Point, viewport: ViewportState): boolean;
75
+ /** Begin moving `primary` — and every other selected drawing with it. */
76
+ private beginMove;
46
77
  lockAllDrawings(): void;
47
78
  unlockAllDrawings(): void;
48
79
  hideAllDrawings(): void;
@@ -98,6 +129,14 @@ export declare class DrawingManager {
98
129
  private computeBarOffsetTime;
99
130
  private handleCreationClick;
100
131
  private finalizeCreation;
132
+ /** True while a drawing is being moved or reshaped by its handle. */
133
+ isDragging(): boolean;
134
+ /**
135
+ * Cursor for hovering `pos`: 'move' over a handle of the selected drawing,
136
+ * 'pointer' over any drawing that can be grabbed, otherwise null. Null too
137
+ * while a drawing tool is active (the chart keeps its crosshair).
138
+ */
139
+ hoverCursorAt(pos: Point, viewport: ViewportState): 'move' | 'pointer' | null;
101
140
  private handleSelectionClick;
102
141
  private handleMove;
103
142
  private handleResize;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/drawings/DrawingManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,KAAK,EACL,aAAa,EACb,OAAO,EACR,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAEnE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC/F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAkB3C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,WAAW,CAOjB;IACF,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIrC,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIhD,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAI9C,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIrC,aAAa,IAAI,UAAU;IAI3B,aAAa,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,GAAG,IAAI;IAI5C,kGAAkG;IAClG,oBAAoB,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,GAAG,IAAI;IAMnD;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IA0ClB,IAAI,IAAI,OAAO;IAQf,IAAI,IAAI,OAAO;IAQf,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,eAAe;IA6BvB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,IAAI,IAAI;IAKzB,eAAe,IAAI,IAAI;IAOvB,eAAe,IAAI,IAAI;IAKvB,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAS/D,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAU7D,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAQjD,aAAa,IAAI,eAAe,GAAG,IAAI;IAIvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAI5C,uDAAuD;IACvD,cAAc,IAAI,YAAY;IAI9B;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAc3E,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAY3D,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAuB3D,WAAW,IAAI,OAAO;IAuBtB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO;IA6ChD,WAAW,IAAI,YAAY,EAAE;IAI7B,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAKzC;;;OAGG;IACH,UAAU,CACR,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG;QACjE,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GACA,MAAM;IAkBT;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAc5B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAc/B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA6B3C,aAAa,IAAI,IAAI;IAOrB,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAMrC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAmCpE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,YAAY;CAYrB"}
1
+ {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/drawings/DrawingManager.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,14 @@ export declare class AnchoredVWAPTool extends DrawingBase {
18
18
  setShowBands(show: boolean): void;
19
19
  render(ctx: CanvasRenderingContext2D, state: DrawingState, viewport: ViewportState, selected: boolean): void;
20
20
  private drawLine;
21
+ /**
22
+ * Last result, reused while the series, anchor and forming bar are
23
+ * unchanged — hover hit-testing runs on every mouse move and would
24
+ * otherwise rebuild five O(n) arrays each time.
25
+ */
26
+ private vwapCache;
21
27
  private computeVWAP;
28
+ private computeVWAPUncached;
22
29
  hitTest(point: Point, state: DrawingState, viewport: ViewportState, tolerance: number): boolean;
23
30
  }
24
31
  //# sourceMappingURL=AnchoredVWAP.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnchoredVWAP.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/AnchoredVWAP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;MAAgF;IAE1F,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,SAAS,CAAQ;IAEzB,aAAa,CAAC,MAAM,EAAE,MAAM,UAAU,GAAG,IAAI;IAI7C,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIjC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAuD5G,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,WAAW;IA2CnB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAqBhG"}
1
+ {"version":3,"file":"AnchoredVWAP.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/AnchoredVWAP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;MAAgF;IAE1F,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,SAAS,CAAQ;IAEzB,aAAa,CAAC,MAAM,EAAE,MAAM,UAAU,GAAG,IAAI;IAI7C,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIjC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAuD5G,OAAO,CAAC,QAAQ;IAyBhB;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAOD;IAEhB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,mBAAmB;IA2C3B,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAqBhG"}
@@ -1,7 +1,7 @@
1
1
  import { DrawingState, Point, ViewportState } from '@tradecanvas/commons';
2
2
  import { DrawingBase } from '../DrawingBase.js';
3
3
  /**
4
- * TradingView's "Long/Short Position" tool: drag from an entry price to a
4
+ * "Long/Short Position" tool: drag from an entry price to a
5
5
  * stop price, and it draws the risk zone between them plus a reward zone of
6
6
  * equal width on the far side — sized by a fixed reward:risk ratio — with
7
7
  * labels for the $ and % at each level. Direction (long vs short) is
@@ -1,10 +1,17 @@
1
1
  import { Size, LayerType } from '@tradecanvas/commons';
2
2
  import { CanvasLayer } from './CanvasLayer.js';
3
+ /**
4
+ * Two stacked canvases: the scene (grid, series, indicators, chart objects,
5
+ * axes) and a top canvas for pointer-tied visuals. A hover repaints only the
6
+ * top one, and the compositor blends two surfaces instead of four.
7
+ */
3
8
  export declare class LayerManager {
4
9
  private container;
5
- private layers;
10
+ private scene;
11
+ private top;
6
12
  constructor(container: HTMLElement);
7
13
  createLayers(): void;
14
+ /** `Hover` → the top canvas; every other type → the scene canvas. */
8
15
  getLayer(type: LayerType): CanvasLayer | undefined;
9
16
  resize(size: Size, dpr: number): void;
10
17
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"LayerManager.d.ts","sourceRoot":"","sources":["../../src/engine/LayerManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,YAAY;IAGX,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,MAAM,CAAqC;gBAE/B,SAAS,EAAE,WAAW;IAE1C,YAAY,IAAI,IAAI;IAcpB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAIlD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrC,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"LayerManager.d.ts","sourceRoot":"","sources":["../../src/engine/LayerManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,GAAG,CAA4B;gBAEnB,SAAS,EAAE,WAAW;IAE1C,YAAY,IAAI,IAAI;IAOpB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAIlD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC,OAAO,IAAI,IAAI;CAMhB"}
@@ -50,6 +50,7 @@ export interface RenderContext {
50
50
  alertManager: AlertManager | null;
51
51
  signalMarkerManager: SignalMarkerManager | null;
52
52
  measureOverlay: import('../features/MeasureOverlay.js').MeasureOverlay | null;
53
+ selectionBoxOverlay?: import('../features/SelectionBoxOverlay.js').SelectionBoxOverlay | null;
53
54
  tradeZoneManager: TradeZoneManager | null;
54
55
  panels: PanelRenderInfo[];
55
56
  priceLimits?: {
@@ -76,10 +77,8 @@ export declare class RenderEngine {
76
77
  readonly renderLoop: RenderLoop;
77
78
  readonly dprManager: DPRManager;
78
79
  private renderCtx;
79
- private bgLayer;
80
- private mainLayer;
81
- private overlayLayer;
82
- private uiLayer;
80
+ private sceneLayer;
81
+ private topLayer;
83
82
  /**
84
83
  * Optional hook fired AFTER the canvas layers have been resized in
85
84
  * response to a container resize. The Chart class uses this to push the
@@ -95,6 +94,23 @@ export declare class RenderEngine {
95
94
  stop(): void;
96
95
  requestRender(layer?: LayerType): void;
97
96
  private render;
97
+ /** Everything that only changes with data, viewport or chart objects. */
98
+ private renderScene;
99
+ /**
100
+ * Pointer-tied visuals only — crosshair, its axis pills, the legend (it
101
+ * shows the hovered bar), bar countdown, measure ruler, selection box.
102
+ * A hover redraws just this thin layer, never the scene underneath.
103
+ */
104
+ private renderTop;
105
+ /** Indicator panes: background, divider, name and the indicator itself. */
106
+ private renderPanels;
107
+ /** Panel Y-axes: axis line, ticks and value labels. */
108
+ private renderPanelAxes;
109
+ /** Crosshair lines inside the hovered indicator pane. */
110
+ private renderPanelCrosshair;
111
+ /** Crosshair value badge on a pane's axis and the hovered bar's values in each pane header. */
112
+ private renderPanelHoverValues;
113
+ private panelDescriptors;
98
114
  private renderPriceLimits;
99
115
  destroy(): void;
100
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RenderEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RenderEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RenderEngine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RenderLoop.d.ts","sourceRoot":"","sources":["../../src/engine/RenderLoop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;AAE3E,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAA+B;IAE/C,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAIrC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOjC,YAAY,IAAI,IAAI;IAUpB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,aAAa;CActB"}
1
+ {"version":3,"file":"RenderLoop.d.ts","sourceRoot":"","sources":["../../src/engine/RenderLoop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;AAE3E,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAA+B;IAE/C,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAIrC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOjC,YAAY,IAAI,IAAI;IAWpB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,aAAa;CActB"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertManager.d.ts","sourceRoot":"","sources":["../../src/features/AlertManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAErG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;uDACmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;GAGG;AACH,qBAAa,YAAa,SAAQ,OAAO,CAAC,WAAW,CAAC;IACpD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAAK;IAE3B,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,cAA2B,EACtC,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,UAAQ,EACjB,OAAO,SAAU,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM;IAST,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM7B,SAAS,IAAI,UAAU,EAAE;IAIzB,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAI,GAAG,UAAU,GAAG,IAAI;IAgBxF,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASjD,WAAW,IAAI,IAAI;IAKnB,+DAA+D;IAC/D,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA+ClD;;;;OAIG;IACH,eAAe,IAAI,IAAI;IAIvB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWhC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAclC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA6BnF"}
1
+ {"version":3,"file":"AlertManager.d.ts","sourceRoot":"","sources":["../../src/features/AlertManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAErG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;uDACmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;GAGG;AACH,qBAAa,YAAa,SAAQ,OAAO,CAAC,WAAW,CAAC;IACpD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAAK;IAE3B,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,cAA2B,EACtC,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,UAAQ,EACjB,OAAO,SAAU,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM;IAST,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM7B,SAAS,IAAI,UAAU,EAAE;IAIzB,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAI,GAAG,UAAU,GAAG,IAAI;IAgBxF,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASjD,WAAW,IAAI,IAAI;IAKnB,+DAA+D;IAC/D,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA+ClD;;;;OAIG;IACH,eAAe,IAAI,IAAI;IAIvB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWhC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAclC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA8BnF"}
@@ -1,6 +1,6 @@
1
1
  import { Point, ViewportState, Theme, DataSeries } from '@tradecanvas/commons';
2
2
  /**
3
- * Transient "measure" overlay (TradingView shift-drag ruler).
3
+ * Transient "measure" overlay (the shift-drag ruler).
4
4
  *
5
5
  * The tool is owned by the chart but lives outside the persistent drawing
6
6
  * system on purpose: it is reset on every mouseup so it never clutters saved
@@ -1 +1 @@
1
- {"version":3,"file":"MeasureOverlay.d.ts","sourceRoot":"","sources":["../../src/features/MeasureOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGpF;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IAEtC,QAAQ,IAAI,OAAO;IAInB,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAYlE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAQnE,GAAG,IAAI,IAAI;IAIX,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA6DnF"}
1
+ {"version":3,"file":"MeasureOverlay.d.ts","sourceRoot":"","sources":["../../src/features/MeasureOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGpF;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IAEtC,QAAQ,IAAI,OAAO;IAInB,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAYlE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAQnE,GAAG,IAAI,IAAI;IAIX,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAkEnF"}
@@ -0,0 +1,29 @@
1
+ import { Point, ViewportState, Theme } from '@tradecanvas/commons';
2
+ /** A box smaller than this (px) in both directions counts as a click, not a selection. */
3
+ export declare const SELECTION_BOX_MIN_SIZE = 6;
4
+ /** Normalised pixel rectangle of a finished selection box. */
5
+ export interface SelectionBox {
6
+ x0: number;
7
+ y0: number;
8
+ x1: number;
9
+ y1: number;
10
+ /** True when the pointer barely moved — treat as a click at (x1, y1). */
11
+ isClick: boolean;
12
+ }
13
+ /**
14
+ * Ctrl/⌘-drag selection box. While dragging it draws a translucent dashed
15
+ * rectangle; on release the chart selects the drawings inside it. Transient
16
+ * like the measure ruler: never saved, no undo.
17
+ */
18
+ export declare class SelectionBoxOverlay {
19
+ private start;
20
+ private current;
21
+ isActive(): boolean;
22
+ begin(pos: Point): void;
23
+ update(pos: Point): void;
24
+ /** Finish the box; null if none was in progress. */
25
+ end(): SelectionBox | null;
26
+ cancel(): void;
27
+ render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
28
+ }
29
+ //# sourceMappingURL=SelectionBoxOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionBoxOverlay.d.ts","sourceRoot":"","sources":["../../src/features/SelectionBoxOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAExE,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,OAAO,CAAsB;IAErC,QAAQ,IAAI,OAAO;IAInB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAKvB,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAIxB,oDAAoD;IACpD,GAAG,IAAI,YAAY,GAAG,IAAI;IAa1B,MAAM,IAAI,IAAI;IAKd,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAqBnF"}
@@ -1,10 +1,12 @@
1
1
  import { DrawingState } from '@tradecanvas/commons';
2
2
  export interface UndoableAction {
3
- type: 'drawingCreate' | 'drawingRemove' | 'drawingModify';
3
+ type: 'drawingCreate' | 'drawingRemove' | 'drawingModify' | 'drawingBatch';
4
4
  /** State before the action (null for create) */
5
5
  before: DrawingState | null;
6
6
  /** State after the action (null for remove) */
7
7
  after: DrawingState | null;
8
+ /** For 'drawingBatch': the actions undone/redone together as one step. */
9
+ actions?: UndoableAction[];
8
10
  }
9
11
  export declare class UndoRedoManager {
10
12
  private undoStack;
@@ -1 +1 @@
1
- {"version":3,"file":"UndoRedoManager.d.ts","sourceRoot":"","sources":["../../src/features/UndoRedoManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;IAC1D,gDAAgD;IAChD,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;CAC5B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAA6B;IAE7C,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAUlC,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,cAAc,GAAG,IAAI;IAQ7B,IAAI,IAAI,cAAc,GAAG,IAAI;IAQ7B,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAQzF"}
1
+ {"version":3,"file":"UndoRedoManager.d.ts","sourceRoot":"","sources":["../../src/features/UndoRedoManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,cAAc,CAAC;IAC3E,gDAAgD;IAChD,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAA6B;IAE7C,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAUlC,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,cAAc,GAAG,IAAI;IAQ7B,IAAI,IAAI,cAAc,GAAG,IAAI;IAQ7B,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAQzF"}
@@ -10,4 +10,6 @@ export { DataExporter } from './DataExporter.js';
10
10
  export { SignalMarkerManager } from './SignalMarkerManager.js';
11
11
  export { TradeZoneManager } from './TradeZoneManager.js';
12
12
  export { MeasureOverlay } from './MeasureOverlay.js';
13
+ export { SelectionBoxOverlay, SELECTION_BOX_MIN_SIZE } from './SelectionBoxOverlay.js';
14
+ export type { SelectionBox } from './SelectionBoxOverlay.js';
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvF,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,41 @@
1
- import { GaugeOptions, Theme } from '@tradecanvas/commons';
1
+ import { GaugeOptions, GaugeZone, Theme } from '@tradecanvas/commons';
2
+ export interface GaugeLayout {
3
+ cx: number;
4
+ cy: number;
5
+ /** Centre line of the ring. */
6
+ radius: number;
7
+ /** Ring stroke width. */
8
+ thickness: number;
9
+ startAngle: number;
10
+ endAngle: number;
11
+ min: number;
12
+ max: number;
13
+ /** Where the value text sits (centre of the main number). */
14
+ valueY: number;
15
+ valueSize: number;
16
+ /** Lowest y the centre text may reach without meeting the end labels or the edge. */
17
+ textBottom: number;
18
+ }
19
+ /**
20
+ * Fit the gauge into `width × height`: the ring is scaled so the arc (plus
21
+ * the min/max labels and any zone labels) fills the box, then centred. Pure,
22
+ * so it can be tested without a canvas.
23
+ */
24
+ export declare function computeGaugeLayout(width: number, height: number, options: GaugeOptions): GaugeLayout;
25
+ export declare function gaugeValueToAngle(value: number, layout: GaugeLayout): number;
26
+ /** The zone containing `value` (last match wins on shared edges), if any. */
27
+ export declare function gaugeZoneAt(value: number, zones: readonly GaugeZone[] | undefined): GaugeZone | undefined;
28
+ export interface GaugeBand {
29
+ a0: number;
30
+ a1: number;
31
+ color: string;
32
+ /** Track bands fill gaps between zones and stay at full opacity. */
33
+ track: boolean;
34
+ }
35
+ /**
36
+ * The ring split into bands: zones in angle order (overlaps trimmed so each
37
+ * angle is painted once), with track bands wherever no zone reaches.
38
+ */
39
+ export declare function gaugeRingBands(layout: GaugeLayout, zones: readonly GaugeZone[] | undefined, trackColor: string): GaugeBand[];
2
40
  export declare function renderGauge(ctx: CanvasRenderingContext2D, width: number, height: number, options: GaugeOptions, theme: Theme, displayValue: number): void;
3
41
  //# sourceMappingURL=GaugeRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GaugeRenderer.d.ts","sourceRoot":"","sources":["../../src/finance/GaugeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAa,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAiQ3E,wBAAgB,WAAW,CACzB,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,MAAM,GACnB,IAAI,CA4CN"}
1
+ {"version":3,"file":"GaugeRenderer.d.ts","sourceRoot":"","sources":["../../src/finance/GaugeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA0B3E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;CACpB;AAkDD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAuCpG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAG5E;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAOzG;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAe5H;AAgPD,wBAAgB,WAAW,CACzB,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,MAAM,GACnB,IAAI,CAiCN"}