@abdullahjaswal/tickyr-charts-solid 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.
Files changed (217) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +43 -0
  3. package/dist/animation/animator.d.ts +52 -0
  4. package/dist/animation/bar-entry.d.ts +44 -0
  5. package/dist/animation/bar-update.d.ts +38 -0
  6. package/dist/animation/easings.d.ts +22 -0
  7. package/dist/animation/index.d.ts +4 -0
  8. package/dist/charts/bar-chart-controller.d.ts +98 -0
  9. package/dist/charts/bar-chart-helpers.d.ts +334 -0
  10. package/dist/charts/candle-chart-controller.d.ts +353 -0
  11. package/dist/charts/candle-chart-helpers.d.ts +781 -0
  12. package/dist/charts/depth-chart-controller.d.ts +84 -0
  13. package/dist/charts/depth-chart-helpers.d.ts +185 -0
  14. package/dist/charts/depth-series.d.ts +41 -0
  15. package/dist/charts/heatmap-chart-controller.d.ts +78 -0
  16. package/dist/charts/heatmap-chart-helpers.d.ts +174 -0
  17. package/dist/charts/heatmap-color-compute.d.ts +11 -0
  18. package/dist/charts/hierarchy.d.ts +49 -0
  19. package/dist/charts/histogram-binning.d.ts +33 -0
  20. package/dist/charts/histogram-chart-controller.d.ts +82 -0
  21. package/dist/charts/histogram-chart-helpers.d.ts +199 -0
  22. package/dist/charts/kagi-chart-controller.d.ts +154 -0
  23. package/dist/charts/line-chart-controller.d.ts +209 -0
  24. package/dist/charts/line-chart-helpers.d.ts +606 -0
  25. package/dist/charts/mark-buffers.d.ts +105 -0
  26. package/dist/charts/pie-chart-controller.d.ts +83 -0
  27. package/dist/charts/pie-chart-helpers.d.ts +155 -0
  28. package/dist/charts/pie-slice-compute.d.ts +44 -0
  29. package/dist/charts/pnf-chart-controller.d.ts +153 -0
  30. package/dist/charts/renko-chart-controller.d.ts +151 -0
  31. package/dist/charts/sankey-chart-controller.d.ts +176 -0
  32. package/dist/charts/sankey-layout.d.ts +64 -0
  33. package/dist/charts/scatter-chart-controller.d.ts +90 -0
  34. package/dist/charts/scatter-chart-helpers.d.ts +257 -0
  35. package/dist/charts/scatter-density.d.ts +5 -0
  36. package/dist/charts/scatter-regression.d.ts +27 -0
  37. package/dist/charts/sunburst-chart-controller.d.ts +107 -0
  38. package/dist/charts/sunburst-chart-helpers.d.ts +143 -0
  39. package/dist/charts/sunburst-layout.d.ts +40 -0
  40. package/dist/charts/time-off-algorithms.d.ts +53 -0
  41. package/dist/charts/treemap-chart-controller.d.ts +103 -0
  42. package/dist/charts/treemap-chart-helpers.d.ts +163 -0
  43. package/dist/charts/treemap-layout.d.ts +29 -0
  44. package/dist/charts/types.d.ts +38 -0
  45. package/dist/clock/clock.d.ts +10 -0
  46. package/dist/composition/chart-group-state.d.ts +46 -0
  47. package/dist/composition/index.d.ts +1 -0
  48. package/dist/composition/pane.d.ts +33 -0
  49. package/dist/domain/concat.d.ts +18 -0
  50. package/dist/domain/drawings.d.ts +44 -0
  51. package/dist/domain/heikin-ashi.d.ts +9 -0
  52. package/dist/domain/index.d.ts +7 -0
  53. package/dist/domain/ingestion.d.ts +7 -0
  54. package/dist/domain/live-state.d.ts +12 -0
  55. package/dist/domain/markers.d.ts +38 -0
  56. package/dist/domain/series.d.ts +22 -0
  57. package/dist/domain/values.d.ts +32 -0
  58. package/dist/engine/aggregation.d.ts +15 -0
  59. package/dist/engine/downsampling.d.ts +3 -0
  60. package/dist/engine/events.d.ts +14 -0
  61. package/dist/engine/index.d.ts +13 -0
  62. package/dist/engine/indicators.d.ts +37 -0
  63. package/dist/engine/markets.d.ts +8 -0
  64. package/dist/engine/module.d.ts +8 -0
  65. package/dist/engine/quadtree.d.ts +18 -0
  66. package/dist/engine/session.d.ts +11 -0
  67. package/dist/engine/signals.d.ts +52 -0
  68. package/dist/engine/streaming.d.ts +20 -0
  69. package/dist/engine/time-axis.d.ts +16 -0
  70. package/dist/engine/version.d.ts +16 -0
  71. package/dist/engine/views.d.ts +3 -0
  72. package/dist/index.js +17026 -0
  73. package/dist/interaction/keyboard.d.ts +16 -0
  74. package/dist/interaction/touch.d.ts +27 -0
  75. package/dist/perf/adaptive-complexity.d.ts +45 -0
  76. package/dist/perf/memory-pressure.d.ts +16 -0
  77. package/dist/perf/offscreen-canvas-host.d.ts +32 -0
  78. package/dist/perf/offscreen-canvas.d.ts +50 -0
  79. package/dist/perf/offscreen-canvas.worker.d.ts +1 -0
  80. package/dist/perf/shared-array-buffer.d.ts +10 -0
  81. package/dist/perf/visibility.d.ts +39 -0
  82. package/dist/perf/webgl-renderer.d.ts +24 -0
  83. package/dist/perf/wire-memory-pressure.d.ts +2 -0
  84. package/dist/personalization/accessibility.d.ts +16 -0
  85. package/dist/personalization/axes/animation.d.ts +33 -0
  86. package/dist/personalization/axes/area-baseline.d.ts +8 -0
  87. package/dist/personalization/axes/axis-labels.d.ts +3 -0
  88. package/dist/personalization/axes/bin-algorithm.d.ts +3 -0
  89. package/dist/personalization/axes/box-sizing.d.ts +22 -0
  90. package/dist/personalization/axes/cell-shape.d.ts +3 -0
  91. package/dist/personalization/axes/curve-type.d.ts +11 -0
  92. package/dist/personalization/axes/density.d.ts +4 -0
  93. package/dist/personalization/axes/depth-fill-type.d.ts +3 -0
  94. package/dist/personalization/axes/depth-limit.d.ts +2 -0
  95. package/dist/personalization/axes/glow.d.ts +21 -0
  96. package/dist/personalization/axes/heatmap-color-scale.d.ts +31 -0
  97. package/dist/personalization/axes/histogram-overlay.d.ts +18 -0
  98. package/dist/personalization/axes/indicator-pane-spec.d.ts +85 -0
  99. package/dist/personalization/axes/label-behavior.d.ts +3 -0
  100. package/dist/personalization/axes/label-content.d.ts +17 -0
  101. package/dist/personalization/axes/label-placement.d.ts +3 -0
  102. package/dist/personalization/axes/label-rotation.d.ts +3 -0
  103. package/dist/personalization/axes/level-highlight.d.ts +14 -0
  104. package/dist/personalization/axes/line-dash.d.ts +2 -0
  105. package/dist/personalization/axes/mid-line.d.ts +14 -0
  106. package/dist/personalization/axes/node-alignment.d.ts +3 -0
  107. package/dist/personalization/axes/null-behavior.d.ts +3 -0
  108. package/dist/personalization/axes/number-format.d.ts +18 -0
  109. package/dist/personalization/axes/pan-zoom.d.ts +42 -0
  110. package/dist/personalization/axes/pattern.d.ts +26 -0
  111. package/dist/personalization/axes/point-markers.d.ts +55 -0
  112. package/dist/personalization/axes/point-opacity.d.ts +6 -0
  113. package/dist/personalization/axes/point-size.d.ts +23 -0
  114. package/dist/personalization/axes/price-range.d.ts +9 -0
  115. package/dist/personalization/axes/radius-proportion.d.ts +3 -0
  116. package/dist/personalization/axes/regression-line.d.ts +36 -0
  117. package/dist/personalization/axes/sankey-link-color.d.ts +10 -0
  118. package/dist/personalization/axes/sankey-value-display.d.ts +4 -0
  119. package/dist/personalization/axes/small-slice-threshold.d.ts +15 -0
  120. package/dist/personalization/axes/sort-order.d.ts +3 -0
  121. package/dist/personalization/axes/spread-display.d.ts +4 -0
  122. package/dist/personalization/axes/stacking.d.ts +17 -0
  123. package/dist/personalization/axes/tile-layout.d.ts +3 -0
  124. package/dist/personalization/axes/time-off-axes.d.ts +19 -0
  125. package/dist/personalization/axes/treemap-color-scale.d.ts +3 -0
  126. package/dist/personalization/axes/value-labels.d.ts +21 -0
  127. package/dist/personalization/axes/view-mode.d.ts +3 -0
  128. package/dist/personalization/axes/volume-coloring.d.ts +24 -0
  129. package/dist/personalization/axes/y-axis-mode.d.ts +3 -0
  130. package/dist/personalization/index.d.ts +38 -0
  131. package/dist/personalization/locale/formatter.d.ts +45 -0
  132. package/dist/personalization/locale/resolver.d.ts +22 -0
  133. package/dist/personalization/palette/built-ins.d.ts +10 -0
  134. package/dist/personalization/palette/derive.d.ts +35 -0
  135. package/dist/personalization/palette/index.d.ts +6 -0
  136. package/dist/personalization/palette/oklch.d.ts +19 -0
  137. package/dist/personalization/palette/registry.d.ts +7 -0
  138. package/dist/personalization/palette/tonal-symmetry.d.ts +32 -0
  139. package/dist/personalization/palette/types.d.ts +63 -0
  140. package/dist/personalization/personalization.d.ts +137 -0
  141. package/dist/personalization/tooltip-props.d.ts +40 -0
  142. package/dist/rendering/canvas.d.ts +6 -0
  143. package/dist/rendering/color-tables.d.ts +52 -0
  144. package/dist/rendering/dirty-rect-tracker.d.ts +49 -0
  145. package/dist/rendering/dirty-rect.d.ts +17 -0
  146. package/dist/rendering/draw/area-fill-threshold.d.ts +19 -0
  147. package/dist/rendering/draw/area-fill.d.ts +47 -0
  148. package/dist/rendering/draw/area-gradient.d.ts +35 -0
  149. package/dist/rendering/draw/axis.d.ts +65 -0
  150. package/dist/rendering/draw/bar.d.ts +31 -0
  151. package/dist/rendering/draw/candle-live-treatment.d.ts +43 -0
  152. package/dist/rendering/draw/candle.d.ts +101 -0
  153. package/dist/rendering/draw/connection-indicator.d.ts +30 -0
  154. package/dist/rendering/draw/crosshair.d.ts +27 -0
  155. package/dist/rendering/draw/drawings.d.ts +64 -0
  156. package/dist/rendering/draw/grid.d.ts +20 -0
  157. package/dist/rendering/draw/indicator-band.d.ts +17 -0
  158. package/dist/rendering/draw/indicator-line.d.ts +15 -0
  159. package/dist/rendering/draw/last-price.d.ts +36 -0
  160. package/dist/rendering/draw/line.d.ts +16 -0
  161. package/dist/rendering/draw/live-bar.d.ts +31 -0
  162. package/dist/rendering/draw/markers.d.ts +53 -0
  163. package/dist/rendering/draw/pane-divider.d.ts +22 -0
  164. package/dist/rendering/draw/point-markers.d.ts +23 -0
  165. package/dist/rendering/glow/glow.d.ts +40 -0
  166. package/dist/rendering/index.d.ts +9 -0
  167. package/dist/rendering/layers/should-split.d.ts +12 -0
  168. package/dist/rendering/patterns/cross-hatch.d.ts +4 -0
  169. package/dist/rendering/patterns/pattern-tiles.d.ts +25 -0
  170. package/dist/rendering/pipeline.d.ts +21 -0
  171. package/dist/rendering/stacked-layout.d.ts +23 -0
  172. package/dist/rendering/standardization-tokens.d.ts +26 -0
  173. package/dist/rendering/static-layer-cache.d.ts +34 -0
  174. package/dist/rendering/threshold-split.d.ts +14 -0
  175. package/dist/shared/binary-search.d.ts +2 -0
  176. package/dist/shared/typed.d.ts +8 -0
  177. package/dist/solid/chart-group.d.ts +16 -0
  178. package/dist/solid/charts-provider.d.ts +38 -0
  179. package/dist/solid/components/area-chart.d.ts +21 -0
  180. package/dist/solid/components/bar-chart.d.ts +84 -0
  181. package/dist/solid/components/candle-chart.d.ts +142 -0
  182. package/dist/solid/components/chart-group-brush.d.ts +13 -0
  183. package/dist/solid/components/chart-group-navigator.d.ts +12 -0
  184. package/dist/solid/components/depth-chart.d.ts +8 -0
  185. package/dist/solid/components/heatmap-chart.d.ts +8 -0
  186. package/dist/solid/components/histogram-chart.d.ts +8 -0
  187. package/dist/solid/components/kagi-chart.d.ts +8 -0
  188. package/dist/solid/components/line-chart.d.ts +110 -0
  189. package/dist/solid/components/pie-chart.d.ts +20 -0
  190. package/dist/solid/components/point-figure-chart.d.ts +8 -0
  191. package/dist/solid/components/renko-chart.d.ts +8 -0
  192. package/dist/solid/components/sankey-chart.d.ts +8 -0
  193. package/dist/solid/components/scatter-chart.d.ts +8 -0
  194. package/dist/solid/components/sunburst-chart.d.ts +8 -0
  195. package/dist/solid/components/treemap-chart.d.ts +8 -0
  196. package/dist/solid/hooks/use-chart-theme.d.ts +2 -0
  197. package/dist/solid/hooks/use-streaming-candles.d.ts +33 -0
  198. package/dist/solid/index.d.ts +73 -0
  199. package/dist/solid/tooltips/default-candle-tooltip.d.ts +4 -0
  200. package/dist/solid/tooltips/default-extreme-tooltip.d.ts +6 -0
  201. package/dist/solid/tooltips/default-tooltip.d.ts +4 -0
  202. package/dist/solid/tooltips/default-volume-bar-tooltip.d.ts +4 -0
  203. package/dist/solid/tooltips/index.d.ts +4 -0
  204. package/dist/tickyr_charts_wasm-C-sFYtmv.js +828 -0
  205. package/dist/viewport/category-axis.d.ts +32 -0
  206. package/dist/viewport/clip-ticks.d.ts +8 -0
  207. package/dist/viewport/index.d.ts +6 -0
  208. package/dist/viewport/nice-ticks.d.ts +9 -0
  209. package/dist/viewport/nice-time-ticks.d.ts +7 -0
  210. package/dist/viewport/orientation.d.ts +56 -0
  211. package/dist/viewport/padded-domain.d.ts +16 -0
  212. package/dist/viewport/scales/linear.d.ts +9 -0
  213. package/dist/viewport/scales/log.d.ts +9 -0
  214. package/dist/viewport/scales/time.d.ts +7 -0
  215. package/dist/viewport/viewport-sizer.d.ts +15 -0
  216. package/dist/viewport/visible-window.d.ts +5 -0
  217. package/package.json +41 -0
@@ -0,0 +1,176 @@
1
+ import { Personalization, ThemeInput, VisualStyle, Theme, NodeAlignment, SankeyLinkColorInput, SankeyValueDisplayInput, LabelPlacement, LabelContentInput, TreemapColorScale, ChartFormatter, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat } from '../personalization';
2
+ import { CrosshairMarker } from '../rendering/draw/crosshair';
3
+ import { GridStyle } from '../rendering/draw/grid';
4
+ import { SankeyGraph, SankeyInput } from './sankey-layout';
5
+ export type { SankeyInput, SankeyNodeInput, SankeyLinkInput, } from './sankey-layout';
6
+ export interface SankeyChartTooltipProps {
7
+ readonly target: {
8
+ kind: "node";
9
+ idx: number;
10
+ id: string;
11
+ name: string;
12
+ value: number;
13
+ } | {
14
+ kind: "link";
15
+ idx: number;
16
+ sourceId: string;
17
+ targetId: string;
18
+ value: number;
19
+ };
20
+ readonly color: string;
21
+ readonly pointerX: number;
22
+ readonly pointerY: number;
23
+ readonly containerWidth: number;
24
+ readonly containerHeight: number;
25
+ readonly theme: import('../personalization').Theme;
26
+ readonly palette: import('../personalization').Palette;
27
+ readonly locale: string;
28
+ readonly timeZone: string | undefined;
29
+ readonly formatter: ChartFormatter;
30
+ }
31
+ export interface SankeyChartBaseProps {
32
+ /** Flow data - `{ nodes: [{name}], links: [{source, target, value}] }`.
33
+ * Sankey renders nodes as bars and links as proportional flow ribbons. */
34
+ data?: SankeyInput;
35
+ /** Default 'justify'. */
36
+ nodeAlignment?: NodeAlignment;
37
+ /** Default 8. */
38
+ nodePadding?: number;
39
+ /** Default 16. */
40
+ nodeWidth?: number;
41
+ /** Default 0.45. */
42
+ linkOpacity?: number;
43
+ /** Default 'source'. */
44
+ linkColor?: SankeyLinkColorInput;
45
+ /** Default 6. */
46
+ iterations?: number;
47
+ /** Default 'auto'. */
48
+ labelPosition?: LabelPlacement;
49
+ /** Default 'name + value'. */
50
+ labelContent?: LabelContentInput;
51
+ /** Default false. */
52
+ valueDisplay?: SankeyValueDisplayInput;
53
+ /** Default 'flat-categorical'. */
54
+ colorScale?: TreemapColorScale;
55
+ crosshairVisible?: boolean;
56
+ crosshairLineStyle?: GridStyle;
57
+ crosshairMarker?: CrosshairMarker;
58
+ width?: number;
59
+ height?: number;
60
+ theme?: ThemeInput;
61
+ palette?: string;
62
+ visualStyle?: "Fill" | "Outline";
63
+ outlineFillColor?: "auto" | string;
64
+ outlineFillOpacity?: number;
65
+ pixelDensityCap?: number;
66
+ fastMode?: boolean;
67
+ /** Glow + glow-color axes. */
68
+ glow?: import('../personalization/axes/glow').GlowInput;
69
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
70
+ /** Pattern fills. */
71
+ pattern?: import('../personalization/axes/pattern').PatternInput;
72
+ patternScale?: number;
73
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
74
+ ariaLabel?: string;
75
+ accents?: boolean;
76
+ locale?: string;
77
+ timeZone?: string;
78
+ cornerRadius?: number;
79
+ borderWidth?: number;
80
+ digitGrouping?: DigitGrouping;
81
+ numberAbbreviation?: NumberAbbreviation;
82
+ decimalPlaces?: DecimalPlaces;
83
+ currency?: string;
84
+ currencyDisplay?: CurrencyDisplay;
85
+ percentPrecision?: PercentPrecision;
86
+ dateFormat?: DateFormat;
87
+ timeFormat?: TimeFormat;
88
+ }
89
+ export interface SankeyChartProviderSnapshot {
90
+ theme: ThemeInput;
91
+ palette: string;
92
+ locale: string;
93
+ timeZone: string | undefined;
94
+ visualStyle: VisualStyle;
95
+ outlineFillColor: "auto" | string;
96
+ outlineFillOpacity: number;
97
+ cornerRadius: number;
98
+ borderWidth: number;
99
+ accents: boolean;
100
+ osTheme: Theme;
101
+ appTheme: Theme;
102
+ }
103
+ export interface SankeyChartRenderContext {
104
+ personalization: Personalization;
105
+ formatter: ChartFormatter;
106
+ resolvedLocaleBase: string;
107
+ resolvedTimeZone: string | undefined;
108
+ graph: SankeyGraph;
109
+ ariaLabel: string;
110
+ cssWidth: number;
111
+ cssHeight: number;
112
+ }
113
+ export interface HoverState {
114
+ readonly pointerX: number;
115
+ readonly pointerY: number;
116
+ readonly target: {
117
+ kind: "node";
118
+ idx: number;
119
+ id: string;
120
+ name: string;
121
+ value: number;
122
+ } | {
123
+ kind: "link";
124
+ idx: number;
125
+ sourceId: string;
126
+ targetId: string;
127
+ value: number;
128
+ };
129
+ readonly color: string;
130
+ }
131
+ export interface SankeyChartControllerProps extends SankeyChartBaseProps {
132
+ tooltip?: undefined | false | ((p: SankeyChartTooltipProps) => unknown);
133
+ }
134
+ export interface SankeyChartControllerCallbacks {
135
+ onContextChange(ctx: SankeyChartRenderContext): void;
136
+ onHoverChange(hover: HoverState | null): void;
137
+ }
138
+ export interface SankeyChartControllerMountOptions extends SankeyChartControllerCallbacks {
139
+ container?: HTMLElement | null;
140
+ staticCanvas: HTMLCanvasElement;
141
+ dynamicCanvas: HTMLCanvasElement | null;
142
+ initialProps: SankeyChartControllerProps;
143
+ initialProvider: SankeyChartProviderSnapshot;
144
+ }
145
+ export declare class SankeyChartController {
146
+ private staticCanvas;
147
+ private dynamicCanvas;
148
+ private callbacks;
149
+ private props;
150
+ private providerCtx;
151
+ private handle;
152
+ private dynCfg;
153
+ private graph;
154
+ private personalization;
155
+ private resolvedLocale;
156
+ private formatter;
157
+ private resolvedNodeAlignment;
158
+ private resolvedLinkColor;
159
+ private resolvedValueDisplay;
160
+ private resolvedLabelPosition;
161
+ private resolvedLabelContent;
162
+ private resolvedColorScale;
163
+ private nodeColors;
164
+ private staticDrawAbort;
165
+ private disposed;
166
+ private visGate;
167
+ constructor(opts: SankeyChartControllerMountOptions);
168
+ update(props: SankeyChartControllerProps, providerCtx: SankeyChartProviderSnapshot): void;
169
+ handlePointerMove(e: PointerEvent): void;
170
+ handlePointerLeave(): void;
171
+ dispose(): void;
172
+ private setHover;
173
+ private resolveDerived;
174
+ private applyDynamicCfgFromProps;
175
+ private runStaticDraw;
176
+ }
@@ -0,0 +1,64 @@
1
+ import { NodeAlignment } from '../personalization/axes/node-alignment';
2
+ export declare class SankeyCycleError extends Error {
3
+ readonly name = "SankeyCycleError";
4
+ }
5
+ export interface SankeyNodeInput {
6
+ readonly id: string;
7
+ readonly name?: string;
8
+ readonly color?: string;
9
+ readonly label?: string;
10
+ }
11
+ export interface SankeyLinkInput {
12
+ readonly source: string | number;
13
+ readonly target: string | number;
14
+ readonly value: number;
15
+ readonly color?: string;
16
+ readonly opacity?: number;
17
+ }
18
+ export interface SankeyInput {
19
+ readonly nodes: readonly SankeyNodeInput[];
20
+ readonly links: readonly SankeyLinkInput[];
21
+ }
22
+ export interface SankeyGraph {
23
+ readonly nodeCount: number;
24
+ readonly linkCount: number;
25
+ readonly nodeIds: readonly string[];
26
+ readonly nodeNames: readonly string[];
27
+ readonly nodeColorOverrides: readonly (string | null)[];
28
+ readonly nodeLabelOverrides: readonly (string | null)[];
29
+ /** Per-node aggregate value = max(incoming, outgoing). */
30
+ readonly nodeValues: Float64Array;
31
+ /** Per-node depth (root = 0). */
32
+ readonly depths: Int32Array;
33
+ readonly maxDepth: number;
34
+ readonly linkSources: Int32Array;
35
+ readonly linkTargets: Int32Array;
36
+ readonly linkValues: Float64Array;
37
+ readonly linkColorOverrides: readonly (string | null)[];
38
+ readonly linkOpacityOverrides: Float64Array;
39
+ }
40
+ export declare function ingestSankey(input: SankeyInput): SankeyGraph;
41
+ export interface SankeyLayoutOptions {
42
+ readonly x0: number;
43
+ readonly y0: number;
44
+ readonly x1: number;
45
+ readonly y1: number;
46
+ readonly nodeWidth: number;
47
+ readonly nodePadding: number;
48
+ readonly alignment: NodeAlignment;
49
+ /** Crossing-minimization passes. 6 is a good default. */
50
+ readonly iterations: number;
51
+ }
52
+ export interface SankeyLayoutResult {
53
+ readonly nodeX0: Float64Array;
54
+ readonly nodeY0: Float64Array;
55
+ readonly nodeX1: Float64Array;
56
+ readonly nodeY1: Float64Array;
57
+ /** Per-link source-y bounds (top, bottom of the band as it leaves the source). */
58
+ readonly linkSourceY0: Float64Array;
59
+ readonly linkSourceY1: Float64Array;
60
+ /** Per-link target-y bounds. */
61
+ readonly linkTargetY0: Float64Array;
62
+ readonly linkTargetY1: Float64Array;
63
+ }
64
+ export declare function layoutSankey(g: SankeyGraph, opts: SankeyLayoutOptions): SankeyLayoutResult;
@@ -0,0 +1,90 @@
1
+ import { Personalization, ThemeInput, VisualStyle, ChartFormatter, Theme, ResolvedPointSize, ResolvedRegressionLine } from '../personalization';
2
+ import { ResolvedMarkerConfig } from '../personalization/axes/point-markers';
3
+ import { HoverState, ResolvedScatterSeries, ScatterChartBaseProps, ScatterChartTooltipProps } from './scatter-chart-helpers';
4
+ /** Provider snapshot - same shape contract as BarChart's. */
5
+ export interface ScatterChartProviderSnapshot {
6
+ theme: ThemeInput;
7
+ palette: string;
8
+ locale: string;
9
+ timeZone: string | undefined;
10
+ visualStyle: VisualStyle;
11
+ outlineFillColor: "auto" | string;
12
+ outlineFillOpacity: number;
13
+ cornerRadius: number;
14
+ borderWidth: number;
15
+ accents: boolean;
16
+ osTheme: Theme;
17
+ appTheme: Theme;
18
+ }
19
+ /** Snapshot of derived state the adapter renders into JSX. */
20
+ export interface ScatterChartRenderContext {
21
+ personalization: Personalization;
22
+ formatter: ChartFormatter;
23
+ resolvedLocaleBase: string;
24
+ resolvedTimeZone: string | undefined;
25
+ /** Primary + secondary series, each with its resolved color + bubble radii. */
26
+ seriesList: readonly ResolvedScatterSeries[];
27
+ resolvedPointSize: ResolvedPointSize;
28
+ resolvedRegression: ResolvedRegressionLine | null;
29
+ resolvedMarker: ResolvedMarkerConfig | null;
30
+ pointAlpha: number;
31
+ isHeatmap: boolean;
32
+ ariaLabel: string;
33
+ isSparkline: boolean;
34
+ cssWidth: number;
35
+ cssHeight: number;
36
+ }
37
+ export interface ScatterChartControllerCallbacks {
38
+ onContextChange(ctx: ScatterChartRenderContext): void;
39
+ onHoverChange(hover: HoverState | null): void;
40
+ }
41
+ export interface ScatterChartControllerProps extends ScatterChartBaseProps {
42
+ tooltip?: undefined | false | ((p: ScatterChartTooltipProps) => unknown);
43
+ }
44
+ export interface ScatterChartControllerMountOptions extends ScatterChartControllerCallbacks {
45
+ container?: HTMLElement | null;
46
+ staticCanvas: HTMLCanvasElement;
47
+ dynamicCanvas: HTMLCanvasElement | null;
48
+ initialProps: ScatterChartControllerProps;
49
+ initialProvider: ScatterChartProviderSnapshot;
50
+ }
51
+ export declare class ScatterChartController {
52
+ private staticCanvas;
53
+ private dynamicCanvas;
54
+ private callbacks;
55
+ private props;
56
+ private providerCtx;
57
+ private handle;
58
+ private hoverState;
59
+ private dynCfg;
60
+ private seriesList;
61
+ private personalization;
62
+ private resolvedLocale;
63
+ private formatter;
64
+ private resolvedPointSize;
65
+ private resolvedMarker;
66
+ private pointAlpha;
67
+ private resolvedRegression;
68
+ private regressionPoly;
69
+ private isHeatmap;
70
+ private densityGrid;
71
+ private isSparkline;
72
+ private flatSeriesIdx;
73
+ private flatPointIdx;
74
+ private quadtree;
75
+ private quadtreePending;
76
+ private staticDrawAbort;
77
+ private disposed;
78
+ private visGate;
79
+ constructor(opts: ScatterChartControllerMountOptions);
80
+ update(props: ScatterChartControllerProps, providerCtx: ScatterChartProviderSnapshot): void;
81
+ handlePointerMove(e: PointerEvent): void;
82
+ handlePointerLeave(): void;
83
+ dispose(): void;
84
+ private totalPointCount;
85
+ private setHover;
86
+ private resolveDerived;
87
+ private applyDynamicCfgFromProps;
88
+ private runStaticDraw;
89
+ private refreshQuadtree;
90
+ }
@@ -0,0 +1,257 @@
1
+ import { Personalization, ThemeInput, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat, LegendPosition, LegendVisibility, ResolvedPointSize, ResolvedRegressionLine, PointSizeInput, PointOpacityInput, RegressionLineInput, DensityInput, ChartFormatter } from '../personalization';
2
+ import { Viewport } from '../viewport/viewport-sizer';
3
+ import { LinearScale } from '../viewport/scales/linear';
4
+ import { NiceTick } from '../viewport/nice-ticks';
5
+ import { YAxisPosition, XAxisPosition } from '../rendering/draw/axis';
6
+ import { GridStyle } from '../rendering/draw/grid';
7
+ import { CrosshairMarker } from '../rendering/draw/crosshair';
8
+ import { ResolvedMarkerConfig, PointMarkers } from '../personalization/axes/point-markers';
9
+ export interface ScatterPoint {
10
+ readonly x: number;
11
+ readonly y: number;
12
+ /** Optional 3rd dimension - only consumed when `pointSize` is data-driven. */
13
+ readonly size?: number;
14
+ }
15
+ /** AoS or SoA - host picks. SoA is zero-copy on ingest. */
16
+ export type ScatterSeriesInput = {
17
+ readonly points: readonly ScatterPoint[];
18
+ } | {
19
+ readonly xs: Float64Array;
20
+ readonly ys: Float64Array;
21
+ readonly sizes?: Float64Array;
22
+ };
23
+ /** Internal SoA aggregate. `sizes` is null when data-driven sizing is
24
+ * unused - the draw path checks `null` once and falls through to the
25
+ * fixed-size path. */
26
+ export declare class ScatterSeries {
27
+ #private;
28
+ readonly xs: Float64Array;
29
+ readonly ys: Float64Array;
30
+ readonly sizes: Float64Array | null;
31
+ readonly length: number;
32
+ constructor(xs: Float64Array, ys: Float64Array, sizes: Float64Array | null);
33
+ get revisionId(): number;
34
+ bumpRevision(): number;
35
+ }
36
+ export declare function ingestScatterSeries(input: ScatterSeriesInput): ScatterSeries;
37
+ export interface ScatterChartTooltipProps {
38
+ /** X-coordinate of the hovered point. */
39
+ readonly x: number;
40
+ /** Y-coordinate of the hovered point. */
41
+ readonly y: number;
42
+ /** Optional size value (when `pointSize` is data-driven). */
43
+ readonly size: number | null;
44
+ /** Index into the hovered series. */
45
+ readonly idx: number;
46
+ /** Index into the chart's series list (0 = primary, ≥1 = secondaries). */
47
+ readonly seriesIdx: number;
48
+ /** Series id (from `series[i].id`, or `'primary'` when only `data` was passed). */
49
+ readonly seriesId: string;
50
+ /** Series display label (`series[i].label ?? id`, or `'Value'` for primary-only). */
51
+ readonly seriesLabel: string;
52
+ /** Resolved CSS color for this series (categorical[i] cycling already applied). */
53
+ readonly seriesColor: string;
54
+ readonly pointerX: number;
55
+ readonly pointerY: number;
56
+ readonly containerWidth: number;
57
+ readonly containerHeight: number;
58
+ readonly theme: import('../personalization').Theme;
59
+ readonly palette: import('../personalization').Palette;
60
+ readonly locale: string;
61
+ readonly timeZone: string | undefined;
62
+ readonly formatter: ChartFormatter;
63
+ }
64
+ /** Multi-series ScatterChart entry. Always supported.
65
+ * Without per-series `color`, the lib auto-cycles `palette.categorical[i]`. */
66
+ export interface ScatterSeriesConfig {
67
+ readonly id: string;
68
+ readonly data: ScatterSeriesInput;
69
+ readonly label?: string;
70
+ readonly color?: string;
71
+ }
72
+ export interface ScatterChartBaseProps {
73
+ /** Single-series point data - `xs` + `ys` + optional `sizes`. */
74
+ data?: ScatterSeriesInput;
75
+ /** Multi-series - pass an array of named series. */
76
+ series?: readonly ScatterSeriesConfig[];
77
+ /** Default 9 (fixed pixel diameter). */
78
+ pointSize?: PointSizeInput;
79
+ /** Default 'auto' - lowers per-point alpha at high counts. */
80
+ pointOpacity?: PointOpacityInput;
81
+ /** Default false. */
82
+ regressionLine?: RegressionLineInput;
83
+ /** Default 'auto' - switches to heatmap at ≥50k points. */
84
+ density?: DensityInput;
85
+ /** Inherits LineChart's MarkerConfig - controls point shape + fill/stroke
86
+ * treatment. `pointSize` overrides the size field. */
87
+ pointMarker?: PointMarkers;
88
+ legend?: LegendVisibility;
89
+ legendPosition?: LegendPosition;
90
+ crosshairVisible?: boolean;
91
+ crosshairLineStyle?: GridStyle;
92
+ crosshairMarker?: CrosshairMarker;
93
+ width?: number;
94
+ height?: number;
95
+ theme?: ThemeInput;
96
+ palette?: string;
97
+ visualStyle?: "Fill" | "Outline";
98
+ outlineFillColor?: "auto" | string;
99
+ outlineFillOpacity?: number;
100
+ pixelDensityCap?: number;
101
+ fastMode?: boolean;
102
+ /** Glow + glow-color axes. */
103
+ glow?: import('../personalization/axes/glow').GlowInput;
104
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
105
+ /** Pattern fills. */
106
+ pattern?: import('../personalization/axes/pattern').PatternInput;
107
+ patternScale?: number;
108
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
109
+ sparkline?: boolean;
110
+ ariaLabel?: string;
111
+ axisVisible?: boolean;
112
+ yAxisPosition?: YAxisPosition;
113
+ xAxisPosition?: XAxisPosition;
114
+ yAxisPadding?: number;
115
+ xAxisPadding?: number;
116
+ gridVisible?: boolean;
117
+ gridStyle?: GridStyle;
118
+ gridDensity?: "sparse" | "normal" | "dense";
119
+ accents?: boolean;
120
+ locale?: string;
121
+ timeZone?: string;
122
+ digitGrouping?: DigitGrouping;
123
+ numberAbbreviation?: NumberAbbreviation;
124
+ decimalPlaces?: DecimalPlaces;
125
+ currency?: string;
126
+ currencyDisplay?: CurrencyDisplay;
127
+ percentPrecision?: PercentPrecision;
128
+ dateFormat?: DateFormat;
129
+ timeFormat?: TimeFormat;
130
+ }
131
+ export declare const DEFAULT_FONT = "12px system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif";
132
+ export declare const DEFAULT_AXIS_FONT_SIZE = 11;
133
+ export declare const LABEL_GAP_PX = 6;
134
+ export declare const TICK_LENGTH_PX = 4;
135
+ export declare const Y_AXIS_RESERVE_PX = 80;
136
+ export declare const X_AXIS_RESERVE_PX = 28;
137
+ export declare const GRID_TARGET: {
138
+ readonly sparse: 4;
139
+ readonly normal: 8;
140
+ readonly dense: 12;
141
+ };
142
+ export declare const SPARKLINE_THRESHOLD_PX = 150;
143
+ /** Default density bins on each axis when heatmap mode engages. Bins are
144
+ * square pixel cells; the count adapts to viewport size at draw time. */
145
+ export declare const DEFAULT_DENSITY_BIN_PX = 8;
146
+ export interface HoverState {
147
+ readonly pointerX: number;
148
+ readonly pointerY: number;
149
+ readonly snapX: number;
150
+ readonly snapY: number;
151
+ /** Index into `seriesList` (0 = primary, ≥1 = secondaries). */
152
+ readonly seriesIdx: number;
153
+ /** Index of the hovered point within that series. */
154
+ readonly idx: number;
155
+ readonly x: number;
156
+ readonly y: number;
157
+ readonly size: number | null;
158
+ }
159
+ /** A resolved scatter series ready to draw - primary or secondary, all
160
+ * share the same shape. The controller produces `seriesList[]` from the
161
+ * `data` + `series` props, with index 0 always being the primary. */
162
+ export interface ResolvedScatterSeries {
163
+ readonly id: string;
164
+ readonly label: string;
165
+ readonly series: ScatterSeries;
166
+ /** Resolved CSS color (categorical[i] cycling already applied). */
167
+ readonly color: string;
168
+ /** Pre-computed per-point bubble radii when `pointSize.kind === 'data-driven'`
169
+ * AND the series provides a `sizes` field. Else null → fall back to fixed. */
170
+ readonly bubbleRadii: Float64Array | null;
171
+ }
172
+ export interface DynamicCfg {
173
+ readonly crosshairVisible: boolean;
174
+ readonly crosshairLineStyle: GridStyle;
175
+ readonly crosshairMarker: CrosshairMarker;
176
+ }
177
+ export interface ChartLayout {
178
+ innerLeft: number;
179
+ innerRight: number;
180
+ innerTop: number;
181
+ innerBottom: number;
182
+ xScale: LinearScale;
183
+ yScale: LinearScale;
184
+ xTicks: readonly NiceTick[];
185
+ yTicks: readonly NiceTick[];
186
+ viewport: Viewport;
187
+ }
188
+ export interface ChartHandle {
189
+ readonly dynamicCtx: CanvasRenderingContext2D | null;
190
+ readonly layout: ChartLayout;
191
+ readonly crosshairLineColor: string;
192
+ readonly crosshairMarkerFill: string;
193
+ readonly crosshairMarkerStroke: string;
194
+ /** Resolved per-series colors keyed by series index - used by hover state
195
+ * for crosshair-marker and by tooltip render-prop callbacks. */
196
+ readonly seriesColors: readonly string[];
197
+ }
198
+ export declare function computeXYDomain(seriesList: readonly ResolvedScatterSeries[], xPadding: number, yPadding: number): {
199
+ xMin: number;
200
+ xMax: number;
201
+ yMin: number;
202
+ yMax: number;
203
+ };
204
+ export declare function computeLayout(opts: {
205
+ seriesList: readonly ResolvedScatterSeries[];
206
+ viewport: Viewport;
207
+ yAxisPosition: YAxisPosition;
208
+ xAxisPosition: XAxisPosition;
209
+ xAxisPadding: number;
210
+ yAxisPadding: number;
211
+ gridDensity: "sparse" | "normal" | "dense";
212
+ axisVisible: boolean;
213
+ formatter: ChartFormatter;
214
+ }): ChartLayout;
215
+ export declare function defaultAriaLabel(seriesList: readonly ResolvedScatterSeries[]): string;
216
+ export interface RegressionPolyline {
217
+ readonly xs: Float64Array;
218
+ readonly ys: Float64Array;
219
+ }
220
+ export declare function buildRegressionPolyline(spec: ResolvedRegressionLine, series: ScatterSeries, xMin: number, xMax: number, steps?: number): RegressionPolyline | null;
221
+ export interface DensityGrid {
222
+ readonly counts: Uint32Array;
223
+ readonly binsX: number;
224
+ readonly binsY: number;
225
+ readonly maxCount: number;
226
+ readonly innerLeft: number;
227
+ readonly innerTop: number;
228
+ readonly cellPxX: number;
229
+ readonly cellPxY: number;
230
+ }
231
+ export declare function buildDensityGrid(seriesList: readonly ResolvedScatterSeries[], layout: ChartLayout, cellPx: number): DensityGrid;
232
+ export interface DrawFullScatterArgs {
233
+ ctx: CanvasRenderingContext2D;
234
+ seriesList: readonly ResolvedScatterSeries[];
235
+ personalization: Personalization;
236
+ accents: boolean;
237
+ layout: ChartLayout;
238
+ axisVisible: boolean;
239
+ gridVisible: boolean;
240
+ gridStyle: GridStyle;
241
+ yAxisPosition: YAxisPosition;
242
+ xAxisPosition: XAxisPosition;
243
+ /** Resolved size shape (fixed or data-driven). */
244
+ pointSize: ResolvedPointSize;
245
+ /** Pre-resolved per-point alpha (already includes 'auto' density step). */
246
+ pointAlpha: number;
247
+ /** When non-null, render the heatmap instead of points. */
248
+ density: DensityGrid | null;
249
+ /** When non-null, stroke the regression polyline. */
250
+ regression: RegressionPolyline | null;
251
+ regressionSpec: ResolvedRegressionLine | null;
252
+ /** Resolved marker config (style + fill/stroke modifiers). When null, the
253
+ * default circle marker is used. */
254
+ marker: ResolvedMarkerConfig | null;
255
+ }
256
+ export declare function drawFullScatterChart(args: DrawFullScatterArgs): void;
257
+ export declare function drawScatterDynamicLayer(handle: ChartHandle, hover: HoverState | null, cfg: DynamicCfg): void;
@@ -0,0 +1,5 @@
1
+ export interface BinDensityResult {
2
+ /** Maximum bin count - used to normalize the heatmap color ramp. */
3
+ readonly maxCount: number;
4
+ }
5
+ export declare function binDensity(xs: Float64Array, ys: Float64Array, n: number, xMin: number, xMax: number, yMin: number, yMax: number, binsX: number, binsY: number, out: Uint32Array): BinDensityResult;
@@ -0,0 +1,27 @@
1
+ export interface LinearFit {
2
+ /** Intercept - y = a + b·x. */
3
+ readonly a: number;
4
+ /** Slope. */
5
+ readonly b: number;
6
+ }
7
+ /** OLS linear regression. Returns intercept + slope. Robust to constant-x
8
+ * inputs (slope clamps to 0 then). */
9
+ export declare function fitLinear(xs: Float64Array, ys: Float64Array, n: number): LinearFit;
10
+ /** Solve Vandermonde least-squares for polynomial coefficients
11
+ * `[c0, c1, ..., cd]` such that `y ≈ Σ ci·x^i`. Writes `degree + 1` values
12
+ * into `outCoeffs`. */
13
+ export declare function fitPolynomial(xs: Float64Array, ys: Float64Array, n: number, degree: number, outCoeffs: Float64Array): void;
14
+ /** Evaluate polynomial Σ c_i · x^i at `x` via Horner's method. */
15
+ export declare function evaluatePolynomial(coeffs: Float64Array, x: number): number;
16
+ export interface ExponentialFit {
17
+ /** y = a · exp(b·x). */
18
+ readonly a: number;
19
+ readonly b: number;
20
+ }
21
+ /** Fit `y = a · exp(b·x)` by linearizing: `ln(y) = ln(a) + b·x`. Returns
22
+ * null if any y ≤ 0 (log undefined). */
23
+ export declare function fitExponential(xs: Float64Array, ys: Float64Array, n: number): ExponentialFit | null;
24
+ /** LOWESS - locally-weighted scatterplot smoothing with a tricube kernel
25
+ * over a `bandwidth` fraction of the points. Writes per-evaluation values
26
+ * into `evalYs` (length must equal `evalXs.length`). */
27
+ export declare function fitLowess(xs: Float64Array, ys: Float64Array, n: number, bandwidth: number, evalXs: Float64Array, evalYs: Float64Array): void;