@ggterm/core 0.2.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/dist/annotations.d.ts +79 -0
- package/dist/annotations.d.ts.map +1 -0
- package/dist/canvas/canvas.d.ts.map +1 -0
- package/dist/canvas/index.d.ts.map +1 -0
- package/dist/cli-plot.d.ts +14 -0
- package/dist/cli-plot.d.ts.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6485 -0
- package/dist/coords/cartesian.d.ts +96 -0
- package/dist/coords/cartesian.d.ts.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/export/index.d.ts +6 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/vega-lite.d.ts +87 -0
- package/dist/export/vega-lite.d.ts.map +1 -0
- package/dist/facets/index.d.ts +168 -0
- package/dist/facets/index.d.ts.map +1 -0
- package/dist/geoms/area.d.ts.map +1 -0
- package/dist/geoms/bar.d.ts +38 -0
- package/dist/geoms/bar.d.ts.map +1 -0
- package/dist/geoms/boxplot.d.ts.map +1 -0
- package/dist/geoms/contour.d.ts +33 -0
- package/dist/geoms/contour.d.ts.map +1 -0
- package/dist/geoms/errorbar.d.ts +41 -0
- package/dist/geoms/errorbar.d.ts.map +1 -0
- package/dist/geoms/histogram.d.ts +62 -0
- package/dist/geoms/histogram.d.ts.map +1 -0
- package/dist/geoms/index.d.ts +22 -0
- package/dist/geoms/index.d.ts.map +1 -0
- package/dist/geoms/line.d.ts.map +1 -0
- package/dist/geoms/path.d.ts +59 -0
- package/dist/geoms/path.d.ts.map +1 -0
- package/dist/geoms/point.d.ts +30 -0
- package/dist/geoms/point.d.ts.map +1 -0
- package/dist/geoms/qq.d.ts +75 -0
- package/dist/geoms/qq.d.ts.map +1 -0
- package/dist/geoms/rect.d.ts +37 -0
- package/dist/geoms/rect.d.ts.map +1 -0
- package/dist/geoms/rug.d.ts +65 -0
- package/dist/geoms/rug.d.ts.map +1 -0
- package/dist/geoms/segment.d.ts.map +1 -0
- package/dist/geoms/smooth.d.ts +51 -0
- package/dist/geoms/smooth.d.ts.map +1 -0
- package/dist/geoms/step.d.ts +43 -0
- package/dist/geoms/step.d.ts.map +1 -0
- package/dist/geoms/text.d.ts +23 -0
- package/dist/geoms/text.d.ts.map +1 -0
- package/dist/geoms/tile.d.ts +27 -0
- package/dist/geoms/tile.d.ts.map +1 -0
- package/dist/geoms/violin.d.ts +29 -0
- package/dist/geoms/violin.d.ts.map +1 -0
- package/dist/grammar.d.ts +81 -0
- package/dist/grammar.d.ts.map +1 -0
- package/dist/history/index.d.ts +75 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9168 -0
- package/dist/performance/binning.d.ts +112 -0
- package/dist/performance/binning.d.ts.map +1 -0
- package/dist/performance/canvas-diff.d.ts +107 -0
- package/dist/performance/canvas-diff.d.ts.map +1 -0
- package/dist/performance/index.d.ts +14 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/level-of-detail.d.ts +98 -0
- package/dist/performance/level-of-detail.d.ts.map +1 -0
- package/dist/performance/sampling.d.ts +86 -0
- package/dist/performance/sampling.d.ts.map +1 -0
- package/dist/pipeline/index.d.ts +11 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/render-axes.d.ts +94 -0
- package/dist/pipeline/render-axes.d.ts.map +1 -0
- package/dist/pipeline/render-geoms.d.ts +121 -0
- package/dist/pipeline/render-geoms.d.ts.map +1 -0
- package/dist/pipeline/scales.d.ts +151 -0
- package/dist/pipeline/scales.d.ts.map +1 -0
- package/dist/positions/index.d.ts +141 -0
- package/dist/positions/index.d.ts.map +1 -0
- package/dist/repl/index.d.ts +6 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/repl.d.ts +161 -0
- package/dist/repl/repl.d.ts.map +1 -0
- package/dist/scales/alpha.d.ts +57 -0
- package/dist/scales/alpha.d.ts.map +1 -0
- package/dist/scales/color.d.ts +260 -0
- package/dist/scales/color.d.ts.map +1 -0
- package/dist/scales/continuous.d.ts +60 -0
- package/dist/scales/continuous.d.ts.map +1 -0
- package/dist/scales/datetime.d.ts +60 -0
- package/dist/scales/datetime.d.ts.map +1 -0
- package/dist/scales/discrete.d.ts +36 -0
- package/dist/scales/discrete.d.ts.map +1 -0
- package/dist/scales/index.d.ts +11 -0
- package/dist/scales/index.d.ts.map +1 -0
- package/dist/scales/shape.d.ts +43 -0
- package/dist/scales/shape.d.ts.map +1 -0
- package/dist/scales/size.d.ts +43 -0
- package/dist/scales/size.d.ts.map +1 -0
- package/dist/stats/bin.d.ts.map +1 -0
- package/dist/stats/boxplot.d.ts.map +1 -0
- package/dist/stats/count.d.ts +21 -0
- package/dist/stats/count.d.ts.map +1 -0
- package/dist/stats/density.d.ts +36 -0
- package/dist/stats/density.d.ts.map +1 -0
- package/dist/stats/index.d.ts +18 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/qq.d.ts +47 -0
- package/dist/stats/qq.d.ts.map +1 -0
- package/dist/stats/smooth.d.ts.map +1 -0
- package/dist/stats/summary.d.ts.map +1 -0
- package/dist/streaming/data-buffer.d.ts +121 -0
- package/dist/streaming/data-buffer.d.ts.map +1 -0
- package/dist/streaming/data-window.d.ts +133 -0
- package/dist/streaming/data-window.d.ts.map +1 -0
- package/dist/streaming/index.d.ts +14 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/rolling-aggregator.d.ts +116 -0
- package/dist/streaming/rolling-aggregator.d.ts.map +1 -0
- package/dist/streaming/streaming-plot.d.ts +194 -0
- package/dist/streaming/streaming-plot.d.ts.map +1 -0
- package/dist/terminal/capabilities.d.ts +89 -0
- package/dist/terminal/capabilities.d.ts.map +1 -0
- package/dist/terminal/colors.d.ts +82 -0
- package/dist/terminal/colors.d.ts.map +1 -0
- package/dist/terminal/index.d.ts +12 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/renderer-chain.d.ts +110 -0
- package/dist/terminal/renderer-chain.d.ts.map +1 -0
- package/dist/themes/default.d.ts.map +1 -0
- package/dist/types.d.ts +198 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Binning
|
|
3
|
+
*
|
|
4
|
+
* Aggregate points into bins for efficient visualization of dense data.
|
|
5
|
+
* Supports hexagonal and rectangular binning.
|
|
6
|
+
*/
|
|
7
|
+
import type { DataRecord, RGBA } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Bin options
|
|
10
|
+
*/
|
|
11
|
+
export interface BinOptions {
|
|
12
|
+
/** X field in data */
|
|
13
|
+
xField: string;
|
|
14
|
+
/** Y field in data */
|
|
15
|
+
yField: string;
|
|
16
|
+
/** Number of bins in X direction */
|
|
17
|
+
xBins?: number;
|
|
18
|
+
/** Number of bins in Y direction */
|
|
19
|
+
yBins?: number;
|
|
20
|
+
/** Bin size (alternative to xBins/yBins) */
|
|
21
|
+
binSize?: number;
|
|
22
|
+
/** X domain (auto-computed if not provided) */
|
|
23
|
+
xDomain?: [number, number];
|
|
24
|
+
/** Y domain (auto-computed if not provided) */
|
|
25
|
+
yDomain?: [number, number];
|
|
26
|
+
/** Aggregation function for values */
|
|
27
|
+
aggregate?: 'count' | 'sum' | 'mean' | 'median' | 'min' | 'max';
|
|
28
|
+
/** Field to aggregate (for non-count aggregations) */
|
|
29
|
+
valueField?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Rectangular bin result
|
|
33
|
+
*/
|
|
34
|
+
export interface Bin {
|
|
35
|
+
/** Bin center X */
|
|
36
|
+
x: number;
|
|
37
|
+
/** Bin center Y */
|
|
38
|
+
y: number;
|
|
39
|
+
/** Bin count */
|
|
40
|
+
count: number;
|
|
41
|
+
/** Aggregated value */
|
|
42
|
+
value: number;
|
|
43
|
+
/** Bin width */
|
|
44
|
+
width: number;
|
|
45
|
+
/** Bin height */
|
|
46
|
+
height: number;
|
|
47
|
+
/** Original points in this bin */
|
|
48
|
+
points: DataRecord[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Hexagonal bin result
|
|
52
|
+
*/
|
|
53
|
+
export interface HexBin extends Bin {
|
|
54
|
+
/** Hexagon vertices */
|
|
55
|
+
vertices: Array<{
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
}>;
|
|
59
|
+
/** Column index */
|
|
60
|
+
col: number;
|
|
61
|
+
/** Row index */
|
|
62
|
+
row: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Rectangular binning
|
|
66
|
+
*/
|
|
67
|
+
export declare function rectbin<T extends DataRecord>(data: T[], options: BinOptions): Bin[];
|
|
68
|
+
/**
|
|
69
|
+
* Hexagonal binning
|
|
70
|
+
* Uses offset coordinate system for hex grid
|
|
71
|
+
*/
|
|
72
|
+
export declare function hexbin<T extends DataRecord>(data: T[], options: BinOptions & {
|
|
73
|
+
radius?: number;
|
|
74
|
+
}): HexBin[];
|
|
75
|
+
/**
|
|
76
|
+
* Binner class for reusable binning configuration
|
|
77
|
+
*/
|
|
78
|
+
export declare class Binner<T extends DataRecord = DataRecord> {
|
|
79
|
+
private options;
|
|
80
|
+
private type;
|
|
81
|
+
private hexRadius;
|
|
82
|
+
constructor(options: BinOptions & {
|
|
83
|
+
type?: 'rect' | 'hex';
|
|
84
|
+
hexRadius?: number;
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Bin the data
|
|
88
|
+
*/
|
|
89
|
+
bin(data: T[]): Bin[] | HexBin[];
|
|
90
|
+
/**
|
|
91
|
+
* Get bin data ready for plotting
|
|
92
|
+
*/
|
|
93
|
+
toPlotData(data: T[]): Array<{
|
|
94
|
+
x: number;
|
|
95
|
+
y: number;
|
|
96
|
+
count: number;
|
|
97
|
+
value: number;
|
|
98
|
+
size: number;
|
|
99
|
+
}>;
|
|
100
|
+
/**
|
|
101
|
+
* Generate a density color scale
|
|
102
|
+
*/
|
|
103
|
+
getDensityColors(bins: Bin[], colorScale: (t: number) => RGBA): Map<Bin, RGBA>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a binner
|
|
107
|
+
*/
|
|
108
|
+
export declare function createBinner<T extends DataRecord = DataRecord>(options: BinOptions & {
|
|
109
|
+
type?: 'rect' | 'hex';
|
|
110
|
+
hexRadius?: number;
|
|
111
|
+
}): Binner<T>;
|
|
112
|
+
//# sourceMappingURL=binning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binning.d.ts","sourceRoot":"","sources":["../../src/performance/binning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas Diffing
|
|
3
|
+
*
|
|
4
|
+
* Efficient incremental rendering by computing and applying only changes.
|
|
5
|
+
* Useful for streaming updates where most of the canvas stays the same.
|
|
6
|
+
*/
|
|
7
|
+
import type { Canvas, CanvasCell } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Diff options
|
|
10
|
+
*/
|
|
11
|
+
export interface DiffOptions {
|
|
12
|
+
/** Compare colors with tolerance for minor variations */
|
|
13
|
+
colorTolerance?: number;
|
|
14
|
+
/** Only diff within a specific region */
|
|
15
|
+
region?: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
/** Track cell-level changes vs region-level */
|
|
22
|
+
granularity?: 'cell' | 'region';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Single cell change
|
|
26
|
+
*/
|
|
27
|
+
export interface CellChange {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
old: CanvasCell;
|
|
31
|
+
new: CanvasCell;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Region change (group of cells)
|
|
35
|
+
*/
|
|
36
|
+
export interface RegionChange {
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
cells: CellChange[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Diff result
|
|
45
|
+
*/
|
|
46
|
+
export interface DiffResult {
|
|
47
|
+
/** Whether there are any changes */
|
|
48
|
+
hasChanges: boolean;
|
|
49
|
+
/** Number of changed cells */
|
|
50
|
+
changedCells: number;
|
|
51
|
+
/** Total cells compared */
|
|
52
|
+
totalCells: number;
|
|
53
|
+
/** Change percentage */
|
|
54
|
+
changePercent: number;
|
|
55
|
+
/** Individual cell changes (if granularity is 'cell') */
|
|
56
|
+
cellChanges?: CellChange[];
|
|
57
|
+
/** Region changes (if granularity is 'region') */
|
|
58
|
+
regionChanges?: RegionChange[];
|
|
59
|
+
/** ANSI escape sequences to update only changed cells */
|
|
60
|
+
patchSequence?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Canvas Diff class
|
|
64
|
+
*/
|
|
65
|
+
export declare class CanvasDiff {
|
|
66
|
+
private previousCanvas;
|
|
67
|
+
private options;
|
|
68
|
+
constructor(options?: DiffOptions);
|
|
69
|
+
/**
|
|
70
|
+
* Compute diff between previous and current canvas
|
|
71
|
+
*/
|
|
72
|
+
diff(canvas: Canvas): DiffResult;
|
|
73
|
+
/**
|
|
74
|
+
* Generate ANSI patch sequence for cell changes
|
|
75
|
+
*/
|
|
76
|
+
private generatePatch;
|
|
77
|
+
/**
|
|
78
|
+
* Group cell changes into contiguous regions
|
|
79
|
+
*/
|
|
80
|
+
private groupIntoRegions;
|
|
81
|
+
/**
|
|
82
|
+
* Save canvas state for next comparison
|
|
83
|
+
*/
|
|
84
|
+
private saveCanvas;
|
|
85
|
+
/**
|
|
86
|
+
* Reset diff state (forces full render on next diff)
|
|
87
|
+
*/
|
|
88
|
+
reset(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Check if full render is needed (no previous state)
|
|
91
|
+
*/
|
|
92
|
+
needsFullRender(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Apply patch to terminal output
|
|
95
|
+
* Returns the patched output or indicates full render needed
|
|
96
|
+
*/
|
|
97
|
+
applyPatch(currentOutput: string, diff: DiffResult): string | null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a canvas diff instance
|
|
101
|
+
*/
|
|
102
|
+
export declare function createCanvasDiff(options?: DiffOptions): CanvasDiff;
|
|
103
|
+
/**
|
|
104
|
+
* Quick diff check between two canvases
|
|
105
|
+
*/
|
|
106
|
+
export declare function quickDiff(oldCanvas: Canvas, newCanvas: Canvas): boolean;
|
|
107
|
+
//# sourceMappingURL=canvas-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-diff.d.ts","sourceRoot":"","sources":["../../src/performance/canvas-diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAQ,MAAM,UAAU,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yCAAyC;IACzC,MAAM,CAAC,EAAE;QACP,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;QACT,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,UAAU,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAA;IACnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAgED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,GAAE,WAAgB;IAQrC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IA2DhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACH,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;CAanE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAgBvE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Optimizations
|
|
3
|
+
*
|
|
4
|
+
* Tools for handling large datasets efficiently:
|
|
5
|
+
* - Level-of-detail rendering
|
|
6
|
+
* - Data sampling (systematic, random, reservoir)
|
|
7
|
+
* - Automatic binning (hexbin, rectangular)
|
|
8
|
+
* - Canvas diffing for incremental updates
|
|
9
|
+
*/
|
|
10
|
+
export { DataSampler, createSampler, systematicSample, randomSample, reservoirSample, stratifiedSample, lttbSample, autoSample, type SamplingOptions, type SamplingMethod, } from './sampling';
|
|
11
|
+
export { LevelOfDetail, createLOD, DEFAULT_LOD_LEVELS, type LODLevel, type LODOptions, } from './level-of-detail';
|
|
12
|
+
export { Binner, createBinner, hexbin, rectbin, type BinOptions, type Bin, type HexBin, } from './binning';
|
|
13
|
+
export { CanvasDiff, createCanvasDiff, quickDiff, type DiffResult, type DiffOptions, } from './canvas-diff';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,OAAO,EACP,KAAK,UAAU,EACf,KAAK,GAAG,EACR,KAAK,MAAM,GACZ,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Level of Detail (LOD)
|
|
3
|
+
*
|
|
4
|
+
* Progressive rendering based on data density and viewport.
|
|
5
|
+
* Automatically adjusts detail level for performance.
|
|
6
|
+
*/
|
|
7
|
+
import type { DataRecord } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* LOD level definition
|
|
10
|
+
*/
|
|
11
|
+
export interface LODLevel {
|
|
12
|
+
/** Name of this level */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Maximum points at this level */
|
|
15
|
+
maxPoints: number;
|
|
16
|
+
/** Minimum data size to trigger this level */
|
|
17
|
+
threshold: number;
|
|
18
|
+
/** Sampling method for this level */
|
|
19
|
+
samplingMethod?: 'systematic' | 'lttb' | 'binned';
|
|
20
|
+
/** Optional binning resolution */
|
|
21
|
+
binResolution?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* LOD configuration options
|
|
25
|
+
*/
|
|
26
|
+
export interface LODOptions {
|
|
27
|
+
/** LOD levels (sorted by threshold ascending) */
|
|
28
|
+
levels: LODLevel[];
|
|
29
|
+
/** X field for LTTB sampling */
|
|
30
|
+
xField?: string;
|
|
31
|
+
/** Y field for LTTB sampling */
|
|
32
|
+
yField?: string;
|
|
33
|
+
/** Enable automatic level selection */
|
|
34
|
+
autoSelect?: boolean;
|
|
35
|
+
/** Target render time in ms (for auto-adjustment) */
|
|
36
|
+
targetRenderMs?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Default LOD levels for common use cases
|
|
40
|
+
*/
|
|
41
|
+
export declare const DEFAULT_LOD_LEVELS: LODLevel[];
|
|
42
|
+
/**
|
|
43
|
+
* Level of Detail manager
|
|
44
|
+
*/
|
|
45
|
+
export declare class LevelOfDetail<T extends DataRecord = DataRecord> {
|
|
46
|
+
private options;
|
|
47
|
+
private currentLevel;
|
|
48
|
+
private lastRenderMs;
|
|
49
|
+
private adaptiveMaxPoints;
|
|
50
|
+
constructor(options: LODOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Select appropriate LOD level for data size
|
|
53
|
+
*/
|
|
54
|
+
selectLevel(dataSize: number): LODLevel;
|
|
55
|
+
/**
|
|
56
|
+
* Process data with automatic LOD selection
|
|
57
|
+
*/
|
|
58
|
+
process(data: T[]): T[];
|
|
59
|
+
/**
|
|
60
|
+
* Apply a specific LOD level to data
|
|
61
|
+
*/
|
|
62
|
+
applyLevel(data: T[], level: LODLevel): T[];
|
|
63
|
+
/**
|
|
64
|
+
* Update render timing for adaptive LOD
|
|
65
|
+
*/
|
|
66
|
+
updateRenderTime(renderMs: number): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get current LOD level
|
|
69
|
+
*/
|
|
70
|
+
getCurrentLevel(): LODLevel;
|
|
71
|
+
/**
|
|
72
|
+
* Get all LOD levels
|
|
73
|
+
*/
|
|
74
|
+
getLevels(): LODLevel[];
|
|
75
|
+
/**
|
|
76
|
+
* Force a specific LOD level by name
|
|
77
|
+
*/
|
|
78
|
+
setLevel(name: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Get LOD statistics
|
|
81
|
+
*/
|
|
82
|
+
getStats(): {
|
|
83
|
+
currentLevel: string;
|
|
84
|
+
maxPoints: number;
|
|
85
|
+
adaptiveMaxPoints: number;
|
|
86
|
+
lastRenderMs: number;
|
|
87
|
+
targetRenderMs: number;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Process with adaptive point limit
|
|
91
|
+
*/
|
|
92
|
+
processAdaptive(data: T[]): T[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a Level of Detail manager
|
|
96
|
+
*/
|
|
97
|
+
export declare function createLOD<T extends DataRecord = DataRecord>(options?: Partial<LODOptions>): LevelOfDetail<T>;
|
|
98
|
+
//# sourceMappingURL=level-of-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-of-detail.d.ts","sourceRoot":"","sources":["../../src/performance/level-of-detail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,cAAc,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAA;IACjD,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAMxC,CAAA;AA2ED;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC1D,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,iBAAiB,CAAQ;gBAErB,OAAO,EAAE,UAAU;IAe/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAcvC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IASvB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE;IAyB3C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBxC;;OAEG;IACH,eAAe,IAAI,QAAQ;IAI3B;;OAEG;IACH,SAAS,IAAI,QAAQ,EAAE;IAIvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAU/B;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAA;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,iBAAiB,EAAE,MAAM,CAAA;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;KACvB;IAUD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;CAOhC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACzD,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,aAAa,CAAC,CAAC,CAAC,CAQlB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Sampling
|
|
3
|
+
*
|
|
4
|
+
* Efficient sampling strategies for large datasets.
|
|
5
|
+
* Reduces data size while preserving statistical properties.
|
|
6
|
+
*/
|
|
7
|
+
import type { DataRecord } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Sampling method types
|
|
10
|
+
*/
|
|
11
|
+
export type SamplingMethod = 'systematic' | 'random' | 'reservoir' | 'stratified' | 'lttb';
|
|
12
|
+
/**
|
|
13
|
+
* Sampling options
|
|
14
|
+
*/
|
|
15
|
+
export interface SamplingOptions {
|
|
16
|
+
/** Sampling method */
|
|
17
|
+
method: SamplingMethod;
|
|
18
|
+
/** Target number of samples */
|
|
19
|
+
targetSize: number;
|
|
20
|
+
/** Field for stratified sampling */
|
|
21
|
+
stratifyField?: string;
|
|
22
|
+
/** X field for LTTB (Largest Triangle Three Buckets) */
|
|
23
|
+
xField?: string;
|
|
24
|
+
/** Y field for LTTB */
|
|
25
|
+
yField?: string;
|
|
26
|
+
/** Random seed for reproducibility */
|
|
27
|
+
seed?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Systematic sampling - every nth item
|
|
31
|
+
* Preserves order and distribution across the dataset
|
|
32
|
+
*/
|
|
33
|
+
export declare function systematicSample<T>(data: T[], targetSize: number): T[];
|
|
34
|
+
/**
|
|
35
|
+
* Random sampling - uniformly random selection
|
|
36
|
+
* May miss local patterns but gives unbiased representation
|
|
37
|
+
*/
|
|
38
|
+
export declare function randomSample<T>(data: T[], targetSize: number, seed?: number): T[];
|
|
39
|
+
/**
|
|
40
|
+
* Reservoir sampling - streaming random sample
|
|
41
|
+
* Useful when you don't know the total size upfront
|
|
42
|
+
*/
|
|
43
|
+
export declare function reservoirSample<T>(data: T[], targetSize: number, seed?: number): T[];
|
|
44
|
+
/**
|
|
45
|
+
* Stratified sampling - proportional sampling from groups
|
|
46
|
+
* Ensures representation of all categories
|
|
47
|
+
*/
|
|
48
|
+
export declare function stratifiedSample<T extends DataRecord>(data: T[], targetSize: number, stratifyField: string, seed?: number): T[];
|
|
49
|
+
/**
|
|
50
|
+
* LTTB (Largest Triangle Three Buckets) sampling
|
|
51
|
+
* Best for time series - preserves visual shape
|
|
52
|
+
* Based on Sveinn Steinarsson's algorithm
|
|
53
|
+
*/
|
|
54
|
+
export declare function lttbSample<T extends DataRecord>(data: T[], targetSize: number, xField: string, yField: string): T[];
|
|
55
|
+
/**
|
|
56
|
+
* Data Sampler class - configurable sampling
|
|
57
|
+
*/
|
|
58
|
+
export declare class DataSampler<T extends DataRecord = DataRecord> {
|
|
59
|
+
private options;
|
|
60
|
+
constructor(options: SamplingOptions);
|
|
61
|
+
/**
|
|
62
|
+
* Sample the data
|
|
63
|
+
*/
|
|
64
|
+
sample(data: T[]): T[];
|
|
65
|
+
/**
|
|
66
|
+
* Check if sampling is needed
|
|
67
|
+
*/
|
|
68
|
+
needsSampling(dataSize: number): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Get sampling ratio
|
|
71
|
+
*/
|
|
72
|
+
getSamplingRatio(dataSize: number): number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a data sampler
|
|
76
|
+
*/
|
|
77
|
+
export declare function createSampler<T extends DataRecord = DataRecord>(options: SamplingOptions): DataSampler<T>;
|
|
78
|
+
/**
|
|
79
|
+
* Automatically choose best sampling method based on data characteristics
|
|
80
|
+
*/
|
|
81
|
+
export declare function autoSample<T extends DataRecord>(data: T[], targetSize: number, options?: {
|
|
82
|
+
xField?: string;
|
|
83
|
+
yField?: string;
|
|
84
|
+
stratifyField?: string;
|
|
85
|
+
}): T[];
|
|
86
|
+
//# sourceMappingURL=sampling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../../src/performance/sampling.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAA;AAE1F;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAsBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAYtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAajF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAcpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EACnD,IAAI,EAAE,CAAC,EAAE,EACT,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,EAAE,CA2BL;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,UAAU,EAC7C,IAAI,EAAE,CAAC,EAAE,EACT,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,CAAC,EAAE,CAoEL;AAED;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IACxD,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IA8BtB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAI3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC7D,OAAO,EAAE,eAAe,GACvB,WAAW,CAAC,CAAC,CAAC,CAEhB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,UAAU,EAC7C,IAAI,EAAE,CAAC,EAAE,EACT,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CAClB,GACL,CAAC,EAAE,CAeL"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline exports
|
|
3
|
+
*/
|
|
4
|
+
export { renderToCanvas, renderToString, calculateLayout } from './pipeline';
|
|
5
|
+
export type { PlotLayout } from './pipeline';
|
|
6
|
+
export { buildScaleContext, createResolvedContinuousScale, createResolvedDiscreteScale, createResolvedDiscreteColorScale, createResolvedContinuousColorScale, inferContinuousDomain, inferDiscreteDomain, expandDomain, niceDomain, DEFAULT_POINT_COLOR, } from './scales';
|
|
7
|
+
export type { ResolvedScale, ResolvedColorScale, ScaleContext } from './scales';
|
|
8
|
+
export { renderGeom } from './render-geoms';
|
|
9
|
+
export { renderAxes, renderTitle, renderLegend, renderMultiLegend, calculateLegendHeight, calculateMultiLegendHeight, calculateTicks, formatTick, } from './render-axes';
|
|
10
|
+
export type { LegendEntry } from './render-axes';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,kCAAkC,EAClC,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,mBAAmB,GACpB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,cAAc,EACd,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA6C,QAAQ,EAAE,aAAa,EAAQ,MAAM,UAAU,CAAA;AACxG,OAAO,EAAE,cAAc,EAAgB,MAAM,kBAAkB,CAAA;AAgB/D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,QAAQ,EAAE;QACR,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;QACT,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,UAAU,CAAC,EAAE;QACX,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;QACT,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,GACrB,UAAU,CAgEZ;AAoHD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,GACrB,cAAc,CA8KhB;AAicD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,GACrB,MAAM,CASR"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Axis rendering for plots
|
|
3
|
+
*/
|
|
4
|
+
import type { TerminalCanvas } from '../canvas/canvas';
|
|
5
|
+
import type { Labels, RGBA, Theme } from '../types';
|
|
6
|
+
import type { ResolvedScale } from './scales';
|
|
7
|
+
/**
|
|
8
|
+
* Axis configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface AxisConfig {
|
|
11
|
+
scale: ResolvedScale;
|
|
12
|
+
position: 'bottom' | 'left' | 'top' | 'right';
|
|
13
|
+
label?: string;
|
|
14
|
+
theme: Theme;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Calculate nice tick values for a continuous scale
|
|
18
|
+
*
|
|
19
|
+
* For transformed scales (log10, sqrt, reverse), ticks are calculated
|
|
20
|
+
* in the transformed space and then inverted back to data space.
|
|
21
|
+
*/
|
|
22
|
+
export declare function calculateTicks(domain: [number, number], targetTicks?: number, transform?: (v: number) => number, invert?: (v: number) => number): number[];
|
|
23
|
+
/**
|
|
24
|
+
* Format a tick value for display
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatTick(value: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Render bottom (x) axis
|
|
29
|
+
*/
|
|
30
|
+
export declare function renderBottomAxis(canvas: TerminalCanvas, scale: ResolvedScale, y: number, xStart: number, xEnd: number, label: string | undefined, _theme: Theme): void;
|
|
31
|
+
/**
|
|
32
|
+
* Render left (y) axis
|
|
33
|
+
*/
|
|
34
|
+
export declare function renderLeftAxis(canvas: TerminalCanvas, scale: ResolvedScale, x: number, yStart: number, yEnd: number, label: string | undefined, _theme: Theme): void;
|
|
35
|
+
/**
|
|
36
|
+
* Render right (secondary y) axis
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderRightAxis(canvas: TerminalCanvas, scale: ResolvedScale, x: number, yStart: number, yEnd: number, label: string | undefined, _theme: Theme, maxWidth?: number): void;
|
|
39
|
+
/**
|
|
40
|
+
* Render all axes for a plot
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderAxes(canvas: TerminalCanvas, scales: {
|
|
43
|
+
x: ResolvedScale;
|
|
44
|
+
y: ResolvedScale;
|
|
45
|
+
y2?: ResolvedScale;
|
|
46
|
+
}, plotArea: {
|
|
47
|
+
x: number;
|
|
48
|
+
y: number;
|
|
49
|
+
width: number;
|
|
50
|
+
height: number;
|
|
51
|
+
}, labels: Labels, theme: Theme): void;
|
|
52
|
+
/**
|
|
53
|
+
* Render grid lines for the plot
|
|
54
|
+
*/
|
|
55
|
+
export declare function renderGridLines(canvas: TerminalCanvas, scales: {
|
|
56
|
+
x: ResolvedScale;
|
|
57
|
+
y: ResolvedScale;
|
|
58
|
+
}, plotArea: {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
width: number;
|
|
62
|
+
height: number;
|
|
63
|
+
}, theme: Theme): void;
|
|
64
|
+
/**
|
|
65
|
+
* Render plot title
|
|
66
|
+
*/
|
|
67
|
+
export declare function renderTitle(canvas: TerminalCanvas, title: string, width: number, theme: Theme): void;
|
|
68
|
+
/**
|
|
69
|
+
* Render legend for color aesthetic (legacy function for backward compatibility)
|
|
70
|
+
*/
|
|
71
|
+
export declare function renderLegend(canvas: TerminalCanvas, colorDomain: string[], colorMap: (value: string) => RGBA, x: number, y: number, title: string | undefined, theme: Theme, width?: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Legend entry specification for a single aesthetic
|
|
74
|
+
*/
|
|
75
|
+
export interface LegendEntry {
|
|
76
|
+
aesthetic: 'color' | 'size' | 'shape' | 'alpha';
|
|
77
|
+
type: 'discrete' | 'continuous';
|
|
78
|
+
title?: string;
|
|
79
|
+
domain: string[] | [number, number];
|
|
80
|
+
map: (value: unknown) => RGBA | number | string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calculate the height needed for a legend entry
|
|
84
|
+
*/
|
|
85
|
+
export declare function calculateLegendHeight(entry: LegendEntry): number;
|
|
86
|
+
/**
|
|
87
|
+
* Calculate total height for all legends
|
|
88
|
+
*/
|
|
89
|
+
export declare function calculateMultiLegendHeight(entries: LegendEntry[]): number;
|
|
90
|
+
/**
|
|
91
|
+
* Render multiple legend entries (for multi-aesthetic support)
|
|
92
|
+
*/
|
|
93
|
+
export declare function renderMultiLegend(canvas: TerminalCanvas, entries: LegendEntry[], x: number, y: number, theme: Theme, width?: number): void;
|
|
94
|
+
//# sourceMappingURL=render-axes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-axes.d.ts","sourceRoot":"","sources":["../../src/pipeline/render-axes.ts"],"names":[],"mappings":"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"}
|