@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,75 @@
1
+ import { RGBA } from './glColor.js';
2
+ /** A clip or bounds in device pixels. */
3
+ export interface Box {
4
+ x0: number;
5
+ y0: number;
6
+ x1: number;
7
+ y1: number;
8
+ }
9
+ export type GpuPaint =
10
+ /** Premultiplied, global alpha applied. */
11
+ {
12
+ kind: 'solid';
13
+ color: RGBA;
14
+ }
15
+ /**
16
+ * Along (x0, y0) → (x1, y1) in device pixels. Stop colours are kept
17
+ * unpremultiplied (global alpha applied to their alpha): Canvas 2D blends
18
+ * between them so, and premultiplies after.
19
+ */
20
+ | {
21
+ kind: 'linear';
22
+ x0: number;
23
+ y0: number;
24
+ x1: number;
25
+ y1: number;
26
+ stops: {
27
+ offset: number;
28
+ color: RGBA;
29
+ }[];
30
+ };
31
+ export type GpuCommand =
32
+ /** Axis-aligned rectangles, already clipped: left, top, right, bottom, then a premultiplied colour (8 numbers each). */
33
+ {
34
+ type: 'rects';
35
+ values: number[];
36
+ }
37
+ /**
38
+ * Polylines: x, y, w, cum per point (w 1 drawn, 0 a neighbour only, -1 a
39
+ * break; cum the length along the line so far, for dashes), with two
40
+ * points before the first segment and two after the last.
41
+ */
42
+ | {
43
+ type: 'stroke';
44
+ points: number[];
45
+ color: RGBA;
46
+ width: number;
47
+ cap: 0 | 1 | 2;
48
+ dash: number[] | null;
49
+ clip: Box;
50
+ }
51
+ /** Polygons as spans (see polygonSpans.ts), each pixel inside in one of them. */
52
+ | {
53
+ type: 'fill';
54
+ spans: number[];
55
+ bounds: Box;
56
+ paint: GpuPaint;
57
+ clip: Box;
58
+ }
59
+ /** Discs: x, y, radius, then a premultiplied colour (7 numbers each). */
60
+ | {
61
+ type: 'circles';
62
+ values: number[];
63
+ clip: Box;
64
+ };
65
+ export declare const intersect: (a: Box, b: Box) => Box;
66
+ export declare const isEmpty: (b: Box) => boolean;
67
+ /** The box around x, y pairs, grown by `pad` each side. */
68
+ export declare function boundsOf(points: readonly number[], pad?: number): Box;
69
+ /**
70
+ * Whether any two boxes overlap over some area (touching doesn't count).
71
+ * Canvas 2D paints the union of a path's pieces once; drawn one by one,
72
+ * see-through or antialiased pieces that overlap would paint some pixels twice.
73
+ */
74
+ export declare function anyOverlap(boxes: readonly Box[]): boolean;
75
+ //# sourceMappingURL=recordedCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordedCommands.d.ts","sourceRoot":"","sources":["../../src/webgl/recordedCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,yCAAyC;AACzC,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,QAAQ;AAClB,2CAA2C;AACzC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE;AAChC;;;;GAIG;GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC;AAEjH,MAAM,MAAM,UAAU;AACpB,wHAAwH;AACtH;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE;AACrC;;;;GAIG;GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE;AACpH,iFAAiF;GAC/E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE;AAC5E,yEAAyE;GACvE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC;AAErD,eAAO,MAAM,SAAS,GAAI,GAAG,GAAG,EAAE,GAAG,GAAG,KAAG,GAAmH,CAAC;AAE/J,eAAO,MAAM,OAAO,GAAI,GAAG,GAAG,KAAG,OAAwC,CAAC;AAE1E,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAI,GAAG,GAAG,CAWhE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,CASzD"}
@@ -0,0 +1,51 @@
1
+ /** A gradient made on the recording context. */
2
+ export declare class RecordedGradient {
3
+ readonly x0: number;
4
+ readonly y0: number;
5
+ readonly x1: number;
6
+ readonly y1: number;
7
+ readonly stops: {
8
+ offset: number;
9
+ color: string;
10
+ }[];
11
+ constructor(x0: number, y0: number, x1: number, y1: number);
12
+ addColorStop(offset: number, color: string): void;
13
+ }
14
+ /** The browser's Path2D (a stand-in where there is none, as in tests). */
15
+ declare const NativePath2D: {
16
+ new (path?: Path2D | string): Path2D;
17
+ };
18
+ /**
19
+ * A Path2D made while a step records. It is a real Path2D too (a chart that
20
+ * keeps one and draws it on a real context later still can), and remembers
21
+ * its calls to play them back on the recording context when it's filled,
22
+ * stroked or clipped (at the transform of that moment, as Canvas 2D does).
23
+ * Calls the GPU can't follow (ellipses, SVG path data…) mark it, and the
24
+ * step goes to Canvas 2D.
25
+ */
26
+ export declare class RecordedPath extends NativePath2D {
27
+ readonly calls: [string, number[]][];
28
+ unsupported: boolean;
29
+ constructor(from?: Path2D | string);
30
+ private note;
31
+ /** A call the GPU can't follow: still made on the real path, and the step goes to Canvas 2D. */
32
+ private unfollowed;
33
+ moveTo(x: number, y: number): void;
34
+ lineTo(x: number, y: number): void;
35
+ closePath(): void;
36
+ rect(x: number, y: number, w: number, h: number): void;
37
+ arc(x: number, y: number, r: number, a0: number, a1: number, ccw?: boolean): void;
38
+ quadraticCurveTo(cx: number, cy: number, x: number, y: number): void;
39
+ bezierCurveTo(c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number): void;
40
+ arcTo(...a: Parameters<Path2D['arcTo']>): void;
41
+ ellipse(...a: Parameters<Path2D['ellipse']>): void;
42
+ roundRect(...a: Parameters<Path2D['roundRect']>): void;
43
+ addPath(path: Path2D, transform?: DOMMatrix2DInit): void;
44
+ }
45
+ /**
46
+ * Run `draw` with the global Path2D swapped for RecordedPath, so the paths
47
+ * it makes record too; put back after, as it was (own property or none).
48
+ */
49
+ export declare function withRecordedPaths(draw: () => void): void;
50
+ export {};
51
+ //# sourceMappingURL=recordedPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordedPath.d.ts","sourceRoot":"","sources":["../../src/webgl/recordedPath.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,qBAAa,gBAAgB;IAEf,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAD9F,QAAQ,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;gBACpC,EAAE,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM;IAC9F,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAIlD;AAED,0EAA0E;AAC1E,QAAA,MAAM,YAAY,EAAE;IAAE,KAAK,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CACiD,CAAC;AAE5G;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAM;IAC1C,WAAW,UAAS;gBAER,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAUlC,OAAO,CAAC,IAAI;IAMZ,gGAAgG;IAChG,OAAO,CAAC,UAAU;IAKlB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAClC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAClC,SAAS,IAAI,IAAI;IACjB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACtD,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IACjF,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACpE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAE7F,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;IAClD,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAEtD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI;CAQzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAWxD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shaders for drawing recorded Canvas 2D: strokes, filled polygons and
3
+ * discs, in device pixels. Each fragment works out how much of its pixel the
4
+ * shape covers, as Canvas 2D antialiasing does, times how much of it the
5
+ * clip lets through.
6
+ */
7
+ /**
8
+ * A stroke, one segment per instance: the segment's two points and two
9
+ * neighbours either side (x, y, w, length along; w 1 drawn, 0 a neighbour
10
+ * only, -1 none). The quad covers the segment and its round ends.
11
+ */
12
+ export declare const STROKE_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nuniform float u_hw;\nin vec4 a_p0;\nin vec4 a_p1;\nin vec4 a_p2;\nin vec4 a_p3;\nin vec4 a_p4;\nin vec4 a_p5;\nflat out vec4 v_p0;\nflat out vec4 v_p1;\nflat out vec4 v_p2;\nflat out vec4 v_p3;\nflat out vec4 v_p4;\nflat out vec4 v_p5;\n\nvoid main() {\n v_p0 = a_p0; v_p1 = a_p1; v_p2 = a_p2; v_p3 = a_p3; v_p4 = a_p4; v_p5 = a_p5;\n if (a_p2.z < 0.5 || a_p3.z < 0.5) { gl_Position = NOWHERE; return; }\n vec2 a = a_p2.xy;\n vec2 b = a_p3.xy;\n vec2 d = b - a;\n float len = length(d);\n vec2 dir = len > 0.0 ? d / len : vec2(1.0, 0.0);\n vec2 n = vec2(-dir.y, dir.x);\n float m = u_hw + 1.0;\n vec2 cr = corner(gl_VertexID % 6);\n vec2 pos = mix(a - dir * m, b + dir * m, cr.x) + n * mix(-m, m, cr.y);\n gl_Position = toClip(pos);\n}\n";
13
+ /**
14
+ * A stroke is the union of its segments, round where they join: each pixel
15
+ * is drawn once, by the nearest segment of those around it, with the
16
+ * coverage of the nearest distance. The line's own ends take its cap. A
17
+ * dashed line goes segment by segment, its pattern counted along the line.
18
+ */
19
+ export declare const STROKE_FS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// This fragment's pixel centre in device pixels, y down.\nvec2 pixelCentre() { return vec2(gl_FragCoord.x, u_canvas.y - gl_FragCoord.y); }\n\n// The share of the pixel centred at p inside the clip.\nfloat clipCoverage(vec2 p) {\n vec2 lo = p - 0.5;\n vec2 c = clamp(min(lo + 1.0, u_clip.zw) - max(lo, u_clip.xy), 0.0, 1.0);\n return c.x * c.y;\n}\n\nuniform vec4 u_color;\nuniform float u_hw;\nuniform int u_cap;\nuniform vec4 u_dash;\nflat in vec4 v_p0;\nflat in vec4 v_p1;\nflat in vec4 v_p2;\nflat in vec4 v_p3;\nflat in vec4 v_p4;\nflat in vec4 v_p5;\nout vec4 outColor;\n\nfloat segDist(vec2 p, vec2 a, vec2 b) {\n vec2 ab = b - a;\n float l2 = dot(ab, ab);\n float t = l2 > 0.0 ? clamp(dot(p - a, ab) / l2, 0.0, 1.0) : 0.0;\n return length(p - a - t * ab);\n}\n\nbool joined(vec4 a, vec4 b) { return a.z > -0.5 && b.z > -0.5; }\n\n// The share of a pixel at distance d from the centre line inside a line hw either side.\nfloat across(float d) { return clamp(min(u_hw, d + 0.5) - max(-u_hw, d - 0.5), 0.0, 1.0); }\n\n// The share of [s - 0.5, s + 0.5] inside [lo, hi].\nfloat span(float s, float lo, float hi) { return clamp(min(s + 0.5, hi) - max(s - 0.5, lo), 0.0, 1.0); }\n\n// The share of [s - 0.5, s + 0.5] on a dash.\nfloat onDash(float s) {\n float period = u_dash.x + u_dash.y + u_dash.z + u_dash.w;\n float base = s - mod(s, period);\n float on = 0.0;\n for (int k = -1; k <= 1; k++) {\n float p0 = base + float(k) * period;\n on += span(s, p0, p0 + u_dash.x);\n on += span(s, p0 + u_dash.x + u_dash.y, p0 + u_dash.x + u_dash.y + u_dash.z);\n }\n return min(on, 1.0);\n}\n\nvoid main() {\n vec2 p = pixelCentre();\n float clipCov = clipCoverage(p);\n if (clipCov <= 0.0) discard;\n vec2 a = v_p2.xy;\n vec2 b = v_p3.xy;\n vec2 ab = b - a;\n float len = length(ab);\n vec2 dir = len > 0.0 ? ab / len : vec2(1.0, 0.0);\n float along = dot(p - a, dir);\n float perp = abs(dot(p - a, vec2(-dir.y, dir.x)));\n bool startEnd = v_p1.z < -0.5;\n bool finalEnd = v_p4.z < -0.5;\n\n float cov;\n if (u_dash.x + u_dash.y > 0.0) {\n cov = across(perp) * onDash(v_p2.w + along) * span(along, 0.0, len);\n } else {\n float self = segDist(p, a, b);\n float nearest = self;\n if (joined(v_p0, v_p1)) { float d = segDist(p, v_p0.xy, v_p1.xy); if (d <= self) discard; nearest = min(nearest, d); }\n if (joined(v_p1, v_p2)) { float d = segDist(p, v_p1.xy, v_p2.xy); if (d <= self) discard; nearest = min(nearest, d); }\n if (joined(v_p3, v_p4)) { float d = segDist(p, v_p3.xy, v_p4.xy); if (d < self) discard; nearest = min(nearest, d); }\n if (joined(v_p4, v_p5)) { float d = segDist(p, v_p4.xy, v_p5.xy); if (d < self) discard; nearest = min(nearest, d); }\n cov = across(nearest);\n // Past an end of the line: its cap, square-ended (butt or square) or round.\n float before = startEnd ? -along : -1e9;\n float after = finalEnd ? along - len : -1e9;\n if (u_cap != 1 && (before > -0.5 || after > -0.5)) {\n float reach = u_cap == 2 ? u_hw : 0.0;\n float lo = startEnd ? -reach : -1e9;\n float hi = finalEnd ? len + reach : 1e9;\n cov = across(perp) * span(along, lo, hi);\n }\n }\n if (cov <= 0.0) discard;\n outColor = u_color * (cov * clipCov);\n}\n";
20
+ /**
21
+ * Filled polygons as spans (polygonSpans.ts), one per instance: between x0
22
+ * and x1 the fill lies between two straight lines, a and b, whichever is on
23
+ * top. The quad covers the span's box.
24
+ */
25
+ export declare const SPAN_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec2 a_x;\nin vec4 a_ab;\nin vec2 a_ends;\nflat out vec2 v_x;\nflat out vec4 v_ab;\nflat out vec2 v_ends;\n\nvoid main() {\n v_x = a_x;\n v_ab = a_ab;\n v_ends = a_ends;\n float lo = min(min(a_ab.x, a_ab.y), min(a_ab.z, a_ab.w));\n float hi = max(max(a_ab.x, a_ab.y), max(a_ab.z, a_ab.w));\n vec2 cr = corner(gl_VertexID % 6);\n gl_Position = toClip(mix(vec2(floor(a_x.x), floor(lo) - 1.0), vec2(ceil(a_x.y), ceil(hi) + 1.0), cr));\n}\n";
26
+ /**
27
+ * The share of the pixel inside the span: across, the part of its column
28
+ * between the two lines (at the pixel's centre); along, whole pixels by
29
+ * their centre between neighbouring spans (so no seam where they meet), the
30
+ * part inside at the polygon's own two ends. Then the paint: a colour, or a
31
+ * linear gradient of up to four stops blended unpremultiplied, as Canvas 2D
32
+ * blends them.
33
+ */
34
+ export declare const SPAN_FS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// This fragment's pixel centre in device pixels, y down.\nvec2 pixelCentre() { return vec2(gl_FragCoord.x, u_canvas.y - gl_FragCoord.y); }\n\n// The share of the pixel centred at p inside the clip.\nfloat clipCoverage(vec2 p) {\n vec2 lo = p - 0.5;\n vec2 c = clamp(min(lo + 1.0, u_clip.zw) - max(lo, u_clip.xy), 0.0, 1.0);\n return c.x * c.y;\n}\n\nuniform int u_kind;\nuniform vec4 u_color;\nuniform vec4 u_line;\nuniform vec4 u_offsets;\nuniform int u_stops;\nuniform vec4 u_stop0;\nuniform vec4 u_stop1;\nuniform vec4 u_stop2;\nuniform vec4 u_stop3;\nflat in vec2 v_x;\nflat in vec4 v_ab;\nflat in vec2 v_ends;\nout vec4 outColor;\n\nvec4 stopColor(int i) {\n if (i == 0) return u_stop0;\n if (i == 1) return u_stop1;\n if (i == 2) return u_stop2;\n return u_stop3;\n}\n\nvec4 gradient(vec2 p) {\n vec2 g = u_line.zw - u_line.xy;\n float l2 = dot(g, g);\n // A gradient of no length paints nothing.\n if (l2 <= 0.0) return vec4(0.0);\n float t = dot(p - u_line.xy, g) / l2;\n vec4 c = stopColor(0);\n for (int i = 1; i < 4; i++) {\n if (i >= u_stops) break;\n float o0 = u_offsets[i - 1];\n float o1 = u_offsets[i];\n if (t >= o1) c = stopColor(i);\n else if (t > o0) { c = mix(stopColor(i - 1), stopColor(i), (t - o0) / max(o1 - o0, 1e-6)); break; }\n else break;\n }\n return vec4(c.rgb * c.a, c.a);\n}\n\nvoid main() {\n vec2 p = pixelCentre();\n float x0 = v_x.x;\n float x1 = v_x.y;\n float left = v_ends.x > 0.5 ? clamp(p.x + 0.5 - x0, 0.0, 1.0) : (p.x >= x0 ? 1.0 : 0.0);\n float right = v_ends.y > 0.5 ? clamp(x1 - (p.x - 0.5), 0.0, 1.0) : (p.x < x1 ? 1.0 : 0.0);\n float along = v_ends.x > 0.5 && v_ends.y > 0.5\n ? clamp(min(p.x + 0.5, x1) - max(p.x - 0.5, x0), 0.0, 1.0)\n : min(left, right);\n float t = clamp((clamp(p.x, x0, x1) - x0) / max(x1 - x0, 1e-6), 0.0, 1.0);\n float ya = mix(v_ab.x, v_ab.y, t);\n float yb = mix(v_ab.z, v_ab.w, t);\n float across = clamp(min(p.y + 0.5, max(ya, yb)) - max(p.y - 0.5, min(ya, yb)), 0.0, 1.0);\n float cov = along * across * clipCoverage(p);\n if (cov <= 0.0) discard;\n vec4 color = u_kind == 1 ? gradient(p) : u_color;\n outColor = color * cov;\n}\n";
35
+ /** Discs, one per instance: centre, radius, premultiplied colour. */
36
+ export declare const DISC_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec3 a_disc;\nin vec4 a_color;\nflat out vec3 v_disc;\nflat out vec4 v_color;\nvoid main() {\n v_disc = a_disc;\n v_color = a_color;\n float m = a_disc.z + 1.0;\n gl_Position = toClip(mix(a_disc.xy - m, a_disc.xy + m, corner(gl_VertexID % 6)));\n}\n";
37
+ export declare const DISC_FS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// This fragment's pixel centre in device pixels, y down.\nvec2 pixelCentre() { return vec2(gl_FragCoord.x, u_canvas.y - gl_FragCoord.y); }\n\n// The share of the pixel centred at p inside the clip.\nfloat clipCoverage(vec2 p) {\n vec2 lo = p - 0.5;\n vec2 c = clamp(min(lo + 1.0, u_clip.zw) - max(lo, u_clip.xy), 0.0, 1.0);\n return c.x * c.y;\n}\n\nflat in vec3 v_disc;\nflat in vec4 v_color;\nout vec4 outColor;\nvoid main() {\n vec2 p = pixelCentre();\n float cov = clamp(v_disc.z + 0.5 - length(p - v_disc.xy), 0.0, 1.0) * clipCoverage(p);\n if (cov <= 0.0) discard;\n outColor = v_color * cov;\n}\n";
38
+ //# sourceMappingURL=recordedShaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordedShaders.d.ts","sourceRoot":"","sources":["../../src/webgl/recordedShaders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkCH;;;;GAIG;AACH,eAAO,MAAM,SAAS,grCA6BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,w4GA+ErB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,i4BAiBnB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,00EA0DnB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,msBAWnB,CAAC;AAEF,eAAO,MAAM,OAAO,yzBAUnB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { Rect } from '@tradecanvas/commons';
2
+ import { GpuRecorder, GpuRegion } from '../engine/gpu.js';
3
+ import { GpuCommand } from './recordedCommands.js';
4
+ export type { Box, GpuCommand, GpuPaint } from './recordedCommands.js';
5
+ export { anyOverlap } from './recordedCommands.js';
6
+ declare class Recorder implements GpuRecorder {
7
+ private readonly dpr;
8
+ private readonly measure;
9
+ readonly commands: GpuCommand[];
10
+ readonly ctx: CanvasRenderingContext2D;
11
+ /** Where text goes: the region being recorded. */
12
+ private texts;
13
+ private state;
14
+ private stack;
15
+ private path;
16
+ private ok;
17
+ constructor(dpr: number, measure: CanvasRenderingContext2D | null);
18
+ region(clip: Rect): GpuRegion;
19
+ private reset;
20
+ private unsupported;
21
+ private copyState;
22
+ /** Whether the transform keeps axes axis-aligned (no rotation or skew). */
23
+ private axisAligned;
24
+ /** Axis-aligned and the same scale both ways: lines keep their width, circles stay round. */
25
+ private uniform;
26
+ private setMatrix;
27
+ private multiply;
28
+ private current;
29
+ private moveTo;
30
+ private lineTo;
31
+ private closePath;
32
+ private rect;
33
+ private arc;
34
+ /** A curve flattened into lines (the GPU draws only lines), finer as it is longer. */
35
+ private curve;
36
+ private withPath;
37
+ /** Run `use` on `path`'s shape instead of the current path. */
38
+ private onPath;
39
+ /** The style as the GPU paints it, or null when it can't. */
40
+ private paint;
41
+ /** Whether the state draws as plain source-over paint (no shadow, filter or other blending). */
42
+ private plain;
43
+ private fill;
44
+ private fillRects;
45
+ private stroke;
46
+ /** The dash pattern in device pixels as two on-off pairs, null for solid; undefined when the GPU can't dash these lines (it dashes single segments, butt-capped). */
47
+ private dash;
48
+ /**
49
+ * Whether the GPU's stroke looks as Canvas 2D's would: joins round enough
50
+ * to pass for the `lineJoin` asked for, pieces that don't overlap (Canvas
51
+ * 2D paints their union once), and, see-through, no segment so short that
52
+ * a pixel might be painted by more than the nearest few.
53
+ */
54
+ private drawsAlike;
55
+ /** Clip to the path: one axis-aligned rectangle (the winding rule makes no difference to it). */
56
+ private clip;
57
+ private text;
58
+ private measureText;
59
+ private methods;
60
+ private proxy;
61
+ /** A state property set as Canvas 2D sets it: invalid values are ignored. */
62
+ private setProp;
63
+ }
64
+ /** A recorder for one frame at `dpr`; `measure` measures text (and lends its canvas). */
65
+ export declare function createRecorder(dpr: number, measure: CanvasRenderingContext2D | null): Recorder;
66
+ export type { Recorder };
67
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/webgl/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAsD,KAAK,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAI3H,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAyEnD,cAAM,QAAS,YAAW,WAAW;IAUvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IATlE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAM;IACrC,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC;IACvC,kDAAkD;IAClD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,EAAE,CAAQ;gBAEW,GAAG,EAAE,MAAM,EAAmB,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAKnG,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS;IAwB7B,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAOjB,2EAA2E;IAC3E,OAAO,CAAC,WAAW;IAKnB,6FAA6F;IAC7F,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,GAAG;IAyBX,sFAAsF;IACtF,OAAO,CAAC,KAAK;IAqBb,OAAO,CAAC,QAAQ;IAQhB,+DAA+D;IAC/D,OAAO,CAAC,MAAM;IAiBd,6DAA6D;IAC7D,OAAO,CAAC,KAAK;IAsBb,gGAAgG;IAChG,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,MAAM;IAkBd,qKAAqK;IACrK,OAAO,CAAC,IAAI;IAUZ;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAYlB,iGAAiG;IACjG,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,KAAK;IAqBb,6EAA6E;IAC7E,OAAO,CAAC,OAAO;CAmBhB;AAoCD,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,QAAQ,CAE9F;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { DataSeries } from '@tradecanvas/commons';
2
+ /** Floats per bar on the GPU: open, high, low, close (from the base price), volume, up (1) or down (0). */
3
+ export declare const FLOATS_PER_BAR = 6;
4
+ /** The bars to write to the GPU buffer after a `sync`: `[from, to)`, or all of them. */
5
+ export interface SeriesChange {
6
+ full: boolean;
7
+ from: number;
8
+ to: number;
9
+ }
10
+ /**
11
+ * The series as the GPU takes it, kept in step with the chart's bars at the
12
+ * least cost. Prices are stored relative to a base price (float32 keeps 24
13
+ * bits: 84,814.20 in absolute terms would lose its cents) and the direction
14
+ * is stored as a flag, so a bar is never mistaken for up or down by float
15
+ * rounding. The chart ticks and appends in the same array: a live tick
16
+ * rewrites one bar and new bars are appended. A new array (new data, older
17
+ * bars paged in) or a changed bar in a sample of the rest writes everything.
18
+ */
19
+ export declare class SeriesUploads {
20
+ private buffer;
21
+ private count;
22
+ private basePrice;
23
+ /**
24
+ * Bars as they were written, to tell a tick from new history: the last
25
+ * one, the one before it, and a sample spread over the rest.
26
+ */
27
+ private samples;
28
+ private last;
29
+ /** The array last written: the chart ticks and appends in place, and replaces it for new history. */
30
+ private source;
31
+ get values(): Float32Array;
32
+ get length(): number;
33
+ get base(): number;
34
+ sync(data: DataSeries): SeriesChange;
35
+ private reset;
36
+ private ensure;
37
+ private write;
38
+ private remember;
39
+ }
40
+ //# sourceMappingURL=seriesUploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seriesUploads.d.ts","sourceRoot":"","sources":["../../src/webgl/seriesUploads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,sBAAsB,CAAC;AAEhE,2GAA2G;AAC3G,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAKD;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAK;IACtB;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,IAAI,CAAwB;IACpC,qGAAqG;IACrG,OAAO,CAAC,MAAM,CAA2B;IAEzC,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IA8BpC,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;IAgBb,OAAO,CAAC,QAAQ;CAajB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The shaders. Each draws axis-aligned rectangles, one instance per
3
+ * rectangle under the bars, bar (or pixel column when zoomed out), placed on
4
+ * device pixels by the same rules as `charts/pixelGrid.ts`, so GPU bars line
5
+ * up with what the 2D layer draws over them (crosshair, drawings). `floor(v + 0.5)` is used for
6
+ * rounding: GLSL's `round()` may round halves either way, `Math.round` does not.
7
+ */
8
+ /** Candles, a bar per instance: 6 vertices for the wick, then 6 for the body. */
9
+ export declare const CANDLE_BARS_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform float u_dpr;\nuniform int u_log;\nuniform int u_invert;\nuniform float u_yA;\nuniform float u_yB;\nuniform float u_logOffset;\nuniform float u_min;\nuniform float u_logFloor;\nuniform float u_logK;\nuniform float u_top;\nuniform float u_bottom;\nout vec4 v_color;\n\n// A price (relative to the base price) to a CSS-pixel y, as priceToYMapper\n// does; mappedY in yMapping.ts is the same steps in TypeScript.\nfloat cssY(float rel) {\n if (u_log == 1) {\n float v = log(max(1.0 + (rel + u_logOffset) / u_min, u_logFloor)) * u_logK;\n return u_invert == 1 ? u_top + v : u_bottom - v;\n }\n return u_yA + rel * u_yB;\n}\n\nfloat snap(float v) { return floor(v + 0.5); }\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// The corners of a quad as two triangles.\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\n\n// Nothing to draw: every vertex at one point off the canvas.\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec4 a_ohlc;\nin vec2 a_vd;\nuniform float u_x0;\nuniform float u_unit;\nuniform float u_wick;\nuniform float u_body;\nuniform vec4 u_upBody;\nuniform vec4 u_downBody;\nuniform vec4 u_upWick;\nuniform vec4 u_downWick;\n\nvoid main() {\n int vid = gl_VertexID % 12;\n vec2 cr = corner(vid % 6);\n bool up = a_vd.y > 0.5;\n float cx = (u_x0 + float(gl_InstanceID) * u_unit) * u_dpr;\n float wickLeft = snap(cx - u_wick * 0.5);\n float left;\n float width;\n float top;\n float height;\n if (vid < 6) {\n float h = snap(cssY(a_ohlc.y) * u_dpr);\n float l = snap(cssY(a_ohlc.z) * u_dpr);\n left = wickLeft;\n width = u_wick;\n top = min(h, l);\n height = max(abs(l - h), 1.0);\n v_color = up ? u_upWick : u_downWick;\n } else {\n float o = snap(cssY(a_ohlc.x) * u_dpr);\n float c = snap(cssY(a_ohlc.w) * u_dpr);\n left = wickLeft - (u_body - u_wick) * 0.5;\n width = u_body;\n top = min(o, c);\n height = max(abs(c - o), u_wick);\n v_color = up ? u_upBody : u_downBody;\n }\n gl_Position = toClip(vec2(left + cr.x * width, top + cr.y * height));\n}\n";
10
+ /** Volume, a bar per instance, under the candle bodies. */
11
+ export declare const VOLUME_BARS_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform float u_dpr;\nuniform int u_log;\nuniform int u_invert;\nuniform float u_yA;\nuniform float u_yB;\nuniform float u_logOffset;\nuniform float u_min;\nuniform float u_logFloor;\nuniform float u_logK;\nuniform float u_top;\nuniform float u_bottom;\nout vec4 v_color;\n\n// A price (relative to the base price) to a CSS-pixel y, as priceToYMapper\n// does; mappedY in yMapping.ts is the same steps in TypeScript.\nfloat cssY(float rel) {\n if (u_log == 1) {\n float v = log(max(1.0 + (rel + u_logOffset) / u_min, u_logFloor)) * u_logK;\n return u_invert == 1 ? u_top + v : u_bottom - v;\n }\n return u_yA + rel * u_yB;\n}\n\nfloat snap(float v) { return floor(v + 0.5); }\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// The corners of a quad as two triangles.\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\n\n// Nothing to draw: every vertex at one point off the canvas.\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec4 a_ohlc;\nin vec2 a_vd;\nuniform float u_x0;\nuniform float u_unit;\nuniform float u_wick;\nuniform float u_body;\nuniform float u_volBottom;\nuniform float u_volScale;\nuniform vec4 u_volUp;\nuniform vec4 u_volDown;\n\nvoid main() {\n vec2 cr = corner(gl_VertexID % 6);\n float cx = (u_x0 + float(gl_InstanceID) * u_unit) * u_dpr;\n float left = snap(cx - u_wick * 0.5) - (u_body - u_wick) * 0.5;\n float bottom = snap(u_volBottom * u_dpr);\n float top = snap((u_volBottom - a_vd.x * u_volScale) * u_dpr);\n if (bottom - top < 1.0) { gl_Position = NOWHERE; v_color = vec4(0.0); return; }\n v_color = a_vd.y > 0.5 ? u_volUp : u_volDown;\n gl_Position = toClip(vec2(left + cr.x * u_body, top + cr.y * (bottom - top)));\n}\n";
12
+ /**
13
+ * Zoomed out: a pixel column per instance, from the CPU (x, high, low,
14
+ * volume, up), reaching the next column with no gap.
15
+ */
16
+ export declare const CANDLE_COLUMNS_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform float u_dpr;\nuniform int u_log;\nuniform int u_invert;\nuniform float u_yA;\nuniform float u_yB;\nuniform float u_logOffset;\nuniform float u_min;\nuniform float u_logFloor;\nuniform float u_logK;\nuniform float u_top;\nuniform float u_bottom;\nout vec4 v_color;\n\n// A price (relative to the base price) to a CSS-pixel y, as priceToYMapper\n// does; mappedY in yMapping.ts is the same steps in TypeScript.\nfloat cssY(float rel) {\n if (u_log == 1) {\n float v = log(max(1.0 + (rel + u_logOffset) / u_min, u_logFloor)) * u_logK;\n return u_invert == 1 ? u_top + v : u_bottom - v;\n }\n return u_yA + rel * u_yB;\n}\n\nfloat snap(float v) { return floor(v + 0.5); }\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// The corners of a quad as two triangles.\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\n\n// Nothing to draw: every vertex at one point off the canvas.\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec4 a_col;\nin float a_up;\nuniform vec4 u_upBody;\nuniform vec4 u_downBody;\n\nvoid main() {\n vec2 cr = corner(gl_VertexID % 6);\n float left = snap(a_col.x * u_dpr);\n float width = max(1.0, snap((a_col.x + 1.0) * u_dpr) - left);\n float t = snap(cssY(a_col.y) * u_dpr);\n float b = snap(cssY(a_col.z) * u_dpr);\n v_color = a_up > 0.5 ? u_upBody : u_downBody;\n gl_Position = toClip(vec2(left + cr.x * width, min(t, b) + cr.y * max(abs(b - t), 1.0)));\n}\n";
17
+ export declare const VOLUME_COLUMNS_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform float u_dpr;\nuniform int u_log;\nuniform int u_invert;\nuniform float u_yA;\nuniform float u_yB;\nuniform float u_logOffset;\nuniform float u_min;\nuniform float u_logFloor;\nuniform float u_logK;\nuniform float u_top;\nuniform float u_bottom;\nout vec4 v_color;\n\n// A price (relative to the base price) to a CSS-pixel y, as priceToYMapper\n// does; mappedY in yMapping.ts is the same steps in TypeScript.\nfloat cssY(float rel) {\n if (u_log == 1) {\n float v = log(max(1.0 + (rel + u_logOffset) / u_min, u_logFloor)) * u_logK;\n return u_invert == 1 ? u_top + v : u_bottom - v;\n }\n return u_yA + rel * u_yB;\n}\n\nfloat snap(float v) { return floor(v + 0.5); }\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// The corners of a quad as two triangles.\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\n\n// Nothing to draw: every vertex at one point off the canvas.\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec4 a_col;\nin float a_up;\nuniform float u_volBottom;\nuniform float u_volScale;\nuniform vec4 u_volUp;\nuniform vec4 u_volDown;\n\nvoid main() {\n vec2 cr = corner(gl_VertexID % 6);\n float left = snap(a_col.x * u_dpr);\n float width = max(1.0, snap((a_col.x + 1.0) * u_dpr) - left);\n float bottom = snap(u_volBottom * u_dpr);\n float top = snap((u_volBottom - a_col.w * u_volScale) * u_dpr);\n if (bottom - top < 1.0) { gl_Position = NOWHERE; v_color = vec4(0.0); return; }\n v_color = a_up > 0.5 ? u_volUp : u_volDown;\n gl_Position = toClip(vec2(left + cr.x * width, top + cr.y * (bottom - top)));\n}\n";
18
+ /**
19
+ * Rectangles under the bars (grid lines, session shading, break lines): one
20
+ * per instance, in CSS pixels (left, top, right, bottom), in a premultiplied
21
+ * colour, dashed down from the top when a_dash (on, off) is set. The quad
22
+ * covers every device pixel the rectangle touches; the fragment shader works
23
+ * out how much of each it covers, as Canvas 2D antialiases an edge at a
24
+ * fractional pixel ratio.
25
+ */
26
+ export declare const RECT_VS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform float u_dpr;\nuniform int u_log;\nuniform int u_invert;\nuniform float u_yA;\nuniform float u_yB;\nuniform float u_logOffset;\nuniform float u_min;\nuniform float u_logFloor;\nuniform float u_logK;\nuniform float u_top;\nuniform float u_bottom;\nout vec4 v_color;\n\n// A price (relative to the base price) to a CSS-pixel y, as priceToYMapper\n// does; mappedY in yMapping.ts is the same steps in TypeScript.\nfloat cssY(float rel) {\n if (u_log == 1) {\n float v = log(max(1.0 + (rel + u_logOffset) / u_min, u_logFloor)) * u_logK;\n return u_invert == 1 ? u_top + v : u_bottom - v;\n }\n return u_yA + rel * u_yB;\n}\n\nfloat snap(float v) { return floor(v + 0.5); }\n\nvec4 toClip(vec2 dev) {\n return vec4(dev.x / u_canvas.x * 2.0 - 1.0, 1.0 - dev.y / u_canvas.y * 2.0, 0.0, 1.0);\n}\n\n// The corners of a quad as two triangles.\nvec2 corner(int k) {\n if (k == 0) return vec2(0.0, 0.0);\n if (k == 1 || k == 4) return vec2(1.0, 0.0);\n if (k == 2 || k == 3) return vec2(0.0, 1.0);\n return vec2(1.0, 1.0);\n}\n\n// Nothing to draw: every vertex at one point off the canvas.\nconst vec4 NOWHERE = vec4(-2.0, -2.0, 0.0, 1.0);\n\nin vec4 a_rect;\nin vec4 a_color;\nin vec2 a_dash;\nflat out vec4 v_rect;\nflat out vec2 v_dash;\n\nvoid main() {\n vec2 cr = corner(gl_VertexID % 6);\n v_rect = a_rect * u_dpr;\n v_dash = a_dash * u_dpr;\n v_color = a_color;\n gl_Position = toClip(mix(floor(v_rect.xy), ceil(v_rect.zw), cr));\n}\n";
27
+ /**
28
+ * The colour times the share of the pixel covered. For the grid (u_union),
29
+ * coverage goes out as alpha, so that where lines cross the blend gives the
30
+ * union of their coverage, as one 2D path does.
31
+ */
32
+ export declare const RECT_FS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform int u_union;\nin vec4 v_color;\nflat in vec4 v_rect;\nflat in vec2 v_dash;\nout vec4 outColor;\n\n// The share of rows [y, y + 1] inside the rectangle and, dashed, on a dash.\nfloat rows(float y) {\n float lo = max(y, v_rect.y);\n float hi = min(y + 1.0, v_rect.w);\n if (hi <= lo) return 0.0;\n if (v_dash.x <= 0.0) return hi - lo;\n // A dash period is longer than a device pixel, so the row meets the dash\n // of the period it starts in and the next (a third to spare).\n float period = v_dash.x + v_dash.y;\n float first = v_rect.y + floor((lo - v_rect.y) / period) * period;\n float on = 0.0;\n for (int i = 0; i < 3; i++) {\n float start = first + float(i) * period;\n on += max(0.0, min(hi, start + v_dash.x) - max(lo, start));\n }\n return on;\n}\n\nvoid main() {\n // This pixel's top-left corner in device pixels, y down.\n vec2 p = vec2(floor(gl_FragCoord.x), u_canvas.y - floor(gl_FragCoord.y) - 1.0);\n float coverage = clamp(min(p.x + 1.0, v_rect.z) - max(p.x, v_rect.x), 0.0, 1.0) * rows(p.y);\n outColor = u_union == 1 ? vec4(v_color.rgb * coverage, coverage) : v_color * coverage;\n}\n";
33
+ /**
34
+ * Every bar program fills with its (premultiplied) colour, clipped to the
35
+ * plot: a pixel the plot's edge cuts gets the share inside, as a 2D clip
36
+ * antialiases an edge at a fractional pixel ratio.
37
+ */
38
+ export declare const FILL_FS = "#version 300 es\nprecision highp float;\nuniform vec2 u_canvas;\nuniform vec4 u_clip;\nin vec4 v_color;\nout vec4 outColor;\n\nvoid main() {\n vec2 p = vec2(floor(gl_FragCoord.x), u_canvas.y - floor(gl_FragCoord.y) - 1.0);\n vec2 c = clamp(min(p + 1.0, u_clip.zw) - max(p, u_clip.xy), 0.0, 1.0);\n outColor = v_color * (c.x * c.y);\n}\n";
39
+ //# sourceMappingURL=shaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaders.d.ts","sourceRoot":"","sources":["../../src/webgl/shaders.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8CH,iFAAiF;AACjF,eAAO,MAAM,cAAc,wxEAyC1B,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,cAAc,y6DAsB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,8pDAe7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,ozDAkB7B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,u/CAcnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,mrCAiCnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,wVAYnB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Strokes as the GPU draws them: round where segments join. Canvas 2D joins
3
+ * by `lineJoin` (miter by default); the two differ only at the outside of a
4
+ * turn, and only by a sliver until the turn gets sharp.
5
+ */
6
+ /** A line to stroke: x, y pairs in device pixels. */
7
+ export interface Polyline {
8
+ points: number[];
9
+ closed: boolean;
10
+ }
11
+ /**
12
+ * Whether a join of `line` turns sharply enough that a `join` join of half
13
+ * width `hw` would visibly differ from a round one. A miter reaches
14
+ * hw / cos(θ/2) out at a turn of θ (bevelled past `miterLimit`), a bevel
15
+ * stops at hw·cos(θ/2); a round join reaches hw.
16
+ */
17
+ export declare function hasSharpJoin(line: Polyline, hw: number, join: CanvasLineJoin, miterLimit: number): boolean;
18
+ /** Whether some segment of `line` is shorter than `length`. */
19
+ export declare function hasShortSegment(line: Polyline, length: number): boolean;
20
+ /**
21
+ * The lines packed for the stroke shader: x, y, w, cum per point, where w is
22
+ * 1 for a point of the line, 0 for a neighbour only (a closed line's corners
23
+ * repeated around its seam), -1 for a break; cum is the length along the
24
+ * line so far. Two points come before the first segment and two after the
25
+ * last, so each segment sees two neighbours either side.
26
+ */
27
+ export declare function packStroke(lines: readonly Polyline[]): number[];
28
+ //# sourceMappingURL=strokeGeometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strokeGeometry.d.ts","sourceRoot":"","sources":["../../src/webgl/strokeGeometry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAKD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAsB1G;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,EAAE,CA2B/D"}
@@ -0,0 +1,32 @@
1
+ import { ViewportState } from '@tradecanvas/commons';
2
+ /**
3
+ * Price-to-pixel uniforms for a frame, as `priceToYMapper` maps (linear or
4
+ * log, upright or inverted). Prices reach the GPU relative to a base price.
5
+ */
6
+ export interface YMapping {
7
+ log: number;
8
+ invert: number;
9
+ /** Linear: y = yA + rel * yB. */
10
+ yA: number;
11
+ yB: number;
12
+ /** Log: the base price less the lowest price, and the lowest price. */
13
+ logOffset: number;
14
+ min: number;
15
+ /** Log: the smallest price ratio to the lowest price taken, as `priceToYMapper` floors prices at `Number.EPSILON`. */
16
+ logFloor: number;
17
+ logK: number;
18
+ top: number;
19
+ bottom: number;
20
+ }
21
+ export declare function yMapping(viewport: ViewportState, base: number): YMapping;
22
+ /**
23
+ * The CSS-pixel y the shaders compute for a price `rel` above the base
24
+ * (`cssY` in shaders.ts), step by step; `f` rounds each step, as float32
25
+ * does on the GPU (identity for double precision).
26
+ *
27
+ * Log scale goes through log(1 + (price − min) / min) rather than
28
+ * log(price) − log(min): float32 keeps the small difference exactly where
29
+ * the two large logarithms would lose it.
30
+ */
31
+ export declare function mappedY(m: YMapping, rel: number, f?: (x: number) => number): number;
32
+ //# sourceMappingURL=yMapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yMapping.d.ts","sourceRoot":"","sources":["../../src/webgl/yMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,sHAAsH;IACtH,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAgBxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAiB,GAAG,MAAM,CAO7F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradecanvas/core",
3
- "version": "1.4.0",
3
+ "version": "1.10.0",
4
4
  "type": "module",
5
5
  "description": "Canvas rendering engine for @tradecanvas/chart",
6
6
  "license": "MIT",
@@ -34,7 +34,7 @@
34
34
  "README.md"
35
35
  ],
36
36
  "dependencies": {
37
- "@tradecanvas/commons": "1.4.0"
37
+ "@tradecanvas/commons": "1.10.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "jsdom": "^25.0.1",