@forgecharts/sdk 1.1.23 → 1.1.28
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/__tests__/backwardCompatibility.test.d.ts +14 -0
- package/dist/__tests__/backwardCompatibility.test.d.ts.map +1 -0
- package/dist/__tests__/backwardCompatibility.test.js +159 -0
- package/dist/__tests__/backwardCompatibility.test.js.map +1 -0
- package/dist/__tests__/candleInvariant.test.d.ts +20 -0
- package/dist/__tests__/candleInvariant.test.d.ts.map +1 -0
- package/dist/__tests__/candleInvariant.test.js +415 -0
- package/dist/__tests__/candleInvariant.test.js.map +1 -0
- package/dist/__tests__/public-api-surface.d.ts +13 -0
- package/dist/__tests__/public-api-surface.d.ts.map +1 -0
- package/{src/__tests__/public-api-surface.ts → dist/__tests__/public-api-surface.js} +4 -42
- package/dist/__tests__/public-api-surface.js.map +1 -0
- package/dist/__tests__/timeframeBoundary.test.d.ts +17 -0
- package/dist/__tests__/timeframeBoundary.test.d.ts.map +1 -0
- package/dist/__tests__/timeframeBoundary.test.js +452 -0
- package/dist/__tests__/timeframeBoundary.test.js.map +1 -0
- package/dist/api/DrawingManager.d.ts +20 -0
- package/dist/api/DrawingManager.d.ts.map +1 -0
- package/dist/api/DrawingManager.js +190 -0
- package/dist/api/DrawingManager.js.map +1 -0
- package/dist/api/EventBus.d.ts +19 -0
- package/dist/api/EventBus.d.ts.map +1 -0
- package/dist/api/EventBus.js +44 -0
- package/dist/api/EventBus.js.map +1 -0
- package/dist/api/IndicatorDAG.d.ts +85 -0
- package/dist/api/IndicatorDAG.d.ts.map +1 -0
- package/dist/api/IndicatorDAG.js +316 -0
- package/dist/api/IndicatorDAG.js.map +1 -0
- package/dist/api/IndicatorRegistry.d.ts +22 -0
- package/dist/api/IndicatorRegistry.d.ts.map +1 -0
- package/dist/api/IndicatorRegistry.js +39 -0
- package/dist/api/IndicatorRegistry.js.map +1 -0
- package/dist/api/LayoutManager.d.ts +30 -0
- package/dist/api/LayoutManager.d.ts.map +1 -0
- package/dist/api/LayoutManager.js +51 -0
- package/dist/api/LayoutManager.js.map +1 -0
- package/dist/api/PaneManager.d.ts +42 -0
- package/dist/api/PaneManager.d.ts.map +1 -0
- package/dist/api/PaneManager.js +119 -0
- package/dist/api/PaneManager.js.map +1 -0
- package/dist/api/ReferenceAPI.d.ts +78 -0
- package/dist/api/ReferenceAPI.d.ts.map +1 -0
- package/dist/api/ReferenceAPI.js +153 -0
- package/dist/api/ReferenceAPI.js.map +1 -0
- package/dist/api/TChart.d.ts +345 -0
- package/dist/api/TChart.d.ts.map +1 -0
- package/dist/api/TChart.js +765 -0
- package/dist/api/TChart.js.map +1 -0
- package/{src/api/createChart.ts → dist/api/createChart.d.ts} +2 -7
- package/dist/api/createChart.d.ts.map +1 -0
- package/dist/api/createChart.js +42 -0
- package/dist/api/createChart.js.map +1 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts +4 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts.map +1 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.js +22 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +1 -0
- package/dist/api/drawing tools/lines menu/crossLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/crossLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/crossLine.js +16 -0
- package/dist/api/drawing tools/lines menu/crossLine.js.map +1 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.d.ts +17 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.js +59 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.js.map +1 -0
- package/dist/api/drawing tools/lines menu/extendedLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/extendedLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/extendedLine.js +17 -0
- package/dist/api/drawing tools/lines menu/extendedLine.js.map +1 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.js +41 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontal.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/horizontal.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontal.js +19 -0
- package/dist/api/drawing tools/lines menu/horizontal.js.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.js +20 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.js.map +1 -0
- package/dist/api/drawing tools/lines menu/infoLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/infoLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/infoLine.js +107 -0
- package/dist/api/drawing tools/lines menu/infoLine.js.map +1 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.js +31 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +1 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +15 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +1 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.js +43 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.js.map +1 -0
- package/dist/api/drawing tools/lines menu/pitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/pitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/pitchfork.js +12 -0
- package/dist/api/drawing tools/lines menu/pitchfork.js.map +1 -0
- package/dist/api/drawing tools/lines menu/ray.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/ray.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/ray.js +23 -0
- package/dist/api/drawing tools/lines menu/ray.js.map +1 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.js +127 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.js.map +1 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.js +15 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +1 -0
- package/dist/api/drawing tools/lines menu/trendAngle.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/trendAngle.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/trendAngle.js +51 -0
- package/dist/api/drawing tools/lines menu/trendAngle.js.map +1 -0
- package/dist/api/drawing tools/lines menu/trendline.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/trendline.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/trendline.js +11 -0
- package/dist/api/drawing tools/lines menu/trendline.js.map +1 -0
- package/dist/api/drawing tools/lines menu/vertical.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/vertical.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/vertical.js +11 -0
- package/dist/api/drawing tools/lines menu/vertical.js.map +1 -0
- package/dist/api/drawing tools/pointers menu/crosshair.d.ts +16 -0
- package/dist/api/drawing tools/pointers menu/crosshair.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/crosshair.ts → dist/api/drawing tools/pointers menu/crosshair.js } +6 -7
- package/dist/api/drawing tools/pointers menu/crosshair.js.map +1 -0
- package/dist/api/drawing tools/pointers menu/cursor.d.ts +15 -0
- package/dist/api/drawing tools/pointers menu/cursor.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/cursor.ts → dist/api/drawing tools/pointers menu/cursor.js } +7 -8
- package/dist/api/drawing tools/pointers menu/cursor.js.map +1 -0
- package/dist/api/drawing tools/pointers menu/demonstration.d.ts +30 -0
- package/dist/api/drawing tools/pointers menu/demonstration.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/demonstration.ts → dist/api/drawing tools/pointers menu/demonstration.js } +9 -14
- package/dist/api/drawing tools/pointers menu/demonstration.js.map +1 -0
- package/dist/api/drawing tools/pointers menu/dot.d.ts +23 -0
- package/dist/api/drawing tools/pointers menu/dot.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/dot.ts → dist/api/drawing tools/pointers menu/dot.js } +8 -11
- package/dist/api/drawing tools/pointers menu/dot.js.map +1 -0
- package/dist/api/drawing tools/shapes menu/rectangle.d.ts +4 -0
- package/dist/api/drawing tools/shapes menu/rectangle.d.ts.map +1 -0
- package/dist/api/drawing tools/shapes menu/rectangle.js +19 -0
- package/dist/api/drawing tools/shapes menu/rectangle.js.map +1 -0
- package/dist/api/drawing tools/shapes menu/text.d.ts +4 -0
- package/dist/api/drawing tools/shapes menu/text.d.ts.map +1 -0
- package/dist/api/drawing tools/shapes menu/text.js +25 -0
- package/dist/api/drawing tools/shapes menu/text.js.map +1 -0
- package/dist/api/drawingUtils.d.ts +22 -0
- package/dist/api/drawingUtils.d.ts.map +1 -0
- package/dist/api/drawingUtils.js +83 -0
- package/dist/api/drawingUtils.js.map +1 -0
- package/dist/core/CanvasLayer.d.ts +26 -0
- package/dist/core/CanvasLayer.d.ts.map +1 -0
- package/dist/core/CanvasLayer.js +56 -0
- package/dist/core/CanvasLayer.js.map +1 -0
- package/dist/core/Chart.d.ts +164 -0
- package/dist/core/Chart.d.ts.map +1 -0
- package/dist/core/Chart.js +839 -0
- package/dist/core/Chart.js.map +1 -0
- package/dist/core/CoordTransform.d.ts +168 -0
- package/dist/core/CoordTransform.d.ts.map +1 -0
- package/dist/core/CoordTransform.js +224 -0
- package/dist/core/CoordTransform.js.map +1 -0
- package/dist/core/Crosshair.d.ts +30 -0
- package/dist/core/Crosshair.d.ts.map +1 -0
- package/dist/core/Crosshair.js +186 -0
- package/dist/core/Crosshair.js.map +1 -0
- package/dist/core/IndicatorEngine.d.ts +51 -0
- package/dist/core/IndicatorEngine.d.ts.map +1 -0
- package/dist/core/IndicatorEngine.js +181 -0
- package/dist/core/IndicatorEngine.js.map +1 -0
- package/dist/core/InteractionManager.d.ts +197 -0
- package/dist/core/InteractionManager.d.ts.map +1 -0
- package/dist/core/InteractionManager.js +698 -0
- package/dist/core/InteractionManager.js.map +1 -0
- package/dist/core/PriceScale.d.ts +27 -0
- package/dist/core/PriceScale.d.ts.map +1 -0
- package/dist/core/PriceScale.js +113 -0
- package/dist/core/PriceScale.js.map +1 -0
- package/dist/core/Series.d.ts +40 -0
- package/dist/core/Series.d.ts.map +1 -0
- package/dist/core/Series.js +114 -0
- package/dist/core/Series.js.map +1 -0
- package/dist/core/TimeScale.d.ts +43 -0
- package/dist/core/TimeScale.d.ts.map +1 -0
- package/dist/core/TimeScale.js +150 -0
- package/dist/core/TimeScale.js.map +1 -0
- package/dist/datafeed/DatafeedConnector.d.ts +89 -0
- package/dist/datafeed/DatafeedConnector.d.ts.map +1 -0
- package/dist/datafeed/DatafeedConnector.js +268 -0
- package/dist/datafeed/DatafeedConnector.js.map +1 -0
- package/dist/engine/CandleEngine.d.ts +207 -0
- package/dist/engine/CandleEngine.d.ts.map +1 -0
- package/dist/engine/CandleEngine.js +318 -0
- package/dist/engine/CandleEngine.js.map +1 -0
- package/dist/engine/__tests__/CandleEngine.test.d.ts +2 -0
- package/dist/engine/__tests__/CandleEngine.test.d.ts.map +1 -0
- package/dist/engine/__tests__/CandleEngine.test.js +300 -0
- package/dist/engine/__tests__/CandleEngine.test.js.map +1 -0
- package/dist/engine/candleInvariants.d.ts +66 -0
- package/dist/engine/candleInvariants.d.ts.map +1 -0
- package/dist/engine/candleInvariants.js +134 -0
- package/dist/engine/candleInvariants.js.map +1 -0
- package/{src/engine/mergeUtils.ts → dist/engine/mergeUtils.d.ts} +15 -52
- package/dist/engine/mergeUtils.d.ts.map +1 -0
- package/dist/engine/mergeUtils.js +64 -0
- package/dist/engine/mergeUtils.js.map +1 -0
- package/dist/engine/timeframeUtils.d.ts +80 -0
- package/dist/engine/timeframeUtils.d.ts.map +1 -0
- package/{src/engine/timeframeUtils.ts → dist/engine/timeframeUtils.js} +30 -48
- package/dist/engine/timeframeUtils.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +29 -0
- package/dist/internal.d.ts.map +1 -0
- package/{src/internal.ts → dist/internal.js} +2 -11
- package/dist/internal.js.map +1 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts +233 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -0
- package/dist/licensing/ChartRuntimeResolver.js +310 -0
- package/dist/licensing/ChartRuntimeResolver.js.map +1 -0
- package/dist/licensing/LicenseManager.d.ts +55 -0
- package/dist/licensing/LicenseManager.d.ts.map +1 -0
- package/dist/licensing/LicenseManager.js +114 -0
- package/dist/licensing/LicenseManager.js.map +1 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts +13 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts.map +1 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +177 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +1 -0
- package/dist/licensing/__tests__/LicenseManager.test.d.ts +12 -0
- package/dist/licensing/__tests__/LicenseManager.test.d.ts.map +1 -0
- package/dist/licensing/__tests__/LicenseManager.test.js +153 -0
- package/dist/licensing/__tests__/LicenseManager.test.js.map +1 -0
- package/dist/licensing/licenseTypes.d.ts +18 -0
- package/dist/licensing/licenseTypes.d.ts.map +1 -0
- package/dist/licensing/licenseTypes.js +2 -0
- package/dist/licensing/licenseTypes.js.map +1 -0
- package/dist/pine/PineCompiler.d.ts +35 -0
- package/dist/pine/PineCompiler.d.ts.map +1 -0
- package/dist/pine/PineCompiler.js +44 -0
- package/dist/pine/PineCompiler.js.map +1 -0
- package/dist/pine/diagnostics.d.ts +20 -0
- package/dist/pine/diagnostics.d.ts.map +1 -0
- package/dist/pine/diagnostics.js +11 -0
- package/dist/pine/diagnostics.js.map +1 -0
- package/{src/pine/index.ts → dist/pine/index.d.ts} +4 -3
- package/dist/pine/index.d.ts.map +1 -0
- package/dist/pine/index.js +5 -0
- package/dist/pine/index.js.map +1 -0
- package/dist/pine/pine-ast.d.ts +142 -0
- package/dist/pine/pine-ast.d.ts.map +1 -0
- package/dist/pine/pine-ast.js +19 -0
- package/dist/pine/pine-ast.js.map +1 -0
- package/dist/pine/pine-lexer.d.ts +41 -0
- package/dist/pine/pine-lexer.d.ts.map +1 -0
- package/dist/pine/pine-lexer.js +249 -0
- package/dist/pine/pine-lexer.js.map +1 -0
- package/dist/pine/pine-parser.d.ts +51 -0
- package/dist/pine/pine-parser.d.ts.map +1 -0
- package/dist/pine/pine-parser.js +416 -0
- package/dist/pine/pine-parser.js.map +1 -0
- package/dist/pine/pine-transpiler.d.ts +33 -0
- package/dist/pine/pine-transpiler.d.ts.map +1 -0
- package/dist/pine/pine-transpiler.js +260 -0
- package/dist/pine/pine-transpiler.js.map +1 -0
- package/dist/pixi/LayerName.d.ts +18 -0
- package/dist/pixi/LayerName.d.ts.map +1 -0
- package/dist/pixi/LayerName.js +35 -0
- package/dist/pixi/LayerName.js.map +1 -0
- package/dist/pixi/PixiCandlestickRenderer.d.ts +23 -0
- package/dist/pixi/PixiCandlestickRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiCandlestickRenderer.js +107 -0
- package/dist/pixi/PixiCandlestickRenderer.js.map +1 -0
- package/dist/pixi/PixiChart.d.ts +72 -0
- package/dist/pixi/PixiChart.d.ts.map +1 -0
- package/dist/pixi/PixiChart.js +367 -0
- package/dist/pixi/PixiChart.js.map +1 -0
- package/dist/pixi/PixiCrosshairRenderer.d.ts +29 -0
- package/dist/pixi/PixiCrosshairRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiCrosshairRenderer.js +110 -0
- package/dist/pixi/PixiCrosshairRenderer.js.map +1 -0
- package/dist/pixi/PixiDrawingRenderer.d.ts +17 -0
- package/dist/pixi/PixiDrawingRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiDrawingRenderer.js +111 -0
- package/dist/pixi/PixiDrawingRenderer.js.map +1 -0
- package/dist/pixi/PixiGridRenderer.d.ts +22 -0
- package/dist/pixi/PixiGridRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiGridRenderer.js +114 -0
- package/dist/pixi/PixiGridRenderer.js.map +1 -0
- package/dist/pixi/PixiLayerManager.d.ts +56 -0
- package/dist/pixi/PixiLayerManager.d.ts.map +1 -0
- package/dist/pixi/PixiLayerManager.js +92 -0
- package/dist/pixi/PixiLayerManager.js.map +1 -0
- package/dist/react/canvas/ChartCanvas.d.ts +85 -0
- package/dist/react/canvas/ChartCanvas.d.ts.map +1 -0
- package/dist/react/canvas/ChartCanvas.js +604 -0
- package/dist/react/canvas/ChartCanvas.js.map +1 -0
- package/dist/react/canvas/ChartContextMenu.d.ts +18 -0
- package/dist/react/canvas/ChartContextMenu.d.ts.map +1 -0
- package/dist/react/canvas/ChartContextMenu.js +5 -0
- package/dist/react/canvas/ChartContextMenu.js.map +1 -0
- package/dist/react/canvas/ChartSettingsDialog.d.ts +25 -0
- package/dist/react/canvas/ChartSettingsDialog.d.ts.map +1 -0
- package/dist/react/canvas/ChartSettingsDialog.js +28 -0
- package/dist/react/canvas/ChartSettingsDialog.js.map +1 -0
- package/dist/react/canvas/IndicatorLabel.d.ts +21 -0
- package/dist/react/canvas/IndicatorLabel.d.ts.map +1 -0
- package/dist/react/canvas/IndicatorLabel.js +196 -0
- package/dist/react/canvas/IndicatorLabel.js.map +1 -0
- package/dist/react/canvas/IndicatorPane.d.ts +32 -0
- package/dist/react/canvas/IndicatorPane.d.ts.map +1 -0
- package/dist/react/canvas/IndicatorPane.js +395 -0
- package/dist/react/canvas/IndicatorPane.js.map +1 -0
- package/dist/react/canvas/PointerOverlay.d.ts +23 -0
- package/dist/react/canvas/PointerOverlay.d.ts.map +1 -0
- package/dist/react/canvas/PointerOverlay.js +61 -0
- package/dist/react/canvas/PointerOverlay.js.map +1 -0
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts +19 -0
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -0
- package/dist/react/canvas/toolbars/LeftToolbar.js +407 -0
- package/dist/react/canvas/toolbars/LeftToolbar.js.map +1 -0
- package/dist/react/hooks/useChartCapabilities.d.ts +21 -0
- package/dist/react/hooks/useChartCapabilities.d.ts.map +1 -0
- package/dist/react/hooks/useChartCapabilities.js +66 -0
- package/dist/react/hooks/useChartCapabilities.js.map +1 -0
- package/dist/react/index.d.ts +30 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +28 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/internal.d.ts +38 -0
- package/dist/react/internal.d.ts.map +1 -0
- package/dist/react/internal.js +44 -0
- package/dist/react/internal.js.map +1 -0
- package/dist/react/shell/ManagedAppShell.d.ts +91 -0
- package/dist/react/shell/ManagedAppShell.d.ts.map +1 -0
- package/dist/react/shell/ManagedAppShell.js +440 -0
- package/dist/react/shell/ManagedAppShell.js.map +1 -0
- package/dist/react/trading/TradingBridge.d.ts +86 -0
- package/dist/react/trading/TradingBridge.d.ts.map +1 -0
- package/dist/react/trading/TradingBridge.js +73 -0
- package/dist/react/trading/TradingBridge.js.map +1 -0
- package/dist/react/workspace/ChartWorkspace.d.ts +73 -0
- package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -0
- package/dist/react/workspace/ChartWorkspace.js +42 -0
- package/dist/react/workspace/ChartWorkspace.js.map +1 -0
- package/dist/react/workspace/FloatingPanel.d.ts +18 -0
- package/dist/react/workspace/FloatingPanel.d.ts.map +1 -0
- package/dist/react/workspace/FloatingPanel.js +82 -0
- package/dist/react/workspace/FloatingPanel.js.map +1 -0
- package/dist/react/workspace/IndicatorsDialog.d.ts +8 -0
- package/dist/react/workspace/IndicatorsDialog.d.ts.map +1 -0
- package/dist/react/workspace/IndicatorsDialog.js +121 -0
- package/dist/react/workspace/IndicatorsDialog.js.map +1 -0
- package/dist/react/workspace/LayoutMenu.d.ts +33 -0
- package/dist/react/workspace/LayoutMenu.d.ts.map +1 -0
- package/dist/react/workspace/LayoutMenu.js +113 -0
- package/dist/react/workspace/LayoutMenu.js.map +1 -0
- package/dist/react/workspace/SymbolSearchDialog.d.ts +10 -0
- package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -0
- package/dist/react/workspace/SymbolSearchDialog.js +245 -0
- package/dist/react/workspace/SymbolSearchDialog.js.map +1 -0
- package/dist/react/workspace/TabBar.d.ts +17 -0
- package/dist/react/workspace/TabBar.d.ts.map +1 -0
- package/dist/react/workspace/TabBar.js +29 -0
- package/dist/react/workspace/TabBar.js.map +1 -0
- package/dist/react/workspace/toolbars/BottomToolbar.d.ts +19 -0
- package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/BottomToolbar.js +236 -0
- package/dist/react/workspace/toolbars/BottomToolbar.js.map +1 -0
- package/dist/react/workspace/toolbars/RightToolbar.d.ts +8 -0
- package/dist/react/workspace/toolbars/RightToolbar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/RightToolbar.js +18 -0
- package/dist/react/workspace/toolbars/RightToolbar.js.map +1 -0
- package/dist/react/workspace/toolbars/TopToolbar.d.ts +41 -0
- package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/TopToolbar.js +82 -0
- package/dist/react/workspace/toolbars/TopToolbar.js.map +1 -0
- package/dist/renderers/CandlestickRenderer.d.ts +13 -0
- package/dist/renderers/CandlestickRenderer.d.ts.map +1 -0
- package/dist/renderers/CandlestickRenderer.js +98 -0
- package/dist/renderers/CandlestickRenderer.js.map +1 -0
- package/dist/renderers/HistogramRenderer.d.ts +11 -0
- package/dist/renderers/HistogramRenderer.d.ts.map +1 -0
- package/dist/renderers/HistogramRenderer.js +50 -0
- package/dist/renderers/HistogramRenderer.js.map +1 -0
- package/dist/renderers/LineRenderer.d.ts +12 -0
- package/dist/renderers/LineRenderer.d.ts.map +1 -0
- package/dist/renderers/LineRenderer.js +64 -0
- package/dist/renderers/LineRenderer.js.map +1 -0
- package/dist/theme/colors.d.ts +4 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +19 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/tools/barDivergenceCheck.d.ts +120 -0
- package/dist/tools/barDivergenceCheck.d.ts.map +1 -0
- package/dist/tools/barDivergenceCheck.js +200 -0
- package/dist/tools/barDivergenceCheck.js.map +1 -0
- package/dist/trading/TradingOverlayStore.d.ts +86 -0
- package/dist/trading/TradingOverlayStore.d.ts.map +1 -0
- package/dist/trading/TradingOverlayStore.js +139 -0
- package/dist/trading/TradingOverlayStore.js.map +1 -0
- package/dist/trading/UnmanagedIngestion.d.ts +91 -0
- package/dist/trading/UnmanagedIngestion.d.ts.map +1 -0
- package/dist/trading/UnmanagedIngestion.js +114 -0
- package/dist/trading/UnmanagedIngestion.js.map +1 -0
- package/dist/trading/__tests__/ManagedTradingController.test.d.ts +18 -0
- package/dist/trading/__tests__/ManagedTradingController.test.d.ts.map +1 -0
- package/dist/trading/__tests__/ManagedTradingController.test.js +271 -0
- package/dist/trading/__tests__/ManagedTradingController.test.js.map +1 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.d.ts +16 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.d.ts.map +1 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.js +267 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.js.map +1 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts +16 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts.map +1 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.js +170 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +1 -0
- package/dist/trading/managed/ManagedTradingController.d.ts +110 -0
- package/dist/trading/managed/ManagedTradingController.d.ts.map +1 -0
- package/dist/trading/managed/ManagedTradingController.js +247 -0
- package/dist/trading/managed/ManagedTradingController.js.map +1 -0
- package/dist/trading/managed/managedCapabilities.d.ts +45 -0
- package/dist/trading/managed/managedCapabilities.d.ts.map +1 -0
- package/dist/trading/managed/managedCapabilities.js +79 -0
- package/dist/trading/managed/managedCapabilities.js.map +1 -0
- package/dist/trading/managed/managedTypes.d.ts +122 -0
- package/dist/trading/managed/managedTypes.d.ts.map +1 -0
- package/dist/trading/managed/managedTypes.js +13 -0
- package/dist/trading/managed/managedTypes.js.map +1 -0
- package/dist/trading/tradingTypes.d.ts +89 -0
- package/dist/trading/tradingTypes.d.ts.map +1 -0
- package/dist/trading/tradingTypes.js +8 -0
- package/dist/trading/tradingTypes.js.map +1 -0
- package/dist/tscript/TScriptIndicator.d.ts +41 -0
- package/dist/tscript/TScriptIndicator.d.ts.map +1 -0
- package/dist/tscript/TScriptIndicator.js +47 -0
- package/dist/tscript/TScriptIndicator.js.map +1 -0
- package/dist/tscript/ast.d.ts +89 -0
- package/dist/tscript/ast.d.ts.map +1 -0
- package/dist/tscript/ast.js +22 -0
- package/dist/tscript/ast.js.map +1 -0
- package/dist/tscript/lexer.d.ts +36 -0
- package/dist/tscript/lexer.d.ts.map +1 -0
- package/dist/tscript/lexer.js +187 -0
- package/dist/tscript/lexer.js.map +1 -0
- package/dist/tscript/parser.d.ts +50 -0
- package/dist/tscript/parser.d.ts.map +1 -0
- package/dist/tscript/parser.js +318 -0
- package/dist/tscript/parser.js.map +1 -0
- package/dist/tscript/runtime.d.ts +123 -0
- package/dist/tscript/runtime.d.ts.map +1 -0
- package/dist/tscript/runtime.js +475 -0
- package/dist/tscript/runtime.js.map +1 -0
- package/dist/tscript/series.d.ts +49 -0
- package/dist/tscript/series.d.ts.map +1 -0
- package/dist/tscript/series.js +79 -0
- package/dist/tscript/series.js.map +1 -0
- package/dist/types/IChart.d.ts +48 -0
- package/dist/types/IChart.d.ts.map +1 -0
- package/dist/types/IChart.js +2 -0
- package/dist/types/IChart.js.map +1 -0
- package/{src/types/IRenderer.ts → dist/types/IRenderer.d.ts} +2 -8
- package/dist/types/IRenderer.d.ts.map +1 -0
- package/dist/types/IRenderer.js +2 -0
- package/dist/types/IRenderer.js.map +1 -0
- package/dist/types/ISeries.d.ts +26 -0
- package/dist/types/ISeries.d.ts.map +1 -0
- package/dist/types/ISeries.js +2 -0
- package/dist/types/ISeries.js.map +1 -0
- package/package.json +32 -4
- package/src/__tests__/backwardCompatibility.test.ts +0 -191
- package/src/__tests__/candleInvariant.test.ts +0 -500
- package/src/__tests__/timeframeBoundary.test.ts +0 -583
- package/src/api/DrawingManager.ts +0 -188
- package/src/api/EventBus.ts +0 -53
- package/src/api/IndicatorDAG.ts +0 -389
- package/src/api/IndicatorRegistry.ts +0 -47
- package/src/api/LayoutManager.ts +0 -72
- package/src/api/PaneManager.ts +0 -129
- package/src/api/ReferenceAPI.ts +0 -195
- package/src/api/TChart.ts +0 -881
- package/src/api/drawing tools/fib gann menu/fibRetracement.ts +0 -27
- package/src/api/drawing tools/lines menu/crossLine.ts +0 -21
- package/src/api/drawing tools/lines menu/disjointChannel.ts +0 -74
- package/src/api/drawing tools/lines menu/extendedLine.ts +0 -22
- package/src/api/drawing tools/lines menu/flatTopBottom.ts +0 -45
- package/src/api/drawing tools/lines menu/horizontal.ts +0 -24
- package/src/api/drawing tools/lines menu/horizontalRay.ts +0 -25
- package/src/api/drawing tools/lines menu/infoLine.ts +0 -127
- package/src/api/drawing tools/lines menu/insidePitchfork.ts +0 -21
- package/src/api/drawing tools/lines menu/modifiedSchiffPitchfork.ts +0 -18
- package/src/api/drawing tools/lines menu/parallelChannel.ts +0 -47
- package/src/api/drawing tools/lines menu/pitchfork.ts +0 -15
- package/src/api/drawing tools/lines menu/ray.ts +0 -28
- package/src/api/drawing tools/lines menu/regressionTrend.ts +0 -157
- package/src/api/drawing tools/lines menu/schiffPitchfork.ts +0 -18
- package/src/api/drawing tools/lines menu/trendAngle.ts +0 -64
- package/src/api/drawing tools/lines menu/trendline.ts +0 -16
- package/src/api/drawing tools/lines menu/vertical.ts +0 -16
- package/src/api/drawing tools/shapes menu/rectangle.ts +0 -24
- package/src/api/drawing tools/shapes menu/text.ts +0 -30
- package/src/api/drawingUtils.ts +0 -82
- package/src/core/CanvasLayer.ts +0 -77
- package/src/core/Chart.ts +0 -917
- package/src/core/CoordTransform.ts +0 -282
- package/src/core/Crosshair.ts +0 -207
- package/src/core/IndicatorEngine.ts +0 -216
- package/src/core/InteractionManager.ts +0 -899
- package/src/core/PriceScale.ts +0 -133
- package/src/core/Series.ts +0 -132
- package/src/core/TimeScale.ts +0 -175
- package/src/datafeed/DatafeedConnector.ts +0 -300
- package/src/engine/CandleEngine.ts +0 -458
- package/src/engine/__tests__/CandleEngine.test.ts +0 -402
- package/src/engine/candleInvariants.ts +0 -172
- package/src/index.ts +0 -190
- package/src/licensing/ChartRuntimeResolver.ts +0 -380
- package/src/licensing/LicenseManager.ts +0 -131
- package/src/licensing/__tests__/ChartRuntimeResolver.test.ts +0 -207
- package/src/licensing/__tests__/LicenseManager.test.ts +0 -180
- package/src/licensing/licenseTypes.ts +0 -19
- package/src/pine/PineCompiler.ts +0 -68
- package/src/pine/diagnostics.ts +0 -30
- package/src/pine/pine-ast.ts +0 -163
- package/src/pine/pine-lexer.ts +0 -265
- package/src/pine/pine-parser.ts +0 -439
- package/src/pine/pine-transpiler.ts +0 -301
- package/src/pixi/LayerName.ts +0 -35
- package/src/pixi/PixiCandlestickRenderer.ts +0 -125
- package/src/pixi/PixiChart.ts +0 -425
- package/src/pixi/PixiCrosshairRenderer.ts +0 -134
- package/src/pixi/PixiDrawingRenderer.ts +0 -121
- package/src/pixi/PixiGridRenderer.ts +0 -136
- package/src/pixi/PixiLayerManager.ts +0 -102
- package/src/renderers/CandlestickRenderer.ts +0 -130
- package/src/renderers/HistogramRenderer.ts +0 -63
- package/src/renderers/LineRenderer.ts +0 -77
- package/src/theme/colors.ts +0 -21
- package/src/tools/barDivergenceCheck.ts +0 -305
- package/src/trading/TradingOverlayStore.ts +0 -161
- package/src/trading/UnmanagedIngestion.ts +0 -156
- package/src/trading/__tests__/ManagedTradingController.test.ts +0 -338
- package/src/trading/__tests__/TradingOverlayStore.test.ts +0 -323
- package/src/trading/__tests__/UnmanagedIngestion.test.ts +0 -205
- package/src/trading/managed/ManagedTradingController.ts +0 -292
- package/src/trading/managed/managedCapabilities.ts +0 -98
- package/src/trading/managed/managedTypes.ts +0 -151
- package/src/trading/tradingTypes.ts +0 -135
- package/src/tscript/TScriptIndicator.ts +0 -54
- package/src/tscript/ast.ts +0 -105
- package/src/tscript/lexer.ts +0 -190
- package/src/tscript/parser.ts +0 -334
- package/src/tscript/runtime.ts +0 -525
- package/src/tscript/series.ts +0 -84
- package/src/types/IChart.ts +0 -56
- package/src/types/ISeries.ts +0 -30
- package/tsconfig.json +0 -22
- package/tsup.config.ts +0 -15
- package/vitest.config.ts +0 -25
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { hexToRgba } from '@forgecharts/utils';
|
|
2
|
+
/**
|
|
3
|
+
* Crosshair — renders the interactive cross-line overlay and price/time labels.
|
|
4
|
+
*/
|
|
5
|
+
export class Crosshair {
|
|
6
|
+
_x = null;
|
|
7
|
+
_snapTime = null;
|
|
8
|
+
_y = null;
|
|
9
|
+
_layer;
|
|
10
|
+
_colors;
|
|
11
|
+
_options;
|
|
12
|
+
_transform;
|
|
13
|
+
/** IANA timezone for the time label on the crosshair. Falls back to UTC. */
|
|
14
|
+
timezone = undefined;
|
|
15
|
+
/** Active timeframe — controls whether time is shown alongside the date. */
|
|
16
|
+
interval = '1h';
|
|
17
|
+
constructor(layer, colors, chartOptions, transform) {
|
|
18
|
+
this._layer = layer;
|
|
19
|
+
this._colors = colors;
|
|
20
|
+
this._transform = transform;
|
|
21
|
+
const co = chartOptions.crosshair;
|
|
22
|
+
this._options = {
|
|
23
|
+
mode: co?.mode ?? 'normal',
|
|
24
|
+
vertLine: {
|
|
25
|
+
...(co?.vertLine?.color !== undefined ? { color: co.vertLine.color } : {}),
|
|
26
|
+
width: co?.vertLine?.width ?? 1,
|
|
27
|
+
style: co?.vertLine?.style ?? 'dashed',
|
|
28
|
+
visible: co?.vertLine?.visible ?? true,
|
|
29
|
+
labelVisible: co?.vertLine?.labelVisible ?? true,
|
|
30
|
+
},
|
|
31
|
+
horzLine: {
|
|
32
|
+
...(co?.horzLine?.color !== undefined ? { color: co.horzLine.color } : {}),
|
|
33
|
+
width: co?.horzLine?.width ?? 1,
|
|
34
|
+
style: co?.horzLine?.style ?? 'dashed',
|
|
35
|
+
visible: co?.horzLine?.visible ?? true,
|
|
36
|
+
labelVisible: co?.horzLine?.labelVisible ?? true,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
update(x, y, snapTime) {
|
|
41
|
+
this._x = x;
|
|
42
|
+
this._y = y;
|
|
43
|
+
this._snapTime = snapTime ?? null;
|
|
44
|
+
}
|
|
45
|
+
hide() {
|
|
46
|
+
this._x = null;
|
|
47
|
+
this._y = null;
|
|
48
|
+
this._snapTime = null;
|
|
49
|
+
}
|
|
50
|
+
destroy() {
|
|
51
|
+
this.hide();
|
|
52
|
+
}
|
|
53
|
+
render(ctx, width, height) {
|
|
54
|
+
if (this._x === null || this._y === null)
|
|
55
|
+
return;
|
|
56
|
+
if (this._options.mode === 'hidden')
|
|
57
|
+
return;
|
|
58
|
+
const { x, y } = { x: this._x, y: this._y };
|
|
59
|
+
const priceScaleWidth = this._transform.priceScaleWidth;
|
|
60
|
+
const timeScaleHeight = this._transform.timeScaleHeight;
|
|
61
|
+
const plotWidth = this._transform.plotWidth;
|
|
62
|
+
const plotHeight = this._transform.plotHeight;
|
|
63
|
+
// Suppress unused-variable warnings — width/height kept for API compatibility
|
|
64
|
+
void width;
|
|
65
|
+
void height;
|
|
66
|
+
ctx.save();
|
|
67
|
+
// Vertical line
|
|
68
|
+
if (this._options.vertLine.visible === true && x >= 0 && x <= plotWidth) {
|
|
69
|
+
const vl = this._options.vertLine;
|
|
70
|
+
ctx.beginPath();
|
|
71
|
+
ctx.strokeStyle = vl.color ?? this._colors.crosshair;
|
|
72
|
+
ctx.lineWidth = vl.width ?? 1;
|
|
73
|
+
this._applyLineStyle(ctx, vl.style ?? 'dashed');
|
|
74
|
+
ctx.moveTo(x, 0);
|
|
75
|
+
ctx.lineTo(x, plotHeight);
|
|
76
|
+
ctx.stroke();
|
|
77
|
+
ctx.setLineDash([]);
|
|
78
|
+
}
|
|
79
|
+
// Horizontal line
|
|
80
|
+
if (this._options.horzLine.visible === true && y >= 0 && y <= plotHeight) {
|
|
81
|
+
const hl = this._options.horzLine;
|
|
82
|
+
ctx.beginPath();
|
|
83
|
+
ctx.strokeStyle = hl.color ?? this._colors.crosshair;
|
|
84
|
+
ctx.lineWidth = hl.width ?? 1;
|
|
85
|
+
this._applyLineStyle(ctx, hl.style ?? 'dashed');
|
|
86
|
+
ctx.moveTo(0, y);
|
|
87
|
+
ctx.lineTo(plotWidth, y);
|
|
88
|
+
ctx.stroke();
|
|
89
|
+
ctx.setLineDash([]);
|
|
90
|
+
// Price label on right axis
|
|
91
|
+
if (this._options.horzLine.labelVisible === true) {
|
|
92
|
+
const price = this._transform.yToPrice(y);
|
|
93
|
+
const label = this._formatPrice(price);
|
|
94
|
+
const labelBg = hexToRgba(this._colors.crosshair, 0.9);
|
|
95
|
+
ctx.fillStyle = labelBg;
|
|
96
|
+
const labelW = priceScaleWidth;
|
|
97
|
+
const labelH = 18;
|
|
98
|
+
const labelY = y - labelH / 2;
|
|
99
|
+
ctx.fillRect(plotWidth, labelY, labelW, labelH);
|
|
100
|
+
ctx.fillStyle = this._colors.background;
|
|
101
|
+
ctx.font = '11px system-ui, sans-serif';
|
|
102
|
+
ctx.textAlign = 'left';
|
|
103
|
+
ctx.textBaseline = 'middle';
|
|
104
|
+
ctx.fillText(label, plotWidth + 6, y);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Center crosshair indicator — 4 short arms with a gap, matching the toolbar icon
|
|
108
|
+
if (this._options.vertLine.visible === true &&
|
|
109
|
+
this._options.horzLine.visible === true &&
|
|
110
|
+
x >= 0 && x <= plotWidth &&
|
|
111
|
+
y >= 0 && y <= plotHeight) {
|
|
112
|
+
const GAP = 4; // half-gap from center
|
|
113
|
+
const ARM = 8; // arm length (tip to gap)
|
|
114
|
+
ctx.beginPath();
|
|
115
|
+
ctx.strokeStyle = this._colors.crosshair;
|
|
116
|
+
ctx.lineWidth = 1.5;
|
|
117
|
+
ctx.setLineDash([]);
|
|
118
|
+
// top arm
|
|
119
|
+
ctx.moveTo(x, y - GAP);
|
|
120
|
+
ctx.lineTo(x, y - GAP - ARM);
|
|
121
|
+
// bottom arm
|
|
122
|
+
ctx.moveTo(x, y + GAP);
|
|
123
|
+
ctx.lineTo(x, y + GAP + ARM);
|
|
124
|
+
// left arm
|
|
125
|
+
ctx.moveTo(x - GAP, y);
|
|
126
|
+
ctx.lineTo(x - GAP - ARM, y);
|
|
127
|
+
// right arm
|
|
128
|
+
ctx.moveTo(x + GAP, y);
|
|
129
|
+
ctx.lineTo(x + GAP + ARM, y);
|
|
130
|
+
ctx.stroke();
|
|
131
|
+
ctx.setLineDash([]);
|
|
132
|
+
}
|
|
133
|
+
// Time label on bottom axis (below vertical line)
|
|
134
|
+
if (this._options.vertLine.visible === true &&
|
|
135
|
+
this._options.vertLine.labelVisible === true &&
|
|
136
|
+
x >= 0 && x <= plotWidth) {
|
|
137
|
+
const time = this._snapTime ?? this._transform.xToTime(x);
|
|
138
|
+
const label = this._formatTime(time);
|
|
139
|
+
const dailyIntervals = new Set(['1d', '2d', '3d', '1w', '2w', '1M', '3M', '6M', '12M']);
|
|
140
|
+
const labelW = dailyIntervals.has(this.interval) ? 110 : 160;
|
|
141
|
+
const labelH = timeScaleHeight - 4;
|
|
142
|
+
const labelX = Math.max(labelW / 2, Math.min(x, plotWidth - labelW / 2));
|
|
143
|
+
const labelBg = hexToRgba(this._colors.crosshair, 0.9);
|
|
144
|
+
ctx.fillStyle = labelBg;
|
|
145
|
+
ctx.fillRect(labelX - labelW / 2, plotHeight + 2, labelW, labelH);
|
|
146
|
+
ctx.fillStyle = this._colors.background;
|
|
147
|
+
ctx.font = '11px system-ui, sans-serif';
|
|
148
|
+
ctx.textAlign = 'center';
|
|
149
|
+
ctx.textBaseline = 'middle';
|
|
150
|
+
ctx.fillText(label, labelX, plotHeight + 2 + labelH / 2);
|
|
151
|
+
}
|
|
152
|
+
ctx.restore();
|
|
153
|
+
}
|
|
154
|
+
_applyLineStyle(ctx, style) {
|
|
155
|
+
if (style === 'dashed')
|
|
156
|
+
ctx.setLineDash([4, 4]);
|
|
157
|
+
else if (style === 'dotted')
|
|
158
|
+
ctx.setLineDash([1, 3]);
|
|
159
|
+
else
|
|
160
|
+
ctx.setLineDash([]);
|
|
161
|
+
}
|
|
162
|
+
/** Formats a price as a fixed-decimal string. */
|
|
163
|
+
_formatPrice(price) {
|
|
164
|
+
// Show more decimals for low-value instruments (e.g. forex, small-cap)
|
|
165
|
+
const decimals = price < 1 ? 6 : price < 1000 ? 4 : 2;
|
|
166
|
+
return price.toFixed(decimals);
|
|
167
|
+
}
|
|
168
|
+
/** Formats a Unix timestamp (seconds) as a human-readable date/time string. */
|
|
169
|
+
_formatTime(time) {
|
|
170
|
+
const timeZone = (!this.timezone || this.timezone === 'exchange') ? 'UTC' : this.timezone;
|
|
171
|
+
const d = new Date(time * 1000);
|
|
172
|
+
const weekday = d.toLocaleDateString('en-US', { weekday: 'short', timeZone });
|
|
173
|
+
const day = d.toLocaleDateString('en-US', { day: '2-digit', timeZone });
|
|
174
|
+
const month = d.toLocaleDateString('en-US', { month: 'short', timeZone });
|
|
175
|
+
const year = d.toLocaleDateString('en-US', { year: '2-digit', timeZone });
|
|
176
|
+
const datePart = `${weekday} ${day} ${month} '${year}`;
|
|
177
|
+
// Show time only for sub-day intervals
|
|
178
|
+
const dailyIntervals = new Set(['1d', '2d', '3d', '1w', '2w', '1M', '3M', '6M', '12M']);
|
|
179
|
+
if (dailyIntervals.has(this.interval))
|
|
180
|
+
return datePart;
|
|
181
|
+
const hh = d.toLocaleString('en-US', { hour: '2-digit', hour12: false, timeZone });
|
|
182
|
+
const mm = d.toLocaleString('en-US', { minute: '2-digit', timeZone }).padStart(2, '0');
|
|
183
|
+
return `${datePart} ${hh}:${mm}`;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=Crosshair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Crosshair.js","sourceRoot":"","sources":["../../src/core/Crosshair.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndicatorEngine — pure, stateless computation functions.
|
|
3
|
+
*
|
|
4
|
+
* All functions accept a readonly OHLCV array and operation-specific
|
|
5
|
+
* parameters, and return plain value arrays. No side effects, no
|
|
6
|
+
* class instances. Safe to call from any renderer or React component.
|
|
7
|
+
*/
|
|
8
|
+
import type { OHLCV, PriceField } from '@forgecharts/types';
|
|
9
|
+
export type IndicatorPoint = {
|
|
10
|
+
readonly time: number;
|
|
11
|
+
readonly value: number;
|
|
12
|
+
};
|
|
13
|
+
export type MACDPoint = {
|
|
14
|
+
readonly time: number;
|
|
15
|
+
readonly macd: number;
|
|
16
|
+
readonly signal: number;
|
|
17
|
+
readonly histogram: number;
|
|
18
|
+
};
|
|
19
|
+
/** Simple Moving Average over bar close prices. */
|
|
20
|
+
export declare function computeSMA(bars: readonly OHLCV[], period: number): IndicatorPoint[];
|
|
21
|
+
/** Exponential Moving Average over bar close prices. */
|
|
22
|
+
export declare function computeEMA(bars: readonly OHLCV[], period: number): IndicatorPoint[];
|
|
23
|
+
/**
|
|
24
|
+
* Relative Strength Index using Wilder's smoothing.
|
|
25
|
+
* Returns values in [0, 100].
|
|
26
|
+
* Requires at least `period + 1` bars; returns [] otherwise.
|
|
27
|
+
*/
|
|
28
|
+
export declare function computeRSI(bars: readonly OHLCV[], period?: number): IndicatorPoint[];
|
|
29
|
+
/**
|
|
30
|
+
* MACD — Moving Average Convergence/Divergence.
|
|
31
|
+
* Returns MACD line, Signal line, and Histogram.
|
|
32
|
+
* Standard defaults: fast=12, slow=26, signal=9.
|
|
33
|
+
*/
|
|
34
|
+
export declare function computeMACD(bars: readonly OHLCV[], fastPeriod?: number, slowPeriod?: number, signalPeriod?: number): MACDPoint[];
|
|
35
|
+
/** Volume bars — raw volume values keyed by bar time. */
|
|
36
|
+
export declare function computeVolume(bars: readonly OHLCV[]): IndicatorPoint[];
|
|
37
|
+
/** Extracts a single numeric value from an OHLCV bar by named price field. */
|
|
38
|
+
export declare function extractField(bar: OHLCV, field: PriceField): number;
|
|
39
|
+
/**
|
|
40
|
+
* SMA over an arbitrary `IndicatorPoint[]` series (not just OHLCV close).
|
|
41
|
+
* Enables chains such as EMA(SMA(close, 20), 10).
|
|
42
|
+
*/
|
|
43
|
+
export declare function computeSMAFromSeries(input: readonly IndicatorPoint[], period: number): IndicatorPoint[];
|
|
44
|
+
/**
|
|
45
|
+
* EMA over an arbitrary `IndicatorPoint[]` series.
|
|
46
|
+
* Seeds the EMA from the first input value.
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeEMAFromSeries(input: readonly IndicatorPoint[], period: number): IndicatorPoint[];
|
|
49
|
+
/** WMA (Weighted Moving Average) over an arbitrary `IndicatorPoint[]` series. */
|
|
50
|
+
export declare function computeWMAFromSeries(input: readonly IndicatorPoint[], period: number): IndicatorPoint[];
|
|
51
|
+
//# sourceMappingURL=IndicatorEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndicatorEngine.d.ts","sourceRoot":"","sources":["../../src/core/IndicatorEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI5D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAqBF,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAWnF;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAInF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,MAAM,SAAK,GAAG,cAAc,EAAE,CAiChF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,KAAK,EAAE,EACtB,UAAU,SAAK,EACf,UAAU,SAAK,EACf,YAAY,SAAI,GACf,SAAS,EAAE,CAwBb;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,GAAG,cAAc,EAAE,CAEtE;AAID,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAWlE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAWlB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAWlB;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAUlB"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndicatorEngine — pure, stateless computation functions.
|
|
3
|
+
*
|
|
4
|
+
* All functions accept a readonly OHLCV array and operation-specific
|
|
5
|
+
* parameters, and return plain value arrays. No side effects, no
|
|
6
|
+
* class instances. Safe to call from any renderer or React component.
|
|
7
|
+
*/
|
|
8
|
+
// ─── Internals ────────────────────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Exponential moving average over an arbitrary number array.
|
|
11
|
+
* Uses the standard multiplier k = 2 / (period + 1).
|
|
12
|
+
* The very first value seeds the EMA (warm-start).
|
|
13
|
+
*/
|
|
14
|
+
function _ema(values, period) {
|
|
15
|
+
if (values.length === 0)
|
|
16
|
+
return [];
|
|
17
|
+
const k = 2 / (period + 1);
|
|
18
|
+
const result = [values[0]];
|
|
19
|
+
for (let i = 1; i < values.length; i++) {
|
|
20
|
+
result.push(values[i] * k + result[i - 1] * (1 - k));
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
25
|
+
/** Simple Moving Average over bar close prices. */
|
|
26
|
+
export function computeSMA(bars, period) {
|
|
27
|
+
if (period < 1 || bars.length < period)
|
|
28
|
+
return [];
|
|
29
|
+
const result = [];
|
|
30
|
+
let windowSum = 0;
|
|
31
|
+
for (let i = 0; i < period; i++)
|
|
32
|
+
windowSum += bars[i].close;
|
|
33
|
+
result.push({ time: bars[period - 1].time, value: windowSum / period });
|
|
34
|
+
for (let i = period; i < bars.length; i++) {
|
|
35
|
+
windowSum += bars[i].close - bars[i - period].close;
|
|
36
|
+
result.push({ time: bars[i].time, value: windowSum / period });
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/** Exponential Moving Average over bar close prices. */
|
|
41
|
+
export function computeEMA(bars, period) {
|
|
42
|
+
if (period < 1 || bars.length < period)
|
|
43
|
+
return [];
|
|
44
|
+
const closes = bars.map((b) => b.close);
|
|
45
|
+
return _ema(closes, period).map((value, i) => ({ time: bars[i].time, value }));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Relative Strength Index using Wilder's smoothing.
|
|
49
|
+
* Returns values in [0, 100].
|
|
50
|
+
* Requires at least `period + 1` bars; returns [] otherwise.
|
|
51
|
+
*/
|
|
52
|
+
export function computeRSI(bars, period = 14) {
|
|
53
|
+
if (bars.length < period + 1)
|
|
54
|
+
return [];
|
|
55
|
+
// Seed: simple average of first `period` up/down moves
|
|
56
|
+
let avgGain = 0;
|
|
57
|
+
let avgLoss = 0;
|
|
58
|
+
for (let i = 1; i <= period; i++) {
|
|
59
|
+
const d = bars[i].close - bars[i - 1].close;
|
|
60
|
+
if (d > 0)
|
|
61
|
+
avgGain += d;
|
|
62
|
+
else
|
|
63
|
+
avgLoss -= d;
|
|
64
|
+
}
|
|
65
|
+
avgGain /= period;
|
|
66
|
+
avgLoss /= period;
|
|
67
|
+
const result = [];
|
|
68
|
+
result.push({
|
|
69
|
+
time: bars[period].time,
|
|
70
|
+
value: avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss),
|
|
71
|
+
});
|
|
72
|
+
// Wilder's smoothing for remaining bars
|
|
73
|
+
for (let i = period + 1; i < bars.length; i++) {
|
|
74
|
+
const d = bars[i].close - bars[i - 1].close;
|
|
75
|
+
const gain = d > 0 ? d : 0;
|
|
76
|
+
const loss = d < 0 ? -d : 0;
|
|
77
|
+
avgGain = (avgGain * (period - 1) + gain) / period;
|
|
78
|
+
avgLoss = (avgLoss * (period - 1) + loss) / period;
|
|
79
|
+
result.push({
|
|
80
|
+
time: bars[i].time,
|
|
81
|
+
value: avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* MACD — Moving Average Convergence/Divergence.
|
|
88
|
+
* Returns MACD line, Signal line, and Histogram.
|
|
89
|
+
* Standard defaults: fast=12, slow=26, signal=9.
|
|
90
|
+
*/
|
|
91
|
+
export function computeMACD(bars, fastPeriod = 12, slowPeriod = 26, signalPeriod = 9) {
|
|
92
|
+
if (bars.length < slowPeriod)
|
|
93
|
+
return [];
|
|
94
|
+
const closes = bars.map((b) => b.close);
|
|
95
|
+
const fastEMAs = _ema(closes, fastPeriod);
|
|
96
|
+
const slowEMAs = _ema(closes, slowPeriod);
|
|
97
|
+
// MACD line starts at index slowPeriod - 1 (first bar where slow EMA is meaningful)
|
|
98
|
+
const macdLine = [];
|
|
99
|
+
const macdTimes = [];
|
|
100
|
+
for (let i = slowPeriod - 1; i < bars.length; i++) {
|
|
101
|
+
macdLine.push(fastEMAs[i] - slowEMAs[i]);
|
|
102
|
+
macdTimes.push(bars[i].time);
|
|
103
|
+
}
|
|
104
|
+
if (macdLine.length < signalPeriod)
|
|
105
|
+
return [];
|
|
106
|
+
const signalLine = _ema(macdLine, signalPeriod);
|
|
107
|
+
return signalLine.map((sig, i) => ({
|
|
108
|
+
time: macdTimes[i],
|
|
109
|
+
macd: macdLine[i],
|
|
110
|
+
signal: sig,
|
|
111
|
+
histogram: macdLine[i] - sig,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
/** Volume bars — raw volume values keyed by bar time. */
|
|
115
|
+
export function computeVolume(bars) {
|
|
116
|
+
return bars.map((b) => ({ time: b.time, value: b.volume }));
|
|
117
|
+
}
|
|
118
|
+
// ─── Field extraction & series-based variants (for DAG chaining) ─────────────
|
|
119
|
+
/** Extracts a single numeric value from an OHLCV bar by named price field. */
|
|
120
|
+
export function extractField(bar, field) {
|
|
121
|
+
switch (field) {
|
|
122
|
+
case 'open': return bar.open;
|
|
123
|
+
case 'high': return bar.high;
|
|
124
|
+
case 'low': return bar.low;
|
|
125
|
+
case 'close': return bar.close;
|
|
126
|
+
case 'volume': return bar.volume;
|
|
127
|
+
case 'hl2': return (bar.high + bar.low) / 2;
|
|
128
|
+
case 'hlc3': return (bar.high + bar.low + bar.close) / 3;
|
|
129
|
+
case 'ohlc4': return (bar.open + bar.high + bar.low + bar.close) / 4;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* SMA over an arbitrary `IndicatorPoint[]` series (not just OHLCV close).
|
|
134
|
+
* Enables chains such as EMA(SMA(close, 20), 10).
|
|
135
|
+
*/
|
|
136
|
+
export function computeSMAFromSeries(input, period) {
|
|
137
|
+
if (period < 1 || input.length < period)
|
|
138
|
+
return [];
|
|
139
|
+
const result = [];
|
|
140
|
+
let sum = 0;
|
|
141
|
+
for (let i = 0; i < period; i++)
|
|
142
|
+
sum += input[i].value;
|
|
143
|
+
result.push({ time: input[period - 1].time, value: sum / period });
|
|
144
|
+
for (let i = period; i < input.length; i++) {
|
|
145
|
+
sum += input[i].value - input[i - period].value;
|
|
146
|
+
result.push({ time: input[i].time, value: sum / period });
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* EMA over an arbitrary `IndicatorPoint[]` series.
|
|
152
|
+
* Seeds the EMA from the first input value.
|
|
153
|
+
*/
|
|
154
|
+
export function computeEMAFromSeries(input, period) {
|
|
155
|
+
if (period < 1 || input.length === 0)
|
|
156
|
+
return [];
|
|
157
|
+
const k = 2 / (period + 1);
|
|
158
|
+
const result = [{ time: input[0].time, value: input[0].value }];
|
|
159
|
+
for (let i = 1; i < input.length; i++) {
|
|
160
|
+
result.push({
|
|
161
|
+
time: input[i].time,
|
|
162
|
+
value: input[i].value * k + result[i - 1].value * (1 - k),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
/** WMA (Weighted Moving Average) over an arbitrary `IndicatorPoint[]` series. */
|
|
168
|
+
export function computeWMAFromSeries(input, period) {
|
|
169
|
+
if (period < 1 || input.length < period)
|
|
170
|
+
return [];
|
|
171
|
+
const denom = (period * (period + 1)) / 2;
|
|
172
|
+
const result = [];
|
|
173
|
+
for (let i = period - 1; i < input.length; i++) {
|
|
174
|
+
let sum = 0;
|
|
175
|
+
for (let j = 0; j < period; j++)
|
|
176
|
+
sum += input[i - j].value * (period - j);
|
|
177
|
+
result.push({ time: input[i].time, value: sum / denom });
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=IndicatorEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndicatorEngine.js","sourceRoot":"","sources":["../../src/core/IndicatorEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import type { Drawing, OHLCV, HitTestResult, ChartKeyAction, KeyModifiers } from '@forgecharts/types';
|
|
2
|
+
import type { CoordTransform } from './CoordTransform';
|
|
3
|
+
/**
|
|
4
|
+
* Callbacks injected by the owning chart engine.
|
|
5
|
+
* Every handler is optional; omit the ones your engine doesn't need.
|
|
6
|
+
*/
|
|
7
|
+
export type InteractionHandlers = {
|
|
8
|
+
/** User dragged the chart. Apply `transform.pan(dx, dy)` and mark dirty. */
|
|
9
|
+
onPan?: (dx: number, dy: number) => void;
|
|
10
|
+
/**
|
|
11
|
+
* User scrolled the wheel or pressed +/-.
|
|
12
|
+
* `factor > 1` = zoom out (more bars visible); `factor < 1` = zoom in.
|
|
13
|
+
* Apply `transform.zoomTime(factor, originX)` and mark dirty.
|
|
14
|
+
*/
|
|
15
|
+
onZoom?: (factor: number, originX: number) => void;
|
|
16
|
+
/** Mouse moved while not dragging — update the crosshair. */
|
|
17
|
+
onCrosshairMove?: (x: number, y: number, hit: HitTestResult) => void;
|
|
18
|
+
/** Mouse left the chart area — hide the crosshair. */
|
|
19
|
+
onCrosshairHide?: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Left-click without drag (click threshold not exceeded).
|
|
22
|
+
* Selection state is updated internally before this fires.
|
|
23
|
+
*/
|
|
24
|
+
onSelect?: (x: number, y: number, hit: HitTestResult) => void;
|
|
25
|
+
/** User clicked empty space — selection cleared. */
|
|
26
|
+
onDeselect?: () => void;
|
|
27
|
+
/** Right-click / contextmenu. `e.preventDefault()` is already called. */
|
|
28
|
+
onContextMenu?: (x: number, y: number, hit: HitTestResult) => void;
|
|
29
|
+
/** Recognised keyboard shortcut. */
|
|
30
|
+
onKeyAction?: (action: ChartKeyAction, modifiers: KeyModifiers) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Double-click on the price axis — reset price scale to fit visible bars
|
|
33
|
+
* and scroll to the latest bar.
|
|
34
|
+
*/
|
|
35
|
+
onFitContent?: () => void;
|
|
36
|
+
/** User scrolled the wheel over the price axis — zoom the price scale. */
|
|
37
|
+
onPriceScaleZoom?: (factor: number, originY: number) => void;
|
|
38
|
+
/** User dragged up/down on the price axis strip — drag down expands, up compresses. */
|
|
39
|
+
onPriceAxisDrag?: (dy: number) => void;
|
|
40
|
+
/** Called when the user clicks while a drawing tool is active. */
|
|
41
|
+
onDrawClick?: (x: number, y: number) => void;
|
|
42
|
+
/** Called on every mousemove while a drawing tool is active (preview). */
|
|
43
|
+
onDrawPointerMove?: (x: number, y: number) => void;
|
|
44
|
+
/** Handle drag start — anchor `handleIndex` of drawing `id`. */
|
|
45
|
+
onHandleDragStart?: (id: string, handleIndex: number) => void;
|
|
46
|
+
/** Handle dragged to new pixel position. */
|
|
47
|
+
onHandleDragMove?: (id: string, handleIndex: number, x: number, y: number) => void;
|
|
48
|
+
/** Handle drag released. */
|
|
49
|
+
onHandleDragEnd?: (id: string, handleIndex: number) => void;
|
|
50
|
+
/** Body of drawing `id` grabbed for move. */
|
|
51
|
+
onBodyMoveStart?: (id: string) => void;
|
|
52
|
+
/** Body dragged by (dx, dy) pixel delta. */
|
|
53
|
+
onBodyMoveMove?: (id: string, dx: number, dy: number) => void;
|
|
54
|
+
/** Body move released. */
|
|
55
|
+
onBodyMoveEnd?: (id: string) => void;
|
|
56
|
+
};
|
|
57
|
+
export type InteractionOptions = {
|
|
58
|
+
/** Allow click-drag panning. Defaults to `true`. */
|
|
59
|
+
readonly enablePan?: boolean;
|
|
60
|
+
/** Allow mouse-wheel zooming. Defaults to `true`. */
|
|
61
|
+
readonly enableZoom?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Pointer travel distance (px) below which mousedown + mouseup is treated
|
|
64
|
+
* as a click rather than a pan gesture. Defaults to `4`.
|
|
65
|
+
*/
|
|
66
|
+
readonly clickThreshold?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Zoom multiplier per wheel step.
|
|
69
|
+
* `factor > 1` = zoom out on scroll-down. Defaults to `1.1`.
|
|
70
|
+
*/
|
|
71
|
+
readonly zoomStep?: number;
|
|
72
|
+
/** Pixels to scroll per arrow-key press. Defaults to `40`. */
|
|
73
|
+
readonly keyPanStep?: number;
|
|
74
|
+
/** Zoom multiplier per keyboard +/- press. Defaults to `1.1`. */
|
|
75
|
+
readonly keyZoomStep?: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* InteractionManager — the single owner of all DOM input events for a chart.
|
|
79
|
+
*
|
|
80
|
+
* Responsibilities:
|
|
81
|
+
* - Mouse: pan (left-drag), crosshair tracking, click detection
|
|
82
|
+
* - Wheel: zoom
|
|
83
|
+
* - Right-click: contextmenu routing
|
|
84
|
+
* - Keyboard: arrow-key pan, +/- zoom, Esc / Delete shortcuts
|
|
85
|
+
* - Hit-testing: drawings → bars → axis zones
|
|
86
|
+
* - Selection state: tracks the currently selected drawing id
|
|
87
|
+
*
|
|
88
|
+
* Usage:
|
|
89
|
+
* ```ts
|
|
90
|
+
* const interaction = new InteractionManager(
|
|
91
|
+
* canvasElement,
|
|
92
|
+
* chart.transform(),
|
|
93
|
+
* {
|
|
94
|
+
* onPan: (dx, dy) => { transform.pan(dx, dy); markDirty(); },
|
|
95
|
+
* onZoom: (f, ox) => { transform.zoomTime(f, ox); markDirty(); },
|
|
96
|
+
* onCrosshairMove: (x, y) => { crosshair.update(x, y); markDirty(); },
|
|
97
|
+
* onCrosshairHide: () => { crosshair.hide(); markDirty(); },
|
|
98
|
+
* onContextMenu: (x, y, hit) => showMenu(x, y, hit),
|
|
99
|
+
* onKeyAction: (action) => handleKey(action),
|
|
100
|
+
* },
|
|
101
|
+
* );
|
|
102
|
+
*
|
|
103
|
+
* // Call on chart resize:
|
|
104
|
+
* interaction.setTransform(chart.transform());
|
|
105
|
+
*
|
|
106
|
+
* // Feed visible bars for bar-snap hit-testing:
|
|
107
|
+
* interaction.setBars(series.data());
|
|
108
|
+
*
|
|
109
|
+
* // Feed drawings for drawing hit-testing:
|
|
110
|
+
* interaction.setDrawings(drawingManager.all());
|
|
111
|
+
*
|
|
112
|
+
* // Teardown:
|
|
113
|
+
* interaction.destroy();
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare class InteractionManager {
|
|
117
|
+
private readonly _el;
|
|
118
|
+
private _transform;
|
|
119
|
+
private readonly _handlers;
|
|
120
|
+
private readonly _opts;
|
|
121
|
+
private _drawings;
|
|
122
|
+
private _bars;
|
|
123
|
+
private _isDragging;
|
|
124
|
+
private _dragStartX;
|
|
125
|
+
private _dragStartY;
|
|
126
|
+
private _lastDragX;
|
|
127
|
+
private _lastDragY;
|
|
128
|
+
/** True once the pointer has moved past `clickThreshold` during a drag. */
|
|
129
|
+
private _hasMoved;
|
|
130
|
+
/** True while the user is dragging on the price axis strip. */
|
|
131
|
+
private _priceAxisDragging;
|
|
132
|
+
private _selectedDrawingId;
|
|
133
|
+
private _drawingMode;
|
|
134
|
+
/** True when the native cursor should be hidden (crosshair / dot / demonstration). */
|
|
135
|
+
private _hideCursor;
|
|
136
|
+
/** Sets cursor style, respecting _hideCursor — 'none' always wins when hiding. */
|
|
137
|
+
private _setCursor;
|
|
138
|
+
/** Set when a drawing is committed mid-mousedown; prevents the paired mouseup from auto-selecting it. */
|
|
139
|
+
private _suppressNextClick;
|
|
140
|
+
private _handleDragId;
|
|
141
|
+
private _handleDragIdx;
|
|
142
|
+
private _bodyMoveId;
|
|
143
|
+
private _bodyMovePrevX;
|
|
144
|
+
private _bodyMovePrevY;
|
|
145
|
+
constructor(element: HTMLElement, transform: CoordTransform, handlers: InteractionHandlers, options?: InteractionOptions);
|
|
146
|
+
/** Swap the transform reference after a resize. */
|
|
147
|
+
setTransform(transform: CoordTransform): void;
|
|
148
|
+
/** Provide the current drawing list for hit-testing. */
|
|
149
|
+
setDrawings(drawings: readonly Drawing[]): void;
|
|
150
|
+
/**
|
|
151
|
+
* Provide the visible bars for bar-snap hit-testing on the primary series.
|
|
152
|
+
* Passing `series.data()` is fine; the manager filters by visible range.
|
|
153
|
+
*/
|
|
154
|
+
setBars(bars: readonly OHLCV[]): void;
|
|
155
|
+
/** Id of the currently selected drawing, or `null`. */
|
|
156
|
+
get selectedDrawingId(): string | null;
|
|
157
|
+
/** Programmatically deselect (e.g. on symbol / timeframe change). */
|
|
158
|
+
clearSelection(): void;
|
|
159
|
+
/**
|
|
160
|
+
* Switches between drawing-tool mode (crosshair cursor, click fires onDrawClick)
|
|
161
|
+
* and normal cursor mode. Also resets any in-progress drag state.
|
|
162
|
+
*/
|
|
163
|
+
/** Hides (`true`) or shows (`false`) the native OS cursor. Used by crosshair, dot, and demonstration modes. */
|
|
164
|
+
setHideCursor(hidden: boolean): void;
|
|
165
|
+
setDrawingMode(active: boolean): void;
|
|
166
|
+
/** Removes all DOM event listeners. Must be called in the chart's `destroy()`. */
|
|
167
|
+
destroy(): void;
|
|
168
|
+
private _attach;
|
|
169
|
+
private _detach;
|
|
170
|
+
private _onMouseDown;
|
|
171
|
+
private _onMouseMove;
|
|
172
|
+
private _onMouseUp;
|
|
173
|
+
private _onMouseLeave;
|
|
174
|
+
private _onWheel;
|
|
175
|
+
private _onDblClick;
|
|
176
|
+
private _onContextMenu;
|
|
177
|
+
private _onKeyDown;
|
|
178
|
+
private _keyToAction;
|
|
179
|
+
private _handleClick;
|
|
180
|
+
private _hitTest;
|
|
181
|
+
private _hitTestHandles;
|
|
182
|
+
private _hitTestDrawings;
|
|
183
|
+
private _distToDrawing;
|
|
184
|
+
/**
|
|
185
|
+
* Returns the nearest visible bar to x-coordinate `mx`, or `null` if no bar
|
|
186
|
+
* falls within half a bar-width.
|
|
187
|
+
*/
|
|
188
|
+
private _hitTestBar;
|
|
189
|
+
/** Distance from point (px, py) to line segment (x1,y1)→(x2,y2). */
|
|
190
|
+
private _distPointToSegment;
|
|
191
|
+
/**
|
|
192
|
+
* Minimum distance from point (px, py) to the perimeter of an
|
|
193
|
+
* axis-aligned rectangle. Returns 0 if the point is inside.
|
|
194
|
+
*/
|
|
195
|
+
private _distToRect;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=InteractionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/core/InteractionManager.ts"],"names":[],"mappings":"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"}
|