@forgecharts/sdk 1.1.23 → 1.1.28

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 (562) hide show
  1. package/dist/__tests__/backwardCompatibility.test.d.ts +14 -0
  2. package/dist/__tests__/backwardCompatibility.test.d.ts.map +1 -0
  3. package/dist/__tests__/backwardCompatibility.test.js +159 -0
  4. package/dist/__tests__/backwardCompatibility.test.js.map +1 -0
  5. package/dist/__tests__/candleInvariant.test.d.ts +20 -0
  6. package/dist/__tests__/candleInvariant.test.d.ts.map +1 -0
  7. package/dist/__tests__/candleInvariant.test.js +415 -0
  8. package/dist/__tests__/candleInvariant.test.js.map +1 -0
  9. package/dist/__tests__/public-api-surface.d.ts +13 -0
  10. package/dist/__tests__/public-api-surface.d.ts.map +1 -0
  11. package/{src/__tests__/public-api-surface.ts → dist/__tests__/public-api-surface.js} +4 -42
  12. package/dist/__tests__/public-api-surface.js.map +1 -0
  13. package/dist/__tests__/timeframeBoundary.test.d.ts +17 -0
  14. package/dist/__tests__/timeframeBoundary.test.d.ts.map +1 -0
  15. package/dist/__tests__/timeframeBoundary.test.js +452 -0
  16. package/dist/__tests__/timeframeBoundary.test.js.map +1 -0
  17. package/dist/api/DrawingManager.d.ts +20 -0
  18. package/dist/api/DrawingManager.d.ts.map +1 -0
  19. package/dist/api/DrawingManager.js +190 -0
  20. package/dist/api/DrawingManager.js.map +1 -0
  21. package/dist/api/EventBus.d.ts +19 -0
  22. package/dist/api/EventBus.d.ts.map +1 -0
  23. package/dist/api/EventBus.js +44 -0
  24. package/dist/api/EventBus.js.map +1 -0
  25. package/dist/api/IndicatorDAG.d.ts +85 -0
  26. package/dist/api/IndicatorDAG.d.ts.map +1 -0
  27. package/dist/api/IndicatorDAG.js +316 -0
  28. package/dist/api/IndicatorDAG.js.map +1 -0
  29. package/dist/api/IndicatorRegistry.d.ts +22 -0
  30. package/dist/api/IndicatorRegistry.d.ts.map +1 -0
  31. package/dist/api/IndicatorRegistry.js +39 -0
  32. package/dist/api/IndicatorRegistry.js.map +1 -0
  33. package/dist/api/LayoutManager.d.ts +30 -0
  34. package/dist/api/LayoutManager.d.ts.map +1 -0
  35. package/dist/api/LayoutManager.js +51 -0
  36. package/dist/api/LayoutManager.js.map +1 -0
  37. package/dist/api/PaneManager.d.ts +42 -0
  38. package/dist/api/PaneManager.d.ts.map +1 -0
  39. package/dist/api/PaneManager.js +119 -0
  40. package/dist/api/PaneManager.js.map +1 -0
  41. package/dist/api/ReferenceAPI.d.ts +78 -0
  42. package/dist/api/ReferenceAPI.d.ts.map +1 -0
  43. package/dist/api/ReferenceAPI.js +153 -0
  44. package/dist/api/ReferenceAPI.js.map +1 -0
  45. package/dist/api/TChart.d.ts +345 -0
  46. package/dist/api/TChart.d.ts.map +1 -0
  47. package/dist/api/TChart.js +765 -0
  48. package/dist/api/TChart.js.map +1 -0
  49. package/{src/api/createChart.ts → dist/api/createChart.d.ts} +2 -7
  50. package/dist/api/createChart.d.ts.map +1 -0
  51. package/dist/api/createChart.js +42 -0
  52. package/dist/api/createChart.js.map +1 -0
  53. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts +4 -0
  54. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts.map +1 -0
  55. package/dist/api/drawing tools/fib gann menu/fibRetracement.js +22 -0
  56. package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +1 -0
  57. package/dist/api/drawing tools/lines menu/crossLine.d.ts +4 -0
  58. package/dist/api/drawing tools/lines menu/crossLine.d.ts.map +1 -0
  59. package/dist/api/drawing tools/lines menu/crossLine.js +16 -0
  60. package/dist/api/drawing tools/lines menu/crossLine.js.map +1 -0
  61. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts +17 -0
  62. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts.map +1 -0
  63. package/dist/api/drawing tools/lines menu/disjointChannel.js +59 -0
  64. package/dist/api/drawing tools/lines menu/disjointChannel.js.map +1 -0
  65. package/dist/api/drawing tools/lines menu/extendedLine.d.ts +4 -0
  66. package/dist/api/drawing tools/lines menu/extendedLine.d.ts.map +1 -0
  67. package/dist/api/drawing tools/lines menu/extendedLine.js +17 -0
  68. package/dist/api/drawing tools/lines menu/extendedLine.js.map +1 -0
  69. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts +4 -0
  70. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts.map +1 -0
  71. package/dist/api/drawing tools/lines menu/flatTopBottom.js +41 -0
  72. package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +1 -0
  73. package/dist/api/drawing tools/lines menu/horizontal.d.ts +4 -0
  74. package/dist/api/drawing tools/lines menu/horizontal.d.ts.map +1 -0
  75. package/dist/api/drawing tools/lines menu/horizontal.js +19 -0
  76. package/dist/api/drawing tools/lines menu/horizontal.js.map +1 -0
  77. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts +4 -0
  78. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts.map +1 -0
  79. package/dist/api/drawing tools/lines menu/horizontalRay.js +20 -0
  80. package/dist/api/drawing tools/lines menu/horizontalRay.js.map +1 -0
  81. package/dist/api/drawing tools/lines menu/infoLine.d.ts +4 -0
  82. package/dist/api/drawing tools/lines menu/infoLine.d.ts.map +1 -0
  83. package/dist/api/drawing tools/lines menu/infoLine.js +107 -0
  84. package/dist/api/drawing tools/lines menu/infoLine.js.map +1 -0
  85. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts +4 -0
  86. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts.map +1 -0
  87. package/dist/api/drawing tools/lines menu/insidePitchfork.js +31 -0
  88. package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +1 -0
  89. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts +4 -0
  90. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts.map +1 -0
  91. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +15 -0
  92. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +1 -0
  93. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts +4 -0
  94. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts.map +1 -0
  95. package/dist/api/drawing tools/lines menu/parallelChannel.js +43 -0
  96. package/dist/api/drawing tools/lines menu/parallelChannel.js.map +1 -0
  97. package/dist/api/drawing tools/lines menu/pitchfork.d.ts +4 -0
  98. package/dist/api/drawing tools/lines menu/pitchfork.d.ts.map +1 -0
  99. package/dist/api/drawing tools/lines menu/pitchfork.js +12 -0
  100. package/dist/api/drawing tools/lines menu/pitchfork.js.map +1 -0
  101. package/dist/api/drawing tools/lines menu/ray.d.ts +4 -0
  102. package/dist/api/drawing tools/lines menu/ray.d.ts.map +1 -0
  103. package/dist/api/drawing tools/lines menu/ray.js +23 -0
  104. package/dist/api/drawing tools/lines menu/ray.js.map +1 -0
  105. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts +4 -0
  106. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts.map +1 -0
  107. package/dist/api/drawing tools/lines menu/regressionTrend.js +127 -0
  108. package/dist/api/drawing tools/lines menu/regressionTrend.js.map +1 -0
  109. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts +4 -0
  110. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts.map +1 -0
  111. package/dist/api/drawing tools/lines menu/schiffPitchfork.js +15 -0
  112. package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +1 -0
  113. package/dist/api/drawing tools/lines menu/trendAngle.d.ts +4 -0
  114. package/dist/api/drawing tools/lines menu/trendAngle.d.ts.map +1 -0
  115. package/dist/api/drawing tools/lines menu/trendAngle.js +51 -0
  116. package/dist/api/drawing tools/lines menu/trendAngle.js.map +1 -0
  117. package/dist/api/drawing tools/lines menu/trendline.d.ts +4 -0
  118. package/dist/api/drawing tools/lines menu/trendline.d.ts.map +1 -0
  119. package/dist/api/drawing tools/lines menu/trendline.js +11 -0
  120. package/dist/api/drawing tools/lines menu/trendline.js.map +1 -0
  121. package/dist/api/drawing tools/lines menu/vertical.d.ts +4 -0
  122. package/dist/api/drawing tools/lines menu/vertical.d.ts.map +1 -0
  123. package/dist/api/drawing tools/lines menu/vertical.js +11 -0
  124. package/dist/api/drawing tools/lines menu/vertical.js.map +1 -0
  125. package/dist/api/drawing tools/pointers menu/crosshair.d.ts +16 -0
  126. package/dist/api/drawing tools/pointers menu/crosshair.d.ts.map +1 -0
  127. package/{src/api/drawing tools/pointers menu/crosshair.ts → dist/api/drawing tools/pointers menu/crosshair.js } +6 -7
  128. package/dist/api/drawing tools/pointers menu/crosshair.js.map +1 -0
  129. package/dist/api/drawing tools/pointers menu/cursor.d.ts +15 -0
  130. package/dist/api/drawing tools/pointers menu/cursor.d.ts.map +1 -0
  131. package/{src/api/drawing tools/pointers menu/cursor.ts → dist/api/drawing tools/pointers menu/cursor.js } +7 -8
  132. package/dist/api/drawing tools/pointers menu/cursor.js.map +1 -0
  133. package/dist/api/drawing tools/pointers menu/demonstration.d.ts +30 -0
  134. package/dist/api/drawing tools/pointers menu/demonstration.d.ts.map +1 -0
  135. package/{src/api/drawing tools/pointers menu/demonstration.ts → dist/api/drawing tools/pointers menu/demonstration.js } +9 -14
  136. package/dist/api/drawing tools/pointers menu/demonstration.js.map +1 -0
  137. package/dist/api/drawing tools/pointers menu/dot.d.ts +23 -0
  138. package/dist/api/drawing tools/pointers menu/dot.d.ts.map +1 -0
  139. package/{src/api/drawing tools/pointers menu/dot.ts → dist/api/drawing tools/pointers menu/dot.js } +8 -11
  140. package/dist/api/drawing tools/pointers menu/dot.js.map +1 -0
  141. package/dist/api/drawing tools/shapes menu/rectangle.d.ts +4 -0
  142. package/dist/api/drawing tools/shapes menu/rectangle.d.ts.map +1 -0
  143. package/dist/api/drawing tools/shapes menu/rectangle.js +19 -0
  144. package/dist/api/drawing tools/shapes menu/rectangle.js.map +1 -0
  145. package/dist/api/drawing tools/shapes menu/text.d.ts +4 -0
  146. package/dist/api/drawing tools/shapes menu/text.d.ts.map +1 -0
  147. package/dist/api/drawing tools/shapes menu/text.js +25 -0
  148. package/dist/api/drawing tools/shapes menu/text.js.map +1 -0
  149. package/dist/api/drawingUtils.d.ts +22 -0
  150. package/dist/api/drawingUtils.d.ts.map +1 -0
  151. package/dist/api/drawingUtils.js +83 -0
  152. package/dist/api/drawingUtils.js.map +1 -0
  153. package/dist/core/CanvasLayer.d.ts +26 -0
  154. package/dist/core/CanvasLayer.d.ts.map +1 -0
  155. package/dist/core/CanvasLayer.js +56 -0
  156. package/dist/core/CanvasLayer.js.map +1 -0
  157. package/dist/core/Chart.d.ts +164 -0
  158. package/dist/core/Chart.d.ts.map +1 -0
  159. package/dist/core/Chart.js +839 -0
  160. package/dist/core/Chart.js.map +1 -0
  161. package/dist/core/CoordTransform.d.ts +168 -0
  162. package/dist/core/CoordTransform.d.ts.map +1 -0
  163. package/dist/core/CoordTransform.js +224 -0
  164. package/dist/core/CoordTransform.js.map +1 -0
  165. package/dist/core/Crosshair.d.ts +30 -0
  166. package/dist/core/Crosshair.d.ts.map +1 -0
  167. package/dist/core/Crosshair.js +186 -0
  168. package/dist/core/Crosshair.js.map +1 -0
  169. package/dist/core/IndicatorEngine.d.ts +51 -0
  170. package/dist/core/IndicatorEngine.d.ts.map +1 -0
  171. package/dist/core/IndicatorEngine.js +181 -0
  172. package/dist/core/IndicatorEngine.js.map +1 -0
  173. package/dist/core/InteractionManager.d.ts +197 -0
  174. package/dist/core/InteractionManager.d.ts.map +1 -0
  175. package/dist/core/InteractionManager.js +698 -0
  176. package/dist/core/InteractionManager.js.map +1 -0
  177. package/dist/core/PriceScale.d.ts +27 -0
  178. package/dist/core/PriceScale.d.ts.map +1 -0
  179. package/dist/core/PriceScale.js +113 -0
  180. package/dist/core/PriceScale.js.map +1 -0
  181. package/dist/core/Series.d.ts +40 -0
  182. package/dist/core/Series.d.ts.map +1 -0
  183. package/dist/core/Series.js +114 -0
  184. package/dist/core/Series.js.map +1 -0
  185. package/dist/core/TimeScale.d.ts +43 -0
  186. package/dist/core/TimeScale.d.ts.map +1 -0
  187. package/dist/core/TimeScale.js +150 -0
  188. package/dist/core/TimeScale.js.map +1 -0
  189. package/dist/datafeed/DatafeedConnector.d.ts +89 -0
  190. package/dist/datafeed/DatafeedConnector.d.ts.map +1 -0
  191. package/dist/datafeed/DatafeedConnector.js +268 -0
  192. package/dist/datafeed/DatafeedConnector.js.map +1 -0
  193. package/dist/engine/CandleEngine.d.ts +207 -0
  194. package/dist/engine/CandleEngine.d.ts.map +1 -0
  195. package/dist/engine/CandleEngine.js +318 -0
  196. package/dist/engine/CandleEngine.js.map +1 -0
  197. package/dist/engine/__tests__/CandleEngine.test.d.ts +2 -0
  198. package/dist/engine/__tests__/CandleEngine.test.d.ts.map +1 -0
  199. package/dist/engine/__tests__/CandleEngine.test.js +300 -0
  200. package/dist/engine/__tests__/CandleEngine.test.js.map +1 -0
  201. package/dist/engine/candleInvariants.d.ts +66 -0
  202. package/dist/engine/candleInvariants.d.ts.map +1 -0
  203. package/dist/engine/candleInvariants.js +134 -0
  204. package/dist/engine/candleInvariants.js.map +1 -0
  205. package/{src/engine/mergeUtils.ts → dist/engine/mergeUtils.d.ts} +15 -52
  206. package/dist/engine/mergeUtils.d.ts.map +1 -0
  207. package/dist/engine/mergeUtils.js +64 -0
  208. package/dist/engine/mergeUtils.js.map +1 -0
  209. package/dist/engine/timeframeUtils.d.ts +80 -0
  210. package/dist/engine/timeframeUtils.d.ts.map +1 -0
  211. package/{src/engine/timeframeUtils.ts → dist/engine/timeframeUtils.js} +30 -48
  212. package/dist/engine/timeframeUtils.js.map +1 -0
  213. package/dist/index.d.ts +40 -0
  214. package/dist/index.d.ts.map +1 -0
  215. package/dist/index.js +49 -0
  216. package/dist/index.js.map +1 -0
  217. package/dist/internal.d.ts +29 -0
  218. package/dist/internal.d.ts.map +1 -0
  219. package/{src/internal.ts → dist/internal.js} +2 -11
  220. package/dist/internal.js.map +1 -0
  221. package/dist/licensing/ChartRuntimeResolver.d.ts +233 -0
  222. package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -0
  223. package/dist/licensing/ChartRuntimeResolver.js +310 -0
  224. package/dist/licensing/ChartRuntimeResolver.js.map +1 -0
  225. package/dist/licensing/LicenseManager.d.ts +55 -0
  226. package/dist/licensing/LicenseManager.d.ts.map +1 -0
  227. package/dist/licensing/LicenseManager.js +114 -0
  228. package/dist/licensing/LicenseManager.js.map +1 -0
  229. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts +13 -0
  230. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts.map +1 -0
  231. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +177 -0
  232. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +1 -0
  233. package/dist/licensing/__tests__/LicenseManager.test.d.ts +12 -0
  234. package/dist/licensing/__tests__/LicenseManager.test.d.ts.map +1 -0
  235. package/dist/licensing/__tests__/LicenseManager.test.js +153 -0
  236. package/dist/licensing/__tests__/LicenseManager.test.js.map +1 -0
  237. package/dist/licensing/licenseTypes.d.ts +18 -0
  238. package/dist/licensing/licenseTypes.d.ts.map +1 -0
  239. package/dist/licensing/licenseTypes.js +2 -0
  240. package/dist/licensing/licenseTypes.js.map +1 -0
  241. package/dist/pine/PineCompiler.d.ts +35 -0
  242. package/dist/pine/PineCompiler.d.ts.map +1 -0
  243. package/dist/pine/PineCompiler.js +44 -0
  244. package/dist/pine/PineCompiler.js.map +1 -0
  245. package/dist/pine/diagnostics.d.ts +20 -0
  246. package/dist/pine/diagnostics.d.ts.map +1 -0
  247. package/dist/pine/diagnostics.js +11 -0
  248. package/dist/pine/diagnostics.js.map +1 -0
  249. package/{src/pine/index.ts → dist/pine/index.d.ts} +4 -3
  250. package/dist/pine/index.d.ts.map +1 -0
  251. package/dist/pine/index.js +5 -0
  252. package/dist/pine/index.js.map +1 -0
  253. package/dist/pine/pine-ast.d.ts +142 -0
  254. package/dist/pine/pine-ast.d.ts.map +1 -0
  255. package/dist/pine/pine-ast.js +19 -0
  256. package/dist/pine/pine-ast.js.map +1 -0
  257. package/dist/pine/pine-lexer.d.ts +41 -0
  258. package/dist/pine/pine-lexer.d.ts.map +1 -0
  259. package/dist/pine/pine-lexer.js +249 -0
  260. package/dist/pine/pine-lexer.js.map +1 -0
  261. package/dist/pine/pine-parser.d.ts +51 -0
  262. package/dist/pine/pine-parser.d.ts.map +1 -0
  263. package/dist/pine/pine-parser.js +416 -0
  264. package/dist/pine/pine-parser.js.map +1 -0
  265. package/dist/pine/pine-transpiler.d.ts +33 -0
  266. package/dist/pine/pine-transpiler.d.ts.map +1 -0
  267. package/dist/pine/pine-transpiler.js +260 -0
  268. package/dist/pine/pine-transpiler.js.map +1 -0
  269. package/dist/pixi/LayerName.d.ts +18 -0
  270. package/dist/pixi/LayerName.d.ts.map +1 -0
  271. package/dist/pixi/LayerName.js +35 -0
  272. package/dist/pixi/LayerName.js.map +1 -0
  273. package/dist/pixi/PixiCandlestickRenderer.d.ts +23 -0
  274. package/dist/pixi/PixiCandlestickRenderer.d.ts.map +1 -0
  275. package/dist/pixi/PixiCandlestickRenderer.js +107 -0
  276. package/dist/pixi/PixiCandlestickRenderer.js.map +1 -0
  277. package/dist/pixi/PixiChart.d.ts +72 -0
  278. package/dist/pixi/PixiChart.d.ts.map +1 -0
  279. package/dist/pixi/PixiChart.js +367 -0
  280. package/dist/pixi/PixiChart.js.map +1 -0
  281. package/dist/pixi/PixiCrosshairRenderer.d.ts +29 -0
  282. package/dist/pixi/PixiCrosshairRenderer.d.ts.map +1 -0
  283. package/dist/pixi/PixiCrosshairRenderer.js +110 -0
  284. package/dist/pixi/PixiCrosshairRenderer.js.map +1 -0
  285. package/dist/pixi/PixiDrawingRenderer.d.ts +17 -0
  286. package/dist/pixi/PixiDrawingRenderer.d.ts.map +1 -0
  287. package/dist/pixi/PixiDrawingRenderer.js +111 -0
  288. package/dist/pixi/PixiDrawingRenderer.js.map +1 -0
  289. package/dist/pixi/PixiGridRenderer.d.ts +22 -0
  290. package/dist/pixi/PixiGridRenderer.d.ts.map +1 -0
  291. package/dist/pixi/PixiGridRenderer.js +114 -0
  292. package/dist/pixi/PixiGridRenderer.js.map +1 -0
  293. package/dist/pixi/PixiLayerManager.d.ts +56 -0
  294. package/dist/pixi/PixiLayerManager.d.ts.map +1 -0
  295. package/dist/pixi/PixiLayerManager.js +92 -0
  296. package/dist/pixi/PixiLayerManager.js.map +1 -0
  297. package/dist/react/canvas/ChartCanvas.d.ts +85 -0
  298. package/dist/react/canvas/ChartCanvas.d.ts.map +1 -0
  299. package/dist/react/canvas/ChartCanvas.js +604 -0
  300. package/dist/react/canvas/ChartCanvas.js.map +1 -0
  301. package/dist/react/canvas/ChartContextMenu.d.ts +18 -0
  302. package/dist/react/canvas/ChartContextMenu.d.ts.map +1 -0
  303. package/dist/react/canvas/ChartContextMenu.js +5 -0
  304. package/dist/react/canvas/ChartContextMenu.js.map +1 -0
  305. package/dist/react/canvas/ChartSettingsDialog.d.ts +25 -0
  306. package/dist/react/canvas/ChartSettingsDialog.d.ts.map +1 -0
  307. package/dist/react/canvas/ChartSettingsDialog.js +28 -0
  308. package/dist/react/canvas/ChartSettingsDialog.js.map +1 -0
  309. package/dist/react/canvas/IndicatorLabel.d.ts +21 -0
  310. package/dist/react/canvas/IndicatorLabel.d.ts.map +1 -0
  311. package/dist/react/canvas/IndicatorLabel.js +196 -0
  312. package/dist/react/canvas/IndicatorLabel.js.map +1 -0
  313. package/dist/react/canvas/IndicatorPane.d.ts +32 -0
  314. package/dist/react/canvas/IndicatorPane.d.ts.map +1 -0
  315. package/dist/react/canvas/IndicatorPane.js +395 -0
  316. package/dist/react/canvas/IndicatorPane.js.map +1 -0
  317. package/dist/react/canvas/PointerOverlay.d.ts +23 -0
  318. package/dist/react/canvas/PointerOverlay.d.ts.map +1 -0
  319. package/dist/react/canvas/PointerOverlay.js +61 -0
  320. package/dist/react/canvas/PointerOverlay.js.map +1 -0
  321. package/dist/react/canvas/toolbars/LeftToolbar.d.ts +19 -0
  322. package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -0
  323. package/dist/react/canvas/toolbars/LeftToolbar.js +407 -0
  324. package/dist/react/canvas/toolbars/LeftToolbar.js.map +1 -0
  325. package/dist/react/hooks/useChartCapabilities.d.ts +21 -0
  326. package/dist/react/hooks/useChartCapabilities.d.ts.map +1 -0
  327. package/dist/react/hooks/useChartCapabilities.js +66 -0
  328. package/dist/react/hooks/useChartCapabilities.js.map +1 -0
  329. package/dist/react/index.d.ts +30 -0
  330. package/dist/react/index.d.ts.map +1 -0
  331. package/dist/react/index.js +28 -0
  332. package/dist/react/index.js.map +1 -0
  333. package/dist/react/internal.d.ts +38 -0
  334. package/dist/react/internal.d.ts.map +1 -0
  335. package/dist/react/internal.js +44 -0
  336. package/dist/react/internal.js.map +1 -0
  337. package/dist/react/shell/ManagedAppShell.d.ts +91 -0
  338. package/dist/react/shell/ManagedAppShell.d.ts.map +1 -0
  339. package/dist/react/shell/ManagedAppShell.js +440 -0
  340. package/dist/react/shell/ManagedAppShell.js.map +1 -0
  341. package/dist/react/trading/TradingBridge.d.ts +86 -0
  342. package/dist/react/trading/TradingBridge.d.ts.map +1 -0
  343. package/dist/react/trading/TradingBridge.js +73 -0
  344. package/dist/react/trading/TradingBridge.js.map +1 -0
  345. package/dist/react/workspace/ChartWorkspace.d.ts +73 -0
  346. package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -0
  347. package/dist/react/workspace/ChartWorkspace.js +42 -0
  348. package/dist/react/workspace/ChartWorkspace.js.map +1 -0
  349. package/dist/react/workspace/FloatingPanel.d.ts +18 -0
  350. package/dist/react/workspace/FloatingPanel.d.ts.map +1 -0
  351. package/dist/react/workspace/FloatingPanel.js +82 -0
  352. package/dist/react/workspace/FloatingPanel.js.map +1 -0
  353. package/dist/react/workspace/IndicatorsDialog.d.ts +8 -0
  354. package/dist/react/workspace/IndicatorsDialog.d.ts.map +1 -0
  355. package/dist/react/workspace/IndicatorsDialog.js +121 -0
  356. package/dist/react/workspace/IndicatorsDialog.js.map +1 -0
  357. package/dist/react/workspace/LayoutMenu.d.ts +33 -0
  358. package/dist/react/workspace/LayoutMenu.d.ts.map +1 -0
  359. package/dist/react/workspace/LayoutMenu.js +113 -0
  360. package/dist/react/workspace/LayoutMenu.js.map +1 -0
  361. package/dist/react/workspace/SymbolSearchDialog.d.ts +10 -0
  362. package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -0
  363. package/dist/react/workspace/SymbolSearchDialog.js +245 -0
  364. package/dist/react/workspace/SymbolSearchDialog.js.map +1 -0
  365. package/dist/react/workspace/TabBar.d.ts +17 -0
  366. package/dist/react/workspace/TabBar.d.ts.map +1 -0
  367. package/dist/react/workspace/TabBar.js +29 -0
  368. package/dist/react/workspace/TabBar.js.map +1 -0
  369. package/dist/react/workspace/toolbars/BottomToolbar.d.ts +19 -0
  370. package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -0
  371. package/dist/react/workspace/toolbars/BottomToolbar.js +236 -0
  372. package/dist/react/workspace/toolbars/BottomToolbar.js.map +1 -0
  373. package/dist/react/workspace/toolbars/RightToolbar.d.ts +8 -0
  374. package/dist/react/workspace/toolbars/RightToolbar.d.ts.map +1 -0
  375. package/dist/react/workspace/toolbars/RightToolbar.js +18 -0
  376. package/dist/react/workspace/toolbars/RightToolbar.js.map +1 -0
  377. package/dist/react/workspace/toolbars/TopToolbar.d.ts +41 -0
  378. package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -0
  379. package/dist/react/workspace/toolbars/TopToolbar.js +82 -0
  380. package/dist/react/workspace/toolbars/TopToolbar.js.map +1 -0
  381. package/dist/renderers/CandlestickRenderer.d.ts +13 -0
  382. package/dist/renderers/CandlestickRenderer.d.ts.map +1 -0
  383. package/dist/renderers/CandlestickRenderer.js +98 -0
  384. package/dist/renderers/CandlestickRenderer.js.map +1 -0
  385. package/dist/renderers/HistogramRenderer.d.ts +11 -0
  386. package/dist/renderers/HistogramRenderer.d.ts.map +1 -0
  387. package/dist/renderers/HistogramRenderer.js +50 -0
  388. package/dist/renderers/HistogramRenderer.js.map +1 -0
  389. package/dist/renderers/LineRenderer.d.ts +12 -0
  390. package/dist/renderers/LineRenderer.d.ts.map +1 -0
  391. package/dist/renderers/LineRenderer.js +64 -0
  392. package/dist/renderers/LineRenderer.js.map +1 -0
  393. package/dist/theme/colors.d.ts +4 -0
  394. package/dist/theme/colors.d.ts.map +1 -0
  395. package/dist/theme/colors.js +19 -0
  396. package/dist/theme/colors.js.map +1 -0
  397. package/dist/tools/barDivergenceCheck.d.ts +120 -0
  398. package/dist/tools/barDivergenceCheck.d.ts.map +1 -0
  399. package/dist/tools/barDivergenceCheck.js +200 -0
  400. package/dist/tools/barDivergenceCheck.js.map +1 -0
  401. package/dist/trading/TradingOverlayStore.d.ts +86 -0
  402. package/dist/trading/TradingOverlayStore.d.ts.map +1 -0
  403. package/dist/trading/TradingOverlayStore.js +139 -0
  404. package/dist/trading/TradingOverlayStore.js.map +1 -0
  405. package/dist/trading/UnmanagedIngestion.d.ts +91 -0
  406. package/dist/trading/UnmanagedIngestion.d.ts.map +1 -0
  407. package/dist/trading/UnmanagedIngestion.js +114 -0
  408. package/dist/trading/UnmanagedIngestion.js.map +1 -0
  409. package/dist/trading/__tests__/ManagedTradingController.test.d.ts +18 -0
  410. package/dist/trading/__tests__/ManagedTradingController.test.d.ts.map +1 -0
  411. package/dist/trading/__tests__/ManagedTradingController.test.js +271 -0
  412. package/dist/trading/__tests__/ManagedTradingController.test.js.map +1 -0
  413. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts +16 -0
  414. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts.map +1 -0
  415. package/dist/trading/__tests__/TradingOverlayStore.test.js +267 -0
  416. package/dist/trading/__tests__/TradingOverlayStore.test.js.map +1 -0
  417. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts +16 -0
  418. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts.map +1 -0
  419. package/dist/trading/__tests__/UnmanagedIngestion.test.js +170 -0
  420. package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +1 -0
  421. package/dist/trading/managed/ManagedTradingController.d.ts +110 -0
  422. package/dist/trading/managed/ManagedTradingController.d.ts.map +1 -0
  423. package/dist/trading/managed/ManagedTradingController.js +247 -0
  424. package/dist/trading/managed/ManagedTradingController.js.map +1 -0
  425. package/dist/trading/managed/managedCapabilities.d.ts +45 -0
  426. package/dist/trading/managed/managedCapabilities.d.ts.map +1 -0
  427. package/dist/trading/managed/managedCapabilities.js +79 -0
  428. package/dist/trading/managed/managedCapabilities.js.map +1 -0
  429. package/dist/trading/managed/managedTypes.d.ts +122 -0
  430. package/dist/trading/managed/managedTypes.d.ts.map +1 -0
  431. package/dist/trading/managed/managedTypes.js +13 -0
  432. package/dist/trading/managed/managedTypes.js.map +1 -0
  433. package/dist/trading/tradingTypes.d.ts +89 -0
  434. package/dist/trading/tradingTypes.d.ts.map +1 -0
  435. package/dist/trading/tradingTypes.js +8 -0
  436. package/dist/trading/tradingTypes.js.map +1 -0
  437. package/dist/tscript/TScriptIndicator.d.ts +41 -0
  438. package/dist/tscript/TScriptIndicator.d.ts.map +1 -0
  439. package/dist/tscript/TScriptIndicator.js +47 -0
  440. package/dist/tscript/TScriptIndicator.js.map +1 -0
  441. package/dist/tscript/ast.d.ts +89 -0
  442. package/dist/tscript/ast.d.ts.map +1 -0
  443. package/dist/tscript/ast.js +22 -0
  444. package/dist/tscript/ast.js.map +1 -0
  445. package/dist/tscript/lexer.d.ts +36 -0
  446. package/dist/tscript/lexer.d.ts.map +1 -0
  447. package/dist/tscript/lexer.js +187 -0
  448. package/dist/tscript/lexer.js.map +1 -0
  449. package/dist/tscript/parser.d.ts +50 -0
  450. package/dist/tscript/parser.d.ts.map +1 -0
  451. package/dist/tscript/parser.js +318 -0
  452. package/dist/tscript/parser.js.map +1 -0
  453. package/dist/tscript/runtime.d.ts +123 -0
  454. package/dist/tscript/runtime.d.ts.map +1 -0
  455. package/dist/tscript/runtime.js +475 -0
  456. package/dist/tscript/runtime.js.map +1 -0
  457. package/dist/tscript/series.d.ts +49 -0
  458. package/dist/tscript/series.d.ts.map +1 -0
  459. package/dist/tscript/series.js +79 -0
  460. package/dist/tscript/series.js.map +1 -0
  461. package/dist/types/IChart.d.ts +48 -0
  462. package/dist/types/IChart.d.ts.map +1 -0
  463. package/dist/types/IChart.js +2 -0
  464. package/dist/types/IChart.js.map +1 -0
  465. package/{src/types/IRenderer.ts → dist/types/IRenderer.d.ts} +2 -8
  466. package/dist/types/IRenderer.d.ts.map +1 -0
  467. package/dist/types/IRenderer.js +2 -0
  468. package/dist/types/IRenderer.js.map +1 -0
  469. package/dist/types/ISeries.d.ts +26 -0
  470. package/dist/types/ISeries.d.ts.map +1 -0
  471. package/dist/types/ISeries.js +2 -0
  472. package/dist/types/ISeries.js.map +1 -0
  473. package/package.json +32 -4
  474. package/src/__tests__/backwardCompatibility.test.ts +0 -191
  475. package/src/__tests__/candleInvariant.test.ts +0 -500
  476. package/src/__tests__/timeframeBoundary.test.ts +0 -583
  477. package/src/api/DrawingManager.ts +0 -188
  478. package/src/api/EventBus.ts +0 -53
  479. package/src/api/IndicatorDAG.ts +0 -389
  480. package/src/api/IndicatorRegistry.ts +0 -47
  481. package/src/api/LayoutManager.ts +0 -72
  482. package/src/api/PaneManager.ts +0 -129
  483. package/src/api/ReferenceAPI.ts +0 -195
  484. package/src/api/TChart.ts +0 -881
  485. package/src/api/drawing tools/fib gann menu/fibRetracement.ts +0 -27
  486. package/src/api/drawing tools/lines menu/crossLine.ts +0 -21
  487. package/src/api/drawing tools/lines menu/disjointChannel.ts +0 -74
  488. package/src/api/drawing tools/lines menu/extendedLine.ts +0 -22
  489. package/src/api/drawing tools/lines menu/flatTopBottom.ts +0 -45
  490. package/src/api/drawing tools/lines menu/horizontal.ts +0 -24
  491. package/src/api/drawing tools/lines menu/horizontalRay.ts +0 -25
  492. package/src/api/drawing tools/lines menu/infoLine.ts +0 -127
  493. package/src/api/drawing tools/lines menu/insidePitchfork.ts +0 -21
  494. package/src/api/drawing tools/lines menu/modifiedSchiffPitchfork.ts +0 -18
  495. package/src/api/drawing tools/lines menu/parallelChannel.ts +0 -47
  496. package/src/api/drawing tools/lines menu/pitchfork.ts +0 -15
  497. package/src/api/drawing tools/lines menu/ray.ts +0 -28
  498. package/src/api/drawing tools/lines menu/regressionTrend.ts +0 -157
  499. package/src/api/drawing tools/lines menu/schiffPitchfork.ts +0 -18
  500. package/src/api/drawing tools/lines menu/trendAngle.ts +0 -64
  501. package/src/api/drawing tools/lines menu/trendline.ts +0 -16
  502. package/src/api/drawing tools/lines menu/vertical.ts +0 -16
  503. package/src/api/drawing tools/shapes menu/rectangle.ts +0 -24
  504. package/src/api/drawing tools/shapes menu/text.ts +0 -30
  505. package/src/api/drawingUtils.ts +0 -82
  506. package/src/core/CanvasLayer.ts +0 -77
  507. package/src/core/Chart.ts +0 -917
  508. package/src/core/CoordTransform.ts +0 -282
  509. package/src/core/Crosshair.ts +0 -207
  510. package/src/core/IndicatorEngine.ts +0 -216
  511. package/src/core/InteractionManager.ts +0 -899
  512. package/src/core/PriceScale.ts +0 -133
  513. package/src/core/Series.ts +0 -132
  514. package/src/core/TimeScale.ts +0 -175
  515. package/src/datafeed/DatafeedConnector.ts +0 -300
  516. package/src/engine/CandleEngine.ts +0 -458
  517. package/src/engine/__tests__/CandleEngine.test.ts +0 -402
  518. package/src/engine/candleInvariants.ts +0 -172
  519. package/src/index.ts +0 -190
  520. package/src/licensing/ChartRuntimeResolver.ts +0 -380
  521. package/src/licensing/LicenseManager.ts +0 -131
  522. package/src/licensing/__tests__/ChartRuntimeResolver.test.ts +0 -207
  523. package/src/licensing/__tests__/LicenseManager.test.ts +0 -180
  524. package/src/licensing/licenseTypes.ts +0 -19
  525. package/src/pine/PineCompiler.ts +0 -68
  526. package/src/pine/diagnostics.ts +0 -30
  527. package/src/pine/pine-ast.ts +0 -163
  528. package/src/pine/pine-lexer.ts +0 -265
  529. package/src/pine/pine-parser.ts +0 -439
  530. package/src/pine/pine-transpiler.ts +0 -301
  531. package/src/pixi/LayerName.ts +0 -35
  532. package/src/pixi/PixiCandlestickRenderer.ts +0 -125
  533. package/src/pixi/PixiChart.ts +0 -425
  534. package/src/pixi/PixiCrosshairRenderer.ts +0 -134
  535. package/src/pixi/PixiDrawingRenderer.ts +0 -121
  536. package/src/pixi/PixiGridRenderer.ts +0 -136
  537. package/src/pixi/PixiLayerManager.ts +0 -102
  538. package/src/renderers/CandlestickRenderer.ts +0 -130
  539. package/src/renderers/HistogramRenderer.ts +0 -63
  540. package/src/renderers/LineRenderer.ts +0 -77
  541. package/src/theme/colors.ts +0 -21
  542. package/src/tools/barDivergenceCheck.ts +0 -305
  543. package/src/trading/TradingOverlayStore.ts +0 -161
  544. package/src/trading/UnmanagedIngestion.ts +0 -156
  545. package/src/trading/__tests__/ManagedTradingController.test.ts +0 -338
  546. package/src/trading/__tests__/TradingOverlayStore.test.ts +0 -323
  547. package/src/trading/__tests__/UnmanagedIngestion.test.ts +0 -205
  548. package/src/trading/managed/ManagedTradingController.ts +0 -292
  549. package/src/trading/managed/managedCapabilities.ts +0 -98
  550. package/src/trading/managed/managedTypes.ts +0 -151
  551. package/src/trading/tradingTypes.ts +0 -135
  552. package/src/tscript/TScriptIndicator.ts +0 -54
  553. package/src/tscript/ast.ts +0 -105
  554. package/src/tscript/lexer.ts +0 -190
  555. package/src/tscript/parser.ts +0 -334
  556. package/src/tscript/runtime.ts +0 -525
  557. package/src/tscript/series.ts +0 -84
  558. package/src/types/IChart.ts +0 -56
  559. package/src/types/ISeries.ts +0 -30
  560. package/tsconfig.json +0 -22
  561. package/tsup.config.ts +0 -15
  562. package/vitest.config.ts +0 -25
@@ -0,0 +1,698 @@
1
+ // ─── Constants ────────────────────────────────────────────────────────────────
2
+ /** Tolerated pixel distance for drawing hit detection. */
3
+ const DRAWING_HIT_PX = 6;
4
+ /** Tolerated pixel distance for handle hit detection. */
5
+ const HANDLE_HIT_PX = 8;
6
+ // ─── InteractionManager ───────────────────────────────────────────────────────
7
+ /**
8
+ * InteractionManager — the single owner of all DOM input events for a chart.
9
+ *
10
+ * Responsibilities:
11
+ * - Mouse: pan (left-drag), crosshair tracking, click detection
12
+ * - Wheel: zoom
13
+ * - Right-click: contextmenu routing
14
+ * - Keyboard: arrow-key pan, +/- zoom, Esc / Delete shortcuts
15
+ * - Hit-testing: drawings → bars → axis zones
16
+ * - Selection state: tracks the currently selected drawing id
17
+ *
18
+ * Usage:
19
+ * ```ts
20
+ * const interaction = new InteractionManager(
21
+ * canvasElement,
22
+ * chart.transform(),
23
+ * {
24
+ * onPan: (dx, dy) => { transform.pan(dx, dy); markDirty(); },
25
+ * onZoom: (f, ox) => { transform.zoomTime(f, ox); markDirty(); },
26
+ * onCrosshairMove: (x, y) => { crosshair.update(x, y); markDirty(); },
27
+ * onCrosshairHide: () => { crosshair.hide(); markDirty(); },
28
+ * onContextMenu: (x, y, hit) => showMenu(x, y, hit),
29
+ * onKeyAction: (action) => handleKey(action),
30
+ * },
31
+ * );
32
+ *
33
+ * // Call on chart resize:
34
+ * interaction.setTransform(chart.transform());
35
+ *
36
+ * // Feed visible bars for bar-snap hit-testing:
37
+ * interaction.setBars(series.data());
38
+ *
39
+ * // Feed drawings for drawing hit-testing:
40
+ * interaction.setDrawings(drawingManager.all());
41
+ *
42
+ * // Teardown:
43
+ * interaction.destroy();
44
+ * ```
45
+ */
46
+ export class InteractionManager {
47
+ _el;
48
+ _transform;
49
+ _handlers;
50
+ _opts;
51
+ // ── Hit-test data feeds ───────────────────────────────────────────────────
52
+ _drawings = [];
53
+ _bars = [];
54
+ // ── Mouse state ───────────────────────────────────────────────────────────
55
+ _isDragging = false;
56
+ _dragStartX = 0;
57
+ _dragStartY = 0;
58
+ _lastDragX = 0;
59
+ _lastDragY = 0;
60
+ /** True once the pointer has moved past `clickThreshold` during a drag. */
61
+ _hasMoved = false;
62
+ /** True while the user is dragging on the price axis strip. */
63
+ _priceAxisDragging = false;
64
+ // ── Selection state ───────────────────────────────────────────────────────
65
+ _selectedDrawingId = null;
66
+ // ── Drawing tool state ────────────────────────────────────────────────────
67
+ _drawingMode = false;
68
+ /** True when the native cursor should be hidden (crosshair / dot / demonstration). */
69
+ _hideCursor = false;
70
+ /** Sets cursor style, respecting _hideCursor — 'none' always wins when hiding. */
71
+ _setCursor(style) {
72
+ this._el.style.cursor = this._hideCursor ? 'none' : style;
73
+ }
74
+ /** Set when a drawing is committed mid-mousedown; prevents the paired mouseup from auto-selecting it. */
75
+ _suppressNextClick = false;
76
+ _handleDragId = null;
77
+ _handleDragIdx = -1;
78
+ _bodyMoveId = null;
79
+ _bodyMovePrevX = 0;
80
+ _bodyMovePrevY = 0;
81
+ constructor(element, transform, handlers, options = {}) {
82
+ this._el = element;
83
+ this._transform = transform;
84
+ this._handlers = handlers;
85
+ this._opts = {
86
+ enablePan: options.enablePan ?? true,
87
+ enableZoom: options.enableZoom ?? true,
88
+ clickThreshold: options.clickThreshold ?? 4,
89
+ zoomStep: options.zoomStep ?? 1.1,
90
+ keyPanStep: options.keyPanStep ?? 40,
91
+ keyZoomStep: options.keyZoomStep ?? 1.1,
92
+ };
93
+ // Make container keyboard-focusable so `keydown` fires on it
94
+ if (element.tabIndex < 0)
95
+ element.tabIndex = 0;
96
+ element.style.outline = 'none'; // suppress browser focus ring
97
+ this._attach();
98
+ }
99
+ // ─── Data feeds (call after every data / drawing change) ──────────────────
100
+ /** Swap the transform reference after a resize. */
101
+ setTransform(transform) {
102
+ this._transform = transform;
103
+ }
104
+ /** Provide the current drawing list for hit-testing. */
105
+ setDrawings(drawings) {
106
+ this._drawings = drawings;
107
+ }
108
+ /**
109
+ * Provide the visible bars for bar-snap hit-testing on the primary series.
110
+ * Passing `series.data()` is fine; the manager filters by visible range.
111
+ */
112
+ setBars(bars) {
113
+ this._bars = bars;
114
+ }
115
+ // ─── Selection ────────────────────────────────────────────────────────────
116
+ /** Id of the currently selected drawing, or `null`. */
117
+ get selectedDrawingId() {
118
+ return this._selectedDrawingId;
119
+ }
120
+ /** Programmatically deselect (e.g. on symbol / timeframe change). */
121
+ clearSelection() {
122
+ this._selectedDrawingId = null;
123
+ }
124
+ /**
125
+ * Switches between drawing-tool mode (crosshair cursor, click fires onDrawClick)
126
+ * and normal cursor mode. Also resets any in-progress drag state.
127
+ */
128
+ /** Hides (`true`) or shows (`false`) the native OS cursor. Used by crosshair, dot, and demonstration modes. */
129
+ setHideCursor(hidden) {
130
+ this._hideCursor = hidden;
131
+ if (!this._drawingMode) {
132
+ this._el.style.cursor = hidden ? 'none' : 'default';
133
+ }
134
+ }
135
+ setDrawingMode(active) {
136
+ if (this._drawingMode && !active) {
137
+ // Drawing was committed during a mousedown — suppress the paired mouseup click
138
+ // so it doesn't immediately auto-select the newly placed drawing.
139
+ this._suppressNextClick = true;
140
+ }
141
+ this._drawingMode = active;
142
+ this._el.style.cursor = active ? 'crosshair' : (this._hideCursor ? 'none' : 'default');
143
+ this._isDragging = false;
144
+ this._hasMoved = false;
145
+ this._handleDragId = null;
146
+ this._handleDragIdx = -1;
147
+ this._bodyMoveId = null;
148
+ }
149
+ // ─── Lifecycle ────────────────────────────────────────────────────────────
150
+ /** Removes all DOM event listeners. Must be called in the chart's `destroy()`. */
151
+ destroy() {
152
+ this._detach();
153
+ }
154
+ // ─── DOM listener registry ────────────────────────────────────────────────
155
+ _attach() {
156
+ const el = this._el;
157
+ // Mouse — always registered so crosshair works even with pan disabled
158
+ el.addEventListener('mousedown', this._onMouseDown);
159
+ el.addEventListener('mousemove', this._onMouseMove);
160
+ el.addEventListener('mouseup', this._onMouseUp);
161
+ el.addEventListener('mouseleave', this._onMouseLeave);
162
+ if (this._opts.enableZoom) {
163
+ el.addEventListener('wheel', this._onWheel, { passive: false });
164
+ }
165
+ el.addEventListener('contextmenu', this._onContextMenu);
166
+ el.addEventListener('keydown', this._onKeyDown);
167
+ el.addEventListener('dblclick', this._onDblClick);
168
+ }
169
+ _detach() {
170
+ const el = this._el;
171
+ el.removeEventListener('mousedown', this._onMouseDown);
172
+ el.removeEventListener('mousemove', this._onMouseMove);
173
+ el.removeEventListener('mouseup', this._onMouseUp);
174
+ el.removeEventListener('mouseleave', this._onMouseLeave);
175
+ el.removeEventListener('wheel', this._onWheel);
176
+ el.removeEventListener('contextmenu', this._onContextMenu);
177
+ el.removeEventListener('keydown', this._onKeyDown);
178
+ el.removeEventListener('dblclick', this._onDblClick);
179
+ }
180
+ // ─── Mouse handlers ───────────────────────────────────────────────────────
181
+ _onMouseDown = (e) => {
182
+ if (e.button !== 0)
183
+ return; // left button only
184
+ this._el.focus({ preventScroll: true });
185
+ const x = e.offsetX;
186
+ const y = e.offsetY;
187
+ // Drawing tool mode: route click to drawing placement
188
+ if (this._drawingMode) {
189
+ this._handlers.onDrawClick?.(x, y);
190
+ return;
191
+ }
192
+ // Cursor mode: check handles of the selected drawing first (highest priority)
193
+ if (this._selectedDrawingId !== null) {
194
+ for (const drawing of this._drawings) {
195
+ if (drawing.id !== this._selectedDrawingId || drawing.visible === false)
196
+ continue;
197
+ const hi = this._hitTestHandles(x, y, drawing);
198
+ if (hi >= 0) {
199
+ this._handleDragId = drawing.id;
200
+ this._handleDragIdx = hi;
201
+ this._setCursor('grabbing');
202
+ this._handlers.onHandleDragStart?.(drawing.id, hi);
203
+ return;
204
+ }
205
+ break; // handles checked — move on
206
+ }
207
+ }
208
+ // Auto-select + immediately start body drag on ANY hovered drawing.
209
+ // This means one mousedown is all that's needed — no separate
210
+ // "click to select, then click+drag" two-step required.
211
+ const drawingBodyHit = this._hitTestDrawings(x, y);
212
+ if (drawingBodyHit !== null) {
213
+ this._selectedDrawingId = drawingBodyHit.id;
214
+ this._bodyMoveId = drawingBodyHit.id;
215
+ this._bodyMovePrevX = x;
216
+ this._bodyMovePrevY = y;
217
+ this._setCursor('grabbing');
218
+ this._handlers.onBodyMoveStart?.(drawingBodyHit.id);
219
+ return;
220
+ }
221
+ // Price axis — start vertical drag to stretch/compress price scale
222
+ if (x >= this._transform.plotWidth && y < this._transform.plotHeight) {
223
+ this._priceAxisDragging = true;
224
+ this._lastDragY = y;
225
+ this._setCursor('ns-resize');
226
+ return;
227
+ }
228
+ // Normal pan
229
+ this._isDragging = true;
230
+ this._hasMoved = false;
231
+ this._dragStartX = x;
232
+ this._dragStartY = y;
233
+ this._lastDragX = x;
234
+ this._lastDragY = y;
235
+ };
236
+ _onMouseMove = (e) => {
237
+ const x = e.offsetX;
238
+ const y = e.offsetY;
239
+ // Drawing-tool preview
240
+ if (this._drawingMode) {
241
+ this._handlers.onDrawPointerMove?.(x, y);
242
+ this._handlers.onCrosshairMove?.(x, y, this._hitTest(x, y));
243
+ return;
244
+ }
245
+ // Handle drag
246
+ if (this._handleDragId !== null) {
247
+ this._setCursor('grabbing');
248
+ this._handlers.onHandleDragMove?.(this._handleDragId, this._handleDragIdx, x, y);
249
+ return;
250
+ }
251
+ // Body move
252
+ if (this._bodyMoveId !== null) {
253
+ const dx = x - this._bodyMovePrevX;
254
+ const dy = y - this._bodyMovePrevY;
255
+ this._bodyMovePrevX = x;
256
+ this._bodyMovePrevY = y;
257
+ this._setCursor('grabbing');
258
+ this._handlers.onBodyMoveMove?.(this._bodyMoveId, dx, dy);
259
+ return;
260
+ }
261
+ // Price axis drag — zoom price scale vertically
262
+ if (this._priceAxisDragging) {
263
+ const dy = y - this._lastDragY;
264
+ this._lastDragY = y;
265
+ if (dy !== 0)
266
+ this._handlers.onPriceAxisDrag?.(dy);
267
+ this._setCursor('ns-resize');
268
+ return;
269
+ }
270
+ if (this._isDragging) {
271
+ const dx = x - this._lastDragX;
272
+ const dy = y - this._lastDragY;
273
+ const totalDist = Math.hypot(x - this._dragStartX, y - this._dragStartY);
274
+ if (totalDist > this._opts.clickThreshold) {
275
+ this._hasMoved = true;
276
+ }
277
+ if (this._hasMoved && this._opts.enablePan) {
278
+ this._handlers.onPan?.(dx, dy);
279
+ }
280
+ this._lastDragX = x;
281
+ this._lastDragY = y;
282
+ }
283
+ // Crosshair + cursor feedback
284
+ const hit = this._hitTest(x, y);
285
+ this._handlers.onCrosshairMove?.(x, y, hit);
286
+ if (!this._isDragging) {
287
+ if (x >= this._transform.plotWidth && y < this._transform.plotHeight) {
288
+ this._setCursor('ns-resize');
289
+ }
290
+ else if (hit.kind === 'drawingHandle') {
291
+ this._setCursor('grab');
292
+ }
293
+ else if (hit.kind === 'drawing') {
294
+ this._setCursor('grab');
295
+ }
296
+ else {
297
+ this._setCursor('default');
298
+ }
299
+ }
300
+ };
301
+ _onMouseUp = (e) => {
302
+ if (e.button !== 0)
303
+ return;
304
+ // Finish price axis drag
305
+ if (this._priceAxisDragging) {
306
+ this._priceAxisDragging = false;
307
+ this._setCursor('default');
308
+ return;
309
+ }
310
+ // Finish handle drag
311
+ if (this._handleDragId !== null) {
312
+ const id = this._handleDragId;
313
+ const idx = this._handleDragIdx;
314
+ this._handleDragId = null;
315
+ this._handleDragIdx = -1;
316
+ this._setCursor('grab');
317
+ this._handlers.onHandleDragEnd?.(id, idx);
318
+ return;
319
+ }
320
+ // Finish body move
321
+ if (this._bodyMoveId !== null) {
322
+ const id = this._bodyMoveId;
323
+ this._bodyMoveId = null;
324
+ this._setCursor('grab');
325
+ this._handlers.onBodyMoveEnd?.(id);
326
+ return;
327
+ }
328
+ const wasClick = !this._hasMoved;
329
+ this._isDragging = false;
330
+ this._hasMoved = false;
331
+ if (wasClick) {
332
+ if (this._suppressNextClick) {
333
+ this._suppressNextClick = false;
334
+ }
335
+ else {
336
+ const x = e.offsetX;
337
+ const y = e.offsetY;
338
+ const hit = this._hitTest(x, y);
339
+ this._handleClick(x, y, hit);
340
+ }
341
+ }
342
+ };
343
+ _onMouseLeave = () => {
344
+ this._isDragging = false;
345
+ this._hasMoved = false;
346
+ this._priceAxisDragging = false;
347
+ this._handleDragId = null;
348
+ this._handleDragIdx = -1;
349
+ this._bodyMoveId = null;
350
+ this._handlers.onCrosshairHide?.();
351
+ };
352
+ // ─── Wheel / zoom ─────────────────────────────────────────────────────────
353
+ _onWheel = (e) => {
354
+ e.preventDefault();
355
+ const x = e.offsetX;
356
+ const y = e.offsetY;
357
+ const plotW = this._transform.plotWidth;
358
+ const plotH = this._transform.plotHeight;
359
+ // Proportional zoom: normalise deltaY against one standard notch (120 px).
360
+ // High-resolution trackpads send many small deltas; mice send 120 at a time.
361
+ // Range: 0.8% per tiny trackpad nudge → 4% per full mouse-wheel notch.
362
+ // This keeps one notch feeling gentle while fast spinning still zooms quickly.
363
+ const rawAbs = Math.abs(e.deltaY);
364
+ const speed = Math.min(rawAbs / 120, 1); // 0–1; 1 = one standard notch
365
+ const magnitude = 0.008 + speed * 0.032; // 0.8% minimum → 4% per notch
366
+ const baseZoom = 1 + magnitude;
367
+ const factor = e.deltaY > 0 ? baseZoom : 1 / baseZoom;
368
+ // Price axis strip (right side) — zoom price scale
369
+ if (x >= plotW && y < plotH) {
370
+ this._handlers.onPriceScaleZoom?.(factor, y);
371
+ return;
372
+ }
373
+ // Time axis strip (bottom) — zoom time scale (expand/contract left-right)
374
+ if (y >= plotH) {
375
+ // Zoom around the horizontal centre of the plot so the chart expands
376
+ // and contracts symmetrically rather than anchored to the cursor.
377
+ this._handlers.onZoom?.(factor, plotW / 2);
378
+ return;
379
+ }
380
+ // Chart plot area — zoom time axis
381
+ this._handlers.onZoom?.(factor, x);
382
+ };
383
+ // ─── Double-click — price axis fit ──────────────────────────────────────
384
+ _onDblClick = (e) => {
385
+ // Fire onFitContent when the double-click lands on the price axis (right)
386
+ // or the time axis (bottom) — both reset to the default viewport.
387
+ const onPriceAxis = e.offsetX >= this._transform.plotWidth;
388
+ const onTimeAxis = e.offsetY >= this._transform.plotHeight;
389
+ if (onPriceAxis || onTimeAxis) {
390
+ e.preventDefault();
391
+ this._handlers.onFitContent?.();
392
+ }
393
+ };
394
+ // ─── Context menu ─────────────────────────────────────────────────────────
395
+ _onContextMenu = (e) => {
396
+ e.preventDefault();
397
+ const x = e.offsetX;
398
+ const y = e.offsetY;
399
+ const hit = this._hitTest(x, y);
400
+ this._handlers.onContextMenu?.(x, y, hit);
401
+ };
402
+ // ─── Keyboard ─────────────────────────────────────────────────────────────
403
+ _onKeyDown = (e) => {
404
+ const action = this._keyToAction(e.key);
405
+ if (action === null)
406
+ return;
407
+ // Suppress browser scroll / zoom for chart keys
408
+ e.preventDefault();
409
+ const modifiers = {
410
+ shift: e.shiftKey,
411
+ ctrl: e.ctrlKey,
412
+ alt: e.altKey,
413
+ meta: e.metaKey,
414
+ };
415
+ this._handlers.onKeyAction?.(action, modifiers);
416
+ };
417
+ _keyToAction(key) {
418
+ switch (key) {
419
+ case 'ArrowLeft': return 'panLeft';
420
+ case 'ArrowRight': return 'panRight';
421
+ case 'ArrowUp': return 'panUp';
422
+ case 'ArrowDown': return 'panDown';
423
+ case '+':
424
+ case '=': return 'zoomIn';
425
+ case '-':
426
+ case '_': return 'zoomOut';
427
+ case 'Home': return 'scrollToStart';
428
+ case 'End': return 'scrollToEnd';
429
+ case 'Escape': return 'deselect';
430
+ case 'Delete':
431
+ case 'Backspace': return 'deleteSelection';
432
+ default: return null;
433
+ }
434
+ }
435
+ // ─── Click → selection ────────────────────────────────────────────────────
436
+ _handleClick(x, y, hit) {
437
+ if (hit.kind === 'drawing') {
438
+ this._selectedDrawingId = hit.id;
439
+ this._handlers.onSelect?.(x, y, hit);
440
+ }
441
+ else if (hit.kind === 'bar') {
442
+ this._selectedDrawingId = null;
443
+ this._handlers.onSelect?.(x, y, hit);
444
+ }
445
+ else {
446
+ this._selectedDrawingId = null;
447
+ this._handlers.onDeselect?.();
448
+ }
449
+ }
450
+ // ─── Hit-testing ─────────────────────────────────────────────────────────
451
+ _hitTest(x, y) {
452
+ const t = this._transform;
453
+ // Price axis zone (right strip)
454
+ if (x >= t.plotWidth) {
455
+ return { kind: 'priceAxis' };
456
+ }
457
+ // Time axis zone (bottom strip)
458
+ if (y >= t.plotHeight) {
459
+ return { kind: 'timeAxis' };
460
+ }
461
+ // Handles of selected drawing — highest priority
462
+ if (this._selectedDrawingId !== null) {
463
+ for (const drawing of this._drawings) {
464
+ if (drawing.id !== this._selectedDrawingId || drawing.visible === false)
465
+ continue;
466
+ const hi = this._hitTestHandles(x, y, drawing);
467
+ if (hi >= 0) {
468
+ return { kind: 'drawingHandle', id: drawing.id, type: drawing.type, handleIndex: hi };
469
+ }
470
+ }
471
+ }
472
+ // Drawings — higher priority than bars
473
+ const drawingHit = this._hitTestDrawings(x, y);
474
+ if (drawingHit !== null) {
475
+ return { kind: 'drawing', id: drawingHit.id, type: drawingHit.type };
476
+ }
477
+ // Nearest visible bar
478
+ const barHit = this._hitTestBar(x);
479
+ if (barHit !== null) {
480
+ return { kind: 'bar', index: barHit.index, bar: barHit.bar };
481
+ }
482
+ return { kind: 'none' };
483
+ }
484
+ _hitTestHandles(x, y, drawing) {
485
+ const t = this._transform;
486
+ for (let i = 0; i < drawing.points.length; i++) {
487
+ const p = drawing.points[i];
488
+ if (Math.hypot(x - t.timeToX(p.time), y - t.priceToY(p.price)) < HANDLE_HIT_PX) {
489
+ return i;
490
+ }
491
+ }
492
+ return -1;
493
+ }
494
+ _hitTestDrawings(x, y) {
495
+ let bestId = null;
496
+ let bestType = null;
497
+ let bestDist = DRAWING_HIT_PX + 1;
498
+ for (const drawing of this._drawings) {
499
+ if (drawing.visible === false)
500
+ continue;
501
+ const rawDist = this._distToDrawing(x, y, drawing);
502
+ // Small bias for the selected drawing so it "sticks" under the cursor
503
+ const dist = rawDist + (drawing.id === this._selectedDrawingId ? -2 : 0);
504
+ if (dist < bestDist) {
505
+ bestDist = dist;
506
+ bestId = drawing.id;
507
+ bestType = drawing.type;
508
+ }
509
+ }
510
+ return bestId !== null && bestType !== null ? { id: bestId, type: bestType } : null;
511
+ }
512
+ _distToDrawing(mx, my, drawing) {
513
+ const t = this._transform;
514
+ switch (drawing.type) {
515
+ case 'horizontal': {
516
+ const p0 = drawing.points[0];
517
+ if (!p0)
518
+ return Infinity;
519
+ return Math.abs(my - t.priceToY(p0.price));
520
+ }
521
+ case 'vertical': {
522
+ const p0 = drawing.points[0];
523
+ if (!p0)
524
+ return Infinity;
525
+ return Math.abs(mx - t.timeToX(p0.time));
526
+ }
527
+ case 'trendline':
528
+ case 'fibRetracement': {
529
+ const p0 = drawing.points[0];
530
+ const p1 = drawing.points[1];
531
+ if (!p0 || !p1)
532
+ return Infinity;
533
+ return this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p0.price), t.timeToX(p1.time), t.priceToY(p1.price));
534
+ }
535
+ case 'ray': {
536
+ const p0 = drawing.points[0];
537
+ const p1 = drawing.points[1];
538
+ if (!p0 || !p1)
539
+ return Infinity;
540
+ const x0 = t.timeToX(p0.time);
541
+ const y0 = t.priceToY(p0.price);
542
+ const dx = t.timeToX(p1.time) - x0;
543
+ const dy = t.priceToY(p1.price) - y0;
544
+ // Compute exit using the same formula as the renderer
545
+ const pw = t.plotWidth;
546
+ const ph = t.plotHeight;
547
+ let tMin = Infinity;
548
+ if (dx > 0)
549
+ tMin = Math.min(tMin, (pw - x0) / dx);
550
+ else if (dx < 0)
551
+ tMin = Math.min(tMin, -x0 / dx);
552
+ if (dy > 0)
553
+ tMin = Math.min(tMin, (ph - y0) / dy);
554
+ else if (dy < 0)
555
+ tMin = Math.min(tMin, -y0 / dy);
556
+ const ex = tMin === Infinity ? x0 : x0 + dx * tMin;
557
+ const ey = tMin === Infinity ? y0 : y0 + dy * tMin;
558
+ return this._distPointToSegment(mx, my, x0, y0, ex, ey);
559
+ }
560
+ case 'rectangle': {
561
+ const p0 = drawing.points[0];
562
+ const p1 = drawing.points[1];
563
+ if (!p0 || !p1)
564
+ return Infinity;
565
+ const rx = Math.min(t.timeToX(p0.time), t.timeToX(p1.time));
566
+ const ry = Math.min(t.priceToY(p0.price), t.priceToY(p1.price));
567
+ const rw = Math.abs(t.timeToX(p1.time) - t.timeToX(p0.time));
568
+ const rh = Math.abs(t.priceToY(p1.price) - t.priceToY(p0.price));
569
+ return this._distToRect(mx, my, rx, ry, rw, rh);
570
+ }
571
+ case 'text': {
572
+ const p0 = drawing.points[0];
573
+ if (!p0)
574
+ return Infinity;
575
+ const px = t.timeToX(p0.time);
576
+ const py = t.priceToY(p0.price);
577
+ // Approximate bounding box
578
+ const fs = drawing.fontSize ?? 13;
579
+ return this._distToRect(mx, my, px, py - fs - 8, 80, fs + 8);
580
+ }
581
+ // ── new line types (two-anchor, infinite or extended) ──────────────
582
+ case 'infoLine':
583
+ case 'extendedLine':
584
+ case 'trendAngle': {
585
+ const p0 = drawing.points[0];
586
+ const p1 = drawing.points[1];
587
+ if (!p0 || !p1)
588
+ return Infinity;
589
+ // Approximate by segment; close enough for hit-testing
590
+ return this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p0.price), t.timeToX(p1.time), t.priceToY(p1.price));
591
+ }
592
+ case 'horizontalRay': {
593
+ const p0 = drawing.points[0];
594
+ if (!p0)
595
+ return Infinity;
596
+ const x0 = t.timeToX(p0.time);
597
+ const y = t.priceToY(p0.price);
598
+ if (mx < x0)
599
+ return Infinity;
600
+ return Math.abs(my - y);
601
+ }
602
+ case 'crossLine': {
603
+ const p0 = drawing.points[0];
604
+ if (!p0)
605
+ return Infinity;
606
+ const x = t.timeToX(p0.time);
607
+ const y = t.priceToY(p0.price);
608
+ return Math.min(Math.abs(my - y), Math.abs(mx - x));
609
+ }
610
+ // ── channels ──────────────────────────────────────────────────────
611
+ case 'parallelChannel':
612
+ case 'flatTopBottom':
613
+ case 'regressionTrend':
614
+ case 'disjointChannel': {
615
+ const p0 = drawing.points[0];
616
+ const p1 = drawing.points[1];
617
+ if (!p0 || !p1)
618
+ return Infinity;
619
+ const d0 = this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p0.price), t.timeToX(p1.time), t.priceToY(p1.price));
620
+ const p2 = drawing.points[2];
621
+ if (!p2)
622
+ return d0;
623
+ const d1 = this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p2.price), t.timeToX(p1.time), t.priceToY(p2.price));
624
+ return Math.min(d0, d1);
625
+ }
626
+ // ── pitchforks ────────────────────────────────────────────────────
627
+ case 'pitchfork':
628
+ case 'schiffPitchfork':
629
+ case 'modifiedSchiffPitchfork':
630
+ case 'insidePitchfork': {
631
+ const p0 = drawing.points[0];
632
+ const p1 = drawing.points[1];
633
+ const p2 = drawing.points[2];
634
+ if (!p0 || !p1)
635
+ return Infinity;
636
+ let best = this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p0.price), t.timeToX(p1.time), t.priceToY(p1.price));
637
+ if (p2) {
638
+ best = Math.min(best, this._distPointToSegment(mx, my, t.timeToX(p0.time), t.priceToY(p0.price), t.timeToX(p2.time), t.priceToY(p2.price)));
639
+ }
640
+ return best;
641
+ }
642
+ default:
643
+ // Fib/Gann and future drawing types are not hit-testable yet.
644
+ return Infinity;
645
+ }
646
+ }
647
+ /**
648
+ * Returns the nearest visible bar to x-coordinate `mx`, or `null` if no bar
649
+ * falls within half a bar-width.
650
+ */
651
+ _hitTestBar(mx) {
652
+ const t = this._transform;
653
+ const { from, to } = t.timeRange;
654
+ const visibleSeconds = Math.max(1, to - from);
655
+ const barHalfPx = (t.plotWidth / visibleSeconds) / 2;
656
+ let bestIndex = -1;
657
+ let bestDist = Infinity;
658
+ for (let i = 0; i < this._bars.length; i++) {
659
+ const bar = this._bars[i];
660
+ if (!bar || bar.time < from || bar.time > to)
661
+ continue;
662
+ const dist = Math.abs(mx - t.timeToX(bar.time));
663
+ if (dist < bestDist) {
664
+ bestDist = dist;
665
+ bestIndex = i;
666
+ }
667
+ }
668
+ if (bestIndex < 0 || bestDist > barHalfPx)
669
+ return null;
670
+ const bar = this._bars[bestIndex];
671
+ if (!bar)
672
+ return null;
673
+ return { index: bestIndex, bar };
674
+ }
675
+ // ─── Geometry helpers ────────────────────────────────────────────────────
676
+ /** Distance from point (px, py) to line segment (x1,y1)→(x2,y2). */
677
+ _distPointToSegment(px, py, x1, y1, x2, y2) {
678
+ const dx = x2 - x1;
679
+ const dy = y2 - y1;
680
+ const lenSq = dx * dx + dy * dy;
681
+ if (lenSq === 0)
682
+ return Math.hypot(px - x1, py - y1);
683
+ const t = Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));
684
+ return Math.hypot(px - (x1 + t * dx), py - (y1 + t * dy));
685
+ }
686
+ /**
687
+ * Minimum distance from point (px, py) to the perimeter of an
688
+ * axis-aligned rectangle. Returns 0 if the point is inside.
689
+ */
690
+ _distToRect(px, py, rx, ry, rw, rh) {
691
+ const inside = px >= rx && px <= rx + rw &&
692
+ py >= ry && py <= ry + rh;
693
+ if (inside)
694
+ return 0;
695
+ return Math.min(this._distPointToSegment(px, py, rx, ry, rx + rw, ry), this._distPointToSegment(px, py, rx + rw, ry, rx + rw, ry + rh), this._distPointToSegment(px, py, rx + rw, ry + rh, rx, ry + rh), this._distPointToSegment(px, py, rx, ry + rh, rx, ry));
696
+ }
697
+ }
698
+ //# sourceMappingURL=InteractionManager.js.map