chartgpu 0.2.2 → 0.2.4
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/README.md +38 -11
- package/dist/ChartGPU.d.ts +23 -6
- package/dist/ChartGPU.d.ts.map +1 -1
- package/dist/config/OptionResolver.d.ts.map +1 -1
- package/dist/config/types.d.ts +26 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/core/GPUContext.d.ts +2 -2
- package/dist/core/GPUContext.d.ts.map +1 -1
- package/dist/core/createRenderCoordinator.d.ts +3 -2
- package/dist/core/createRenderCoordinator.d.ts.map +1 -1
- package/dist/core/renderCoordinator/animation/animationHelpers.d.ts +183 -0
- package/dist/core/renderCoordinator/animation/animationHelpers.d.ts.map +1 -0
- package/dist/core/renderCoordinator/annotations/processAnnotations.d.ts +88 -0
- package/dist/core/renderCoordinator/annotations/processAnnotations.d.ts.map +1 -0
- package/dist/core/renderCoordinator/axis/axisLabelHelpers.d.ts +91 -0
- package/dist/core/renderCoordinator/axis/axisLabelHelpers.d.ts.map +1 -0
- package/dist/core/renderCoordinator/axis/computeAxisTicks.d.ts +53 -0
- package/dist/core/renderCoordinator/axis/computeAxisTicks.d.ts.map +1 -0
- package/dist/core/renderCoordinator/data/computeVisibleSlice.d.ts +66 -0
- package/dist/core/renderCoordinator/data/computeVisibleSlice.d.ts.map +1 -0
- package/dist/core/renderCoordinator/gpu/textureManager.d.ts +69 -0
- package/dist/core/renderCoordinator/gpu/textureManager.d.ts.map +1 -0
- package/dist/core/renderCoordinator/interaction/interactionHelpers.d.ts +160 -0
- package/dist/core/renderCoordinator/interaction/interactionHelpers.d.ts.map +1 -0
- package/dist/core/renderCoordinator/render/renderAnnotationLabels.d.ts +36 -0
- package/dist/core/renderCoordinator/render/renderAnnotationLabels.d.ts.map +1 -0
- package/dist/core/renderCoordinator/render/renderAxisLabels.d.ts +40 -0
- package/dist/core/renderCoordinator/render/renderAxisLabels.d.ts.map +1 -0
- package/dist/core/renderCoordinator/render/renderOverlays.d.ts +70 -0
- package/dist/core/renderCoordinator/render/renderOverlays.d.ts.map +1 -0
- package/dist/core/renderCoordinator/render/renderSeries.d.ts +146 -0
- package/dist/core/renderCoordinator/render/renderSeries.d.ts.map +1 -0
- package/dist/core/renderCoordinator/renderers/rendererPool.d.ts +112 -0
- package/dist/core/renderCoordinator/renderers/rendererPool.d.ts.map +1 -0
- package/dist/core/renderCoordinator/types.d.ts +19 -0
- package/dist/core/renderCoordinator/types.d.ts.map +1 -0
- package/dist/core/renderCoordinator/ui/tooltipLegendHelpers.d.ts +104 -0
- package/dist/core/renderCoordinator/ui/tooltipLegendHelpers.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/axisUtils.d.ts +122 -0
- package/dist/core/renderCoordinator/utils/axisUtils.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/boundsComputation.d.ts +69 -0
- package/dist/core/renderCoordinator/utils/boundsComputation.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/canvasUtils.d.ts +52 -0
- package/dist/core/renderCoordinator/utils/canvasUtils.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/dataPointUtils.d.ts +71 -0
- package/dist/core/renderCoordinator/utils/dataPointUtils.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/index.d.ts +12 -0
- package/dist/core/renderCoordinator/utils/index.d.ts.map +1 -0
- package/dist/core/renderCoordinator/utils/timeAxisUtils.d.ts +149 -0
- package/dist/core/renderCoordinator/utils/timeAxisUtils.d.ts.map +1 -0
- package/dist/core/renderCoordinator/zoom/zoomHelpers.d.ts +129 -0
- package/dist/core/renderCoordinator/zoom/zoomHelpers.d.ts.map +1 -0
- package/dist/data/cartesianData.d.ts +67 -0
- package/dist/data/cartesianData.d.ts.map +1 -0
- package/dist/data/createDataStore.d.ts +4 -12
- package/dist/data/createDataStore.d.ts.map +1 -1
- package/dist/data/sampleSeries.d.ts +19 -2
- package/dist/data/sampleSeries.d.ts.map +1 -1
- package/dist/index.cjs +1270 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6068 -5643
- package/dist/index.js.map +1 -1
- package/dist/interaction/createAnnotationAuthoring.d.ts.map +1 -1
- package/dist/interaction/createAnnotationDragHandler.d.ts.map +1 -1
- package/dist/interaction/createAnnotationHitTester.d.ts.map +1 -1
- package/dist/interaction/createChartSync.d.ts +17 -2
- package/dist/interaction/createChartSync.d.ts.map +1 -1
- package/dist/interaction/findNearestPoint.d.ts.map +1 -1
- package/dist/interaction/findPointsAtX.d.ts.map +1 -1
- package/dist/renderers/createAreaRenderer.d.ts +2 -1
- package/dist/renderers/createAreaRenderer.d.ts.map +1 -1
- package/dist/renderers/createBarRenderer.d.ts.map +1 -1
- package/dist/renderers/createHighlightRenderer.d.ts +1 -1
- package/dist/renderers/createHighlightRenderer.d.ts.map +1 -1
- package/dist/renderers/createLineRenderer.d.ts.map +1 -1
- package/dist/renderers/createScatterRenderer.d.ts +2 -1
- package/dist/renderers/createScatterRenderer.d.ts.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Rendering Utilities
|
|
3
|
+
*
|
|
4
|
+
* Prepares and renders GPU-based chart overlays (grid, axes, crosshair, highlight).
|
|
5
|
+
* These overlays are rendered on top of the main chart series.
|
|
6
|
+
*
|
|
7
|
+
* @module renderOverlays
|
|
8
|
+
*/
|
|
9
|
+
import type { ResolvedChartGPUOptions } from '../../../config/OptionResolver';
|
|
10
|
+
import type { LinearScale } from '../../../utils/scales';
|
|
11
|
+
import type { GridRenderer } from '../../../renderers/createGridRenderer';
|
|
12
|
+
import type { AxisRenderer } from '../../../renderers/createAxisRenderer';
|
|
13
|
+
import type { CrosshairRenderer } from '../../../renderers/createCrosshairRenderer';
|
|
14
|
+
import type { HighlightRenderer } from '../../../renderers/createHighlightRenderer';
|
|
15
|
+
import type { GridArea } from '../../../renderers/createGridRenderer';
|
|
16
|
+
export interface OverlayRenderers {
|
|
17
|
+
gridRenderer: GridRenderer;
|
|
18
|
+
xAxisRenderer: AxisRenderer;
|
|
19
|
+
yAxisRenderer: AxisRenderer;
|
|
20
|
+
crosshairRenderer: CrosshairRenderer;
|
|
21
|
+
highlightRenderer: HighlightRenderer;
|
|
22
|
+
}
|
|
23
|
+
export interface OverlayPrepareContext {
|
|
24
|
+
currentOptions: ResolvedChartGPUOptions;
|
|
25
|
+
xScale: LinearScale;
|
|
26
|
+
yScale: LinearScale;
|
|
27
|
+
gridArea: GridArea;
|
|
28
|
+
xTickCount: number;
|
|
29
|
+
hasCartesianSeries: boolean;
|
|
30
|
+
effectivePointer: {
|
|
31
|
+
hasPointer: boolean;
|
|
32
|
+
isInGrid: boolean;
|
|
33
|
+
source: 'mouse' | 'sync';
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
gridX: number;
|
|
37
|
+
gridY: number;
|
|
38
|
+
};
|
|
39
|
+
interactionScales: {
|
|
40
|
+
xScale: LinearScale;
|
|
41
|
+
yScale: LinearScale;
|
|
42
|
+
} | null;
|
|
43
|
+
seriesForRender: ReadonlyArray<any>;
|
|
44
|
+
withAlpha: (color: string, alpha: number) => string;
|
|
45
|
+
}
|
|
46
|
+
export interface OverlayRenderContext {
|
|
47
|
+
mainPass: GPURenderPassEncoder;
|
|
48
|
+
topOverlayPass: GPURenderPassEncoder;
|
|
49
|
+
hasCartesianSeries: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Prepares all overlay renderers with current frame data.
|
|
53
|
+
*
|
|
54
|
+
* This includes grid lines, axes, crosshair, and point highlights.
|
|
55
|
+
*
|
|
56
|
+
* @param renderers - Overlay renderer instances
|
|
57
|
+
* @param context - Rendering context with scales, options, and pointer state
|
|
58
|
+
*/
|
|
59
|
+
export declare function prepareOverlays(renderers: OverlayRenderers, context: OverlayPrepareContext): void;
|
|
60
|
+
/**
|
|
61
|
+
* Renders all overlay elements to the appropriate render passes.
|
|
62
|
+
*
|
|
63
|
+
* Grid is rendered in the main pass (background).
|
|
64
|
+
* Highlight, axes, and crosshair are rendered in the top overlay pass (foreground).
|
|
65
|
+
*
|
|
66
|
+
* @param renderers - Overlay renderer instances
|
|
67
|
+
* @param context - Render pass context
|
|
68
|
+
*/
|
|
69
|
+
export declare function renderOverlays(renderers: OverlayRenderers, context: OverlayRenderContext): void;
|
|
70
|
+
//# sourceMappingURL=renderOverlays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderOverlays.d.ts","sourceRoot":"","sources":["../../../../src/core/renderCoordinator/render/renderOverlays.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,4CAA4C,CAAC;AAC5G,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,4CAA4C,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAStE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,YAAY,CAAC;IAC5B,aAAa,EAAE,YAAY,CAAC;IAC5B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,uBAAuB,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,iBAAiB,EAAE;QACjB,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,WAAW,CAAC;KACrB,GAAG,IAAI,CAAC;IACT,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAoGjG;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAe/F"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Series Rendering Utilities
|
|
3
|
+
*
|
|
4
|
+
* Prepares and renders all chart series types (area, line, bar, scatter, candlestick, pie).
|
|
5
|
+
* Handles intro animations, GPU buffer management, and multi-pass rendering with proper layering.
|
|
6
|
+
*
|
|
7
|
+
* @module renderSeries
|
|
8
|
+
*/
|
|
9
|
+
import type { ResolvedChartGPUOptions, ResolvedSeriesConfig, ResolvedBarSeriesConfig } from '../../../config/OptionResolver';
|
|
10
|
+
import type { LinearScale } from '../../../utils/scales';
|
|
11
|
+
import type { GridArea } from '../../../renderers/createGridRenderer';
|
|
12
|
+
import type { LineRenderer } from '../../../renderers/createLineRenderer';
|
|
13
|
+
import type { AreaRenderer } from '../../../renderers/createAreaRenderer';
|
|
14
|
+
import type { BarRenderer } from '../../../renderers/createBarRenderer';
|
|
15
|
+
import type { ScatterRenderer } from '../../../renderers/createScatterRenderer';
|
|
16
|
+
import type { ScatterDensityRenderer } from '../../../renderers/createScatterDensityRenderer';
|
|
17
|
+
import type { PieRenderer } from '../../../renderers/createPieRenderer';
|
|
18
|
+
import type { CandlestickRenderer } from '../../../renderers/createCandlestickRenderer';
|
|
19
|
+
import type { ReferenceLineRenderer } from '../../../renderers/createReferenceLineRenderer';
|
|
20
|
+
import type { AnnotationMarkerRenderer } from '../../../renderers/createAnnotationMarkerRenderer';
|
|
21
|
+
import type { DataStore } from '../../../data/createDataStore';
|
|
22
|
+
export interface SeriesRenderers {
|
|
23
|
+
lineRenderers: LineRenderer[];
|
|
24
|
+
areaRenderers: AreaRenderer[];
|
|
25
|
+
barRenderer: BarRenderer;
|
|
26
|
+
scatterRenderers: ScatterRenderer[];
|
|
27
|
+
scatterDensityRenderers: ScatterDensityRenderer[];
|
|
28
|
+
pieRenderers: PieRenderer[];
|
|
29
|
+
candlestickRenderers: CandlestickRenderer[];
|
|
30
|
+
}
|
|
31
|
+
export interface AnnotationRenderers {
|
|
32
|
+
referenceLineRenderer: ReferenceLineRenderer;
|
|
33
|
+
referenceLineRendererMsaa: ReferenceLineRenderer;
|
|
34
|
+
annotationMarkerRenderer: AnnotationMarkerRenderer;
|
|
35
|
+
annotationMarkerRendererMsaa: AnnotationMarkerRenderer;
|
|
36
|
+
}
|
|
37
|
+
export interface SeriesPrepareContext {
|
|
38
|
+
currentOptions: ResolvedChartGPUOptions;
|
|
39
|
+
seriesForRender: ReadonlyArray<ResolvedSeriesConfig>;
|
|
40
|
+
xScale: LinearScale;
|
|
41
|
+
yScale: LinearScale;
|
|
42
|
+
gridArea: GridArea;
|
|
43
|
+
dataStore: DataStore;
|
|
44
|
+
appendedGpuThisFrame: Set<number>;
|
|
45
|
+
gpuSeriesKindByIndex: Array<'fullRawLine' | 'other' | 'unknown'>;
|
|
46
|
+
zoomState: {
|
|
47
|
+
getRange(): {
|
|
48
|
+
start: number;
|
|
49
|
+
end: number;
|
|
50
|
+
} | null;
|
|
51
|
+
} | null;
|
|
52
|
+
visibleXDomain: {
|
|
53
|
+
min: number;
|
|
54
|
+
max: number;
|
|
55
|
+
};
|
|
56
|
+
introPhase: 'pending' | 'running' | 'done';
|
|
57
|
+
introProgress01: number;
|
|
58
|
+
withAlpha: (color: string, alpha: number) => string;
|
|
59
|
+
maxRadiusCss: number;
|
|
60
|
+
}
|
|
61
|
+
export interface SeriesRenderContext {
|
|
62
|
+
hasCartesianSeries: boolean;
|
|
63
|
+
gridArea: GridArea;
|
|
64
|
+
mainPass: GPURenderPassEncoder;
|
|
65
|
+
plotScissor: {
|
|
66
|
+
x: number;
|
|
67
|
+
y: number;
|
|
68
|
+
w: number;
|
|
69
|
+
h: number;
|
|
70
|
+
};
|
|
71
|
+
introPhase: 'pending' | 'running' | 'done';
|
|
72
|
+
introProgress01: number;
|
|
73
|
+
referenceLineBelowCount: number;
|
|
74
|
+
markerBelowCount: number;
|
|
75
|
+
}
|
|
76
|
+
export interface AboveSeriesAnnotationContext {
|
|
77
|
+
hasCartesianSeries: boolean;
|
|
78
|
+
gridArea: GridArea;
|
|
79
|
+
overlayPass: GPURenderPassEncoder;
|
|
80
|
+
plotScissor: {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
w: number;
|
|
84
|
+
h: number;
|
|
85
|
+
};
|
|
86
|
+
referenceLineBelowCount: number;
|
|
87
|
+
referenceLineAboveCount: number;
|
|
88
|
+
markerBelowCount: number;
|
|
89
|
+
markerAboveCount: number;
|
|
90
|
+
}
|
|
91
|
+
export interface SeriesPreparationResult {
|
|
92
|
+
visibleSeriesForRender: ReadonlyArray<{
|
|
93
|
+
series: ResolvedSeriesConfig;
|
|
94
|
+
originalIndex: number;
|
|
95
|
+
}>;
|
|
96
|
+
barSeriesConfigs: ResolvedBarSeriesConfig[];
|
|
97
|
+
visibleBarSeriesConfigs: ResolvedBarSeriesConfig[];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Prepares all series renderers with current frame data.
|
|
101
|
+
*
|
|
102
|
+
* This loop prepares ALL series (including hidden) to maintain correct renderer indices.
|
|
103
|
+
* Visibility filtering happens after preparation for rendering.
|
|
104
|
+
*
|
|
105
|
+
* @param renderers - Series renderer instances
|
|
106
|
+
* @param context - Preparation context with scales, options, and state
|
|
107
|
+
* @returns Preparation result with visibility-filtered series arrays
|
|
108
|
+
*/
|
|
109
|
+
export declare function prepareSeries(renderers: SeriesRenderers, context: SeriesPrepareContext): SeriesPreparationResult;
|
|
110
|
+
/**
|
|
111
|
+
* Encodes scatter density compute passes before rendering.
|
|
112
|
+
*
|
|
113
|
+
* Must be called before beginRenderPass() for the main pass.
|
|
114
|
+
*
|
|
115
|
+
* @param renderers - Series renderer instances
|
|
116
|
+
* @param seriesForRender - All series configurations
|
|
117
|
+
* @param encoder - Command encoder for compute passes
|
|
118
|
+
*/
|
|
119
|
+
export declare function encodeScatterDensityCompute(renderers: SeriesRenderers, seriesForRender: ReadonlyArray<ResolvedSeriesConfig>, encoder: GPUCommandEncoder): void;
|
|
120
|
+
/**
|
|
121
|
+
* Renders all series to the main render pass with proper layering.
|
|
122
|
+
*
|
|
123
|
+
* Render order (from back to front):
|
|
124
|
+
* 1. Pies (non-cartesian, behind cartesian series)
|
|
125
|
+
* 2. Annotations below series (reference lines, markers)
|
|
126
|
+
* 3. Area fills
|
|
127
|
+
* 4. Bars
|
|
128
|
+
* 5. Candlesticks
|
|
129
|
+
* 6. Scatter points
|
|
130
|
+
* 7. Line strokes
|
|
131
|
+
*
|
|
132
|
+
* @param renderers - Series renderer instances
|
|
133
|
+
* @param annotationRenderers - Annotation renderer instances
|
|
134
|
+
* @param context - Render pass context with pass encoders and state
|
|
135
|
+
*/
|
|
136
|
+
export declare function renderSeries(renderers: SeriesRenderers, annotationRenderers: AnnotationRenderers, context: SeriesRenderContext, prepResult: SeriesPreparationResult): void;
|
|
137
|
+
/**
|
|
138
|
+
* Renders above-series annotations to the MSAA overlay pass.
|
|
139
|
+
*
|
|
140
|
+
* Must be called during the MSAA overlay pass (after blit).
|
|
141
|
+
*
|
|
142
|
+
* @param annotationRenderers - Annotation renderer instances
|
|
143
|
+
* @param context - Render pass context with overlay pass and state
|
|
144
|
+
*/
|
|
145
|
+
export declare function renderAboveSeriesAnnotations(annotationRenderers: AnnotationRenderers, context: AboveSeriesAnnotationContext): void;
|
|
146
|
+
//# sourceMappingURL=renderSeries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderSeries.d.ts","sourceRoot":"","sources":["../../../../src/core/renderCoordinator/render/renderSeries.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,uBAAuB,EAAqD,MAAM,gCAAgC,CAAC;AAEhL,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAO/D,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;IAClD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,mBAAmB;IAClC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,yBAAyB,EAAE,qBAAqB,CAAC;IACjD,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,4BAA4B,EAAE,wBAAwB,CAAC;CACxD;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,uBAAuB,CAAC;IACxC,eAAe,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACrD,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,oBAAoB,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACjE,SAAS,EAAE;QAAE,QAAQ,IAAI;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,cAAc,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,oBAAoB,CAAC;IAClC,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;IAC5C,uBAAuB,EAAE,uBAAuB,EAAE,CAAC;CACpD;AAUD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,oBAAoB,GAC5B,uBAAuB,CAkKzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,eAAe,EAC1B,eAAe,EAAE,aAAa,CAAC,oBAAoB,CAAC,EACpD,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,eAAe,EAC1B,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,uBAAuB,GAClC,IAAI,CAuGN;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,4BAA4B,GACpC,IAAI,CA4BN"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer pool management for the RenderCoordinator.
|
|
3
|
+
*
|
|
4
|
+
* Manages dynamic arrays of chart renderers with lazy instantiation and proper disposal.
|
|
5
|
+
* Each chart type (line, area, scatter, etc.) maintains a pool of renderer instances
|
|
6
|
+
* that grows/shrinks based on the number of series.
|
|
7
|
+
*
|
|
8
|
+
* @module rendererPool
|
|
9
|
+
*/
|
|
10
|
+
import { createAreaRenderer } from '../../../renderers/createAreaRenderer';
|
|
11
|
+
import { createLineRenderer } from '../../../renderers/createLineRenderer';
|
|
12
|
+
import { createScatterRenderer } from '../../../renderers/createScatterRenderer';
|
|
13
|
+
import { createScatterDensityRenderer } from '../../../renderers/createScatterDensityRenderer';
|
|
14
|
+
import { createPieRenderer } from '../../../renderers/createPieRenderer';
|
|
15
|
+
import { createCandlestickRenderer } from '../../../renderers/createCandlestickRenderer';
|
|
16
|
+
import { createBarRenderer } from '../../../renderers/createBarRenderer';
|
|
17
|
+
/**
|
|
18
|
+
* Configuration for renderer pool creation.
|
|
19
|
+
*/
|
|
20
|
+
export interface RendererPoolConfig {
|
|
21
|
+
readonly device: GPUDevice;
|
|
22
|
+
readonly targetFormat: GPUTextureFormat;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Renderer pool state exposed to the render coordinator.
|
|
26
|
+
*/
|
|
27
|
+
export interface RendererPoolState {
|
|
28
|
+
readonly areaRenderers: ReadonlyArray<ReturnType<typeof createAreaRenderer>>;
|
|
29
|
+
readonly lineRenderers: ReadonlyArray<ReturnType<typeof createLineRenderer>>;
|
|
30
|
+
readonly scatterRenderers: ReadonlyArray<ReturnType<typeof createScatterRenderer>>;
|
|
31
|
+
readonly scatterDensityRenderers: ReadonlyArray<ReturnType<typeof createScatterDensityRenderer>>;
|
|
32
|
+
readonly pieRenderers: ReadonlyArray<ReturnType<typeof createPieRenderer>>;
|
|
33
|
+
readonly candlestickRenderers: ReadonlyArray<ReturnType<typeof createCandlestickRenderer>>;
|
|
34
|
+
readonly barRenderer: ReturnType<typeof createBarRenderer>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Renderer pool interface returned by factory function.
|
|
38
|
+
*/
|
|
39
|
+
export interface RendererPool {
|
|
40
|
+
/**
|
|
41
|
+
* Ensures area renderer count matches the given count.
|
|
42
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
43
|
+
*
|
|
44
|
+
* @param count - Desired number of area renderers
|
|
45
|
+
*/
|
|
46
|
+
ensureAreaRendererCount(count: number): void;
|
|
47
|
+
/**
|
|
48
|
+
* Ensures line renderer count matches the given count.
|
|
49
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
50
|
+
*
|
|
51
|
+
* @param count - Desired number of line renderers
|
|
52
|
+
*/
|
|
53
|
+
ensureLineRendererCount(count: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Ensures scatter renderer count matches the given count.
|
|
56
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
57
|
+
*
|
|
58
|
+
* @param count - Desired number of scatter renderers
|
|
59
|
+
*/
|
|
60
|
+
ensureScatterRendererCount(count: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Ensures scatter density renderer count matches the given count.
|
|
63
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
64
|
+
*
|
|
65
|
+
* @param count - Desired number of scatter density renderers
|
|
66
|
+
*/
|
|
67
|
+
ensureScatterDensityRendererCount(count: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Ensures pie renderer count matches the given count.
|
|
70
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
71
|
+
*
|
|
72
|
+
* @param count - Desired number of pie renderers
|
|
73
|
+
*/
|
|
74
|
+
ensurePieRendererCount(count: number): void;
|
|
75
|
+
/**
|
|
76
|
+
* Ensures candlestick renderer count matches the given count.
|
|
77
|
+
* Grows or shrinks the pool as needed, disposing excess renderers.
|
|
78
|
+
*
|
|
79
|
+
* @param count - Desired number of candlestick renderers
|
|
80
|
+
*/
|
|
81
|
+
ensureCandlestickRendererCount(count: number): void;
|
|
82
|
+
/**
|
|
83
|
+
* Gets current renderer pool state for rendering.
|
|
84
|
+
* Returns readonly arrays to prevent external mutation.
|
|
85
|
+
*
|
|
86
|
+
* @returns Current state with all renderer arrays
|
|
87
|
+
*/
|
|
88
|
+
getState(): RendererPoolState;
|
|
89
|
+
/**
|
|
90
|
+
* Disposes all renderers in the pool.
|
|
91
|
+
* Clears all arrays and destroys GPU resources.
|
|
92
|
+
*/
|
|
93
|
+
dispose(): void;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Creates a renderer pool for dynamic renderer management.
|
|
97
|
+
*
|
|
98
|
+
* The renderer pool uses lazy instantiation: renderers are only created when
|
|
99
|
+
* the pool grows, and are disposed when the pool shrinks. This allows the
|
|
100
|
+
* render coordinator to efficiently handle varying numbers of series.
|
|
101
|
+
*
|
|
102
|
+
* **Architecture:**
|
|
103
|
+
* - Each chart type has a dedicated renderer array
|
|
104
|
+
* - Bar renderer is a singleton (not pooled)
|
|
105
|
+
* - Renderers are disposed when removed from the pool
|
|
106
|
+
* - Arrays are cleared to release references
|
|
107
|
+
*
|
|
108
|
+
* @param config - Configuration with device and target format
|
|
109
|
+
* @returns Renderer pool instance
|
|
110
|
+
*/
|
|
111
|
+
export declare function createRendererPool(config: RendererPoolConfig): RendererPool;
|
|
112
|
+
//# sourceMappingURL=rendererPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rendererPool.d.ts","sourceRoot":"","sources":["../../../../src/core/renderCoordinator/renderers/rendererPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;IACnF,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC;IACjG,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC;IAC3F,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7C;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7C;;;;;OAKG;IACH,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD;;;;;OAKG;IACH,iCAAiC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5C;;;;;OAKG;IACH,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;;OAKG;IACH,QAAQ,IAAI,iBAAiB,CAAC;IAE9B;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CA+K3E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the RenderCoordinator modules.
|
|
3
|
+
*
|
|
4
|
+
* @module types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Minimal GPUContext interface required by RenderCoordinator utilities.
|
|
8
|
+
* This interface allows the render coordinator to work with any object
|
|
9
|
+
* that provides WebGPU context properties, not just the full GPUContext class.
|
|
10
|
+
*/
|
|
11
|
+
export interface GPUContextLike {
|
|
12
|
+
readonly device: GPUDevice | null;
|
|
13
|
+
readonly canvas: HTMLCanvasElement | null;
|
|
14
|
+
readonly canvasContext: GPUCanvasContext | null;
|
|
15
|
+
readonly preferredFormat: GPUTextureFormat | null;
|
|
16
|
+
readonly initialized: boolean;
|
|
17
|
+
readonly devicePixelRatio?: number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/renderCoordinator/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tooltip and legend helper utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for managing tooltip state, caching content to avoid
|
|
5
|
+
* unnecessary DOM updates, and computing tooltip anchor positions for special
|
|
6
|
+
* chart types like candlesticks.
|
|
7
|
+
*
|
|
8
|
+
* @module tooltipLegendHelpers
|
|
9
|
+
*/
|
|
10
|
+
import type { OHLCDataPoint } from '../../../config/types';
|
|
11
|
+
import type { LinearScale } from '../../../utils/scales';
|
|
12
|
+
/**
|
|
13
|
+
* Tooltip anchor position in canvas-local CSS pixels.
|
|
14
|
+
*/
|
|
15
|
+
export interface TooltipAnchor {
|
|
16
|
+
readonly x: number;
|
|
17
|
+
readonly y: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Cached tooltip state for content deduplication.
|
|
21
|
+
*
|
|
22
|
+
* Tracks the last displayed content and position to avoid unnecessary DOM updates
|
|
23
|
+
* when the tooltip hasn't actually changed.
|
|
24
|
+
*/
|
|
25
|
+
export interface TooltipCache {
|
|
26
|
+
content: string | null;
|
|
27
|
+
x: number | null;
|
|
28
|
+
y: number | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new empty tooltip cache.
|
|
32
|
+
*
|
|
33
|
+
* @returns Fresh tooltip cache with null values
|
|
34
|
+
*/
|
|
35
|
+
export declare function createTooltipCache(): TooltipCache;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if tooltip content or position has changed.
|
|
38
|
+
*
|
|
39
|
+
* Returns true if any of the values differ from the cache, indicating that
|
|
40
|
+
* a DOM update is needed.
|
|
41
|
+
*
|
|
42
|
+
* @param cache - Current cached state
|
|
43
|
+
* @param content - New content to display
|
|
44
|
+
* @param x - New X position in CSS pixels
|
|
45
|
+
* @param y - New Y position in CSS pixels
|
|
46
|
+
* @returns True if update is needed (values differ from cache)
|
|
47
|
+
*/
|
|
48
|
+
export declare function shouldUpdateTooltip(cache: TooltipCache, content: string, x: number, y: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Updates the tooltip cache with new values.
|
|
51
|
+
*
|
|
52
|
+
* Should be called after successfully updating the DOM to keep cache in sync.
|
|
53
|
+
*
|
|
54
|
+
* @param cache - Tooltip cache to update (mutated)
|
|
55
|
+
* @param content - New content that was displayed
|
|
56
|
+
* @param x - New X position that was set
|
|
57
|
+
* @param y - New Y position that was set
|
|
58
|
+
*/
|
|
59
|
+
export declare function updateTooltipCache(cache: TooltipCache, content: string, x: number, y: number): void;
|
|
60
|
+
/**
|
|
61
|
+
* Clears the tooltip cache.
|
|
62
|
+
*
|
|
63
|
+
* Should be called when the tooltip is hidden to ensure fresh state
|
|
64
|
+
* when it's shown again.
|
|
65
|
+
*
|
|
66
|
+
* @param cache - Tooltip cache to clear (mutated)
|
|
67
|
+
*/
|
|
68
|
+
export declare function clearTooltipCache(cache: TooltipCache): void;
|
|
69
|
+
/**
|
|
70
|
+
* Computes container-local CSS pixel anchor coordinates for a candlestick tooltip.
|
|
71
|
+
*
|
|
72
|
+
* The anchor is positioned near the candle body center for stable tooltip positioning
|
|
73
|
+
* even when the cursor is at the edge of the candlestick.
|
|
74
|
+
*
|
|
75
|
+
* Coordinate transformations:
|
|
76
|
+
* 1. Extract O/H/L/C from data point (tuple: [timestamp, open, close, low, high])
|
|
77
|
+
* 2. Compute body center Y = (open + close) / 2
|
|
78
|
+
* 3. Transform to clip space via scales
|
|
79
|
+
* 4. Convert clip space to canvas-local CSS pixels
|
|
80
|
+
* 5. Add container offset for absolute positioning
|
|
81
|
+
*
|
|
82
|
+
* Returns null if any coordinate computation fails (non-finite values).
|
|
83
|
+
*
|
|
84
|
+
* @param point - OHLC data point (tuple or object format)
|
|
85
|
+
* @param xScale - Linear scale for X axis
|
|
86
|
+
* @param yScale - Linear scale for Y axis
|
|
87
|
+
* @param canvasCssWidth - Canvas width in CSS pixels
|
|
88
|
+
* @param canvasCssHeight - Canvas height in CSS pixels
|
|
89
|
+
* @param offsetX - Container offset X in CSS pixels (default: 0)
|
|
90
|
+
* @param offsetY - Container offset Y in CSS pixels (default: 0)
|
|
91
|
+
* @returns Tooltip anchor position or null if computation fails
|
|
92
|
+
*/
|
|
93
|
+
export declare function computeCandlestickTooltipAnchor(point: OHLCDataPoint, xScale: LinearScale, yScale: LinearScale, canvasCssWidth: number, canvasCssHeight: number, offsetX?: number, offsetY?: number): TooltipAnchor | null;
|
|
94
|
+
/**
|
|
95
|
+
* Determines if a data point is an OHLC/candlestick point.
|
|
96
|
+
*
|
|
97
|
+
* Checks if the point is a 5-element tuple (timestamp, open, close, low, high)
|
|
98
|
+
* or an object with OHLC properties.
|
|
99
|
+
*
|
|
100
|
+
* @param point - Data point to check
|
|
101
|
+
* @returns True if point is OHLC format
|
|
102
|
+
*/
|
|
103
|
+
export declare function isOHLCDataPoint(point: any): point is OHLCDataPoint;
|
|
104
|
+
//# sourceMappingURL=tooltipLegendHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltipLegendHelpers.d.ts","sourceRoot":"","sources":["../../../../src/core/renderCoordinator/ui/tooltipLegendHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAMjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAIN;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAI3D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,MAAU,EACnB,OAAO,GAAE,MAAU,GAClB,aAAa,GAAG,IAAI,CA0CtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,aAAa,CAclE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Axis and grid utilities for the RenderCoordinator.
|
|
3
|
+
*
|
|
4
|
+
* These pure functions handle coordinate transformations between different spaces:
|
|
5
|
+
* - CSS pixels (DOM layout)
|
|
6
|
+
* - Device pixels (canvas.width/height)
|
|
7
|
+
* - Normalized device coordinates / clip space (WebGPU [-1, 1])
|
|
8
|
+
*
|
|
9
|
+
* @module axisUtils
|
|
10
|
+
*/
|
|
11
|
+
import type { GPUContextLike } from '../types';
|
|
12
|
+
import type { ResolvedChartGPUOptions } from '../../../config/OptionResolver';
|
|
13
|
+
import type { GridArea } from '../../../renderers/createGridRenderer';
|
|
14
|
+
/**
|
|
15
|
+
* Computes grid area with margins and canvas dimensions for rendering layout.
|
|
16
|
+
* GridArea uses:
|
|
17
|
+
* - Margins (left, right, top, bottom) in CSS pixels
|
|
18
|
+
* - Canvas dimensions (canvasWidth, canvasHeight) in DEVICE pixels
|
|
19
|
+
* - devicePixelRatio for CSS-to-device conversion
|
|
20
|
+
*
|
|
21
|
+
* @param gpuContext - GPU context with canvas and device pixel ratio
|
|
22
|
+
* @param options - Resolved chart options with grid margins
|
|
23
|
+
* @returns GridArea object with margins, canvas dimensions, and DPR
|
|
24
|
+
* @throws If canvas is null or has invalid dimensions
|
|
25
|
+
*/
|
|
26
|
+
export declare const computeGridArea: (gpuContext: GPUContextLike, options: ResolvedChartGPUOptions) => GridArea;
|
|
27
|
+
/**
|
|
28
|
+
* Converts RGBA normalized [0-1] values to CSS rgba() string.
|
|
29
|
+
*
|
|
30
|
+
* @param rgba - Array of [r, g, b, a] in range [0, 1]
|
|
31
|
+
* @returns CSS rgba() string
|
|
32
|
+
*/
|
|
33
|
+
export declare const rgba01ToCssRgba: (rgba: readonly [number, number, number, number]) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Applies alpha multiplier to CSS color.
|
|
36
|
+
* Parses color, multiplies alpha channel, and returns new CSS rgba() string.
|
|
37
|
+
*
|
|
38
|
+
* @param cssColor - CSS color string
|
|
39
|
+
* @param alphaMultiplier - Alpha multiplier in range [0, 1]
|
|
40
|
+
* @returns CSS rgba() string with modified alpha, or original color if parse fails
|
|
41
|
+
*/
|
|
42
|
+
export declare const withAlpha: (cssColor: string, alphaMultiplier: number) => string;
|
|
43
|
+
/**
|
|
44
|
+
* Converts grid margins to normalized device clip coordinates for WebGPU.
|
|
45
|
+
* Output is in WebGPU clip space: [-1, 1] for both x and y.
|
|
46
|
+
* Y-axis is flipped (top is positive, bottom is negative).
|
|
47
|
+
*
|
|
48
|
+
* @param gridArea - Grid area with margins and canvas dimensions
|
|
49
|
+
* @returns Clip rect with left, right, top, bottom in range [-1, 1]
|
|
50
|
+
*/
|
|
51
|
+
export declare const computePlotClipRect: (gridArea: GridArea) => {
|
|
52
|
+
readonly left: number;
|
|
53
|
+
readonly right: number;
|
|
54
|
+
readonly top: number;
|
|
55
|
+
readonly bottom: number;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Clamps value to [0, 1] range.
|
|
59
|
+
*
|
|
60
|
+
* @param v - Value to clamp
|
|
61
|
+
* @returns Clamped value
|
|
62
|
+
*/
|
|
63
|
+
export declare const clamp01: (v: number) => number;
|
|
64
|
+
/**
|
|
65
|
+
* Linear interpolation between two values with clamped t.
|
|
66
|
+
*
|
|
67
|
+
* @param a - Start value
|
|
68
|
+
* @param b - End value
|
|
69
|
+
* @param t01 - Interpolation parameter in range [0, 1]
|
|
70
|
+
* @returns Interpolated value
|
|
71
|
+
*/
|
|
72
|
+
export declare const lerp: (a: number, b: number, t01: number) => number;
|
|
73
|
+
/**
|
|
74
|
+
* Interpolates between two domains (min/max pairs).
|
|
75
|
+
* Ensures result is a valid domain (min ≤ max, both finite).
|
|
76
|
+
*
|
|
77
|
+
* @param from - Start domain
|
|
78
|
+
* @param to - End domain
|
|
79
|
+
* @param t01 - Interpolation parameter in range [0, 1]
|
|
80
|
+
* @returns Interpolated domain
|
|
81
|
+
*/
|
|
82
|
+
export declare const lerpDomain: (from: {
|
|
83
|
+
readonly min: number;
|
|
84
|
+
readonly max: number;
|
|
85
|
+
}, to: {
|
|
86
|
+
readonly min: number;
|
|
87
|
+
readonly max: number;
|
|
88
|
+
}, t01: number) => {
|
|
89
|
+
readonly min: number;
|
|
90
|
+
readonly max: number;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Computes scissor rect in device pixels from grid margins.
|
|
94
|
+
* Used for WebGPU scissor testing to clip rendering to plot area.
|
|
95
|
+
*
|
|
96
|
+
* @param gridArea - Grid area with margins and canvas dimensions
|
|
97
|
+
* @returns Scissor rect with x, y, w, h in device pixels
|
|
98
|
+
*/
|
|
99
|
+
export declare const computePlotScissorDevicePx: (gridArea: GridArea) => {
|
|
100
|
+
readonly x: number;
|
|
101
|
+
readonly y: number;
|
|
102
|
+
readonly w: number;
|
|
103
|
+
readonly h: number;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Converts clip-space X to canvas CSS pixels (from normalized [-1, 1]).
|
|
107
|
+
*
|
|
108
|
+
* @param xClip - X coordinate in clip space [-1, 1]
|
|
109
|
+
* @param canvasCssWidth - Canvas width in CSS pixels
|
|
110
|
+
* @returns X coordinate in canvas CSS pixels
|
|
111
|
+
*/
|
|
112
|
+
export declare const clipXToCanvasCssPx: (xClip: number, canvasCssWidth: number) => number;
|
|
113
|
+
/**
|
|
114
|
+
* Converts clip-space Y to canvas CSS pixels (from normalized [-1, 1]).
|
|
115
|
+
* Y-axis is flipped (1 is top, -1 is bottom).
|
|
116
|
+
*
|
|
117
|
+
* @param yClip - Y coordinate in clip space [-1, 1]
|
|
118
|
+
* @param canvasCssHeight - Canvas height in CSS pixels
|
|
119
|
+
* @returns Y coordinate in canvas CSS pixels
|
|
120
|
+
*/
|
|
121
|
+
export declare const clipYToCanvasCssPx: (yClip: number, canvasCssHeight: number) => number;
|
|
122
|
+
//# sourceMappingURL=axisUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axisUtils.d.ts","sourceRoot":"","sources":["../../../../src/core/renderCoordinator/utils/axisUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAKtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAI,YAAY,cAAc,EAAE,SAAS,uBAAuB,KAAG,QA4C9F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAAG,MAMjF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,iBAAiB,MAAM,KAAG,MAKrE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,QAAQ,KACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAmBhG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,MAAqC,CAAC;AAE1E;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,KAAK,MAAM,KAAG,MAAoC,CAAC;AAE9F;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACpD,IAAI;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAClD,KAAK,MAAM,KACV;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAE9C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACrC,UAAU,QAAQ,KACjB;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAgBlF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,gBAAgB,MAAM,KAAG,MAA4C,CAAC;AAExH;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,iBAAiB,MAAM,KAAG,MAA6C,CAAC"}
|