@363045841yyt/klinechart-core 0.8.11-alpha.0 → 0.8.12

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 (578) hide show
  1. package/dist/alerts/createAlertController.d.ts +30 -0
  2. package/dist/alerts/createAlertController.d.ts.map +1 -0
  3. package/dist/alerts/createAlertController.js +261 -0
  4. package/dist/alerts/createAlertController.js.map +1 -0
  5. package/dist/alerts/index.d.ts +5 -0
  6. package/dist/alerts/index.d.ts.map +1 -0
  7. package/dist/alerts/index.js +4 -0
  8. package/dist/alerts/index.js.map +1 -0
  9. package/dist/alerts/predicates.d.ts +28 -0
  10. package/dist/alerts/predicates.d.ts.map +1 -0
  11. package/dist/alerts/predicates.js +211 -0
  12. package/dist/alerts/predicates.js.map +1 -0
  13. package/dist/alerts/rollingVolume.d.ts +15 -0
  14. package/dist/alerts/rollingVolume.d.ts.map +1 -0
  15. package/dist/alerts/rollingVolume.js +42 -0
  16. package/dist/alerts/rollingVolume.js.map +1 -0
  17. package/dist/alerts/ruleSchema.d.ts +42 -0
  18. package/dist/alerts/ruleSchema.d.ts.map +1 -0
  19. package/dist/alerts/ruleSchema.js +240 -0
  20. package/dist/alerts/ruleSchema.js.map +1 -0
  21. package/dist/alerts/types.d.ts +169 -0
  22. package/dist/alerts/types.d.ts.map +1 -0
  23. package/dist/alerts/types.js +24 -0
  24. package/dist/alerts/types.js.map +1 -0
  25. package/dist/chartTypes/heikinAshi.d.ts +49 -0
  26. package/dist/chartTypes/heikinAshi.d.ts.map +1 -0
  27. package/dist/chartTypes/heikinAshi.js +94 -0
  28. package/dist/chartTypes/heikinAshi.js.map +1 -0
  29. package/dist/chartTypes/index.d.ts +6 -0
  30. package/dist/chartTypes/index.d.ts.map +1 -0
  31. package/dist/chartTypes/index.js +5 -0
  32. package/dist/chartTypes/index.js.map +1 -0
  33. package/dist/chartTypes/pointAndFigure.d.ts +83 -0
  34. package/dist/chartTypes/pointAndFigure.d.ts.map +1 -0
  35. package/dist/chartTypes/pointAndFigure.js +159 -0
  36. package/dist/chartTypes/pointAndFigure.js.map +1 -0
  37. package/dist/chartTypes/rangeBars.d.ts +61 -0
  38. package/dist/chartTypes/rangeBars.d.ts.map +1 -0
  39. package/dist/chartTypes/rangeBars.js +181 -0
  40. package/dist/chartTypes/rangeBars.js.map +1 -0
  41. package/dist/chartTypes/renko.d.ts +94 -0
  42. package/dist/chartTypes/renko.d.ts.map +1 -0
  43. package/dist/chartTypes/renko.js +207 -0
  44. package/dist/chartTypes/renko.js.map +1 -0
  45. package/dist/chartTypes/types.d.ts +97 -0
  46. package/dist/chartTypes/types.d.ts.map +1 -0
  47. package/dist/chartTypes/types.js +39 -0
  48. package/dist/chartTypes/types.js.map +1 -0
  49. package/dist/components/anchoredVwap/computeAnchoredVwap.d.ts +76 -0
  50. package/dist/components/anchoredVwap/computeAnchoredVwap.d.ts.map +1 -0
  51. package/dist/components/anchoredVwap/computeAnchoredVwap.js +155 -0
  52. package/dist/components/anchoredVwap/computeAnchoredVwap.js.map +1 -0
  53. package/dist/components/anchoredVwap/createAnchoredVwapController.d.ts +28 -0
  54. package/dist/components/anchoredVwap/createAnchoredVwapController.d.ts.map +1 -0
  55. package/dist/components/anchoredVwap/createAnchoredVwapController.js +282 -0
  56. package/dist/components/anchoredVwap/createAnchoredVwapController.js.map +1 -0
  57. package/dist/components/anchoredVwap/index.d.ts +11 -0
  58. package/dist/components/anchoredVwap/index.d.ts.map +1 -0
  59. package/dist/components/anchoredVwap/index.js +10 -0
  60. package/dist/components/anchoredVwap/index.js.map +1 -0
  61. package/dist/components/anchoredVwap/types.d.ts +171 -0
  62. package/dist/components/anchoredVwap/types.d.ts.map +1 -0
  63. package/dist/components/anchoredVwap/types.js +25 -0
  64. package/dist/components/anchoredVwap/types.js.map +1 -0
  65. package/dist/components/crosshairSync/createCrosshairSync.d.ts +94 -0
  66. package/dist/components/crosshairSync/createCrosshairSync.d.ts.map +1 -0
  67. package/dist/components/crosshairSync/createCrosshairSync.js +118 -0
  68. package/dist/components/crosshairSync/createCrosshairSync.js.map +1 -0
  69. package/dist/components/crosshairSync/index.d.ts +2 -0
  70. package/dist/components/crosshairSync/index.d.ts.map +1 -0
  71. package/dist/components/crosshairSync/index.js +2 -0
  72. package/dist/components/crosshairSync/index.js.map +1 -0
  73. package/dist/components/footprint/aggressor.d.ts +89 -0
  74. package/dist/components/footprint/aggressor.d.ts.map +1 -0
  75. package/dist/components/footprint/aggressor.js +106 -0
  76. package/dist/components/footprint/aggressor.js.map +1 -0
  77. package/dist/components/footprint/createFootprintController.d.ts +29 -0
  78. package/dist/components/footprint/createFootprintController.d.ts.map +1 -0
  79. package/dist/components/footprint/createFootprintController.js +264 -0
  80. package/dist/components/footprint/createFootprintController.js.map +1 -0
  81. package/dist/components/footprint/index.d.ts +7 -0
  82. package/dist/components/footprint/index.d.ts.map +1 -0
  83. package/dist/components/footprint/index.js +4 -0
  84. package/dist/components/footprint/index.js.map +1 -0
  85. package/dist/components/footprint/perBarStats.d.ts +63 -0
  86. package/dist/components/footprint/perBarStats.d.ts.map +1 -0
  87. package/dist/components/footprint/perBarStats.js +123 -0
  88. package/dist/components/footprint/perBarStats.js.map +1 -0
  89. package/dist/components/footprint/types.d.ts +197 -0
  90. package/dist/components/footprint/types.d.ts.map +1 -0
  91. package/dist/components/footprint/types.js +23 -0
  92. package/dist/components/footprint/types.js.map +1 -0
  93. package/dist/components/mtfOverlay/alignToBaseIndex.d.ts +45 -0
  94. package/dist/components/mtfOverlay/alignToBaseIndex.d.ts.map +1 -0
  95. package/dist/components/mtfOverlay/alignToBaseIndex.js +92 -0
  96. package/dist/components/mtfOverlay/alignToBaseIndex.js.map +1 -0
  97. package/dist/components/mtfOverlay/createMtfController.d.ts +7 -0
  98. package/dist/components/mtfOverlay/createMtfController.d.ts.map +1 -0
  99. package/dist/components/mtfOverlay/createMtfController.js +134 -0
  100. package/dist/components/mtfOverlay/createMtfController.js.map +1 -0
  101. package/dist/components/mtfOverlay/index.d.ts +19 -0
  102. package/dist/components/mtfOverlay/index.d.ts.map +1 -0
  103. package/dist/components/mtfOverlay/index.js +18 -0
  104. package/dist/components/mtfOverlay/index.js.map +1 -0
  105. package/dist/components/mtfOverlay/resampleBars.d.ts +37 -0
  106. package/dist/components/mtfOverlay/resampleBars.d.ts.map +1 -0
  107. package/dist/components/mtfOverlay/resampleBars.js +93 -0
  108. package/dist/components/mtfOverlay/resampleBars.js.map +1 -0
  109. package/dist/components/mtfOverlay/types.d.ts +132 -0
  110. package/dist/components/mtfOverlay/types.d.ts.map +1 -0
  111. package/dist/components/mtfOverlay/types.js +22 -0
  112. package/dist/components/mtfOverlay/types.js.map +1 -0
  113. package/dist/components/orderBookHeatmap/createHeatmapController.d.ts +21 -0
  114. package/dist/components/orderBookHeatmap/createHeatmapController.d.ts.map +1 -0
  115. package/dist/components/orderBookHeatmap/createHeatmapController.js +234 -0
  116. package/dist/components/orderBookHeatmap/createHeatmapController.js.map +1 -0
  117. package/dist/components/orderBookHeatmap/createOrderBookState.d.ts +18 -0
  118. package/dist/components/orderBookHeatmap/createOrderBookState.d.ts.map +1 -0
  119. package/dist/components/orderBookHeatmap/createOrderBookState.js +102 -0
  120. package/dist/components/orderBookHeatmap/createOrderBookState.js.map +1 -0
  121. package/dist/components/orderBookHeatmap/deltaArchive.d.ts +25 -0
  122. package/dist/components/orderBookHeatmap/deltaArchive.d.ts.map +1 -0
  123. package/dist/components/orderBookHeatmap/deltaArchive.js +106 -0
  124. package/dist/components/orderBookHeatmap/deltaArchive.js.map +1 -0
  125. package/dist/components/orderBookHeatmap/index.d.ts +13 -0
  126. package/dist/components/orderBookHeatmap/index.d.ts.map +1 -0
  127. package/dist/components/orderBookHeatmap/index.js +12 -0
  128. package/dist/components/orderBookHeatmap/index.js.map +1 -0
  129. package/dist/components/orderBookHeatmap/logColorScale.d.ts +20 -0
  130. package/dist/components/orderBookHeatmap/logColorScale.d.ts.map +1 -0
  131. package/dist/components/orderBookHeatmap/logColorScale.js +71 -0
  132. package/dist/components/orderBookHeatmap/logColorScale.js.map +1 -0
  133. package/dist/components/orderBookHeatmap/snapshotRing.d.ts +16 -0
  134. package/dist/components/orderBookHeatmap/snapshotRing.d.ts.map +1 -0
  135. package/dist/components/orderBookHeatmap/snapshotRing.js +61 -0
  136. package/dist/components/orderBookHeatmap/snapshotRing.js.map +1 -0
  137. package/dist/components/orderBookHeatmap/types.d.ts +128 -0
  138. package/dist/components/orderBookHeatmap/types.d.ts.map +1 -0
  139. package/dist/components/orderBookHeatmap/types.js +16 -0
  140. package/dist/components/orderBookHeatmap/types.js.map +1 -0
  141. package/dist/components/volumeProfile/binning.d.ts +54 -0
  142. package/dist/components/volumeProfile/binning.d.ts.map +1 -0
  143. package/dist/components/volumeProfile/binning.js +123 -0
  144. package/dist/components/volumeProfile/binning.js.map +1 -0
  145. package/dist/components/volumeProfile/createVolumeProfileController.d.ts +31 -0
  146. package/dist/components/volumeProfile/createVolumeProfileController.d.ts.map +1 -0
  147. package/dist/components/volumeProfile/createVolumeProfileController.js +179 -0
  148. package/dist/components/volumeProfile/createVolumeProfileController.js.map +1 -0
  149. package/dist/components/volumeProfile/index.d.ts +6 -0
  150. package/dist/components/volumeProfile/index.d.ts.map +1 -0
  151. package/dist/components/volumeProfile/index.js +5 -0
  152. package/dist/components/volumeProfile/index.js.map +1 -0
  153. package/dist/components/volumeProfile/poc.d.ts +35 -0
  154. package/dist/components/volumeProfile/poc.d.ts.map +1 -0
  155. package/dist/components/volumeProfile/poc.js +51 -0
  156. package/dist/components/volumeProfile/poc.js.map +1 -0
  157. package/dist/components/volumeProfile/types.d.ts +138 -0
  158. package/dist/components/volumeProfile/types.d.ts.map +1 -0
  159. package/dist/components/volumeProfile/types.js +19 -0
  160. package/dist/components/volumeProfile/types.js.map +1 -0
  161. package/dist/components/volumeProfile/valueArea.d.ts +58 -0
  162. package/dist/components/volumeProfile/valueArea.d.ts.map +1 -0
  163. package/dist/components/volumeProfile/valueArea.js +172 -0
  164. package/dist/components/volumeProfile/valueArea.js.map +1 -0
  165. package/dist/controllers/createChartController.d.ts.map +1 -1
  166. package/dist/controllers/createChartController.js +22 -11
  167. package/dist/controllers/createChartController.js.map +1 -1
  168. package/dist/controllers/types.d.ts +3 -1
  169. package/dist/controllers/types.d.ts.map +1 -1
  170. package/dist/data-fetchers/baostock.d.ts.map +1 -1
  171. package/dist/data-fetchers/baostock.js +2 -1
  172. package/dist/data-fetchers/baostock.js.map +1 -1
  173. package/dist/data-fetchers/dataBuffer.effects.d.ts.map +1 -1
  174. package/dist/data-fetchers/dataBuffer.effects.js +2 -1
  175. package/dist/data-fetchers/dataBuffer.effects.js.map +1 -1
  176. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
  177. package/dist/data-fetchers/fetcherDefinitionRegistry.js +2 -1
  178. package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
  179. package/dist/data-fetchers/gotdx.js +4 -3
  180. package/dist/data-fetchers/gotdx.js.map +1 -1
  181. package/dist/data-fetchers/router.d.ts.map +1 -1
  182. package/dist/data-fetchers/router.js +4 -3
  183. package/dist/data-fetchers/router.js.map +1 -1
  184. package/dist/data-fetchers/tradingview.js +3 -2
  185. package/dist/data-fetchers/tradingview.js.map +1 -1
  186. package/dist/engine/chart.d.ts +13 -0
  187. package/dist/engine/chart.d.ts.map +1 -1
  188. package/dist/engine/chart.js +109 -0
  189. package/dist/engine/chart.js.map +1 -1
  190. package/dist/engine/data/chartDataManager.d.ts +1 -0
  191. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  192. package/dist/engine/data/chartDataManager.js +27 -4
  193. package/dist/engine/data/chartDataManager.js.map +1 -1
  194. package/dist/engine/drawing/toolConfig.d.ts.map +1 -1
  195. package/dist/engine/drawing/toolConfig.js +2 -1
  196. package/dist/engine/drawing/toolConfig.js.map +1 -1
  197. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  198. package/dist/engine/indicators/chartIndicatorManager.js +2 -1
  199. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  200. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  201. package/dist/engine/indicators/indicatorDefinitionRegistry.js +2 -1
  202. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  203. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  204. package/dist/engine/indicators/indicatorMetadata.js +2 -1
  205. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  206. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  207. package/dist/engine/indicators/indicatorRegistry.js +6 -5
  208. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  209. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
  210. package/dist/engine/indicators/registerBuiltins.js +2 -1
  211. package/dist/engine/indicators/registerBuiltins.js.map +1 -1
  212. package/dist/engine/indicators/scheduler.d.ts +6 -0
  213. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  214. package/dist/engine/indicators/scheduler.js +12 -0
  215. package/dist/engine/indicators/scheduler.js.map +1 -1
  216. package/dist/engine/indicators/soa.d.ts.map +1 -1
  217. package/dist/engine/indicators/soa.js +2 -1
  218. package/dist/engine/indicators/soa.js.map +1 -1
  219. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  220. package/dist/engine/indicators/stateComposer.js +2 -1
  221. package/dist/engine/indicators/stateComposer.js.map +1 -1
  222. package/dist/engine/subPaneManager.d.ts.map +1 -1
  223. package/dist/engine/subPaneManager.js +2 -1
  224. package/dist/engine/subPaneManager.js.map +1 -1
  225. package/dist/engine/utils/chartZoomController.d.ts +2 -0
  226. package/dist/engine/utils/chartZoomController.d.ts.map +1 -1
  227. package/dist/engine/utils/chartZoomController.js +5 -1
  228. package/dist/engine/utils/chartZoomController.js.map +1 -1
  229. package/dist/errors-help.d.ts +72 -0
  230. package/dist/errors-help.d.ts.map +1 -0
  231. package/dist/errors-help.js +149 -0
  232. package/dist/errors-help.js.map +1 -0
  233. package/dist/errors.d.ts +64 -0
  234. package/dist/errors.d.ts.map +1 -0
  235. package/dist/errors.js +61 -0
  236. package/dist/errors.js.map +1 -0
  237. package/dist/index.d.ts +18 -0
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +22 -0
  240. package/dist/index.js.map +1 -1
  241. package/dist/indicators/alma.d.ts +27 -0
  242. package/dist/indicators/alma.d.ts.map +1 -0
  243. package/dist/indicators/alma.js +36 -0
  244. package/dist/indicators/alma.js.map +1 -0
  245. package/dist/indicators/awesomeOscillator.d.ts +19 -0
  246. package/dist/indicators/awesomeOscillator.d.ts.map +1 -0
  247. package/dist/indicators/awesomeOscillator.js +36 -0
  248. package/dist/indicators/awesomeOscillator.js.map +1 -0
  249. package/dist/indicators/dpo.d.ts +17 -0
  250. package/dist/indicators/dpo.d.ts.map +1 -0
  251. package/dist/indicators/dpo.js +24 -0
  252. package/dist/indicators/dpo.js.map +1 -0
  253. package/dist/indicators/fisherTransform.d.ts +26 -0
  254. package/dist/indicators/fisherTransform.d.ts.map +1 -0
  255. package/dist/indicators/fisherTransform.js +44 -0
  256. package/dist/indicators/fisherTransform.js.map +1 -0
  257. package/dist/indicators/frama.d.ts +25 -0
  258. package/dist/indicators/frama.d.ts.map +1 -0
  259. package/dist/indicators/frama.js +61 -0
  260. package/dist/indicators/frama.js.map +1 -0
  261. package/dist/indicators/index.d.ts +24 -0
  262. package/dist/indicators/index.d.ts.map +1 -0
  263. package/dist/indicators/index.js +26 -0
  264. package/dist/indicators/index.js.map +1 -0
  265. package/dist/indicators/lsma.d.ts +21 -0
  266. package/dist/indicators/lsma.d.ts.map +1 -0
  267. package/dist/indicators/lsma.js +37 -0
  268. package/dist/indicators/lsma.js.map +1 -0
  269. package/dist/indicators/schaffTrendCycle.d.ts +24 -0
  270. package/dist/indicators/schaffTrendCycle.d.ts.map +1 -0
  271. package/dist/indicators/schaffTrendCycle.js +70 -0
  272. package/dist/indicators/schaffTrendCycle.js.map +1 -0
  273. package/dist/indicators/stochRSI.d.ts +24 -0
  274. package/dist/indicators/stochRSI.d.ts.map +1 -0
  275. package/dist/indicators/stochRSI.js +86 -0
  276. package/dist/indicators/stochRSI.js.map +1 -0
  277. package/dist/indicators/t3.d.ts +31 -0
  278. package/dist/indicators/t3.d.ts.map +1 -0
  279. package/dist/indicators/t3.js +63 -0
  280. package/dist/indicators/t3.js.map +1 -0
  281. package/dist/indicators/ultimateOscillator.d.ts +26 -0
  282. package/dist/indicators/ultimateOscillator.d.ts.map +1 -0
  283. package/dist/indicators/ultimateOscillator.js +59 -0
  284. package/dist/indicators/ultimateOscillator.js.map +1 -0
  285. package/dist/indicators/vidya.d.ts +24 -0
  286. package/dist/indicators/vidya.d.ts.map +1 -0
  287. package/dist/indicators/vidya.js +54 -0
  288. package/dist/indicators/vidya.js.map +1 -0
  289. package/dist/indicators/zlema.d.ts +16 -0
  290. package/dist/indicators/zlema.d.ts.map +1 -0
  291. package/dist/indicators/zlema.js +26 -0
  292. package/dist/indicators/zlema.js.map +1 -0
  293. package/dist/input/gesture.d.ts +125 -0
  294. package/dist/input/gesture.d.ts.map +1 -0
  295. package/dist/input/gesture.js +249 -0
  296. package/dist/input/gesture.js.map +1 -0
  297. package/dist/input/index.d.ts +9 -0
  298. package/dist/input/index.d.ts.map +1 -0
  299. package/dist/input/index.js +9 -0
  300. package/dist/input/index.js.map +1 -0
  301. package/dist/input/keyboard.d.ts +140 -0
  302. package/dist/input/keyboard.d.ts.map +1 -0
  303. package/dist/input/keyboard.js +260 -0
  304. package/dist/input/keyboard.js.map +1 -0
  305. package/dist/mcp/chartBridge.d.ts +2 -2
  306. package/dist/mcp/chartBridge.d.ts.map +1 -1
  307. package/dist/mcp/chartBridge.js +27 -21
  308. package/dist/mcp/chartBridge.js.map +1 -1
  309. package/dist/plugin/PluginHost.d.ts +0 -3
  310. package/dist/plugin/PluginHost.d.ts.map +1 -1
  311. package/dist/plugin/PluginHost.js +7 -3
  312. package/dist/plugin/PluginHost.js.map +1 -1
  313. package/dist/plugin/PluginRegistry.d.ts +0 -3
  314. package/dist/plugin/PluginRegistry.d.ts.map +1 -1
  315. package/dist/plugin/PluginRegistry.js +5 -1
  316. package/dist/plugin/PluginRegistry.js.map +1 -1
  317. package/dist/render/Renderer.d.ts +116 -0
  318. package/dist/render/Renderer.d.ts.map +1 -0
  319. package/dist/render/Renderer.js +31 -0
  320. package/dist/render/Renderer.js.map +1 -0
  321. package/dist/render/SurfaceBackend.d.ts +83 -0
  322. package/dist/render/SurfaceBackend.d.ts.map +1 -0
  323. package/dist/render/SurfaceBackend.js +27 -0
  324. package/dist/render/SurfaceBackend.js.map +1 -0
  325. package/dist/render/index.d.ts +12 -0
  326. package/dist/render/index.d.ts.map +1 -0
  327. package/dist/render/index.js +11 -0
  328. package/dist/render/index.js.map +1 -0
  329. package/dist/renderer-tier/detectRendererTier.d.ts +57 -0
  330. package/dist/renderer-tier/detectRendererTier.d.ts.map +1 -0
  331. package/dist/renderer-tier/detectRendererTier.js +143 -0
  332. package/dist/renderer-tier/detectRendererTier.js.map +1 -0
  333. package/dist/renderer-tier/index.d.ts +12 -0
  334. package/dist/renderer-tier/index.d.ts.map +1 -0
  335. package/dist/renderer-tier/index.js +12 -0
  336. package/dist/renderer-tier/index.js.map +1 -0
  337. package/dist/renderer-tier/selectBackend.d.ts +106 -0
  338. package/dist/renderer-tier/selectBackend.d.ts.map +1 -0
  339. package/dist/renderer-tier/selectBackend.js +113 -0
  340. package/dist/renderer-tier/selectBackend.js.map +1 -0
  341. package/dist/renderer-tier/types.d.ts +50 -0
  342. package/dist/renderer-tier/types.d.ts.map +1 -0
  343. package/dist/renderer-tier/types.js +24 -0
  344. package/dist/renderer-tier/types.js.map +1 -0
  345. package/dist/replay/createReplayController.d.ts +3 -0
  346. package/dist/replay/createReplayController.d.ts.map +1 -0
  347. package/dist/replay/createReplayController.js +251 -0
  348. package/dist/replay/createReplayController.js.map +1 -0
  349. package/dist/replay/index.d.ts +5 -0
  350. package/dist/replay/index.d.ts.map +1 -0
  351. package/dist/replay/index.js +3 -0
  352. package/dist/replay/index.js.map +1 -0
  353. package/dist/replay/timeline.d.ts +50 -0
  354. package/dist/replay/timeline.d.ts.map +1 -0
  355. package/dist/replay/timeline.js +104 -0
  356. package/dist/replay/timeline.js.map +1 -0
  357. package/dist/replay/types.d.ts +94 -0
  358. package/dist/replay/types.d.ts.map +1 -0
  359. package/dist/replay/types.js +21 -0
  360. package/dist/replay/types.js.map +1 -0
  361. package/dist/scale/anchoredZoom.d.ts +64 -0
  362. package/dist/scale/anchoredZoom.d.ts.map +1 -0
  363. package/dist/scale/anchoredZoom.js +67 -0
  364. package/dist/scale/anchoredZoom.js.map +1 -0
  365. package/dist/scale/createPriceScale.d.ts +49 -0
  366. package/dist/scale/createPriceScale.d.ts.map +1 -0
  367. package/dist/scale/createPriceScale.js +175 -0
  368. package/dist/scale/createPriceScale.js.map +1 -0
  369. package/dist/scale/createTimeScale.d.ts +27 -0
  370. package/dist/scale/createTimeScale.d.ts.map +1 -0
  371. package/dist/scale/createTimeScale.js +139 -0
  372. package/dist/scale/createTimeScale.js.map +1 -0
  373. package/dist/scale/index.d.ts +6 -0
  374. package/dist/scale/index.d.ts.map +1 -0
  375. package/dist/scale/index.js +5 -0
  376. package/dist/scale/index.js.map +1 -0
  377. package/dist/scale/originShift.d.ts +69 -0
  378. package/dist/scale/originShift.d.ts.map +1 -0
  379. package/dist/scale/originShift.js +41 -0
  380. package/dist/scale/originShift.js.map +1 -0
  381. package/dist/scale/types.d.ts +90 -0
  382. package/dist/scale/types.d.ts.map +1 -0
  383. package/dist/scale/types.js +17 -0
  384. package/dist/scale/types.js.map +1 -0
  385. package/dist/scene/createScene.d.ts +22 -0
  386. package/dist/scene/createScene.d.ts.map +1 -0
  387. package/dist/scene/createScene.js +114 -0
  388. package/dist/scene/createScene.js.map +1 -0
  389. package/dist/scene/index.d.ts +13 -0
  390. package/dist/scene/index.d.ts.map +1 -0
  391. package/dist/scene/index.js +11 -0
  392. package/dist/scene/index.js.map +1 -0
  393. package/dist/scene/layerRegistry.d.ts +83 -0
  394. package/dist/scene/layerRegistry.d.ts.map +1 -0
  395. package/dist/scene/layerRegistry.js +43 -0
  396. package/dist/scene/layerRegistry.js.map +1 -0
  397. package/dist/scene/types.d.ts +128 -0
  398. package/dist/scene/types.d.ts.map +1 -0
  399. package/dist/scene/types.js +21 -0
  400. package/dist/scene/types.js.map +1 -0
  401. package/dist/scheduler/createFrameBudget.d.ts +91 -0
  402. package/dist/scheduler/createFrameBudget.d.ts.map +1 -0
  403. package/dist/scheduler/createFrameBudget.js +232 -0
  404. package/dist/scheduler/createFrameBudget.js.map +1 -0
  405. package/dist/scheduler/index.d.ts +2 -0
  406. package/dist/scheduler/index.d.ts.map +1 -0
  407. package/dist/scheduler/index.js +2 -0
  408. package/dist/scheduler/index.js.map +1 -0
  409. package/dist/tokens/themeToCssVars.d.ts.map +1 -1
  410. package/dist/tokens/themeToCssVars.js +2 -28
  411. package/dist/tokens/themeToCssVars.js.map +1 -1
  412. package/dist/version.d.ts +1 -1
  413. package/dist/version.d.ts.map +1 -1
  414. package/dist/version.js +1 -1
  415. package/dist/version.js.map +1 -1
  416. package/package.json +1 -1
  417. package/src/__bench__/indicators.bench.ts +215 -0
  418. package/src/__bench__/orderBookHeatmap.bench.ts +68 -0
  419. package/src/__bench__/scale.bench.ts +80 -0
  420. package/src/__bench__/signal.bench.ts +41 -0
  421. package/src/__bench__/volumeProfile.bench.ts +66 -0
  422. package/src/__tests__/errors-help.test.ts +184 -0
  423. package/src/__tests__/errors.test.ts +187 -0
  424. package/src/alerts/__tests__/controller.test.ts +231 -0
  425. package/src/alerts/__tests__/predicates.test.ts +374 -0
  426. package/src/alerts/__tests__/ruleSchema.test.ts +180 -0
  427. package/src/alerts/createAlertController.ts +312 -0
  428. package/src/alerts/index.ts +18 -0
  429. package/src/alerts/predicates.ts +231 -0
  430. package/src/alerts/rollingVolume.ts +51 -0
  431. package/src/alerts/ruleSchema.ts +278 -0
  432. package/src/alerts/types.ts +177 -0
  433. package/src/chartTypes/__tests__/heikinAshi.test.ts +122 -0
  434. package/src/chartTypes/__tests__/pointAndFigure.test.ts +167 -0
  435. package/src/chartTypes/__tests__/rangeBars.test.ts +146 -0
  436. package/src/chartTypes/__tests__/renko.test.ts +160 -0
  437. package/src/chartTypes/heikinAshi.ts +116 -0
  438. package/src/chartTypes/index.ts +5 -0
  439. package/src/chartTypes/pointAndFigure.ts +278 -0
  440. package/src/chartTypes/rangeBars.ts +303 -0
  441. package/src/chartTypes/renko.ts +311 -0
  442. package/src/chartTypes/types.ts +99 -0
  443. package/src/components/anchoredVwap/__tests__/computeAnchoredVwap.test.ts +331 -0
  444. package/src/components/anchoredVwap/__tests__/controller.test.ts +430 -0
  445. package/src/components/anchoredVwap/computeAnchoredVwap.ts +174 -0
  446. package/src/components/anchoredVwap/createAnchoredVwapController.ts +358 -0
  447. package/src/components/anchoredVwap/index.ts +17 -0
  448. package/src/components/anchoredVwap/types.ts +187 -0
  449. package/src/components/crosshairSync/__tests__/crosshairSync.test.ts +261 -0
  450. package/src/components/crosshairSync/createCrosshairSync.ts +187 -0
  451. package/src/components/crosshairSync/index.ts +5 -0
  452. package/src/components/footprint/__tests__/aggressor.test.ts +127 -0
  453. package/src/components/footprint/__tests__/controller.test.ts +130 -0
  454. package/src/components/footprint/__tests__/perBarStats.test.ts +114 -0
  455. package/src/components/footprint/aggressor.ts +165 -0
  456. package/src/components/footprint/createFootprintController.ts +338 -0
  457. package/src/components/footprint/index.ts +21 -0
  458. package/src/components/footprint/perBarStats.ts +137 -0
  459. package/src/components/footprint/types.ts +232 -0
  460. package/src/components/mtfOverlay/__tests__/alignToBaseIndex.test.ts +103 -0
  461. package/src/components/mtfOverlay/__tests__/controller.test.ts +172 -0
  462. package/src/components/mtfOverlay/__tests__/resampleBars.test.ts +106 -0
  463. package/src/components/mtfOverlay/alignToBaseIndex.ts +108 -0
  464. package/src/components/mtfOverlay/createMtfController.ts +180 -0
  465. package/src/components/mtfOverlay/index.ts +26 -0
  466. package/src/components/mtfOverlay/resampleBars.ts +134 -0
  467. package/src/components/mtfOverlay/types.ts +148 -0
  468. package/src/components/orderBookHeatmap/__tests__/controller.test.ts +237 -0
  469. package/src/components/orderBookHeatmap/__tests__/deltaArchive.test.ts +88 -0
  470. package/src/components/orderBookHeatmap/__tests__/logColorScale.test.ts +69 -0
  471. package/src/components/orderBookHeatmap/__tests__/orderBookState.test.ts +113 -0
  472. package/src/components/orderBookHeatmap/__tests__/snapshotRing.test.ts +53 -0
  473. package/src/components/orderBookHeatmap/computeShader.wgsl.md +130 -0
  474. package/src/components/orderBookHeatmap/createHeatmapController.ts +273 -0
  475. package/src/components/orderBookHeatmap/createOrderBookState.ts +116 -0
  476. package/src/components/orderBookHeatmap/deltaArchive.ts +113 -0
  477. package/src/components/orderBookHeatmap/index.ts +25 -0
  478. package/src/components/orderBookHeatmap/logColorScale.ts +77 -0
  479. package/src/components/orderBookHeatmap/snapshotRing.ts +65 -0
  480. package/src/components/orderBookHeatmap/types.ts +168 -0
  481. package/src/components/volumeProfile/__tests__/binning.test.ts +133 -0
  482. package/src/components/volumeProfile/__tests__/poc.test.ts +44 -0
  483. package/src/components/volumeProfile/__tests__/valueArea.test.ts +177 -0
  484. package/src/components/volumeProfile/binning.ts +133 -0
  485. package/src/components/volumeProfile/createVolumeProfileController.ts +213 -0
  486. package/src/components/volumeProfile/index.ts +12 -0
  487. package/src/components/volumeProfile/poc.ts +53 -0
  488. package/src/components/volumeProfile/types.ts +148 -0
  489. package/src/components/volumeProfile/valueArea.ts +187 -0
  490. package/src/controllers/createChartController.ts +23 -10
  491. package/src/controllers/types.ts +5 -1
  492. package/src/data-fetchers/baostock.ts +2 -1
  493. package/src/data-fetchers/dataBuffer.effects.ts +3 -1
  494. package/src/data-fetchers/fetcherDefinitionRegistry.ts +2 -1
  495. package/src/data-fetchers/gotdx.ts +4 -3
  496. package/src/data-fetchers/router.ts +6 -3
  497. package/src/data-fetchers/tradingview.ts +3 -2
  498. package/src/engine/chart.ts +126 -3
  499. package/src/engine/data/chartDataManager.ts +26 -4
  500. package/src/engine/drawing/toolConfig.ts +2 -1
  501. package/src/engine/indicators/chartIndicatorManager.ts +2 -1
  502. package/src/engine/indicators/indicatorDefinitionRegistry.ts +2 -1
  503. package/src/engine/indicators/indicatorMetadata.ts +2 -1
  504. package/src/engine/indicators/indicatorRegistry.ts +6 -5
  505. package/src/engine/indicators/registerBuiltins.ts +2 -1
  506. package/src/engine/indicators/scheduler.ts +15 -0
  507. package/src/engine/indicators/soa.ts +2 -1
  508. package/src/engine/indicators/stateComposer.ts +2 -1
  509. package/src/engine/subPaneManager.ts +2 -1
  510. package/src/engine/utils/chartZoomController.ts +7 -1
  511. package/src/errors-help.ts +218 -0
  512. package/src/errors.ts +128 -0
  513. package/src/index.ts +37 -0
  514. package/src/indicators/__tests__/maFamily.test.ts +159 -0
  515. package/src/indicators/__tests__/oscillators.test.ts +150 -0
  516. package/src/indicators/alma.ts +61 -0
  517. package/src/indicators/awesomeOscillator.ts +54 -0
  518. package/src/indicators/dpo.ts +37 -0
  519. package/src/indicators/fisherTransform.ts +63 -0
  520. package/src/indicators/frama.ts +87 -0
  521. package/src/indicators/index.ts +39 -0
  522. package/src/indicators/lsma.ts +58 -0
  523. package/src/indicators/schaffTrendCycle.ts +92 -0
  524. package/src/indicators/stochRSI.ts +108 -0
  525. package/src/indicators/t3.ts +96 -0
  526. package/src/indicators/ultimateOscillator.ts +83 -0
  527. package/src/indicators/vidya.ts +80 -0
  528. package/src/indicators/zlema.ts +41 -0
  529. package/src/input/__tests__/gesture.test.ts +271 -0
  530. package/src/input/__tests__/keyboard.test.ts +317 -0
  531. package/src/input/gesture.ts +357 -0
  532. package/src/input/index.ts +26 -0
  533. package/src/input/keyboard.ts +373 -0
  534. package/src/mcp/chartBridge.ts +98 -72
  535. package/src/plugin/PluginHost.ts +4 -3
  536. package/src/plugin/PluginRegistry.ts +2 -1
  537. package/src/render/Renderer.ts +127 -0
  538. package/src/render/SurfaceBackend.ts +94 -0
  539. package/src/render/__tests__/contract.test.ts +176 -0
  540. package/src/render/index.ts +27 -0
  541. package/src/renderer-tier/__tests__/detectRendererTier.test.ts +180 -0
  542. package/src/renderer-tier/__tests__/selectBackend.test.ts +253 -0
  543. package/src/renderer-tier/detectRendererTier.ts +168 -0
  544. package/src/renderer-tier/index.ts +30 -0
  545. package/src/renderer-tier/selectBackend.ts +201 -0
  546. package/src/renderer-tier/types.ts +59 -0
  547. package/src/replay/__tests__/controller.test.ts +309 -0
  548. package/src/replay/__tests__/timeline.test.ts +99 -0
  549. package/src/replay/createReplayController.ts +302 -0
  550. package/src/replay/index.ts +15 -0
  551. package/src/replay/timeline.ts +106 -0
  552. package/src/replay/types.ts +107 -0
  553. package/src/scale/__tests__/anchoredZoom.test.ts +125 -0
  554. package/src/scale/__tests__/originShift.test.ts +97 -0
  555. package/src/scale/__tests__/priceScale.test.ts +219 -0
  556. package/src/scale/__tests__/timeScale.test.ts +119 -0
  557. package/src/scale/anchoredZoom.ts +104 -0
  558. package/src/scale/createPriceScale.ts +226 -0
  559. package/src/scale/createTimeScale.ts +150 -0
  560. package/src/scale/index.ts +9 -0
  561. package/src/scale/originShift.ts +111 -0
  562. package/src/scale/types.ts +100 -0
  563. package/src/scene/__tests__/layerRegistry.test.ts +207 -0
  564. package/src/scene/__tests__/scene.test.ts +411 -0
  565. package/src/scene/createScene.ts +117 -0
  566. package/src/scene/index.ts +29 -0
  567. package/src/scene/layerRegistry.ts +117 -0
  568. package/src/scene/types.ts +143 -0
  569. package/src/scheduler/__tests__/createFrameBudget.test.ts +315 -0
  570. package/src/scheduler/createFrameBudget.ts +316 -0
  571. package/src/scheduler/index.ts +7 -0
  572. package/src/tokens/themeToCssVars.ts +3 -1
  573. package/src/version.ts +1 -1
  574. package/dist/data-fetchers/gotdx/gotdx.d.ts +0 -7
  575. package/dist/data-fetchers/gotdx/gotdx.d.ts.map +0 -1
  576. package/dist/data-fetchers/gotdx/gotdx.js +0 -7
  577. package/dist/data-fetchers/gotdx/gotdx.js.map +0 -1
  578. package/src/data-fetchers/gotdx/gotdx.ts +0 -6
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Anchored VWAP controller — framework-agnostic, signal-based, multi-anchor.
3
+ *
4
+ * Mirrors the dispose-guard pattern from
5
+ * `createIndicatorSelectorController` and `createVolumeProfileController` so
6
+ * React/Vue/Angular adapters bridge identically. The controller is pure
7
+ * data — no DOM, no rendering, no canvas.
8
+ *
9
+ * Why multi-anchor with per-anchor running sums:
10
+ * TradingView's lower tiers cap the number of simultaneous anchors at
11
+ * 3 because each AVWAP is recomputed from scratch on every new bar. By
12
+ * keeping per-anchor `sumVwp` / `sumVol` / `sumSqDev` totals we drop
13
+ * `appendBar` from O(bars-since-anchor) to O(1) per anchor — anchors
14
+ * become cheap enough to keep many open at once.
15
+ *
16
+ * Equivalence guarantee:
17
+ * The point produced by `appendBar` is bit-for-bit identical (to
18
+ * floating-point precision) to the point that `computeAnchoredVwap`
19
+ * would produce on the same bar at the same anchor — same operands
20
+ * added in the same order. The controller test
21
+ * `appendBar incrementally matches full recompute` pins this.
22
+ */
23
+ import { createSignal } from '../../reactivity';
24
+ import { computeAnchoredVwap } from './computeAnchoredVwap';
25
+ export function createAnchoredVwapController(opts) {
26
+ // -------------------------------------------------------------------
27
+ // Internal mutable state — never exposed directly.
28
+ // -------------------------------------------------------------------
29
+ // Defensive copy: the caller may reuse the array they pass us. We
30
+ // capture a snapshot so `appendBar` can extend it without surprising
31
+ // the caller.
32
+ let bars = opts?.initialBars
33
+ ? opts.initialBars.slice()
34
+ : [];
35
+ const anchorStates = new Map();
36
+ // -------------------------------------------------------------------
37
+ // Public signal — re-emitted on every structural change.
38
+ // -------------------------------------------------------------------
39
+ const anchors = createSignal([]);
40
+ /**
41
+ * Rebuild the public signal value from the current `anchorStates`. We
42
+ * pass a fresh array reference each time so `Object.is` in
43
+ * `signal.set` triggers a notify.
44
+ */
45
+ function publish() {
46
+ const next = [];
47
+ for (const a of anchorStates.values()) {
48
+ next.push({
49
+ definition: a.definition,
50
+ // Snapshot the series so consumers see an immutable
51
+ // view; future `appendBar` mutations on `a.series` will
52
+ // only be observed by the next `publish`.
53
+ series: a.series.slice(),
54
+ });
55
+ }
56
+ anchors.set(next);
57
+ }
58
+ // -------------------------------------------------------------------
59
+ // Math helpers — share one definition of the per-bar arithmetic so
60
+ // `appendBar` and `recomputeAnchor` cannot drift.
61
+ // -------------------------------------------------------------------
62
+ /**
63
+ * Recompute an anchor's series from scratch by walking the bars from
64
+ * `definition.barIndex`. Also resets the running sums so subsequent
65
+ * `appendBar` calls extend the same totals.
66
+ *
67
+ * `null` is a sentinel meaning "anchor is out of range for the
68
+ * current bars" — the caller drops a point-free entry.
69
+ */
70
+ function recomputeAnchor(state) {
71
+ const def = state.definition;
72
+ // Out-of-range anchor: leave the running sums at zero and emit an
73
+ // empty series. We deliberately do NOT throw — callers might be
74
+ // mid-stream and an out-of-range anchor is a valid transient
75
+ // state (e.g. user dragged the anchor past the loaded window).
76
+ if (bars.length === 0 ||
77
+ def.barIndex < 0 ||
78
+ def.barIndex >= bars.length) {
79
+ state.sumVwp = 0;
80
+ state.sumVol = 0;
81
+ state.sumSqDev = 0;
82
+ state.series = [];
83
+ return;
84
+ }
85
+ // Use the shared pure function so behaviour stays identical.
86
+ const series = computeAnchoredVwap(bars, def.barIndex, def.includeBands);
87
+ // Reconstruct the running sums by replaying the same arithmetic
88
+ // — we need them for the next `appendBar`. This is the only
89
+ // place where the controller duplicates the math; the cost is
90
+ // unavoidable because `computeAnchoredVwap` does not expose its
91
+ // internal sums.
92
+ let sumVwp = 0;
93
+ let sumVol = 0;
94
+ let sumSqDev = 0;
95
+ for (let i = def.barIndex; i < bars.length; i++) {
96
+ const bar = bars[i];
97
+ if (bar === undefined)
98
+ continue;
99
+ const v = bar.volume;
100
+ if (v > 0) {
101
+ const tp = (bar.high + bar.low + bar.close) / 3;
102
+ sumVwp += tp * v;
103
+ sumVol += v;
104
+ // Prevailing AVWAP at this bar — same operands as the
105
+ // pure function, same addition order.
106
+ if (def.includeBands && sumVol > 0) {
107
+ const vwap = sumVwp / sumVol;
108
+ const diff = tp - vwap;
109
+ sumSqDev += diff * diff * v;
110
+ }
111
+ }
112
+ }
113
+ state.sumVwp = sumVwp;
114
+ state.sumVol = sumVol;
115
+ state.sumSqDev = sumSqDev;
116
+ state.series = series.slice();
117
+ }
118
+ /**
119
+ * Extend an anchor's series by one bar incrementally — O(1) per call.
120
+ * The new bar's absolute index in `bars` is the caller's
121
+ * responsibility to compute; we take it as a parameter so
122
+ * `appendBar` can be straight-line.
123
+ */
124
+ function extendAnchorByOne(state, bar, absIndex) {
125
+ const def = state.definition;
126
+ // Skip anchors that haven't started yet (anchor is in the future
127
+ // relative to this new bar).
128
+ if (absIndex < def.barIndex)
129
+ return;
130
+ // Skip anchors with no anchor inside the loaded window.
131
+ if (def.barIndex < 0)
132
+ return;
133
+ const v = bar.volume;
134
+ const tp = (bar.high + bar.low + bar.close) / 3;
135
+ if (v > 0) {
136
+ state.sumVwp += tp * v;
137
+ state.sumVol += v;
138
+ }
139
+ let vwap = Number.NaN;
140
+ if (state.sumVol > 0) {
141
+ vwap = state.sumVwp / state.sumVol;
142
+ }
143
+ // Bands: prevailing AVWAP at this bar — same arithmetic as
144
+ // `recomputeAnchor` and `computeAnchoredVwap`.
145
+ if (def.includeBands &&
146
+ v > 0 &&
147
+ state.sumVol > 0 &&
148
+ Number.isFinite(vwap)) {
149
+ const diff = tp - vwap;
150
+ state.sumSqDev += diff * diff * v;
151
+ }
152
+ let upper1 = vwap;
153
+ let lower1 = vwap;
154
+ let upper2 = vwap;
155
+ let lower2 = vwap;
156
+ if (def.includeBands &&
157
+ state.sumVol > 0 &&
158
+ Number.isFinite(vwap)) {
159
+ const variance = state.sumSqDev / state.sumVol;
160
+ const stdDev = Math.sqrt(variance > 0 ? variance : 0);
161
+ upper1 = vwap + stdDev;
162
+ lower1 = vwap - stdDev;
163
+ upper2 = vwap + 2 * stdDev;
164
+ lower2 = vwap - 2 * stdDev;
165
+ }
166
+ state.series.push({
167
+ barIndex: absIndex,
168
+ vwap,
169
+ upper1,
170
+ lower1,
171
+ upper2,
172
+ lower2,
173
+ cumulativeVolume: state.sumVol,
174
+ });
175
+ }
176
+ // -------------------------------------------------------------------
177
+ // Lifecycle — kick off any initial anchors (none today, but reserved).
178
+ // -------------------------------------------------------------------
179
+ if (bars.length > 0) {
180
+ // No anchors yet — publish empty so subscribers see a defined
181
+ // starting value.
182
+ publish();
183
+ }
184
+ // -------------------------------------------------------------------
185
+ // Public mutators
186
+ // -------------------------------------------------------------------
187
+ function setBars(nextBars) {
188
+ bars = nextBars.slice();
189
+ for (const state of anchorStates.values()) {
190
+ recomputeAnchor(state);
191
+ }
192
+ publish();
193
+ }
194
+ function addAnchor(def) {
195
+ // Replace-in-place on id collision. The brief allows either
196
+ // semantics; we choose replace because UIs that drag an anchor
197
+ // onto an existing one expect the existing one to update, not
198
+ // to throw.
199
+ const state = {
200
+ definition: { ...def },
201
+ sumVwp: 0,
202
+ sumVol: 0,
203
+ sumSqDev: 0,
204
+ series: [],
205
+ };
206
+ recomputeAnchor(state);
207
+ anchorStates.set(def.id, state);
208
+ publish();
209
+ return def.id;
210
+ }
211
+ function removeAnchor(id) {
212
+ const existed = anchorStates.delete(id);
213
+ if (existed)
214
+ publish();
215
+ return existed;
216
+ }
217
+ function updateAnchor(id, patch) {
218
+ const state = anchorStates.get(id);
219
+ if (state === undefined)
220
+ return false;
221
+ const prev = state.definition;
222
+ // Merge into a fresh definition object — never mutate the
223
+ // existing one (immutability convention).
224
+ const nextDef = {
225
+ ...prev,
226
+ ...patch,
227
+ id: prev.id,
228
+ };
229
+ state.definition = nextDef;
230
+ // Recompute only when the math-affecting fields change.
231
+ const mathDirty = (patch.barIndex !== undefined &&
232
+ patch.barIndex !== prev.barIndex) ||
233
+ (patch.includeBands !== undefined &&
234
+ patch.includeBands !== prev.includeBands);
235
+ if (mathDirty) {
236
+ recomputeAnchor(state);
237
+ }
238
+ publish();
239
+ return true;
240
+ }
241
+ function appendBar(bar) {
242
+ const absIndex = bars.length;
243
+ bars.push(bar);
244
+ for (const state of anchorStates.values()) {
245
+ extendAnchorByOne(state, bar, absIndex);
246
+ }
247
+ publish();
248
+ }
249
+ // -------------------------------------------------------------------
250
+ // Dispose — silence mutators (same pattern as the rest of the codebase)
251
+ // -------------------------------------------------------------------
252
+ let disposed = false;
253
+ function dispose() {
254
+ if (disposed)
255
+ return;
256
+ disposed = true;
257
+ }
258
+ function guard(fn, fallback) {
259
+ return ((...args) => {
260
+ if (disposed)
261
+ return fallback;
262
+ return fn(...args);
263
+ });
264
+ }
265
+ const guardedSetBars = guard(setBars, undefined);
266
+ const guardedAppendBar = guard(appendBar, undefined);
267
+ return {
268
+ anchors,
269
+ // Canonical verbs (API audit BLOCKER-001 harmonisation): `setData`
270
+ // for full replacement + `append` for single-item extension. Old
271
+ // names preserved as aliases for the deprecation window.
272
+ setData: guardedSetBars,
273
+ append: guardedAppendBar,
274
+ setBars: guardedSetBars,
275
+ addAnchor: guard(addAnchor, null),
276
+ removeAnchor: guard(removeAnchor, false),
277
+ updateAnchor: guard(updateAnchor, false),
278
+ appendBar: guardedAppendBar,
279
+ dispose,
280
+ };
281
+ }
282
+ //# sourceMappingURL=createAnchoredVwapController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnchoredVwapController.js","sourceRoot":"","sources":["../../../src/components/anchoredVwap/createAnchoredVwapController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Public surface of the Anchored VWAP module.
3
+ *
4
+ * Consumers should import from this barrel. The barrel is re-exported from
5
+ * `packages/core/src/index.ts` so the public package surface stays a single
6
+ * import line.
7
+ */
8
+ export { computeAnchoredVwap } from './computeAnchoredVwap';
9
+ export { createAnchoredVwapController } from './createAnchoredVwapController';
10
+ export type { ActiveAnchor, AnchorDefinition, AnchoredVwapController, AVWAPBar, AVWAPPoint, } from './types';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/anchoredVwap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,YAAY,EACR,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,QAAQ,EACR,UAAU,GACb,MAAM,SAAS,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Public surface of the Anchored VWAP module.
3
+ *
4
+ * Consumers should import from this barrel. The barrel is re-exported from
5
+ * `packages/core/src/index.ts` so the public package surface stays a single
6
+ * import line.
7
+ */
8
+ export { computeAnchoredVwap } from './computeAnchoredVwap';
9
+ export { createAnchoredVwapController } from './createAnchoredVwapController';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/anchoredVwap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Anchored VWAP — public type contract.
3
+ *
4
+ * Anchored VWAP (AVWAP) is a volume-weighted average price calculation that
5
+ * starts from a specific, user-chosen anchor bar rather than rolling over a
6
+ * fixed window. Institutional traders anchor to earnings prints, swing
7
+ * highs/lows, session opens, or macro events and read the resulting line as
8
+ * a "fair price" reference from that moment forward. The ±1σ / ±2σ bands
9
+ * around the AVWAP form a volume-weighted standard-deviation envelope that
10
+ * is widely used for mean-reversion entries and exits.
11
+ *
12
+ * TradingView restricts the **number** of simultaneous AVWAP anchors on
13
+ * lower tiers; this controller is multi-anchor by design — every anchor
14
+ * tracks its own cumulative sums so incremental `appendBar` is O(1) per
15
+ * anchor per bar.
16
+ *
17
+ * This module owns the **data model + math only**. Rendering belongs to the
18
+ * `@klinechart-quant/core` Renderer/Scene layer (or a Vue/React adapter).
19
+ *
20
+ * See `docs/ROADMAP.md` §3 for the broader controller layering this fits
21
+ * into. The dispose-guard pattern follows
22
+ * `createIndicatorSelectorController.ts`.
23
+ */
24
+ import type { Signal } from '../../reactivity';
25
+ /**
26
+ * Minimum bar shape consumed by `computeAnchoredVwap`. Matches the
27
+ * cross-renderer KLineData subset used elsewhere in core. We intentionally
28
+ * do NOT require `open` or `timestamp` so callers can stream from any
29
+ * source.
30
+ */
31
+ export interface AVWAPBar {
32
+ high: number;
33
+ low: number;
34
+ close: number;
35
+ volume: number;
36
+ }
37
+ /**
38
+ * A single point of an Anchored VWAP series — one entry per bar from the
39
+ * anchor index (inclusive) through the end of the input.
40
+ *
41
+ * `barIndex` is the absolute bar index in the original input array (NOT a
42
+ * series-relative offset). Renderers map it directly onto their X-axis.
43
+ *
44
+ * When bands are disabled (`includeBands: false`) the four band fields are
45
+ * set equal to `vwap` so consumers do not need a `null` check.
46
+ *
47
+ * When a bar contributes no volume and there is no prior AVWAP (i.e. the
48
+ * anchor bar itself has `volume === 0`), every numeric field of the
49
+ * resulting point is `NaN`. See `computeAnchoredVwap.ts` for the
50
+ * carry-forward rules.
51
+ */
52
+ export interface AVWAPPoint {
53
+ /** Absolute bar index in the input series. */
54
+ barIndex: number;
55
+ /** Volume-weighted average price from anchor up to this bar. */
56
+ vwap: number;
57
+ /** vwap + 1σ. Equals vwap when bands are disabled. */
58
+ upper1: number;
59
+ /** vwap − 1σ. Equals vwap when bands are disabled. */
60
+ lower1: number;
61
+ /** vwap + 2σ. Equals vwap when bands are disabled. */
62
+ upper2: number;
63
+ /** vwap − 2σ. Equals vwap when bands are disabled. */
64
+ lower2: number;
65
+ /** Running sum of volume from the anchor to this bar. Useful for
66
+ * diagnostics, exhaustion checks, and adapter overlays. */
67
+ cumulativeVolume: number;
68
+ }
69
+ /**
70
+ * Definition of an anchor instance. Multiple anchors can be active at the
71
+ * same time (e.g. one per session, one per earnings, one per swing low).
72
+ *
73
+ * `id` must be unique within the controller; the controller treats a
74
+ * collision on `addAnchor` as a replace-in-place to keep the API
75
+ * idempotent.
76
+ */
77
+ export interface AnchorDefinition {
78
+ /** Stable id. Caller-supplied; treat as opaque. */
79
+ id: string;
80
+ /** Human-readable label (e.g. "Earnings Beat 2024-Q1"). */
81
+ label: string;
82
+ /** Anchor position as an index into the controller's bar series. */
83
+ barIndex: number;
84
+ /** Optional colour hint for the adapter — not used by the math. */
85
+ color?: string;
86
+ /** Whether to compute the ±1σ / ±2σ bands for this anchor. */
87
+ includeBands: boolean;
88
+ }
89
+ /**
90
+ * An anchor together with its computed AVWAP series. The series is a
91
+ * snapshot — calling `setBars`, `appendBar`, or `updateAnchor` produces a
92
+ * fresh array (immutability convention).
93
+ */
94
+ export interface ActiveAnchor {
95
+ definition: AnchorDefinition;
96
+ series: ReadonlyArray<AVWAPPoint>;
97
+ }
98
+ /**
99
+ * Framework-agnostic controller — mirrors the shape of
100
+ * `VolumeProfileController` and `IndicatorSelectorController` (signals for
101
+ * state, plain functions for mutations, idempotent `dispose`).
102
+ *
103
+ * Why this design:
104
+ * - Multi-anchor: every anchor tracks its own running sums so
105
+ * `appendBar` is O(anchors) per tick, not O(anchors × bars).
106
+ * - Signal-based: any adapter (React `useSyncExternalStore`, Vue effect,
107
+ * Angular `toSignal`) can bridge without coupling to a framework.
108
+ * - Dispose-guard: mutators become silent no-ops after `dispose`, so a
109
+ * component that unmounts mid-stream cannot leak updates into a stale
110
+ * listener.
111
+ */
112
+ export interface AnchoredVwapController {
113
+ /** All currently active anchors with their up-to-date series. */
114
+ readonly anchors: Signal<ReadonlyArray<ActiveAnchor>>;
115
+ /**
116
+ * Replace the underlying bar series and recompute every active anchor
117
+ * from scratch — canonical method, aligned with the cross-controller
118
+ * `setData()` convention (MtfController). Closes API audit BLOCKER-001
119
+ * (5-verb intake proliferation).
120
+ */
121
+ setData(bars: ReadonlyArray<AVWAPBar>): void;
122
+ /**
123
+ * @deprecated since 0.1.0-alpha.1 — use {@link AnchoredVwapController.setData}.
124
+ * Preserved as a non-removing alias for at least 6 months.
125
+ */
126
+ setBars(bars: ReadonlyArray<AVWAPBar>): void;
127
+ /**
128
+ * Add an anchor and compute its series immediately. Returns the
129
+ * anchor's id (the same one passed in `def.id`). If an anchor with the
130
+ * same id already exists it is **replaced** — that keeps the API
131
+ * idempotent and matches what UIs expect when the user drags an anchor
132
+ * onto an existing one.
133
+ *
134
+ * Returns `null` after dispose.
135
+ */
136
+ addAnchor(def: AnchorDefinition): string | null;
137
+ /**
138
+ * Remove an anchor by id. Returns `true` when an anchor was actually
139
+ * removed, `false` when the id was unknown (or after dispose).
140
+ */
141
+ removeAnchor(id: string): boolean;
142
+ /**
143
+ * Patch an anchor in place. Any of `label`, `barIndex`, `color`, and
144
+ * `includeBands` may change; the series is recomputed whenever
145
+ * `barIndex` or `includeBands` changes (a pure label change is a
146
+ * lightweight metadata swap).
147
+ *
148
+ * Returns `false` when the id is unknown (or after dispose).
149
+ */
150
+ updateAnchor(id: string, patch: Partial<Omit<AnchorDefinition, 'id'>>): boolean;
151
+ /**
152
+ * Append a single new bar — canonical method, aligned with the
153
+ * cross-controller `append()` convention (MtfController). Each anchor's
154
+ * series is extended **incrementally** by one point — the running
155
+ * cumulative sums make this O(1) per anchor per call. A full
156
+ * `computeAnchoredVwap` after N appends produces the same result; see
157
+ * the controller test that pins this equivalence.
158
+ */
159
+ append(bar: AVWAPBar): void;
160
+ /**
161
+ * @deprecated since 0.1.0-alpha.1 — use {@link AnchoredVwapController.append}.
162
+ * Preserved as a non-removing alias for at least 6 months.
163
+ */
164
+ appendBar(bar: AVWAPBar): void;
165
+ /**
166
+ * Stop emitting. Subsequent mutator calls are silent no-ops; previously
167
+ * attached subscribers receive no further notifications. Idempotent.
168
+ */
169
+ dispose(): void;
170
+ }
171
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/anchoredVwap/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,UAAU;IACvB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;IACd;gEAC4D;IAC5D,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAA;IACV,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACpC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAAsB;IACnC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;IAErD;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IAE5C;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IAE5C;;;;;;;;OAQG;IACH,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAA;IAE/C;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;IAEjC;;;;;;;OAOG;IACH,YAAY,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,GAC7C,OAAO,CAAA;IAEV;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;IAE3B;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;IAE9B;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAA;CAClB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Anchored VWAP — public type contract.
3
+ *
4
+ * Anchored VWAP (AVWAP) is a volume-weighted average price calculation that
5
+ * starts from a specific, user-chosen anchor bar rather than rolling over a
6
+ * fixed window. Institutional traders anchor to earnings prints, swing
7
+ * highs/lows, session opens, or macro events and read the resulting line as
8
+ * a "fair price" reference from that moment forward. The ±1σ / ±2σ bands
9
+ * around the AVWAP form a volume-weighted standard-deviation envelope that
10
+ * is widely used for mean-reversion entries and exits.
11
+ *
12
+ * TradingView restricts the **number** of simultaneous AVWAP anchors on
13
+ * lower tiers; this controller is multi-anchor by design — every anchor
14
+ * tracks its own cumulative sums so incremental `appendBar` is O(1) per
15
+ * anchor per bar.
16
+ *
17
+ * This module owns the **data model + math only**. Rendering belongs to the
18
+ * `@klinechart-quant/core` Renderer/Scene layer (or a Vue/React adapter).
19
+ *
20
+ * See `docs/ROADMAP.md` §3 for the broader controller layering this fits
21
+ * into. The dispose-guard pattern follows
22
+ * `createIndicatorSelectorController.ts`.
23
+ */
24
+ export {};
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/anchoredVwap/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Crosshair sync — broadcasts crosshair position across multiple
3
+ * chart panes so a hover in one pane lights up the same time index
4
+ * in every other pane.
5
+ *
6
+ * Why this is the controller, not just a callback:
7
+ *
8
+ * - Multi-pane layouts (price + volume + 1+ indicator panes) are
9
+ * standard for finance charts. TradingView's multi-pane crosshair
10
+ * is one of its iconic UX features.
11
+ * - Each pane has its own scale/transform. The universal coordinate
12
+ * they share is the **time index** — the integer-valued position
13
+ * within the bar array. Sync on index, not pixel; the rendering
14
+ * pane converts back to its own x coordinate.
15
+ * - Loop prevention: a pane that consumed a sync event must not
16
+ * re-emit it. We track the source identifier so the pane that
17
+ * drove the update doesn't recurse.
18
+ *
19
+ * Pure data, signal-based, framework-agnostic — same shape as the
20
+ * rest of `@klinechart-quant/core`.
21
+ *
22
+ * const sync = createCrosshairSync()
23
+ * sync.register('price')
24
+ * sync.register('volume')
25
+ * sync.register('rsi')
26
+ *
27
+ * priceContainer.addEventListener('pointermove', e => {
28
+ * const idx = timeScale.xToBarIndex(e.offsetX)
29
+ * sync.move('price', idx)
30
+ * })
31
+ *
32
+ * sync.position.subscribe(() => {
33
+ * const p = sync.position.peek()
34
+ * if (p === null) hideCrosshair()
35
+ * else if (p.source !== 'volume') drawCrosshairInVolume(p.index)
36
+ * })
37
+ */
38
+ import { type Signal } from '../../reactivity';
39
+ /**
40
+ * Current crosshair position broadcast across registered panes.
41
+ * `null` means no pane has the crosshair active (host left every chart
42
+ * or `clear()` was called).
43
+ */
44
+ export interface CrosshairPosition {
45
+ /** Integer index into the canonical bar array. */
46
+ readonly index: number;
47
+ /**
48
+ * Pane id of the pane that produced this update. Consumers MUST
49
+ * compare to skip handling their own emissions (loop prevention).
50
+ */
51
+ readonly source: string;
52
+ }
53
+ export interface CrosshairSync {
54
+ /**
55
+ * Current position. `null` when no crosshair is active.
56
+ *
57
+ * NOTE: this is a `Signal<...>` — reading `position()` inside an
58
+ * `effect` tracks the subscription; reading `position.peek()` does
59
+ * not. Manual `subscribe` returns an unsubscribe function.
60
+ */
61
+ readonly position: Signal<CrosshairPosition | null>;
62
+ /**
63
+ * Number of currently registered panes. Helpful for the
64
+ * "single-pane no-op" branch in adapters.
65
+ */
66
+ readonly paneCount: Signal<number>;
67
+ /**
68
+ * Register a pane that participates in the sync. Idempotent —
69
+ * re-registering the same id is a no-op.
70
+ */
71
+ register(paneId: string): void;
72
+ /**
73
+ * Unregister a pane. If the unregistered pane is the source of the
74
+ * current position, the position is cleared (the producer is gone).
75
+ */
76
+ unregister(paneId: string): void;
77
+ /**
78
+ * Producer-side update — pane `paneId` is reporting that its
79
+ * crosshair is on bar `index`. Subscribers receive the new
80
+ * position; `paneId` is recorded as `source` for loop prevention.
81
+ *
82
+ * Calling `move` from a pane that has not been registered throws
83
+ * `KLineChartError('NOT_REGISTERED')` — the wiring contract is
84
+ * easy to mess up and silent ignores would mask bugs.
85
+ */
86
+ move(paneId: string, index: number): void;
87
+ /** Clears the position. All panes see `position = null`. */
88
+ clear(): void;
89
+ /** Reset to empty registry + null position. */
90
+ reset(): void;
91
+ dispose(): void;
92
+ }
93
+ export declare function createCrosshairSync(): CrosshairSync;
94
+ //# sourceMappingURL=createCrosshairSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCrosshairSync.d.ts","sourceRoot":"","sources":["../../../src/components/crosshairSync/createCrosshairSync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAO5D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACnD;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAElC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC;;;;;;;;OAQG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,4DAA4D;IAC5D,KAAK,IAAI,IAAI,CAAA;IACb,+CAA+C;IAC/C,KAAK,IAAI,IAAI,CAAA;IACb,OAAO,IAAI,IAAI,CAAA;CAClB;AAMD,wBAAgB,mBAAmB,IAAI,aAAa,CAgFnD"}