@363045841yyt/klinechart-core 0.8.5 → 0.8.7
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.
- package/dist/config/chartSettings.d.ts +21 -2
- package/dist/config/chartSettings.d.ts.map +1 -1
- package/dist/config/chartSettings.js +9 -1
- package/dist/config/chartSettings.js.map +1 -1
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +50 -3
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +34 -23
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.d.ts +0 -3
- package/dist/data-fetchers/baostock.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.js +0 -1
- package/dist/data-fetchers/baostock.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.d.ts +13 -2
- package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.js +41 -7
- package/dist/data-fetchers/dataBuffer.js.map +1 -1
- package/dist/data-fetchers/dataBufferTypes.d.ts +11 -0
- package/dist/data-fetchers/dataBufferTypes.d.ts.map +1 -0
- package/dist/data-fetchers/dataBufferTypes.js +2 -0
- package/dist/data-fetchers/dataBufferTypes.js.map +1 -0
- package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts +4 -3
- package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
- package/dist/data-fetchers/fetcherDefinitionRegistry.js +9 -2
- package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
- package/dist/data-fetchers/gotdx/gotdx.d.ts +7 -0
- package/dist/data-fetchers/gotdx/gotdx.d.ts.map +1 -0
- package/dist/data-fetchers/gotdx/gotdx.js +7 -0
- package/dist/data-fetchers/gotdx/gotdx.js.map +1 -0
- package/dist/data-fetchers/gotdx.d.ts +0 -8
- package/dist/data-fetchers/gotdx.d.ts.map +1 -1
- package/dist/data-fetchers/gotdx.js +40 -3
- package/dist/data-fetchers/gotdx.js.map +1 -1
- package/dist/data-fetchers/hundred-mock.d.ts +0 -3
- package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
- package/dist/data-fetchers/hundred-mock.js +0 -1
- package/dist/data-fetchers/hundred-mock.js.map +1 -1
- package/dist/data-fetchers/index.d.ts +10 -8
- package/dist/data-fetchers/index.d.ts.map +1 -1
- package/dist/data-fetchers/index.js +8 -7
- package/dist/data-fetchers/index.js.map +1 -1
- package/dist/data-fetchers/router.d.ts +2 -0
- package/dist/data-fetchers/router.d.ts.map +1 -1
- package/dist/data-fetchers/router.js +8 -1
- package/dist/data-fetchers/router.js.map +1 -1
- package/dist/data-fetchers/thousand-mock.d.ts +0 -3
- package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
- package/dist/data-fetchers/thousand-mock.js +0 -1
- package/dist/data-fetchers/thousand-mock.js.map +1 -1
- package/dist/data-fetchers/timeShareBuffer.d.ts +27 -0
- package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -0
- package/dist/data-fetchers/timeShareBuffer.js +79 -0
- package/dist/data-fetchers/timeShareBuffer.js.map +1 -0
- package/dist/data-fetchers/tradingview.d.ts +0 -8
- package/dist/data-fetchers/tradingview.d.ts.map +1 -1
- package/dist/data-fetchers/tradingview.js +1 -2
- package/dist/data-fetchers/tradingview.js.map +1 -1
- package/dist/data-fetchers/types.d.ts +9 -1
- package/dist/data-fetchers/types.d.ts.map +1 -1
- package/dist/engine/chart.d.ts +29 -1
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +140 -5
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/chartTypes.d.ts +3 -0
- package/dist/engine/chartTypes.d.ts.map +1 -1
- package/dist/engine/controller/interaction.d.ts +12 -1
- package/dist/engine/controller/interaction.d.ts.map +1 -1
- package/dist/engine/controller/interaction.js +105 -14
- package/dist/engine/controller/interaction.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts +38 -11
- package/dist/engine/data/chartDataManager.d.ts.map +1 -1
- package/dist/engine/data/chartDataManager.js +491 -188
- package/dist/engine/data/chartDataManager.js.map +1 -1
- package/dist/engine/draw/pixelAlign.d.ts +0 -27
- package/dist/engine/draw/pixelAlign.d.ts.map +1 -1
- package/dist/engine/draw/pixelAlign.js +1 -1
- package/dist/engine/draw/pixelAlign.js.map +1 -1
- package/dist/engine/indicators/calculators.d.ts +0 -104
- package/dist/engine/indicators/calculators.d.ts.map +1 -1
- package/dist/engine/indicators/calculators.js +77 -171
- package/dist/engine/indicators/calculators.js.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.js +3 -2
- package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
- package/dist/engine/indicators/ichimokuState.d.ts +2 -0
- package/dist/engine/indicators/ichimokuState.d.ts.map +1 -1
- package/dist/engine/indicators/ichimokuState.js.map +1 -1
- package/dist/engine/indicators/macdState.d.ts +0 -5
- package/dist/engine/indicators/macdState.d.ts.map +1 -1
- package/dist/engine/indicators/macdState.js +1 -1
- package/dist/engine/indicators/macdState.js.map +1 -1
- package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
- package/dist/engine/indicators/registerBuiltins.js +1 -0
- package/dist/engine/indicators/registerBuiltins.js.map +1 -1
- package/dist/engine/indicators/rsiState.d.ts +0 -4
- package/dist/engine/indicators/rsiState.d.ts.map +1 -1
- package/dist/engine/indicators/rsiState.js +1 -1
- package/dist/engine/indicators/rsiState.js.map +1 -1
- package/dist/engine/indicators/scheduler.d.ts.map +1 -1
- package/dist/engine/indicators/scheduler.js +1 -7
- package/dist/engine/indicators/scheduler.js.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.d.ts +14 -0
- package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.js +34 -0
- package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
- package/dist/engine/layout/chartPaneLayout.d.ts +2 -0
- package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
- package/dist/engine/layout/chartPaneLayout.js +24 -6
- package/dist/engine/layout/chartPaneLayout.js.map +1 -1
- package/dist/engine/modes/kLineMode.d.ts +37 -0
- package/dist/engine/modes/kLineMode.d.ts.map +1 -0
- package/dist/engine/modes/kLineMode.js +22 -0
- package/dist/engine/modes/kLineMode.js.map +1 -0
- package/dist/engine/modes/timeShareMode.d.ts +37 -0
- package/dist/engine/modes/timeShareMode.d.ts.map +1 -0
- package/dist/engine/modes/timeShareMode.js +59 -0
- package/dist/engine/modes/timeShareMode.js.map +1 -0
- package/dist/engine/modes/types.d.ts +47 -0
- package/dist/engine/modes/types.d.ts.map +1 -0
- package/dist/engine/modes/types.js +2 -0
- package/dist/engine/modes/types.js.map +1 -0
- package/dist/engine/paneRenderer.d.ts +4 -0
- package/dist/engine/paneRenderer.d.ts.map +1 -1
- package/dist/engine/paneRenderer.js +27 -40
- package/dist/engine/paneRenderer.js.map +1 -1
- package/dist/engine/render/chartRenderer.d.ts +4 -23
- package/dist/engine/render/chartRenderer.d.ts.map +1 -1
- package/dist/engine/render/chartRenderer.js +87 -17
- package/dist/engine/render/chartRenderer.js.map +1 -1
- package/dist/engine/renderers/Indicator/atr.d.ts +1 -18
- package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/atr.js +3 -22
- package/dist/engine/renderers/Indicator/atr.js.map +1 -1
- package/dist/engine/renderers/Indicator/boll.d.ts +1 -4
- package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/boll.js +3 -18
- package/dist/engine/renderers/Indicator/boll.js.map +1 -1
- package/dist/engine/renderers/Indicator/cci.d.ts +1 -22
- package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cci.js +8 -20
- package/dist/engine/renderers/Indicator/cci.js.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts +1 -7
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js +3 -16
- package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.d.ts +1 -7
- package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.js +3 -15
- package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
- package/dist/engine/renderers/Indicator/dema.d.ts +1 -7
- package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/dema.js +3 -17
- package/dist/engine/renderers/Indicator/dema.js.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.d.ts +1 -8
- package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.js +2 -2
- package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
- package/dist/engine/renderers/Indicator/ene.d.ts +1 -12
- package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ene.js +3 -18
- package/dist/engine/renderers/Indicator/ene.js.map +1 -1
- package/dist/engine/renderers/Indicator/expma.d.ts +1 -4
- package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/expma.js +2 -2
- package/dist/engine/renderers/Indicator/expma.js.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.d.ts +1 -22
- package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.js +11 -64
- package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
- package/dist/engine/renderers/Indicator/fib.d.ts +1 -6
- package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fib.js +2 -2
- package/dist/engine/renderers/Indicator/fib.js.map +1 -1
- package/dist/engine/renderers/Indicator/hma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hma.js +3 -17
- package/dist/engine/renderers/Indicator/hma.js.map +1 -1
- package/dist/engine/renderers/Indicator/hv.d.ts +1 -7
- package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hv.js +3 -16
- package/dist/engine/renderers/Indicator/hv.js.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.d.ts +1 -8
- package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.js +27 -5
- package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
- package/dist/engine/renderers/Indicator/kama.d.ts +1 -7
- package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kama.js +3 -17
- package/dist/engine/renderers/Indicator/kama.js.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.d.ts +1 -8
- package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.js +2 -2
- package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
- package/dist/engine/renderers/Indicator/kst.d.ts +1 -22
- package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kst.js +2 -2
- package/dist/engine/renderers/Indicator/kst.js.map +1 -1
- package/dist/engine/renderers/Indicator/ma.d.ts +1 -4
- package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ma.js +1 -1
- package/dist/engine/renderers/Indicator/ma.js.map +1 -1
- package/dist/engine/renderers/Indicator/macd.d.ts +1 -49
- package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/macd.js +2 -12
- package/dist/engine/renderers/Indicator/macd.js.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +205 -0
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.d.ts +1 -7
- package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.js +3 -15
- package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
- package/dist/engine/renderers/Indicator/mom.d.ts +1 -22
- package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mom.js +8 -23
- package/dist/engine/renderers/Indicator/mom.js.map +1 -1
- package/dist/engine/renderers/Indicator/obv.d.ts +1 -7
- package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/obv.js +3 -14
- package/dist/engine/renderers/Indicator/obv.js.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.d.ts +1 -7
- package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.js +3 -16
- package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.d.ts +1 -6
- package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.js +2 -2
- package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.d.ts +1 -7
- package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.js +3 -14
- package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
- package/dist/engine/renderers/Indicator/roc.d.ts +1 -8
- package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/roc.js +3 -15
- package/dist/engine/renderers/Indicator/roc.js.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.d.ts +0 -32
- package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.js +3 -3
- package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
- package/dist/engine/renderers/Indicator/sar.d.ts +1 -8
- package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/sar.js +2 -2
- package/dist/engine/renderers/Indicator/sar.js.map +1 -1
- package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +2 -0
- package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/scale/indicator_scale.js +10 -6
- package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
- package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts +4 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.js +50 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.js.map +1 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +14 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.js +25 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.d.ts +5 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.js +17 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.js.map +1 -0
- package/dist/engine/renderers/Indicator/stoch.d.ts +1 -22
- package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.js +5 -46
- package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
- package/dist/engine/renderers/Indicator/structure.d.ts +1 -7
- package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/structure.js +2 -2
- package/dist/engine/renderers/Indicator/structure.js.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.d.ts +1 -8
- package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.js +2 -2
- package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
- package/dist/engine/renderers/Indicator/tema.d.ts +1 -7
- package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/tema.js +3 -17
- package/dist/engine/renderers/Indicator/tema.js.map +1 -1
- package/dist/engine/renderers/Indicator/trix.d.ts +1 -8
- package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/trix.js +2 -2
- package/dist/engine/renderers/Indicator/trix.js.map +1 -1
- package/dist/engine/renderers/Indicator/vma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vma.js +3 -15
- package/dist/engine/renderers/Indicator/vma.js.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts +1 -7
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js +2 -2
- package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.d.ts +1 -7
- package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.js +3 -14
- package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
- package/dist/engine/renderers/Indicator/wma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wma.js +3 -17
- package/dist/engine/renderers/Indicator/wma.js.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -22
- package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.js +8 -23
- package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
- package/dist/engine/renderers/Indicator/zones.d.ts +1 -6
- package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/zones.js +2 -2
- package/dist/engine/renderers/Indicator/zones.js.map +1 -1
- package/dist/engine/renderers/candle.d.ts +0 -16
- package/dist/engine/renderers/candle.d.ts.map +1 -1
- package/dist/engine/renderers/candle.js +1 -1
- package/dist/engine/renderers/candle.js.map +1 -1
- package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
- package/dist/engine/renderers/comparisonLine.js +2 -0
- package/dist/engine/renderers/comparisonLine.js.map +1 -1
- package/dist/engine/renderers/crosshair.js +1 -1
- package/dist/engine/renderers/crosshair.js.map +1 -1
- package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
- package/dist/engine/renderers/extremaMarkers.js +2 -0
- package/dist/engine/renderers/extremaMarkers.js.map +1 -1
- package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
- package/dist/engine/renderers/lastPrice.js +7 -2
- package/dist/engine/renderers/lastPrice.js.map +1 -1
- package/dist/engine/renderers/leftYAxis.d.ts +11 -0
- package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
- package/dist/engine/renderers/leftYAxis.js +67 -0
- package/dist/engine/renderers/leftYAxis.js.map +1 -0
- package/dist/engine/renderers/subVolume.d.ts +1 -13
- package/dist/engine/renderers/subVolume.d.ts.map +1 -1
- package/dist/engine/renderers/subVolume.js +1 -1
- package/dist/engine/renderers/subVolume.js.map +1 -1
- package/dist/engine/renderers/timeAxis.d.ts +0 -2
- package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
- package/dist/engine/renderers/timeAxis.js +4 -1
- package/dist/engine/renderers/timeAxis.js.map +1 -1
- package/dist/engine/renderers/timeShare.d.ts +3 -0
- package/dist/engine/renderers/timeShare.d.ts.map +1 -0
- package/dist/engine/renderers/timeShare.js +260 -0
- package/dist/engine/renderers/timeShare.js.map +1 -0
- package/dist/engine/renderers/yAxis.d.ts.map +1 -1
- package/dist/engine/renderers/yAxis.js +9 -1
- package/dist/engine/renderers/yAxis.js.map +1 -1
- package/dist/engine/scale/price.d.ts +0 -7
- package/dist/engine/scale/price.d.ts.map +1 -1
- package/dist/engine/scale/price.js +3 -2
- package/dist/engine/scale/price.js.map +1 -1
- package/dist/engine/theme/fonts.d.ts +0 -2
- package/dist/engine/theme/fonts.d.ts.map +1 -1
- package/dist/engine/theme/fonts.js +1 -1
- package/dist/engine/theme/fonts.js.map +1 -1
- package/dist/engine/utils/klineConfig.d.ts.map +1 -1
- package/dist/engine/utils/klineConfig.js +1 -5
- package/dist/engine/utils/klineConfig.js.map +1 -1
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
- package/dist/engine/viewport/chartViewportManager.js +6 -5
- package/dist/engine/viewport/chartViewportManager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/chartBridge.d.ts.map +1 -1
- package/dist/mcp/chartBridge.js +2 -1
- package/dist/mcp/chartBridge.js.map +1 -1
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js.map +1 -1
- package/dist/semantic/types.d.ts +1 -1
- package/dist/semantic/types.d.ts.map +1 -1
- package/dist/tokens/theme-base.d.ts +5 -0
- package/dist/tokens/theme-base.d.ts.map +1 -0
- package/dist/tokens/theme-base.js +31 -0
- package/dist/tokens/theme-base.js.map +1 -0
- package/dist/tokens/theme-china.d.ts.map +1 -1
- package/dist/tokens/theme-china.js +3 -0
- package/dist/tokens/theme-china.js.map +1 -1
- package/dist/tokens/theme-dark.d.ts.map +1 -1
- package/dist/tokens/theme-dark.js +12 -31
- package/dist/tokens/theme-dark.js.map +1 -1
- package/dist/tokens/theme-light.d.ts.map +1 -1
- package/dist/tokens/theme-light.js +11 -30
- package/dist/tokens/theme-light.js.map +1 -1
- package/dist/tokens/types.d.ts +7 -0
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/types/price.d.ts +8 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/price.js +4 -0
- package/dist/types/price.js.map +1 -1
- package/dist/utils/dateFormat.d.ts +5 -42
- package/dist/utils/dateFormat.d.ts.map +1 -1
- package/dist/utils/dateFormat.js +24 -4
- package/dist/utils/dateFormat.js.map +1 -1
- package/dist/utils/kLineDraw/axis.d.ts +9 -28
- package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
- package/dist/utils/kLineDraw/axis.js +33 -58
- package/dist/utils/kLineDraw/axis.js.map +1 -1
- package/dist/utils/uuid.d.ts +2 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +10 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/utils/volumePrice.d.ts +0 -40
- package/dist/utils/volumePrice.d.ts.map +1 -1
- package/dist/utils/volumePrice.js +2 -2
- package/dist/utils/volumePrice.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/config/chartSettings.ts +9 -1
- package/src/controllers/createChartController.ts +53 -3
- package/src/controllers/types.ts +36 -17
- package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
- package/src/data-fetchers/baostock.ts +1 -1
- package/src/data-fetchers/dataBuffer.ts +48 -11
- package/src/data-fetchers/dataBufferTypes.ts +11 -0
- package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
- package/src/data-fetchers/gotdx/gotdx.ts +6 -0
- package/src/data-fetchers/gotdx.ts +45 -7
- package/src/data-fetchers/hundred-mock.ts +1 -1
- package/src/data-fetchers/index.ts +10 -20
- package/src/data-fetchers/router.ts +12 -1
- package/src/data-fetchers/thousand-mock.ts +1 -1
- package/src/data-fetchers/timeShareBuffer.ts +92 -0
- package/src/data-fetchers/tradingview.ts +2 -2
- package/src/data-fetchers/types.ts +15 -2
- package/src/engine/__tests__/chart.dpr.test.ts +1 -0
- package/src/engine/chart.ts +157 -7
- package/src/engine/chartTypes.ts +3 -0
- package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
- package/src/engine/controller/interaction.ts +115 -16
- package/src/engine/data/chartDataManager.ts +557 -214
- package/src/engine/draw/pixelAlign.ts +1 -1
- package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
- package/src/engine/indicators/__tests__/ichimoku.test.ts +3 -3
- package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
- package/src/engine/indicators/calculators.ts +105 -236
- package/src/engine/indicators/chartIndicatorManager.ts +3 -2
- package/src/engine/indicators/ichimokuState.ts +2 -0
- package/src/engine/indicators/macdState.ts +1 -1
- package/src/engine/indicators/registerBuiltins.ts +1 -0
- package/src/engine/indicators/rsiState.ts +1 -1
- package/src/engine/indicators/scheduler.ts +1 -7
- package/src/engine/indicators/visibleStateComposers.ts +51 -0
- package/src/engine/layout/chartPaneLayout.ts +26 -6
- package/src/engine/modes/kLineMode.ts +57 -0
- package/src/engine/modes/timeShareMode.ts +95 -0
- package/src/engine/modes/types.ts +63 -0
- package/src/engine/paneRenderer.ts +37 -46
- package/src/engine/render/chartRenderer.ts +93 -20
- package/src/engine/renderers/Indicator/atr.ts +4 -29
- package/src/engine/renderers/Indicator/boll.ts +3 -24
- package/src/engine/renderers/Indicator/cci.ts +9 -27
- package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
- package/src/engine/renderers/Indicator/cmf.ts +3 -22
- package/src/engine/renderers/Indicator/dema.ts +5 -26
- package/src/engine/renderers/Indicator/donchian.ts +3 -3
- package/src/engine/renderers/Indicator/ene.ts +3 -24
- package/src/engine/renderers/Indicator/expma.ts +2 -2
- package/src/engine/renderers/Indicator/fastk.ts +12 -95
- package/src/engine/renderers/Indicator/fib.ts +2 -2
- package/src/engine/renderers/Indicator/hma.ts +5 -26
- package/src/engine/renderers/Indicator/hv.ts +3 -23
- package/src/engine/renderers/Indicator/ichimoku.ts +26 -6
- package/src/engine/renderers/Indicator/kama.ts +5 -26
- package/src/engine/renderers/Indicator/keltner.ts +3 -3
- package/src/engine/renderers/Indicator/kst.ts +3 -3
- package/src/engine/renderers/Indicator/ma.ts +1 -1
- package/src/engine/renderers/Indicator/macd.ts +4 -21
- package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +228 -1
- package/src/engine/renderers/Indicator/mfi.ts +3 -22
- package/src/engine/renderers/Indicator/mom.ts +9 -30
- package/src/engine/renderers/Indicator/obv.ts +3 -21
- package/src/engine/renderers/Indicator/parkinson.ts +3 -23
- package/src/engine/renderers/Indicator/pivot.ts +2 -2
- package/src/engine/renderers/Indicator/pvt.ts +3 -21
- package/src/engine/renderers/Indicator/roc.ts +4 -23
- package/src/engine/renderers/Indicator/rsi.ts +4 -4
- package/src/engine/renderers/Indicator/sar.ts +3 -3
- package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
- package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
- package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
- package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
- package/src/engine/renderers/Indicator/stoch.ts +6 -71
- package/src/engine/renderers/Indicator/structure.ts +2 -2
- package/src/engine/renderers/Indicator/supertrend.ts +3 -3
- package/src/engine/renderers/Indicator/tema.ts +5 -26
- package/src/engine/renderers/Indicator/trix.ts +3 -3
- package/src/engine/renderers/Indicator/vma.ts +3 -22
- package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
- package/src/engine/renderers/Indicator/vwap.ts +3 -21
- package/src/engine/renderers/Indicator/wma.ts +5 -26
- package/src/engine/renderers/Indicator/wmsr.ts +9 -30
- package/src/engine/renderers/Indicator/zones.ts +2 -2
- package/src/engine/renderers/candle.ts +1 -1
- package/src/engine/renderers/comparisonLine.ts +1 -0
- package/src/engine/renderers/crosshair.ts +1 -1
- package/src/engine/renderers/extremaMarkers.ts +1 -0
- package/src/engine/renderers/lastPrice.ts +5 -2
- package/src/engine/renderers/leftYAxis.ts +77 -0
- package/src/engine/renderers/subVolume.ts +3 -3
- package/src/engine/renderers/timeAxis.ts +16 -13
- package/src/engine/renderers/timeShare.ts +271 -0
- package/src/engine/renderers/yAxis.ts +9 -1
- package/src/engine/scale/price.ts +2 -2
- package/src/engine/theme/fonts.ts +1 -1
- package/src/engine/utils/klineConfig.ts +1 -5
- package/src/engine/viewport/chartViewportManager.ts +6 -5
- package/src/index.ts +1 -0
- package/src/mcp/chartBridge.ts +2 -1
- package/src/plugin/types.ts +1 -0
- package/src/semantic/types.ts +1 -1
- package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +15 -1
- package/src/tokens/theme-base.ts +36 -0
- package/src/tokens/theme-china.ts +4 -0
- package/src/tokens/theme-dark.ts +13 -33
- package/src/tokens/theme-light.ts +13 -33
- package/src/tokens/types.ts +9 -0
- package/src/types/price.ts +13 -0
- package/src/utils/dateFormat.ts +27 -4
- package/src/utils/kLineDraw/axis.ts +40 -107
- package/src/utils/uuid.ts +8 -0
- package/src/utils/volumePrice.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ChartModeHandler } from './types';
|
|
2
|
+
import type { Pane, VisibleRange } from '../layout/pane';
|
|
3
|
+
import type { ChartDataManager } from '../data/chartDataManager';
|
|
4
|
+
export declare class TimeShareMode implements ChartModeHandler {
|
|
5
|
+
readonly debugName = "TimeShare";
|
|
6
|
+
readonly allowPan = false;
|
|
7
|
+
readonly allowZoom = false;
|
|
8
|
+
readonly allowVerticalScroll = false;
|
|
9
|
+
readonly allowRightAxisScale = false;
|
|
10
|
+
readonly useIndicatorScheduler = false;
|
|
11
|
+
computeContentWidth(_dataLength: number, leftBufferWidth: number, viewWidth: number, _opt: {
|
|
12
|
+
kWidth: number;
|
|
13
|
+
kGap: number;
|
|
14
|
+
}, _dpr: number): number | null;
|
|
15
|
+
computeKWidth(dataLength: number, viewWidth: number, dpr: number): {
|
|
16
|
+
kWidth: number;
|
|
17
|
+
kGap: number;
|
|
18
|
+
} | null;
|
|
19
|
+
updatePaneRange(pane: Pane, range: VisibleRange, dm: ChartDataManager, _mergedIndicatorRange?: {
|
|
20
|
+
min: number;
|
|
21
|
+
max: number;
|
|
22
|
+
} | null): void;
|
|
23
|
+
onActivate(chart: {
|
|
24
|
+
enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean;
|
|
25
|
+
disableMainIndicator: (id: string) => boolean;
|
|
26
|
+
setRendererEnabled: (name: string, enabled: boolean) => void;
|
|
27
|
+
dataManager: ChartDataManager;
|
|
28
|
+
currentPeriod: string;
|
|
29
|
+
}, _prev: ChartModeHandler | null): void;
|
|
30
|
+
onDeactivate(chart: {
|
|
31
|
+
enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean;
|
|
32
|
+
disableMainIndicator: (id: string) => boolean;
|
|
33
|
+
setRendererEnabled: (name: string, enabled: boolean) => void;
|
|
34
|
+
dataManager: ChartDataManager;
|
|
35
|
+
}, _next: ChartModeHandler | null): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=timeShareMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeShareMode.d.ts","sourceRoot":"","sources":["../../../src/engine/modes/timeShareMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,SAAS,eAAc;IAEhC,QAAQ,CAAC,QAAQ,SAAQ;IACzB,QAAQ,CAAC,SAAS,SAAQ;IAC1B,QAAQ,CAAC,mBAAmB,SAAQ;IACpC,QAAQ,CAAC,mBAAmB,SAAQ;IACpC,QAAQ,CAAC,qBAAqB,SAAQ;IAEtC,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACtC,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI;IAIhB,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAc1C,eAAe,CACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,gBAAgB,EACpB,qBAAqB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAC1D,IAAI;IA4BP,UAAU,CAAC,KAAK,EAAE;QAChB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,OAAO,CAAA;QAChG,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;QAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;QAC5D,WAAW,EAAE,gBAAgB,CAAA;QAC7B,aAAa,EAAE,MAAM,CAAA;KACtB,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAKxC,YAAY,CAAC,KAAK,EAAE;QAClB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,OAAO,CAAA;QAChG,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;QAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;QAC5D,WAAW,EAAE,gBAAgB,CAAA;KAC9B,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;CAIzC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export class TimeShareMode {
|
|
2
|
+
debugName = 'TimeShare';
|
|
3
|
+
allowPan = false;
|
|
4
|
+
allowZoom = false;
|
|
5
|
+
allowVerticalScroll = false;
|
|
6
|
+
allowRightAxisScale = false;
|
|
7
|
+
useIndicatorScheduler = false;
|
|
8
|
+
computeContentWidth(_dataLength, leftBufferWidth, viewWidth, _opt, _dpr) {
|
|
9
|
+
return leftBufferWidth + Math.max(viewWidth, 1);
|
|
10
|
+
}
|
|
11
|
+
computeKWidth(dataLength, viewWidth, dpr) {
|
|
12
|
+
if (dataLength <= 0 || viewWidth <= 0)
|
|
13
|
+
return null;
|
|
14
|
+
const kGapPx = 1;
|
|
15
|
+
const totalGapPx = (dataLength + 1) * kGapPx;
|
|
16
|
+
const availablePx = Math.max(1, viewWidth * dpr - totalGapPx);
|
|
17
|
+
let kWidthPx = Math.max(1, Math.floor(availablePx / dataLength));
|
|
18
|
+
return {
|
|
19
|
+
kWidth: kWidthPx / dpr,
|
|
20
|
+
kGap: kGapPx / dpr,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
updatePaneRange(pane, range, dm, _mergedIndicatorRange) {
|
|
24
|
+
const tsData = dm.getTimeShareData();
|
|
25
|
+
const end = Math.min(range.end, tsData.length);
|
|
26
|
+
if (tsData.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
const baseline = tsData[0]?.price ?? 0;
|
|
29
|
+
if (baseline === 0)
|
|
30
|
+
return;
|
|
31
|
+
pane.yAxis.setScaleType('percent');
|
|
32
|
+
pane.yAxis.setBasePrice(baseline);
|
|
33
|
+
let maxAbsPct = 0;
|
|
34
|
+
for (let i = Math.max(0, range.start); i < end; i++) {
|
|
35
|
+
const p = tsData[i]?.price;
|
|
36
|
+
if (p !== undefined && Number.isFinite(p)) {
|
|
37
|
+
const pct = Math.abs((p - baseline) / baseline) * 100;
|
|
38
|
+
if (pct > maxAbsPct)
|
|
39
|
+
maxAbsPct = pct;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (maxAbsPct <= 0)
|
|
43
|
+
return;
|
|
44
|
+
const padding = Math.max(maxAbsPct * 0.1, 0.5);
|
|
45
|
+
const displayPct = maxAbsPct + padding;
|
|
46
|
+
const minPrice = baseline * (1 - displayPct / 100);
|
|
47
|
+
const maxPrice = baseline * (1 + displayPct / 100);
|
|
48
|
+
pane.yAxis.setRange({ maxPrice, minPrice });
|
|
49
|
+
}
|
|
50
|
+
onActivate(chart, _prev) {
|
|
51
|
+
chart.enableMainIndicator('timeShare');
|
|
52
|
+
chart.setRendererEnabled('candle', false);
|
|
53
|
+
}
|
|
54
|
+
onDeactivate(chart, _next) {
|
|
55
|
+
chart.disableMainIndicator('timeShare');
|
|
56
|
+
chart.setRendererEnabled('candle', true);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=timeShareMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeShareMode.js","sourceRoot":"","sources":["../../../src/engine/modes/timeShareMode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Pane } from '../layout/pane';
|
|
2
|
+
import type { ChartDataManager } from '../data/chartDataManager';
|
|
3
|
+
import type { VisibleRange } from '../layout/pane';
|
|
4
|
+
export interface ChartModeHandler {
|
|
5
|
+
readonly debugName: string;
|
|
6
|
+
/** 是否允许水平拖拽平移 */
|
|
7
|
+
readonly allowPan: boolean;
|
|
8
|
+
/** 是否允许缩放(滚轮/捏合/API) */
|
|
9
|
+
readonly allowZoom: boolean;
|
|
10
|
+
/** 是否允许主图垂直滚动 */
|
|
11
|
+
readonly allowVerticalScroll: boolean;
|
|
12
|
+
/** 是否允许右轴价格缩放 */
|
|
13
|
+
readonly allowRightAxisScale: boolean;
|
|
14
|
+
/** 是否使用指标调度器(计算 MA/BOLL 等技术指标) */
|
|
15
|
+
readonly useIndicatorScheduler: boolean;
|
|
16
|
+
/** 计算内容宽度(CSS px)。返回 null 走标准可滚动计算 */
|
|
17
|
+
computeContentWidth(dataLength: number, leftBufferWidth: number, viewWidth: number, opt: {
|
|
18
|
+
kWidth: number;
|
|
19
|
+
kGap: number;
|
|
20
|
+
}, dpr: number): number | null;
|
|
21
|
+
/** 计算 K 线宽度/间距。返回 null 走标准缩放计算 */
|
|
22
|
+
computeKWidth(dataLength: number, viewWidth: number, dpr: number): {
|
|
23
|
+
kWidth: number;
|
|
24
|
+
kGap: number;
|
|
25
|
+
} | null;
|
|
26
|
+
/** 更新 Pane 的价格范围 */
|
|
27
|
+
updatePaneRange(pane: Pane, range: VisibleRange, dm: ChartDataManager, mergedIndicatorRange?: {
|
|
28
|
+
min: number;
|
|
29
|
+
max: number;
|
|
30
|
+
} | null): void;
|
|
31
|
+
/** 激活时调用 */
|
|
32
|
+
onActivate(chart: {
|
|
33
|
+
enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean;
|
|
34
|
+
disableMainIndicator: (id: string) => boolean;
|
|
35
|
+
setRendererEnabled: (name: string, enabled: boolean) => void;
|
|
36
|
+
dataManager: ChartDataManager;
|
|
37
|
+
currentPeriod: string;
|
|
38
|
+
}, prev: ChartModeHandler | null): void;
|
|
39
|
+
/** 停用时调用 */
|
|
40
|
+
onDeactivate(chart: {
|
|
41
|
+
enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean;
|
|
42
|
+
disableMainIndicator: (id: string) => boolean;
|
|
43
|
+
setRendererEnabled: (name: string, enabled: boolean) => void;
|
|
44
|
+
dataManager: ChartDataManager;
|
|
45
|
+
}, next: ChartModeHandler | null): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/modes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B,iBAAiB;IACjB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B,wBAAwB;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAE3B,iBAAiB;IACjB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IAErC,iBAAiB;IACjB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IAErC,kCAAkC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;IAEvC,sCAAsC;IACtC,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACrC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAAA;IAEhB,kCAAkC;IAClC,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAE1C,oBAAoB;IACpB,eAAe,CACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,gBAAgB,EACpB,oBAAoB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GACzD,IAAI,CAAA;IAEP,YAAY;IACZ,UAAU,CAAC,KAAK,EAAE;QAChB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,OAAO,CAAA;QAChG,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;QAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;QAC5D,WAAW,EAAE,gBAAgB,CAAA;QAC7B,aAAa,EAAE,MAAM,CAAA;KACtB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAA;IAEvC,YAAY;IACZ,YAAY,CAAC,KAAK,EAAE;QAClB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,OAAO,CAAA;QAChG,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;QAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;QAC5D,WAAW,EAAE,gBAAgB,CAAA;KAC9B,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAA;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engine/modes/types.ts"],"names":[],"mappings":""}
|
|
@@ -4,14 +4,17 @@ export type PaneRendererDom = {
|
|
|
4
4
|
mainCanvas: HTMLCanvasElement;
|
|
5
5
|
overlayCanvas: HTMLCanvasElement;
|
|
6
6
|
yAxisCanvas: HTMLCanvasElement;
|
|
7
|
+
leftYAxisCanvas?: HTMLCanvasElement;
|
|
7
8
|
};
|
|
8
9
|
export type PaneRendererContexts = {
|
|
9
10
|
mainCtx: CanvasRenderingContext2D | null;
|
|
10
11
|
overlayCtx: CanvasRenderingContext2D | null;
|
|
11
12
|
yAxisCtx: CanvasRenderingContext2D | null;
|
|
13
|
+
leftAxisCtx: CanvasRenderingContext2D | null;
|
|
12
14
|
};
|
|
13
15
|
export type PaneRendererOptions = {
|
|
14
16
|
rightAxisWidth: number;
|
|
17
|
+
leftAxisWidth: number;
|
|
15
18
|
yPaddingPx: number;
|
|
16
19
|
priceLabelWidth?: number;
|
|
17
20
|
};
|
|
@@ -31,6 +34,7 @@ export declare class PaneRenderer {
|
|
|
31
34
|
/** 获取 DOM 元素 */
|
|
32
35
|
getDom(): PaneRendererDom;
|
|
33
36
|
getContexts(): PaneRendererContexts;
|
|
37
|
+
private static resizeCanvas;
|
|
34
38
|
getWebGL(): PaneRendererWebGLHandles;
|
|
35
39
|
setWebGLRegion(region: WebGLRegion): void;
|
|
36
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paneRenderer.d.ts","sourceRoot":"","sources":["../../src/engine/paneRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAE3F,MAAM,MAAM,eAAe,GAAG;IAC1B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,aAAa,EAAE,iBAAiB,CAAA;IAChC,WAAW,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"paneRenderer.d.ts","sourceRoot":"","sources":["../../src/engine/paneRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAE3F,MAAM,MAAM,eAAe,GAAG;IAC1B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,aAAa,EAAE,iBAAiB,CAAA;IAChC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,eAAe,CAAC,EAAE,iBAAiB,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACxC,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAAA;IAC3C,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACzC,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACxC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACvC,CAAA;AAOD,qBAAa,YAAY;IACrB,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,KAAK,CAA0B;gBAGnC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,OAAO,eAAe,EAAE,IAAI,EAClC,GAAG,EAAE,mBAAmB,EACxB,kBAAkB,EAAE,kBAAkB;IAc1C,oBAAoB;IACpB,OAAO,IAAI,OAAO,eAAe,EAAE,IAAI;IAIvC,gBAAgB;IAChB,MAAM,IAAI,eAAe;IAIzB,WAAW,IAAI,oBAAoB;IAYnC,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B,QAAQ,IAAI,wBAAwB;IAIpC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKzC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAmCjD,yBAAyB;IACzB,OAAO;CAKV"}
|
|
@@ -36,10 +36,27 @@ export class PaneRenderer {
|
|
|
36
36
|
mainCtx: this.dom.mainCanvas.getContext('2d'),
|
|
37
37
|
overlayCtx: this.dom.overlayCanvas.getContext('2d'),
|
|
38
38
|
yAxisCtx: this.dom.yAxisCanvas.getContext('2d'),
|
|
39
|
+
leftAxisCtx: this.dom.leftYAxisCanvas?.getContext('2d') ?? null,
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
return this.contexts;
|
|
42
43
|
}
|
|
44
|
+
static resizeCanvas(canvas, widthPx, heightPx, dpr) {
|
|
45
|
+
if (canvas.width !== widthPx) {
|
|
46
|
+
canvas.width = widthPx;
|
|
47
|
+
}
|
|
48
|
+
if (canvas.height !== heightPx) {
|
|
49
|
+
canvas.height = heightPx;
|
|
50
|
+
}
|
|
51
|
+
const cssW = `${widthPx / dpr}px`;
|
|
52
|
+
if (canvas.style.width !== cssW) {
|
|
53
|
+
canvas.style.width = cssW;
|
|
54
|
+
}
|
|
55
|
+
const cssH = `${heightPx / dpr}px`;
|
|
56
|
+
if (canvas.style.height !== cssH) {
|
|
57
|
+
canvas.style.height = cssH;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
43
60
|
getWebGL() {
|
|
44
61
|
return this.webgl;
|
|
45
62
|
}
|
|
@@ -63,50 +80,20 @@ export class PaneRenderer {
|
|
|
63
80
|
const canvasYAxisWidth = parentClientWidth > 0 ? parentClientWidth : fallbackYAxisWidth;
|
|
64
81
|
// Main Canvas
|
|
65
82
|
const mainWidth = Math.round(width * dpr);
|
|
66
|
-
if (mainCanvas.width !== mainWidth) {
|
|
67
|
-
mainCanvas.width = mainWidth;
|
|
68
|
-
}
|
|
69
83
|
const mainHeight = Math.round(height * dpr);
|
|
70
|
-
|
|
71
|
-
mainCanvas.height = mainHeight;
|
|
72
|
-
}
|
|
73
|
-
const mainCssWidth = `${mainWidth / dpr}px`;
|
|
74
|
-
if (mainCanvas.style.width !== mainCssWidth) {
|
|
75
|
-
mainCanvas.style.width = mainCssWidth;
|
|
76
|
-
}
|
|
77
|
-
const mainCssHeight = `${mainHeight / dpr}px`;
|
|
78
|
-
if (mainCanvas.style.height !== mainCssHeight) {
|
|
79
|
-
mainCanvas.style.height = mainCssHeight;
|
|
80
|
-
}
|
|
84
|
+
PaneRenderer.resizeCanvas(mainCanvas, mainWidth, mainHeight, dpr);
|
|
81
85
|
// Overlay Canvas - 与 Main Canvas 相同尺寸
|
|
82
|
-
|
|
83
|
-
overlayCanvas.width = mainWidth;
|
|
84
|
-
}
|
|
85
|
-
if (overlayCanvas.height !== mainHeight) {
|
|
86
|
-
overlayCanvas.height = mainHeight;
|
|
87
|
-
}
|
|
88
|
-
if (overlayCanvas.style.width !== mainCssWidth) {
|
|
89
|
-
overlayCanvas.style.width = mainCssWidth;
|
|
90
|
-
}
|
|
91
|
-
if (overlayCanvas.style.height !== mainCssHeight) {
|
|
92
|
-
overlayCanvas.style.height = mainCssHeight;
|
|
93
|
-
}
|
|
86
|
+
PaneRenderer.resizeCanvas(overlayCanvas, mainWidth, mainHeight, dpr);
|
|
94
87
|
// YAxis Canvas
|
|
95
88
|
const yAxisWidth = Math.round(canvasYAxisWidth * dpr);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (yAxisCanvas.style.width !== yAxisCssWidth) {
|
|
105
|
-
yAxisCanvas.style.width = yAxisCssWidth;
|
|
106
|
-
}
|
|
107
|
-
const yAxisCssHeight = `${yAxisHeight / dpr}px`;
|
|
108
|
-
if (yAxisCanvas.style.height !== yAxisCssHeight) {
|
|
109
|
-
yAxisCanvas.style.height = yAxisCssHeight;
|
|
89
|
+
PaneRenderer.resizeCanvas(yAxisCanvas, yAxisWidth, Math.round(height * dpr), dpr);
|
|
90
|
+
// Left YAxis Canvas
|
|
91
|
+
const leftCanvas = this.dom.leftYAxisCanvas;
|
|
92
|
+
if (leftCanvas) {
|
|
93
|
+
const fallbackLeftAxisWidth = this.opt.leftAxisWidth;
|
|
94
|
+
const leftParentWidth = leftCanvas.parentElement?.clientWidth ?? 0;
|
|
95
|
+
const canvasLeftAxisWidth = leftParentWidth > 0 ? leftParentWidth : fallbackLeftAxisWidth;
|
|
96
|
+
PaneRenderer.resizeCanvas(leftCanvas, Math.round(Math.max(canvasLeftAxisWidth, 0) * dpr), Math.round(height * dpr), dpr);
|
|
110
97
|
}
|
|
111
98
|
this.webgl.candleSurface?.resize(width, height, dpr);
|
|
112
99
|
this.webgl.lineSurface?.resize(width, height, dpr);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paneRenderer.js","sourceRoot":"","sources":["../../src/engine/paneRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"paneRenderer.js","sourceRoot":"","sources":["../../src/engine/paneRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { KLineData } from '../../types/price';
|
|
2
1
|
import type { ChartSettings } from '../../config/chartSettings';
|
|
3
2
|
import type { PluginHostImpl } from '../../plugin';
|
|
4
3
|
import { RendererPluginManager } from '../../plugin';
|
|
5
|
-
import type { ChartDom, ChartOptions
|
|
4
|
+
import type { ChartDom, ChartOptions } from '../chartTypes';
|
|
6
5
|
import { PaneRenderer } from '../paneRenderer';
|
|
7
6
|
import { SharedWebGLSurface } from '../renderers/webgl/sharedWebGLSurface';
|
|
8
7
|
import { MarkerManager } from '../marker/registry';
|
|
@@ -11,32 +10,12 @@ import { ChartDataManager } from '../data/chartDataManager';
|
|
|
11
10
|
import { ChartIndicatorManager } from '../indicators/chartIndicatorManager';
|
|
12
11
|
import { InteractionController } from '../controller/interaction';
|
|
13
12
|
import { UpdateLevel } from '../layout/pane';
|
|
14
|
-
import type { VisibleRange } from '../layout/pane';
|
|
15
13
|
import { DrawingStore } from '../drawing';
|
|
14
|
+
import type { ChartModeHandler } from '../modes/types';
|
|
16
15
|
type ResolvedChartOptions = Omit<ChartOptions, 'kWidth' | 'kGap'> & {
|
|
17
16
|
kWidth: number;
|
|
18
17
|
kGap: number;
|
|
19
18
|
};
|
|
20
|
-
export type FrameContext = {
|
|
21
|
-
vp: Viewport;
|
|
22
|
-
range: VisibleRange;
|
|
23
|
-
kLinePositions: KLinePositions;
|
|
24
|
-
kLineCenters: number[];
|
|
25
|
-
kBarRects: Array<{
|
|
26
|
-
x: number;
|
|
27
|
-
width: number;
|
|
28
|
-
}>;
|
|
29
|
-
kWidthPx: number;
|
|
30
|
-
useCachedFrame: boolean;
|
|
31
|
-
data: KLineData[];
|
|
32
|
-
mainIndicatorRange: {
|
|
33
|
-
min: number;
|
|
34
|
-
max: number;
|
|
35
|
-
} | null;
|
|
36
|
-
hasCrosshair: boolean;
|
|
37
|
-
zoomLevel: number;
|
|
38
|
-
zoomLevelCount: number;
|
|
39
|
-
};
|
|
40
19
|
export interface RendererDependencies {
|
|
41
20
|
getDom: () => ChartDom;
|
|
42
21
|
getOption: () => ResolvedChartOptions;
|
|
@@ -51,6 +30,7 @@ export interface RendererDependencies {
|
|
|
51
30
|
getViewportManager: () => ChartViewportManager;
|
|
52
31
|
getDataManager: () => ChartDataManager;
|
|
53
32
|
getIndicatorManager: () => ChartIndicatorManager;
|
|
33
|
+
getActiveMode: () => ChartModeHandler;
|
|
54
34
|
}
|
|
55
35
|
export declare class ChartRenderer {
|
|
56
36
|
private deps;
|
|
@@ -73,6 +53,7 @@ export declare class ChartRenderer {
|
|
|
73
53
|
scheduleDraw(level?: UpdateLevel): void;
|
|
74
54
|
draw(level?: UpdateLevel): void;
|
|
75
55
|
private prepareFrameData;
|
|
56
|
+
private clearAxisCtx;
|
|
76
57
|
clearAllCanvases(): void;
|
|
77
58
|
private renderPanes;
|
|
78
59
|
private renderXAxis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartRenderer.d.ts","sourceRoot":"","sources":["../../../src/engine/render/chartRenderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chartRenderer.d.ts","sourceRoot":"","sources":["../../../src/engine/render/chartRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { createLastPriceLineRendererPlugin, createLastPriceLabelRegistrarPlugin
|
|
|
13
13
|
import { createCustomMarkersRenderer } from '../renderers/customMarkers';
|
|
14
14
|
import { createExtremaMarkersRendererPlugin } from '../renderers/extremaMarkers';
|
|
15
15
|
import { createYAxisRendererPlugin } from '../renderers/yAxis';
|
|
16
|
+
import { createLeftYAxisRendererPlugin } from '../renderers/leftYAxis';
|
|
16
17
|
import { createCrosshairRendererPlugin } from '../renderers/crosshair';
|
|
17
18
|
import { createTimeAxisRendererPlugin } from '../renderers/timeAxis';
|
|
18
19
|
export class ChartRenderer {
|
|
@@ -65,6 +66,19 @@ export class ChartRenderer {
|
|
|
65
66
|
price: interaction.crosshairPrice,
|
|
66
67
|
}),
|
|
67
68
|
}));
|
|
69
|
+
this.useDrawingPlugin(createLeftYAxisRendererPlugin({
|
|
70
|
+
axisWidth: opt.leftAxisWidth,
|
|
71
|
+
yPaddingPx: opt.yPaddingPx,
|
|
72
|
+
getCrosshair: () => {
|
|
73
|
+
const pos = interaction.crosshairPos;
|
|
74
|
+
const price = interaction.crosshairPrice;
|
|
75
|
+
const activePaneId = interaction.activePaneId;
|
|
76
|
+
if (pos && price !== null) {
|
|
77
|
+
return { y: pos.y, price, activePaneId };
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
},
|
|
81
|
+
}));
|
|
68
82
|
this.useDrawingPlugin(createTimeAxisRendererPlugin({
|
|
69
83
|
height: opt.bottomAxisHeight,
|
|
70
84
|
getCrosshair: () => {
|
|
@@ -130,15 +144,20 @@ export class ChartRenderer {
|
|
|
130
144
|
this.markerManager.clear();
|
|
131
145
|
const frame = this.prepareFrameData(level);
|
|
132
146
|
if (!frame) {
|
|
133
|
-
|
|
147
|
+
const dataManager = this.deps.getDataManager();
|
|
148
|
+
if (dataManager.getInternalData().length === 0 && dataManager.getTimeShareData().length === 0)
|
|
134
149
|
this.clearAllCanvases();
|
|
135
150
|
return;
|
|
136
151
|
}
|
|
137
152
|
const { vp, range, kLinePositions, kLineCenters, kBarRects, kWidthPx, useCachedFrame } = frame;
|
|
138
|
-
this.deps.getInteraction().setKLinePositions(kLinePositions, range, kWidthPx);
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
153
|
+
this.deps.getInteraction().setKLinePositions(kLinePositions, range, kWidthPx, kLineCenters);
|
|
154
|
+
const dataManager = this.deps.getDataManager();
|
|
155
|
+
const mode = this.deps.getActiveMode();
|
|
156
|
+
if (mode.useIndicatorScheduler) {
|
|
157
|
+
const indicatorManager = this.deps.getIndicatorManager();
|
|
158
|
+
indicatorManager.indicatorSchedulerAccessor.setActiveMainIndicators([...indicatorManager.mainIndicatorsSignalPeek.entries()].map(([id, entry]) => ({ id, params: entry.params })));
|
|
159
|
+
}
|
|
160
|
+
const mainIndicatorRange = useCachedFrame ? null : this.deps.getIndicatorManager().indicatorSchedulerAccessor.getMainIndicatorPriceRange();
|
|
142
161
|
const hasCrosshair = this.deps.getInteraction().getCrosshairIndex() !== null;
|
|
143
162
|
const { sharedXAxisLabels, sharedXAxisRanges } = this.renderPanes(vp, range, kLinePositions, kLineCenters, kBarRects, kWidthPx, mainIndicatorRange, hasCrosshair, useCachedFrame, level);
|
|
144
163
|
this.overlayHadCrosshair = hasCrosshair;
|
|
@@ -149,7 +168,7 @@ export class ChartRenderer {
|
|
|
149
168
|
const vp = useCachedFrame ? this.cachedDrawFrame.viewport : this.deps.getViewportManager().computeViewport();
|
|
150
169
|
if (!vp)
|
|
151
170
|
return null;
|
|
152
|
-
const internalData = this.deps.getDataManager().
|
|
171
|
+
const internalData = this.deps.getDataManager().getRenderData();
|
|
153
172
|
if (internalData.length === 0)
|
|
154
173
|
return null;
|
|
155
174
|
const opt = this.deps.getOption();
|
|
@@ -161,11 +180,14 @@ export class ChartRenderer {
|
|
|
161
180
|
})();
|
|
162
181
|
const range = { start: Math.max(0, rawRange.start), end: rawRange.end };
|
|
163
182
|
const dataManager = this.deps.getDataManager();
|
|
183
|
+
const mode = this.deps.getActiveMode();
|
|
164
184
|
if (!useCachedFrame && (range.start !== dataManager.lastVisibleRange.start
|
|
165
185
|
|| range.end !== dataManager.lastVisibleRange.end
|
|
166
186
|
|| rawRange.start !== dataManager.lastRawVisibleRange.start
|
|
167
187
|
|| rawRange.end !== dataManager.lastRawVisibleRange.end)) {
|
|
168
|
-
|
|
188
|
+
if (mode.useIndicatorScheduler) {
|
|
189
|
+
this.deps.getIndicatorManager().indicatorSchedulerAccessor.updateVisibleRange(range);
|
|
190
|
+
}
|
|
169
191
|
dataManager.lastVisibleRange = range;
|
|
170
192
|
dataManager.lastRawVisibleRange = rawRange;
|
|
171
193
|
this.checkVisibleRangeGapWhenIdle();
|
|
@@ -196,7 +218,35 @@ export class ChartRenderer {
|
|
|
196
218
|
const barLeftPx = wickXPx - (barWidthPx - 1) / 2;
|
|
197
219
|
kBarRects[i] = { x: barLeftPx / vp.dpr, width: barWidthPx / vp.dpr };
|
|
198
220
|
}
|
|
199
|
-
|
|
221
|
+
if (mode.debugName === 'TimeShare') {
|
|
222
|
+
const totalWidth = vp.plotWidth;
|
|
223
|
+
const count = kLineCenters.length;
|
|
224
|
+
if (count > 0) {
|
|
225
|
+
const dpr = vp.dpr;
|
|
226
|
+
const step = totalWidth / count;
|
|
227
|
+
for (let i = 0; i < count; i++) {
|
|
228
|
+
kLineCenters[i] = Math.round((i + 0.5) * step * dpr) / dpr;
|
|
229
|
+
kLinePositions[i] = Math.round(i * step * dpr) / dpr;
|
|
230
|
+
}
|
|
231
|
+
kWidthPx = Math.round(totalWidth * dpr / count);
|
|
232
|
+
const logicalBarWidth = Math.max(1, step * 0.6);
|
|
233
|
+
const barWidthPx = Math.round(logicalBarWidth * dpr);
|
|
234
|
+
const halfBarPx = Math.floor(barWidthPx / 2);
|
|
235
|
+
for (let i = 0; i < count; i++) {
|
|
236
|
+
const centerPx = Math.round(kLineCenters[i] * dpr);
|
|
237
|
+
kBarRects[i] = {
|
|
238
|
+
x: (centerPx - halfBarPx) / dpr,
|
|
239
|
+
width: barWidthPx / dpr,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
kWidthPx = getPhysicalKLineConfig(opt.kWidth, opt.kGap, vp.dpr).kWidthPx;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
kWidthPx = getPhysicalKLineConfig(opt.kWidth, opt.kGap, vp.dpr).kWidthPx;
|
|
249
|
+
}
|
|
200
250
|
this.cachedDrawFrame = {
|
|
201
251
|
viewport: { ...vp },
|
|
202
252
|
range: { ...range },
|
|
@@ -215,16 +265,28 @@ export class ChartRenderer {
|
|
|
215
265
|
zoomLevelCount: this.deps.getZoomLevelCount(),
|
|
216
266
|
};
|
|
217
267
|
}
|
|
268
|
+
clearAxisCtx(ctx, dpr, width, height) {
|
|
269
|
+
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
270
|
+
ctx.scale(dpr, dpr);
|
|
271
|
+
ctx.clearRect(0, 0, width, height + 2 / dpr);
|
|
272
|
+
}
|
|
218
273
|
clearAllCanvases() {
|
|
219
274
|
const vp = this.deps.getViewportManager().computeViewport();
|
|
220
275
|
if (!vp)
|
|
221
276
|
return;
|
|
222
277
|
for (const r of this.deps.getPaneRenderers()) {
|
|
223
|
-
const { mainCtx, overlayCtx, yAxisCtx } = r.getContexts();
|
|
278
|
+
const { mainCtx, overlayCtx, yAxisCtx, leftAxisCtx } = r.getContexts();
|
|
224
279
|
const pane = r.getPane();
|
|
225
280
|
mainCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr);
|
|
226
281
|
overlayCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr);
|
|
227
282
|
yAxisCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr);
|
|
283
|
+
if (leftAxisCtx) {
|
|
284
|
+
const leftCanvas = leftAxisCtx.canvas;
|
|
285
|
+
if (leftCanvas) {
|
|
286
|
+
const laW = leftCanvas.width / vp.dpr;
|
|
287
|
+
leftAxisCtx.clearRect(0, 0, laW, pane.height + 2 / vp.dpr);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
228
290
|
}
|
|
229
291
|
const xCtx = this.xAxisCtx;
|
|
230
292
|
if (xCtx) {
|
|
@@ -241,15 +303,16 @@ export class ChartRenderer {
|
|
|
241
303
|
const dataManager = this.deps.getDataManager();
|
|
242
304
|
const rendererPluginManager = this.deps.getRendererPluginManager();
|
|
243
305
|
const pluginHost = this.deps.getPluginHost();
|
|
306
|
+
const mode = this.deps.getActiveMode();
|
|
244
307
|
for (const renderer of this.deps.getPaneRenderers()) {
|
|
245
308
|
const pane = renderer.getPane();
|
|
246
|
-
const { mainCtx, overlayCtx, yAxisCtx } = renderer.getContexts();
|
|
309
|
+
const { mainCtx, overlayCtx, yAxisCtx, leftAxisCtx } = renderer.getContexts();
|
|
247
310
|
const { candleSurface, lineSurface } = renderer.getWebGL();
|
|
248
311
|
if (!useCachedFrame) {
|
|
249
|
-
const indicatorRange = pane.role === 'price' ? mainIndicatorRange : null;
|
|
312
|
+
const indicatorRange = pane.role === 'price' && mode.useIndicatorScheduler ? mainIndicatorRange : null;
|
|
250
313
|
const comparisonRange = pane.id === 'main' ? dataManager.getComparisonEquivalentPriceRange(range) : null;
|
|
251
314
|
const mergedRange = this.mergeNumericRanges(indicatorRange, comparisonRange);
|
|
252
|
-
|
|
315
|
+
mode.updatePaneRange(pane, range, dataManager, mergedRange);
|
|
253
316
|
if (pane.id === 'main' && this.settings.disableMainPaneVerticalScroll) {
|
|
254
317
|
pane.yAxis.resetTransform();
|
|
255
318
|
}
|
|
@@ -271,16 +334,18 @@ export class ChartRenderer {
|
|
|
271
334
|
}
|
|
272
335
|
if (yAxisCtx && !useCachedFrame) {
|
|
273
336
|
const yAxisWidth = yAxisCtx.canvas.width / vp.dpr;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
337
|
+
this.clearAxisCtx(yAxisCtx, vp.dpr, yAxisWidth, pane.height);
|
|
338
|
+
}
|
|
339
|
+
if (leftAxisCtx && !useCachedFrame) {
|
|
340
|
+
const leftAxisWidth = leftAxisCtx.canvas.width / vp.dpr;
|
|
341
|
+
this.clearAxisCtx(leftAxisCtx, vp.dpr, leftAxisWidth, pane.height);
|
|
277
342
|
}
|
|
278
343
|
const opt = this.deps.getOption();
|
|
279
344
|
const context = {
|
|
280
345
|
ctx: mainCtx,
|
|
281
346
|
overlayCtx: overlayCtx ?? undefined,
|
|
282
347
|
pane: wrapPaneInfo(pane),
|
|
283
|
-
data: dataManager.
|
|
348
|
+
data: dataManager.getRenderData(),
|
|
284
349
|
period: dataManager.currentPeriod,
|
|
285
350
|
comparisonData: dataManager.getComparisonData(),
|
|
286
351
|
comparisonSymbols: dataManager.getComparisonSpecs(),
|
|
@@ -297,6 +362,7 @@ export class ChartRenderer {
|
|
|
297
362
|
markerManager: this.markerManager,
|
|
298
363
|
crosshairIndex: this.deps.getInteraction().getCrosshairIndex(),
|
|
299
364
|
yAxisCtx: yAxisCtx ?? undefined,
|
|
365
|
+
leftAxisCtx: leftAxisCtx ?? undefined,
|
|
300
366
|
candleWebGLSurface: candleSurface ?? undefined,
|
|
301
367
|
lineWebGLSurface: lineSurface ?? undefined,
|
|
302
368
|
zoomLevel: this.deps.getCurrentZoomLevel(),
|
|
@@ -324,6 +390,10 @@ export class ChartRenderer {
|
|
|
324
390
|
if (yAxisErrors.length > 0) {
|
|
325
391
|
pluginHost.events.emit('renderer:error', { paneId: pane.id, errors: yAxisErrors });
|
|
326
392
|
}
|
|
393
|
+
const leftAxisErrors = rendererPluginManager.renderPlugin('leftYAxis', context);
|
|
394
|
+
if (leftAxisErrors.length > 0) {
|
|
395
|
+
pluginHost.events.emit('renderer:error', { paneId: pane.id, errors: leftAxisErrors });
|
|
396
|
+
}
|
|
327
397
|
}
|
|
328
398
|
}
|
|
329
399
|
return { sharedXAxisLabels, sharedXAxisRanges };
|
|
@@ -365,7 +435,7 @@ export class ChartRenderer {
|
|
|
365
435
|
priceRange: { maxPrice: 0, minPrice: 0 },
|
|
366
436
|
},
|
|
367
437
|
period: this.deps.getDataManager().currentPeriod,
|
|
368
|
-
data: this.deps.getDataManager().
|
|
438
|
+
data: this.deps.getDataManager().getRenderData(),
|
|
369
439
|
range,
|
|
370
440
|
scrollLeft: vp.scrollLeft,
|
|
371
441
|
kWidth: opt.kWidth,
|