@363045841yyt/klinechart-core 0.8.6 → 0.8.8
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 +18 -2
- package/dist/config/chartSettings.d.ts.map +1 -1
- package/dist/config/chartSettings.js +8 -1
- package/dist/config/chartSettings.js.map +1 -1
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +56 -2
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +36 -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 +32 -1
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +148 -7
- 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 +6 -1
- package/dist/engine/controller/interaction.d.ts.map +1 -1
- package/dist/engine/controller/interaction.js +76 -28
- package/dist/engine/controller/interaction.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts +39 -14
- package/dist/engine/data/chartDataManager.d.ts.map +1 -1
- package/dist/engine/data/chartDataManager.js +494 -202
- 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 +57 -168
- 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/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/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 +113 -18
- 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 +2 -2
- 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 +114 -1
- 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/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/gridLines.d.ts.map +1 -1
- package/dist/engine/renderers/gridLines.js +7 -35
- package/dist/engine/renderers/gridLines.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 +79 -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 +25 -23
- 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/utils/tickPosition.d.ts +12 -0
- package/dist/engine/utils/tickPosition.d.ts.map +1 -1
- package/dist/engine/utils/tickPosition.js +15 -0
- package/dist/engine/utils/tickPosition.js.map +1 -1
- package/dist/engine/viewport/chartViewportManager.d.ts +0 -4
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
- package/dist/engine/viewport/chartViewportManager.js +10 -13
- package/dist/engine/viewport/chartViewportManager.js.map +1 -1
- package/dist/plugin/types.d.ts +10 -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 +11 -30
- 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/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 +8 -1
- package/src/controllers/createChartController.ts +59 -2
- package/src/controllers/types.ts +38 -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 +167 -9
- package/src/engine/chartTypes.ts +3 -0
- package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
- package/src/engine/controller/interaction.ts +80 -28
- package/src/engine/data/chartDataManager.ts +560 -229
- package/src/engine/draw/pixelAlign.ts +1 -1
- package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
- package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
- package/src/engine/indicators/calculators.ts +83 -233
- package/src/engine/indicators/chartIndicatorManager.ts +3 -2
- 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/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 +120 -22
- 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 +3 -3
- 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 +127 -2
- 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/__tests__/yAxis.renderer.test.ts +30 -26
- package/src/engine/renderers/candle.ts +1 -1
- package/src/engine/renderers/comparisonLine.ts +1 -0
- package/src/engine/renderers/extremaMarkers.ts +1 -0
- package/src/engine/renderers/gridLines.ts +7 -36
- package/src/engine/renderers/lastPrice.ts +5 -2
- package/src/engine/renderers/leftYAxis.ts +93 -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 +28 -24
- 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/utils/tickPosition.ts +34 -0
- package/src/engine/viewport/chartViewportManager.ts +11 -15
- package/src/plugin/types.ts +11 -0
- package/src/semantic/types.ts +1 -1
- package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +14 -0
- package/src/tokens/theme-base.ts +36 -0
- package/src/tokens/theme-china.ts +4 -0
- package/src/tokens/theme-dark.ts +12 -32
- 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/volumePrice.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { RendererPlugin, RenderContext } from '../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY, GLOBAL_PANE_ID } from '../../plugin'
|
|
3
3
|
import { drawCrosshairPriceLabel, drawAxisPriceLabel } from '../../utils/kLineDraw/axis'
|
|
4
|
-
import { drawScaleTicks } from '../renderers/Indicator/scale/indicator_scale'
|
|
5
4
|
import { resolveThemeColors } from '../../tokens'
|
|
5
|
+
import { getFont, setCanvasFont } from '../theme/fonts'
|
|
6
|
+
import { roundToPhysicalPixel } from '../draw/pixelAlign'
|
|
6
7
|
|
|
7
8
|
import type { KLineData } from '../../types/price'
|
|
8
|
-
import type { ScaleType } from '../utils/tickPosition'
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 创建 Y 轴渲染器插件
|
|
@@ -25,7 +25,14 @@ export function createYAxisRendererPlugin(options: {
|
|
|
25
25
|
priority: RENDERER_PRIORITY.SYSTEM_YAXIS,
|
|
26
26
|
|
|
27
27
|
draw(context: RenderContext) {
|
|
28
|
-
const { ctx, pane, dpr, yAxisCtx, data } = context
|
|
28
|
+
const { ctx, pane, dpr, yAxisCtx, data, period } = context
|
|
29
|
+
|
|
30
|
+
// 分时模式始终显示右轴,不受设置约束
|
|
31
|
+
if (period !== 'timeshare') {
|
|
32
|
+
const rightType = context.settings?.rightAxisType as string | undefined
|
|
33
|
+
if (rightType === 'none') return
|
|
34
|
+
}
|
|
35
|
+
|
|
29
36
|
const tokenColors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
|
|
30
37
|
const scaleType = pane.yAxis.getScaleType()
|
|
31
38
|
|
|
@@ -35,32 +42,28 @@ export function createYAxisRendererPlugin(options: {
|
|
|
35
42
|
|
|
36
43
|
const isPercent = scaleType === 'percent' && pane.role === 'price'
|
|
37
44
|
|
|
38
|
-
if (pane.capabilities.showPriceAxisTicks) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
45
|
+
if (pane.capabilities.showPriceAxisTicks && context.yAxisTicks) {
|
|
46
|
+
targetCtx.clearRect(0, 0, axisWidth, pane.height)
|
|
47
|
+
|
|
48
|
+
const font = getFont(12)
|
|
49
|
+
setCanvasFont(targetCtx, font)
|
|
50
|
+
targetCtx.textBaseline = 'middle'
|
|
51
|
+
targetCtx.textAlign = 'center'
|
|
52
|
+
targetCtx.fillStyle = tokenColors.text.secondary
|
|
53
|
+
|
|
54
|
+
const format = isPercent
|
|
42
55
|
? (v: number) => {
|
|
43
56
|
const sign = v >= 0 ? '+' : ''
|
|
44
57
|
return sign + v.toFixed(2) + '%'
|
|
45
58
|
}
|
|
46
|
-
:
|
|
59
|
+
: (v: number) => v.toFixed(2)
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
paddingTop: pane.yAxis.getPaddingTop(),
|
|
55
|
-
paddingBottom: pane.yAxis.getPaddingBottom(),
|
|
56
|
-
valueMin: tickValueMin,
|
|
57
|
-
valueMax: tickValueMax,
|
|
58
|
-
isMain: true,
|
|
59
|
-
decimals: 2,
|
|
60
|
-
hideEdgeTicks: false,
|
|
61
|
-
scaleType: isPercent ? 'percent' : scaleType,
|
|
62
|
-
formatLabel,
|
|
63
|
-
})
|
|
61
|
+
const textX = roundToPhysicalPixel(axisWidth / 2, dpr)
|
|
62
|
+
|
|
63
|
+
for (const tick of context.yAxisTicks) {
|
|
64
|
+
const displayValue = isPercent ? pane.yAxis.toPercent(tick.value) : tick.value
|
|
65
|
+
targetCtx.fillText(format(displayValue), textX, tick.y)
|
|
66
|
+
}
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
// 绘制价格范围带(先于标签,使标签覆盖在范围带之上)
|
|
@@ -80,6 +83,7 @@ export function createYAxisRendererPlugin(options: {
|
|
|
80
83
|
// 绘制来自 yAxisLabels 的标签(最新价格、极值点、绘图锚点等)
|
|
81
84
|
if (context.yAxisLabels && pane.role === 'price') {
|
|
82
85
|
for (const label of context.yAxisLabels) {
|
|
86
|
+
if (label.price == null || !Number.isFinite(label.price)) continue
|
|
83
87
|
const isLastPrice = label.type === 'lastPrice'
|
|
84
88
|
drawAxisPriceLabel(targetCtx, {
|
|
85
89
|
x: 0,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export type PriceRange = { maxPrice: number; minPrice: number }
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
function priceToY(
|
|
6
6
|
price: number,
|
|
7
7
|
maxPrice: number,
|
|
8
8
|
minPrice: number,
|
|
@@ -22,7 +22,7 @@ export function priceToY(
|
|
|
22
22
|
* - y 是相对于绘图区顶部的逻辑像素坐标(不含额外 translate)
|
|
23
23
|
* - paddingTop/paddingBottom 需与 priceToY 使用一致
|
|
24
24
|
*/
|
|
25
|
-
|
|
25
|
+
function yToPrice(
|
|
26
26
|
y: number,
|
|
27
27
|
maxPrice: number,
|
|
28
28
|
minPrice: number,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/** 数字和文本的标准字体栈 */
|
|
8
|
-
|
|
8
|
+
const FONT_FAMILY = '"Trebuchet MS", Roboto, Ubuntu, sans-serif'
|
|
9
9
|
|
|
10
10
|
/** 获取指定字号的字体字符串,用于 Canvas ctx.font */
|
|
11
11
|
export function getFont(size: number, options?: { bold?: boolean }): string {
|
|
@@ -10,11 +10,7 @@
|
|
|
10
10
|
* @returns 奇数化后的物理像素宽度
|
|
11
11
|
*/
|
|
12
12
|
export function calcKWidthPx(kWidth: number, dpr: number): number {
|
|
13
|
-
|
|
14
|
-
if (kWidthPx % 2 === 0) {
|
|
15
|
-
kWidthPx += 1
|
|
16
|
-
}
|
|
17
|
-
return Math.max(1, kWidthPx)
|
|
13
|
+
return Math.max(1, Math.round(kWidth * dpr))
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
/**
|
|
@@ -206,6 +206,40 @@ function generatePixelUniformPercentTicks(options: {
|
|
|
206
206
|
return positions
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
+
/**
|
|
210
|
+
* 计算均匀像素 Y 位置的值(统一像素反算)
|
|
211
|
+
* 所有刻度类型都先确定像素均匀 Y 位置,再通过 yToPrice 反算该位置的值
|
|
212
|
+
*/
|
|
213
|
+
export interface UniformPixelTick {
|
|
214
|
+
y: number
|
|
215
|
+
value: number
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* 在给定 Y 像素位置,按指定刻度类型反算价格/值
|
|
220
|
+
*/
|
|
221
|
+
export function priceAtYForScaleType(
|
|
222
|
+
y: number,
|
|
223
|
+
valueMin: number,
|
|
224
|
+
valueMax: number,
|
|
225
|
+
scaleType: ScaleType,
|
|
226
|
+
height: number,
|
|
227
|
+
paddingTop: number,
|
|
228
|
+
paddingBottom: number,
|
|
229
|
+
): number {
|
|
230
|
+
const viewH = Math.max(1, height - paddingTop - paddingBottom)
|
|
231
|
+
const ratio = 1 - (y - paddingTop) / viewH
|
|
232
|
+
|
|
233
|
+
if (scaleType === 'log') {
|
|
234
|
+
if (valueMin <= 0 || valueMax <= 0) return valueMin + ratio * (valueMax - valueMin)
|
|
235
|
+
const logMin = Math.log(valueMin)
|
|
236
|
+
const logMax = Math.log(valueMax)
|
|
237
|
+
return Math.exp(logMin + ratio * (logMax - logMin))
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return valueMin + ratio * (valueMax - valueMin)
|
|
241
|
+
}
|
|
242
|
+
|
|
209
243
|
// calculateValueTickPositions 缓存
|
|
210
244
|
let _cvtpCacheKey = ''
|
|
211
245
|
let _cvtpCacheResult: TickPositionWithValue[] = []
|
|
@@ -95,16 +95,6 @@ export class ChartViewportManager {
|
|
|
95
95
|
this._pendingScrollLeft = v
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
/** 仅设置缓存 scrollLeft(由 DataManager 内部使用) */
|
|
99
|
-
setCachedScrollLeft(v: number): void {
|
|
100
|
-
this.cachedScrollLeft = v
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** 仅设置待写入 scrollLeft(由 DataManager 内部使用) */
|
|
104
|
-
setPendingScrollLeft(v: number): void {
|
|
105
|
-
this._pendingScrollLeft = v
|
|
106
|
-
}
|
|
107
|
-
|
|
108
98
|
/** 在 RAF 回调中应用待写入的 scrollLeft */
|
|
109
99
|
applyPendingScrollLeft(container: HTMLElement): void {
|
|
110
100
|
if (this._pendingScrollLeft !== null) {
|
|
@@ -206,7 +196,8 @@ export class ChartViewportManager {
|
|
|
206
196
|
|
|
207
197
|
const dom = this.deps.getDom()
|
|
208
198
|
|
|
209
|
-
const
|
|
199
|
+
const dprRoundedViewWidth = Math.round(viewWidth * dpr) / dpr
|
|
200
|
+
const canvasLayerWidth = `${dprRoundedViewWidth}px`
|
|
210
201
|
if (dom.canvasLayer.style.width !== canvasLayerWidth) {
|
|
211
202
|
dom.canvasLayer.style.width = canvasLayerWidth
|
|
212
203
|
}
|
|
@@ -216,9 +207,9 @@ export class ChartViewportManager {
|
|
|
216
207
|
dom.canvasLayer.style.height = canvasLayerHeight
|
|
217
208
|
}
|
|
218
209
|
|
|
219
|
-
const
|
|
220
|
-
if (dom.xAxisCanvas.width !==
|
|
221
|
-
dom.xAxisCanvas.width =
|
|
210
|
+
const xAxisWidthPx = Math.round(dprRoundedViewWidth * dpr)
|
|
211
|
+
if (dom.xAxisCanvas.width !== xAxisWidthPx) {
|
|
212
|
+
dom.xAxisCanvas.width = xAxisWidthPx
|
|
222
213
|
}
|
|
223
214
|
|
|
224
215
|
const xAxisHeight = Math.round(this.deps.getBottomAxisHeight() * dpr)
|
|
@@ -226,7 +217,7 @@ export class ChartViewportManager {
|
|
|
226
217
|
dom.xAxisCanvas.height = xAxisHeight
|
|
227
218
|
}
|
|
228
219
|
|
|
229
|
-
const xAxisCssWidth = `${
|
|
220
|
+
const xAxisCssWidth = `${dprRoundedViewWidth}px`
|
|
230
221
|
if (dom.xAxisCanvas.style.width !== xAxisCssWidth) {
|
|
231
222
|
dom.xAxisCanvas.style.width = xAxisCssWidth
|
|
232
223
|
}
|
|
@@ -297,6 +288,11 @@ export class ChartViewportManager {
|
|
|
297
288
|
this.observedSize.width = cssWidth
|
|
298
289
|
this.observedSize.height = cssHeight
|
|
299
290
|
|
|
291
|
+
if (this.cachedScrollLeft === 0 && cssWidth > 0) {
|
|
292
|
+
this.cachedScrollLeft = cssWidth
|
|
293
|
+
this._pendingScrollLeft = cssWidth
|
|
294
|
+
}
|
|
295
|
+
|
|
300
296
|
const pixelSize = entry.devicePixelContentBoxSize?.[0]
|
|
301
297
|
const cssSize = entry.contentBoxSize?.[0]
|
|
302
298
|
if (!pixelSize || !cssSize || cssSize.inlineSize <= 0) {
|
package/src/plugin/types.ts
CHANGED
|
@@ -262,6 +262,14 @@ export interface XAxisRange {
|
|
|
262
262
|
opacity: number
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
+
/** Y轴刻度(位置+值),由 RenderContext 构建时预计算,所有 Y 轴渲染器共用 */
|
|
266
|
+
export interface YAxisTick {
|
|
267
|
+
/** Y像素位置(相对 pane 顶部,逻辑像素) */
|
|
268
|
+
y: number
|
|
269
|
+
/** 该Y位置通过 pane.yAxis.yToPrice 反算的价格值 */
|
|
270
|
+
value: number
|
|
271
|
+
}
|
|
272
|
+
|
|
265
273
|
/** 渲染上下文 */
|
|
266
274
|
/** MarkerManager 接口(用于 RenderContext) */
|
|
267
275
|
export interface MarkerManagerLike {
|
|
@@ -294,6 +302,7 @@ export interface RenderContext {
|
|
|
294
302
|
crosshairIndex?: number | null
|
|
295
303
|
// 可选的其他 Canvas 上下文
|
|
296
304
|
yAxisCtx?: CanvasRenderingContext2D
|
|
305
|
+
leftAxisCtx?: CanvasRenderingContext2D
|
|
297
306
|
xAxisCtx?: CanvasRenderingContext2D
|
|
298
307
|
borderCtx?: CanvasRenderingContext2D
|
|
299
308
|
/** 覆盖层 Canvas 上下文(用于十字线、Tooltip 等动态内容) */
|
|
@@ -327,6 +336,8 @@ export interface RenderContext {
|
|
|
327
336
|
isAsiaMarket?: boolean
|
|
328
337
|
/** 用户颜色预设覆盖项 */
|
|
329
338
|
colorPresetSettings?: import('../tokens').ColorPresetSettings
|
|
339
|
+
/** 预计算的 Y 轴刻度列表(统一像素均匀分布 → yToPrice 反算),所有 Y 轴渲染器共用 */
|
|
340
|
+
yAxisTicks?: YAxisTick[]
|
|
330
341
|
}
|
|
331
342
|
|
|
332
343
|
export type DrawingAnchor = {
|
package/src/semantic/types.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface DataConfig {
|
|
|
31
31
|
startDate: string
|
|
32
32
|
/** 结束日期 YYYY-MM-DD */
|
|
33
33
|
endDate: string
|
|
34
|
-
period: 'daily' | 'weekly' | 'monthly' | '5min' | '15min' | '30min' | '60min'
|
|
34
|
+
period: 'daily' | 'weekly' | 'monthly' | '5min' | '15min' | '30min' | '60min' | 'timeshare'
|
|
35
35
|
adjust: AdjustType
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -14,6 +14,7 @@ exports[`theme baseline — dark > CSS declaration block (snapshot) 1`] = `
|
|
|
14
14
|
--klc-color-candle-doji-border: #8A8F98;
|
|
15
15
|
--klc-color-volume-up: #22D69B66;
|
|
16
16
|
--klc-color-volume-down: #FF646466;
|
|
17
|
+
--klc-color-volume-neutral: #FFFFFF66;
|
|
17
18
|
--klc-color-axis-text: #9AA0A6;
|
|
18
19
|
--klc-color-axis-line: #2A2F36;
|
|
19
20
|
--klc-color-axis-tick: #2A2F36;
|
|
@@ -41,6 +42,12 @@ exports[`theme baseline — dark > CSS declaration block (snapshot) 1`] = `
|
|
|
41
42
|
--klc-color-avwap-line: #A78BFA;
|
|
42
43
|
--klc-color-avwap-band: #A78BFA33;
|
|
43
44
|
--klc-color-mtf-overlay: #38BDF8;
|
|
45
|
+
--klc-color-time-share-price-line: #60A5FA;
|
|
46
|
+
--klc-color-time-share-avg-line: #FBBF24;
|
|
47
|
+
--klc-color-time-share-area-up: rgba(34, 214, 155, 0.20);
|
|
48
|
+
--klc-color-time-share-area-down: rgba(255, 100, 100, 0.20);
|
|
49
|
+
--klc-color-time-share-pre-close: #9CA3AF;
|
|
50
|
+
--klc-color-time-share-volume: #60A5FA;
|
|
44
51
|
--klc-color-palette-i1: #4A9EFF;
|
|
45
52
|
--klc-color-palette-i2: #FFB95A;
|
|
46
53
|
--klc-color-palette-i3: #22D69B;
|
|
@@ -207,6 +214,7 @@ exports[`theme baseline — light > CSS declaration block (snapshot) 1`] = `
|
|
|
207
214
|
--klc-color-candle-doji-border: #6E6E6E;
|
|
208
215
|
--klc-color-volume-up: #0F8B5C66;
|
|
209
216
|
--klc-color-volume-down: #C2363B66;
|
|
217
|
+
--klc-color-volume-neutral: #00000066;
|
|
210
218
|
--klc-color-axis-text: #5A5A5A;
|
|
211
219
|
--klc-color-axis-line: #D0D0D0;
|
|
212
220
|
--klc-color-axis-tick: #D0D0D0;
|
|
@@ -234,6 +242,12 @@ exports[`theme baseline — light > CSS declaration block (snapshot) 1`] = `
|
|
|
234
242
|
--klc-color-avwap-line: #7C3AED;
|
|
235
243
|
--klc-color-avwap-band: #7C3AED33;
|
|
236
244
|
--klc-color-mtf-overlay: #0369A1;
|
|
245
|
+
--klc-color-time-share-price-line: #4A90D9;
|
|
246
|
+
--klc-color-time-share-avg-line: #F5A623;
|
|
247
|
+
--klc-color-time-share-area-up: rgba(15, 139, 92, 0.15);
|
|
248
|
+
--klc-color-time-share-area-down: rgba(213, 19, 26, 0.15);
|
|
249
|
+
--klc-color-time-share-pre-close: #888888;
|
|
250
|
+
--klc-color-time-share-volume: #4A90D9;
|
|
237
251
|
--klc-color-palette-i1: #0072B2;
|
|
238
252
|
--klc-color-palette-i2: #E69F00;
|
|
239
253
|
--klc-color-palette-i3: #009E73;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { SpacingTokens, TypographyTokens, MotionTokens } from './types'
|
|
2
|
+
|
|
3
|
+
export const spacing: SpacingTokens = {
|
|
4
|
+
none: '0',
|
|
5
|
+
xxs: '2px',
|
|
6
|
+
xs: '4px',
|
|
7
|
+
sm: '8px',
|
|
8
|
+
md: '12px',
|
|
9
|
+
lg: '16px',
|
|
10
|
+
xl: '24px',
|
|
11
|
+
xxl: '32px',
|
|
12
|
+
xxxl: '64px',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const typography: TypographyTokens = {
|
|
16
|
+
fontFamily:
|
|
17
|
+
"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
18
|
+
fontFamilyMono:
|
|
19
|
+
"ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
|
|
20
|
+
fontSizeSm: '10px',
|
|
21
|
+
fontSizeMd: '12px',
|
|
22
|
+
fontSizeLg: '14px',
|
|
23
|
+
fontWeightRegular: 400,
|
|
24
|
+
fontWeightMedium: 500,
|
|
25
|
+
fontWeightBold: 700,
|
|
26
|
+
lineHeightTight: 1.2,
|
|
27
|
+
lineHeightStandard: 1.4,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const motion: MotionTokens = {
|
|
31
|
+
durationInstant: '0ms',
|
|
32
|
+
durationFast: '120ms',
|
|
33
|
+
durationModerate: '200ms',
|
|
34
|
+
easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
35
|
+
easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
|
|
36
|
+
}
|
|
@@ -45,6 +45,10 @@ export function withAsiaMarketColors(theme: Theme): Theme {
|
|
|
45
45
|
candleUpWick: theme.colors.candleDownWick,
|
|
46
46
|
candleDownWick: theme.colors.candleUpWick,
|
|
47
47
|
|
|
48
|
+
// ── Time-share area fill ──
|
|
49
|
+
timeShareAreaUp: theme.colors.timeShareAreaDown,
|
|
50
|
+
timeShareAreaDown: theme.colors.timeShareAreaUp,
|
|
51
|
+
|
|
48
52
|
// ── Volume bars ──
|
|
49
53
|
volumeUp: theme.colors.volumeDown,
|
|
50
54
|
volumeDown: theme.colors.volumeUp,
|
package/src/tokens/theme-dark.ts
CHANGED
|
@@ -18,9 +18,13 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import type { Theme } from './types'
|
|
21
|
+
import { spacing, typography, motion } from './theme-base'
|
|
21
22
|
|
|
22
23
|
export const darkTheme: Theme = {
|
|
23
24
|
name: 'dark',
|
|
25
|
+
spacing,
|
|
26
|
+
typography,
|
|
27
|
+
motion,
|
|
24
28
|
colors: {
|
|
25
29
|
background: '#111827',
|
|
26
30
|
foreground: '#E8EAED',
|
|
@@ -36,6 +40,7 @@ export const darkTheme: Theme = {
|
|
|
36
40
|
|
|
37
41
|
volumeUp: '#22D69B66',
|
|
38
42
|
volumeDown: '#FF646466',
|
|
43
|
+
volumeNeutral: '#FFFFFF66',
|
|
39
44
|
|
|
40
45
|
axisText: '#9AA0A6',
|
|
41
46
|
axisLine: '#2A2F36',
|
|
@@ -72,6 +77,13 @@ export const darkTheme: Theme = {
|
|
|
72
77
|
avwapBand: '#A78BFA33',
|
|
73
78
|
mtfOverlay: '#38BDF8',
|
|
74
79
|
|
|
80
|
+
timeSharePriceLine: '#60A5FA',
|
|
81
|
+
timeShareAvgLine: '#FBBF24',
|
|
82
|
+
timeShareAreaUp: 'rgba(34, 214, 155, 0.20)',
|
|
83
|
+
timeShareAreaDown: 'rgba(255, 100, 100, 0.20)',
|
|
84
|
+
timeSharePreClose: '#9CA3AF',
|
|
85
|
+
timeShareVolume: '#60A5FA',
|
|
86
|
+
|
|
75
87
|
palette: {
|
|
76
88
|
// Same hue ordering as light theme; values tuned for dark BG.
|
|
77
89
|
i1: '#4A9EFF', // blue (brightened)
|
|
@@ -205,36 +217,4 @@ export const darkTheme: Theme = {
|
|
|
205
217
|
},
|
|
206
218
|
wmsrGrid: 'rgba(255, 255, 255, 0.1)',
|
|
207
219
|
},
|
|
208
|
-
spacing: {
|
|
209
|
-
none: '0',
|
|
210
|
-
xxs: '2px',
|
|
211
|
-
xs: '4px',
|
|
212
|
-
sm: '8px',
|
|
213
|
-
md: '12px',
|
|
214
|
-
lg: '16px',
|
|
215
|
-
xl: '24px',
|
|
216
|
-
xxl: '32px',
|
|
217
|
-
xxxl: '64px',
|
|
218
|
-
},
|
|
219
|
-
typography: {
|
|
220
|
-
fontFamily:
|
|
221
|
-
"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
222
|
-
fontFamilyMono:
|
|
223
|
-
"ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
|
|
224
|
-
fontSizeSm: '10px',
|
|
225
|
-
fontSizeMd: '12px',
|
|
226
|
-
fontSizeLg: '14px',
|
|
227
|
-
fontWeightRegular: 400,
|
|
228
|
-
fontWeightMedium: 500,
|
|
229
|
-
fontWeightBold: 700,
|
|
230
|
-
lineHeightTight: 1.2,
|
|
231
|
-
lineHeightStandard: 1.4,
|
|
232
|
-
},
|
|
233
|
-
motion: {
|
|
234
|
-
durationInstant: '0ms',
|
|
235
|
-
durationFast: '120ms',
|
|
236
|
-
durationModerate: '200ms',
|
|
237
|
-
easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
238
|
-
easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
|
|
239
|
-
},
|
|
240
220
|
}
|
|
@@ -20,9 +20,13 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import type { Theme } from './types'
|
|
23
|
+
import { spacing, typography, motion } from './theme-base'
|
|
23
24
|
|
|
24
25
|
export const lightTheme: Theme = {
|
|
25
26
|
name: 'light',
|
|
27
|
+
spacing,
|
|
28
|
+
typography,
|
|
29
|
+
motion,
|
|
26
30
|
colors: {
|
|
27
31
|
background: '#FAFAFA',
|
|
28
32
|
foreground: '#1F1F1F',
|
|
@@ -38,6 +42,7 @@ export const lightTheme: Theme = {
|
|
|
38
42
|
|
|
39
43
|
volumeUp: '#0F8B5C66', // 40% alpha — paired with candleUp
|
|
40
44
|
volumeDown: '#C2363B66',
|
|
45
|
+
volumeNeutral: '#00000066',
|
|
41
46
|
|
|
42
47
|
axisText: '#5A5A5A',
|
|
43
48
|
axisLine: '#D0D0D0',
|
|
@@ -78,6 +83,13 @@ export const lightTheme: Theme = {
|
|
|
78
83
|
// #0369A1 → 4.59:1.
|
|
79
84
|
mtfOverlay: '#0369A1',
|
|
80
85
|
|
|
86
|
+
timeSharePriceLine: '#4A90D9',
|
|
87
|
+
timeShareAvgLine: '#F5A623',
|
|
88
|
+
timeShareAreaUp: 'rgba(15, 139, 92, 0.15)',
|
|
89
|
+
timeShareAreaDown: 'rgba(213, 19, 26, 0.15)',
|
|
90
|
+
timeSharePreClose: '#888888',
|
|
91
|
+
timeShareVolume: '#4A90D9',
|
|
92
|
+
|
|
81
93
|
palette: {
|
|
82
94
|
// Okabe-Ito-derived qualitative scale, AA on #FAFAFA
|
|
83
95
|
i1: '#0072B2', // strong blue
|
|
@@ -101,7 +113,7 @@ export const lightTheme: Theme = {
|
|
|
101
113
|
weak: 'hsl(210, 7%, 65%)',
|
|
102
114
|
white: 'rgba(255, 255, 255, 0.92)',
|
|
103
115
|
},
|
|
104
|
-
price: {
|
|
116
|
+
price: {
|
|
105
117
|
lastPrice: 'rgba(230, 100, 115, 0.95)',
|
|
106
118
|
},
|
|
107
119
|
tagBg: {
|
|
@@ -211,36 +223,4 @@ price: {
|
|
|
211
223
|
},
|
|
212
224
|
wmsrGrid: 'rgba(0, 0, 0, 0.1)',
|
|
213
225
|
},
|
|
214
|
-
spacing: {
|
|
215
|
-
none: '0',
|
|
216
|
-
xxs: '2px',
|
|
217
|
-
xs: '4px',
|
|
218
|
-
sm: '8px',
|
|
219
|
-
md: '12px',
|
|
220
|
-
lg: '16px',
|
|
221
|
-
xl: '24px',
|
|
222
|
-
xxl: '32px',
|
|
223
|
-
xxxl: '64px',
|
|
224
|
-
},
|
|
225
|
-
typography: {
|
|
226
|
-
fontFamily:
|
|
227
|
-
"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
228
|
-
fontFamilyMono:
|
|
229
|
-
"ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
|
|
230
|
-
fontSizeSm: '10px',
|
|
231
|
-
fontSizeMd: '12px',
|
|
232
|
-
fontSizeLg: '14px',
|
|
233
|
-
fontWeightRegular: 400,
|
|
234
|
-
fontWeightMedium: 500,
|
|
235
|
-
fontWeightBold: 700,
|
|
236
|
-
lineHeightTight: 1.2,
|
|
237
|
-
lineHeightStandard: 1.4,
|
|
238
|
-
},
|
|
239
|
-
motion: {
|
|
240
|
-
durationInstant: '0ms',
|
|
241
|
-
durationFast: '120ms',
|
|
242
|
-
durationModerate: '200ms',
|
|
243
|
-
easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
244
|
-
easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
|
|
245
|
-
},
|
|
246
226
|
}
|
package/src/tokens/types.ts
CHANGED
|
@@ -251,6 +251,7 @@ export interface ColorTokens {
|
|
|
251
251
|
// Volume bars (paired with candle bull/bear)
|
|
252
252
|
readonly volumeUp: ColorValue
|
|
253
253
|
readonly volumeDown: ColorValue
|
|
254
|
+
readonly volumeNeutral: ColorValue
|
|
254
255
|
|
|
255
256
|
// Price + time axes
|
|
256
257
|
readonly axisText: ColorValue
|
|
@@ -290,6 +291,14 @@ export interface ColorTokens {
|
|
|
290
291
|
readonly alertTriggered: ColorValue
|
|
291
292
|
readonly alertMuted: ColorValue
|
|
292
293
|
|
|
294
|
+
// Time-share (分时图) specific colors
|
|
295
|
+
readonly timeSharePriceLine: ColorValue
|
|
296
|
+
readonly timeShareAvgLine: ColorValue
|
|
297
|
+
readonly timeShareAreaUp: ColorValue
|
|
298
|
+
readonly timeShareAreaDown: ColorValue
|
|
299
|
+
readonly timeSharePreClose: ColorValue
|
|
300
|
+
readonly timeShareVolume: ColorValue
|
|
301
|
+
|
|
293
302
|
// Anchored VWAP / MTF overlay accents
|
|
294
303
|
readonly avwapLine: ColorValue
|
|
295
304
|
readonly avwapBand: ColorValue
|
package/src/types/price.ts
CHANGED
|
@@ -38,6 +38,19 @@ export interface KLineDailyDongCaiResponse extends KLineData {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
export interface TimeShareData {
|
|
42
|
+
timestamp: number
|
|
43
|
+
price: number
|
|
44
|
+
average: number
|
|
45
|
+
volume: number
|
|
46
|
+
amount: number
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function isTimeShareData(data: unknown[]): data is TimeShareData[] {
|
|
50
|
+
const first = data[0]
|
|
51
|
+
return data.length > 0 && first !== null && typeof first === 'object' && 'price' in (first as object) && 'average' in (first as object)
|
|
52
|
+
}
|
|
53
|
+
|
|
41
54
|
export function toKLineData(arr: KLineDailyDongCaiResponse[]): KLineData[] {
|
|
42
55
|
return arr
|
|
43
56
|
.map((e) => ({
|
package/src/utils/dateFormat.ts
CHANGED
|
@@ -24,7 +24,7 @@ const ymdCache = new Map<number, string>()
|
|
|
24
24
|
* @example
|
|
25
25
|
* formatDateToYYYYMMDDNoDash(1736793600000) // "20250114"
|
|
26
26
|
*/
|
|
27
|
-
|
|
27
|
+
function formatDateToYYYYMMDDNoDash(timestamp: number): string {
|
|
28
28
|
const d = new Date(timestamp)
|
|
29
29
|
const year = d.getFullYear()
|
|
30
30
|
const month = String(d.getMonth() + 1).padStart(2, '0')
|
|
@@ -39,7 +39,7 @@ export function formatDateToYYYYMMDDNoDash(timestamp: number): string {
|
|
|
39
39
|
* @example
|
|
40
40
|
* getCurrentDateYYYYMMDD() // "20250114"(根据实际日期)
|
|
41
41
|
*/
|
|
42
|
-
|
|
42
|
+
function getCurrentDateYYYYMMDD(): string {
|
|
43
43
|
const d = new Date()
|
|
44
44
|
const year = d.getFullYear()
|
|
45
45
|
const month = String(d.getMonth() + 1).padStart(2, '0')
|
|
@@ -130,7 +130,7 @@ export function formatMonthOrYear(timestamp: number): { text: string; isYear: bo
|
|
|
130
130
|
* @example
|
|
131
131
|
* monthKey(1736793600000) // 24301 (2025*12 + 0)
|
|
132
132
|
*/
|
|
133
|
-
|
|
133
|
+
function monthKey(timestamp: number): number {
|
|
134
134
|
const d = new Date(timestamp)
|
|
135
135
|
return d.getFullYear() * 12 + d.getMonth()
|
|
136
136
|
}
|
|
@@ -176,7 +176,7 @@ export function formatTimestamp(
|
|
|
176
176
|
* @param ts - 时间戳(毫秒)
|
|
177
177
|
* @returns 格式化后的日期字符串,例如 "2025-01-14"
|
|
178
178
|
*/
|
|
179
|
-
|
|
179
|
+
const formatShanghaiDate = formatDateToYYYYMMDD
|
|
180
180
|
|
|
181
181
|
/**
|
|
182
182
|
* formatDateToYYYYMMDD 的别名,用于十字线日期标签显示
|
|
@@ -283,6 +283,29 @@ export function formatDay(timestamp: number): { text: string; isYear: boolean }
|
|
|
283
283
|
return { text: `${month}-${day}`, isYear }
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
+
// ========== 时分标签缓存 ==========
|
|
287
|
+
const TIME_LABEL_CACHE_SIZE = 256
|
|
288
|
+
const timeLabelCache = new Map<number, string>()
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* 将时间戳格式化为 "HH:mm" 格式(上海时区)
|
|
292
|
+
* 用于分时图底部时间轴标签显示
|
|
293
|
+
*/
|
|
294
|
+
export function formatTimeLabel(timestamp: number): string {
|
|
295
|
+
const cached = timeLabelCache.get(timestamp)
|
|
296
|
+
if (cached !== undefined) return cached
|
|
297
|
+
|
|
298
|
+
const d = new Date(timestamp)
|
|
299
|
+
const hh = String(d.getHours()).padStart(2, '0')
|
|
300
|
+
const mm = String(d.getMinutes()).padStart(2, '0')
|
|
301
|
+
const result = `${hh}:${mm}`
|
|
302
|
+
|
|
303
|
+
if (timeLabelCache.size >= TIME_LABEL_CACHE_SIZE) timeLabelCache.clear()
|
|
304
|
+
timeLabelCache.set(timestamp, result)
|
|
305
|
+
|
|
306
|
+
return result
|
|
307
|
+
}
|
|
308
|
+
|
|
286
309
|
// 兼容 getDayOfYear — fallback when not on Date prototype
|
|
287
310
|
function getDayOfYear(date: Date): number {
|
|
288
311
|
const start = new Date(date.getFullYear(), 0, 0)
|