@tradecanvas/core 1.7.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 (136) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +107 -107
  3. package/dist/WebGLSeriesRenderer-DQOPCwno.js +1643 -0
  4. package/dist/WebGLSeriesRenderer-DQOPCwno.js.map +1 -0
  5. package/dist/WebGLSeriesRenderer-DspCYR38.cjs +429 -0
  6. package/dist/WebGLSeriesRenderer-DspCYR38.cjs.map +1 -0
  7. package/dist/axis/GridRenderer.d.ts.map +1 -1
  8. package/dist/axis/PriceAxis.d.ts +3 -1
  9. package/dist/axis/PriceAxis.d.ts.map +1 -1
  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/HollowCandleRenderer.d.ts.map +1 -1
  16. package/dist/charts/VolumeRenderer.d.ts +6 -3
  17. package/dist/charts/VolumeRenderer.d.ts.map +1 -1
  18. package/dist/charts/denseBars.d.ts.map +1 -1
  19. package/dist/charts/pixelGrid.d.ts +49 -0
  20. package/dist/charts/pixelGrid.d.ts.map +1 -0
  21. package/dist/drawings/DrawingBase.d.ts +4 -0
  22. package/dist/drawings/DrawingBase.d.ts.map +1 -1
  23. package/dist/drawings/DrawingRenderer.d.ts +2 -2
  24. package/dist/drawings/DrawingRenderer.d.ts.map +1 -1
  25. package/dist/drawings/tools/CrossLine.d.ts.map +1 -1
  26. package/dist/drawings/tools/DateRange.d.ts.map +1 -1
  27. package/dist/drawings/tools/ElliottWave.d.ts.map +1 -1
  28. package/dist/drawings/tools/FibChannel.d.ts.map +1 -1
  29. package/dist/drawings/tools/FibExtension.d.ts.map +1 -1
  30. package/dist/drawings/tools/FibRetracement.d.ts.map +1 -1
  31. package/dist/drawings/tools/FibSpeedResistanceFan.d.ts.map +1 -1
  32. package/dist/drawings/tools/FibTimeZones.d.ts.map +1 -1
  33. package/dist/drawings/tools/GannBox.d.ts.map +1 -1
  34. package/dist/drawings/tools/GannFan.d.ts.map +1 -1
  35. package/dist/drawings/tools/HorizontalLine.d.ts.map +1 -1
  36. package/dist/drawings/tools/HorizontalRay.d.ts.map +1 -1
  37. package/dist/drawings/tools/RiskReward.d.ts.map +1 -1
  38. package/dist/drawings/tools/TextAnnotation.d.ts.map +1 -1
  39. package/dist/drawings/tools/TrendAngle.d.ts.map +1 -1
  40. package/dist/drawings/tools/VerticalLine.d.ts.map +1 -1
  41. package/dist/drawings/tools/annotations.d.ts.map +1 -1
  42. package/dist/drawings/tools/fibGeometry.d.ts.map +1 -1
  43. package/dist/drawings/tools/labels.d.ts +26 -0
  44. package/dist/drawings/tools/labels.d.ts.map +1 -1
  45. package/dist/drawings/tools/options.d.ts +8 -0
  46. package/dist/drawings/tools/options.d.ts.map +1 -1
  47. package/dist/drawings/tools/priceLevels.d.ts.map +1 -1
  48. package/dist/drawings/tools/textBox.d.ts.map +1 -1
  49. package/dist/engine/LayerManager.d.ts +23 -0
  50. package/dist/engine/LayerManager.d.ts.map +1 -1
  51. package/dist/engine/RenderEngine.d.ts +32 -3
  52. package/dist/engine/RenderEngine.d.ts.map +1 -1
  53. package/dist/engine/gpu.d.ts +83 -0
  54. package/dist/engine/gpu.d.ts.map +1 -0
  55. package/dist/engine/index.d.ts +2 -0
  56. package/dist/engine/index.d.ts.map +1 -1
  57. package/dist/engine/loadWebGL.d.ts +9 -0
  58. package/dist/engine/loadWebGL.d.ts.map +1 -0
  59. package/dist/engine/plotSteps.d.ts +39 -0
  60. package/dist/engine/plotSteps.d.ts.map +1 -0
  61. package/dist/gridLines-J41F0DQ6.cjs +2 -0
  62. package/dist/gridLines-J41F0DQ6.cjs.map +1 -0
  63. package/dist/gridLines-kFhXyH-u.js +218 -0
  64. package/dist/gridLines-kFhXyH-u.js.map +1 -0
  65. package/dist/index.cjs +10 -10
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.js +2982 -2683
  68. package/dist/index.js.map +1 -1
  69. package/dist/indicators/IndicatorBase.d.ts.map +1 -1
  70. package/dist/indicators/IndicatorEngine.d.ts +2 -0
  71. package/dist/indicators/IndicatorEngine.d.ts.map +1 -1
  72. package/dist/indicators/linePen.d.ts +38 -0
  73. package/dist/indicators/linePen.d.ts.map +1 -0
  74. package/dist/indicators/overlay/Alligator.d.ts.map +1 -1
  75. package/dist/indicators/overlay/AnchoredVWAP.d.ts.map +1 -1
  76. package/dist/indicators/overlay/BollingerBands.d.ts.map +1 -1
  77. package/dist/indicators/overlay/EMA.d.ts.map +1 -1
  78. package/dist/indicators/overlay/HullMA.d.ts.map +1 -1
  79. package/dist/indicators/overlay/MTFMovingAverage.d.ts.map +1 -1
  80. package/dist/indicators/overlay/SMA.d.ts.map +1 -1
  81. package/dist/indicators/overlay/SessionVWAP.d.ts.map +1 -1
  82. package/dist/indicators/overlay/Supertrend.d.ts.map +1 -1
  83. package/dist/indicators/overlay/TEMA.d.ts.map +1 -1
  84. package/dist/indicators/overlay/VWAP.d.ts.map +1 -1
  85. package/dist/indicators/overlay/VWMA.d.ts.map +1 -1
  86. package/dist/indicators/overlay/WMA.d.ts.map +1 -1
  87. package/dist/indicators/plots.d.ts.map +1 -1
  88. package/dist/interaction/CrosshairHandler.d.ts.map +1 -1
  89. package/dist/interaction/InteractionManager.d.ts.map +1 -1
  90. package/dist/trading/PositionRenderer.d.ts.map +1 -1
  91. package/dist/trading/TradingDragHandler.d.ts.map +1 -1
  92. package/dist/trading/TradingManager.d.ts +3 -0
  93. package/dist/trading/TradingManager.d.ts.map +1 -1
  94. package/dist/trading/TradingRenderer.d.ts +2 -0
  95. package/dist/trading/TradingRenderer.d.ts.map +1 -1
  96. package/dist/trading/plot.d.ts +4 -0
  97. package/dist/trading/plot.d.ts.map +1 -0
  98. package/dist/ui/SessionBreaks.d.ts +10 -0
  99. package/dist/ui/SessionBreaks.d.ts.map +1 -1
  100. package/dist/ui/SessionShading.d.ts +3 -0
  101. package/dist/ui/SessionShading.d.ts.map +1 -1
  102. package/dist/ui/Watermark.d.ts +2 -0
  103. package/dist/ui/Watermark.d.ts.map +1 -1
  104. package/dist/ui/axisValueLabels.d.ts +17 -0
  105. package/dist/ui/axisValueLabels.d.ts.map +1 -1
  106. package/dist/ui/index.d.ts +2 -1
  107. package/dist/ui/index.d.ts.map +1 -1
  108. package/dist/webgl/WebGLSeriesRenderer.d.ts +70 -0
  109. package/dist/webgl/WebGLSeriesRenderer.d.ts.map +1 -0
  110. package/dist/webgl/commandDrawer.d.ts +31 -0
  111. package/dist/webgl/commandDrawer.d.ts.map +1 -0
  112. package/dist/webgl/glColor.d.ts +13 -0
  113. package/dist/webgl/glColor.d.ts.map +1 -0
  114. package/dist/webgl/glKit.d.ts +26 -0
  115. package/dist/webgl/glKit.d.ts.map +1 -0
  116. package/dist/webgl/index.d.ts +5 -0
  117. package/dist/webgl/index.d.ts.map +1 -0
  118. package/dist/webgl/polygonSpans.d.ts +20 -0
  119. package/dist/webgl/polygonSpans.d.ts.map +1 -0
  120. package/dist/webgl/recordedCommands.d.ts +75 -0
  121. package/dist/webgl/recordedCommands.d.ts.map +1 -0
  122. package/dist/webgl/recordedPath.d.ts +51 -0
  123. package/dist/webgl/recordedPath.d.ts.map +1 -0
  124. package/dist/webgl/recordedShaders.d.ts +38 -0
  125. package/dist/webgl/recordedShaders.d.ts.map +1 -0
  126. package/dist/webgl/recorder.d.ts +67 -0
  127. package/dist/webgl/recorder.d.ts.map +1 -0
  128. package/dist/webgl/seriesUploads.d.ts +40 -0
  129. package/dist/webgl/seriesUploads.d.ts.map +1 -0
  130. package/dist/webgl/shaders.d.ts +39 -0
  131. package/dist/webgl/shaders.d.ts.map +1 -0
  132. package/dist/webgl/strokeGeometry.d.ts +28 -0
  133. package/dist/webgl/strokeGeometry.d.ts.map +1 -0
  134. package/dist/webgl/yMapping.d.ts +32 -0
  135. package/dist/webgl/yMapping.d.ts.map +1 -0
  136. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"FibTimeZones.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/FibTimeZones.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAkC,CAAC;AAE/D,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;;;;;;;;MAKR;IAEF,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAiCP,OAAO,CACL,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO;CAiBX"}
1
+ {"version":3,"file":"FibTimeZones.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/FibTimeZones.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAkC,CAAC;AAE/D,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;;;;;;;;MAKR;IAEF,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAiCP,OAAO,CACL,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO;CAiBX"}
@@ -1 +1 @@
1
- {"version":3,"file":"GannBox.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/GannBox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUhD,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;MAAsE;IAEhF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA6E5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAyBhG"}
1
+ {"version":3,"file":"GannBox.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/GannBox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUhD,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;MAAsE;IAEhF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA6E5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAyBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"GannFan.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/GannFan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBhD,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;MAAsE;IAEhF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAqD5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CA0BhG"}
1
+ {"version":3,"file":"GannFan.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/GannFan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBhD,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;MAAsE;IAEhF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAqD5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CA0BhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalLine.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/HorizontalLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,UAAU;;;;MAAoF;IAE9F,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,IAAI;IAI7C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAoB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAKhG"}
1
+ {"version":3,"file":"HorizontalLine.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/HorizontalLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,UAAU;;;;MAAoF;IAE9F,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,IAAI;IAI7C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAiB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAKhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRay.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/HorizontalRay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,UAAU;;;;MAAkF;IAE5F,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAK3D,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAoB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAShG"}
1
+ {"version":3,"file":"HorizontalRay.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/HorizontalRay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,UAAU;;;;MAAkF;IAE5F,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAK3D,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAiB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAShG"}
@@ -1 +1 @@
1
- {"version":3,"file":"RiskReward.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/RiskReward.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiBR;IAEF,OAAO,CAAC,QAAQ;IAehB,yFAAyF;IACzF,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,OAAO;IAQf,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAyC5G,OAAO,CAAC,aAAa;IAWZ,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAK7G,uGAAuG;IACvG,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY;IAYjF,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
1
+ {"version":3,"file":"RiskReward.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/RiskReward.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiBR;IAEF,OAAO,CAAC,QAAQ;IAehB,yFAAyF;IACzF,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,OAAO;IAQf,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAyD5G,OAAO,CAAC,aAAa;IAWZ,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAK7G,uGAAuG;IACvG,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY;IAYjF,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnnotation.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/TextAnnotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,SAAS,GAAG,MAAM,CAOpF;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,UAAU;;;;;MAA2E;IAErF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAwB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
1
+ {"version":3,"file":"TextAnnotation.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/TextAnnotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,SAAS,GAAG,MAAM,CAOpF;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,UAAU;;;;;MAA2E;IAErF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAwB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrendAngle.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/TrendAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,UAAU;;;;MAA4E;IAEtF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA0C5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAMhG"}
1
+ {"version":3,"file":"TrendAngle.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/TrendAngle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,UAAU;;;;MAA4E;IAEtF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA0C5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAMhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalLine.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/VerticalLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;MAAgF;IAE1F,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAa5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
1
+ {"version":3,"file":"VerticalLine.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/VerticalLine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,UAAU;;;;MAAgF;IAE1F,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAU5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/annotations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiChD,gFAAgF;AAChF,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;;;;;;;;;;MASR;IAEF,OAAO,CAAC,KAAK,CAAkB;IAE/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAW5G,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAUhG;AAED,wGAAwG;AACxG,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;;;MAA6F;IAEvG,OAAO,CAAC,KAAK,CAAkB;IAE/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG;AAmBD,yCAAyC;AACzC,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;MAAoE;IAE9E,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAKhG;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAU1E;AAED,4GAA4G;AAC5G,qBAAa,aAAc,SAAQ,WAAW;IAC5C,UAAU;;;;;;;;;;;;;;;;;;;;;;;;MAmBR;IAEF,OAAO,CAAC,OAAO;IAOf,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAmB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAQhG;AAED,eAAO,MAAM,WAAW,8FAA+F,CAAC;AACxH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyD3G;AAED,0EAA0E;AAC1E,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;;;;;;;;;;;;;;;;;;;;MAsBR;IAEF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAqB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAMhG"}
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/annotations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkChD,gFAAgF;AAChF,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;;;;;;;;;;MASR;IAEF,OAAO,CAAC,KAAK,CAAkB;IAE/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAW5G,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAUhG;AAED,wGAAwG;AACxG,qBAAa,WAAY,SAAQ,WAAW;IAC1C,UAAU;;;;;;MAA6F;IAEvG,OAAO,CAAC,KAAK,CAAkB;IAE/B,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAOhG;AAmBD,yCAAyC;AACzC,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;MAAoE;IAE9E,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAKhG;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAU1E;AAED,4GAA4G;AAC5G,qBAAa,aAAc,SAAQ,WAAW;IAC5C,UAAU;;;;;;;;;;;;;;;;;;;;;;;;MAmBR;IAEF,OAAO,CAAC,OAAO;IAOf,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAmB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAQhG;AAED,eAAO,MAAM,WAAW,8FAA+F,CAAC;AACxH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyD3G;AAED,0EAA0E;AAC1E,qBAAa,QAAS,SAAQ,WAAW;IACvC,UAAU;;;;;;;;;;;;;;;;;;;;;;;MAsBR;IAEF,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAqB5G,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAMhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"fibGeometry.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/fibGeometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fibGeometry.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/fibGeometry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,30 @@
1
1
  import { DrawingState, ViewportState } from '@tradecanvas/commons';
2
+ /**
3
+ * The theme the next drawing pass renders in: its background for the text
4
+ * halo, its font family for the text. Set by the drawing renderer right
5
+ * before each (synchronous) pass; none puts the defaults back.
6
+ */
7
+ export declare function setDrawingTheme(theme: {
8
+ background: string;
9
+ font?: {
10
+ family?: string;
11
+ };
12
+ } | null): void;
13
+ /** The family drawing text is set in: the theme's. */
14
+ export declare function drawingFontFamily(): string;
15
+ /** Text in drawings: the theme's type at `size` px (not the browser's default sans). */
16
+ export declare function drawingFont(size: number, weight?: 'bold'): string;
17
+ /** `fillText` with a halo of the chart's background behind the glyphs. */
18
+ export declare function fillTextWithHalo(ctx: CanvasRenderingContext2D, text: string, x: number, y: number): void;
19
+ /** Height of a label pill (CSS px). */
20
+ export declare const PILL_HEIGHT = 18;
21
+ /** Width of a pill for `text` in the current font. */
22
+ export declare function pillWidth(ctx: CanvasRenderingContext2D, text: string): number;
23
+ /**
24
+ * Text on a small rounded tag of `background`, left edge at `x`, centred on
25
+ * `centerY`, in the current font. Returns its width.
26
+ */
27
+ export declare function drawPill(ctx: CanvasRenderingContext2D, text: string, x: number, centerY: number, background: string, color?: string): number;
2
28
  /**
3
29
  * Price text in the chart's price format when it has one (`viewport`), else
4
30
  * at the precision of `ref` (defaults to the price itself).
@@ -1 +1 @@
1
- {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA2BxE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAQ,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,MAAM,CAE/F;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,MAAM,CAM5F;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAItG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAG7G;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,MAAM,EAAE,EACf,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,OAAkB,EAC7C,KAAK,UAAO,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBzD;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIlG"}
1
+ {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAaxE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,GAAG,IAAI,CAGtG;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAUxG;AAGD,uCAAuC;AACvC,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,SAAY,GAChB,MAAM,CAaR;AAsBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAQ,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,MAAM,CAE/F;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,MAAM,CAM5F;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAItG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAG7G;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,MAAM,EAAE,EACf,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,OAAkB,EAC7C,KAAK,UAAO,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBzD;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIlG"}
@@ -1,4 +1,12 @@
1
1
  import { DrawingLevel, DrawingOptionDefs } from '@tradecanvas/commons';
2
+ /**
3
+ * Each Fibonacci ratio's colour: the ends neutral, the ratios between in the
4
+ * chart's palette (shades that keep their contrast on dark and on white), so
5
+ * the levels read apart at a glance.
6
+ */
7
+ export declare const FIB_LEVEL_COLORS: Readonly<Record<number, string>>;
8
+ /** `levelList` with each ratio in its Fibonacci colour. */
9
+ export declare function fibLevelList(shown: readonly number[], hidden?: readonly number[]): DrawingLevel[];
2
10
  /** Levels from ratios: `shown` visible, `hidden` listed but off until the user turns them on. */
3
11
  export declare function levelList(shown: readonly number[], hidden?: readonly number[]): DrawingLevel[];
4
12
  /** Extend a line past its anchors, to the edge of the chart. */
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,GAAE,SAAS,MAAM,EAAO,GAAG,YAAY,EAAE,CAKlG;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,UAAQ,EAAE,KAAK,UAAQ,GAAG,iBAAiB,CAK5E;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,EAAE,iBASjC,CAAC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB7D,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,GAAE,SAAS,MAAM,EAAO,GAAG,YAAY,EAAE,CAKrG;AAED,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,GAAE,SAAS,MAAM,EAAO,GAAG,YAAY,EAAE,CAKlG;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,UAAQ,EAAE,KAAK,UAAQ,GAAG,iBAAiB,CAK5E;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,EAAE,iBASjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"priceLevels.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/priceLevels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAItF,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,sDAAsD;IACtD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,EACnB,MAAM,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAA4B,GACtD,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,IAAI,EAAE,cAAc,EACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACtC,IAAI,CAqCN;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAGT"}
1
+ {"version":3,"file":"priceLevels.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/priceLevels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKtF,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,sDAAsD;IACtD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,EACnB,MAAM,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAA4B,GACtD,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,IAAI,EAAE,cAAc,EACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACtC,IAAI,CAyCN;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAGT"}
@@ -1 +1 @@
1
- {"version":3,"file":"textBox.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/textBox.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBpG;AA8BD,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIrI;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmBtH;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,SAAI,GAAG,OAAO,CAG1F;AAKD,iFAAiF;AACjF,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAA2B;IAExC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAKjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAGlC"}
1
+ {"version":3,"file":"textBox.d.ts","sourceRoot":"","sources":["../../../src/drawings/tools/textBox.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAE5E,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBpG;AA8BD,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIrI;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmBtH;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,SAAI,GAAG,OAAO,CAG1F;AAKD,iFAAiF;AACjF,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAA2B;IAExC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAKjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAGlC"}
@@ -4,16 +4,39 @@ import { CanvasLayer } from './CanvasLayer.js';
4
4
  * Two stacked canvases: the scene (grid, series, indicators, chart objects,
5
5
  * axes) and a top canvas for pointer-tied visuals. A hover repaints only the
6
6
  * top one, and the compositor blends two surfaces instead of four.
7
+ *
8
+ * With a GPU renderer attached, its canvas (grid, sessions, bars, volume)
9
+ * goes under the scene, and under that, only while something needs it, a 2D
10
+ * background (watermark, heatmaps, profiles). Every full-size canvas costs a
11
+ * blend per frame, so the background is there only when it has something to
12
+ * show. Both share the scene's z-index and go before it in the document, so
13
+ * the scene and top keep theirs and whatever a page stacks over the chart
14
+ * stays over it.
7
15
  */
8
16
  export declare class LayerManager {
9
17
  private container;
10
18
  private scene;
11
19
  private top;
20
+ private back;
21
+ private gpuCanvas;
22
+ private size;
23
+ private dpr;
12
24
  constructor(container: HTMLElement);
13
25
  createLayers(): void;
14
26
  /** `Hover` → the top canvas; every other type → the scene canvas. */
15
27
  getLayer(type: LayerType): CanvasLayer | undefined;
28
+ /** The 2D canvas under the GPU's, made on first use; null without a GPU. */
29
+ backLayer(): CanvasLayer | null;
30
+ /** The pixel ratio the canvases were last sized for. */
31
+ getDpr(): number;
32
+ /** Remove the background canvas, if there is one. */
33
+ dropBackLayer(): void;
34
+ /** Put a GPU canvas under the scene. */
35
+ attachGpu(canvas: HTMLCanvasElement): void;
36
+ /** Take the GPU and background canvases away: back to two. */
37
+ detachGpu(): void;
16
38
  resize(size: Size, dpr: number): void;
17
39
  destroy(): void;
40
+ private sizeGpu;
18
41
  }
19
42
  //# sourceMappingURL=LayerManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LayerManager.d.ts","sourceRoot":"","sources":["../../src/engine/LayerManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,GAAG,CAA4B;gBAEnB,SAAS,EAAE,WAAW;IAE1C,YAAY,IAAI,IAAI;IAOpB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAIlD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"LayerManager.d.ts","sourceRoot":"","sources":["../../src/engine/LayerManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IAQX,OAAO,CAAC,SAAS;IAP7B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,GAAG,CAAK;gBAEI,SAAS,EAAE,WAAW;IAE1C,YAAY,IAAI,IAAI;IAOpB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAIlD,4EAA4E;IAC5E,SAAS,IAAI,WAAW,GAAG,IAAI;IAU/B,wDAAwD;IACxD,MAAM,IAAI,MAAM;IAIhB,qDAAqD;IACrD,aAAa,IAAI,IAAI;IAKrB,wCAAwC;IACxC,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAY1C,8DAA8D;IAC9D,SAAS,IAAI,IAAI;IAMjB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASrC,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,OAAO;CAYhB"}
@@ -2,6 +2,7 @@ import { LayerType, Size, ViewportState, Theme, DataSeries, Rect } from '@tradec
2
2
  import { LayerManager } from './LayerManager.js';
3
3
  import { RenderLoop } from './RenderLoop.js';
4
4
  import { DPRManager } from './DPRManager.js';
5
+ import { GpuRenderer } from './gpu.js';
5
6
  import { ChartRendererInterface } from '../charts/ChartRenderer.js';
6
7
  import { GridRenderer } from '../axis/GridRenderer.js';
7
8
  import { PriceAxis } from '../axis/PriceAxis.js';
@@ -98,6 +99,10 @@ export declare class RenderEngine {
98
99
  private renderCtx;
99
100
  private sceneLayer;
100
101
  private topLayer;
102
+ /** The GPU renderer under the scene. */
103
+ private gpu;
104
+ /** Called when the GPU context is lost and the engine has gone back to Canvas 2D. */
105
+ onGpuLost: (() => void) | null;
101
106
  /**
102
107
  * Optional hook fired AFTER the canvas layers have been resized in
103
108
  * response to a container resize. The Chart class uses this to push the
@@ -109,22 +114,46 @@ export declare class RenderEngine {
109
114
  constructor(container: HTMLElement);
110
115
  private cacheLayerRefs;
111
116
  setRenderContext(ctx: RenderContext): void;
117
+ /** Draw bars and volume with `gpu`, on its canvas under the scene. */
118
+ attachGpu(gpu: GpuRenderer): void;
119
+ /** Back to Canvas 2D for everything. */
120
+ detachGpu(): void;
121
+ /** Draw every layer now, synchronously (a screenshot reads the GPU canvas before the browser clears it). */
122
+ renderNow(): void;
123
+ /** The GPU renderer in use, if any. */
124
+ getGpu(): GpuRenderer | null;
112
125
  start(): void;
113
126
  stop(): void;
114
127
  requestRender(layer?: LayerType): void;
115
128
  private render;
116
129
  /** Everything that only changes with data, viewport or chart objects. */
117
130
  private renderScene;
131
+ /**
132
+ * With a GPU: the grid, session shading, break lines, bars and volume on
133
+ * the GPU. A watermark, heatmap or profile needs Canvas 2D: then the whole
134
+ * background goes on a 2D canvas under the GPU's, there only while needed.
135
+ * A profile goes over the volume bars, as in Canvas 2D, so then volume is
136
+ * drawn there too.
137
+ */
138
+ private renderGpu;
139
+ /** The background: grid, session shading and breaks, watermark. */
140
+ private renderBackground;
141
+ /** Run `draw` clipped to the main plot. */
142
+ private inPlot;
118
143
  /**
119
144
  * Pointer-tied visuals only — crosshair, its axis pills, the legend (it
120
145
  * shows the hovered bar), bar countdown, measure ruler, selection box.
121
146
  * A hover redraws just this thin layer, never the scene underneath.
122
147
  */
123
148
  private renderTop;
124
- /** Indicator panes: background, divider, name and the indicator itself. */
149
+ /** Each pane's drawing as steps: its background, then its levels and indicators. */
150
+ private paneSteps;
151
+ /** Indicator panes: background, divider, name and the indicator itself (what the GPU didn't draw). */
125
152
  private renderPanels;
126
- /** Price-pane indicators' latest values as tags on the price axis, under the last-price tag. */
127
- private renderOverlayValueLabels;
153
+ /** Tags fixed on the price axis: the last price, the high/low and bid/ask lines, positions and orders. */
154
+ private fixedAxisTags;
155
+ /** Overlay indicators' latest values as tags on the price axis, clear of the fixed tags. */
156
+ private overlayValueTags;
128
157
  /** Left-scale overlays' latest values as tags on the left axis. */
129
158
  private renderLeftValueLabels;
130
159
  /** An indicator's reference levels (RSI 30 / 70): faint dashed lines across its pane, under the plots. */
@@ -1 +1 @@
1
- {"version":3,"file":"RenderEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RenderEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIzF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAcxE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC7C,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,aAAa,EAAE,OAAO,oCAAoC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzF,aAAa,EAAE,OAAO,oCAAoC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzF,YAAY,EAAE,OAAO,mCAAmC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtF,YAAY,EAAE,OAAO,mCAAmC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtF,YAAY,EAAE,OAAO,mCAAmC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtF,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,OAAO,yBAAyB,EAAE,cAAc,GAAG,IAAI,CAAC;IACxE,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,qBAAqB,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7D,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD,cAAc,EAAE,OAAO,+BAA+B,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9E,mBAAmB,CAAC,EAAE,OAAO,oCAAoC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9F,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,OAAO,sCAAsC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9F,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9I,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yIAAyI;IACzI,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3G;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,OAAO,CAAC,SAAS,CAA8B;IAG/C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAE5C,SAAS,EAAE,WAAW;IAwBlC,OAAO,CAAC,cAAc;IAKtB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI;IAQtC,OAAO,CAAC,MAAM;IAmBd,yEAAyE;IACzE,OAAO,CAAC,WAAW;IAyDnB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAqBjB,2EAA2E;IAC3E,OAAO,CAAC,YAAY;IAmDpB,gGAAgG;IAChG,OAAO,CAAC,wBAAwB;IAWhC,mEAAmE;IACnE,OAAO,CAAC,qBAAqB;IAe7B,0GAA0G;IAC1G,OAAO,CAAC,YAAY;IAkBpB,uDAAuD;IACvD,OAAO,CAAC,eAAe;IA+DvB,yDAAyD;IACzD,OAAO,CAAC,oBAAoB;IAsC5B,+FAA+F;IAC/F,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"RenderEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RenderEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { ChartOptions, DataSeries, Rect, Theme, ViewportState } from '@tradecanvas/commons';
2
+ /** Which renderer draws the chart: Canvas 2D, WebGL, or WebGL where it's fast and Canvas 2D otherwise. */
3
+ export type RendererMode = NonNullable<ChartOptions['renderer']>;
4
+ /** A filled rectangle in CSS pixels, in `color` at `alpha` (as `globalAlpha` would draw it). */
5
+ export interface GpuRect {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ color: string;
11
+ alpha: number;
12
+ /** Dashed down from the top: on and off lengths in CSS pixels, as `setLineDash` lays them out. */
13
+ dash?: readonly [number, number];
14
+ }
15
+ /** What goes under the bars, unclipped: the grid, then filled rectangles (session shading, break lines). */
16
+ export interface GpuBackground {
17
+ grid: boolean;
18
+ rects: readonly GpuRect[];
19
+ }
20
+ /**
21
+ * Canvas 2D drawing recorded for the GPU, region by region (the plot, a
22
+ * pane), in the order the GPU draws it: after the bars.
23
+ */
24
+ export interface GpuRecorder {
25
+ /** Start a region of the chart, clipped to `clip` (CSS pixels). */
26
+ region(clip: Rect): GpuRegion;
27
+ }
28
+ export interface GpuRegion {
29
+ /**
30
+ * Run `draw` on a recording 2D context. True when the GPU can draw all of
31
+ * it; false when it can't, and then nothing of it is kept: draw it with
32
+ * Canvas 2D (and everything after it, to keep the order).
33
+ */
34
+ step(draw: (c: CanvasRenderingContext2D) => void): boolean;
35
+ /** The text the kept steps wrote (the GPU draws none), drawn on a 2D context. */
36
+ drawText(c: CanvasRenderingContext2D): void;
37
+ }
38
+ /** What a GPU renderer is asked to draw in a frame. */
39
+ export interface GpuFrame {
40
+ data: DataSeries;
41
+ viewport: ViewportState;
42
+ theme: Theme;
43
+ /** Device pixels per CSS pixel. */
44
+ dpr: number;
45
+ /** Draw the main series as candles. */
46
+ candles: boolean;
47
+ /** Draw volume, this share of the plot high; null for none. */
48
+ volume: {
49
+ heightRatio: number;
50
+ } | null;
51
+ /** Draw the background under the bars; null to leave it to Canvas 2D. */
52
+ background: GpuBackground | null;
53
+ /** Drawing recorded on this renderer's `recorder()`, drawn over the bars. */
54
+ recorded?: GpuRecorder | null;
55
+ }
56
+ /** What it drew: the rest is left to the 2D layers. */
57
+ export interface GpuDrawn {
58
+ series: boolean;
59
+ volume: boolean;
60
+ background: boolean;
61
+ /** Whether it drew `recorded`. */
62
+ recorded?: boolean;
63
+ }
64
+ /**
65
+ * A renderer on its own canvas, under the 2D scene: the heavy, regular
66
+ * geometry (grid, bars, volume) on the GPU. The engine falls back to Canvas
67
+ * 2D for whatever it doesn't draw, and altogether when its context is lost.
68
+ */
69
+ export interface GpuRenderer {
70
+ readonly canvas: HTMLCanvasElement;
71
+ /** A short name of the GPU, for diagnostics. */
72
+ readonly label: string;
73
+ render(frame: GpuFrame): GpuDrawn;
74
+ /**
75
+ * A recorder for this frame's drawing at `dpr`; `measure` measures text and
76
+ * draws nothing. Without one, everything past the bars is Canvas 2D.
77
+ */
78
+ recorder?(dpr: number, measure: CanvasRenderingContext2D | null): GpuRecorder;
79
+ /** Called once if the GPU context is lost (the engine then draws with Canvas 2D). */
80
+ onLost(callback: () => void): void;
81
+ destroy(): void;
82
+ }
83
+ //# sourceMappingURL=gpu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu.d.ts","sourceRoot":"","sources":["../../src/engine/gpu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEjG,0GAA0G;AAC1G,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AAEjE,gGAAgG;AAChG,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,4GAA4G;AAC5G,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,wBAAwB,KAAK,IAAI,GAAG,OAAO,CAAC;IAC3D,iFAAiF;IACjF,QAAQ,CAAC,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC7C;AAED,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvC,yEAAyE;IACzE,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC/B;AAED,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,WAAW,CAAC;IAC9E,qFAAqF;IACrF,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACnC,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -4,4 +4,6 @@ export { RenderLoop } from './RenderLoop.js';
4
4
  export { DPRManager } from './DPRManager.js';
5
5
  export { RenderEngine } from './RenderEngine.js';
6
6
  export type { RenderContext, PanelRenderInfo } from './RenderEngine.js';
7
+ export { loadWebGLRenderer } from './loadWebGL.js';
8
+ export type { GpuRenderer, GpuFrame, GpuDrawn, GpuBackground, GpuRect, GpuRecorder, GpuRegion, RendererMode } from './gpu.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { GpuRenderer } from './gpu.js';
2
+ /**
3
+ * The WebGL renderer, loaded on first use so it stays out of the main bundle.
4
+ * Null where WebGL 2 can't be had (with 'auto': nor where it only runs in
5
+ * software, slower than Canvas 2D). A failure to load (offline, a blocked
6
+ * script) is logged as a warning, not thrown: the chart draws on with Canvas 2D.
7
+ */
8
+ export declare function loadWebGLRenderer(mode: 'webgl' | 'auto'): Promise<GpuRenderer | null>;
9
+ //# sourceMappingURL=loadWebGL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadWebGL.d.ts","sourceRoot":"","sources":["../../src/engine/loadWebGL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAS3F"}
@@ -0,0 +1,39 @@
1
+ import { Rect } from '@tradecanvas/commons';
2
+ import { GpuRecorder, GpuRegion } from './gpu.js';
3
+ /** A piece of the chart's drawing, on any 2D context: the chart's own, or one recording for the GPU. */
4
+ export type DrawStep = (c: CanvasRenderingContext2D) => void;
5
+ /** A pane's drawing: its background over the whole pane, then levels and indicators below its header. */
6
+ export interface PaneSteps {
7
+ id: string;
8
+ rect: Rect;
9
+ inner: Rect;
10
+ background: DrawStep;
11
+ steps: DrawStep[];
12
+ }
13
+ /** What is left for Canvas 2D in a pane once the GPU has taken what it can. */
14
+ export interface PanePlan {
15
+ /** Whether the GPU drew the background. */
16
+ background: boolean;
17
+ /** The text of the steps the GPU drew. */
18
+ text: GpuRegion | null;
19
+ /** The steps left for Canvas 2D, in order. */
20
+ rest: DrawStep[];
21
+ }
22
+ /** Who draws what in the plot and panes this frame. */
23
+ export interface StepPlan {
24
+ /** The plot's steps left for Canvas 2D, in order. */
25
+ plot: DrawStep[];
26
+ /** The text of the plot steps the GPU drew. */
27
+ plotText: GpuRegion | null;
28
+ /** Per pane; a pane not here is drawn wholly with Canvas 2D. */
29
+ panes: Map<string, PanePlan>;
30
+ }
31
+ /** Everything with Canvas 2D. */
32
+ export declare function canvasPlan(plot: DrawStep[]): StepPlan;
33
+ /**
34
+ * Record for the GPU the longest run of steps from the start of the plot and
35
+ * of each pane that it can draw. The rest stay with Canvas 2D, drawn over it
36
+ * in the same order, so the stacking is as with Canvas 2D alone.
37
+ */
38
+ export declare function recordSteps(recorder: GpuRecorder, plotRect: Rect, plot: DrawStep[], panes: readonly PaneSteps[]): StepPlan;
39
+ //# sourceMappingURL=plotSteps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plotSteps.d.ts","sourceRoot":"","sources":["../../src/engine/plotSteps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD,wGAAwG;AACxG,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,wBAAwB,KAAK,IAAI,CAAC;AAE7D,yGAAyG;AACzG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,IAAI,CAAC;IACZ,UAAU,EAAE,QAAQ,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,+EAA+E;AAC/E,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,8CAA8C;IAC9C,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,qDAAqD;IACrD,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,gEAAgE;IAChE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC9B;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAErD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,QAAQ,CAa1H"}
@@ -0,0 +1,2 @@
1
+ let e=require(`@tradecanvas/commons`);function t(e,t){return e*(t.barWidth+t.barSpacing)-t.offset+t.chartRect.x+t.barWidth/2}function n(e,t){let{min:n,max:r}=t.priceRange,{y:i,height:a}=t.chartRect,o;if(t.logScale&&n>0&&r>0){let t=Math.log(n),s=Math.log(r)-t;if(s===0)return i+a/2;o=(Math.log(Math.max(e,2**-52))-t)/s}else{let t=r-n;if(t===0)return i+a/2;o=(e-n)/t}return i+a*(t.invertScale?o:1-o)}function r(e){let{min:t,max:n}=e.priceRange,{y:r,height:i}=e.chartRect,a=e.invertScale===!0;if(e.logScale&&t>0&&n>0){let e=Math.log(t),o=Math.log(n)-e;if(o===0)return()=>r+i/2;let s=i/o,c=r+i;return a?t=>r+(Math.log(Math.max(t,2**-52))-e)*s:t=>c-(Math.log(Math.max(t,2**-52))-e)*s}let o=n-t;if(o===0)return()=>r+i/2;let s=i/o;return a?e=>r+(e-t)*s:e=>r+(n-e)*s}function i(e,t,n,r){let{min:i,max:a}=n.priceRange,o=(a-i)/t,s=r(i+e*o),c=r(i+(e+1)*o);return{top:Math.min(s,c),height:Math.abs(s-c),mid:(s+c)/2}}function a(e,t){let n=t.barWidth+t.barSpacing;return Math.round((e-t.chartRect.x-t.barWidth/2+t.offset)/n)}function o(e,t){let{min:n,max:r}=t.priceRange,i=(e-t.chartRect.y)/t.chartRect.height,a=t.invertScale?i:1-i;if(t.logScale&&n>0&&r>0){let e=Math.log(n);return Math.exp(e+(Math.log(r)-e)*a)}return n+(r-n)*a}var s=new WeakMap;function c(e){let t=e.length;if(t<2)return 0;let n=s.get(e);if(n&&n.length===t)return n.step;let r=[];for(let n=Math.max(1,t-20);n<t;n++)r.push(e[n].time-e[n-1].time);r.sort((e,t)=>e-t);let i=Math.max(0,r[r.length>>1]);return s.set(e,{length:t,step:i}),i}function l(e){let t=c(e);return(e.length>0?e[e.length-1].time:0)>0xe8d4a51000?t:t*1e3}function u(e,t){let n=t.length;if(n===0)return e;let r=n-1;if(e>r)return t[r].time+(e-r)*c(t);if(e<0)return t[0].time+e*c(t);let i=Math.floor(e);return i===e||i>=r?t[i].time:t[i].time+(e-i)*(t[i+1].time-t[i].time)}function d(e,t){if(t.length===0)return-1;let n=t[0].time,r=t.length-1,i=t[r].time;if(e<=n||e>=i){if(e===n)return 0;if(e===i)return r;let a=c(t);return a<=0?e<n?0:r:e<n?(e-n)/a:r+(e-i)/a}let a=0,o=t.length-1;for(;a<=o;){let n=a+o>>>1;if(t[n].time===e)return n;t[n].time<e?a=n+1:o=n-1}if(a>=t.length)return t.length-1;if(o<0)return 0;let s=t[o].time,l=t[a].time,u=l===s?0:(e-s)/(l-s);return o+u}function f(e,t){let n=t.data;return n&&n.length>0?d(e,n):e}function p(e,n){return t(f(e,n),n)}function m(e,t){let n=a(e,t),r=t.data;return r&&r.length>0?u(n,r):n}function h(e){let t=typeof e.getTransform==`function`?e.getTransform():void 0;return{a:t&&Number.isFinite(t.a)&&t.a>0?t.a:1,d:t&&Number.isFinite(t.d)&&t.d>0?t.d:1,e:t&&Number.isFinite(t.e)?t.e:0,f:t&&Number.isFinite(t.f)?t.f:0}}function g(e,t){let{a:n,d:r,e:i,f:a}=h(e);e.save(),e.setTransform(1,0,0,1,0,0);try{return t({ratio:n,x:e=>Math.round(e*n+i),y:e=>Math.round(e*r+a),left:(e,t)=>Math.round(e*n+i-t/2)})}finally{e.restore()}}function _(e,t){let n=Math.max(1,Math.floor(t)),r=Math.max(n,Math.round(e*t));return(r-n)%2!=0&&--r,{body:Math.max(r,n),wick:n}}function v(e,t,n,r){let i=Math.max(1,Math.round(t*n)),a=i%2?.5:0;return{at:(Math.round(e*n+r-a)+a-r)/n,width:i/n}}function y(e,t,n){let r=h(e),i=v(t,n,r.d,r.f);return{y:i.at,width:i.width}}function b(e,t,n){let r=h(e),i=v(t,n,r.a,r.e);return{x:i.at,width:i.width}}var x=1;function S(e){return e.barWidth<1}function C(e,t,n,r,i){let a=Math.min(n,e.length-1);if(t>a)return;let o={x:0,open:0,high:0,low:0,close:0,volume:0},s=!1;for(let n=Math.max(0,t);n<=a;n++){let t=e[n],a=Math.floor(r(n));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}s&&i(o)}function w(e,t,n,i,a){let{from:o,to:s}=n.visibleRange,c=n.barWidth+n.barSpacing,l=-n.offset+n.chartRect.x+n.barWidth/2,u=r(n);g(e,n=>{let r=new Path2D,d=new Path2D;C(t,o,s,e=>e*c+l,e=>{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);(e.close>=e.open?r:d).rect(a,Math.min(t,i),o,Math.max(Math.abs(i-t),1))}),e.fillStyle=i,e.fill(r),e.fillStyle=a,e.fill(d)})}var T=80;function E(t){let{chartRect:n,priceRange:i}=t;if(i.max-i.min<=0)return{horizontal:[],vertical:[]};let a=r(t),o=[],s=(0,e.computeTickStep)(i.min,i.max,8),c=Math.ceil(i.min/s)*s;for(let e=c;e<=i.max;e+=s)o.push(Math.round(a(e))+.5);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);for(let e=p;e<=m;e++)e%d===0&&l.push(Math.round(e*u+f)+.5);return{horizontal:o,vertical:l}}Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return d}});
2
+ //# sourceMappingURL=gridLines-J41F0DQ6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridLines-J41F0DQ6.cjs","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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"}