@363045841yyt/klinechart-core 0.8.11-alpha.0 → 0.8.12
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/alerts/createAlertController.d.ts +30 -0
- package/dist/alerts/createAlertController.d.ts.map +1 -0
- package/dist/alerts/createAlertController.js +261 -0
- package/dist/alerts/createAlertController.js.map +1 -0
- package/dist/alerts/index.d.ts +5 -0
- package/dist/alerts/index.d.ts.map +1 -0
- package/dist/alerts/index.js +4 -0
- package/dist/alerts/index.js.map +1 -0
- package/dist/alerts/predicates.d.ts +28 -0
- package/dist/alerts/predicates.d.ts.map +1 -0
- package/dist/alerts/predicates.js +211 -0
- package/dist/alerts/predicates.js.map +1 -0
- package/dist/alerts/rollingVolume.d.ts +15 -0
- package/dist/alerts/rollingVolume.d.ts.map +1 -0
- package/dist/alerts/rollingVolume.js +42 -0
- package/dist/alerts/rollingVolume.js.map +1 -0
- package/dist/alerts/ruleSchema.d.ts +42 -0
- package/dist/alerts/ruleSchema.d.ts.map +1 -0
- package/dist/alerts/ruleSchema.js +240 -0
- package/dist/alerts/ruleSchema.js.map +1 -0
- package/dist/alerts/types.d.ts +169 -0
- package/dist/alerts/types.d.ts.map +1 -0
- package/dist/alerts/types.js +24 -0
- package/dist/alerts/types.js.map +1 -0
- package/dist/chartTypes/heikinAshi.d.ts +49 -0
- package/dist/chartTypes/heikinAshi.d.ts.map +1 -0
- package/dist/chartTypes/heikinAshi.js +94 -0
- package/dist/chartTypes/heikinAshi.js.map +1 -0
- package/dist/chartTypes/index.d.ts +6 -0
- package/dist/chartTypes/index.d.ts.map +1 -0
- package/dist/chartTypes/index.js +5 -0
- package/dist/chartTypes/index.js.map +1 -0
- package/dist/chartTypes/pointAndFigure.d.ts +83 -0
- package/dist/chartTypes/pointAndFigure.d.ts.map +1 -0
- package/dist/chartTypes/pointAndFigure.js +159 -0
- package/dist/chartTypes/pointAndFigure.js.map +1 -0
- package/dist/chartTypes/rangeBars.d.ts +61 -0
- package/dist/chartTypes/rangeBars.d.ts.map +1 -0
- package/dist/chartTypes/rangeBars.js +181 -0
- package/dist/chartTypes/rangeBars.js.map +1 -0
- package/dist/chartTypes/renko.d.ts +94 -0
- package/dist/chartTypes/renko.d.ts.map +1 -0
- package/dist/chartTypes/renko.js +207 -0
- package/dist/chartTypes/renko.js.map +1 -0
- package/dist/chartTypes/types.d.ts +97 -0
- package/dist/chartTypes/types.d.ts.map +1 -0
- package/dist/chartTypes/types.js +39 -0
- package/dist/chartTypes/types.js.map +1 -0
- package/dist/components/anchoredVwap/computeAnchoredVwap.d.ts +76 -0
- package/dist/components/anchoredVwap/computeAnchoredVwap.d.ts.map +1 -0
- package/dist/components/anchoredVwap/computeAnchoredVwap.js +155 -0
- package/dist/components/anchoredVwap/computeAnchoredVwap.js.map +1 -0
- package/dist/components/anchoredVwap/createAnchoredVwapController.d.ts +28 -0
- package/dist/components/anchoredVwap/createAnchoredVwapController.d.ts.map +1 -0
- package/dist/components/anchoredVwap/createAnchoredVwapController.js +282 -0
- package/dist/components/anchoredVwap/createAnchoredVwapController.js.map +1 -0
- package/dist/components/anchoredVwap/index.d.ts +11 -0
- package/dist/components/anchoredVwap/index.d.ts.map +1 -0
- package/dist/components/anchoredVwap/index.js +10 -0
- package/dist/components/anchoredVwap/index.js.map +1 -0
- package/dist/components/anchoredVwap/types.d.ts +171 -0
- package/dist/components/anchoredVwap/types.d.ts.map +1 -0
- package/dist/components/anchoredVwap/types.js +25 -0
- package/dist/components/anchoredVwap/types.js.map +1 -0
- package/dist/components/crosshairSync/createCrosshairSync.d.ts +94 -0
- package/dist/components/crosshairSync/createCrosshairSync.d.ts.map +1 -0
- package/dist/components/crosshairSync/createCrosshairSync.js +118 -0
- package/dist/components/crosshairSync/createCrosshairSync.js.map +1 -0
- package/dist/components/crosshairSync/index.d.ts +2 -0
- package/dist/components/crosshairSync/index.d.ts.map +1 -0
- package/dist/components/crosshairSync/index.js +2 -0
- package/dist/components/crosshairSync/index.js.map +1 -0
- package/dist/components/footprint/aggressor.d.ts +89 -0
- package/dist/components/footprint/aggressor.d.ts.map +1 -0
- package/dist/components/footprint/aggressor.js +106 -0
- package/dist/components/footprint/aggressor.js.map +1 -0
- package/dist/components/footprint/createFootprintController.d.ts +29 -0
- package/dist/components/footprint/createFootprintController.d.ts.map +1 -0
- package/dist/components/footprint/createFootprintController.js +264 -0
- package/dist/components/footprint/createFootprintController.js.map +1 -0
- package/dist/components/footprint/index.d.ts +7 -0
- package/dist/components/footprint/index.d.ts.map +1 -0
- package/dist/components/footprint/index.js +4 -0
- package/dist/components/footprint/index.js.map +1 -0
- package/dist/components/footprint/perBarStats.d.ts +63 -0
- package/dist/components/footprint/perBarStats.d.ts.map +1 -0
- package/dist/components/footprint/perBarStats.js +123 -0
- package/dist/components/footprint/perBarStats.js.map +1 -0
- package/dist/components/footprint/types.d.ts +197 -0
- package/dist/components/footprint/types.d.ts.map +1 -0
- package/dist/components/footprint/types.js +23 -0
- package/dist/components/footprint/types.js.map +1 -0
- package/dist/components/mtfOverlay/alignToBaseIndex.d.ts +45 -0
- package/dist/components/mtfOverlay/alignToBaseIndex.d.ts.map +1 -0
- package/dist/components/mtfOverlay/alignToBaseIndex.js +92 -0
- package/dist/components/mtfOverlay/alignToBaseIndex.js.map +1 -0
- package/dist/components/mtfOverlay/createMtfController.d.ts +7 -0
- package/dist/components/mtfOverlay/createMtfController.d.ts.map +1 -0
- package/dist/components/mtfOverlay/createMtfController.js +134 -0
- package/dist/components/mtfOverlay/createMtfController.js.map +1 -0
- package/dist/components/mtfOverlay/index.d.ts +19 -0
- package/dist/components/mtfOverlay/index.d.ts.map +1 -0
- package/dist/components/mtfOverlay/index.js +18 -0
- package/dist/components/mtfOverlay/index.js.map +1 -0
- package/dist/components/mtfOverlay/resampleBars.d.ts +37 -0
- package/dist/components/mtfOverlay/resampleBars.d.ts.map +1 -0
- package/dist/components/mtfOverlay/resampleBars.js +93 -0
- package/dist/components/mtfOverlay/resampleBars.js.map +1 -0
- package/dist/components/mtfOverlay/types.d.ts +132 -0
- package/dist/components/mtfOverlay/types.d.ts.map +1 -0
- package/dist/components/mtfOverlay/types.js +22 -0
- package/dist/components/mtfOverlay/types.js.map +1 -0
- package/dist/components/orderBookHeatmap/createHeatmapController.d.ts +21 -0
- package/dist/components/orderBookHeatmap/createHeatmapController.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/createHeatmapController.js +234 -0
- package/dist/components/orderBookHeatmap/createHeatmapController.js.map +1 -0
- package/dist/components/orderBookHeatmap/createOrderBookState.d.ts +18 -0
- package/dist/components/orderBookHeatmap/createOrderBookState.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/createOrderBookState.js +102 -0
- package/dist/components/orderBookHeatmap/createOrderBookState.js.map +1 -0
- package/dist/components/orderBookHeatmap/deltaArchive.d.ts +25 -0
- package/dist/components/orderBookHeatmap/deltaArchive.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/deltaArchive.js +106 -0
- package/dist/components/orderBookHeatmap/deltaArchive.js.map +1 -0
- package/dist/components/orderBookHeatmap/index.d.ts +13 -0
- package/dist/components/orderBookHeatmap/index.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/index.js +12 -0
- package/dist/components/orderBookHeatmap/index.js.map +1 -0
- package/dist/components/orderBookHeatmap/logColorScale.d.ts +20 -0
- package/dist/components/orderBookHeatmap/logColorScale.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/logColorScale.js +71 -0
- package/dist/components/orderBookHeatmap/logColorScale.js.map +1 -0
- package/dist/components/orderBookHeatmap/snapshotRing.d.ts +16 -0
- package/dist/components/orderBookHeatmap/snapshotRing.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/snapshotRing.js +61 -0
- package/dist/components/orderBookHeatmap/snapshotRing.js.map +1 -0
- package/dist/components/orderBookHeatmap/types.d.ts +128 -0
- package/dist/components/orderBookHeatmap/types.d.ts.map +1 -0
- package/dist/components/orderBookHeatmap/types.js +16 -0
- package/dist/components/orderBookHeatmap/types.js.map +1 -0
- package/dist/components/volumeProfile/binning.d.ts +54 -0
- package/dist/components/volumeProfile/binning.d.ts.map +1 -0
- package/dist/components/volumeProfile/binning.js +123 -0
- package/dist/components/volumeProfile/binning.js.map +1 -0
- package/dist/components/volumeProfile/createVolumeProfileController.d.ts +31 -0
- package/dist/components/volumeProfile/createVolumeProfileController.d.ts.map +1 -0
- package/dist/components/volumeProfile/createVolumeProfileController.js +179 -0
- package/dist/components/volumeProfile/createVolumeProfileController.js.map +1 -0
- package/dist/components/volumeProfile/index.d.ts +6 -0
- package/dist/components/volumeProfile/index.d.ts.map +1 -0
- package/dist/components/volumeProfile/index.js +5 -0
- package/dist/components/volumeProfile/index.js.map +1 -0
- package/dist/components/volumeProfile/poc.d.ts +35 -0
- package/dist/components/volumeProfile/poc.d.ts.map +1 -0
- package/dist/components/volumeProfile/poc.js +51 -0
- package/dist/components/volumeProfile/poc.js.map +1 -0
- package/dist/components/volumeProfile/types.d.ts +138 -0
- package/dist/components/volumeProfile/types.d.ts.map +1 -0
- package/dist/components/volumeProfile/types.js +19 -0
- package/dist/components/volumeProfile/types.js.map +1 -0
- package/dist/components/volumeProfile/valueArea.d.ts +58 -0
- package/dist/components/volumeProfile/valueArea.d.ts.map +1 -0
- package/dist/components/volumeProfile/valueArea.js +172 -0
- package/dist/components/volumeProfile/valueArea.js.map +1 -0
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +22 -11
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +3 -1
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.js +2 -1
- package/dist/data-fetchers/baostock.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.effects.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.effects.js +2 -1
- package/dist/data-fetchers/dataBuffer.effects.js.map +1 -1
- package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
- package/dist/data-fetchers/fetcherDefinitionRegistry.js +2 -1
- package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
- package/dist/data-fetchers/gotdx.js +4 -3
- package/dist/data-fetchers/gotdx.js.map +1 -1
- package/dist/data-fetchers/router.d.ts.map +1 -1
- package/dist/data-fetchers/router.js +4 -3
- package/dist/data-fetchers/router.js.map +1 -1
- package/dist/data-fetchers/tradingview.js +3 -2
- package/dist/data-fetchers/tradingview.js.map +1 -1
- package/dist/engine/chart.d.ts +13 -0
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +109 -0
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts +1 -0
- package/dist/engine/data/chartDataManager.d.ts.map +1 -1
- package/dist/engine/data/chartDataManager.js +27 -4
- package/dist/engine/data/chartDataManager.js.map +1 -1
- package/dist/engine/drawing/toolConfig.d.ts.map +1 -1
- package/dist/engine/drawing/toolConfig.js +2 -1
- package/dist/engine/drawing/toolConfig.js.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.js +2 -1
- package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.js +2 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.js +2 -1
- package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.js +6 -5
- package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
- package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
- package/dist/engine/indicators/registerBuiltins.js +2 -1
- package/dist/engine/indicators/registerBuiltins.js.map +1 -1
- package/dist/engine/indicators/scheduler.d.ts +6 -0
- package/dist/engine/indicators/scheduler.d.ts.map +1 -1
- package/dist/engine/indicators/scheduler.js +12 -0
- package/dist/engine/indicators/scheduler.js.map +1 -1
- package/dist/engine/indicators/soa.d.ts.map +1 -1
- package/dist/engine/indicators/soa.js +2 -1
- package/dist/engine/indicators/soa.js.map +1 -1
- package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
- package/dist/engine/indicators/stateComposer.js +2 -1
- package/dist/engine/indicators/stateComposer.js.map +1 -1
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +2 -1
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/engine/utils/chartZoomController.d.ts +2 -0
- package/dist/engine/utils/chartZoomController.d.ts.map +1 -1
- package/dist/engine/utils/chartZoomController.js +5 -1
- package/dist/engine/utils/chartZoomController.js.map +1 -1
- package/dist/errors-help.d.ts +72 -0
- package/dist/errors-help.d.ts.map +1 -0
- package/dist/errors-help.js +149 -0
- package/dist/errors-help.js.map +1 -0
- package/dist/errors.d.ts +64 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +61 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/indicators/alma.d.ts +27 -0
- package/dist/indicators/alma.d.ts.map +1 -0
- package/dist/indicators/alma.js +36 -0
- package/dist/indicators/alma.js.map +1 -0
- package/dist/indicators/awesomeOscillator.d.ts +19 -0
- package/dist/indicators/awesomeOscillator.d.ts.map +1 -0
- package/dist/indicators/awesomeOscillator.js +36 -0
- package/dist/indicators/awesomeOscillator.js.map +1 -0
- package/dist/indicators/dpo.d.ts +17 -0
- package/dist/indicators/dpo.d.ts.map +1 -0
- package/dist/indicators/dpo.js +24 -0
- package/dist/indicators/dpo.js.map +1 -0
- package/dist/indicators/fisherTransform.d.ts +26 -0
- package/dist/indicators/fisherTransform.d.ts.map +1 -0
- package/dist/indicators/fisherTransform.js +44 -0
- package/dist/indicators/fisherTransform.js.map +1 -0
- package/dist/indicators/frama.d.ts +25 -0
- package/dist/indicators/frama.d.ts.map +1 -0
- package/dist/indicators/frama.js +61 -0
- package/dist/indicators/frama.js.map +1 -0
- package/dist/indicators/index.d.ts +24 -0
- package/dist/indicators/index.d.ts.map +1 -0
- package/dist/indicators/index.js +26 -0
- package/dist/indicators/index.js.map +1 -0
- package/dist/indicators/lsma.d.ts +21 -0
- package/dist/indicators/lsma.d.ts.map +1 -0
- package/dist/indicators/lsma.js +37 -0
- package/dist/indicators/lsma.js.map +1 -0
- package/dist/indicators/schaffTrendCycle.d.ts +24 -0
- package/dist/indicators/schaffTrendCycle.d.ts.map +1 -0
- package/dist/indicators/schaffTrendCycle.js +70 -0
- package/dist/indicators/schaffTrendCycle.js.map +1 -0
- package/dist/indicators/stochRSI.d.ts +24 -0
- package/dist/indicators/stochRSI.d.ts.map +1 -0
- package/dist/indicators/stochRSI.js +86 -0
- package/dist/indicators/stochRSI.js.map +1 -0
- package/dist/indicators/t3.d.ts +31 -0
- package/dist/indicators/t3.d.ts.map +1 -0
- package/dist/indicators/t3.js +63 -0
- package/dist/indicators/t3.js.map +1 -0
- package/dist/indicators/ultimateOscillator.d.ts +26 -0
- package/dist/indicators/ultimateOscillator.d.ts.map +1 -0
- package/dist/indicators/ultimateOscillator.js +59 -0
- package/dist/indicators/ultimateOscillator.js.map +1 -0
- package/dist/indicators/vidya.d.ts +24 -0
- package/dist/indicators/vidya.d.ts.map +1 -0
- package/dist/indicators/vidya.js +54 -0
- package/dist/indicators/vidya.js.map +1 -0
- package/dist/indicators/zlema.d.ts +16 -0
- package/dist/indicators/zlema.d.ts.map +1 -0
- package/dist/indicators/zlema.js +26 -0
- package/dist/indicators/zlema.js.map +1 -0
- package/dist/input/gesture.d.ts +125 -0
- package/dist/input/gesture.d.ts.map +1 -0
- package/dist/input/gesture.js +249 -0
- package/dist/input/gesture.js.map +1 -0
- package/dist/input/index.d.ts +9 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +9 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/keyboard.d.ts +140 -0
- package/dist/input/keyboard.d.ts.map +1 -0
- package/dist/input/keyboard.js +260 -0
- package/dist/input/keyboard.js.map +1 -0
- package/dist/mcp/chartBridge.d.ts +2 -2
- package/dist/mcp/chartBridge.d.ts.map +1 -1
- package/dist/mcp/chartBridge.js +27 -21
- package/dist/mcp/chartBridge.js.map +1 -1
- package/dist/plugin/PluginHost.d.ts +0 -3
- package/dist/plugin/PluginHost.d.ts.map +1 -1
- package/dist/plugin/PluginHost.js +7 -3
- package/dist/plugin/PluginHost.js.map +1 -1
- package/dist/plugin/PluginRegistry.d.ts +0 -3
- package/dist/plugin/PluginRegistry.d.ts.map +1 -1
- package/dist/plugin/PluginRegistry.js +5 -1
- package/dist/plugin/PluginRegistry.js.map +1 -1
- package/dist/render/Renderer.d.ts +116 -0
- package/dist/render/Renderer.d.ts.map +1 -0
- package/dist/render/Renderer.js +31 -0
- package/dist/render/Renderer.js.map +1 -0
- package/dist/render/SurfaceBackend.d.ts +83 -0
- package/dist/render/SurfaceBackend.d.ts.map +1 -0
- package/dist/render/SurfaceBackend.js +27 -0
- package/dist/render/SurfaceBackend.js.map +1 -0
- package/dist/render/index.d.ts +12 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +11 -0
- package/dist/render/index.js.map +1 -0
- package/dist/renderer-tier/detectRendererTier.d.ts +57 -0
- package/dist/renderer-tier/detectRendererTier.d.ts.map +1 -0
- package/dist/renderer-tier/detectRendererTier.js +143 -0
- package/dist/renderer-tier/detectRendererTier.js.map +1 -0
- package/dist/renderer-tier/index.d.ts +12 -0
- package/dist/renderer-tier/index.d.ts.map +1 -0
- package/dist/renderer-tier/index.js +12 -0
- package/dist/renderer-tier/index.js.map +1 -0
- package/dist/renderer-tier/selectBackend.d.ts +106 -0
- package/dist/renderer-tier/selectBackend.d.ts.map +1 -0
- package/dist/renderer-tier/selectBackend.js +113 -0
- package/dist/renderer-tier/selectBackend.js.map +1 -0
- package/dist/renderer-tier/types.d.ts +50 -0
- package/dist/renderer-tier/types.d.ts.map +1 -0
- package/dist/renderer-tier/types.js +24 -0
- package/dist/renderer-tier/types.js.map +1 -0
- package/dist/replay/createReplayController.d.ts +3 -0
- package/dist/replay/createReplayController.d.ts.map +1 -0
- package/dist/replay/createReplayController.js +251 -0
- package/dist/replay/createReplayController.js.map +1 -0
- package/dist/replay/index.d.ts +5 -0
- package/dist/replay/index.d.ts.map +1 -0
- package/dist/replay/index.js +3 -0
- package/dist/replay/index.js.map +1 -0
- package/dist/replay/timeline.d.ts +50 -0
- package/dist/replay/timeline.d.ts.map +1 -0
- package/dist/replay/timeline.js +104 -0
- package/dist/replay/timeline.js.map +1 -0
- package/dist/replay/types.d.ts +94 -0
- package/dist/replay/types.d.ts.map +1 -0
- package/dist/replay/types.js +21 -0
- package/dist/replay/types.js.map +1 -0
- package/dist/scale/anchoredZoom.d.ts +64 -0
- package/dist/scale/anchoredZoom.d.ts.map +1 -0
- package/dist/scale/anchoredZoom.js +67 -0
- package/dist/scale/anchoredZoom.js.map +1 -0
- package/dist/scale/createPriceScale.d.ts +49 -0
- package/dist/scale/createPriceScale.d.ts.map +1 -0
- package/dist/scale/createPriceScale.js +175 -0
- package/dist/scale/createPriceScale.js.map +1 -0
- package/dist/scale/createTimeScale.d.ts +27 -0
- package/dist/scale/createTimeScale.d.ts.map +1 -0
- package/dist/scale/createTimeScale.js +139 -0
- package/dist/scale/createTimeScale.js.map +1 -0
- package/dist/scale/index.d.ts +6 -0
- package/dist/scale/index.d.ts.map +1 -0
- package/dist/scale/index.js +5 -0
- package/dist/scale/index.js.map +1 -0
- package/dist/scale/originShift.d.ts +69 -0
- package/dist/scale/originShift.d.ts.map +1 -0
- package/dist/scale/originShift.js +41 -0
- package/dist/scale/originShift.js.map +1 -0
- package/dist/scale/types.d.ts +90 -0
- package/dist/scale/types.d.ts.map +1 -0
- package/dist/scale/types.js +17 -0
- package/dist/scale/types.js.map +1 -0
- package/dist/scene/createScene.d.ts +22 -0
- package/dist/scene/createScene.d.ts.map +1 -0
- package/dist/scene/createScene.js +114 -0
- package/dist/scene/createScene.js.map +1 -0
- package/dist/scene/index.d.ts +13 -0
- package/dist/scene/index.d.ts.map +1 -0
- package/dist/scene/index.js +11 -0
- package/dist/scene/index.js.map +1 -0
- package/dist/scene/layerRegistry.d.ts +83 -0
- package/dist/scene/layerRegistry.d.ts.map +1 -0
- package/dist/scene/layerRegistry.js +43 -0
- package/dist/scene/layerRegistry.js.map +1 -0
- package/dist/scene/types.d.ts +128 -0
- package/dist/scene/types.d.ts.map +1 -0
- package/dist/scene/types.js +21 -0
- package/dist/scene/types.js.map +1 -0
- package/dist/scheduler/createFrameBudget.d.ts +91 -0
- package/dist/scheduler/createFrameBudget.d.ts.map +1 -0
- package/dist/scheduler/createFrameBudget.js +232 -0
- package/dist/scheduler/createFrameBudget.js.map +1 -0
- package/dist/scheduler/index.d.ts +2 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/tokens/themeToCssVars.d.ts.map +1 -1
- package/dist/tokens/themeToCssVars.js +2 -28
- package/dist/tokens/themeToCssVars.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/__bench__/indicators.bench.ts +215 -0
- package/src/__bench__/orderBookHeatmap.bench.ts +68 -0
- package/src/__bench__/scale.bench.ts +80 -0
- package/src/__bench__/signal.bench.ts +41 -0
- package/src/__bench__/volumeProfile.bench.ts +66 -0
- package/src/__tests__/errors-help.test.ts +184 -0
- package/src/__tests__/errors.test.ts +187 -0
- package/src/alerts/__tests__/controller.test.ts +231 -0
- package/src/alerts/__tests__/predicates.test.ts +374 -0
- package/src/alerts/__tests__/ruleSchema.test.ts +180 -0
- package/src/alerts/createAlertController.ts +312 -0
- package/src/alerts/index.ts +18 -0
- package/src/alerts/predicates.ts +231 -0
- package/src/alerts/rollingVolume.ts +51 -0
- package/src/alerts/ruleSchema.ts +278 -0
- package/src/alerts/types.ts +177 -0
- package/src/chartTypes/__tests__/heikinAshi.test.ts +122 -0
- package/src/chartTypes/__tests__/pointAndFigure.test.ts +167 -0
- package/src/chartTypes/__tests__/rangeBars.test.ts +146 -0
- package/src/chartTypes/__tests__/renko.test.ts +160 -0
- package/src/chartTypes/heikinAshi.ts +116 -0
- package/src/chartTypes/index.ts +5 -0
- package/src/chartTypes/pointAndFigure.ts +278 -0
- package/src/chartTypes/rangeBars.ts +303 -0
- package/src/chartTypes/renko.ts +311 -0
- package/src/chartTypes/types.ts +99 -0
- package/src/components/anchoredVwap/__tests__/computeAnchoredVwap.test.ts +331 -0
- package/src/components/anchoredVwap/__tests__/controller.test.ts +430 -0
- package/src/components/anchoredVwap/computeAnchoredVwap.ts +174 -0
- package/src/components/anchoredVwap/createAnchoredVwapController.ts +358 -0
- package/src/components/anchoredVwap/index.ts +17 -0
- package/src/components/anchoredVwap/types.ts +187 -0
- package/src/components/crosshairSync/__tests__/crosshairSync.test.ts +261 -0
- package/src/components/crosshairSync/createCrosshairSync.ts +187 -0
- package/src/components/crosshairSync/index.ts +5 -0
- package/src/components/footprint/__tests__/aggressor.test.ts +127 -0
- package/src/components/footprint/__tests__/controller.test.ts +130 -0
- package/src/components/footprint/__tests__/perBarStats.test.ts +114 -0
- package/src/components/footprint/aggressor.ts +165 -0
- package/src/components/footprint/createFootprintController.ts +338 -0
- package/src/components/footprint/index.ts +21 -0
- package/src/components/footprint/perBarStats.ts +137 -0
- package/src/components/footprint/types.ts +232 -0
- package/src/components/mtfOverlay/__tests__/alignToBaseIndex.test.ts +103 -0
- package/src/components/mtfOverlay/__tests__/controller.test.ts +172 -0
- package/src/components/mtfOverlay/__tests__/resampleBars.test.ts +106 -0
- package/src/components/mtfOverlay/alignToBaseIndex.ts +108 -0
- package/src/components/mtfOverlay/createMtfController.ts +180 -0
- package/src/components/mtfOverlay/index.ts +26 -0
- package/src/components/mtfOverlay/resampleBars.ts +134 -0
- package/src/components/mtfOverlay/types.ts +148 -0
- package/src/components/orderBookHeatmap/__tests__/controller.test.ts +237 -0
- package/src/components/orderBookHeatmap/__tests__/deltaArchive.test.ts +88 -0
- package/src/components/orderBookHeatmap/__tests__/logColorScale.test.ts +69 -0
- package/src/components/orderBookHeatmap/__tests__/orderBookState.test.ts +113 -0
- package/src/components/orderBookHeatmap/__tests__/snapshotRing.test.ts +53 -0
- package/src/components/orderBookHeatmap/computeShader.wgsl.md +130 -0
- package/src/components/orderBookHeatmap/createHeatmapController.ts +273 -0
- package/src/components/orderBookHeatmap/createOrderBookState.ts +116 -0
- package/src/components/orderBookHeatmap/deltaArchive.ts +113 -0
- package/src/components/orderBookHeatmap/index.ts +25 -0
- package/src/components/orderBookHeatmap/logColorScale.ts +77 -0
- package/src/components/orderBookHeatmap/snapshotRing.ts +65 -0
- package/src/components/orderBookHeatmap/types.ts +168 -0
- package/src/components/volumeProfile/__tests__/binning.test.ts +133 -0
- package/src/components/volumeProfile/__tests__/poc.test.ts +44 -0
- package/src/components/volumeProfile/__tests__/valueArea.test.ts +177 -0
- package/src/components/volumeProfile/binning.ts +133 -0
- package/src/components/volumeProfile/createVolumeProfileController.ts +213 -0
- package/src/components/volumeProfile/index.ts +12 -0
- package/src/components/volumeProfile/poc.ts +53 -0
- package/src/components/volumeProfile/types.ts +148 -0
- package/src/components/volumeProfile/valueArea.ts +187 -0
- package/src/controllers/createChartController.ts +23 -10
- package/src/controllers/types.ts +5 -1
- package/src/data-fetchers/baostock.ts +2 -1
- package/src/data-fetchers/dataBuffer.effects.ts +3 -1
- package/src/data-fetchers/fetcherDefinitionRegistry.ts +2 -1
- package/src/data-fetchers/gotdx.ts +4 -3
- package/src/data-fetchers/router.ts +6 -3
- package/src/data-fetchers/tradingview.ts +3 -2
- package/src/engine/chart.ts +126 -3
- package/src/engine/data/chartDataManager.ts +26 -4
- package/src/engine/drawing/toolConfig.ts +2 -1
- package/src/engine/indicators/chartIndicatorManager.ts +2 -1
- package/src/engine/indicators/indicatorDefinitionRegistry.ts +2 -1
- package/src/engine/indicators/indicatorMetadata.ts +2 -1
- package/src/engine/indicators/indicatorRegistry.ts +6 -5
- package/src/engine/indicators/registerBuiltins.ts +2 -1
- package/src/engine/indicators/scheduler.ts +15 -0
- package/src/engine/indicators/soa.ts +2 -1
- package/src/engine/indicators/stateComposer.ts +2 -1
- package/src/engine/subPaneManager.ts +2 -1
- package/src/engine/utils/chartZoomController.ts +7 -1
- package/src/errors-help.ts +218 -0
- package/src/errors.ts +128 -0
- package/src/index.ts +37 -0
- package/src/indicators/__tests__/maFamily.test.ts +159 -0
- package/src/indicators/__tests__/oscillators.test.ts +150 -0
- package/src/indicators/alma.ts +61 -0
- package/src/indicators/awesomeOscillator.ts +54 -0
- package/src/indicators/dpo.ts +37 -0
- package/src/indicators/fisherTransform.ts +63 -0
- package/src/indicators/frama.ts +87 -0
- package/src/indicators/index.ts +39 -0
- package/src/indicators/lsma.ts +58 -0
- package/src/indicators/schaffTrendCycle.ts +92 -0
- package/src/indicators/stochRSI.ts +108 -0
- package/src/indicators/t3.ts +96 -0
- package/src/indicators/ultimateOscillator.ts +83 -0
- package/src/indicators/vidya.ts +80 -0
- package/src/indicators/zlema.ts +41 -0
- package/src/input/__tests__/gesture.test.ts +271 -0
- package/src/input/__tests__/keyboard.test.ts +317 -0
- package/src/input/gesture.ts +357 -0
- package/src/input/index.ts +26 -0
- package/src/input/keyboard.ts +373 -0
- package/src/mcp/chartBridge.ts +98 -72
- package/src/plugin/PluginHost.ts +4 -3
- package/src/plugin/PluginRegistry.ts +2 -1
- package/src/render/Renderer.ts +127 -0
- package/src/render/SurfaceBackend.ts +94 -0
- package/src/render/__tests__/contract.test.ts +176 -0
- package/src/render/index.ts +27 -0
- package/src/renderer-tier/__tests__/detectRendererTier.test.ts +180 -0
- package/src/renderer-tier/__tests__/selectBackend.test.ts +253 -0
- package/src/renderer-tier/detectRendererTier.ts +168 -0
- package/src/renderer-tier/index.ts +30 -0
- package/src/renderer-tier/selectBackend.ts +201 -0
- package/src/renderer-tier/types.ts +59 -0
- package/src/replay/__tests__/controller.test.ts +309 -0
- package/src/replay/__tests__/timeline.test.ts +99 -0
- package/src/replay/createReplayController.ts +302 -0
- package/src/replay/index.ts +15 -0
- package/src/replay/timeline.ts +106 -0
- package/src/replay/types.ts +107 -0
- package/src/scale/__tests__/anchoredZoom.test.ts +125 -0
- package/src/scale/__tests__/originShift.test.ts +97 -0
- package/src/scale/__tests__/priceScale.test.ts +219 -0
- package/src/scale/__tests__/timeScale.test.ts +119 -0
- package/src/scale/anchoredZoom.ts +104 -0
- package/src/scale/createPriceScale.ts +226 -0
- package/src/scale/createTimeScale.ts +150 -0
- package/src/scale/index.ts +9 -0
- package/src/scale/originShift.ts +111 -0
- package/src/scale/types.ts +100 -0
- package/src/scene/__tests__/layerRegistry.test.ts +207 -0
- package/src/scene/__tests__/scene.test.ts +411 -0
- package/src/scene/createScene.ts +117 -0
- package/src/scene/index.ts +29 -0
- package/src/scene/layerRegistry.ts +117 -0
- package/src/scene/types.ts +143 -0
- package/src/scheduler/__tests__/createFrameBudget.test.ts +315 -0
- package/src/scheduler/createFrameBudget.ts +316 -0
- package/src/scheduler/index.ts +7 -0
- package/src/tokens/themeToCssVars.ts +3 -1
- package/src/version.ts +1 -1
- package/dist/data-fetchers/gotdx/gotdx.d.ts +0 -7
- package/dist/data-fetchers/gotdx/gotdx.d.ts.map +0 -1
- package/dist/data-fetchers/gotdx/gotdx.js +0 -7
- package/dist/data-fetchers/gotdx/gotdx.js.map +0 -1
- package/src/data-fetchers/gotdx/gotdx.ts +0 -6
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level renderer interface — the drawing primitives the chart's
|
|
3
|
+
* scene layers (candles, volume, indicators, drawings) call into.
|
|
4
|
+
*
|
|
5
|
+
* Both the existing WebGL renderer (currently spread across
|
|
6
|
+
* `src/core/renderers/{candle,subVolume,crosshair,...}.ts`) and the
|
|
7
|
+
* P1 WebGPU renderer implement this contract. v0's WebGL path will
|
|
8
|
+
* be refactored to fit behind it in a follow-up PR (this file ships
|
|
9
|
+
* the contract first; the legacy code is unchanged until the next
|
|
10
|
+
* step is approved).
|
|
11
|
+
*
|
|
12
|
+
* Design notes:
|
|
13
|
+
* - `drawInstances` is the workhorse: render N copies of a unit geometry
|
|
14
|
+
* parameterized by an instance buffer. K-lines, volume bars, footprint
|
|
15
|
+
* cells, heatmap tiles all reduce to instanced primitives — see
|
|
16
|
+
* `docs/ROADMAP.md` §2.3 for the K-line example.
|
|
17
|
+
* - `drawLines` covers MA-style continuous polylines, drawings, axes.
|
|
18
|
+
* - `dispatchCompute` exists only because WebGPU has compute shaders;
|
|
19
|
+
* the WebGL implementation throws on call so callers can feature-detect
|
|
20
|
+
* via `caps.compute`. Volume Profile binning, M4 downsampling, footprint
|
|
21
|
+
* aggregation will use it on the WebGPU path.
|
|
22
|
+
* - `setUniforms` is intentionally schemaless on the interface — the
|
|
23
|
+
* uniform layout is owned by each shader/program. Callers pass a
|
|
24
|
+
* structured object that the backend translates into uniform writes.
|
|
25
|
+
*
|
|
26
|
+
* This file is **pure interface** in this PR; behaviour comes in the
|
|
27
|
+
* next two PRs (Scale interfaces, then a Renderer impl that wraps
|
|
28
|
+
* the existing WebGL primitives).
|
|
29
|
+
*/
|
|
30
|
+
import type { SurfaceBackend, SurfaceRegion } from './SurfaceBackend';
|
|
31
|
+
/** Reported by the backend so feature-conditional code can branch. */
|
|
32
|
+
export type RendererCapabilities = {
|
|
33
|
+
/** WebGPU compute shaders available. WebGL backends report false. */
|
|
34
|
+
compute: boolean;
|
|
35
|
+
/** Storage buffers usable as ring buffers / scatter-add targets. */
|
|
36
|
+
storageBuffer: boolean;
|
|
37
|
+
/** Maximum elements per drawInstances call (engine-imposed cap). */
|
|
38
|
+
maxInstances: number;
|
|
39
|
+
/** Friendly name, e.g. "webgl2" or "webgpu". */
|
|
40
|
+
name: string;
|
|
41
|
+
};
|
|
42
|
+
/** Vertex/instance buffer wrapper. Backends own the GPU handle. */
|
|
43
|
+
export type BufferHandle = {
|
|
44
|
+
readonly __brand: 'BufferHandle';
|
|
45
|
+
};
|
|
46
|
+
/** Pipeline / shader program wrapper. */
|
|
47
|
+
export type PipelineHandle = {
|
|
48
|
+
readonly __brand: 'PipelineHandle';
|
|
49
|
+
};
|
|
50
|
+
/** Compute shader handle (WebGPU only). */
|
|
51
|
+
export type ComputePipelineHandle = {
|
|
52
|
+
readonly __brand: 'ComputePipelineHandle';
|
|
53
|
+
};
|
|
54
|
+
export type BufferUsage = 'vertex' | 'instance' | 'index' | 'uniform' | 'storage';
|
|
55
|
+
export type DrawInstancesParams = {
|
|
56
|
+
pipeline: PipelineHandle;
|
|
57
|
+
/** Unit-geometry buffer (e.g. a single rectangle) shared across instances. */
|
|
58
|
+
vertices: BufferHandle;
|
|
59
|
+
/** Per-instance attribute buffer (e.g. one row per K-line). */
|
|
60
|
+
instances: BufferHandle;
|
|
61
|
+
/** Number of instances to draw. */
|
|
62
|
+
instanceCount: number;
|
|
63
|
+
/** Vertices per instance (e.g. 4 for a quad, 6 if using triangles). */
|
|
64
|
+
vertexCount: number;
|
|
65
|
+
/** Uniform block — opaque object the backend reads. */
|
|
66
|
+
uniforms?: Record<string, unknown>;
|
|
67
|
+
};
|
|
68
|
+
export type DrawLinesParams = {
|
|
69
|
+
pipeline: PipelineHandle;
|
|
70
|
+
vertices: BufferHandle;
|
|
71
|
+
vertexCount: number;
|
|
72
|
+
/** Line strip vs disconnected segments. */
|
|
73
|
+
topology?: 'strip' | 'list';
|
|
74
|
+
uniforms?: Record<string, unknown>;
|
|
75
|
+
};
|
|
76
|
+
export type DispatchComputeParams = {
|
|
77
|
+
pipeline: ComputePipelineHandle;
|
|
78
|
+
/** Workgroup counts per axis. */
|
|
79
|
+
workgroups: [number, number?, number?];
|
|
80
|
+
/** Input/output buffer bindings, keyed by binding index. */
|
|
81
|
+
bindings: Record<number, BufferHandle>;
|
|
82
|
+
uniforms?: Record<string, unknown>;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* The drawing-primitives interface every backend implements.
|
|
86
|
+
*
|
|
87
|
+
* Backends own the GPU resources; callers receive opaque handles
|
|
88
|
+
* (`BufferHandle`, `PipelineHandle`) and pass them back for draws.
|
|
89
|
+
*/
|
|
90
|
+
export interface Renderer {
|
|
91
|
+
/** Underlying surface (for region binding and final composite). */
|
|
92
|
+
readonly surface: SurfaceBackend;
|
|
93
|
+
/** Reported feature flags — caller branches on `caps.compute` etc. */
|
|
94
|
+
readonly caps: RendererCapabilities;
|
|
95
|
+
createBuffer(usage: BufferUsage, sizeBytes: number): BufferHandle;
|
|
96
|
+
writeBuffer(handle: BufferHandle, data: ArrayBufferView, offsetBytes?: number): void;
|
|
97
|
+
destroyBuffer(handle: BufferHandle): void;
|
|
98
|
+
/**
|
|
99
|
+
* Compile a shader pipeline. The exact pipeline descriptor is backend-specific;
|
|
100
|
+
* adapters typically expose factory helpers (e.g. `createCandlePipeline`) that
|
|
101
|
+
* internally call this with the right vertex/fragment sources.
|
|
102
|
+
*/
|
|
103
|
+
createPipeline(descriptor: unknown): PipelineHandle;
|
|
104
|
+
destroyPipeline(handle: PipelineHandle): void;
|
|
105
|
+
/** WebGPU only — WebGL implementations MUST throw with a clear message. */
|
|
106
|
+
createComputePipeline(descriptor: unknown): ComputePipelineHandle;
|
|
107
|
+
destroyComputePipeline(handle: ComputePipelineHandle): void;
|
|
108
|
+
beginFrame(region: SurfaceRegion): void;
|
|
109
|
+
drawInstances(params: DrawInstancesParams): void;
|
|
110
|
+
drawLines(params: DrawLinesParams): void;
|
|
111
|
+
/** WebGPU only — WebGL implementations MUST throw. Caller checks caps first. */
|
|
112
|
+
dispatchCompute(params: DispatchComputeParams): void;
|
|
113
|
+
endFrame(): void;
|
|
114
|
+
dispose(): void;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=Renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../src/render/Renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level renderer interface — the drawing primitives the chart's
|
|
3
|
+
* scene layers (candles, volume, indicators, drawings) call into.
|
|
4
|
+
*
|
|
5
|
+
* Both the existing WebGL renderer (currently spread across
|
|
6
|
+
* `src/core/renderers/{candle,subVolume,crosshair,...}.ts`) and the
|
|
7
|
+
* P1 WebGPU renderer implement this contract. v0's WebGL path will
|
|
8
|
+
* be refactored to fit behind it in a follow-up PR (this file ships
|
|
9
|
+
* the contract first; the legacy code is unchanged until the next
|
|
10
|
+
* step is approved).
|
|
11
|
+
*
|
|
12
|
+
* Design notes:
|
|
13
|
+
* - `drawInstances` is the workhorse: render N copies of a unit geometry
|
|
14
|
+
* parameterized by an instance buffer. K-lines, volume bars, footprint
|
|
15
|
+
* cells, heatmap tiles all reduce to instanced primitives — see
|
|
16
|
+
* `docs/ROADMAP.md` §2.3 for the K-line example.
|
|
17
|
+
* - `drawLines` covers MA-style continuous polylines, drawings, axes.
|
|
18
|
+
* - `dispatchCompute` exists only because WebGPU has compute shaders;
|
|
19
|
+
* the WebGL implementation throws on call so callers can feature-detect
|
|
20
|
+
* via `caps.compute`. Volume Profile binning, M4 downsampling, footprint
|
|
21
|
+
* aggregation will use it on the WebGPU path.
|
|
22
|
+
* - `setUniforms` is intentionally schemaless on the interface — the
|
|
23
|
+
* uniform layout is owned by each shader/program. Callers pass a
|
|
24
|
+
* structured object that the backend translates into uniform writes.
|
|
25
|
+
*
|
|
26
|
+
* This file is **pure interface** in this PR; behaviour comes in the
|
|
27
|
+
* next two PRs (Scale interfaces, then a Renderer impl that wraps
|
|
28
|
+
* the existing WebGL primitives).
|
|
29
|
+
*/
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=Renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Renderer.js","sourceRoot":"","sources":["../../src/render/Renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level GPU surface backend.
|
|
3
|
+
*
|
|
4
|
+
* Abstracts canvas + context lifecycle, viewport / scissor regions, clear,
|
|
5
|
+
* compositing into a 2D canvas overlay, and teardown. Both the existing
|
|
6
|
+
* WebGL surface (`src/core/renderers/webgl/sharedWebGLSurface.ts`) and the
|
|
7
|
+
* P1 WebGPU surface implement this contract.
|
|
8
|
+
*
|
|
9
|
+
* This file is **pure interface** — no implementation. It exists so that:
|
|
10
|
+
*
|
|
11
|
+
* 1. Existing WebGL code can declare conformance via a one-line adapter
|
|
12
|
+
* (see `createLegacyWebGLBackend` below) without changing any behaviour.
|
|
13
|
+
* 2. P1's WebGPU implementation has a fixed target to write against.
|
|
14
|
+
* 3. The higher-level `Renderer` (`./Renderer.ts`) can compose a backend
|
|
15
|
+
* without knowing which GPU API it sits on.
|
|
16
|
+
*
|
|
17
|
+
* Design notes:
|
|
18
|
+
* - All region coordinates are in **logical pixels** with the surface
|
|
19
|
+
* responsible for DPR scaling internally. This matches the existing
|
|
20
|
+
* `WebGLRegion` semantics so the legacy adapter is a transparent pass-through.
|
|
21
|
+
* - `compositeTo` takes a 2D `CanvasRenderingContext2D` because the chart's
|
|
22
|
+
* final composition target is a 2D overlay canvas — WebGL/WebGPU pixels
|
|
23
|
+
* are drawn into the overlay via `drawImage`. Future paths that bypass
|
|
24
|
+
* the 2D overlay (direct-to-screen WebGPU) can leave `compositeTo` as a no-op.
|
|
25
|
+
*/
|
|
26
|
+
export type SurfaceRegion = {
|
|
27
|
+
/** logical-pixel X of the region's top-left within the surface */
|
|
28
|
+
x: number;
|
|
29
|
+
/** logical-pixel Y of the region's top-left within the surface */
|
|
30
|
+
y: number;
|
|
31
|
+
/** logical-pixel width */
|
|
32
|
+
width: number;
|
|
33
|
+
/** logical-pixel height */
|
|
34
|
+
height: number;
|
|
35
|
+
/** device pixel ratio used to convert logical → physical */
|
|
36
|
+
dpr: number;
|
|
37
|
+
};
|
|
38
|
+
export type CompositeOptions = {
|
|
39
|
+
/** multiplied into the destination context's globalAlpha (0..1) */
|
|
40
|
+
alpha?: number;
|
|
41
|
+
/** if false, blocks `imageSmoothingEnabled` during the drawImage */
|
|
42
|
+
imageSmoothingEnabled?: boolean;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* One GPU surface (WebGL2 today, WebGPU in P1). Stateless w.r.t. drawing
|
|
46
|
+
* primitives — those belong to `Renderer`.
|
|
47
|
+
*/
|
|
48
|
+
export interface SurfaceBackend {
|
|
49
|
+
/** Returns false if the underlying context could not be initialised. */
|
|
50
|
+
isAvailable(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Resize the underlying canvas's physical (DPR-scaled) drawing buffer.
|
|
53
|
+
* Idempotent when called with the same arguments.
|
|
54
|
+
*/
|
|
55
|
+
resize(widthLogical: number, heightLogical: number, dpr: number): void;
|
|
56
|
+
/**
|
|
57
|
+
* Bind a region for subsequent draw commands.
|
|
58
|
+
* Activates scissor + viewport sized to `region`. Returns false if the
|
|
59
|
+
* region is empty or the backend is unavailable.
|
|
60
|
+
*/
|
|
61
|
+
bindRegion(region: SurfaceRegion): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Clear the most recently bound region to transparent black.
|
|
64
|
+
* Must be called after `bindRegion`. Backends MAY no-op if no region
|
|
65
|
+
* is currently bound.
|
|
66
|
+
*/
|
|
67
|
+
clearRegion(region: SurfaceRegion): void;
|
|
68
|
+
/**
|
|
69
|
+
* Copy the contents of `region` (in surface coordinates) onto the
|
|
70
|
+
* provided 2D context at its current origin. Used to composite GPU
|
|
71
|
+
* output into the final 2D overlay canvas the user sees.
|
|
72
|
+
*
|
|
73
|
+
* Implementations MUST restore any context state they mutate
|
|
74
|
+
* (`globalAlpha`, `imageSmoothingEnabled`, transform).
|
|
75
|
+
*/
|
|
76
|
+
compositeTo(targetCtx: CanvasRenderingContext2D, region: SurfaceRegion, options?: CompositeOptions): void;
|
|
77
|
+
/**
|
|
78
|
+
* Tear down GPU resources. After dispose, all other methods become no-ops.
|
|
79
|
+
* Idempotent.
|
|
80
|
+
*/
|
|
81
|
+
dispose(): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=SurfaceBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceBackend.d.ts","sourceRoot":"","sources":["../../src/render/SurfaceBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,MAAM,aAAa,GAAG;IACxB,kEAAkE;IAClE,CAAC,EAAE,MAAM,CAAA;IACT,kEAAkE;IAClE,CAAC,EAAE,MAAM,CAAA;IACT,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,wEAAwE;IACxE,WAAW,IAAI,OAAO,CAAA;IAEtB;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAEtE;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAA;IAE1C;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAExC;;;;;;;OAOG;IACH,WAAW,CACP,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,gBAAgB,GAC3B,IAAI,CAAA;IAEP;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAA;CAClB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level GPU surface backend.
|
|
3
|
+
*
|
|
4
|
+
* Abstracts canvas + context lifecycle, viewport / scissor regions, clear,
|
|
5
|
+
* compositing into a 2D canvas overlay, and teardown. Both the existing
|
|
6
|
+
* WebGL surface (`src/core/renderers/webgl/sharedWebGLSurface.ts`) and the
|
|
7
|
+
* P1 WebGPU surface implement this contract.
|
|
8
|
+
*
|
|
9
|
+
* This file is **pure interface** — no implementation. It exists so that:
|
|
10
|
+
*
|
|
11
|
+
* 1. Existing WebGL code can declare conformance via a one-line adapter
|
|
12
|
+
* (see `createLegacyWebGLBackend` below) without changing any behaviour.
|
|
13
|
+
* 2. P1's WebGPU implementation has a fixed target to write against.
|
|
14
|
+
* 3. The higher-level `Renderer` (`./Renderer.ts`) can compose a backend
|
|
15
|
+
* without knowing which GPU API it sits on.
|
|
16
|
+
*
|
|
17
|
+
* Design notes:
|
|
18
|
+
* - All region coordinates are in **logical pixels** with the surface
|
|
19
|
+
* responsible for DPR scaling internally. This matches the existing
|
|
20
|
+
* `WebGLRegion` semantics so the legacy adapter is a transparent pass-through.
|
|
21
|
+
* - `compositeTo` takes a 2D `CanvasRenderingContext2D` because the chart's
|
|
22
|
+
* final composition target is a 2D overlay canvas — WebGL/WebGPU pixels
|
|
23
|
+
* are drawn into the overlay via `drawImage`. Future paths that bypass
|
|
24
|
+
* the 2D overlay (direct-to-screen WebGPU) can leave `compositeTo` as a no-op.
|
|
25
|
+
*/
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=SurfaceBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceBackend.js","sourceRoot":"","sources":["../../src/render/SurfaceBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer abstraction barrel.
|
|
3
|
+
*
|
|
4
|
+
* The two interfaces (`SurfaceBackend`, `Renderer`) define the contract every
|
|
5
|
+
* GPU backend implements. v0's WebGL code (in `src/core/renderers/`) will be
|
|
6
|
+
* refactored to fit behind these in a follow-up PR; this PR ships the contract
|
|
7
|
+
* only, so subsequent PRs can land WebGPU and WebGL impls in parallel without
|
|
8
|
+
* either blocking on the other's interface decisions.
|
|
9
|
+
*/
|
|
10
|
+
export type { SurfaceBackend, SurfaceRegion, CompositeOptions, } from './SurfaceBackend';
|
|
11
|
+
export type { Renderer, RendererCapabilities, BufferHandle, PipelineHandle, ComputePipelineHandle, BufferUsage, DrawInstancesParams, DrawLinesParams, DispatchComputeParams, } from './Renderer';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,GACnB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACR,QAAQ,EACR,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GACxB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer abstraction barrel.
|
|
3
|
+
*
|
|
4
|
+
* The two interfaces (`SurfaceBackend`, `Renderer`) define the contract every
|
|
5
|
+
* GPU backend implements. v0's WebGL code (in `src/core/renderers/`) will be
|
|
6
|
+
* refactored to fit behind these in a follow-up PR; this PR ships the contract
|
|
7
|
+
* only, so subsequent PRs can land WebGPU and WebGL impls in parallel without
|
|
8
|
+
* either blocking on the other's interface decisions.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronous renderer tier detection.
|
|
3
|
+
*
|
|
4
|
+
* Probes (in descending capability order):
|
|
5
|
+
*
|
|
6
|
+
* 1. **webgpu** `'gpu' in navigator`. We deliberately do NOT call
|
|
7
|
+
* `navigator.gpu.requestAdapter()` here — that's async
|
|
8
|
+
* and the answer can change between probe and use
|
|
9
|
+
* (e.g. user toggles the WebGPU flag). The renderer
|
|
10
|
+
* should retry adapter acquisition at startup; this
|
|
11
|
+
* sync check is a pre-mount fast path.
|
|
12
|
+
*
|
|
13
|
+
* 2. **webgl2** `canvas.getContext('webgl2') !== null`. Probes a
|
|
14
|
+
* throwaway `<canvas>`; if the browser hard-disabled
|
|
15
|
+
* WebGL (some hardened policies do), this returns
|
|
16
|
+
* null and we fall through.
|
|
17
|
+
*
|
|
18
|
+
* 3. **canvas2d** `canvas.getContext('2d') !== null`. Universal
|
|
19
|
+
* fallback for browsers from the 2010s onwards.
|
|
20
|
+
*
|
|
21
|
+
* 4. **none** None of the above worked — likely SSR (no document)
|
|
22
|
+
* or a sandboxed environment. The caller can decide
|
|
23
|
+
* whether that's an error or a "render nothing" state.
|
|
24
|
+
*
|
|
25
|
+
* All exceptions from a probe are caught and folded into the `reason`
|
|
26
|
+
* field — a probe that throws is treated identically to one that
|
|
27
|
+
* returns false (no tier-skip cascade).
|
|
28
|
+
*/
|
|
29
|
+
import { type DetectRendererTierOptions, type RendererTier, type RendererTierResult } from './types';
|
|
30
|
+
/**
|
|
31
|
+
* Detect the best renderer tier available in the current environment.
|
|
32
|
+
*
|
|
33
|
+
* Returns synchronously. Use this at the call site of `createChart` to
|
|
34
|
+
* pick the renderer backend; persist the result if you re-mount, since
|
|
35
|
+
* recomputing is cheap but not free (probing creates a throwaway canvas).
|
|
36
|
+
*/
|
|
37
|
+
export declare function detectRendererTier(opts?: DetectRendererTierOptions): RendererTierResult;
|
|
38
|
+
/**
|
|
39
|
+
* Strict variant: throws `KLineChartError('INVALID_STATE')` when no
|
|
40
|
+
* renderable tier is found. Use when you want a hard failure rather
|
|
41
|
+
* than a silent `'none'`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function detectRendererTierOrThrow(opts?: DetectRendererTierOptions): RendererTierResult;
|
|
44
|
+
/**
|
|
45
|
+
* Three-way compare on the tier rank. `a > b → 1`, `a < b → -1`, equal → 0.
|
|
46
|
+
*
|
|
47
|
+
* compareRendererTier('webgpu', 'webgl2') === 1
|
|
48
|
+
* compareRendererTier('canvas2d', 'webgl2') === -1
|
|
49
|
+
* compareRendererTier('webgl2', 'webgl2') === 0
|
|
50
|
+
*/
|
|
51
|
+
export declare function compareRendererTier(a: RendererTier, b: RendererTier): -1 | 0 | 1;
|
|
52
|
+
/**
|
|
53
|
+
* `tier >= minimum` guard for renderer features that require a floor
|
|
54
|
+
* (e.g. GPU compute volume profile needs `>= 'webgl2'`).
|
|
55
|
+
*/
|
|
56
|
+
export declare function isTierAtLeast(tier: RendererTier, minimum: RendererTier): boolean;
|
|
57
|
+
//# sourceMappingURL=detectRendererTier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectRendererTier.d.ts","sourceRoot":"","sources":["../../src/renderer-tier/detectRendererTier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAEH,KAAK,yBAAyB,EAC9B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAC1B,MAAM,SAAS,CAAA;AAmDhB;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,CAAC,EAAE,yBAAyB,GACjC,kBAAkB,CA+BpB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACrC,IAAI,CAAC,EAAE,yBAAyB,GACjC,kBAAkB,CASpB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAMhF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAEhF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronous renderer tier detection.
|
|
3
|
+
*
|
|
4
|
+
* Probes (in descending capability order):
|
|
5
|
+
*
|
|
6
|
+
* 1. **webgpu** `'gpu' in navigator`. We deliberately do NOT call
|
|
7
|
+
* `navigator.gpu.requestAdapter()` here — that's async
|
|
8
|
+
* and the answer can change between probe and use
|
|
9
|
+
* (e.g. user toggles the WebGPU flag). The renderer
|
|
10
|
+
* should retry adapter acquisition at startup; this
|
|
11
|
+
* sync check is a pre-mount fast path.
|
|
12
|
+
*
|
|
13
|
+
* 2. **webgl2** `canvas.getContext('webgl2') !== null`. Probes a
|
|
14
|
+
* throwaway `<canvas>`; if the browser hard-disabled
|
|
15
|
+
* WebGL (some hardened policies do), this returns
|
|
16
|
+
* null and we fall through.
|
|
17
|
+
*
|
|
18
|
+
* 3. **canvas2d** `canvas.getContext('2d') !== null`. Universal
|
|
19
|
+
* fallback for browsers from the 2010s onwards.
|
|
20
|
+
*
|
|
21
|
+
* 4. **none** None of the above worked — likely SSR (no document)
|
|
22
|
+
* or a sandboxed environment. The caller can decide
|
|
23
|
+
* whether that's an error or a "render nothing" state.
|
|
24
|
+
*
|
|
25
|
+
* All exceptions from a probe are caught and folded into the `reason`
|
|
26
|
+
* field — a probe that throws is treated identically to one that
|
|
27
|
+
* returns false (no tier-skip cascade).
|
|
28
|
+
*/
|
|
29
|
+
import { KLineChartError } from '../errors';
|
|
30
|
+
import { RENDERER_TIER_RANK, } from './types';
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Production probes — only run when no override is supplied
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
function probeWebGpu() {
|
|
35
|
+
const nav = globalThis.navigator;
|
|
36
|
+
if (typeof nav !== 'object' || nav === null)
|
|
37
|
+
return false;
|
|
38
|
+
return 'gpu' in nav;
|
|
39
|
+
}
|
|
40
|
+
function probeWebGl2() {
|
|
41
|
+
const doc = globalThis.document;
|
|
42
|
+
if (typeof doc?.createElement !== 'function')
|
|
43
|
+
return false;
|
|
44
|
+
const canvas = doc.createElement('canvas');
|
|
45
|
+
if (typeof canvas.getContext !== 'function')
|
|
46
|
+
return false;
|
|
47
|
+
return canvas.getContext('webgl2') !== null;
|
|
48
|
+
}
|
|
49
|
+
function probeCanvas2d() {
|
|
50
|
+
const doc = globalThis.document;
|
|
51
|
+
if (typeof doc?.createElement !== 'function')
|
|
52
|
+
return false;
|
|
53
|
+
const canvas = doc.createElement('canvas');
|
|
54
|
+
if (typeof canvas.getContext !== 'function')
|
|
55
|
+
return false;
|
|
56
|
+
return canvas.getContext('2d') !== null;
|
|
57
|
+
}
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// runProbe — adapter that turns probe → "ok, false, or error string"
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
function runProbe(probe) {
|
|
62
|
+
try {
|
|
63
|
+
return { ok: probe() === true, error: null };
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
67
|
+
return { ok: false, error: msg };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Public API
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
const TIER_ORDER = ['webgpu', 'webgl2', 'canvas2d'];
|
|
74
|
+
/**
|
|
75
|
+
* Detect the best renderer tier available in the current environment.
|
|
76
|
+
*
|
|
77
|
+
* Returns synchronously. Use this at the call site of `createChart` to
|
|
78
|
+
* pick the renderer backend; persist the result if you re-mount, since
|
|
79
|
+
* recomputing is cheap but not free (probing creates a throwaway canvas).
|
|
80
|
+
*/
|
|
81
|
+
export function detectRendererTier(opts) {
|
|
82
|
+
const probes = opts?.probes ?? {};
|
|
83
|
+
const reasonParts = [];
|
|
84
|
+
const tried = [];
|
|
85
|
+
for (const tier of TIER_ORDER) {
|
|
86
|
+
tried.push(tier);
|
|
87
|
+
const probe = tier === 'webgpu'
|
|
88
|
+
? (probes.webgpu ?? probeWebGpu)
|
|
89
|
+
: tier === 'webgl2'
|
|
90
|
+
? (probes.webgl2 ?? probeWebGl2)
|
|
91
|
+
: (probes.canvas2d ?? probeCanvas2d);
|
|
92
|
+
const r = runProbe(probe);
|
|
93
|
+
if (r.ok) {
|
|
94
|
+
return {
|
|
95
|
+
tier,
|
|
96
|
+
reason: `selected ${tier} (${reasonParts.length === 0 ? 'first probe succeeded' : reasonParts.join('; ')})`,
|
|
97
|
+
tried: [...tried],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
reasonParts.push(r.error === null ? `${tier}: not available` : `${tier}: threw "${r.error}"`);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
tier: 'none',
|
|
104
|
+
reason: `no tier available — ${reasonParts.join('; ')}`,
|
|
105
|
+
tried: [...tried],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Strict variant: throws `KLineChartError('INVALID_STATE')` when no
|
|
110
|
+
* renderable tier is found. Use when you want a hard failure rather
|
|
111
|
+
* than a silent `'none'`.
|
|
112
|
+
*/
|
|
113
|
+
export function detectRendererTierOrThrow(opts) {
|
|
114
|
+
const r = detectRendererTier(opts);
|
|
115
|
+
if (r.tier === 'none') {
|
|
116
|
+
throw new KLineChartError('INVALID_STATE', `detectRendererTierOrThrow: ${r.reason}`);
|
|
117
|
+
}
|
|
118
|
+
return r;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Three-way compare on the tier rank. `a > b → 1`, `a < b → -1`, equal → 0.
|
|
122
|
+
*
|
|
123
|
+
* compareRendererTier('webgpu', 'webgl2') === 1
|
|
124
|
+
* compareRendererTier('canvas2d', 'webgl2') === -1
|
|
125
|
+
* compareRendererTier('webgl2', 'webgl2') === 0
|
|
126
|
+
*/
|
|
127
|
+
export function compareRendererTier(a, b) {
|
|
128
|
+
const ra = RENDERER_TIER_RANK[a];
|
|
129
|
+
const rb = RENDERER_TIER_RANK[b];
|
|
130
|
+
if (ra > rb)
|
|
131
|
+
return 1;
|
|
132
|
+
if (ra < rb)
|
|
133
|
+
return -1;
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* `tier >= minimum` guard for renderer features that require a floor
|
|
138
|
+
* (e.g. GPU compute volume profile needs `>= 'webgl2'`).
|
|
139
|
+
*/
|
|
140
|
+
export function isTierAtLeast(tier, minimum) {
|
|
141
|
+
return compareRendererTier(tier, minimum) >= 0;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=detectRendererTier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectRendererTier.js","sourceRoot":"","sources":["../../src/renderer-tier/detectRendererTier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @klinechart-quant/core/renderer-tier — pre-mount renderer tier detection.
|
|
3
|
+
*
|
|
4
|
+
* Used by the `Renderer` factory to pick the highest backend the host
|
|
5
|
+
* environment supports (WebGPU → WebGL2 → Canvas2D → none).
|
|
6
|
+
*
|
|
7
|
+
* See `./detectRendererTier.ts` for design notes.
|
|
8
|
+
*/
|
|
9
|
+
export { detectRendererTier, detectRendererTierOrThrow, compareRendererTier, isTierAtLeast, } from './detectRendererTier';
|
|
10
|
+
export { selectBackend, selectBackendOrThrow, type BackendFactory, type BackendRegistry, type BackendSelection, type SelectBackendOptions, } from './selectBackend';
|
|
11
|
+
export { RENDERER_TIER_RANK, type RendererTier, type RendererTierResult, type RendererTierProbes, type DetectRendererTierOptions, } from './types';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer-tier/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACH,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACH,aAAa,EACb,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC5B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACH,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GACjC,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @klinechart-quant/core/renderer-tier — pre-mount renderer tier detection.
|
|
3
|
+
*
|
|
4
|
+
* Used by the `Renderer` factory to pick the highest backend the host
|
|
5
|
+
* environment supports (WebGPU → WebGL2 → Canvas2D → none).
|
|
6
|
+
*
|
|
7
|
+
* See `./detectRendererTier.ts` for design notes.
|
|
8
|
+
*/
|
|
9
|
+
export { detectRendererTier, detectRendererTierOrThrow, compareRendererTier, isTierAtLeast, } from './detectRendererTier';
|
|
10
|
+
export { selectBackend, selectBackendOrThrow, } from './selectBackend';
|
|
11
|
+
export { RENDERER_TIER_RANK, } from './types';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer-tier/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACH,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACH,aAAa,EACb,oBAAoB,GAKvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACH,kBAAkB,GAKrB,MAAM,SAAS,CAAA"}
|