chartgpu 0.1.0
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/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/ChartGPU.d.ts +74 -0
- package/dist/ChartGPU.d.ts.map +1 -0
- package/dist/components/createDataZoomSlider.d.ts +14 -0
- package/dist/components/createDataZoomSlider.d.ts.map +1 -0
- package/dist/components/createLegend.d.ts +9 -0
- package/dist/components/createLegend.d.ts.map +1 -0
- package/dist/components/createTextOverlay.d.ts +17 -0
- package/dist/components/createTextOverlay.d.ts.map +1 -0
- package/dist/components/createTooltip.d.ts +12 -0
- package/dist/components/createTooltip.d.ts.map +1 -0
- package/dist/components/formatTooltip.d.ts +12 -0
- package/dist/components/formatTooltip.d.ts.map +1 -0
- package/dist/config/OptionResolver.d.ts +97 -0
- package/dist/config/OptionResolver.d.ts.map +1 -0
- package/dist/config/defaults.d.ts +33 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/types.d.ts +224 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/core/GPUContext.d.ts +210 -0
- package/dist/core/GPUContext.d.ts.map +1 -0
- package/dist/core/RenderScheduler.d.ts +132 -0
- package/dist/core/RenderScheduler.d.ts.map +1 -0
- package/dist/core/createAnimationController.d.ts +15 -0
- package/dist/core/createAnimationController.d.ts.map +1 -0
- package/dist/core/createRenderCoordinator.d.ts +71 -0
- package/dist/core/createRenderCoordinator.d.ts.map +1 -0
- package/dist/data/createDataStore.d.ts +33 -0
- package/dist/data/createDataStore.d.ts.map +1 -0
- package/dist/data/createStreamBuffer.d.ts +20 -0
- package/dist/data/createStreamBuffer.d.ts.map +1 -0
- package/dist/data/lttbSample.d.ts +5 -0
- package/dist/data/lttbSample.d.ts.map +1 -0
- package/dist/data/sampleSeries.d.ts +3 -0
- package/dist/data/sampleSeries.d.ts.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5977 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/createChartSync.d.ts +12 -0
- package/dist/interaction/createChartSync.d.ts.map +1 -0
- package/dist/interaction/createEventManager.d.ts +24 -0
- package/dist/interaction/createEventManager.d.ts.map +1 -0
- package/dist/interaction/createHoverState.d.ts +20 -0
- package/dist/interaction/createHoverState.d.ts.map +1 -0
- package/dist/interaction/createInsideZoom.d.ts +14 -0
- package/dist/interaction/createInsideZoom.d.ts.map +1 -0
- package/dist/interaction/createZoomState.d.ts +37 -0
- package/dist/interaction/createZoomState.d.ts.map +1 -0
- package/dist/interaction/findNearestPoint.d.ts +61 -0
- package/dist/interaction/findNearestPoint.d.ts.map +1 -0
- package/dist/interaction/findPieSlice.d.ts +36 -0
- package/dist/interaction/findPieSlice.d.ts.map +1 -0
- package/dist/interaction/findPointsAtX.d.ts +37 -0
- package/dist/interaction/findPointsAtX.d.ts.map +1 -0
- package/dist/renderers/createAreaRenderer.d.ts +18 -0
- package/dist/renderers/createAreaRenderer.d.ts.map +1 -0
- package/dist/renderers/createAxisRenderer.d.ts +19 -0
- package/dist/renderers/createAxisRenderer.d.ts.map +1 -0
- package/dist/renderers/createBarRenderer.d.ts +20 -0
- package/dist/renderers/createBarRenderer.d.ts.map +1 -0
- package/dist/renderers/createCrosshairRenderer.d.ts +43 -0
- package/dist/renderers/createCrosshairRenderer.d.ts.map +1 -0
- package/dist/renderers/createGridRenderer.d.ts +44 -0
- package/dist/renderers/createGridRenderer.d.ts.map +1 -0
- package/dist/renderers/createHighlightRenderer.d.ts +39 -0
- package/dist/renderers/createHighlightRenderer.d.ts.map +1 -0
- package/dist/renderers/createLineRenderer.d.ts +18 -0
- package/dist/renderers/createLineRenderer.d.ts.map +1 -0
- package/dist/renderers/createPieRenderer.d.ts +18 -0
- package/dist/renderers/createPieRenderer.d.ts.map +1 -0
- package/dist/renderers/createScatterRenderer.d.ts +19 -0
- package/dist/renderers/createScatterRenderer.d.ts.map +1 -0
- package/dist/renderers/rendererUtils.d.ts +100 -0
- package/dist/renderers/rendererUtils.d.ts.map +1 -0
- package/dist/themes/darkTheme.d.ts +11 -0
- package/dist/themes/darkTheme.d.ts.map +1 -0
- package/dist/themes/index.d.ts +8 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/lightTheme.d.ts +11 -0
- package/dist/themes/lightTheme.d.ts.map +1 -0
- package/dist/themes/types.d.ts +14 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/utils/checkWebGPU.d.ts +39 -0
- package/dist/utils/checkWebGPU.d.ts.map +1 -0
- package/dist/utils/colors.d.ts +14 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/easing.d.ts +9 -0
- package/dist/utils/easing.d.ts.map +1 -0
- package/dist/utils/scales.d.ts +79 -0
- package/dist/utils/scales.d.ts.map +1 -0
- package/package.json +56 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 ChartGPU
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# ChartGPU
|
|
2
|
+
|
|
3
|
+
High-performance charts powered by WebGPU.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/chartgpu)
|
|
6
|
+
[](https://github.com/hunterg325/ChartGPU/blob/main/LICENSE)
|
|
7
|
+
[](https://bundlephobia.com/package/chartgpu)
|
|
8
|
+
|
|
9
|
+
ChartGPU is a TypeScript charting library built on WebGPU for smooth, interactive rendering—especially when you have lots of data.
|
|
10
|
+
|
|
11
|
+
## Highlights
|
|
12
|
+
|
|
13
|
+
- 🚀 WebGPU-accelerated rendering for high FPS with large datasets
|
|
14
|
+
- 📈 Multiple series types: line, area, bar, scatter, pie
|
|
15
|
+
- 🧭 Built-in interaction: hover highlight, tooltip, crosshair
|
|
16
|
+
- 🔁 Streaming updates via `appendData(...)` (cartesian series)
|
|
17
|
+
- 🔍 X-axis zoom (inside gestures + optional slider UI)
|
|
18
|
+
- 🎛️ Theme presets (`'dark' | 'light'`) and custom theme support
|
|
19
|
+
|
|
20
|
+
## Demo
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+
|
|
24
|
+
## Quick start
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { ChartGPU } from 'chartgpu';
|
|
28
|
+
const container = document.getElementById('chart')!;
|
|
29
|
+
await ChartGPU.create(container, {
|
|
30
|
+
series: [{ type: 'line', data: [[0, 1], [1, 3], [2, 2]] }],
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
`npm install chartgpu`
|
|
37
|
+
|
|
38
|
+
## Browser support (WebGPU required)
|
|
39
|
+
|
|
40
|
+
- Chrome 113+ or Edge 113+ (WebGPU enabled by default)
|
|
41
|
+
- Safari 18+ (WebGPU enabled by default)
|
|
42
|
+
- Firefox: not supported (WebGPU support in development)
|
|
43
|
+
|
|
44
|
+
## Documentation
|
|
45
|
+
|
|
46
|
+
- Full documentation: [Getting Started](https://github.com/hunterg325/ChartGPU/blob/main/docs/GETTING_STARTED.md)
|
|
47
|
+
- API reference: [`docs/API.md`](https://github.com/hunterg325/ChartGPU/blob/main/docs/API.md)
|
|
48
|
+
|
|
49
|
+
## Examples
|
|
50
|
+
|
|
51
|
+
- Browse examples: [`examples/`](https://github.com/hunterg325/ChartGPU/tree/main/examples)
|
|
52
|
+
- Run locally:
|
|
53
|
+
- `npm install`
|
|
54
|
+
- `npm run dev` (opens `http://localhost:5176/examples/`)
|
|
55
|
+
|
|
56
|
+
## Contributing
|
|
57
|
+
|
|
58
|
+
See [`CONTRIBUTING.md`](https://github.com/hunterg325/ChartGPU/blob/main/CONTRIBUTING.md).
|
|
59
|
+
|
|
60
|
+
## License
|
|
61
|
+
|
|
62
|
+
MIT — see [`LICENSE`](https://github.com/hunterg325/ChartGPU/blob/main/LICENSE).
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { ChartGPUOptions, DataPoint } from './config/types';
|
|
2
|
+
export interface ChartGPUInstance {
|
|
3
|
+
readonly options: Readonly<ChartGPUOptions>;
|
|
4
|
+
readonly disposed: boolean;
|
|
5
|
+
setOption(options: ChartGPUOptions): void;
|
|
6
|
+
/**
|
|
7
|
+
* Appends new points to a cartesian series at runtime (streaming).
|
|
8
|
+
*
|
|
9
|
+
* Pie series are non-cartesian and are currently not supported by streaming append.
|
|
10
|
+
*/
|
|
11
|
+
appendData(seriesIndex: number, newPoints: DataPoint[]): void;
|
|
12
|
+
resize(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
on(eventName: 'crosshairMove', callback: ChartGPUCrosshairMoveCallback): void;
|
|
15
|
+
on(eventName: ChartGPUEventName, callback: ChartGPUEventCallback): void;
|
|
16
|
+
off(eventName: 'crosshairMove', callback: ChartGPUCrosshairMoveCallback): void;
|
|
17
|
+
off(eventName: ChartGPUEventName, callback: ChartGPUEventCallback): void;
|
|
18
|
+
/**
|
|
19
|
+
* Gets the current “interaction x” in domain units (or `null` when inactive).
|
|
20
|
+
*
|
|
21
|
+
* This is derived from pointer movement inside the plot grid and can also be driven
|
|
22
|
+
* externally via `setInteractionX(...)` (e.g. chart sync).
|
|
23
|
+
*/
|
|
24
|
+
getInteractionX(): number | null;
|
|
25
|
+
/**
|
|
26
|
+
* Drives the chart’s crosshair + tooltip from a domain-space x value.
|
|
27
|
+
*
|
|
28
|
+
* Passing `null` clears the interaction (hides crosshair/tooltip).
|
|
29
|
+
*/
|
|
30
|
+
setInteractionX(x: number | null, source?: unknown): void;
|
|
31
|
+
/**
|
|
32
|
+
* Alias for `setInteractionX(...)` for chart sync semantics.
|
|
33
|
+
*/
|
|
34
|
+
setCrosshairX(x: number | null, source?: unknown): void;
|
|
35
|
+
/**
|
|
36
|
+
* Subscribes to interaction x changes (domain units).
|
|
37
|
+
*
|
|
38
|
+
* Returns an unsubscribe function.
|
|
39
|
+
*/
|
|
40
|
+
onInteractionXChange(callback: (x: number | null, source?: unknown) => void): () => void;
|
|
41
|
+
/**
|
|
42
|
+
* Returns the current percent-space zoom window (or `null` when zoom is disabled).
|
|
43
|
+
*/
|
|
44
|
+
getZoomRange(): Readonly<{
|
|
45
|
+
start: number;
|
|
46
|
+
end: number;
|
|
47
|
+
}> | null;
|
|
48
|
+
/**
|
|
49
|
+
* Sets the percent-space zoom window.
|
|
50
|
+
*
|
|
51
|
+
* No-op when zoom is disabled.
|
|
52
|
+
*/
|
|
53
|
+
setZoomRange(start: number, end: number): void;
|
|
54
|
+
}
|
|
55
|
+
export type ChartGPU = ChartGPUInstance;
|
|
56
|
+
export type ChartGPUEventName = 'click' | 'mouseover' | 'mouseout' | 'crosshairMove';
|
|
57
|
+
export type ChartGPUEventPayload = Readonly<{
|
|
58
|
+
readonly seriesIndex: number | null;
|
|
59
|
+
readonly dataIndex: number | null;
|
|
60
|
+
readonly value: readonly [number, number] | null;
|
|
61
|
+
readonly seriesName: string | null;
|
|
62
|
+
readonly event: PointerEvent;
|
|
63
|
+
}>;
|
|
64
|
+
export type ChartGPUCrosshairMovePayload = Readonly<{
|
|
65
|
+
readonly x: number | null;
|
|
66
|
+
readonly source?: unknown;
|
|
67
|
+
}>;
|
|
68
|
+
export type ChartGPUEventCallback = (payload: ChartGPUEventPayload) => void;
|
|
69
|
+
export type ChartGPUCrosshairMoveCallback = (payload: ChartGPUCrosshairMovePayload) => void;
|
|
70
|
+
export declare function createChartGPU(container: HTMLElement, options: ChartGPUOptions): Promise<ChartGPUInstance>;
|
|
71
|
+
export declare const ChartGPU: {
|
|
72
|
+
create: typeof createChartGPU;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=ChartGPU.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartGPU.d.ts","sourceRoot":"","sources":["../src/ChartGPU.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAwC,MAAM,gBAAgB,CAAC;AAWvG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC9D,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;IAChB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAC9E,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACxE,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAC/E,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzE;;;;;OAKG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxD;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACzF;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAChE;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAID,MAAM,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAE5E,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,IAAI,CAAC;AA0R5F,wBAAsB,cAAc,CAClC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAkxB3B;AAED,eAAO,MAAM,QAAQ;;CAEpB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ZoomState } from '../interaction/createZoomState';
|
|
2
|
+
import type { ThemeConfig } from '../themes/types';
|
|
3
|
+
export interface DataZoomSlider {
|
|
4
|
+
update(theme: ThemeConfig): void;
|
|
5
|
+
dispose(): void;
|
|
6
|
+
}
|
|
7
|
+
export interface DataZoomSliderOptions {
|
|
8
|
+
readonly height?: number;
|
|
9
|
+
readonly marginTop?: number;
|
|
10
|
+
readonly zIndex?: number;
|
|
11
|
+
readonly showPreview?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function createDataZoomSlider(container: HTMLElement, zoomState: ZoomState, options?: DataZoomSliderOptions): DataZoomSlider;
|
|
14
|
+
//# sourceMappingURL=createDataZoomSlider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDataZoomSlider.d.ts","sourceRoot":"","sources":["../../src/components/createDataZoomSlider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAgBD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,cAAc,CA+QhB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SeriesConfig } from '../config/types';
|
|
2
|
+
import type { ThemeConfig } from '../themes/types';
|
|
3
|
+
export type LegendPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
4
|
+
export interface Legend {
|
|
5
|
+
update(series: ReadonlyArray<SeriesConfig>, theme: ThemeConfig): void;
|
|
6
|
+
dispose(): void;
|
|
7
|
+
}
|
|
8
|
+
export declare function createLegend(container: HTMLElement, position?: LegendPosition): Legend;
|
|
9
|
+
//# sourceMappingURL=createLegend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLegend.d.ts","sourceRoot":"","sources":["../../src/components/createLegend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB;AAwCD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,cAAwB,GACjC,MAAM,CA0KR"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type TextOverlayAnchor = 'start' | 'middle' | 'end';
|
|
2
|
+
export interface TextOverlayLabelOptions {
|
|
3
|
+
readonly fontSize?: number;
|
|
4
|
+
readonly color?: string;
|
|
5
|
+
readonly anchor?: TextOverlayAnchor;
|
|
6
|
+
/**
|
|
7
|
+
* Rotation in degrees (CSS `rotate(<deg>deg)`).
|
|
8
|
+
*/
|
|
9
|
+
readonly rotation?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TextOverlay {
|
|
12
|
+
clear(): void;
|
|
13
|
+
addLabel(text: string, x: number, y: number, options?: TextOverlayLabelOptions): HTMLSpanElement;
|
|
14
|
+
dispose(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function createTextOverlay(container: HTMLElement): TextOverlay;
|
|
17
|
+
//# sourceMappingURL=createTextOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTextOverlay.d.ts","sourceRoot":"","sources":["../../src/components/createTextOverlay.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,CAAC,EAAE,uBAAuB,GAChC,eAAe,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB;AAeD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAmErE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface Tooltip {
|
|
2
|
+
/**
|
|
3
|
+
* Show tooltip at container-local CSS pixel coordinates.
|
|
4
|
+
*
|
|
5
|
+
* `content` is treated as HTML (assigned via `innerHTML`).
|
|
6
|
+
*/
|
|
7
|
+
show(x: number, y: number, content: string): void;
|
|
8
|
+
hide(): void;
|
|
9
|
+
dispose(): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createTooltip(container: HTMLElement): Tooltip;
|
|
12
|
+
//# sourceMappingURL=createTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTooltip.d.ts","sourceRoot":"","sources":["../../src/components/createTooltip.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;CACjB;AASD,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAsL7D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TooltipParams } from '../config/types';
|
|
2
|
+
/**
|
|
3
|
+
* Default tooltip formatter for item mode.
|
|
4
|
+
* Returns a compact single-row HTML snippet: dot + series name + y value.
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatTooltipItem(params: TooltipParams): string;
|
|
7
|
+
/**
|
|
8
|
+
* Default tooltip formatter for axis mode.
|
|
9
|
+
* Renders an x header line then one row per series with the y value.
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatTooltipAxis(params: TooltipParams[]): string;
|
|
12
|
+
//# sourceMappingURL=formatTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatTooltip.d.ts","sourceRoot":"","sources":["../../src/components/formatTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA0ErD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAajE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { AreaStyleConfig, AxisConfig, ChartGPUOptions, GridConfig, LineStyleConfig, AreaSeriesConfig, BarSeriesConfig, LineSeriesConfig, PieDataItem, PieSeriesConfig, ScatterSeriesConfig, SeriesSampling } from './types';
|
|
2
|
+
import type { ThemeConfig } from '../themes/types';
|
|
3
|
+
export type ResolvedGridConfig = Readonly<Required<GridConfig>>;
|
|
4
|
+
export type ResolvedLineStyleConfig = Readonly<Required<Omit<LineStyleConfig, 'color'>> & {
|
|
5
|
+
readonly color: string;
|
|
6
|
+
}>;
|
|
7
|
+
export type ResolvedAreaStyleConfig = Readonly<Required<Omit<AreaStyleConfig, 'color'>> & {
|
|
8
|
+
readonly color: string;
|
|
9
|
+
}>;
|
|
10
|
+
export type RawBounds = Readonly<{
|
|
11
|
+
xMin: number;
|
|
12
|
+
xMax: number;
|
|
13
|
+
yMin: number;
|
|
14
|
+
yMax: number;
|
|
15
|
+
}>;
|
|
16
|
+
export type ResolvedLineSeriesConfig = Readonly<Omit<LineSeriesConfig, 'color' | 'lineStyle' | 'areaStyle' | 'sampling' | 'samplingThreshold' | 'data'> & {
|
|
17
|
+
readonly color: string;
|
|
18
|
+
readonly lineStyle: ResolvedLineStyleConfig;
|
|
19
|
+
readonly areaStyle?: ResolvedAreaStyleConfig;
|
|
20
|
+
readonly sampling: SeriesSampling;
|
|
21
|
+
readonly samplingThreshold: number;
|
|
22
|
+
/**
|
|
23
|
+
* Original (unsampled) series data.
|
|
24
|
+
*
|
|
25
|
+
* Used at runtime for zoom-aware re-sampling so we can increase detail when zoomed-in without
|
|
26
|
+
* losing outliers or permanently discarding points.
|
|
27
|
+
*/
|
|
28
|
+
readonly rawData: Readonly<LineSeriesConfig['data']>;
|
|
29
|
+
readonly data: Readonly<LineSeriesConfig['data']>;
|
|
30
|
+
/**
|
|
31
|
+
* Bounds computed from the original (unsampled) data. Used for axis auto-bounds so sampling
|
|
32
|
+
* cannot clip outliers.
|
|
33
|
+
*/
|
|
34
|
+
readonly rawBounds?: RawBounds;
|
|
35
|
+
}>;
|
|
36
|
+
export type ResolvedAreaSeriesConfig = Readonly<Omit<AreaSeriesConfig, 'color' | 'areaStyle' | 'sampling' | 'samplingThreshold' | 'data'> & {
|
|
37
|
+
readonly color: string;
|
|
38
|
+
readonly areaStyle: ResolvedAreaStyleConfig;
|
|
39
|
+
readonly sampling: SeriesSampling;
|
|
40
|
+
readonly samplingThreshold: number;
|
|
41
|
+
/** Original (unsampled) series data (see `ResolvedLineSeriesConfig.rawData`). */
|
|
42
|
+
readonly rawData: Readonly<AreaSeriesConfig['data']>;
|
|
43
|
+
readonly data: Readonly<AreaSeriesConfig['data']>;
|
|
44
|
+
/**
|
|
45
|
+
* Bounds computed from the original (unsampled) data. Used for axis auto-bounds so sampling
|
|
46
|
+
* cannot clip outliers.
|
|
47
|
+
*/
|
|
48
|
+
readonly rawBounds?: RawBounds;
|
|
49
|
+
}>;
|
|
50
|
+
export type ResolvedBarSeriesConfig = Readonly<Omit<BarSeriesConfig, 'color' | 'sampling' | 'samplingThreshold' | 'data'> & {
|
|
51
|
+
readonly color: string;
|
|
52
|
+
readonly sampling: SeriesSampling;
|
|
53
|
+
readonly samplingThreshold: number;
|
|
54
|
+
/** Original (unsampled) series data (see `ResolvedLineSeriesConfig.rawData`). */
|
|
55
|
+
readonly rawData: Readonly<BarSeriesConfig['data']>;
|
|
56
|
+
readonly data: Readonly<BarSeriesConfig['data']>;
|
|
57
|
+
/**
|
|
58
|
+
* Bounds computed from the original (unsampled) data. Used for axis auto-bounds so sampling
|
|
59
|
+
* cannot clip outliers.
|
|
60
|
+
*/
|
|
61
|
+
readonly rawBounds?: RawBounds;
|
|
62
|
+
}>;
|
|
63
|
+
export type ResolvedScatterSeriesConfig = Readonly<Omit<ScatterSeriesConfig, 'color' | 'sampling' | 'samplingThreshold' | 'data'> & {
|
|
64
|
+
readonly color: string;
|
|
65
|
+
readonly sampling: SeriesSampling;
|
|
66
|
+
readonly samplingThreshold: number;
|
|
67
|
+
/** Original (unsampled) series data (see `ResolvedLineSeriesConfig.rawData`). */
|
|
68
|
+
readonly rawData: Readonly<ScatterSeriesConfig['data']>;
|
|
69
|
+
readonly data: Readonly<ScatterSeriesConfig['data']>;
|
|
70
|
+
/**
|
|
71
|
+
* Bounds computed from the original (unsampled) data. Used for axis auto-bounds so sampling
|
|
72
|
+
* cannot clip outliers.
|
|
73
|
+
*/
|
|
74
|
+
readonly rawBounds?: RawBounds;
|
|
75
|
+
}>;
|
|
76
|
+
export type ResolvedPieDataItem = Readonly<Omit<PieDataItem, 'color'> & {
|
|
77
|
+
readonly color: string;
|
|
78
|
+
}>;
|
|
79
|
+
export type ResolvedPieSeriesConfig = Readonly<Omit<PieSeriesConfig, 'color' | 'data'> & {
|
|
80
|
+
readonly color: string;
|
|
81
|
+
readonly data: ReadonlyArray<ResolvedPieDataItem>;
|
|
82
|
+
}>;
|
|
83
|
+
export type ResolvedSeriesConfig = ResolvedLineSeriesConfig | ResolvedAreaSeriesConfig | ResolvedBarSeriesConfig | ResolvedScatterSeriesConfig | ResolvedPieSeriesConfig;
|
|
84
|
+
export interface ResolvedChartGPUOptions extends Omit<ChartGPUOptions, 'grid' | 'xAxis' | 'yAxis' | 'theme' | 'palette' | 'series'> {
|
|
85
|
+
readonly grid: ResolvedGridConfig;
|
|
86
|
+
readonly xAxis: AxisConfig;
|
|
87
|
+
readonly yAxis: AxisConfig;
|
|
88
|
+
readonly autoScroll: boolean;
|
|
89
|
+
readonly theme: ThemeConfig;
|
|
90
|
+
readonly palette: ReadonlyArray<string>;
|
|
91
|
+
readonly series: ReadonlyArray<ResolvedSeriesConfig>;
|
|
92
|
+
}
|
|
93
|
+
export declare function resolveOptions(userOptions?: ChartGPUOptions): ResolvedChartGPUOptions;
|
|
94
|
+
export declare const OptionResolver: {
|
|
95
|
+
readonly resolve: typeof resolveOptions;
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=OptionResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionResolver.d.ts","sourceRoot":"","sources":["../../src/config/OptionResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const defaultGrid: {
|
|
2
|
+
readonly left: 60;
|
|
3
|
+
readonly right: 20;
|
|
4
|
+
readonly top: 40;
|
|
5
|
+
readonly bottom: 40;
|
|
6
|
+
};
|
|
7
|
+
export declare const defaultPalette: readonly ["#5470C6", "#91CC75", "#FAC858", "#EE6666", "#73C0DE", "#3BA272", "#FC8452", "#9A60B4", "#EA7CCC"];
|
|
8
|
+
export declare const defaultLineStyle: {
|
|
9
|
+
readonly width: 2;
|
|
10
|
+
readonly opacity: 1;
|
|
11
|
+
};
|
|
12
|
+
export declare const defaultAreaStyle: {
|
|
13
|
+
readonly opacity: 0.25;
|
|
14
|
+
};
|
|
15
|
+
export declare const defaultOptions: {
|
|
16
|
+
readonly grid: {
|
|
17
|
+
readonly left: 60;
|
|
18
|
+
readonly right: 20;
|
|
19
|
+
readonly top: 40;
|
|
20
|
+
readonly bottom: 40;
|
|
21
|
+
};
|
|
22
|
+
readonly xAxis: {
|
|
23
|
+
readonly type: "value";
|
|
24
|
+
};
|
|
25
|
+
readonly yAxis: {
|
|
26
|
+
readonly type: "value";
|
|
27
|
+
};
|
|
28
|
+
readonly autoScroll: false;
|
|
29
|
+
readonly theme: "dark";
|
|
30
|
+
readonly palette: readonly ["#5470C6", "#91CC75", "#FAC858", "#EE6666", "#73C0DE", "#3BA272", "#FC8452", "#9A60B4", "#EA7CCC"];
|
|
31
|
+
readonly series: readonly [];
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;CAKiB,CAAC;AAE1C,eAAO,MAAM,cAAc,8GAUjB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;CAGgC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;CAEgC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CAY1B,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart configuration types (Phase 1).
|
|
3
|
+
*/
|
|
4
|
+
import type { ThemeConfig } from '../themes/types';
|
|
5
|
+
export type AxisType = 'value' | 'time' | 'category';
|
|
6
|
+
export type SeriesType = 'line' | 'area' | 'bar' | 'scatter' | 'pie';
|
|
7
|
+
/**
|
|
8
|
+
* A single data point for a series.
|
|
9
|
+
*/
|
|
10
|
+
export type DataPointTuple = readonly [x: number, y: number, size?: number];
|
|
11
|
+
export type DataPoint = DataPointTuple | Readonly<{
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
size?: number;
|
|
15
|
+
}>;
|
|
16
|
+
export type SeriesSampling = 'none' | 'lttb' | 'average' | 'max' | 'min';
|
|
17
|
+
/**
|
|
18
|
+
* Scatter points use the tuple form `[x, y, size?]`.
|
|
19
|
+
*/
|
|
20
|
+
export type ScatterPointTuple = DataPointTuple;
|
|
21
|
+
export type ScatterSymbol = 'circle' | 'rect' | 'triangle';
|
|
22
|
+
/**
|
|
23
|
+
* Grid/padding around the plot area, in CSS pixels.
|
|
24
|
+
*/
|
|
25
|
+
export interface GridConfig {
|
|
26
|
+
readonly left?: number;
|
|
27
|
+
readonly right?: number;
|
|
28
|
+
readonly top?: number;
|
|
29
|
+
readonly bottom?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface AxisConfig {
|
|
32
|
+
readonly type: AxisType;
|
|
33
|
+
readonly min?: number;
|
|
34
|
+
readonly max?: number;
|
|
35
|
+
/** Tick length in CSS pixels (default: 6). */
|
|
36
|
+
readonly tickLength?: number;
|
|
37
|
+
readonly name?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface DataZoomConfig {
|
|
40
|
+
readonly type: 'inside' | 'slider';
|
|
41
|
+
readonly xAxisIndex?: number;
|
|
42
|
+
/** Start percent in [0, 100]. */
|
|
43
|
+
readonly start?: number;
|
|
44
|
+
/** End percent in [0, 100]. */
|
|
45
|
+
readonly end?: number;
|
|
46
|
+
readonly minSpan?: number;
|
|
47
|
+
readonly maxSpan?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface LineStyleConfig {
|
|
50
|
+
readonly width?: number;
|
|
51
|
+
readonly opacity?: number;
|
|
52
|
+
readonly color?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface AreaStyleConfig {
|
|
55
|
+
readonly opacity?: number;
|
|
56
|
+
readonly color?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface SeriesConfigBase {
|
|
59
|
+
readonly name?: string;
|
|
60
|
+
readonly data: ReadonlyArray<DataPoint>;
|
|
61
|
+
readonly color?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Optional per-series sampling strategy for large datasets.
|
|
64
|
+
*
|
|
65
|
+
* When `sampling !== 'none'` and `data.length > samplingThreshold`, ChartGPU may downsample
|
|
66
|
+
* the series for rendering and interaction hit-testing. Sampling does not affect axis
|
|
67
|
+
* auto-bounds derivation (bounds use raw/unsampled series data).
|
|
68
|
+
*/
|
|
69
|
+
readonly sampling?: SeriesSampling;
|
|
70
|
+
/**
|
|
71
|
+
* Auto-sample when point count exceeds this threshold.
|
|
72
|
+
*
|
|
73
|
+
* Note: when `sampling === 'none'`, this value is ignored at runtime but may still be provided.
|
|
74
|
+
*/
|
|
75
|
+
readonly samplingThreshold?: number;
|
|
76
|
+
}
|
|
77
|
+
export interface LineSeriesConfig extends SeriesConfigBase {
|
|
78
|
+
readonly type: 'line';
|
|
79
|
+
readonly lineStyle?: LineStyleConfig;
|
|
80
|
+
/**
|
|
81
|
+
* Optional filled-area styling for a line series.
|
|
82
|
+
* When provided, renderers may choose to render a filled area under the line.
|
|
83
|
+
*/
|
|
84
|
+
readonly areaStyle?: AreaStyleConfig;
|
|
85
|
+
}
|
|
86
|
+
export interface AreaSeriesConfig extends SeriesConfigBase {
|
|
87
|
+
readonly type: 'area';
|
|
88
|
+
/**
|
|
89
|
+
* Baseline in data-space used as the filled area floor.
|
|
90
|
+
* If omitted, ChartGPU will default to the y-axis minimum.
|
|
91
|
+
*/
|
|
92
|
+
readonly baseline?: number;
|
|
93
|
+
readonly areaStyle?: AreaStyleConfig;
|
|
94
|
+
}
|
|
95
|
+
export interface BarItemStyleConfig {
|
|
96
|
+
readonly borderRadius?: number;
|
|
97
|
+
readonly borderWidth?: number;
|
|
98
|
+
readonly borderColor?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface BarSeriesConfig extends SeriesConfigBase {
|
|
101
|
+
readonly type: 'bar';
|
|
102
|
+
/**
|
|
103
|
+
* Bar width in CSS pixels, or as a percentage of the category width (e.g. '50%').
|
|
104
|
+
*/
|
|
105
|
+
readonly barWidth?: number | string;
|
|
106
|
+
/**
|
|
107
|
+
* Gap between bars in the same category, as a ratio in [0, 1].
|
|
108
|
+
*/
|
|
109
|
+
readonly barGap?: number;
|
|
110
|
+
/**
|
|
111
|
+
* Gap between categories, as a ratio in [0, 1].
|
|
112
|
+
*/
|
|
113
|
+
readonly barCategoryGap?: number;
|
|
114
|
+
/** Stack group id. Bars with the same id may be stacked. */
|
|
115
|
+
readonly stack?: string;
|
|
116
|
+
readonly itemStyle?: BarItemStyleConfig;
|
|
117
|
+
}
|
|
118
|
+
export interface ScatterSeriesConfig extends SeriesConfigBase {
|
|
119
|
+
readonly type: 'scatter';
|
|
120
|
+
/**
|
|
121
|
+
* Scatter symbol size in CSS pixels. When a function is provided, it receives
|
|
122
|
+
* the point tuple `[x, y, size?]`.
|
|
123
|
+
*/
|
|
124
|
+
readonly symbolSize?: number | ((value: ScatterPointTuple) => number);
|
|
125
|
+
readonly symbol?: ScatterSymbol;
|
|
126
|
+
}
|
|
127
|
+
export type PieDataItem = Readonly<{
|
|
128
|
+
value: number;
|
|
129
|
+
name: string;
|
|
130
|
+
color?: string;
|
|
131
|
+
}>;
|
|
132
|
+
export interface PieItemStyleConfig {
|
|
133
|
+
readonly borderRadius?: number;
|
|
134
|
+
readonly borderWidth?: number;
|
|
135
|
+
}
|
|
136
|
+
export type PieRadius = number | string | readonly [inner: number | string, outer: number | string];
|
|
137
|
+
export type PieCenter = readonly [x: number | string, y: number | string];
|
|
138
|
+
export interface PieSeriesConfig extends Omit<SeriesConfigBase, 'data' | 'sampling' | 'samplingThreshold'> {
|
|
139
|
+
readonly type: 'pie';
|
|
140
|
+
/**
|
|
141
|
+
* Radius in CSS pixels, as a percent string (e.g. '50%'), or a tuple [inner, outer].
|
|
142
|
+
* When inner > 0, the series renders as a donut.
|
|
143
|
+
*/
|
|
144
|
+
readonly radius?: PieRadius;
|
|
145
|
+
/**
|
|
146
|
+
* Center position as [x, y] in CSS pixels or percent strings.
|
|
147
|
+
*/
|
|
148
|
+
readonly center?: PieCenter;
|
|
149
|
+
/**
|
|
150
|
+
* Start angle in degrees (default: 90 = top).
|
|
151
|
+
*/
|
|
152
|
+
readonly startAngle?: number;
|
|
153
|
+
readonly data: ReadonlyArray<PieDataItem>;
|
|
154
|
+
readonly itemStyle?: PieItemStyleConfig;
|
|
155
|
+
}
|
|
156
|
+
export type SeriesConfig = LineSeriesConfig | AreaSeriesConfig | BarSeriesConfig | ScatterSeriesConfig | PieSeriesConfig;
|
|
157
|
+
/**
|
|
158
|
+
* Parameters passed to tooltip formatter function.
|
|
159
|
+
*/
|
|
160
|
+
export interface TooltipParams {
|
|
161
|
+
readonly seriesName: string;
|
|
162
|
+
readonly seriesIndex: number;
|
|
163
|
+
readonly dataIndex: number;
|
|
164
|
+
readonly value: [number, number];
|
|
165
|
+
readonly color: string;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Tooltip configuration.
|
|
169
|
+
*/
|
|
170
|
+
export interface TooltipConfig {
|
|
171
|
+
readonly show?: boolean;
|
|
172
|
+
readonly trigger?: 'item' | 'axis';
|
|
173
|
+
/**
|
|
174
|
+
* Custom formatter function for tooltip content.
|
|
175
|
+
* When trigger is 'item', receives a single TooltipParams.
|
|
176
|
+
* When trigger is 'axis', receives an array of TooltipParams.
|
|
177
|
+
* When trigger is undefined, formatter should handle both signatures.
|
|
178
|
+
*/
|
|
179
|
+
readonly formatter?: ((params: TooltipParams) => string) | ((params: ReadonlyArray<TooltipParams>) => string);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Animation configuration for transitions (type definitions only).
|
|
183
|
+
*
|
|
184
|
+
* - `duration` is in milliseconds (default: 300).
|
|
185
|
+
* - Set `ChartGPUOptions.animation = false` to disable all animation.
|
|
186
|
+
*/
|
|
187
|
+
export interface AnimationConfig {
|
|
188
|
+
/** Animation duration in ms (default: 300). */
|
|
189
|
+
readonly duration?: number;
|
|
190
|
+
readonly easing?: 'linear' | 'cubicOut' | 'cubicInOut' | 'bounceOut';
|
|
191
|
+
/** Animation delay in ms. */
|
|
192
|
+
readonly delay?: number;
|
|
193
|
+
}
|
|
194
|
+
export interface ChartGPUOptions {
|
|
195
|
+
readonly grid?: GridConfig;
|
|
196
|
+
readonly xAxis?: AxisConfig;
|
|
197
|
+
readonly yAxis?: AxisConfig;
|
|
198
|
+
readonly dataZoom?: ReadonlyArray<DataZoomConfig>;
|
|
199
|
+
readonly series?: ReadonlyArray<SeriesConfig>;
|
|
200
|
+
/**
|
|
201
|
+
* When true, the chart may automatically keep the view anchored to the latest data while streaming.
|
|
202
|
+
* Default: false.
|
|
203
|
+
*/
|
|
204
|
+
readonly autoScroll?: boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Chart theme used for styling and palette defaults.
|
|
207
|
+
* Accepts a built-in theme name or a custom ThemeConfig override.
|
|
208
|
+
*/
|
|
209
|
+
readonly theme?: 'dark' | 'light' | ThemeConfig;
|
|
210
|
+
/**
|
|
211
|
+
* Color palette used for series color assignment when a series does not
|
|
212
|
+
* explicitly specify `color`. Colors should be valid CSS color strings.
|
|
213
|
+
*/
|
|
214
|
+
readonly palette?: ReadonlyArray<string>;
|
|
215
|
+
readonly tooltip?: TooltipConfig;
|
|
216
|
+
/**
|
|
217
|
+
* Animation configuration for transitions.
|
|
218
|
+
*
|
|
219
|
+
* - `false` disables all animation.
|
|
220
|
+
* - `true` enables animation with defaults.
|
|
221
|
+
*/
|
|
222
|
+
readonly animation?: AnimationConfig | boolean;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|