@tradecanvas/core 1.4.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/README.md +107 -107
  2. package/dist/WebGLSeriesRenderer-DQOPCwno.js +1643 -0
  3. package/dist/WebGLSeriesRenderer-DQOPCwno.js.map +1 -0
  4. package/dist/WebGLSeriesRenderer-DspCYR38.cjs +429 -0
  5. package/dist/WebGLSeriesRenderer-DspCYR38.cjs.map +1 -0
  6. package/dist/axis/GridRenderer.d.ts.map +1 -1
  7. package/dist/axis/PriceAxis.d.ts +12 -1
  8. package/dist/axis/PriceAxis.d.ts.map +1 -1
  9. package/dist/axis/TimeAxis.d.ts +7 -4
  10. package/dist/axis/TimeAxis.d.ts.map +1 -1
  11. package/dist/axis/gridLines.d.ts +9 -0
  12. package/dist/axis/gridLines.d.ts.map +1 -0
  13. package/dist/charts/BarRenderer.d.ts.map +1 -1
  14. package/dist/charts/CandlestickRenderer.d.ts.map +1 -1
  15. package/dist/charts/CompareRenderer.d.ts +21 -4
  16. package/dist/charts/CompareRenderer.d.ts.map +1 -1
  17. package/dist/charts/HiLoRenderer.d.ts +14 -0
  18. package/dist/charts/HiLoRenderer.d.ts.map +1 -0
  19. package/dist/charts/HollowCandleRenderer.d.ts.map +1 -1
  20. package/dist/charts/PeriodLevelsRenderer.d.ts.map +1 -1
  21. package/dist/charts/VolumeCandleRenderer.d.ts.map +1 -1
  22. package/dist/charts/VolumeRenderer.d.ts +6 -3
  23. package/dist/charts/VolumeRenderer.d.ts.map +1 -1
  24. package/dist/charts/denseBars.d.ts +28 -0
  25. package/dist/charts/denseBars.d.ts.map +1 -0
  26. package/dist/charts/index.d.ts +3 -0
  27. package/dist/charts/index.d.ts.map +1 -1
  28. package/dist/charts/pixelGrid.d.ts +49 -0
  29. package/dist/charts/pixelGrid.d.ts.map +1 -0
  30. package/dist/charts/transforms/kagi.d.ts +3 -2
  31. package/dist/charts/transforms/kagi.d.ts.map +1 -1
  32. package/dist/charts/transforms/renko.d.ts.map +1 -1
  33. package/dist/drawings/DrawingBase.d.ts +34 -1
  34. package/dist/drawings/DrawingBase.d.ts.map +1 -1
  35. package/dist/drawings/DrawingCreator.d.ts +51 -0
  36. package/dist/drawings/DrawingCreator.d.ts.map +1 -0
  37. package/dist/drawings/DrawingDrag.d.ts +36 -0
  38. package/dist/drawings/DrawingDrag.d.ts.map +1 -0
  39. package/dist/drawings/DrawingManager.d.ts +156 -33
  40. package/dist/drawings/DrawingManager.d.ts.map +1 -1
  41. package/dist/drawings/DrawingRenderer.d.ts +2 -2
  42. package/dist/drawings/DrawingRenderer.d.ts.map +1 -1
  43. package/dist/drawings/DrawingSelection.d.ts +28 -0
  44. package/dist/drawings/DrawingSelection.d.ts.map +1 -0
  45. package/dist/drawings/drawingHistory.d.ts +12 -0
  46. package/dist/drawings/drawingHistory.d.ts.map +1 -0
  47. package/dist/drawings/drawingShortcuts.d.ts +11 -0
  48. package/dist/drawings/drawingShortcuts.d.ts.map +1 -0
  49. package/dist/drawings/drawingState.d.ts +29 -0
  50. package/dist/drawings/drawingState.d.ts.map +1 -0
  51. package/dist/drawings/index.d.ts +2 -1
  52. package/dist/drawings/index.d.ts.map +1 -1
  53. package/dist/drawings/magnetSnap.d.ts +12 -0
  54. package/dist/drawings/magnetSnap.d.ts.map +1 -0
  55. package/dist/drawings/tools/AnchoredVWAP.d.ts.map +1 -1
  56. package/dist/drawings/tools/Circle.d.ts +1 -0
  57. package/dist/drawings/tools/Circle.d.ts.map +1 -1
  58. package/dist/drawings/tools/CrossLine.d.ts.map +1 -1
  59. package/dist/drawings/tools/DateRange.d.ts.map +1 -1
  60. package/dist/drawings/tools/ElliottWave.d.ts +128 -3
  61. package/dist/drawings/tools/ElliottWave.d.ts.map +1 -1
  62. package/dist/drawings/tools/Ellipse.d.ts +1 -0
  63. package/dist/drawings/tools/Ellipse.d.ts.map +1 -1
  64. package/dist/drawings/tools/ExtendedLine.d.ts +1 -0
  65. package/dist/drawings/tools/ExtendedLine.d.ts.map +1 -1
  66. package/dist/drawings/tools/FibChannel.d.ts +7 -0
  67. package/dist/drawings/tools/FibChannel.d.ts.map +1 -1
  68. package/dist/drawings/tools/FibExtension.d.ts +20 -0
  69. package/dist/drawings/tools/FibExtension.d.ts.map +1 -1
  70. package/dist/drawings/tools/FibRetracement.d.ts +28 -0
  71. package/dist/drawings/tools/FibRetracement.d.ts.map +1 -1
  72. package/dist/drawings/tools/FibSpeedResistanceFan.d.ts +9 -1
  73. package/dist/drawings/tools/FibSpeedResistanceFan.d.ts.map +1 -1
  74. package/dist/drawings/tools/FibTimeZones.d.ts +16 -0
  75. package/dist/drawings/tools/FibTimeZones.d.ts.map +1 -1
  76. package/dist/drawings/tools/GannBox.d.ts.map +1 -1
  77. package/dist/drawings/tools/GannFan.d.ts.map +1 -1
  78. package/dist/drawings/tools/HorizontalLine.d.ts +1 -0
  79. package/dist/drawings/tools/HorizontalLine.d.ts.map +1 -1
  80. package/dist/drawings/tools/HorizontalRay.d.ts +1 -0
  81. package/dist/drawings/tools/HorizontalRay.d.ts.map +1 -1
  82. package/dist/drawings/tools/Measure.d.ts.map +1 -1
  83. package/dist/drawings/tools/ParallelChannel.d.ts +12 -0
  84. package/dist/drawings/tools/ParallelChannel.d.ts.map +1 -1
  85. package/dist/drawings/tools/PriceLabel.d.ts +1 -0
  86. package/dist/drawings/tools/PriceLabel.d.ts.map +1 -1
  87. package/dist/drawings/tools/PriceRange.d.ts.map +1 -1
  88. package/dist/drawings/tools/Ray.d.ts +1 -0
  89. package/dist/drawings/tools/Ray.d.ts.map +1 -1
  90. package/dist/drawings/tools/Rectangle.d.ts +1 -0
  91. package/dist/drawings/tools/Rectangle.d.ts.map +1 -1
  92. package/dist/drawings/tools/RegressionChannel.d.ts +1 -0
  93. package/dist/drawings/tools/RegressionChannel.d.ts.map +1 -1
  94. package/dist/drawings/tools/RiskReward.d.ts +59 -6
  95. package/dist/drawings/tools/RiskReward.d.ts.map +1 -1
  96. package/dist/drawings/tools/TextAnnotation.d.ts +1 -0
  97. package/dist/drawings/tools/TextAnnotation.d.ts.map +1 -1
  98. package/dist/drawings/tools/TrendAngle.d.ts.map +1 -1
  99. package/dist/drawings/tools/TrendLine.d.ts +3 -0
  100. package/dist/drawings/tools/TrendLine.d.ts.map +1 -1
  101. package/dist/drawings/tools/Triangle.d.ts +1 -0
  102. package/dist/drawings/tools/Triangle.d.ts.map +1 -1
  103. package/dist/drawings/tools/VerticalLine.d.ts.map +1 -1
  104. package/dist/drawings/tools/VolumeProfileRange.d.ts +1 -0
  105. package/dist/drawings/tools/VolumeProfileRange.d.ts.map +1 -1
  106. package/dist/drawings/tools/annotations.d.ts +113 -0
  107. package/dist/drawings/tools/annotations.d.ts.map +1 -0
  108. package/dist/drawings/tools/cycles.d.ts +37 -0
  109. package/dist/drawings/tools/cycles.d.ts.map +1 -0
  110. package/dist/drawings/tools/fibGeometry.d.ts +202 -0
  111. package/dist/drawings/tools/fibGeometry.d.ts.map +1 -0
  112. package/dist/drawings/tools/forecast.d.ts +85 -0
  113. package/dist/drawings/tools/forecast.d.ts.map +1 -0
  114. package/dist/drawings/tools/freehand.d.ts +81 -0
  115. package/dist/drawings/tools/freehand.d.ts.map +1 -0
  116. package/dist/drawings/tools/index.d.ts +7 -0
  117. package/dist/drawings/tools/index.d.ts.map +1 -1
  118. package/dist/drawings/tools/labels.d.ts +32 -3
  119. package/dist/drawings/tools/labels.d.ts.map +1 -1
  120. package/dist/drawings/tools/options.d.ts +16 -0
  121. package/dist/drawings/tools/options.d.ts.map +1 -0
  122. package/dist/drawings/tools/patterns.d.ts +32 -0
  123. package/dist/drawings/tools/patterns.d.ts.map +1 -1
  124. package/dist/drawings/tools/priceLevels.d.ts +29 -0
  125. package/dist/drawings/tools/priceLevels.d.ts.map +1 -0
  126. package/dist/drawings/tools/textBox.d.ts +39 -0
  127. package/dist/drawings/tools/textBox.d.ts.map +1 -0
  128. package/dist/engine/LayerManager.d.ts +23 -0
  129. package/dist/engine/LayerManager.d.ts.map +1 -1
  130. package/dist/engine/RenderEngine.d.ts +53 -1
  131. package/dist/engine/RenderEngine.d.ts.map +1 -1
  132. package/dist/engine/gpu.d.ts +83 -0
  133. package/dist/engine/gpu.d.ts.map +1 -0
  134. package/dist/engine/index.d.ts +2 -0
  135. package/dist/engine/index.d.ts.map +1 -1
  136. package/dist/engine/loadWebGL.d.ts +9 -0
  137. package/dist/engine/loadWebGL.d.ts.map +1 -0
  138. package/dist/engine/plotSteps.d.ts +39 -0
  139. package/dist/engine/plotSteps.d.ts.map +1 -0
  140. package/dist/events/EventBus.d.ts +2 -0
  141. package/dist/events/EventBus.d.ts.map +1 -1
  142. package/dist/features/AlertManager.d.ts +117 -6
  143. package/dist/features/AlertManager.d.ts.map +1 -1
  144. package/dist/features/ChartState.d.ts +19 -1
  145. package/dist/features/ChartState.d.ts.map +1 -1
  146. package/dist/features/DataExporter.d.ts +7 -2
  147. package/dist/features/DataExporter.d.ts.map +1 -1
  148. package/dist/features/ReplayManager.d.ts +7 -0
  149. package/dist/features/ReplayManager.d.ts.map +1 -1
  150. package/dist/features/SignalMarkerManager.d.ts +8 -0
  151. package/dist/features/SignalMarkerManager.d.ts.map +1 -1
  152. package/dist/features/TradeZoneManager.d.ts.map +1 -1
  153. package/dist/features/UndoRedoManager.d.ts +30 -1
  154. package/dist/features/UndoRedoManager.d.ts.map +1 -1
  155. package/dist/features/index.d.ts +3 -1
  156. package/dist/features/index.d.ts.map +1 -1
  157. package/dist/gridLines-J41F0DQ6.cjs +2 -0
  158. package/dist/gridLines-J41F0DQ6.cjs.map +1 -0
  159. package/dist/gridLines-kFhXyH-u.js +218 -0
  160. package/dist/gridLines-kFhXyH-u.js.map +1 -0
  161. package/dist/index.cjs +11 -9
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.js +10638 -4930
  164. package/dist/index.js.map +1 -1
  165. package/dist/indicators/IndicatorBase.d.ts +5 -1
  166. package/dist/indicators/IndicatorBase.d.ts.map +1 -1
  167. package/dist/indicators/IndicatorEngine.d.ts +123 -11
  168. package/dist/indicators/IndicatorEngine.d.ts.map +1 -1
  169. package/dist/indicators/PointwiseIndicator.d.ts +25 -0
  170. package/dist/indicators/PointwiseIndicator.d.ts.map +1 -0
  171. package/dist/indicators/index.d.ts +32 -0
  172. package/dist/indicators/index.d.ts.map +1 -1
  173. package/dist/indicators/linePen.d.ts +38 -0
  174. package/dist/indicators/linePen.d.ts.map +1 -0
  175. package/dist/indicators/math.d.ts +47 -0
  176. package/dist/indicators/math.d.ts.map +1 -0
  177. package/dist/indicators/overlay/ALMA.d.ts +20 -0
  178. package/dist/indicators/overlay/ALMA.d.ts.map +1 -0
  179. package/dist/indicators/overlay/Alligator.d.ts +2 -14
  180. package/dist/indicators/overlay/Alligator.d.ts.map +1 -1
  181. package/dist/indicators/overlay/AnchoredVWAP.d.ts +2 -9
  182. package/dist/indicators/overlay/AnchoredVWAP.d.ts.map +1 -1
  183. package/dist/indicators/overlay/BollingerBands.d.ts +2 -10
  184. package/dist/indicators/overlay/BollingerBands.d.ts.map +1 -1
  185. package/dist/indicators/overlay/ChandeKrollStop.d.ts +16 -0
  186. package/dist/indicators/overlay/ChandeKrollStop.d.ts.map +1 -0
  187. package/dist/indicators/overlay/ChandelierExit.d.ts +2 -10
  188. package/dist/indicators/overlay/ChandelierExit.d.ts.map +1 -1
  189. package/dist/indicators/overlay/DEMA.d.ts +11 -0
  190. package/dist/indicators/overlay/DEMA.d.ts.map +1 -0
  191. package/dist/indicators/overlay/DonchianChannel.d.ts +2 -9
  192. package/dist/indicators/overlay/DonchianChannel.d.ts.map +1 -1
  193. package/dist/indicators/overlay/EMA.d.ts +2 -9
  194. package/dist/indicators/overlay/EMA.d.ts.map +1 -1
  195. package/dist/indicators/overlay/Envelope.d.ts +2 -10
  196. package/dist/indicators/overlay/Envelope.d.ts.map +1 -1
  197. package/dist/indicators/overlay/GuppyMMA.d.ts +11 -0
  198. package/dist/indicators/overlay/GuppyMMA.d.ts.map +1 -0
  199. package/dist/indicators/overlay/HullMA.d.ts +2 -9
  200. package/dist/indicators/overlay/HullMA.d.ts.map +1 -1
  201. package/dist/indicators/overlay/Ichimoku.d.ts +2 -12
  202. package/dist/indicators/overlay/Ichimoku.d.ts.map +1 -1
  203. package/dist/indicators/overlay/KAMA.d.ts +15 -0
  204. package/dist/indicators/overlay/KAMA.d.ts.map +1 -0
  205. package/dist/indicators/overlay/KeltnerChannel.d.ts +2 -11
  206. package/dist/indicators/overlay/KeltnerChannel.d.ts.map +1 -1
  207. package/dist/indicators/overlay/LSMA.d.ts +19 -0
  208. package/dist/indicators/overlay/LSMA.d.ts.map +1 -0
  209. package/dist/indicators/overlay/LinearRegressionChannel.d.ts +2 -10
  210. package/dist/indicators/overlay/LinearRegressionChannel.d.ts.map +1 -1
  211. package/dist/indicators/overlay/MACross.d.ts +9 -0
  212. package/dist/indicators/overlay/MACross.d.ts.map +1 -0
  213. package/dist/indicators/overlay/MARibbon.d.ts +8 -0
  214. package/dist/indicators/overlay/MARibbon.d.ts.map +1 -0
  215. package/dist/indicators/overlay/MTFMovingAverage.d.ts +2 -10
  216. package/dist/indicators/overlay/MTFMovingAverage.d.ts.map +1 -1
  217. package/dist/indicators/overlay/McGinleyDynamic.d.ts +13 -0
  218. package/dist/indicators/overlay/McGinleyDynamic.d.ts.map +1 -0
  219. package/dist/indicators/overlay/ParabolicSAR.d.ts +2 -10
  220. package/dist/indicators/overlay/ParabolicSAR.d.ts.map +1 -1
  221. package/dist/indicators/overlay/PivotPoints.d.ts +2 -9
  222. package/dist/indicators/overlay/PivotPoints.d.ts.map +1 -1
  223. package/dist/indicators/overlay/SMA.d.ts +2 -9
  224. package/dist/indicators/overlay/SMA.d.ts.map +1 -1
  225. package/dist/indicators/overlay/SMMA.d.ts +13 -0
  226. package/dist/indicators/overlay/SMMA.d.ts.map +1 -0
  227. package/dist/indicators/overlay/SessionVWAP.d.ts +2 -9
  228. package/dist/indicators/overlay/SessionVWAP.d.ts.map +1 -1
  229. package/dist/indicators/overlay/StandardErrorBands.d.ts +12 -0
  230. package/dist/indicators/overlay/StandardErrorBands.d.ts.map +1 -0
  231. package/dist/indicators/overlay/Supertrend.d.ts +2 -10
  232. package/dist/indicators/overlay/Supertrend.d.ts.map +1 -1
  233. package/dist/indicators/overlay/TEMA.d.ts +2 -9
  234. package/dist/indicators/overlay/TEMA.d.ts.map +1 -1
  235. package/dist/indicators/overlay/VWAP.d.ts +2 -7
  236. package/dist/indicators/overlay/VWAP.d.ts.map +1 -1
  237. package/dist/indicators/overlay/VWMA.d.ts +2 -9
  238. package/dist/indicators/overlay/VWMA.d.ts.map +1 -1
  239. package/dist/indicators/overlay/WMA.d.ts +2 -9
  240. package/dist/indicators/overlay/WMA.d.ts.map +1 -1
  241. package/dist/indicators/overlay/WilliamsFractals.d.ts +15 -0
  242. package/dist/indicators/overlay/WilliamsFractals.d.ts.map +1 -0
  243. package/dist/indicators/overlay/ZigZag.d.ts +2 -9
  244. package/dist/indicators/overlay/ZigZag.d.ts.map +1 -1
  245. package/dist/indicators/panel/ADX.d.ts +2 -10
  246. package/dist/indicators/panel/ADX.d.ts.map +1 -1
  247. package/dist/indicators/panel/ATR.d.ts +2 -10
  248. package/dist/indicators/panel/ATR.d.ts.map +1 -1
  249. package/dist/indicators/panel/AcceleratorOscillator.d.ts +5 -10
  250. package/dist/indicators/panel/AcceleratorOscillator.d.ts.map +1 -1
  251. package/dist/indicators/panel/AccumulationDistribution.d.ts +2 -8
  252. package/dist/indicators/panel/AccumulationDistribution.d.ts.map +1 -1
  253. package/dist/indicators/panel/Aroon.d.ts +2 -10
  254. package/dist/indicators/panel/Aroon.d.ts.map +1 -1
  255. package/dist/indicators/panel/AverageDayRange.d.ts +9 -0
  256. package/dist/indicators/panel/AverageDayRange.d.ts.map +1 -0
  257. package/dist/indicators/panel/AwesomeOscillator.d.ts +2 -11
  258. package/dist/indicators/panel/AwesomeOscillator.d.ts.map +1 -1
  259. package/dist/indicators/panel/BalanceOfPower.d.ts +2 -10
  260. package/dist/indicators/panel/BalanceOfPower.d.ts.map +1 -1
  261. package/dist/indicators/panel/BollingerBandWidth.d.ts +18 -0
  262. package/dist/indicators/panel/BollingerBandWidth.d.ts.map +1 -0
  263. package/dist/indicators/panel/BollingerPercentB.d.ts +21 -0
  264. package/dist/indicators/panel/BollingerPercentB.d.ts.map +1 -0
  265. package/dist/indicators/panel/CCI.d.ts +2 -10
  266. package/dist/indicators/panel/CCI.d.ts.map +1 -1
  267. package/dist/indicators/panel/CMF.d.ts +2 -10
  268. package/dist/indicators/panel/CMF.d.ts.map +1 -1
  269. package/dist/indicators/panel/ChaikinOscillator.d.ts +2 -11
  270. package/dist/indicators/panel/ChaikinOscillator.d.ts.map +1 -1
  271. package/dist/indicators/panel/ChaikinVolatility.d.ts +2 -11
  272. package/dist/indicators/panel/ChaikinVolatility.d.ts.map +1 -1
  273. package/dist/indicators/panel/ChandeMomentum.d.ts +2 -10
  274. package/dist/indicators/panel/ChandeMomentum.d.ts.map +1 -1
  275. package/dist/indicators/panel/ChoppinessIndex.d.ts +2 -10
  276. package/dist/indicators/panel/ChoppinessIndex.d.ts.map +1 -1
  277. package/dist/indicators/panel/ConnorsRSI.d.ts +2 -12
  278. package/dist/indicators/panel/ConnorsRSI.d.ts.map +1 -1
  279. package/dist/indicators/panel/Coppock.d.ts +2 -12
  280. package/dist/indicators/panel/Coppock.d.ts.map +1 -1
  281. package/dist/indicators/panel/DetrendedPriceOscillator.d.ts +2 -10
  282. package/dist/indicators/panel/DetrendedPriceOscillator.d.ts.map +1 -1
  283. package/dist/indicators/panel/DisparityIndex.d.ts +2 -10
  284. package/dist/indicators/panel/DisparityIndex.d.ts.map +1 -1
  285. package/dist/indicators/panel/EaseOfMovement.d.ts +2 -12
  286. package/dist/indicators/panel/EaseOfMovement.d.ts.map +1 -1
  287. package/dist/indicators/panel/ElderRay.d.ts +3 -9
  288. package/dist/indicators/panel/ElderRay.d.ts.map +1 -1
  289. package/dist/indicators/panel/FisherTransform.d.ts +2 -10
  290. package/dist/indicators/panel/FisherTransform.d.ts.map +1 -1
  291. package/dist/indicators/panel/ForceIndex.d.ts +2 -10
  292. package/dist/indicators/panel/ForceIndex.d.ts.map +1 -1
  293. package/dist/indicators/panel/HistoricalVolatility.d.ts +22 -0
  294. package/dist/indicators/panel/HistoricalVolatility.d.ts.map +1 -0
  295. package/dist/indicators/panel/KST.d.ts +2 -18
  296. package/dist/indicators/panel/KST.d.ts.map +1 -1
  297. package/dist/indicators/panel/Klinger.d.ts +2 -12
  298. package/dist/indicators/panel/Klinger.d.ts.map +1 -1
  299. package/dist/indicators/panel/LinearRegressionSlope.d.ts +9 -0
  300. package/dist/indicators/panel/LinearRegressionSlope.d.ts.map +1 -0
  301. package/dist/indicators/panel/MACD.d.ts +2 -12
  302. package/dist/indicators/panel/MACD.d.ts.map +1 -1
  303. package/dist/indicators/panel/MFI.d.ts +2 -10
  304. package/dist/indicators/panel/MFI.d.ts.map +1 -1
  305. package/dist/indicators/panel/MassIndex.d.ts +2 -11
  306. package/dist/indicators/panel/MassIndex.d.ts.map +1 -1
  307. package/dist/indicators/panel/Momentum.d.ts +9 -0
  308. package/dist/indicators/panel/Momentum.d.ts.map +1 -0
  309. package/dist/indicators/panel/NetVolume.d.ts +11 -0
  310. package/dist/indicators/panel/NetVolume.d.ts.map +1 -0
  311. package/dist/indicators/panel/OBV.d.ts +2 -8
  312. package/dist/indicators/panel/OBV.d.ts.map +1 -1
  313. package/dist/indicators/panel/PercentagePriceOscillator.d.ts +2 -12
  314. package/dist/indicators/panel/PercentagePriceOscillator.d.ts.map +1 -1
  315. package/dist/indicators/panel/PrettyGoodOscillator.d.ts +2 -10
  316. package/dist/indicators/panel/PrettyGoodOscillator.d.ts.map +1 -1
  317. package/dist/indicators/panel/PriceVolumeTrend.d.ts +2 -8
  318. package/dist/indicators/panel/PriceVolumeTrend.d.ts.map +1 -1
  319. package/dist/indicators/panel/Qstick.d.ts +2 -10
  320. package/dist/indicators/panel/Qstick.d.ts.map +1 -1
  321. package/dist/indicators/panel/ROC.d.ts +2 -10
  322. package/dist/indicators/panel/ROC.d.ts.map +1 -1
  323. package/dist/indicators/panel/RSI.d.ts +2 -10
  324. package/dist/indicators/panel/RSI.d.ts.map +1 -1
  325. package/dist/indicators/panel/RelativeMomentumIndex.d.ts +2 -11
  326. package/dist/indicators/panel/RelativeMomentumIndex.d.ts.map +1 -1
  327. package/dist/indicators/panel/RelativeVigor.d.ts +2 -10
  328. package/dist/indicators/panel/RelativeVigor.d.ts.map +1 -1
  329. package/dist/indicators/panel/RelativeVolatilityIndex.d.ts +12 -0
  330. package/dist/indicators/panel/RelativeVolatilityIndex.d.ts.map +1 -0
  331. package/dist/indicators/panel/SchaffTrendCycle.d.ts +2 -12
  332. package/dist/indicators/panel/SchaffTrendCycle.d.ts.map +1 -1
  333. package/dist/indicators/panel/StandardError.d.ts +9 -0
  334. package/dist/indicators/panel/StandardError.d.ts.map +1 -0
  335. package/dist/indicators/panel/StdDev.d.ts +2 -10
  336. package/dist/indicators/panel/StdDev.d.ts.map +1 -1
  337. package/dist/indicators/panel/Stochastic.d.ts +2 -12
  338. package/dist/indicators/panel/Stochastic.d.ts.map +1 -1
  339. package/dist/indicators/panel/StochasticMomentumIndex.d.ts +12 -0
  340. package/dist/indicators/panel/StochasticMomentumIndex.d.ts.map +1 -0
  341. package/dist/indicators/panel/StochasticRSI.d.ts +2 -13
  342. package/dist/indicators/panel/StochasticRSI.d.ts.map +1 -1
  343. package/dist/indicators/panel/TRIX.d.ts +2 -11
  344. package/dist/indicators/panel/TRIX.d.ts.map +1 -1
  345. package/dist/indicators/panel/TSI.d.ts +2 -12
  346. package/dist/indicators/panel/TSI.d.ts.map +1 -1
  347. package/dist/indicators/panel/TrendStrengthIndex.d.ts +9 -0
  348. package/dist/indicators/panel/TrendStrengthIndex.d.ts.map +1 -0
  349. package/dist/indicators/panel/UlcerIndex.d.ts +15 -0
  350. package/dist/indicators/panel/UlcerIndex.d.ts.map +1 -0
  351. package/dist/indicators/panel/UltimateOscillator.d.ts +2 -12
  352. package/dist/indicators/panel/UltimateOscillator.d.ts.map +1 -1
  353. package/dist/indicators/panel/VROC.d.ts +2 -10
  354. package/dist/indicators/panel/VROC.d.ts.map +1 -1
  355. package/dist/indicators/panel/VolumeDelta.d.ts +2 -10
  356. package/dist/indicators/panel/VolumeDelta.d.ts.map +1 -1
  357. package/dist/indicators/panel/VolumeOscillator.d.ts +11 -0
  358. package/dist/indicators/panel/VolumeOscillator.d.ts.map +1 -0
  359. package/dist/indicators/panel/VolumeProfile.d.ts +2 -9
  360. package/dist/indicators/panel/VolumeProfile.d.ts.map +1 -1
  361. package/dist/indicators/panel/Vortex.d.ts +2 -10
  362. package/dist/indicators/panel/Vortex.d.ts.map +1 -1
  363. package/dist/indicators/panel/WilliamsAD.d.ts +2 -10
  364. package/dist/indicators/panel/WilliamsAD.d.ts.map +1 -1
  365. package/dist/indicators/panel/WilliamsR.d.ts +2 -10
  366. package/dist/indicators/panel/WilliamsR.d.ts.map +1 -1
  367. package/dist/indicators/plots.d.ts +49 -0
  368. package/dist/indicators/plots.d.ts.map +1 -0
  369. package/dist/indicators/registry.d.ts.map +1 -1
  370. package/dist/indicators/sources.d.ts +37 -0
  371. package/dist/indicators/sources.d.ts.map +1 -0
  372. package/dist/indicators/symbols/SymbolSeriesStore.d.ts +21 -0
  373. package/dist/indicators/symbols/SymbolSeriesStore.d.ts.map +1 -0
  374. package/dist/indicators/symbols/symbolIndicators.d.ts +34 -0
  375. package/dist/indicators/symbols/symbolIndicators.d.ts.map +1 -0
  376. package/dist/interaction/CrosshairHandler.d.ts +7 -4
  377. package/dist/interaction/CrosshairHandler.d.ts.map +1 -1
  378. package/dist/interaction/CrosshairTooltip.d.ts +11 -5
  379. package/dist/interaction/CrosshairTooltip.d.ts.map +1 -1
  380. package/dist/interaction/InteractionManager.d.ts +63 -1
  381. package/dist/interaction/InteractionManager.d.ts.map +1 -1
  382. package/dist/interaction/PaneResizeHandler.d.ts.map +1 -1
  383. package/dist/interaction/PinnedTooltip.d.ts +9 -1
  384. package/dist/interaction/PinnedTooltip.d.ts.map +1 -1
  385. package/dist/interaction/PriceAxisAddButton.d.ts +17 -0
  386. package/dist/interaction/PriceAxisAddButton.d.ts.map +1 -0
  387. package/dist/interaction/ZoomHandler.d.ts +8 -0
  388. package/dist/interaction/ZoomHandler.d.ts.map +1 -1
  389. package/dist/interaction/index.d.ts +2 -0
  390. package/dist/interaction/index.d.ts.map +1 -1
  391. package/dist/realtime/CurrentPriceLine.d.ts.map +1 -1
  392. package/dist/realtime/StreamManager.d.ts +5 -0
  393. package/dist/realtime/StreamManager.d.ts.map +1 -1
  394. package/dist/realtime/TickAggregator.d.ts.map +1 -1
  395. package/dist/realtime/TickBars.d.ts +58 -0
  396. package/dist/realtime/TickBars.d.ts.map +1 -0
  397. package/dist/realtime/adapters/BinanceAdapter.d.ts +24 -1
  398. package/dist/realtime/adapters/BinanceAdapter.d.ts.map +1 -1
  399. package/dist/realtime/adapters/BybitAdapter.d.ts +3 -1
  400. package/dist/realtime/adapters/BybitAdapter.d.ts.map +1 -1
  401. package/dist/realtime/adapters/CoinbaseAdapter.d.ts.map +1 -1
  402. package/dist/realtime/adapters/KrakenAdapter.d.ts.map +1 -1
  403. package/dist/realtime/adapters/MockAdapter.d.ts +19 -1
  404. package/dist/realtime/adapters/MockAdapter.d.ts.map +1 -1
  405. package/dist/realtime/adapters/PollingAdapter.d.ts +14 -1
  406. package/dist/realtime/adapters/PollingAdapter.d.ts.map +1 -1
  407. package/dist/realtime/adapters/ResamplingAdapter.d.ts +84 -0
  408. package/dist/realtime/adapters/ResamplingAdapter.d.ts.map +1 -0
  409. package/dist/realtime/adapters/WebSocketAdapter.d.ts +14 -1
  410. package/dist/realtime/adapters/WebSocketAdapter.d.ts.map +1 -1
  411. package/dist/realtime/adapters/binanceTypes.d.ts +10 -1
  412. package/dist/realtime/adapters/binanceTypes.d.ts.map +1 -1
  413. package/dist/realtime/adapters/index.d.ts +1 -0
  414. package/dist/realtime/adapters/index.d.ts.map +1 -1
  415. package/dist/realtime/index.d.ts +1 -0
  416. package/dist/realtime/index.d.ts.map +1 -1
  417. package/dist/trading/BracketTool.d.ts.map +1 -1
  418. package/dist/trading/OrderDraftTool.d.ts.map +1 -1
  419. package/dist/trading/OrderRenderer.d.ts +2 -1
  420. package/dist/trading/OrderRenderer.d.ts.map +1 -1
  421. package/dist/trading/PaperExecutionAdapter.d.ts +17 -3
  422. package/dist/trading/PaperExecutionAdapter.d.ts.map +1 -1
  423. package/dist/trading/PositionRenderer.d.ts +6 -1
  424. package/dist/trading/PositionRenderer.d.ts.map +1 -1
  425. package/dist/trading/TradingContextMenu.d.ts +1 -1
  426. package/dist/trading/TradingContextMenu.d.ts.map +1 -1
  427. package/dist/trading/TradingDragHandler.d.ts.map +1 -1
  428. package/dist/trading/TradingManager.d.ts +26 -2
  429. package/dist/trading/TradingManager.d.ts.map +1 -1
  430. package/dist/trading/TradingRenderer.d.ts +2 -0
  431. package/dist/trading/TradingRenderer.d.ts.map +1 -1
  432. package/dist/trading/fillMarks.d.ts +14 -0
  433. package/dist/trading/fillMarks.d.ts.map +1 -0
  434. package/dist/trading/lineButtons.d.ts +31 -0
  435. package/dist/trading/lineButtons.d.ts.map +1 -0
  436. package/dist/trading/plot.d.ts +4 -0
  437. package/dist/trading/plot.d.ts.map +1 -0
  438. package/dist/trading/positionFormat.d.ts +1 -1
  439. package/dist/trading/positionFormat.d.ts.map +1 -1
  440. package/dist/ui/BarCountdown.d.ts.map +1 -1
  441. package/dist/ui/PriceLines.d.ts +38 -0
  442. package/dist/ui/PriceLines.d.ts.map +1 -0
  443. package/dist/ui/SessionBreaks.d.ts +14 -1
  444. package/dist/ui/SessionBreaks.d.ts.map +1 -1
  445. package/dist/ui/SessionShading.d.ts +5 -0
  446. package/dist/ui/SessionShading.d.ts.map +1 -1
  447. package/dist/ui/Watermark.d.ts +2 -0
  448. package/dist/ui/Watermark.d.ts.map +1 -1
  449. package/dist/ui/axisValueLabels.d.ts +52 -0
  450. package/dist/ui/axisValueLabels.d.ts.map +1 -0
  451. package/dist/ui/index.d.ts +7 -1
  452. package/dist/ui/index.d.ts.map +1 -1
  453. package/dist/ui/sessionHours.d.ts +12 -2
  454. package/dist/ui/sessionHours.d.ts.map +1 -1
  455. package/dist/ui/shapes.d.ts +9 -0
  456. package/dist/ui/shapes.d.ts.map +1 -0
  457. package/dist/viewport/Viewport.d.ts +35 -2
  458. package/dist/viewport/Viewport.d.ts.map +1 -1
  459. package/dist/viewport/index.d.ts +1 -1
  460. package/dist/viewport/index.d.ts.map +1 -1
  461. package/dist/viewport/rangePresets.d.ts +4 -2
  462. package/dist/viewport/rangePresets.d.ts.map +1 -1
  463. package/dist/webgl/WebGLSeriesRenderer.d.ts +70 -0
  464. package/dist/webgl/WebGLSeriesRenderer.d.ts.map +1 -0
  465. package/dist/webgl/commandDrawer.d.ts +31 -0
  466. package/dist/webgl/commandDrawer.d.ts.map +1 -0
  467. package/dist/webgl/glColor.d.ts +13 -0
  468. package/dist/webgl/glColor.d.ts.map +1 -0
  469. package/dist/webgl/glKit.d.ts +26 -0
  470. package/dist/webgl/glKit.d.ts.map +1 -0
  471. package/dist/webgl/index.d.ts +5 -0
  472. package/dist/webgl/index.d.ts.map +1 -0
  473. package/dist/webgl/polygonSpans.d.ts +20 -0
  474. package/dist/webgl/polygonSpans.d.ts.map +1 -0
  475. package/dist/webgl/recordedCommands.d.ts +75 -0
  476. package/dist/webgl/recordedCommands.d.ts.map +1 -0
  477. package/dist/webgl/recordedPath.d.ts +51 -0
  478. package/dist/webgl/recordedPath.d.ts.map +1 -0
  479. package/dist/webgl/recordedShaders.d.ts +38 -0
  480. package/dist/webgl/recordedShaders.d.ts.map +1 -0
  481. package/dist/webgl/recorder.d.ts +67 -0
  482. package/dist/webgl/recorder.d.ts.map +1 -0
  483. package/dist/webgl/seriesUploads.d.ts +40 -0
  484. package/dist/webgl/seriesUploads.d.ts.map +1 -0
  485. package/dist/webgl/shaders.d.ts +39 -0
  486. package/dist/webgl/shaders.d.ts.map +1 -0
  487. package/dist/webgl/strokeGeometry.d.ts +28 -0
  488. package/dist/webgl/strokeGeometry.d.ts.map +1 -0
  489. package/dist/webgl/yMapping.d.ts +32 -0
  490. package/dist/webgl/yMapping.d.ts.map +1 -0
  491. package/package.json +2 -2
@@ -0,0 +1,218 @@
1
+ import { computeTickStep as e } from "@tradecanvas/commons";
2
+ //#region src/viewport/ScaleMapping.ts
3
+ function t(e, t) {
4
+ return e * (t.barWidth + t.barSpacing) - t.offset + t.chartRect.x + t.barWidth / 2;
5
+ }
6
+ function n(e, t) {
7
+ let { min: n, max: r } = t.priceRange, { y: i, height: a } = t.chartRect, o;
8
+ if (t.logScale && n > 0 && r > 0) {
9
+ let t = Math.log(n), s = Math.log(r) - t;
10
+ if (s === 0) return i + a / 2;
11
+ o = (Math.log(Math.max(e, 2 ** -52)) - t) / s;
12
+ } else {
13
+ let t = r - n;
14
+ if (t === 0) return i + a / 2;
15
+ o = (e - n) / t;
16
+ }
17
+ return i + a * (t.invertScale ? o : 1 - o);
18
+ }
19
+ function r(e) {
20
+ let { min: t, max: n } = e.priceRange, { y: r, height: i } = e.chartRect, a = e.invertScale === !0;
21
+ if (e.logScale && t > 0 && n > 0) {
22
+ let e = Math.log(t), o = Math.log(n) - e;
23
+ if (o === 0) return () => r + i / 2;
24
+ let s = i / o, c = r + i;
25
+ return a ? (t) => r + (Math.log(Math.max(t, 2 ** -52)) - e) * s : (t) => c - (Math.log(Math.max(t, 2 ** -52)) - e) * s;
26
+ }
27
+ let o = n - t;
28
+ if (o === 0) return () => r + i / 2;
29
+ let s = i / o;
30
+ return a ? (e) => r + (e - t) * s : (e) => r + (n - e) * s;
31
+ }
32
+ function i(e, t, n, r) {
33
+ let { min: i, max: a } = n.priceRange, o = (a - i) / t, s = r(i + e * o), c = r(i + (e + 1) * o);
34
+ return {
35
+ top: Math.min(s, c),
36
+ height: Math.abs(s - c),
37
+ mid: (s + c) / 2
38
+ };
39
+ }
40
+ function a(e, t) {
41
+ let n = t.barWidth + t.barSpacing;
42
+ return Math.round((e - t.chartRect.x - t.barWidth / 2 + t.offset) / n);
43
+ }
44
+ function o(e, t) {
45
+ let { min: n, max: r } = t.priceRange, i = (e - t.chartRect.y) / t.chartRect.height, a = t.invertScale ? i : 1 - i;
46
+ if (t.logScale && n > 0 && r > 0) {
47
+ let e = Math.log(n);
48
+ return Math.exp(e + (Math.log(r) - e) * a);
49
+ }
50
+ return n + (r - n) * a;
51
+ }
52
+ var s = /* @__PURE__ */ new WeakMap();
53
+ function c(e) {
54
+ let t = e.length;
55
+ if (t < 2) return 0;
56
+ let n = s.get(e);
57
+ if (n && n.length === t) return n.step;
58
+ let r = [];
59
+ for (let n = Math.max(1, t - 20); n < t; n++) r.push(e[n].time - e[n - 1].time);
60
+ r.sort((e, t) => e - t);
61
+ let i = Math.max(0, r[r.length >> 1]);
62
+ return s.set(e, {
63
+ length: t,
64
+ step: i
65
+ }), i;
66
+ }
67
+ function l(e) {
68
+ let t = c(e);
69
+ return (e.length > 0 ? e[e.length - 1].time : 0) > 0xe8d4a51000 ? t : t * 1e3;
70
+ }
71
+ function u(e, t) {
72
+ let n = t.length;
73
+ if (n === 0) return e;
74
+ let r = n - 1;
75
+ if (e > r) return t[r].time + (e - r) * c(t);
76
+ if (e < 0) return t[0].time + e * c(t);
77
+ let i = Math.floor(e);
78
+ return i === e || i >= r ? t[i].time : t[i].time + (e - i) * (t[i + 1].time - t[i].time);
79
+ }
80
+ function d(e, t) {
81
+ if (t.length === 0) return -1;
82
+ let n = t[0].time, r = t.length - 1, i = t[r].time;
83
+ if (e <= n || e >= i) {
84
+ if (e === n) return 0;
85
+ if (e === i) return r;
86
+ let a = c(t);
87
+ return a <= 0 ? e < n ? 0 : r : e < n ? (e - n) / a : r + (e - i) / a;
88
+ }
89
+ let a = 0, o = t.length - 1;
90
+ for (; a <= o;) {
91
+ let n = a + o >>> 1;
92
+ if (t[n].time === e) return n;
93
+ t[n].time < e ? a = n + 1 : o = n - 1;
94
+ }
95
+ if (a >= t.length) return t.length - 1;
96
+ if (o < 0) return 0;
97
+ let s = t[o].time, l = t[a].time, u = l === s ? 0 : (e - s) / (l - s);
98
+ return o + u;
99
+ }
100
+ function f(e, t) {
101
+ let n = t.data;
102
+ return n && n.length > 0 ? d(e, n) : e;
103
+ }
104
+ function p(e, n) {
105
+ return t(f(e, n), n);
106
+ }
107
+ function m(e, t) {
108
+ let n = a(e, t), r = t.data;
109
+ return r && r.length > 0 ? u(n, r) : n;
110
+ }
111
+ //#endregion
112
+ //#region src/charts/pixelGrid.ts
113
+ function h(e) {
114
+ let t = typeof e.getTransform == "function" ? e.getTransform() : void 0;
115
+ return {
116
+ a: t && Number.isFinite(t.a) && t.a > 0 ? t.a : 1,
117
+ d: t && Number.isFinite(t.d) && t.d > 0 ? t.d : 1,
118
+ e: t && Number.isFinite(t.e) ? t.e : 0,
119
+ f: t && Number.isFinite(t.f) ? t.f : 0
120
+ };
121
+ }
122
+ function g(e, t) {
123
+ let { a: n, d: r, e: i, f: a } = h(e);
124
+ e.save(), e.setTransform(1, 0, 0, 1, 0, 0);
125
+ try {
126
+ return t({
127
+ ratio: n,
128
+ x: (e) => Math.round(e * n + i),
129
+ y: (e) => Math.round(e * r + a),
130
+ left: (e, t) => Math.round(e * n + i - t / 2)
131
+ });
132
+ } finally {
133
+ e.restore();
134
+ }
135
+ }
136
+ function _(e, t) {
137
+ let n = Math.max(1, Math.floor(t)), r = Math.max(n, Math.round(e * t));
138
+ return (r - n) % 2 != 0 && --r, {
139
+ body: Math.max(r, n),
140
+ wick: n
141
+ };
142
+ }
143
+ function v(e, t, n, r) {
144
+ let i = Math.max(1, Math.round(t * n)), a = i % 2 ? .5 : 0;
145
+ return {
146
+ at: (Math.round(e * n + r - a) + a - r) / n,
147
+ width: i / n
148
+ };
149
+ }
150
+ function y(e, t, n) {
151
+ let r = h(e), i = v(t, n, r.d, r.f);
152
+ return {
153
+ y: i.at,
154
+ width: i.width
155
+ };
156
+ }
157
+ function b(e, t, n) {
158
+ let r = h(e), i = v(t, n, r.a, r.e);
159
+ return {
160
+ x: i.at,
161
+ width: i.width
162
+ };
163
+ }
164
+ //#endregion
165
+ //#region src/charts/denseBars.ts
166
+ var x = 1;
167
+ function S(e) {
168
+ return e.barWidth < 1;
169
+ }
170
+ function C(e, t, n, r, i) {
171
+ let a = Math.min(n, e.length - 1);
172
+ if (t > a) return;
173
+ let o = {
174
+ x: 0,
175
+ open: 0,
176
+ high: 0,
177
+ low: 0,
178
+ close: 0,
179
+ volume: 0
180
+ }, s = !1;
181
+ for (let n = Math.max(0, t); n <= a; n++) {
182
+ let t = e[n], a = Math.floor(r(n));
183
+ s && a !== o.x && (i(o), s = !1), s ? (t.high > o.high && (o.high = t.high), t.low < o.low && (o.low = t.low), t.volume > o.volume && (o.volume = t.volume)) : (o.x = a, o.open = t.open, o.high = t.high, o.low = t.low, o.volume = t.volume, s = !0), o.close = t.close;
184
+ }
185
+ s && i(o);
186
+ }
187
+ function w(e, t, n, i, a) {
188
+ let { from: o, to: s } = n.visibleRange, c = n.barWidth + n.barSpacing, l = -n.offset + n.chartRect.x + n.barWidth / 2, u = r(n);
189
+ g(e, (n) => {
190
+ let r = new Path2D(), d = new Path2D();
191
+ C(t, o, s, (e) => e * c + l, (e) => {
192
+ let t = n.y(u(e.high)), i = n.y(u(e.low)), a = n.x(e.x), o = Math.max(1, n.x(e.x + 1) - a);
193
+ (e.close >= e.open ? r : d).rect(a, Math.min(t, i), o, Math.max(Math.abs(i - t), 1));
194
+ }), e.fillStyle = i, e.fill(r), e.fillStyle = a, e.fill(d);
195
+ });
196
+ }
197
+ //#endregion
198
+ //#region src/axis/gridLines.ts
199
+ var T = 80;
200
+ function E(t) {
201
+ let { chartRect: n, priceRange: i } = t;
202
+ if (i.max - i.min <= 0) return {
203
+ horizontal: [],
204
+ vertical: []
205
+ };
206
+ let a = r(t), o = [], s = e(i.min, i.max, 8), c = Math.ceil(i.min / s) * s;
207
+ for (let e = c; e <= i.max; e += s) o.push(Math.round(a(e)) + .5);
208
+ let l = [], u = t.barWidth + t.barSpacing, d = Math.max(1, Math.ceil(T / u)), f = -t.offset + n.x + t.barWidth / 2, p = Math.floor(t.offset / u), m = Math.ceil((t.offset + n.width) / u);
209
+ for (let e = p; e <= m; e++) e % d === 0 && l.push(Math.round(e * u + f) + .5);
210
+ return {
211
+ horizontal: o,
212
+ vertical: l
213
+ };
214
+ }
215
+ //#endregion
216
+ export { o as S, f as _, w as a, a as b, y as c, t as d, c as f, r as g, n as h, S as i, g as l, i as m, x as n, _ as o, l as p, C as r, b as s, E as t, u, p as v, m as x, d as y };
217
+
218
+ //# sourceMappingURL=gridLines-kFhXyH-u.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridLines-kFhXyH-u.js","names":[],"sources":["../src/viewport/ScaleMapping.ts","../src/charts/pixelGrid.ts","../src/charts/denseBars.ts","../src/axis/gridLines.ts"],"sourcesContent":["import type { ViewportState } from '@tradecanvas/commons';\n\nexport function barIndexToX(index: number, viewport: ViewportState): number {\n const barUnit = viewport.barWidth + viewport.barSpacing;\n return index * barUnit - viewport.offset + viewport.chartRect.x + viewport.barWidth / 2;\n}\n\nexport function priceToY(price: number, viewport: ViewportState): number {\n const { min, max } = viewport.priceRange;\n const { y: top, height } = viewport.chartRect;\n let ratio: number;\n if (viewport.logScale && min > 0 && max > 0) {\n const logMin = Math.log(min);\n const logRange = Math.log(max) - logMin;\n if (logRange === 0) return top + height / 2;\n ratio = (Math.log(Math.max(price, Number.EPSILON)) - logMin) / logRange;\n } else {\n const range = max - min;\n if (range === 0) return top + height / 2;\n ratio = (price - min) / range;\n }\n return top + height * (viewport.invertScale ? ratio : 1 - ratio);\n}\n\n/**\n * `priceToY` for one frame, with the per-call work hoisted out: for renderers\n * that map every visible bar. Follows the log scale and the inverted scale.\n */\nexport function priceToYMapper(viewport: ViewportState): (price: number) => number {\n const { min, max } = viewport.priceRange;\n const { y: top, height } = viewport.chartRect;\n const invert = viewport.invertScale === true;\n if (viewport.logScale && min > 0 && max > 0) {\n const logMin = Math.log(min);\n const logRange = Math.log(max) - logMin;\n if (logRange === 0) return () => top + height / 2;\n const k = height / logRange;\n const bottom = top + height;\n return invert\n ? (price) => top + (Math.log(Math.max(price, Number.EPSILON)) - logMin) * k\n : (price) => bottom - (Math.log(Math.max(price, Number.EPSILON)) - logMin) * k;\n }\n const range = max - min;\n if (range === 0) return () => top + height / 2;\n const k = height / range;\n return invert ? (price) => top + (price - min) * k : (price) => top + (max - price) * k;\n}\n\n/**\n * Where bucket `b` of `count` equal price buckets across the price range sits\n * on screen (bucket 0 holds the lowest prices), on any scale. `toY` is the\n * frame's `priceToYMapper`.\n */\nexport function priceBucketRow(\n b: number,\n count: number,\n viewport: ViewportState,\n toY: (price: number) => number,\n): { top: number; height: number; mid: number } {\n const { min, max } = viewport.priceRange;\n const step = (max - min) / count;\n const yLow = toY(min + b * step);\n const yHigh = toY(min + (b + 1) * step);\n return { top: Math.min(yLow, yHigh), height: Math.abs(yLow - yHigh), mid: (yLow + yHigh) / 2 };\n}\n\nexport function xToBarIndex(x: number, viewport: ViewportState): number {\n const barUnit = viewport.barWidth + viewport.barSpacing;\n return Math.round((x - viewport.chartRect.x - viewport.barWidth / 2 + viewport.offset) / barUnit);\n}\n\nexport function yToPrice(y: number, viewport: ViewportState): number {\n const { min, max } = viewport.priceRange;\n const fromTop = (y - viewport.chartRect.y) / viewport.chartRect.height;\n const ratio = viewport.invertScale ? fromTop : 1 - fromTop;\n if (viewport.logScale && min > 0 && max > 0) {\n const logMin = Math.log(min);\n const logMax = Math.log(max);\n return Math.exp(logMin + (logMax - logMin) * ratio);\n }\n return min + (max - min) * ratio;\n}\n\ntype TimedSeries = ReadonlyArray<{ time: number }>;\n\nconst stepCache = new WeakMap<TimedSeries, { length: number; step: number }>();\n\n/**\n * Typical spacing between bar times — the median of the last ~20 intervals,\n * so a weekend or halt gap doesn't skew it. Used to place times beyond either\n * end of the data (the empty future the chart can be panned into). Cached per\n * series and length; 0 when there are fewer than two bars.\n */\nexport function barTimeStep(data: TimedSeries): number {\n const n = data.length;\n if (n < 2) return 0;\n const cached = stepCache.get(data);\n if (cached && cached.length === n) return cached.step;\n const diffs: number[] = [];\n for (let i = Math.max(1, n - 20); i < n; i++) diffs.push(data[i].time - data[i - 1].time);\n diffs.sort((a, b) => a - b);\n const step = Math.max(0, diffs[diffs.length >> 1]);\n stepCache.set(data, { length: n, step });\n return step;\n}\n\n/**\n * `barTimeStep` in milliseconds whatever unit the series uses: bar times\n * below 1e12 are seconds (the same rule as `normalizeBarTime`).\n */\nexport function barTimeStepMs(data: TimedSeries): number {\n const step = barTimeStep(data);\n const last = data.length > 0 ? data[data.length - 1].time : 0;\n return last > 1e12 ? step : step * 1000;\n}\n\n/**\n * Time at bar index `index`, extrapolated by `barTimeStep` past either end of\n * the data — e.g. the future area right of the newest bar.\n */\nexport function barIndexToTime(index: number, data: TimedSeries): number {\n const n = data.length;\n if (n === 0) return index;\n const last = n - 1;\n if (index > last) return data[last].time + (index - last) * barTimeStep(data);\n if (index < 0) return data[0].time + index * barTimeStep(data);\n const lo = Math.floor(index);\n if (lo === index || lo >= last) return data[lo].time;\n return data[lo].time + (index - lo) * (data[lo + 1].time - data[lo].time);\n}\n\n/**\n * Convert a bar timestamp to its data-array index via binary search.\n * Falls back to fractional interpolation when the timestamp falls between bars,\n * and extrapolates (by `barTimeStep`) for times beyond either end — so a drawing\n * anchored in the future keeps its place instead of collapsing onto the last bar.\n * Returns -1 if data is empty.\n */\nexport function timestampToBarIndex(timestamp: number, data: TimedSeries): number {\n if (data.length === 0) return -1;\n const first = data[0].time;\n const lastIdx = data.length - 1;\n const lastTime = data[lastIdx].time;\n if (timestamp <= first || timestamp >= lastTime) {\n if (timestamp === first) return 0;\n if (timestamp === lastTime) return lastIdx;\n const step = barTimeStep(data);\n if (step <= 0) return timestamp < first ? 0 : lastIdx;\n return timestamp < first ? (timestamp - first) / step : lastIdx + (timestamp - lastTime) / step;\n }\n // Binary search\n let lo = 0, hi = data.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n if (data[mid].time === timestamp) return mid;\n if (data[mid].time < timestamp) lo = mid + 1;\n else hi = mid - 1;\n }\n // lo is the insertion point; interpolate between hi and lo\n if (lo >= data.length) return data.length - 1;\n if (hi < 0) return 0;\n const tLo = data[hi].time, tHi = data[lo].time;\n const frac = tHi !== tLo ? (timestamp - tLo) / (tHi - tLo) : 0;\n return hi + frac;\n}\n\n/**\n * Resolve an anchor `time` value to a (possibly fractional) bar index in the\n * current series. When `viewport.data` is set, `time` is interpreted as a real\n * timestamp and converted via `timestampToBarIndex`. Otherwise `time` is\n * already a bar index and is returned unchanged.\n */\nexport function resolveBarIndex(time: number, viewport: ViewportState): number {\n const data = viewport.data;\n if (data && data.length > 0) {\n return timestampToBarIndex(time, data);\n }\n return time;\n}\n\n/**\n * Map an anchor `time` value to its pixel x. Works whether `time` is a\n * timestamp (when `viewport.data` is set) or a bar index (legacy callers).\n */\nexport function timeToX(time: number, viewport: ViewportState): number {\n return barIndexToX(resolveBarIndex(time, viewport), viewport);\n}\n\n/**\n * Map a pixel x back to an anchor `time` value. Returns a real timestamp when\n * `viewport.data` is set (so the value survives timeframe switches), otherwise\n * returns a bar index for legacy callers.\n */\nexport function xToTime(x: number, viewport: ViewportState): number {\n const idx = xToBarIndex(x, viewport);\n const data = viewport.data;\n if (data && data.length > 0) {\n // Past either end (the empty future, or before the oldest bar) the time\n // is extrapolated, so drawings can be placed there.\n return barIndexToTime(idx, data);\n }\n return idx;\n}\n","/**\n * Drawing on whole device pixels. The chart draws in CSS pixels under the\n * device-pixel-ratio transform, so a 1 px line at a fractional position\n * spreads over two device pixels at half strength and looks soft and thick.\n * Bars drawn here go back to the canvas's own pixels and round to them: a\n * wick is one sharp column, a body has hard edges, at any ratio (1, 1.25, 2…).\n */\n\nfunction transformOf(ctx: CanvasRenderingContext2D): { a: number; d: number; e: number; f: number } {\n const m = typeof ctx.getTransform === 'function' ? ctx.getTransform() : undefined;\n return {\n a: m && Number.isFinite(m.a) && m.a > 0 ? m.a : 1,\n d: m && Number.isFinite(m.d) && m.d > 0 ? m.d : 1,\n e: m && Number.isFinite(m.e) ? m.e : 0,\n f: m && Number.isFinite(m.f) ? m.f : 0,\n };\n}\n\n/** CSS to device-pixel mapping, rounded to whole pixels. */\nexport interface PixelGrid {\n /** Device pixels per CSS pixel. */\n ratio: number;\n /** The device pixel a CSS x falls on. */\n x(cssX: number): number;\n /** The device pixel a CSS y falls on. */\n y(cssY: number): number;\n /**\n * Left edge (device px) of a column `width` device pixels wide centred on\n * CSS x `cssCenter`: the same column `crispX` strokes for a line there.\n */\n left(cssCenter: number, width: number): number;\n}\n\n/**\n * Run `draw` with the transform reset to device pixels, then put it back.\n * A context without a readable transform (a test stand-in) is taken as 1:1.\n */\nexport function inDevicePixels<T>(ctx: CanvasRenderingContext2D, draw: (grid: PixelGrid) => T): T {\n const { a, d, e, f } = transformOf(ctx);\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n try {\n return draw({\n ratio: a,\n x: (v) => Math.round(v * a + e),\n y: (v) => Math.round(v * d + f),\n left: (v, width) => Math.round(v * a + e - width / 2),\n });\n } finally {\n ctx.restore();\n }\n}\n\n/**\n * A bar's columns in device pixels: the wick one CSS pixel wide (at least one\n * device pixel), the body about the bar's width, with an even difference so\n * the wick sits exactly in the middle.\n */\nexport function barColumns(barWidth: number, ratio: number): { body: number; wick: number } {\n const wick = Math.max(1, Math.floor(ratio));\n let body = Math.max(wick, Math.round(barWidth * ratio));\n if ((body - wick) % 2 !== 0) body -= 1;\n return { body: Math.max(body, wick), wick };\n}\n\n/** Snap a line's centre (in CSS px) so a `width`-wide stroke covers whole device pixels. */\nfunction snap(v: number, width: number, scale: number, shift: number): { at: number; width: number } {\n const w = Math.max(1, Math.round(width * scale));\n const half = w % 2 ? 0.5 : 0;\n return { at: (Math.round(v * scale + shift - half) + half - shift) / scale, width: w / scale };\n}\n\n/**\n * A horizontal line's y and width, snapped so the stroke covers whole device\n * pixels: one sharp row instead of a soft two-pixel smear.\n */\nexport function crispY(ctx: CanvasRenderingContext2D, y: number, width: number): { y: number; width: number } {\n const t = transformOf(ctx);\n const s = snap(y, width, t.d, t.f);\n return { y: s.at, width: s.width };\n}\n\n/** A vertical line's x and width, snapped like `crispY`. */\nexport function crispX(ctx: CanvasRenderingContext2D, x: number, width: number): { x: number; width: number } {\n const t = transformOf(ctx);\n const s = snap(x, width, t.a, t.e);\n return { x: s.at, width: s.width };\n}\n","import type { DataSeries, ViewportState } from '@tradecanvas/commons';\nimport { priceToYMapper } from '../viewport/ScaleMapping.js';\nimport { inDevicePixels } from './pixelGrid.js';\n\n/**\n * Below this bar width (CSS px) bar-shaped charts draw one column per pixel\n * instead of one shape per bar: thousands of sub-pixel candles would blur\n * into each other and cost a path segment each.\n */\nexport const DENSE_BAR_WIDTH = 1;\n\nexport function isDense(viewport: Pick<ViewportState, 'barWidth'>): boolean {\n return viewport.barWidth < DENSE_BAR_WIDTH;\n}\n\n/** The bars on one pixel column merged into one: first open, last close, extremes, largest volume. */\nexport interface PixelColumn {\n x: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n}\n\n/**\n * Walk bars `from`..`to` merged per pixel column (`Math.floor` of their x).\n * The column object is reused between calls: copy it to keep it.\n */\nexport function forEachPixelColumn(\n data: DataSeries,\n from: number,\n to: number,\n toX: (index: number) => number,\n visit: (column: Readonly<PixelColumn>) => void,\n): void {\n const last = Math.min(to, data.length - 1);\n if (from > last) return;\n const col: PixelColumn = { x: 0, open: 0, high: 0, low: 0, close: 0, volume: 0 };\n let open = false;\n for (let i = Math.max(0, from); i <= last; i++) {\n const bar = data[i];\n const x = Math.floor(toX(i));\n if (open && x !== col.x) {\n visit(col);\n open = false;\n }\n if (!open) {\n col.x = x;\n col.open = bar.open;\n col.high = bar.high;\n col.low = bar.low;\n col.volume = bar.volume;\n open = true;\n } else {\n if (bar.high > col.high) col.high = bar.high;\n if (bar.low < col.low) col.low = bar.low;\n if (bar.volume > col.volume) col.volume = bar.volume;\n }\n col.close = bar.close;\n }\n if (open) visit(col);\n}\n\n/**\n * Draw a dense price series as one high–low line per pixel column, coloured by\n * the column's direction (its last close against its first open).\n */\nexport function renderDenseBars(\n ctx: CanvasRenderingContext2D,\n data: DataSeries,\n viewport: ViewportState,\n upColor: string,\n downColor: string,\n): void {\n const { from, to } = viewport.visibleRange;\n const barUnit = viewport.barWidth + viewport.barSpacing;\n const offsetX = -viewport.offset + viewport.chartRect.x + viewport.barWidth / 2;\n const toY = priceToYMapper(viewport);\n inDevicePixels(ctx, (px) => {\n const up = new Path2D();\n const down = new Path2D();\n forEachPixelColumn(data, from, to, (i) => i * barUnit + offsetX, (c) => {\n const top = px.y(toY(c.high));\n const bottom = px.y(toY(c.low));\n // A flat column still gets a pixel, like a doji's body.\n // Each column reaches the next with no gap: at 125% a CSS pixel is 1 or 2 device pixels.\n const left = px.x(c.x);\n const width = Math.max(1, px.x(c.x + 1) - left);\n (c.close >= c.open ? up : down).rect(left, Math.min(top, bottom), width, Math.max(Math.abs(bottom - top), 1));\n });\n ctx.fillStyle = upColor;\n ctx.fill(up);\n ctx.fillStyle = downColor;\n ctx.fill(down);\n });\n}\n","import type { ViewportState } from '@tradecanvas/commons';\nimport { computeTickStep } from '@tradecanvas/commons';\nimport { priceToYMapper } from '../viewport/ScaleMapping.js';\n\n/** The grid's lines as CSS-pixel centres: one across per price step, one down every few slots. */\nexport interface GridLines {\n horizontal: number[];\n vertical: number[];\n}\n\n/** Bars between vertical lines: at least this many pixels apart. */\nconst MIN_COLUMN_SPACING = 80;\n\n/** Where the grid lines go, for the 2D grid and the GPU alike. */\nexport function gridLines(viewport: ViewportState): GridLines {\n const { chartRect, priceRange } = viewport;\n if (priceRange.max - priceRange.min <= 0) return { horizontal: [], vertical: [] };\n const toY = priceToYMapper(viewport);\n\n const horizontal: number[] = [];\n const priceStep = computeTickStep(priceRange.min, priceRange.max, 8);\n const firstPrice = Math.ceil(priceRange.min / priceStep) * priceStep;\n for (let price = firstPrice; price <= priceRange.max; price += priceStep) {\n horizontal.push(Math.round(toY(price)) + 0.5);\n }\n\n const vertical: number[] = [];\n const barUnit = viewport.barWidth + viewport.barSpacing;\n const barsPerGrid = Math.max(1, Math.ceil(MIN_COLUMN_SPACING / barUnit));\n const offsetX = -viewport.offset + chartRect.x + viewport.barWidth / 2;\n // Every slot on screen — the empty space past either end of the data\n // (where the chart can be panned) keeps its grid too.\n const from = Math.floor(viewport.offset / barUnit);\n const to = Math.ceil((viewport.offset + chartRect.width) / barUnit);\n for (let i = from; i <= to; i++) {\n if (i % barsPerGrid !== 0) continue;\n vertical.push(Math.round(i * barUnit + offsetX) + 0.5);\n }\n return { horizontal, vertical };\n}\n"],"mappings":"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"}