@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.
Files changed (135) hide show
  1. package/dist/annotations.d.ts +79 -0
  2. package/dist/annotations.d.ts.map +1 -0
  3. package/dist/canvas/canvas.d.ts.map +1 -0
  4. package/dist/canvas/index.d.ts.map +1 -0
  5. package/dist/cli-plot.d.ts +14 -0
  6. package/dist/cli-plot.d.ts.map +1 -0
  7. package/dist/cli.d.ts +13 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +6485 -0
  10. package/dist/coords/cartesian.d.ts +96 -0
  11. package/dist/coords/cartesian.d.ts.map +1 -0
  12. package/dist/demo.d.ts +6 -0
  13. package/dist/demo.d.ts.map +1 -0
  14. package/dist/export/index.d.ts +6 -0
  15. package/dist/export/index.d.ts.map +1 -0
  16. package/dist/export/vega-lite.d.ts +87 -0
  17. package/dist/export/vega-lite.d.ts.map +1 -0
  18. package/dist/facets/index.d.ts +168 -0
  19. package/dist/facets/index.d.ts.map +1 -0
  20. package/dist/geoms/area.d.ts.map +1 -0
  21. package/dist/geoms/bar.d.ts +38 -0
  22. package/dist/geoms/bar.d.ts.map +1 -0
  23. package/dist/geoms/boxplot.d.ts.map +1 -0
  24. package/dist/geoms/contour.d.ts +33 -0
  25. package/dist/geoms/contour.d.ts.map +1 -0
  26. package/dist/geoms/errorbar.d.ts +41 -0
  27. package/dist/geoms/errorbar.d.ts.map +1 -0
  28. package/dist/geoms/histogram.d.ts +62 -0
  29. package/dist/geoms/histogram.d.ts.map +1 -0
  30. package/dist/geoms/index.d.ts +22 -0
  31. package/dist/geoms/index.d.ts.map +1 -0
  32. package/dist/geoms/line.d.ts.map +1 -0
  33. package/dist/geoms/path.d.ts +59 -0
  34. package/dist/geoms/path.d.ts.map +1 -0
  35. package/dist/geoms/point.d.ts +30 -0
  36. package/dist/geoms/point.d.ts.map +1 -0
  37. package/dist/geoms/qq.d.ts +75 -0
  38. package/dist/geoms/qq.d.ts.map +1 -0
  39. package/dist/geoms/rect.d.ts +37 -0
  40. package/dist/geoms/rect.d.ts.map +1 -0
  41. package/dist/geoms/rug.d.ts +65 -0
  42. package/dist/geoms/rug.d.ts.map +1 -0
  43. package/dist/geoms/segment.d.ts.map +1 -0
  44. package/dist/geoms/smooth.d.ts +51 -0
  45. package/dist/geoms/smooth.d.ts.map +1 -0
  46. package/dist/geoms/step.d.ts +43 -0
  47. package/dist/geoms/step.d.ts.map +1 -0
  48. package/dist/geoms/text.d.ts +23 -0
  49. package/dist/geoms/text.d.ts.map +1 -0
  50. package/dist/geoms/tile.d.ts +27 -0
  51. package/dist/geoms/tile.d.ts.map +1 -0
  52. package/dist/geoms/violin.d.ts +29 -0
  53. package/dist/geoms/violin.d.ts.map +1 -0
  54. package/dist/grammar.d.ts +81 -0
  55. package/dist/grammar.d.ts.map +1 -0
  56. package/dist/history/index.d.ts +75 -0
  57. package/dist/history/index.d.ts.map +1 -0
  58. package/dist/index.d.ts +37 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +9168 -0
  61. package/dist/performance/binning.d.ts +112 -0
  62. package/dist/performance/binning.d.ts.map +1 -0
  63. package/dist/performance/canvas-diff.d.ts +107 -0
  64. package/dist/performance/canvas-diff.d.ts.map +1 -0
  65. package/dist/performance/index.d.ts +14 -0
  66. package/dist/performance/index.d.ts.map +1 -0
  67. package/dist/performance/level-of-detail.d.ts +98 -0
  68. package/dist/performance/level-of-detail.d.ts.map +1 -0
  69. package/dist/performance/sampling.d.ts +86 -0
  70. package/dist/performance/sampling.d.ts.map +1 -0
  71. package/dist/pipeline/index.d.ts +11 -0
  72. package/dist/pipeline/index.d.ts.map +1 -0
  73. package/dist/pipeline/pipeline.d.ts.map +1 -0
  74. package/dist/pipeline/render-axes.d.ts +94 -0
  75. package/dist/pipeline/render-axes.d.ts.map +1 -0
  76. package/dist/pipeline/render-geoms.d.ts +121 -0
  77. package/dist/pipeline/render-geoms.d.ts.map +1 -0
  78. package/dist/pipeline/scales.d.ts +151 -0
  79. package/dist/pipeline/scales.d.ts.map +1 -0
  80. package/dist/positions/index.d.ts +141 -0
  81. package/dist/positions/index.d.ts.map +1 -0
  82. package/dist/repl/index.d.ts +6 -0
  83. package/dist/repl/index.d.ts.map +1 -0
  84. package/dist/repl/repl.d.ts +161 -0
  85. package/dist/repl/repl.d.ts.map +1 -0
  86. package/dist/scales/alpha.d.ts +57 -0
  87. package/dist/scales/alpha.d.ts.map +1 -0
  88. package/dist/scales/color.d.ts +260 -0
  89. package/dist/scales/color.d.ts.map +1 -0
  90. package/dist/scales/continuous.d.ts +60 -0
  91. package/dist/scales/continuous.d.ts.map +1 -0
  92. package/dist/scales/datetime.d.ts +60 -0
  93. package/dist/scales/datetime.d.ts.map +1 -0
  94. package/dist/scales/discrete.d.ts +36 -0
  95. package/dist/scales/discrete.d.ts.map +1 -0
  96. package/dist/scales/index.d.ts +11 -0
  97. package/dist/scales/index.d.ts.map +1 -0
  98. package/dist/scales/shape.d.ts +43 -0
  99. package/dist/scales/shape.d.ts.map +1 -0
  100. package/dist/scales/size.d.ts +43 -0
  101. package/dist/scales/size.d.ts.map +1 -0
  102. package/dist/stats/bin.d.ts.map +1 -0
  103. package/dist/stats/boxplot.d.ts.map +1 -0
  104. package/dist/stats/count.d.ts +21 -0
  105. package/dist/stats/count.d.ts.map +1 -0
  106. package/dist/stats/density.d.ts +36 -0
  107. package/dist/stats/density.d.ts.map +1 -0
  108. package/dist/stats/index.d.ts +18 -0
  109. package/dist/stats/index.d.ts.map +1 -0
  110. package/dist/stats/qq.d.ts +47 -0
  111. package/dist/stats/qq.d.ts.map +1 -0
  112. package/dist/stats/smooth.d.ts.map +1 -0
  113. package/dist/stats/summary.d.ts.map +1 -0
  114. package/dist/streaming/data-buffer.d.ts +121 -0
  115. package/dist/streaming/data-buffer.d.ts.map +1 -0
  116. package/dist/streaming/data-window.d.ts +133 -0
  117. package/dist/streaming/data-window.d.ts.map +1 -0
  118. package/dist/streaming/index.d.ts +14 -0
  119. package/dist/streaming/index.d.ts.map +1 -0
  120. package/dist/streaming/rolling-aggregator.d.ts +116 -0
  121. package/dist/streaming/rolling-aggregator.d.ts.map +1 -0
  122. package/dist/streaming/streaming-plot.d.ts +194 -0
  123. package/dist/streaming/streaming-plot.d.ts.map +1 -0
  124. package/dist/terminal/capabilities.d.ts +89 -0
  125. package/dist/terminal/capabilities.d.ts.map +1 -0
  126. package/dist/terminal/colors.d.ts +82 -0
  127. package/dist/terminal/colors.d.ts.map +1 -0
  128. package/dist/terminal/index.d.ts +12 -0
  129. package/dist/terminal/index.d.ts.map +1 -0
  130. package/dist/terminal/renderer-chain.d.ts +110 -0
  131. package/dist/terminal/renderer-chain.d.ts.map +1 -0
  132. package/dist/themes/default.d.ts.map +1 -0
  133. package/dist/types.d.ts +198 -0
  134. package/dist/types.d.ts.map +1 -0
  135. 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":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;CACb;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,WAAW,GAAE,MAAU,EACvB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACjC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAC7B,MAAM,EAAE,CAqHV;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,EACpB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,KAAK,GACZ,IAAI,CA8EN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,EACpB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,KAAK,GACZ,IAAI,CAiDN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,EACpB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,KAAK,EACb,QAAQ,GAAE,MAAU,GACnB,IAAI,CA+CN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IAAE,CAAC,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,aAAa,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,EAClE,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACjE,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACX,IAAI,CAmDN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IAAE,CAAC,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,aAAa,CAAA;CAAE,EAC9C,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACjE,KAAK,EAAE,KAAK,GACX,IAAI,CAgDN;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GACX,IAAI,CAiBN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CAgDN;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;IAC/C,IAAI,EAAE,UAAU,GAAG,YAAY,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;CAChD;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAQhE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAUzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,WAAW,EAAE,EACtB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CAaN"}