@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,367 @@
|
|
|
1
|
+
import { Application } from 'pixi.js';
|
|
2
|
+
import { CanvasLayer } from '../core/CanvasLayer';
|
|
3
|
+
import { TimeScale } from '../core/TimeScale';
|
|
4
|
+
import { PriceScale } from '../core/PriceScale';
|
|
5
|
+
import { CoordTransform } from '../core/CoordTransform';
|
|
6
|
+
import { Series } from '../core/Series';
|
|
7
|
+
import { InteractionManager } from '../core/InteractionManager';
|
|
8
|
+
import { DARK_COLORS, LIGHT_COLORS } from '../theme/colors';
|
|
9
|
+
import { LayerName } from './LayerName';
|
|
10
|
+
import { PixiLayerManager } from './PixiLayerManager';
|
|
11
|
+
import { PixiGridRenderer } from './PixiGridRenderer';
|
|
12
|
+
import { PixiCandlestickRenderer } from './PixiCandlestickRenderer';
|
|
13
|
+
import { PixiCrosshairRenderer } from './PixiCrosshairRenderer';
|
|
14
|
+
import { PixiDrawingRenderer } from './PixiDrawingRenderer';
|
|
15
|
+
/**
|
|
16
|
+
* PixiChart — GPU-accelerated chart engine built on PixiJS v8.
|
|
17
|
+
*
|
|
18
|
+
* Implements `IChart` identically to the Canvas 2D `Chart` class, so it is
|
|
19
|
+
* a drop-in replacement. Rendering is performed inside a PixiJS `Application`
|
|
20
|
+
* (WebGL / WebGPU auto-detected) using seven sortable `Container` layers.
|
|
21
|
+
*
|
|
22
|
+
* Selective redraw:
|
|
23
|
+
* - `DirtyFlags` tracks which layers need painting.
|
|
24
|
+
* - Each layer's renderer is called only when its flag is set.
|
|
25
|
+
* - Viewport changes (zoom/pan) mark all layers dirty via `_markViewportDirty()`.
|
|
26
|
+
* - Data changes only mark `PriceSeries` dirty.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const chart = new PixiChart(container, { theme: 'dark' });
|
|
31
|
+
* const series = chart.addSeries({ type: 'candlestick' });
|
|
32
|
+
* series.setData(bars);
|
|
33
|
+
*
|
|
34
|
+
* // Access the transform for drawing tools or plugins
|
|
35
|
+
* const { x, y } = chart.transform().toPixel(bar.time, bar.close);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class PixiChart {
|
|
39
|
+
_app;
|
|
40
|
+
_stage;
|
|
41
|
+
_container;
|
|
42
|
+
_options;
|
|
43
|
+
_colors;
|
|
44
|
+
_timeScale;
|
|
45
|
+
_priceScale;
|
|
46
|
+
_transform;
|
|
47
|
+
_layers;
|
|
48
|
+
_gridRenderer;
|
|
49
|
+
_candleRenderer;
|
|
50
|
+
_crosshairRenderer;
|
|
51
|
+
_drawingRenderer;
|
|
52
|
+
_series = [];
|
|
53
|
+
_drawings = [];
|
|
54
|
+
_plugins = [];
|
|
55
|
+
_resizeObserver;
|
|
56
|
+
_initPromise;
|
|
57
|
+
_ready = false;
|
|
58
|
+
_interaction;
|
|
59
|
+
constructor(container, options = {}) {
|
|
60
|
+
this._container = container;
|
|
61
|
+
this._container.style.position = 'relative';
|
|
62
|
+
this._container.style.overflow = 'hidden';
|
|
63
|
+
this._options = this._resolveOptions(options);
|
|
64
|
+
this._colors = this._resolveColors(this._options.theme, this._options.colors);
|
|
65
|
+
const { width, height } = container.getBoundingClientRect();
|
|
66
|
+
// ── Scales & transform ────────────────────────────────────────────────────
|
|
67
|
+
// TimeScale and PriceScale need a CanvasLayer for their Canvas 2D render()
|
|
68
|
+
// pass; for PixiChart that pass is never called — Pixi renderers own all
|
|
69
|
+
// drawing. A hidden dummy canvas satisfies the constructor requirement.
|
|
70
|
+
const dpr = window.devicePixelRatio ?? 1;
|
|
71
|
+
const dummyLayer = new CanvasLayer(container, { width, height, dpr, zIndex: 0 });
|
|
72
|
+
dummyLayer.canvas.style.display = 'none';
|
|
73
|
+
this._timeScale = new TimeScale(dummyLayer, this._colors, this._options.timeScale);
|
|
74
|
+
this._priceScale = new PriceScale(dummyLayer, this._colors, this._options.priceScale);
|
|
75
|
+
this._transform = new CoordTransform(this._timeScale, this._priceScale, this._priceScale.width, this._timeScale.height);
|
|
76
|
+
this._transform.update(width, height);
|
|
77
|
+
// ── PixiJS Application ────────────────────────────────────────────────────
|
|
78
|
+
this._app = new Application();
|
|
79
|
+
this._stage = this._app.stage;
|
|
80
|
+
this._initPromise = this._app.init({
|
|
81
|
+
width,
|
|
82
|
+
height,
|
|
83
|
+
backgroundColor: parseInt(this._colors.background.replace('#', ''), 16),
|
|
84
|
+
antialias: true,
|
|
85
|
+
resolution: dpr,
|
|
86
|
+
autoDensity: true,
|
|
87
|
+
}).then(() => {
|
|
88
|
+
const canvas = this._app.canvas;
|
|
89
|
+
canvas.style.position = 'absolute';
|
|
90
|
+
canvas.style.inset = '0';
|
|
91
|
+
container.appendChild(canvas);
|
|
92
|
+
// ── Layers ──────────────────────────────────────────────────────────────
|
|
93
|
+
this._layers.dirty.markAll();
|
|
94
|
+
this._ready = true;
|
|
95
|
+
// Attach PixiJS ticker for per-frame selective redraw
|
|
96
|
+
this._app.ticker.add(() => this._renderFrame());
|
|
97
|
+
});
|
|
98
|
+
// Layer manager + renderers (can be constructed before init resolves)
|
|
99
|
+
this._layers = new PixiLayerManager(this._stage);
|
|
100
|
+
this._gridRenderer = new PixiGridRenderer(this._layers.get(LayerName.Background), this._colors, this._timeScale);
|
|
101
|
+
this._candleRenderer = new PixiCandlestickRenderer(this._layers.get(LayerName.PriceSeries));
|
|
102
|
+
this._crosshairRenderer = new PixiCrosshairRenderer(this._layers.get(LayerName.Interaction), this._colors);
|
|
103
|
+
this._drawingRenderer = new PixiDrawingRenderer(this._layers.get(LayerName.Drawing));
|
|
104
|
+
// ── Interactions ─────────────────────────────────────────────────────────
|
|
105
|
+
this._interaction = new InteractionManager(this._container, this._transform, {
|
|
106
|
+
onPan: (dx, dy) => {
|
|
107
|
+
this._transform.pan(dx, dy);
|
|
108
|
+
this._markViewportDirty();
|
|
109
|
+
},
|
|
110
|
+
onZoom: (factor, originX) => {
|
|
111
|
+
this._transform.zoomTime(factor, originX);
|
|
112
|
+
this._markViewportDirty();
|
|
113
|
+
},
|
|
114
|
+
onCrosshairMove: (x, y) => {
|
|
115
|
+
this._crosshairRenderer.update(x, y);
|
|
116
|
+
this._layers.dirty.mark(LayerName.Interaction);
|
|
117
|
+
},
|
|
118
|
+
onCrosshairHide: () => {
|
|
119
|
+
this._crosshairRenderer.hide();
|
|
120
|
+
this._layers.dirty.mark(LayerName.Interaction);
|
|
121
|
+
},
|
|
122
|
+
onKeyAction: (action) => {
|
|
123
|
+
this._handleKeyAction(action);
|
|
124
|
+
},
|
|
125
|
+
}, {
|
|
126
|
+
enablePan: this._options.handleScroll,
|
|
127
|
+
enableZoom: this._options.handleScale,
|
|
128
|
+
});
|
|
129
|
+
this._resizeObserver = new ResizeObserver(() => this._onResize());
|
|
130
|
+
this._resizeObserver.observe(container);
|
|
131
|
+
}
|
|
132
|
+
// ─── IChart implementation ────────────────────────────────────────────────
|
|
133
|
+
addSeries(options) {
|
|
134
|
+
const series = new Series(options, this._colors);
|
|
135
|
+
// When the caller mutates data, mark the series + background layers dirty
|
|
136
|
+
// so the next ticker frame redraws only those layers (selective redraw).
|
|
137
|
+
series.onDataChanged = () => {
|
|
138
|
+
this._layers.dirty.mark(LayerName.PriceSeries);
|
|
139
|
+
this._layers.dirty.mark(LayerName.Background); // price range may change
|
|
140
|
+
};
|
|
141
|
+
this._series.push(series);
|
|
142
|
+
this._layers.dirty.mark(LayerName.PriceSeries);
|
|
143
|
+
return series;
|
|
144
|
+
}
|
|
145
|
+
removeSeries(series) {
|
|
146
|
+
this._series = this._series.filter((s) => s !== series);
|
|
147
|
+
this._layers.dirty.mark(LayerName.PriceSeries);
|
|
148
|
+
}
|
|
149
|
+
addPlugin(plugin) {
|
|
150
|
+
this._plugins.push(plugin);
|
|
151
|
+
plugin.onAttach(this);
|
|
152
|
+
}
|
|
153
|
+
removePlugin(plugin) {
|
|
154
|
+
this._plugins = this._plugins.filter((p) => p !== plugin);
|
|
155
|
+
plugin.onDetach();
|
|
156
|
+
}
|
|
157
|
+
applyOptions(options) {
|
|
158
|
+
Object.assign(this._options, options);
|
|
159
|
+
if (options.theme) {
|
|
160
|
+
// Mutate the existing colors object in-place so all renderers that hold
|
|
161
|
+
// a reference to it (PixiGridRenderer, PixiCrosshairRenderer, etc.) pick
|
|
162
|
+
// up the new values without needing a reference swap.
|
|
163
|
+
Object.assign(this._colors, this._resolveColors(options.theme, this._options.colors));
|
|
164
|
+
// Also update the PixiJS renderer's own background color.
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
166
|
+
this._app.renderer.background.color = parseInt(this._colors.background.replace('#', ''), 16);
|
|
167
|
+
}
|
|
168
|
+
if (options.timezone !== undefined) {
|
|
169
|
+
this._crosshairRenderer.timezone = options.timezone ?? 'UTC';
|
|
170
|
+
}
|
|
171
|
+
this._layers.dirty.markAll();
|
|
172
|
+
}
|
|
173
|
+
setInterval(tf) {
|
|
174
|
+
this._crosshairRenderer.interval = tf;
|
|
175
|
+
this._layers.dirty.mark(LayerName.Interaction);
|
|
176
|
+
}
|
|
177
|
+
resize(width, height) {
|
|
178
|
+
this._app.renderer.resize(width, height);
|
|
179
|
+
this._transform.update(width, height);
|
|
180
|
+
this._markViewportDirty();
|
|
181
|
+
}
|
|
182
|
+
transform() {
|
|
183
|
+
return this._transform;
|
|
184
|
+
}
|
|
185
|
+
destroy() {
|
|
186
|
+
this._resizeObserver.disconnect();
|
|
187
|
+
this._interaction.destroy();
|
|
188
|
+
this._layers.destroy();
|
|
189
|
+
this._plugins.forEach((p) => p.onDetach());
|
|
190
|
+
this._series = [];
|
|
191
|
+
this._plugins = [];
|
|
192
|
+
void this._app.destroy(true, { children: true });
|
|
193
|
+
}
|
|
194
|
+
// ─── Drawing objects (used by PixiChart directly; TChart uses DrawingManager) ─
|
|
195
|
+
/** @internal Used by PixiChart when DrawingManager pushes an update. */
|
|
196
|
+
setDrawings(drawings) {
|
|
197
|
+
this._drawings = [...drawings];
|
|
198
|
+
this._layers.dirty.mark(LayerName.Drawing);
|
|
199
|
+
}
|
|
200
|
+
// ─── Rendering ───────────────────────────────────────────────────────────────
|
|
201
|
+
_renderFrame() {
|
|
202
|
+
if (!this._ready)
|
|
203
|
+
return;
|
|
204
|
+
const t = this._transform;
|
|
205
|
+
const cw = t.canvasWidth;
|
|
206
|
+
const ch = t.canvasHeight;
|
|
207
|
+
const dirty = this._layers.dirty;
|
|
208
|
+
// ── Price series first so auto-fit updates the price range ───────────────
|
|
209
|
+
// This must run before Background so the grid can reflect the new range
|
|
210
|
+
// within the same frame.
|
|
211
|
+
if (dirty.isDirty(LayerName.PriceSeries)) {
|
|
212
|
+
// Auto-fit price range to visible data, then mark background dirty so
|
|
213
|
+
// the grid redraws with the updated price range in this same frame.
|
|
214
|
+
this._autoFitPriceRange();
|
|
215
|
+
dirty.mark(LayerName.Background);
|
|
216
|
+
// Renderers own their Graphics object; calling gfx.clear() internally.
|
|
217
|
+
// Do NOT call _layers.clear(PriceSeries) — that would detach the gfx.
|
|
218
|
+
for (const series of this._series) {
|
|
219
|
+
const opts = series.options();
|
|
220
|
+
if (opts.visible === false)
|
|
221
|
+
continue;
|
|
222
|
+
const bars = this._getVisibleBars(series);
|
|
223
|
+
if (bars.length === 0)
|
|
224
|
+
continue;
|
|
225
|
+
if (opts.type === 'heikinashi') {
|
|
226
|
+
this._candleRenderer.drawHeikinAshi(bars, t);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
this._candleRenderer.draw(bars, t);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
dirty.clear(LayerName.PriceSeries);
|
|
233
|
+
}
|
|
234
|
+
// ── Background + grid (axes, labels) ─────────────────────────────────────
|
|
235
|
+
if (dirty.isDirty(LayerName.Background)) {
|
|
236
|
+
this._gridRenderer.draw(t, cw, ch);
|
|
237
|
+
dirty.clear(LayerName.Background);
|
|
238
|
+
}
|
|
239
|
+
// ── Indicator — placeholder ───────────────────────────────────────────────
|
|
240
|
+
if (dirty.isDirty(LayerName.Indicator)) {
|
|
241
|
+
dirty.clear(LayerName.Indicator);
|
|
242
|
+
}
|
|
243
|
+
// ── Drawings ──────────────────────────────────────────────────────────────
|
|
244
|
+
if (dirty.isDirty(LayerName.Drawing)) {
|
|
245
|
+
this._drawingRenderer.draw(this._drawings, t);
|
|
246
|
+
dirty.clear(LayerName.Drawing);
|
|
247
|
+
}
|
|
248
|
+
// ── Trading overlay — placeholder ─────────────────────────────────────────
|
|
249
|
+
if (dirty.isDirty(LayerName.TradingOverlay)) {
|
|
250
|
+
dirty.clear(LayerName.TradingOverlay);
|
|
251
|
+
}
|
|
252
|
+
// ── Crosshair (Interaction layer) ─────────────────────────────────────────
|
|
253
|
+
if (dirty.isDirty(LayerName.Interaction)) {
|
|
254
|
+
this._crosshairRenderer.draw(t);
|
|
255
|
+
dirty.clear(LayerName.Interaction);
|
|
256
|
+
}
|
|
257
|
+
// ── UI overlay — placeholder ──────────────────────────────────────────────
|
|
258
|
+
if (dirty.isDirty(LayerName.UIOverlay)) {
|
|
259
|
+
dirty.clear(LayerName.UIOverlay);
|
|
260
|
+
}
|
|
261
|
+
// Let plugins render
|
|
262
|
+
this._plugins.forEach((p) => p.onRender());
|
|
263
|
+
}
|
|
264
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
265
|
+
_getVisibleBars(series) {
|
|
266
|
+
const { from, to } = this._transform.timeRange;
|
|
267
|
+
return series.data().filter((b) => b.time >= from - 1 && b.time <= to + 1);
|
|
268
|
+
}
|
|
269
|
+
_autoFitPriceRange() {
|
|
270
|
+
let low = Infinity, high = -Infinity;
|
|
271
|
+
for (const series of this._series) {
|
|
272
|
+
for (const bar of this._getVisibleBars(series)) {
|
|
273
|
+
if (bar.low < low)
|
|
274
|
+
low = bar.low;
|
|
275
|
+
if (bar.high > high)
|
|
276
|
+
high = bar.high;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (low === Infinity || high === -Infinity)
|
|
280
|
+
return;
|
|
281
|
+
const padding = (high - low) * 0.05;
|
|
282
|
+
this._priceScale.setVisibleRange({ min: low - padding, max: high + padding });
|
|
283
|
+
// Background must redraw so price-axis labels reflect the new range.
|
|
284
|
+
// Caller is responsible for marking Background dirty after calling this.
|
|
285
|
+
}
|
|
286
|
+
_markViewportDirty() {
|
|
287
|
+
this._layers.dirty.mark(LayerName.Background);
|
|
288
|
+
this._layers.dirty.mark(LayerName.PriceSeries);
|
|
289
|
+
this._layers.dirty.mark(LayerName.Indicator);
|
|
290
|
+
this._layers.dirty.mark(LayerName.Drawing);
|
|
291
|
+
this._layers.dirty.mark(LayerName.TradingOverlay);
|
|
292
|
+
this._layers.dirty.mark(LayerName.Interaction);
|
|
293
|
+
this._layers.dirty.mark(LayerName.UIOverlay);
|
|
294
|
+
}
|
|
295
|
+
_onResize() {
|
|
296
|
+
const { width, height } = this._container.getBoundingClientRect();
|
|
297
|
+
this.resize(width, height);
|
|
298
|
+
}
|
|
299
|
+
// ─── Keyboard action handler ──────────────────────────────────────────────────
|
|
300
|
+
_handleKeyAction(action) {
|
|
301
|
+
const step = 40; // px per arrow-key press
|
|
302
|
+
const zf = 1.1; // zoom factor per key press
|
|
303
|
+
const cx = this._transform.plotWidth / 2;
|
|
304
|
+
switch (action) {
|
|
305
|
+
case 'panLeft':
|
|
306
|
+
this._transform.pan(step, 0);
|
|
307
|
+
break;
|
|
308
|
+
case 'panRight':
|
|
309
|
+
this._transform.pan(-step, 0);
|
|
310
|
+
break;
|
|
311
|
+
case 'panUp':
|
|
312
|
+
this._transform.pan(0, step);
|
|
313
|
+
break;
|
|
314
|
+
case 'panDown':
|
|
315
|
+
this._transform.pan(0, -step);
|
|
316
|
+
break;
|
|
317
|
+
case 'zoomIn':
|
|
318
|
+
this._transform.zoomTime(1 / zf, cx);
|
|
319
|
+
break;
|
|
320
|
+
case 'zoomOut':
|
|
321
|
+
this._transform.zoomTime(zf, cx);
|
|
322
|
+
break;
|
|
323
|
+
case 'scrollToEnd':
|
|
324
|
+
this._scrollToLatestBar();
|
|
325
|
+
break;
|
|
326
|
+
case 'deselect':
|
|
327
|
+
this._interaction.clearSelection();
|
|
328
|
+
break;
|
|
329
|
+
case 'scrollToStart':
|
|
330
|
+
case 'deleteSelection': break; // handled externally
|
|
331
|
+
}
|
|
332
|
+
this._markViewportDirty();
|
|
333
|
+
}
|
|
334
|
+
/** Pans the viewport so the latest bar sits near the right edge. */
|
|
335
|
+
_scrollToLatestBar() {
|
|
336
|
+
let latestTime = -Infinity;
|
|
337
|
+
for (const s of this._series) {
|
|
338
|
+
const data = s.data();
|
|
339
|
+
const last = data[data.length - 1];
|
|
340
|
+
if (last && last.time > latestTime)
|
|
341
|
+
latestTime = last.time;
|
|
342
|
+
}
|
|
343
|
+
if (!isFinite(latestTime))
|
|
344
|
+
return;
|
|
345
|
+
const pad = this._transform.plotWidth * 0.05;
|
|
346
|
+
const px = this._transform.timeToX(latestTime);
|
|
347
|
+
this._transform.pan(-(px - (this._transform.plotWidth - pad)), 0);
|
|
348
|
+
}
|
|
349
|
+
// ─── Option resolvers ────────────────────────────────────────────────────────
|
|
350
|
+
_resolveOptions(opts) {
|
|
351
|
+
return {
|
|
352
|
+
theme: opts.theme ?? 'dark',
|
|
353
|
+
colors: opts.colors ?? {},
|
|
354
|
+
timeScale: opts.timeScale ?? {},
|
|
355
|
+
priceScale: opts.priceScale ?? {},
|
|
356
|
+
crosshair: opts.crosshair ?? {},
|
|
357
|
+
handleScroll: opts.handleScroll ?? true,
|
|
358
|
+
handleScale: opts.handleScale ?? true,
|
|
359
|
+
timezone: opts.timezone ?? 'UTC',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
_resolveColors(theme, overrides) {
|
|
363
|
+
const base = theme === 'dark' ? DARK_COLORS : LIGHT_COLORS;
|
|
364
|
+
return { ...base, ...overrides };
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=PixiChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixiChart.js","sourceRoot":"","sources":["../../src/pixi/PixiChart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
import type { ChartColors } from '@forgecharts/types';
|
|
3
|
+
import type { CoordTransform } from '../core/CoordTransform';
|
|
4
|
+
/**
|
|
5
|
+
* PixiCrosshairRenderer — draws the interactive crosshair lines and their
|
|
6
|
+
* data-accurate price / time labels using GPU-batched PixiJS Graphics.
|
|
7
|
+
*
|
|
8
|
+
* Owned by the Interaction layer; receives pixel coords from mouse events
|
|
9
|
+
* and converts them to data values via `CoordTransform`.
|
|
10
|
+
*/
|
|
11
|
+
export declare class PixiCrosshairRenderer {
|
|
12
|
+
private readonly _colors;
|
|
13
|
+
private readonly _gfx;
|
|
14
|
+
private readonly _priceLabel;
|
|
15
|
+
private readonly _timeLabel;
|
|
16
|
+
private _x;
|
|
17
|
+
private _y;
|
|
18
|
+
/** Active timeframe — controls whether time is shown alongside the date. */
|
|
19
|
+
interval: string;
|
|
20
|
+
/** IANA timezone for the time label. Falls back to UTC. */
|
|
21
|
+
timezone: string;
|
|
22
|
+
constructor(layer: Container, _colors: ChartColors);
|
|
23
|
+
update(x: number, y: number): void;
|
|
24
|
+
hide(): void;
|
|
25
|
+
draw(transform: CoordTransform): void;
|
|
26
|
+
private _formatPrice;
|
|
27
|
+
private _formatTime;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=PixiCrosshairRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixiCrosshairRenderer.d.ts","sourceRoot":"","sources":["../../src/pixi/PixiCrosshairRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAmB,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAe9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAO;IAElC,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,EAAE,CAAuB;IAEjC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAQ;IACxB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAS;gBAGvB,KAAK,EAAE,SAAS,EACC,OAAO,EAAE,WAAW;IAevC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,IAAI,IAAI,IAAI;IAKZ,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IA6DrC,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;CAgBpB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Graphics, Text, TextStyle } from 'pixi.js';
|
|
2
|
+
/**
|
|
3
|
+
* PixiCrosshairRenderer — draws the interactive crosshair lines and their
|
|
4
|
+
* data-accurate price / time labels using GPU-batched PixiJS Graphics.
|
|
5
|
+
*
|
|
6
|
+
* Owned by the Interaction layer; receives pixel coords from mouse events
|
|
7
|
+
* and converts them to data values via `CoordTransform`.
|
|
8
|
+
*/
|
|
9
|
+
export class PixiCrosshairRenderer {
|
|
10
|
+
_colors;
|
|
11
|
+
_gfx;
|
|
12
|
+
_priceLabel;
|
|
13
|
+
_timeLabel;
|
|
14
|
+
_x = null;
|
|
15
|
+
_y = null;
|
|
16
|
+
/** Active timeframe — controls whether time is shown alongside the date. */
|
|
17
|
+
interval = '1h';
|
|
18
|
+
/** IANA timezone for the time label. Falls back to UTC. */
|
|
19
|
+
timezone = 'UTC';
|
|
20
|
+
constructor(layer, _colors) {
|
|
21
|
+
this._colors = _colors;
|
|
22
|
+
const labelStyle = new TextStyle({
|
|
23
|
+
fontSize: 11,
|
|
24
|
+
fontFamily: 'system-ui, sans-serif',
|
|
25
|
+
fill: _colors.background,
|
|
26
|
+
});
|
|
27
|
+
this._gfx = new Graphics();
|
|
28
|
+
this._priceLabel = new Text({ text: '', style: labelStyle });
|
|
29
|
+
this._timeLabel = new Text({ text: '', style: labelStyle });
|
|
30
|
+
layer.addChild(this._gfx, this._priceLabel, this._timeLabel);
|
|
31
|
+
}
|
|
32
|
+
update(x, y) {
|
|
33
|
+
this._x = x;
|
|
34
|
+
this._y = y;
|
|
35
|
+
}
|
|
36
|
+
hide() {
|
|
37
|
+
this._x = null;
|
|
38
|
+
this._y = null;
|
|
39
|
+
}
|
|
40
|
+
draw(transform) {
|
|
41
|
+
this._gfx.clear();
|
|
42
|
+
this._priceLabel.text = '';
|
|
43
|
+
this._timeLabel.text = '';
|
|
44
|
+
if (this._x === null || this._y === null)
|
|
45
|
+
return;
|
|
46
|
+
const x = this._x;
|
|
47
|
+
const y = this._y;
|
|
48
|
+
const pw = transform.plotWidth;
|
|
49
|
+
const ph = transform.plotHeight;
|
|
50
|
+
const psw = transform.priceScaleWidth;
|
|
51
|
+
const tsh = transform.timeScaleHeight;
|
|
52
|
+
if (!transform.inPlotArea(x, y))
|
|
53
|
+
return;
|
|
54
|
+
const crossColor = parseInt(this._colors.crosshair.replace('#', ''), 16);
|
|
55
|
+
// Vertical line
|
|
56
|
+
this._gfx
|
|
57
|
+
.moveTo(x, 0)
|
|
58
|
+
.lineTo(x, ph)
|
|
59
|
+
.stroke({ color: crossColor, width: 1, alpha: 0.85, join: 'miter' });
|
|
60
|
+
// Horizontal line
|
|
61
|
+
this._gfx
|
|
62
|
+
.moveTo(0, y)
|
|
63
|
+
.lineTo(pw, y)
|
|
64
|
+
.stroke({ color: crossColor, width: 1, alpha: 0.85, join: 'miter' });
|
|
65
|
+
// ── Price label (right axis) ─────────────────────────────────────────────
|
|
66
|
+
const price = transform.yToPrice(y);
|
|
67
|
+
const priceText = this._formatPrice(price);
|
|
68
|
+
const lh = 18;
|
|
69
|
+
const lw = psw;
|
|
70
|
+
this._gfx
|
|
71
|
+
.rect(pw, y - lh / 2, lw, lh)
|
|
72
|
+
.fill({ color: crossColor, alpha: 0.9 });
|
|
73
|
+
this._priceLabel.text = priceText;
|
|
74
|
+
this._priceLabel.x = pw + 4;
|
|
75
|
+
this._priceLabel.y = y - this._priceLabel.height / 2;
|
|
76
|
+
// ── Time label (bottom axis) ─────────────────────────────────────────────
|
|
77
|
+
const time = transform.xToTime(x);
|
|
78
|
+
const timeText = this._formatTime(time);
|
|
79
|
+
const dailyIntervals = new Set(['1d', '2d', '3d', '1w', '2w', '1M', '3M', '6M', '12M']);
|
|
80
|
+
const tlw = dailyIntervals.has(this.interval) ? 120 : 170;
|
|
81
|
+
const tlh = tsh - 4;
|
|
82
|
+
const tlx = Math.max(tlw / 2, Math.min(x, pw - tlw / 2));
|
|
83
|
+
this._gfx
|
|
84
|
+
.rect(tlx - tlw / 2, ph + 2, tlw, tlh)
|
|
85
|
+
.fill({ color: crossColor, alpha: 0.9 });
|
|
86
|
+
this._timeLabel.text = timeText;
|
|
87
|
+
this._timeLabel.x = tlx - this._timeLabel.width / 2;
|
|
88
|
+
this._timeLabel.y = ph + 2 + (tlh - this._timeLabel.height) / 2;
|
|
89
|
+
}
|
|
90
|
+
_formatPrice(price) {
|
|
91
|
+
const decimals = price < 1 ? 6 : price < 1000 ? 4 : 2;
|
|
92
|
+
return price.toFixed(decimals);
|
|
93
|
+
}
|
|
94
|
+
_formatTime(time) {
|
|
95
|
+
const timeZone = (!this.timezone || this.timezone === 'exchange') ? 'UTC' : this.timezone;
|
|
96
|
+
const d = new Date(time * 1000);
|
|
97
|
+
const weekday = d.toLocaleDateString('en-US', { weekday: 'short', timeZone });
|
|
98
|
+
const day = d.toLocaleDateString('en-US', { day: '2-digit', timeZone });
|
|
99
|
+
const month = d.toLocaleDateString('en-US', { month: 'short', timeZone });
|
|
100
|
+
const year = d.toLocaleDateString('en-US', { year: '2-digit', timeZone });
|
|
101
|
+
const datePart = `${weekday} ${day} ${month} '${year}`;
|
|
102
|
+
const dailyIntervals = new Set(['1d', '2d', '3d', '1w', '2w', '1M', '3M', '6M', '12M']);
|
|
103
|
+
if (dailyIntervals.has(this.interval))
|
|
104
|
+
return datePart;
|
|
105
|
+
const hh = d.toLocaleString('en-US', { hour: '2-digit', hour12: false, timeZone });
|
|
106
|
+
const mm = d.toLocaleString('en-US', { minute: '2-digit', timeZone }).padStart(2, '0');
|
|
107
|
+
return `${datePart} ${hh}:${mm}`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=PixiCrosshairRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixiCrosshairRenderer.js","sourceRoot":"","sources":["../../src/pixi/PixiCrosshairRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Container } from 'pixi.js';
|
|
2
|
+
import type { Drawing } from '@forgecharts/types';
|
|
3
|
+
import type { CoordTransform } from '../core/CoordTransform';
|
|
4
|
+
/**
|
|
5
|
+
* PixiDrawingRenderer — renders all drawing objects via GPU-batched Graphics.
|
|
6
|
+
*
|
|
7
|
+
* All `DrawingPoint` (time, price) → pixel conversions go through
|
|
8
|
+
* `CoordTransform`, keeping drawings perfectly aligned with the price series
|
|
9
|
+
* across zoom/pan without requiring a full re-fetch of underlying data.
|
|
10
|
+
*/
|
|
11
|
+
export declare class PixiDrawingRenderer {
|
|
12
|
+
private readonly _gfx;
|
|
13
|
+
constructor(layer: Container);
|
|
14
|
+
draw(drawings: readonly Drawing[], transform: CoordTransform): void;
|
|
15
|
+
private _drawOne;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=PixiDrawingRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixiDrawingRenderer.d.ts","sourceRoot":"","sources":["../../src/pixi/PixiDrawingRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;gBAEpB,KAAK,EAAE,SAAS;IAK5B,IAAI,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI;IAQnE,OAAO,CAAC,QAAQ;CAwFjB"}
|