@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,440 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ManagedAppShell — stateful chart application shell.
4
+ *
5
+ * Owns all workspace state (tabs, symbol, timeframe, layout persistence, etc.)
6
+ * and wires injected API clients to ChartWorkspace. App-specific drawers (script,
7
+ * watchlist, trade) are passed as render-prop factories so this shell never
8
+ * imports from the app layer.
9
+ */
10
+ import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle, } from 'react';
11
+ import { ChartCanvas } from '../canvas/ChartCanvas';
12
+ import { ChartWorkspace } from '../workspace/ChartWorkspace';
13
+ import { DEFAULT_FAVORITES } from '../workspace/toolbars/TopToolbar';
14
+ import { useChartCapabilities } from '../hooks/useChartCapabilities';
15
+ import { LicenseManager } from '../../';
16
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
17
+ function uid() { return Math.random().toString(36).slice(2, 10); }
18
+ const DEFAULT_INDICATORS = [];
19
+ // ─── License loaders ──────────────────────────────────────────────────────────
20
+ /**
21
+ * Fetches the license payload from the API and loads it into LicenseManager.
22
+ *
23
+ * @param apiUrl Optional base URL (defaults to current origin).
24
+ * @param getAuthToken Optional async callback to obtain a Bearer token.
25
+ */
26
+ async function loadLicenseFromApi(apiUrl, getAuthToken) {
27
+ try {
28
+ const url = `${apiUrl ?? ''}/api/license`;
29
+ const headers = {};
30
+ if (getAuthToken) {
31
+ try {
32
+ const tok = await getAuthToken();
33
+ if (tok)
34
+ headers['Authorization'] = `Bearer ${tok}`;
35
+ }
36
+ catch { /* token fetch failed — continue unauthenticated */ }
37
+ }
38
+ const r = await fetch(url, { headers });
39
+ const data = r.ok
40
+ ? await r.json()
41
+ : { licensePayload: null };
42
+ if (data.licensePayload && typeof data.licensePayload === 'object') {
43
+ LicenseManager.getInstance().loadLicense(data.licensePayload);
44
+ }
45
+ // If the endpoint returns no payload, leave LicenseManager in its current
46
+ // state (unmanaged mode) rather than clearing a previously loaded license.
47
+ }
48
+ catch {
49
+ // Network failure — leave LicenseManager in its current state.
50
+ }
51
+ }
52
+ function makeTab(n) {
53
+ return { id: uid(), label: `Chart ${n}`, symbol: 'BINANCE:BTCUSDT', timeframe: '1h', remountCount: 0 };
54
+ }
55
+ const DEFAULT_TAB = makeTab(1);
56
+ const DEFAULT_WORKSPACE = {
57
+ tabs: [{ id: DEFAULT_TAB.id, label: DEFAULT_TAB.label, symbol: DEFAULT_TAB.symbol, timeframe: DEFAULT_TAB.timeframe }],
58
+ activeTabId: DEFAULT_TAB.id,
59
+ autoSave: false,
60
+ timezone: 'UTC',
61
+ customTimeframes: [],
62
+ favoriteTfs: DEFAULT_FAVORITES,
63
+ session: 'regular',
64
+ theme: 'dark',
65
+ };
66
+ function workspaceFromPrefs(raw) {
67
+ if (!raw || typeof raw !== 'object')
68
+ return DEFAULT_WORKSPACE;
69
+ const p = raw;
70
+ const tabs = Array.isArray(p['tabs']) && p['tabs'].length > 0
71
+ ? p['tabs']
72
+ : DEFAULT_WORKSPACE.tabs;
73
+ const activeTabId = typeof p['activeTabId'] === 'string' && tabs.some((t) => t.id === p['activeTabId'])
74
+ ? p['activeTabId']
75
+ : tabs[0].id;
76
+ return {
77
+ tabs,
78
+ activeTabId,
79
+ autoSave: typeof p['autoSave'] === 'boolean' ? p['autoSave'] : false,
80
+ timezone: typeof p['timezone'] === 'string' ? p['timezone'] : 'UTC',
81
+ customTimeframes: Array.isArray(p['customTimeframes']) ? p['customTimeframes'] : [],
82
+ favoriteTfs: Array.isArray(p['favoriteTfs']) && p['favoriteTfs'].length > 0
83
+ ? p['favoriteTfs']
84
+ : DEFAULT_FAVORITES,
85
+ session: p['session'] === 'extended' ? 'extended' : 'regular',
86
+ theme: p['theme'] === 'light' ? 'light' : 'dark',
87
+ };
88
+ }
89
+ // ─── ManagedAppShell ──────────────────────────────────────────────────────────
90
+ export const ManagedAppShell = forwardRef(function ManagedAppShell({ datafeed, layouts, preferences, symbolResolver, getExchangeLogoUrl, config, getAuthToken, apiUrl, tradingBridge, renderScriptDrawer, renderWatchlistDrawer, renderTradeDrawer }, ref) {
91
+ const containerRef = useRef(null);
92
+ const [theme, setTheme] = useState('dark');
93
+ const [wsLoaded, setWsLoaded] = useState(false);
94
+ const [timezone, setTimezone] = useState(DEFAULT_WORKSPACE.timezone);
95
+ const [autoSave, setAutoSave] = useState(DEFAULT_WORKSPACE.autoSave);
96
+ const [tabs, setTabs] = useState(() => DEFAULT_WORKSPACE.tabs.map((t) => ({ ...t, remountCount: 0 })));
97
+ const [activeTabId, setActiveTabId] = useState(DEFAULT_WORKSPACE.activeTabId);
98
+ const [customTimeframes, setCustomTimeframes] = useState(DEFAULT_WORKSPACE.customTimeframes);
99
+ const [favoriteTfs, setFavoriteTfs] = useState(DEFAULT_WORKSPACE.favoriteTfs);
100
+ const [session, setSession] = useState(DEFAULT_WORKSPACE.session);
101
+ const [scriptDrawerOpen, setScriptDrawerOpen] = useState(false);
102
+ const [watchlistOpen, setWatchlistOpen] = useState(false);
103
+ const [tradeDrawerOpen, setTradeDrawerOpen] = useState(false);
104
+ const [chartDirty, setChartDirty] = useState(0);
105
+ const [isFullscreen, setIsFullscreen] = useState(false);
106
+ const capabilities = useChartCapabilities(config);
107
+ // ── Init warnings (dev only) ───────────────────────────────────────────────
108
+ useEffect(() => {
109
+ if (process.env.NODE_ENV === 'production')
110
+ return;
111
+ if ((capabilities.orderEntry || capabilities.draggableOrders || capabilities.renderManagedTradingControls) &&
112
+ !renderTradeDrawer) {
113
+ console.warn('[ManagedAppShell] Trading capabilities are active ' +
114
+ '(orderEntry=%s, draggableOrders=%s, managedTrading=%s) but ' +
115
+ 'renderTradeDrawer was not provided. Trading UI will be suppressed.', capabilities.orderEntry, capabilities.draggableOrders, capabilities.managedTrading);
116
+ }
117
+ // Warn once on mount and whenever trading caps or the slot presence changes.
118
+ // eslint-disable-next-line react-hooks/exhaustive-deps
119
+ }, [capabilities.orderEntry, capabilities.draggableOrders, capabilities.managedTrading]);
120
+ const [isLicensed, setIsLicensed] = useState(() => LicenseManager.getInstance().getLicense() !== null);
121
+ useEffect(() => LicenseManager.getInstance().subscribe(() => {
122
+ setIsLicensed(LicenseManager.getInstance().getLicense() !== null);
123
+ }), []);
124
+ // Per-tab chart instance registry — all tabs remain mounted simultaneously
125
+ const chartInstancesRef = useRef(new Map());
126
+ const chartHandleRef = useRef(null);
127
+ useImperativeHandle(ref, () => ({
128
+ getActiveChartHandle: () => chartHandleRef.current,
129
+ }));
130
+ useEffect(() => { document.documentElement.dataset.theme = theme; }, [theme]);
131
+ // ── Load workspace from DB on startup ──────────────────────────────────────
132
+ useEffect(() => {
133
+ preferences.get().then((data) => {
134
+ const ws = workspaceFromPrefs(data);
135
+ setTabs(ws.tabs.map((t) => ({ ...t, remountCount: 0 })));
136
+ setActiveTabId(ws.activeTabId);
137
+ setAutoSave(ws.autoSave);
138
+ setTimezone(ws.timezone);
139
+ setCustomTimeframes(ws.customTimeframes);
140
+ setFavoriteTfs(ws.favoriteTfs);
141
+ setSession(ws.session);
142
+ setTheme(ws.theme);
143
+ if (data['licensePayload'] && typeof data['licensePayload'] === 'object') {
144
+ LicenseManager.getInstance().loadLicense(data['licensePayload']);
145
+ }
146
+ else {
147
+ void loadLicenseFromApi(apiUrl, getAuthToken);
148
+ }
149
+ }).catch(() => {
150
+ void loadLicenseFromApi(apiUrl, getAuthToken);
151
+ }).finally(() => {
152
+ setWsLoaded(true);
153
+ });
154
+ // eslint-disable-next-line react-hooks/exhaustive-deps
155
+ }, []); // run once on mount
156
+ // ── Debounced workspace save to DB ─────────────────────────────────────────
157
+ const saveTimerRef = useRef(null);
158
+ // Stable refs so the debounced callback always sees latest values
159
+ const activeTabIdRef = useRef(activeTabId);
160
+ const autoSaveRef = useRef(autoSave);
161
+ const timezoneRef = useRef(timezone);
162
+ const customTimeframesRef = useRef(customTimeframes);
163
+ const favoriteTfsRef = useRef(favoriteTfs);
164
+ const sessionRef = useRef(session);
165
+ const themeRef = useRef(theme);
166
+ activeTabIdRef.current = activeTabId;
167
+ autoSaveRef.current = autoSave;
168
+ timezoneRef.current = timezone;
169
+ customTimeframesRef.current = customTimeframes;
170
+ favoriteTfsRef.current = favoriteTfs;
171
+ sessionRef.current = session;
172
+ themeRef.current = theme;
173
+ const saveWorkspace = useCallback(() => {
174
+ if (!wsLoaded)
175
+ return;
176
+ if (saveTimerRef.current)
177
+ clearTimeout(saveTimerRef.current);
178
+ saveTimerRef.current = setTimeout(() => {
179
+ const snap = chartHandleRef.current?.getLayoutSnapshot();
180
+ setTabs((prev) => {
181
+ const persisted = prev.map(({ remountCount: _r, ...rest }) => rest.id === activeTabIdRef.current && snap ? { ...rest, snapshot: snap } : rest);
182
+ const ws = {
183
+ tabs: persisted,
184
+ activeTabId: activeTabIdRef.current,
185
+ autoSave: autoSaveRef.current,
186
+ timezone: timezoneRef.current,
187
+ customTimeframes: customTimeframesRef.current,
188
+ favoriteTfs: favoriteTfsRef.current,
189
+ session: sessionRef.current,
190
+ theme: themeRef.current,
191
+ };
192
+ const license = LicenseManager.getInstance().getLicense();
193
+ preferences.put({ ...ws, ...(license ? { licensePayload: license } : {}) })
194
+ .catch(() => { });
195
+ return prev;
196
+ });
197
+ }, 1_500);
198
+ }, [wsLoaded, preferences]);
199
+ // Keep chartHandleRef in sync with active tab
200
+ useEffect(() => {
201
+ chartHandleRef.current = chartInstancesRef.current.get(activeTabId) ?? null;
202
+ }, [activeTabId]);
203
+ // Trigger save whenever workspace state changes
204
+ useEffect(() => { saveWorkspace(); }, [tabs, activeTabId, autoSave, timezone, customTimeframes, favoriteTfs, session, theme, chartDirty, saveWorkspace]);
205
+ // Track browser fullscreen changes
206
+ useEffect(() => {
207
+ const handler = () => setIsFullscreen(!!document.fullscreenElement);
208
+ document.addEventListener('fullscreenchange', handler);
209
+ return () => document.removeEventListener('fullscreenchange', handler);
210
+ }, []);
211
+ const handleFullscreen = useCallback(() => {
212
+ if (!document.fullscreenElement) {
213
+ containerRef.current?.requestFullscreen().catch(() => { });
214
+ }
215
+ else {
216
+ document.exitFullscreen().catch(() => { });
217
+ }
218
+ }, []);
219
+ const handleCopyScreenshot = useCallback(async () => {
220
+ const url = await chartHandleRef.current?.captureScreenshot();
221
+ if (!url)
222
+ return;
223
+ try {
224
+ const resp = await fetch(url);
225
+ const blob = await resp.blob();
226
+ await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]);
227
+ }
228
+ catch { /* Clipboard API unavailable */ }
229
+ }, []);
230
+ const handleDownloadScreenshot = useCallback(async () => {
231
+ const url = await chartHandleRef.current?.captureScreenshot();
232
+ if (!url)
233
+ return;
234
+ const a = document.createElement('a');
235
+ a.href = url;
236
+ a.download = `forgecharts-${Date.now()}.png`;
237
+ a.click();
238
+ }, []);
239
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
240
+ const activeTab = (tabs.find((t) => t.id === activeTabId) ?? tabs[0]);
241
+ const captureSnapshot = useCallback(() => chartHandleRef.current?.getLayoutSnapshot() ?? null, []);
242
+ // ── Tab management ─────────────────────────────────────────────────────────
243
+ const selectTab = useCallback((id) => {
244
+ const snap = captureSnapshot();
245
+ setTabs((prev) => prev.map((t) => t.id === activeTabId ? { ...t, ...(snap !== null ? { snapshot: snap } : {}) } : t));
246
+ setActiveTabId(id);
247
+ }, [activeTabId, captureSnapshot]);
248
+ const addTab = useCallback(() => {
249
+ const snap = captureSnapshot();
250
+ setTabs((prev) => {
251
+ const updated = prev.map((t) => t.id === activeTabId ? { ...t, ...(snap !== null ? { snapshot: snap } : {}) } : t);
252
+ const newTab = makeTab(updated.length + 1);
253
+ setActiveTabId(newTab.id);
254
+ return [...updated, newTab];
255
+ });
256
+ }, [activeTabId, captureSnapshot]);
257
+ const closeTab = useCallback((id) => {
258
+ setTabs((prev) => {
259
+ if (prev.length <= 1)
260
+ return prev;
261
+ const remaining = prev.filter((t) => t.id !== id);
262
+ if (id === activeTabId) {
263
+ const closedIdx = prev.findIndex((t) => t.id === id);
264
+ const next = remaining[Math.min(closedIdx, remaining.length - 1)];
265
+ if (next)
266
+ setActiveTabId(next.id);
267
+ }
268
+ return remaining;
269
+ });
270
+ }, [activeTabId]);
271
+ const renameTab = useCallback((id, label) => {
272
+ setTabs((prev) => prev.map((t) => (t.id === id ? { ...t, label } : t)));
273
+ }, []);
274
+ // ── Symbol / timeframe ─────────────────────────────────────────────────────
275
+ const handleSymbolChange = useCallback((symbol) => {
276
+ setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, symbol } : t)));
277
+ }, [activeTabId]);
278
+ const handleTimeframeChange = useCallback((timeframe) => {
279
+ setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, timeframe } : t)));
280
+ }, [activeTabId]);
281
+ const handleAddCustomTimeframe = useCallback((tf) => {
282
+ setCustomTimeframes((prev) => prev.includes(tf) ? prev : [...prev, tf]);
283
+ }, []);
284
+ const handleAddIndicator = useCallback((config) => {
285
+ chartHandleRef.current?.addIndicator(config);
286
+ }, []);
287
+ const toggleTheme = useCallback(() => setTheme((t) => (t === 'dark' ? 'light' : 'dark')), []);
288
+ // ── Layout helpers ─────────────────────────────────────────────────────────
289
+ const buildConfig = useCallback((snap) => ({
290
+ chartLayout: snap,
291
+ customTimeframes,
292
+ timezone,
293
+ }), [customTimeframes, timezone]);
294
+ const applyConfig = useCallback((cfg) => {
295
+ const chartLayout = (cfg['chartLayout'] != null ? cfg['chartLayout'] : cfg);
296
+ if (Array.isArray(cfg['customTimeframes'])) {
297
+ setCustomTimeframes(cfg['customTimeframes']);
298
+ }
299
+ if (typeof cfg['timezone'] === 'string') {
300
+ setTimezone(cfg['timezone']);
301
+ }
302
+ return chartLayout;
303
+ }, []);
304
+ // ── Layout save ────────────────────────────────────────────────────────────
305
+ const handleSaveLayout = useCallback(async (name) => {
306
+ const snap = captureSnapshot();
307
+ if (!snap)
308
+ throw new Error('No chart snapshot available');
309
+ const config = buildConfig(snap);
310
+ if (activeTab.savedLayoutId) {
311
+ await layouts.update(activeTab.savedLayoutId, {
312
+ name, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config,
313
+ });
314
+ setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, label: name } : t)));
315
+ }
316
+ else {
317
+ const record = await layouts.create({ name, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config });
318
+ setTabs((prev) => prev.map((t) => t.id === activeTabId ? { ...t, savedLayoutId: record.id, label: name } : t));
319
+ }
320
+ }, [activeTab, activeTabId, buildConfig, captureSnapshot, layouts]);
321
+ // ── Layout load ────────────────────────────────────────────────────────────
322
+ const handleLoadLayout = useCallback(async (layoutId) => {
323
+ const record = await layouts.get(layoutId);
324
+ const chartLayout = applyConfig(record.config);
325
+ setTabs((prev) => prev.map((t) => t.id === activeTabId
326
+ ? { ...t, symbol: record.symbol, timeframe: record.timeframe, snapshot: chartLayout, savedLayoutId: record.id, label: record.name, remountCount: t.remountCount + 1 }
327
+ : t));
328
+ }, [activeTabId, applyConfig, layouts]);
329
+ // ── Layout rename ──────────────────────────────────────────────────────────
330
+ const handleRenameLayout = useCallback(async (newName) => {
331
+ if (!activeTab.savedLayoutId)
332
+ throw new Error('Layout is not saved yet');
333
+ await layouts.update(activeTab.savedLayoutId, { name: newName });
334
+ setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, label: newName } : t)));
335
+ }, [activeTab.savedLayoutId, activeTabId, layouts]);
336
+ // ── Layout copy ────────────────────────────────────────────────────────────
337
+ const handleCopyLayout = useCallback(async (copyName) => {
338
+ const snap = captureSnapshot();
339
+ if (!snap)
340
+ throw new Error('No chart snapshot available');
341
+ const record = await layouts.create({
342
+ name: copyName, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config: buildConfig(snap),
343
+ });
344
+ const chartLayout = applyConfig(record.config);
345
+ const newTab = {
346
+ id: uid(), label: record.name, symbol: record.symbol, timeframe: record.timeframe,
347
+ snapshot: chartLayout, savedLayoutId: record.id, remountCount: 0,
348
+ };
349
+ setTabs((prev) => [
350
+ ...prev.map((t) => (t.id === activeTabId ? { ...t, snapshot: snap } : t)),
351
+ newTab,
352
+ ]);
353
+ setActiveTabId(newTab.id);
354
+ }, [activeTab, activeTabId, applyConfig, buildConfig, captureSnapshot, layouts]);
355
+ // ── Layout delete ──────────────────────────────────────────────────────────
356
+ const handleDeleteLayout = useCallback(async (layoutId) => {
357
+ await layouts.remove(layoutId);
358
+ setTabs((prev) => prev.map((t) => {
359
+ if (t.savedLayoutId !== layoutId)
360
+ return t;
361
+ const { savedLayoutId: _removed, ...rest } = t;
362
+ return rest;
363
+ }));
364
+ }, [layouts]);
365
+ // ── Open layout in new tab ─────────────────────────────────────────────────
366
+ const handleOpenLayoutInNewTab = useCallback(async (layoutId) => {
367
+ const snap = captureSnapshot();
368
+ const record = await layouts.get(layoutId);
369
+ const chartLayout = applyConfig(record.config);
370
+ const newTab = {
371
+ id: uid(), label: record.name, symbol: record.symbol, timeframe: record.timeframe,
372
+ snapshot: chartLayout, savedLayoutId: record.id, remountCount: 0,
373
+ };
374
+ setTabs((prev) => [
375
+ ...prev.map((t) => (t.id === activeTabId && snap ? { ...t, snapshot: snap } : t)),
376
+ newTab,
377
+ ]);
378
+ setActiveTabId(newTab.id);
379
+ }, [activeTabId, applyConfig, captureSnapshot, layouts]);
380
+ // ── Auto-save ──────────────────────────────────────────────────────────────
381
+ const handleToggleAutoSave = useCallback((enabled) => { setAutoSave(enabled); }, []);
382
+ const autoSaveFnRef = useRef(() => { });
383
+ autoSaveFnRef.current = () => {
384
+ if (!autoSave || !activeTab.savedLayoutId)
385
+ return;
386
+ const snap = chartHandleRef.current?.getLayoutSnapshot();
387
+ if (!snap)
388
+ return;
389
+ layouts.update(activeTab.savedLayoutId, {
390
+ name: activeTab.label, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config: buildConfig(snap),
391
+ }).catch(() => { });
392
+ };
393
+ useEffect(() => {
394
+ if (!autoSave || !activeTab.savedLayoutId)
395
+ return;
396
+ const id = setInterval(() => autoSaveFnRef.current(), 5_000);
397
+ return () => clearInterval(id);
398
+ // eslint-disable-next-line react-hooks/exhaustive-deps
399
+ }, [autoSave, activeTab.savedLayoutId, activeTab.id]);
400
+ // ── Chart slot assembly ────────────────────────────────────────────────────
401
+ const chartSlots = (_jsx(_Fragment, { children: tabs.map((tab) => (_jsx("div", { style: tab.id === activeTabId
402
+ ? { position: 'absolute', inset: 0, display: 'flex' }
403
+ : { position: 'absolute', inset: 0, visibility: 'hidden', pointerEvents: 'none' }, children: _jsx(ChartCanvas, { ref: (handle) => {
404
+ if (handle) {
405
+ chartInstancesRef.current.set(tab.id, handle);
406
+ if (tab.id === activeTabId)
407
+ chartHandleRef.current = handle;
408
+ }
409
+ else {
410
+ chartInstancesRef.current.delete(tab.id);
411
+ }
412
+ }, symbol: tab.symbol, timeframe: tab.timeframe, theme: theme, timezone: timezone, datafeed: datafeed, initialIndicators: tab.snapshot ? [] : DEFAULT_INDICATORS, ...(tab.snapshot ? { layoutToRestore: tab.snapshot } : {}), ...(getExchangeLogoUrl ? { getExchangeLogoUrl } : {}), ...(tradingBridge ? { tradingBridge } : {}), onIndicatorsChanged: () => setChartDirty((d) => d + 1) }, `${tab.id}-${tab.remountCount}`) }, tab.id))) }));
413
+ // ── Drawer assembly ────────────────────────────────────────────────────────
414
+ const drawers = (_jsxs(_Fragment, { children: [scriptDrawerOpen && renderScriptDrawer?.({
415
+ onClose: () => setScriptDrawerOpen(false),
416
+ onAddIndicator: handleAddIndicator,
417
+ }), watchlistOpen && renderWatchlistDrawer?.({
418
+ onClose: () => setWatchlistOpen(false),
419
+ onSelectSymbol: (sym) => { handleSymbolChange(sym); },
420
+ })] }));
421
+ // ── Render ─────────────────────────────────────────────────────────────────
422
+ return (_jsxs("div", { ref: containerRef, style: { height: '100%' }, children: [tradeDrawerOpen && capabilities.renderManagedTradingControls && renderTradeDrawer?.({
423
+ onClose: () => setTradeDrawerOpen(false),
424
+ }), _jsx(ChartWorkspace
425
+ // TabBar
426
+ , {
427
+ // TabBar
428
+ tabs: tabs.map((t) => ({ id: t.id, label: t.label, isSaved: !!t.savedLayoutId })), activeTabId: activeTabId, onSelectTab: selectTab, onAddTab: addTab, onCloseTab: closeTab, onRenameTab: renameTab,
429
+ // TopToolbar
430
+ symbol: activeTab.symbol, timeframe: activeTab.timeframe, theme: theme, customTimeframes: customTimeframes, favoriteTfs: favoriteTfs, onSymbolChange: handleSymbolChange, onTimeframeChange: handleTimeframeChange, onAddCustomTimeframe: handleAddCustomTimeframe, onFavoriteTfsChange: setFavoriteTfs, onAddIndicator: handleAddIndicator, onToggleTheme: toggleTheme, onCopyScreenshot: handleCopyScreenshot, onDownloadScreenshot: handleDownloadScreenshot, onFullscreen: handleFullscreen, isFullscreen: isFullscreen, ...(activeTab.savedLayoutId ? { currentLayoutName: activeTab.label, currentLayoutId: activeTab.savedLayoutId } : {}), autoSave: autoSave, onFetchLayouts: () => layouts.list(), onSaveLayout: handleSaveLayout, onLoadLayout: handleLoadLayout, onRenameLayout: handleRenameLayout, onCopyLayout: handleCopyLayout, onToggleAutoSave: handleToggleAutoSave, onDeleteLayout: handleDeleteLayout, onOpenLayoutInNewTab: handleOpenLayoutInNewTab, symbolResolver: symbolResolver, showTradeButton: capabilities.renderManagedTradingControls, tradeDrawerOpen: tradeDrawerOpen, onToggleTradeDrawer: () => setTradeDrawerOpen((o) => !o),
431
+ // RightToolbar
432
+ watchlistOpen: watchlistOpen, onToggleWatchlist: () => setWatchlistOpen((o) => !o),
433
+ // BottomToolbar
434
+ activeSymbol: activeTab.symbol, timezone: timezone, onTimezoneChange: setTimezone, session: session, onSessionChange: setSession, scriptDrawerOpen: scriptDrawerOpen, onToggleScriptDrawer: () => setScriptDrawerOpen((o) => !o),
435
+ // State
436
+ isLicensed: isLicensed, wsLoaded: wsLoaded,
437
+ // Slots
438
+ chartSlots: chartSlots, drawers: drawers })] }));
439
+ });
440
+ //# sourceMappingURL=ManagedAppShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManagedAppShell.js","sourceRoot":"","sources":["../../../src/react/shell/ManagedAppShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * TradingBridge — host-side trading callback contract for Unmanaged mode.
3
+ *
4
+ * When a chart user performs a trading action (drag-to-place, cancel, bracket
5
+ * adjust, etc.) the chart emits a typed Intent and defers all confirmation to
6
+ * the host. The chart NEVER self-confirms order state. The host must push
7
+ * the resulting confirmed ChartOrder back via TradingOverlayStore.
8
+ *
9
+ * Usage (consumer / host app):
10
+ *
11
+ * ```tsx
12
+ * import type { TradingBridgeCallbacks } from '@forgecharts/sdk/react';
13
+ *
14
+ * const bridge: TradingBridgeCallbacks = {
15
+ * onPlaceOrderIntent: (intent) => myBroker.placeOrder(intent),
16
+ * onModifyOrderIntent: (intent) => myBroker.modifyOrder(intent),
17
+ * onCancelOrderIntent: (intent) => myBroker.cancelOrder(intent),
18
+ * onBracketAdjustIntent: (intent) => myBroker.adjustBracket(intent),
19
+ * };
20
+ *
21
+ * <ChartCanvas
22
+ * symbol="BTCUSDT"
23
+ * timeframe="1h"
24
+ * tradingBridge={bridge}
25
+ * />
26
+ * ```
27
+ *
28
+ * Debug logging:
29
+ * Wrap your callbacks with `createTradingBridgeLogger` to get structured
30
+ * console output in development:
31
+ *
32
+ * ```ts
33
+ * tradingBridge={createTradingBridgeLogger(bridge, 'MyChart')}
34
+ * ```
35
+ */
36
+ import type { PlaceOrderIntent, ModifyOrderIntent, CancelOrderIntent, BracketAdjustIntent } from '@forgecharts/types';
37
+ /**
38
+ * Injectable callback bag for the chart-to-host trading bridge.
39
+ *
40
+ * All callbacks are optional — omit any you do not handle. The chart will
41
+ * still emit the intent but silently discard it if the corresponding callback
42
+ * is not provided.
43
+ *
44
+ * The return types are `void | Promise<void>` so hosts can fire-and-forget or
45
+ * await before side-effects. The chart does not await the returned promise —
46
+ * confirmation always flows back through `TradingOverlayStore`.
47
+ */
48
+ export interface TradingBridgeCallbacks {
49
+ /**
50
+ * Called when the user triggers a new order placement.
51
+ * The host should validate, forward to the broker, and then call
52
+ * `overlayStore.upsertOrder(confirmedOrder)` once acknowledged.
53
+ */
54
+ onPlaceOrderIntent?: (intent: PlaceOrderIntent) => void | Promise<void>;
55
+ /**
56
+ * Called when the user drags an order line to a new price or edits it via UI.
57
+ * The host should send the modification to the broker and update the overlay
58
+ * store with the modified order.
59
+ */
60
+ onModifyOrderIntent?: (intent: ModifyOrderIntent) => void | Promise<void>;
61
+ /**
62
+ * Called when the user clicks the cancel control on an order line.
63
+ * The host should cancel at the venue and call `overlayStore.removeOrder(id)`.
64
+ */
65
+ onCancelOrderIntent?: (intent: CancelOrderIntent) => void | Promise<void>;
66
+ /**
67
+ * Called when the user drags a bracket leg (stop-loss or take-profit).
68
+ * The host adjusts both legs atomically and updates the overlay store.
69
+ */
70
+ onBracketAdjustIntent?: (intent: BracketAdjustIntent) => void | Promise<void>;
71
+ }
72
+ /**
73
+ * Wraps a `TradingBridgeCallbacks` object and logs all emitted intents to the
74
+ * console. Only active when `process.env.NODE_ENV !== 'production'`.
75
+ *
76
+ * @param callbacks The real callbacks to delegate to after logging.
77
+ * @param label Optional label prepended to log messages (e.g. chart id or symbol).
78
+ * @returns A new `TradingBridgeCallbacks` that logs then delegates.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * tradingBridge={createTradingBridgeLogger(bridge, 'BTCUSDT')}
83
+ * ```
84
+ */
85
+ export declare function createTradingBridgeLogger(callbacks: TradingBridgeCallbacks, label?: string): TradingBridgeCallbacks;
86
+ //# sourceMappingURL=TradingBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingBridge.d.ts","sourceRoot":"","sources":["../../../src/react/trading/TradingBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;GAUG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,kBAAkB,CAAC,EAAK,CAAC,MAAM,EAAE,gBAAgB,KAAQ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;;OAIG;IACH,mBAAmB,CAAC,EAAI,CAAC,MAAM,EAAE,iBAAiB,KAAO,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,mBAAmB,CAAC,EAAI,CAAC,MAAM,EAAE,iBAAiB,KAAO,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,sBAAsB,EACjC,KAAK,CAAC,EAAE,MAAM,GACb,sBAAsB,CAqDxB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * TradingBridge — host-side trading callback contract for Unmanaged mode.
3
+ *
4
+ * When a chart user performs a trading action (drag-to-place, cancel, bracket
5
+ * adjust, etc.) the chart emits a typed Intent and defers all confirmation to
6
+ * the host. The chart NEVER self-confirms order state. The host must push
7
+ * the resulting confirmed ChartOrder back via TradingOverlayStore.
8
+ *
9
+ * Usage (consumer / host app):
10
+ *
11
+ * ```tsx
12
+ * import type { TradingBridgeCallbacks } from '@forgecharts/sdk/react';
13
+ *
14
+ * const bridge: TradingBridgeCallbacks = {
15
+ * onPlaceOrderIntent: (intent) => myBroker.placeOrder(intent),
16
+ * onModifyOrderIntent: (intent) => myBroker.modifyOrder(intent),
17
+ * onCancelOrderIntent: (intent) => myBroker.cancelOrder(intent),
18
+ * onBracketAdjustIntent: (intent) => myBroker.adjustBracket(intent),
19
+ * };
20
+ *
21
+ * <ChartCanvas
22
+ * symbol="BTCUSDT"
23
+ * timeframe="1h"
24
+ * tradingBridge={bridge}
25
+ * />
26
+ * ```
27
+ *
28
+ * Debug logging:
29
+ * Wrap your callbacks with `createTradingBridgeLogger` to get structured
30
+ * console output in development:
31
+ *
32
+ * ```ts
33
+ * tradingBridge={createTradingBridgeLogger(bridge, 'MyChart')}
34
+ * ```
35
+ */
36
+ // ─── Debug logger ─────────────────────────────────────────────────────────────
37
+ /**
38
+ * Wraps a `TradingBridgeCallbacks` object and logs all emitted intents to the
39
+ * console. Only active when `process.env.NODE_ENV !== 'production'`.
40
+ *
41
+ * @param callbacks The real callbacks to delegate to after logging.
42
+ * @param label Optional label prepended to log messages (e.g. chart id or symbol).
43
+ * @returns A new `TradingBridgeCallbacks` that logs then delegates.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * tradingBridge={createTradingBridgeLogger(bridge, 'BTCUSDT')}
48
+ * ```
49
+ */
50
+ export function createTradingBridgeLogger(callbacks, label) {
51
+ if (process.env.NODE_ENV === 'production')
52
+ return callbacks;
53
+ const tag = label ? `[TradingBridge:${label}]` : '[TradingBridge]';
54
+ return {
55
+ onPlaceOrderIntent: (intent) => {
56
+ console.debug(`${tag} PLACE side=%s type=%s qty=%s price=%s stopPrice=%s correlationId=%s`, intent.side, intent.orderType, intent.qty, intent.limitPrice ?? '—', intent.stopPrice ?? '—', intent.correlationId, intent);
57
+ return callbacks.onPlaceOrderIntent?.(intent);
58
+ },
59
+ onModifyOrderIntent: (intent) => {
60
+ console.debug(`${tag} MODIFY orderId=%s limitPrice=%s stopPrice=%s qty=%s`, intent.orderId, intent.limitPrice ?? '—', intent.stopPrice ?? '—', intent.qty ?? '—', intent);
61
+ return callbacks.onModifyOrderIntent?.(intent);
62
+ },
63
+ onCancelOrderIntent: (intent) => {
64
+ console.debug(`${tag} CANCEL orderId=%s symbol=%s`, intent.orderId, intent.symbol, intent);
65
+ return callbacks.onCancelOrderIntent?.(intent);
66
+ },
67
+ onBracketAdjustIntent: (intent) => {
68
+ console.debug(`${tag} BRACKET_ADJUST entry=%s sl=%s tp=%s`, intent.entryOrderId, intent.stopLossPrice ?? '—', intent.takeProfitPrice ?? '—', intent);
69
+ return callbacks.onBracketAdjustIntent?.(intent);
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=TradingBridge.js.map