@tradecanvas/core 0.8.2 → 0.14.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 (143) hide show
  1. package/dist/axis/PriceAxis.d.ts.map +1 -1
  2. package/dist/axis/TimeAxis.d.ts +3 -0
  3. package/dist/axis/TimeAxis.d.ts.map +1 -1
  4. package/dist/charts/DepthHeatmapBuffer.d.ts +25 -0
  5. package/dist/charts/DepthHeatmapBuffer.d.ts.map +1 -0
  6. package/dist/charts/DepthHeatmapRenderer.d.ts +24 -0
  7. package/dist/charts/DepthHeatmapRenderer.d.ts.map +1 -0
  8. package/dist/charts/MarketProfileRenderer.d.ts +53 -0
  9. package/dist/charts/MarketProfileRenderer.d.ts.map +1 -0
  10. package/dist/charts/PeriodLevelsRenderer.d.ts +17 -0
  11. package/dist/charts/PeriodLevelsRenderer.d.ts.map +1 -0
  12. package/dist/charts/PivotMarkersRenderer.d.ts +21 -0
  13. package/dist/charts/PivotMarkersRenderer.d.ts.map +1 -0
  14. package/dist/charts/VolumeProfileRenderer.d.ts +36 -0
  15. package/dist/charts/VolumeProfileRenderer.d.ts.map +1 -0
  16. package/dist/charts/index.d.ts +14 -0
  17. package/dist/charts/index.d.ts.map +1 -1
  18. package/dist/charts/marketProfile.d.ts +69 -0
  19. package/dist/charts/marketProfile.d.ts.map +1 -0
  20. package/dist/charts/periodLevels.d.ts +15 -0
  21. package/dist/charts/periodLevels.d.ts.map +1 -0
  22. package/dist/charts/pivots.d.ts +26 -0
  23. package/dist/charts/pivots.d.ts.map +1 -0
  24. package/dist/drawings/DrawingManager.d.ts +21 -0
  25. package/dist/drawings/DrawingManager.d.ts.map +1 -1
  26. package/dist/drawings/autoFib.d.ts +10 -0
  27. package/dist/drawings/autoFib.d.ts.map +1 -0
  28. package/dist/drawings/index.d.ts +1 -0
  29. package/dist/drawings/index.d.ts.map +1 -1
  30. package/dist/engine/RenderEngine.d.ts +7 -0
  31. package/dist/engine/RenderEngine.d.ts.map +1 -1
  32. package/dist/features/AlertManager.d.ts +26 -4
  33. package/dist/features/AlertManager.d.ts.map +1 -1
  34. package/dist/features/MeasureOverlay.d.ts +27 -0
  35. package/dist/features/MeasureOverlay.d.ts.map +1 -0
  36. package/dist/features/ReplayManager.d.ts +5 -0
  37. package/dist/features/ReplayManager.d.ts.map +1 -1
  38. package/dist/features/index.d.ts +1 -0
  39. package/dist/features/index.d.ts.map +1 -1
  40. package/dist/index.cjs +8 -3
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.js +3961 -749
  43. package/dist/index.js.map +1 -1
  44. package/dist/indicators/IndicatorEngine.d.ts +4 -0
  45. package/dist/indicators/IndicatorEngine.d.ts.map +1 -1
  46. package/dist/indicators/index.d.ts +33 -0
  47. package/dist/indicators/index.d.ts.map +1 -1
  48. package/dist/indicators/overlay/Alligator.d.ts +28 -0
  49. package/dist/indicators/overlay/Alligator.d.ts.map +1 -0
  50. package/dist/indicators/overlay/ChandelierExit.d.ts +23 -0
  51. package/dist/indicators/overlay/ChandelierExit.d.ts.map +1 -0
  52. package/dist/indicators/overlay/MTFMovingAverage.d.ts +23 -0
  53. package/dist/indicators/overlay/MTFMovingAverage.d.ts.map +1 -0
  54. package/dist/indicators/overlay/SessionVWAP.d.ts +26 -0
  55. package/dist/indicators/overlay/SessionVWAP.d.ts.map +1 -0
  56. package/dist/indicators/panel/AcceleratorOscillator.d.ts +24 -0
  57. package/dist/indicators/panel/AcceleratorOscillator.d.ts.map +1 -0
  58. package/dist/indicators/panel/BalanceOfPower.d.ts +20 -0
  59. package/dist/indicators/panel/BalanceOfPower.d.ts.map +1 -0
  60. package/dist/indicators/panel/ChaikinVolatility.d.ts +23 -0
  61. package/dist/indicators/panel/ChaikinVolatility.d.ts.map +1 -0
  62. package/dist/indicators/panel/ChandeMomentum.d.ts +22 -0
  63. package/dist/indicators/panel/ChandeMomentum.d.ts.map +1 -0
  64. package/dist/indicators/panel/ChoppinessIndex.d.ts +22 -0
  65. package/dist/indicators/panel/ChoppinessIndex.d.ts.map +1 -0
  66. package/dist/indicators/panel/ConnorsRSI.d.ts +25 -0
  67. package/dist/indicators/panel/ConnorsRSI.d.ts.map +1 -0
  68. package/dist/indicators/panel/Coppock.d.ts +24 -0
  69. package/dist/indicators/panel/Coppock.d.ts.map +1 -0
  70. package/dist/indicators/panel/DetrendedPriceOscillator.d.ts +21 -0
  71. package/dist/indicators/panel/DetrendedPriceOscillator.d.ts.map +1 -0
  72. package/dist/indicators/panel/DisparityIndex.d.ts +22 -0
  73. package/dist/indicators/panel/DisparityIndex.d.ts.map +1 -0
  74. package/dist/indicators/panel/EaseOfMovement.d.ts +25 -0
  75. package/dist/indicators/panel/EaseOfMovement.d.ts.map +1 -0
  76. package/dist/indicators/panel/ElderRay.d.ts +22 -0
  77. package/dist/indicators/panel/ElderRay.d.ts.map +1 -0
  78. package/dist/indicators/panel/FisherTransform.d.ts +21 -0
  79. package/dist/indicators/panel/FisherTransform.d.ts.map +1 -0
  80. package/dist/indicators/panel/ForceIndex.d.ts +21 -0
  81. package/dist/indicators/panel/ForceIndex.d.ts.map +1 -0
  82. package/dist/indicators/panel/KST.d.ts +29 -0
  83. package/dist/indicators/panel/KST.d.ts.map +1 -0
  84. package/dist/indicators/panel/Klinger.d.ts +26 -0
  85. package/dist/indicators/panel/Klinger.d.ts.map +1 -0
  86. package/dist/indicators/panel/MassIndex.d.ts +21 -0
  87. package/dist/indicators/panel/MassIndex.d.ts.map +1 -0
  88. package/dist/indicators/panel/PercentagePriceOscillator.d.ts +24 -0
  89. package/dist/indicators/panel/PercentagePriceOscillator.d.ts.map +1 -0
  90. package/dist/indicators/panel/PrettyGoodOscillator.d.ts +23 -0
  91. package/dist/indicators/panel/PrettyGoodOscillator.d.ts.map +1 -0
  92. package/dist/indicators/panel/PriceVolumeTrend.d.ts +20 -0
  93. package/dist/indicators/panel/PriceVolumeTrend.d.ts.map +1 -0
  94. package/dist/indicators/panel/Qstick.d.ts +23 -0
  95. package/dist/indicators/panel/Qstick.d.ts.map +1 -0
  96. package/dist/indicators/panel/RelativeMomentumIndex.d.ts +22 -0
  97. package/dist/indicators/panel/RelativeMomentumIndex.d.ts.map +1 -0
  98. package/dist/indicators/panel/RelativeVigor.d.ts +21 -0
  99. package/dist/indicators/panel/RelativeVigor.d.ts.map +1 -0
  100. package/dist/indicators/panel/SchaffTrendCycle.d.ts +23 -0
  101. package/dist/indicators/panel/SchaffTrendCycle.d.ts.map +1 -0
  102. package/dist/indicators/panel/StochasticRSI.d.ts +23 -0
  103. package/dist/indicators/panel/StochasticRSI.d.ts.map +1 -0
  104. package/dist/indicators/panel/TRIX.d.ts +22 -0
  105. package/dist/indicators/panel/TRIX.d.ts.map +1 -0
  106. package/dist/indicators/panel/UltimateOscillator.d.ts +25 -0
  107. package/dist/indicators/panel/UltimateOscillator.d.ts.map +1 -0
  108. package/dist/indicators/panel/VolumeDelta.d.ts +22 -0
  109. package/dist/indicators/panel/VolumeDelta.d.ts.map +1 -0
  110. package/dist/indicators/panel/Vortex.d.ts +21 -0
  111. package/dist/indicators/panel/Vortex.d.ts.map +1 -0
  112. package/dist/indicators/panel/WilliamsAD.d.ts +21 -0
  113. package/dist/indicators/panel/WilliamsAD.d.ts.map +1 -0
  114. package/dist/indicators/registry.d.ts.map +1 -1
  115. package/dist/interaction/AlertDragHandler.d.ts +21 -0
  116. package/dist/interaction/AlertDragHandler.d.ts.map +1 -0
  117. package/dist/interaction/AxisDragHandler.d.ts +32 -0
  118. package/dist/interaction/AxisDragHandler.d.ts.map +1 -0
  119. package/dist/interaction/CrosshairHandler.d.ts +12 -0
  120. package/dist/interaction/CrosshairHandler.d.ts.map +1 -1
  121. package/dist/interaction/InteractionManager.d.ts +50 -1
  122. package/dist/interaction/InteractionManager.d.ts.map +1 -1
  123. package/dist/interaction/PinnedTooltip.d.ts +39 -0
  124. package/dist/interaction/PinnedTooltip.d.ts.map +1 -0
  125. package/dist/interaction/index.d.ts +3 -0
  126. package/dist/interaction/index.d.ts.map +1 -1
  127. package/dist/trading/BracketTool.d.ts +46 -0
  128. package/dist/trading/BracketTool.d.ts.map +1 -0
  129. package/dist/trading/TradingManager.d.ts +8 -1
  130. package/dist/trading/TradingManager.d.ts.map +1 -1
  131. package/dist/trading/index.d.ts +2 -0
  132. package/dist/trading/index.d.ts.map +1 -1
  133. package/dist/ui/SessionBreaks.d.ts +6 -6
  134. package/dist/ui/SessionBreaks.d.ts.map +1 -1
  135. package/dist/ui/SessionShading.d.ts +19 -0
  136. package/dist/ui/SessionShading.d.ts.map +1 -0
  137. package/dist/ui/index.d.ts +3 -0
  138. package/dist/ui/index.d.ts.map +1 -1
  139. package/dist/ui/sessionHours.d.ts +17 -0
  140. package/dist/ui/sessionHours.d.ts.map +1 -0
  141. package/dist/viewport/Viewport.d.ts +12 -1
  142. package/dist/viewport/Viewport.d.ts.map +1 -1
  143. package/package.json +2 -2
@@ -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;CA4CnF"}
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;CAwDnF"}
@@ -1,5 +1,8 @@
1
1
  import { ViewportState, Theme, DataSeries } from '@tradecanvas/commons';
2
2
  export declare class TimeAxis {
3
+ /** null = browser-local timezone; a number = fixed UTC offset in minutes. */
4
+ private tzOffsetMinutes;
5
+ setTimezoneOffset(minutes: number | null): void;
3
6
  render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, data: DataSeries, axisYOverride?: number): void;
4
7
  }
5
8
  //# sourceMappingURL=TimeAxis.d.ts.map
@@ -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;AAW7E,qBAAa,QAAQ;IACnB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;CA8D7H"}
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;CA6D7H"}
@@ -0,0 +1,25 @@
1
+ import { DepthData, DepthLevel } from '@tradecanvas/commons';
2
+ export interface DepthSnapshot {
3
+ time: number;
4
+ bids: DepthLevel[];
5
+ asks: DepthLevel[];
6
+ }
7
+ /**
8
+ * A fixed-capacity ring of order-book snapshots, the data behind the liquidity
9
+ * heatmap. Snapshots are appended in time order; the oldest are dropped once
10
+ * `capacity` is exceeded. A repeated timestamp replaces the last snapshot
11
+ * (the book updating within the same bar) rather than growing the buffer.
12
+ */
13
+ export declare class DepthHeatmapBuffer {
14
+ private capacity;
15
+ private buffer;
16
+ constructor(capacity?: number);
17
+ push(time: number, depth: DepthData): void;
18
+ snapshots(): ReadonlyArray<DepthSnapshot>;
19
+ /** Largest single level volume across all snapshots (for colour scaling). */
20
+ maxVolume(): number;
21
+ setCapacity(capacity: number): void;
22
+ clear(): void;
23
+ get size(): number;
24
+ }
25
+ //# sourceMappingURL=DepthHeatmapBuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DepthHeatmapBuffer.d.ts","sourceRoot":"","sources":["../../src/charts/DepthHeatmapBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,MAAM,CAAuB;gBAEjB,QAAQ,SAAM;IAIlC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAiB1C,SAAS,IAAI,aAAa,CAAC,aAAa,CAAC;IAIzC,6EAA6E;IAC7E,SAAS,IAAI,MAAM;IASnB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,24 @@
1
+ import { DepthData, ViewportState, Theme } from '@tradecanvas/commons';
2
+ /**
3
+ * Order-book liquidity heatmap. Each accumulated depth snapshot becomes a
4
+ * vertical strip at its time position; every price level is a cell whose
5
+ * brightness scales with resting size (bids green, asks red). Reveals where
6
+ * liquidity walls sit and persist over time — the classic crypto "heatmap".
7
+ *
8
+ * Snapshots are fed via `push()` (typically alongside the depth overlay) and
9
+ * stored in a fixed-capacity ring buffer.
10
+ */
11
+ export declare class DepthHeatmapRenderer {
12
+ private buffer;
13
+ private visible;
14
+ private opacity;
15
+ setVisible(v: boolean): void;
16
+ isVisible(): boolean;
17
+ setOpacity(o: number): void;
18
+ setCapacity(n: number): void;
19
+ push(time: number, depth: DepthData): void;
20
+ clear(): void;
21
+ render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
22
+ private drawSide;
23
+ }
24
+ //# sourceMappingURL=DepthHeatmapRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DepthHeatmapRenderer.d.ts","sourceRoot":"","sources":["../../src/charts/DepthHeatmapRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIxF;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAO;IAEtB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAG5B,SAAS,IAAI,OAAO;IAGpB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG3B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA2BlF,OAAO,CAAC,QAAQ;CAuBjB"}
@@ -0,0 +1,53 @@
1
+ import { DataSeries, ViewportState, Theme } from '@tradecanvas/commons';
2
+ /**
3
+ * Market Profile (TPO) — a horizontal histogram of *time at price* over the
4
+ * visible range. Each bar contributes one TPO to every price bucket its
5
+ * [low, high] range touched; the widest row is the Point of Control and the
6
+ * shaded band is the value area (≈70% of TPOs by default).
7
+ *
8
+ * Distinct from the Volume Profile (which weights by traded volume): this
9
+ * weights by time, and is left-pinned so the two can be shown together.
10
+ * Re-bins against the current viewport on every pan/zoom.
11
+ */
12
+ export interface MarketProfileStats {
13
+ /** Point-of-control price (busiest bucket midpoint). */
14
+ poc: number;
15
+ /** Value-area high price. */
16
+ vah: number;
17
+ /** Value-area low price. */
18
+ val: number;
19
+ /** Fraction of TPOs inside the value area (the configured target). */
20
+ valueAreaPct: number;
21
+ }
22
+ export declare class MarketProfileRenderer {
23
+ private visible;
24
+ private buckets;
25
+ private widthRatio;
26
+ private opacity;
27
+ private valueAreaPct;
28
+ private highlightPoC;
29
+ private showStats;
30
+ private splitBySession;
31
+ private letters;
32
+ private lastStats;
33
+ setVisible(v: boolean): void;
34
+ isVisible(): boolean;
35
+ setBuckets(n: number): void;
36
+ setWidthRatio(r: number): void;
37
+ setOpacity(o: number): void;
38
+ setValueAreaPct(p: number): void;
39
+ setHighlightPoC(enabled: boolean): void;
40
+ setShowStats(enabled: boolean): void;
41
+ /** Split the profile into one mini-histogram per calendar-day session. */
42
+ setSplitBySession(enabled: boolean): void;
43
+ isSplitBySession(): boolean;
44
+ /** Render TPO letters (A, B, C…) per session instead of bars, when split + zoomed in. */
45
+ setLetters(enabled: boolean): void;
46
+ /** POC / VAH / VAL from the most recent render, or null if not drawn. */
47
+ getStats(): MarketProfileStats | null;
48
+ render(ctx: CanvasRenderingContext2D, data: DataSeries, viewport: ViewportState, theme: Theme): void;
49
+ /** One mini-profile per calendar-day session, anchored under its bars. */
50
+ private renderSplit;
51
+ private drawStats;
52
+ }
53
+ //# sourceMappingURL=MarketProfileRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketProfileRenderer.d.ts","sourceRoot":"","sources":["../../src/charts/MarketProfileRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI7E;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAmC;IAEpD,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC5B,SAAS,IAAI,OAAO;IACpB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC3B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC9B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC3B,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAChC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACvC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACpC,0EAA0E;IAC1E,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACzC,gBAAgB,IAAI,OAAO;IAC3B,yFAAyF;IACzF,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAElC,yEAAyE;IACzE,QAAQ,IAAI,kBAAkB,GAAG,IAAI;IAIrC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA0FpG,0EAA0E;IAC1E,OAAO,CAAC,WAAW;IAkFnB,OAAO,CAAC,SAAS;CA2ClB"}
@@ -0,0 +1,17 @@
1
+ import { DataSeries, ViewportState, Theme } from '@tradecanvas/commons';
2
+ import { LevelPeriod } from './periodLevels.js';
3
+ /**
4
+ * Draws prior-period reference levels (PDH / PDL / PDC + the current period's
5
+ * open, or the weekly equivalents) as labelled horizontal lines — the levels
6
+ * intraday traders watch for support/resistance.
7
+ */
8
+ export declare class PeriodLevelsRenderer {
9
+ private visible;
10
+ private period;
11
+ setVisible(v: boolean): void;
12
+ isVisible(): boolean;
13
+ setPeriod(period: LevelPeriod): void;
14
+ getPeriod(): LevelPeriod;
15
+ render(ctx: CanvasRenderingContext2D, data: DataSeries, viewport: ViewportState, theme: Theme): void;
16
+ }
17
+ //# sourceMappingURL=PeriodLevelsRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeriodLevelsRenderer.d.ts","sourceRoot":"","sources":["../../src/charts/PeriodLevelsRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAuB,KAAK,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AAE3F;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAG5B,SAAS,IAAI,OAAO;IAGpB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAGpC,SAAS,IAAI,WAAW;IAIxB,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA2CrG"}
@@ -0,0 +1,21 @@
1
+ import { DataSeries, ViewportState, Theme } from '@tradecanvas/commons';
2
+ /**
3
+ * Marks fractal swing highs/lows with small triangles (▼ above a pivot high,
4
+ * ▲ below a pivot low). Recomputed against the full series each render; only
5
+ * the visible pivots are drawn.
6
+ */
7
+ export declare class PivotMarkersRenderer {
8
+ private visible;
9
+ private left;
10
+ private right;
11
+ private showLabels;
12
+ private structureLabels;
13
+ setVisible(v: boolean): void;
14
+ isVisible(): boolean;
15
+ setStrength(left: number, right: number): void;
16
+ setShowLabels(v: boolean): void;
17
+ /** Show market-structure labels (HH/HL/LH/LL) on each pivot. */
18
+ setStructureLabels(v: boolean): void;
19
+ render(ctx: CanvasRenderingContext2D, data: DataSeries, viewport: ViewportState, theme: Theme): void;
20
+ }
21
+ //# sourceMappingURL=PivotMarkersRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PivotMarkersRenderer.d.ts","sourceRoot":"","sources":["../../src/charts/PivotMarkersRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI7E;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAEhC,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC5B,SAAS,IAAI,OAAO;IACpB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9C,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC/B,gEAAgE;IAChE,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAEpC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA6CrG"}
@@ -0,0 +1,36 @@
1
+ import { DataSeries, ViewportState, Theme } from '@tradecanvas/commons';
2
+ /**
3
+ * Volume Profile — horizontal histogram of traded volume bucketed by price.
4
+ *
5
+ * Distributes each bar's volume across the price range it covered (low → high)
6
+ * using a simple uniform distribution. The result is a side histogram pinned
7
+ * to the right edge of the chart that shows where the market spent the most
8
+ * volume — the "value area" and "point of control" come from this shape.
9
+ *
10
+ * Tradeoffs (intentional):
11
+ * - Uniform low→high allocation, not VWAP-weighted. Cheaper to compute and
12
+ * close enough for visual reading at chart-zoom scales.
13
+ * - Buckets are computed against the *visible price range*, so the profile
14
+ * rebins on pan/zoom — what you see is always relative to the current
15
+ * viewport.
16
+ * - No look-ahead: only bars currently inside `visibleRange` contribute.
17
+ */
18
+ export declare class VolumeProfileRenderer {
19
+ private visible;
20
+ /** Number of horizontal buckets the visible price range is split into. */
21
+ private buckets;
22
+ /** Profile width as a fraction of chart width. 0.18 ≈ 18%. */
23
+ private widthRatio;
24
+ /** Opacity of the histogram bars. */
25
+ private opacity;
26
+ /** Highlight the highest-volume bucket (point of control). */
27
+ private highlightPoC;
28
+ setVisible(v: boolean): void;
29
+ isVisible(): boolean;
30
+ setBuckets(n: number): void;
31
+ setWidthRatio(r: number): void;
32
+ setOpacity(o: number): void;
33
+ setHighlightPoC(enabled: boolean): void;
34
+ render(ctx: CanvasRenderingContext2D, data: DataSeries, viewport: ViewportState, theme: Theme): void;
35
+ }
36
+ //# sourceMappingURL=VolumeProfileRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolumeProfileRenderer.d.ts","sourceRoot":"","sources":["../../src/charts/VolumeProfileRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,0EAA0E;IAC1E,OAAO,CAAC,OAAO,CAAM;IACrB,8DAA8D;IAC9D,OAAO,CAAC,UAAU,CAAQ;IAC1B,qCAAqC;IACrC,OAAO,CAAC,OAAO,CAAQ;IACvB,8DAA8D;IAC9D,OAAO,CAAC,YAAY,CAAQ;IAE5B,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAC5B,SAAS,IAAI,OAAO;IACpB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC3B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC9B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAC3B,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAEvC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAgGrG"}
@@ -14,6 +14,20 @@ export { HLCAreaRenderer } from './HLCAreaRenderer.js';
14
14
  export { StepLineRenderer } from './StepLineRenderer.js';
15
15
  export { LineWithMarkersRenderer } from './LineWithMarkersRenderer.js';
16
16
  export { VolumeRenderer } from './VolumeRenderer.js';
17
+ export { VolumeProfileRenderer } from './VolumeProfileRenderer.js';
18
+ export { MarketProfileRenderer } from './MarketProfileRenderer.js';
19
+ export type { MarketProfileStats } from './MarketProfileRenderer.js';
20
+ export { computeMarketProfile, computeSessionProfiles, tpoLetter, assignSessionLetters } from './marketProfile.js';
21
+ export type { MarketProfile, MarketProfileBucket, MarketProfileOptions, SessionProfile } from './marketProfile.js';
22
+ export { PeriodLevelsRenderer } from './PeriodLevelsRenderer.js';
23
+ export { PivotMarkersRenderer } from './PivotMarkersRenderer.js';
24
+ export { findPivots, classifyPivots } from './pivots.js';
25
+ export type { Pivot, ClassifiedPivot, StructureLabel } from './pivots.js';
26
+ export { computePeriodLevels } from './periodLevels.js';
27
+ export type { LevelPeriod, PriceLevel } from './periodLevels.js';
28
+ export { DepthHeatmapRenderer } from './DepthHeatmapRenderer.js';
29
+ export { DepthHeatmapBuffer } from './DepthHeatmapBuffer.js';
30
+ export type { DepthSnapshot } from './DepthHeatmapBuffer.js';
17
31
  export { CompareRenderer } from './CompareRenderer.js';
18
32
  export type { CompareSymbol } from './CompareRenderer.js';
19
33
  export * from './transforms/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnH,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { OHLCBar } from '@tradecanvas/commons';
2
+ export interface MarketProfileBucket {
3
+ /** Lower price bound of the bucket. */
4
+ low: number;
5
+ /** Upper price bound of the bucket. */
6
+ high: number;
7
+ /** Bucket midpoint price. */
8
+ mid: number;
9
+ /** TPO count — number of bars whose [low, high] range touched this bucket. */
10
+ count: number;
11
+ }
12
+ export interface MarketProfile {
13
+ /** Buckets ordered low → high price. */
14
+ buckets: MarketProfileBucket[];
15
+ /** Index of the Point of Control (highest-count bucket). */
16
+ pocIndex: number;
17
+ /** Highest bucket count. */
18
+ maxCount: number;
19
+ /** Sum of all bucket counts. */
20
+ totalCount: number;
21
+ /** Lower price bound of the value area. */
22
+ valueAreaLow: number;
23
+ /** Upper price bound of the value area. */
24
+ valueAreaHigh: number;
25
+ }
26
+ export interface MarketProfileOptions {
27
+ /** Number of price buckets (4–500). Default 48. */
28
+ buckets?: number;
29
+ /** Fraction of TPOs that define the value area (0–1). Default 0.7. */
30
+ valueAreaPct?: number;
31
+ }
32
+ /**
33
+ * Time-Price-Opportunity (Market Profile) over a set of bars within a price
34
+ * window. Each bar is one TPO bracket; a bucket's count is the number of bars
35
+ * whose [low, high] range overlapped it. Returns the Point of Control (busiest
36
+ * price) and a value area (the smallest price range, grown out from the POC by
37
+ * the heavier adjacent bucket, that holds `valueAreaPct` of all TPOs).
38
+ *
39
+ * Returns null when there's nothing to profile (empty input or non-positive
40
+ * price span).
41
+ */
42
+ export declare function computeMarketProfile(bars: ReadonlyArray<OHLCBar>, priceMin: number, priceMax: number, opts?: MarketProfileOptions): MarketProfile | null;
43
+ /** TPO letter for a bracket index: A–Z then a–z, wrapping every 52. */
44
+ export declare function tpoLetter(index: number): string;
45
+ /**
46
+ * For a single session's bars, the bracket (letter) indices that touched each
47
+ * price bucket. `result[b]` is the ascending list of bar indices whose
48
+ * [low, high] range overlapped bucket `b`. Bucket count matches
49
+ * `computeMarketProfile` so letters and histogram line up.
50
+ */
51
+ export declare function assignSessionLetters(bars: ReadonlyArray<OHLCBar>, priceMin: number, priceMax: number, buckets?: number): number[][];
52
+ export interface SessionProfile {
53
+ /** Index of the session's first bar within the input array. */
54
+ startIndex: number;
55
+ /** Index of the session's last bar within the input array (inclusive). */
56
+ endIndex: number;
57
+ /** UTC start-of-session timestamp (calendar-day bucket). */
58
+ startTime: number;
59
+ /** TPO profile for this session, against the shared price window. */
60
+ profile: MarketProfile;
61
+ }
62
+ /**
63
+ * Split a contiguous bar array into calendar-day sessions and compute a TPO
64
+ * profile for each, all against the same shared price window so they line up
65
+ * on a common y-axis. Sessions with no profile (e.g. a single flat bar) are
66
+ * skipped. Input bars are assumed ascending by time.
67
+ */
68
+ export declare function computeSessionProfiles(bars: ReadonlyArray<OHLCBar>, priceMin: number, priceMax: number, opts?: MarketProfileOptions): SessionProfile[];
69
+ //# sourceMappingURL=marketProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketProfile.d.ts","sourceRoot":"","sources":["../../src/charts/marketProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,oBAAyB,GAC9B,aAAa,GAAG,IAAI,CA4DtB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAK,GACX,MAAM,EAAE,EAAE,CAeZ;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,oBAAyB,GAC9B,cAAc,EAAE,CAsBlB"}
@@ -0,0 +1,15 @@
1
+ import { OHLCBar } from '@tradecanvas/commons';
2
+ export type LevelPeriod = 'day' | 'week';
3
+ export interface PriceLevel {
4
+ id: string;
5
+ /** Short label, e.g. "PDH", "PWL", "Open". */
6
+ label: string;
7
+ price: number;
8
+ }
9
+ /**
10
+ * Prior-period reference levels (e.g. prior-day high/low/close + the current
11
+ * period's open). Bars are assumed ascending by time. Returns an empty array
12
+ * until at least one completed period plus a current one exist.
13
+ */
14
+ export declare function computePeriodLevels(bars: ReadonlyArray<OHLCBar>, period?: LevelPeriod): PriceLevel[];
15
+ //# sourceMappingURL=periodLevels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"periodLevels.d.ts","sourceRoot":"","sources":["../../src/charts/periodLevels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AA2BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,MAAM,GAAE,WAAmB,GAC1B,UAAU,EAAE,CAcd"}
@@ -0,0 +1,26 @@
1
+ import { DataSeries } from '@tradecanvas/commons';
2
+ export interface Pivot {
3
+ index: number;
4
+ price: number;
5
+ type: 'high' | 'low';
6
+ }
7
+ /** Market-structure label: higher/lower high, higher/lower low. */
8
+ export type StructureLabel = 'HH' | 'LH' | 'HL' | 'LL';
9
+ export interface ClassifiedPivot extends Pivot {
10
+ label: StructureLabel;
11
+ }
12
+ /**
13
+ * Label each pivot against the previous pivot of the same kind: a high is `HH`
14
+ * when it exceeds the prior high else `LH`; a low is `HL` when it's above the
15
+ * prior low else `LL`. The first high defaults to `HH` and the first low to
16
+ * `LL` (no prior to compare). Input is assumed ordered by index.
17
+ */
18
+ export declare function classifyPivots(pivots: ReadonlyArray<Pivot>): ClassifiedPivot[];
19
+ /**
20
+ * Fractal pivot points: a bar is a pivot high when its high strictly exceeds
21
+ * the highs of `left` bars before and `right` bars after (pivot low is the
22
+ * mirror on lows). Ties disqualify, so flat plateaus aren't marked. Pivots
23
+ * within `right` bars of the end aren't yet confirmed and are omitted.
24
+ */
25
+ export declare function findPivots(data: DataSeries, left?: number, right?: number): Pivot[];
26
+ //# sourceMappingURL=pivots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivots.d.ts","sourceRoot":"","sources":["../../src/charts/pivots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CACtB;AAED,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC5C,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,eAAe,EAAE,CAc9E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,SAAI,EAAE,KAAK,SAAI,GAAG,KAAK,EAAE,CAmBzE"}
@@ -47,15 +47,36 @@ export declare class DrawingManager {
47
47
  unlockAllDrawings(): void;
48
48
  hideAllDrawings(): void;
49
49
  showAllDrawings(): void;
50
+ /** Toggle a single drawing's visibility. Returns the new value, or null if not found. */
51
+ setDrawingVisible(id: string, visible: boolean): boolean | null;
52
+ /** Toggle a single drawing's lock. Returns the new value, or null if not found. */
53
+ setDrawingLocked(id: string, locked: boolean): boolean | null;
50
54
  setActiveTool(type: DrawingToolType | null): void;
51
55
  getActiveTool(): DrawingToolType | null;
52
56
  setStyle(style: Partial<DrawingStyle>): void;
57
+ /** Current style applied to newly created drawings. */
58
+ getActiveStyle(): DrawingStyle;
59
+ /**
60
+ * Restyle the selected drawing (or a specific one by id). Records an undo
61
+ * entry. Returns true if a drawing was restyled.
62
+ */
63
+ setSelectedDrawingStyle(style: Partial<DrawingStyle>, id?: string): boolean;
53
64
  onPointerDown(pos: Point, viewport: ViewportState): boolean;
54
65
  onPointerMove(pos: Point, viewport: ViewportState): boolean;
55
66
  onPointerUp(): boolean;
56
67
  onKeyDown(key: string, ctrlKey?: boolean): boolean;
57
68
  getDrawings(): DrawingState[];
58
69
  setDrawings(states: DrawingState[]): void;
70
+ /**
71
+ * Append a drawing (assigning a fresh id and applying the active style for any
72
+ * omitted style fields). Records an undo entry. Returns the new id.
73
+ */
74
+ addDrawing(state: Omit<DrawingState, 'id' | 'style' | 'visible' | 'locked'> & {
75
+ id?: string;
76
+ style?: Partial<DrawingStyle>;
77
+ visible?: boolean;
78
+ locked?: boolean;
79
+ }): string;
59
80
  /**
60
81
  * Auto-migrate legacy bar-index anchors to real timestamps when data is
61
82
  * available. Heuristic: anchors with `time < 1e9` are treated as bar indices
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/drawings/DrawingManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/drawings/DrawingManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { DataSeries, AnchorPoint } from '@tradecanvas/commons';
2
+ /**
3
+ * The dominant swing within `[from, to]`: the extreme high and extreme low,
4
+ * returned as two anchors in time order so a Fibonacci retracement drawn from
5
+ * them follows the swing direction (up-swing = low→high, down-swing =
6
+ * high→low). Returns null when there is no usable two-point swing (empty range
7
+ * or the high and low fall on the same bar).
8
+ */
9
+ export declare function findDominantSwing(data: DataSeries, from: number, to: number): [AnchorPoint, AnchorPoint] | null;
10
+ //# sourceMappingURL=autoFib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoFib.d.ts","sourceRoot":"","sources":["../../src/drawings/autoFib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,IAAI,CAkBnC"}
@@ -1,5 +1,6 @@
1
1
  export { DrawingBase } from './DrawingBase.js';
2
2
  export { DrawingManager } from './DrawingManager.js';
3
3
  export { DrawingRenderer } from './DrawingRenderer.js';
4
+ export { findDominantSwing } from './autoFib.js';
4
5
  export * from './tools/index.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drawings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drawings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,cAAc,kBAAkB,CAAC"}
@@ -37,12 +37,19 @@ export interface RenderContext {
37
37
  currentPriceLine: CurrentPriceLine | null;
38
38
  chartLegend: ChartLegend | null;
39
39
  volumeRenderer: VolumeRenderer | null;
40
+ volumeProfile: import('../charts/VolumeProfileRenderer.js').VolumeProfileRenderer | null;
41
+ marketProfile: import('../charts/MarketProfileRenderer.js').MarketProfileRenderer | null;
42
+ depthHeatmap: import('../charts/DepthHeatmapRenderer.js').DepthHeatmapRenderer | null;
43
+ periodLevels: import('../charts/PeriodLevelsRenderer.js').PeriodLevelsRenderer | null;
44
+ pivotMarkers: import('../charts/PivotMarkersRenderer.js').PivotMarkersRenderer | null;
40
45
  watermark: Watermark | null;
41
46
  barCountdown: BarCountdown | null;
42
47
  sessionBreaks: SessionBreaks | null;
48
+ sessionShading: import('../ui/SessionShading.js').SessionShading | null;
43
49
  compareRenderer: CompareRenderer | null;
44
50
  alertManager: AlertManager | null;
45
51
  signalMarkerManager: SignalMarkerManager | null;
52
+ measureOverlay: import('../features/MeasureOverlay.js').MeasureOverlay | null;
46
53
  tradeZoneManager: TradeZoneManager | null;
47
54
  panels: PanelRenderInfo[];
48
55
  priceLimits?: {
@@ -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,4 +1,4 @@
1
- import { ViewportState, Theme } from '@tradecanvas/commons';
1
+ import { ViewportState, Theme, Point } from '@tradecanvas/commons';
2
2
  import { Emitter } from '../realtime/Emitter.js';
3
3
  export type AlertCondition = 'crossingUp' | 'crossingDown' | 'crossing' | 'greaterThan' | 'lessThan';
4
4
  export interface PriceAlert {
@@ -8,11 +8,17 @@ export interface PriceAlert {
8
8
  message?: string;
9
9
  triggered: boolean;
10
10
  repeating: boolean;
11
+ /** Data channel evaluated against `price`. `'price'` (default) or an
12
+ * indicator line id like `<instanceId>:<key>`. */
13
+ channel: string;
14
+ /** Human label for the source (e.g. "RSI"). Defaults to the price. */
15
+ label?: string;
11
16
  }
12
17
  interface AlertEvents {
13
18
  triggered: PriceAlert;
14
19
  added: PriceAlert;
15
20
  removed: string;
21
+ updated: PriceAlert;
16
22
  [key: string]: unknown;
17
23
  }
18
24
  /**
@@ -21,17 +27,33 @@ interface AlertEvents {
21
27
  */
22
28
  export declare class AlertManager extends Emitter<AlertEvents> {
23
29
  private alerts;
24
- private lastPrice;
30
+ private lastValues;
25
31
  private requestRender;
26
32
  private pricePrecision;
27
33
  setRequestRender(cb: () => void): void;
28
34
  setPricePrecision(precision: number): void;
29
- addAlert(price: number, condition?: AlertCondition, message?: string, repeating?: boolean): string;
35
+ addAlert(price: number, condition?: AlertCondition, message?: string, repeating?: boolean, channel?: string, label?: string): string;
30
36
  removeAlert(id: string): void;
31
37
  getAlerts(): PriceAlert[];
38
+ /** First alert whose line is within `tolerance` px of `point.y`, or null. */
39
+ getAlertAtPoint(point: Point, viewport: ViewportState, tolerance?: number): PriceAlert | null;
40
+ /** Move an alert to a new price (used by drag). Re-arms a triggered alert. */
41
+ updateAlertPrice(id: string, price: number): void;
32
42
  clearAlerts(): void;
33
- /** Call on each price update to check alerts */
43
+ /** Call on each price update to check price-channel alerts. */
34
44
  checkPrice(price: number): void;
45
+ /**
46
+ * Evaluate every alert bound to `channel` against `value` (e.g. the latest
47
+ * indicator-line value). The previous value per channel is tracked so
48
+ * crossing conditions work.
49
+ */
50
+ checkChannel(channel: string, value: number): void;
51
+ /**
52
+ * Forget per-channel previous values. Call on a data context change (symbol /
53
+ * timeframe switch) so the first value of the new context seeds cleanly
54
+ * instead of crossing against a stale previous value.
55
+ */
56
+ clearLastValues(): void;
35
57
  saveToStorage(key: string): void;
36
58
  loadFromStorage(key: string): void;
37
59
  render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
@@ -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,MAAM,sBAAsB,CAAC;AAEjE,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;CACpB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,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,SAAS,CAAuB;IACxC,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,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,cAA2B,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,MAAM;IAS5G,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM7B,SAAS,IAAI,UAAU,EAAE;IAIzB,WAAW,IAAI,IAAI;IAKnB,gDAAgD;IAChD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAsC/B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUhC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAclC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA4BnF"}
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"}
@@ -0,0 +1,27 @@
1
+ import { Point, ViewportState, Theme, DataSeries } from '@tradecanvas/commons';
2
+ /**
3
+ * Transient "measure" overlay (TradingView shift-drag ruler).
4
+ *
5
+ * The tool is owned by the chart but lives outside the persistent drawing
6
+ * system on purpose: it is reset on every mouseup so it never clutters saved
7
+ * state, and it doesn't participate in undo/redo.
8
+ *
9
+ * Coordinates are stored in data space (bar index + price) so the overlay
10
+ * tracks the data correctly during pan/zoom while the user is still holding
11
+ * shift.
12
+ */
13
+ export declare class MeasureOverlay {
14
+ private active;
15
+ private startBar;
16
+ private startPrice;
17
+ private endBar;
18
+ private endPrice;
19
+ private startTime;
20
+ private endTime;
21
+ isActive(): boolean;
22
+ begin(pos: Point, viewport: ViewportState, data: DataSeries): void;
23
+ update(pos: Point, viewport: ViewportState, data: DataSeries): void;
24
+ end(): void;
25
+ render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
26
+ }
27
+ //# sourceMappingURL=MeasureOverlay.d.ts.map
@@ -0,0 +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"}