@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,82 @@
1
+ import { Personalization, ThemeInput, VisualStyle, Theme, BinAlgorithm, YAxisMode, ResolvedHistogramOverlay, ChartFormatter } from '../personalization';
2
+ import { HoverState, HistogramChartBaseProps, HistogramChartTooltipProps, HistogramSeries } from './histogram-chart-helpers';
3
+ export interface HistogramChartProviderSnapshot {
4
+ theme: ThemeInput;
5
+ palette: string;
6
+ locale: string;
7
+ timeZone: string | undefined;
8
+ visualStyle: VisualStyle;
9
+ outlineFillColor: "auto" | string;
10
+ outlineFillOpacity: number;
11
+ cornerRadius: number;
12
+ borderWidth: number;
13
+ accents: boolean;
14
+ osTheme: Theme;
15
+ appTheme: Theme;
16
+ }
17
+ export interface HistogramChartRenderContext {
18
+ personalization: Personalization;
19
+ formatter: ChartFormatter;
20
+ resolvedLocaleBase: string;
21
+ resolvedTimeZone: string | undefined;
22
+ series: HistogramSeries;
23
+ binCount: number;
24
+ yAxisMode: YAxisMode;
25
+ binAlgorithm: BinAlgorithm;
26
+ resolvedOverlay: ResolvedHistogramOverlay | null;
27
+ ariaLabel: string;
28
+ isSparkline: boolean;
29
+ cssWidth: number;
30
+ cssHeight: number;
31
+ }
32
+ export interface HistogramChartControllerCallbacks {
33
+ onContextChange(ctx: HistogramChartRenderContext): void;
34
+ onHoverChange(hover: HoverState | null): void;
35
+ }
36
+ export interface HistogramChartControllerProps extends HistogramChartBaseProps {
37
+ tooltip?: undefined | false | ((p: HistogramChartTooltipProps) => unknown);
38
+ }
39
+ export interface HistogramChartControllerMountOptions extends HistogramChartControllerCallbacks {
40
+ container?: HTMLElement | null;
41
+ staticCanvas: HTMLCanvasElement;
42
+ dynamicCanvas: HTMLCanvasElement | null;
43
+ initialProps: HistogramChartControllerProps;
44
+ initialProvider: HistogramChartProviderSnapshot;
45
+ }
46
+ export declare class HistogramChartController {
47
+ private staticCanvas;
48
+ private dynamicCanvas;
49
+ private callbacks;
50
+ private props;
51
+ private providerCtx;
52
+ private handle;
53
+ private hoverState;
54
+ private dynCfg;
55
+ private series;
56
+ private personalization;
57
+ private resolvedLocale;
58
+ private formatter;
59
+ private binAlgorithm;
60
+ private yAxisMode;
61
+ private resolvedOverlay;
62
+ private isSparkline;
63
+ private edges;
64
+ private counts;
65
+ private yValues;
66
+ private binCount;
67
+ private totalCount;
68
+ private normalMean;
69
+ private normalStd;
70
+ private staticDrawAbort;
71
+ private disposed;
72
+ private visGate;
73
+ constructor(opts: HistogramChartControllerMountOptions);
74
+ update(props: HistogramChartControllerProps, providerCtx: HistogramChartProviderSnapshot): void;
75
+ handlePointerMove(e: PointerEvent): void;
76
+ handlePointerLeave(): void;
77
+ dispose(): void;
78
+ private setHover;
79
+ private resolveDerived;
80
+ private applyDynamicCfgFromProps;
81
+ private runStaticDraw;
82
+ }
@@ -0,0 +1,199 @@
1
+ import { Personalization, ThemeInput, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat, LegendPosition, LegendVisibility, BinAlgorithm, YAxisMode, HistogramOverlayInput, ResolvedHistogramOverlay, 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
+ export type HistogramSeriesInput = {
9
+ readonly values: Float64Array;
10
+ } | {
11
+ readonly values: readonly number[];
12
+ };
13
+ export declare class HistogramSeries {
14
+ #private;
15
+ readonly values: Float64Array;
16
+ readonly length: number;
17
+ constructor(values: Float64Array);
18
+ get revisionId(): number;
19
+ bumpRevision(): number;
20
+ }
21
+ export declare function ingestHistogramSeries(input: HistogramSeriesInput): HistogramSeries;
22
+ export interface HistogramChartTooltipProps {
23
+ /** Bin index (0-based). */
24
+ readonly binIdx: number;
25
+ /** Lower edge of the bin (data value). */
26
+ readonly binStart: number;
27
+ /** Upper edge of the bin (data value). */
28
+ readonly binEnd: number;
29
+ /** Raw count in this bin. */
30
+ readonly count: number;
31
+ /** Y-value rendered (frequency / density / cumulative). */
32
+ readonly value: number;
33
+ readonly pointerX: number;
34
+ readonly pointerY: number;
35
+ readonly containerWidth: number;
36
+ readonly containerHeight: number;
37
+ readonly theme: import('../personalization').Theme;
38
+ readonly palette: import('../personalization').Palette;
39
+ readonly locale: string;
40
+ readonly timeZone: string | undefined;
41
+ readonly formatter: ChartFormatter;
42
+ }
43
+ export interface HistogramChartBaseProps {
44
+ /** Distribution data - raw values that will be binned by the
45
+ * configured algorithm. See `HistogramSeriesInput`. */
46
+ data?: HistogramSeriesInput;
47
+ /** Default 'freedman-diaconis'. */
48
+ binAlgorithm?: BinAlgorithm;
49
+ /** Used when `binAlgorithm: 'fixed'`. */
50
+ binCount?: number;
51
+ /** `'auto'` → data min. */
52
+ binStart?: number | "auto";
53
+ /** `'auto'` → data max. */
54
+ binEnd?: number | "auto";
55
+ /** Default 'frequency'. */
56
+ yAxis?: YAxisMode;
57
+ /** Default 1.0 (touching bars). */
58
+ barWidthRatio?: number;
59
+ /** Default false. */
60
+ overlay?: HistogramOverlayInput;
61
+ legend?: LegendVisibility;
62
+ legendPosition?: LegendPosition;
63
+ crosshairVisible?: boolean;
64
+ crosshairLineStyle?: GridStyle;
65
+ crosshairMarker?: CrosshairMarker;
66
+ width?: number;
67
+ height?: number;
68
+ theme?: ThemeInput;
69
+ palette?: string;
70
+ visualStyle?: "Fill" | "Outline";
71
+ outlineFillColor?: "auto" | string;
72
+ outlineFillOpacity?: number;
73
+ pixelDensityCap?: number;
74
+ fastMode?: boolean;
75
+ /** Glow + glow-color axes. */
76
+ glow?: import('../personalization/axes/glow').GlowInput;
77
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
78
+ /** Pattern fills. */
79
+ pattern?: import('../personalization/axes/pattern').PatternInput;
80
+ patternScale?: number;
81
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
82
+ sparkline?: boolean;
83
+ ariaLabel?: string;
84
+ axisVisible?: boolean;
85
+ yAxisPosition?: YAxisPosition;
86
+ xAxisPosition?: XAxisPosition;
87
+ yAxisPadding?: number;
88
+ gridVisible?: boolean;
89
+ gridStyle?: GridStyle;
90
+ gridDensity?: "sparse" | "normal" | "dense";
91
+ accents?: boolean;
92
+ locale?: string;
93
+ timeZone?: string;
94
+ cornerRadius?: number;
95
+ borderWidth?: number;
96
+ digitGrouping?: DigitGrouping;
97
+ numberAbbreviation?: NumberAbbreviation;
98
+ decimalPlaces?: DecimalPlaces;
99
+ currency?: string;
100
+ currencyDisplay?: CurrencyDisplay;
101
+ percentPrecision?: PercentPrecision;
102
+ dateFormat?: DateFormat;
103
+ timeFormat?: TimeFormat;
104
+ }
105
+ export declare const DEFAULT_FONT = "12px system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif";
106
+ export declare const DEFAULT_AXIS_FONT_SIZE = 11;
107
+ export declare const LABEL_GAP_PX = 6;
108
+ export declare const TICK_LENGTH_PX = 4;
109
+ export declare const Y_AXIS_RESERVE_PX = 80;
110
+ export declare const X_AXIS_RESERVE_PX = 28;
111
+ export declare const GRID_TARGET: {
112
+ readonly sparse: 4;
113
+ readonly normal: 8;
114
+ readonly dense: 12;
115
+ };
116
+ export declare const SPARKLINE_THRESHOLD_PX = 150;
117
+ export declare const DEFAULT_BAR_WIDTH_RATIO = 1;
118
+ export interface HoverState {
119
+ readonly pointerX: number;
120
+ readonly pointerY: number;
121
+ readonly snapX: number;
122
+ readonly snapY: number;
123
+ readonly binIdx: number;
124
+ readonly binStart: number;
125
+ readonly binEnd: number;
126
+ readonly count: number;
127
+ readonly value: number;
128
+ }
129
+ export interface DynamicCfg {
130
+ readonly crosshairVisible: boolean;
131
+ readonly crosshairLineStyle: GridStyle;
132
+ readonly crosshairMarker: CrosshairMarker;
133
+ }
134
+ export interface ChartLayout {
135
+ innerLeft: number;
136
+ innerRight: number;
137
+ innerTop: number;
138
+ innerBottom: number;
139
+ /** Maps a data value (numeric) to an x-pixel. */
140
+ xScale: LinearScale;
141
+ /** Maps a y-value (frequency/density/cumulative) to a y-pixel. */
142
+ yScale: LinearScale;
143
+ /** Bin edges in data-space - `length === binCount + 1`. */
144
+ edges: Float64Array;
145
+ /** Per-bin y-values (frequency/density/cumulative). */
146
+ yValues: Float64Array;
147
+ /** Raw counts (for tooltip display). */
148
+ counts: Uint32Array;
149
+ /** Numeric ticks for the y-axis. */
150
+ yTicks: readonly NiceTick[];
151
+ /** Numeric ticks for the x-axis. */
152
+ xTicks: readonly NiceTick[];
153
+ viewport: Viewport;
154
+ }
155
+ export interface ChartHandle {
156
+ readonly dynamicCtx: CanvasRenderingContext2D | null;
157
+ readonly layout: ChartLayout;
158
+ readonly crosshairLineColor: string;
159
+ readonly crosshairMarkerFill: string;
160
+ readonly crosshairMarkerStroke: string;
161
+ readonly fillColor: string;
162
+ }
163
+ export declare function computeLayout(opts: {
164
+ edges: Float64Array;
165
+ yValues: Float64Array;
166
+ counts: Uint32Array;
167
+ viewport: Viewport;
168
+ yAxisPosition: YAxisPosition;
169
+ xAxisPosition: XAxisPosition;
170
+ yAxisPadding: number;
171
+ gridDensity: "sparse" | "normal" | "dense";
172
+ axisVisible: boolean;
173
+ formatter: ChartFormatter;
174
+ }): ChartLayout;
175
+ export declare function defaultAriaLabel(series: HistogramSeries, binCount: number): string;
176
+ export interface DrawFullHistogramArgs {
177
+ ctx: CanvasRenderingContext2D;
178
+ personalization: Personalization;
179
+ accents: boolean;
180
+ layout: ChartLayout;
181
+ axisVisible: boolean;
182
+ gridVisible: boolean;
183
+ gridStyle: GridStyle;
184
+ yAxisPosition: YAxisPosition;
185
+ xAxisPosition: XAxisPosition;
186
+ cornerRadius: number;
187
+ borderWidth: number;
188
+ barWidthRatio: number;
189
+ overlay: ResolvedHistogramOverlay | null;
190
+ /** When overlay is 'normal' - pre-fitted distribution. */
191
+ normalMean: number;
192
+ normalStd: number;
193
+ /** Total count across all bins (for normal overlay scaling). */
194
+ totalCount: number;
195
+ yAxisMode: YAxisMode;
196
+ }
197
+ export declare function drawFullHistogramChart(args: DrawFullHistogramArgs): void;
198
+ export declare function drawHistogramDynamicLayer(handle: ChartHandle, hover: HoverState | null, cfg: DynamicCfg): void;
199
+ export declare function findBinAtX(edges: Float64Array, binCount: number, dataX: number): number;
@@ -0,0 +1,154 @@
1
+ import { Personalization, ThemeInput, VisualStyle, Theme, BoxSizingInput, TimeOffSource, KagiThicknessRule, ChartFormatter, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat } from '../personalization';
2
+ import { YAxisPosition, XAxisPosition } from '../rendering/draw/axis';
3
+ import { GridStyle } from '../rendering/draw/grid';
4
+ import { CrosshairMarker } from '../rendering/draw/crosshair';
5
+ import { CandleSeriesInput } from '../domain';
6
+ import { KagiLegs } from './time-off-algorithms';
7
+ export interface KagiChartTooltipProps {
8
+ readonly idx: number;
9
+ readonly direction: 1 | -1;
10
+ readonly thick: boolean;
11
+ readonly startPrice: number;
12
+ readonly endPrice: number;
13
+ readonly pointerX: number;
14
+ readonly pointerY: number;
15
+ readonly containerWidth: number;
16
+ readonly containerHeight: number;
17
+ readonly theme: import('../personalization').Theme;
18
+ readonly palette: import('../personalization').Palette;
19
+ readonly locale: string;
20
+ readonly timeZone: string | undefined;
21
+ readonly formatter: ChartFormatter;
22
+ }
23
+ export interface KagiChartBaseProps {
24
+ /** Required OHLC bars - Kagi filters out time and tracks direction
25
+ * flips by reversal threshold. */
26
+ data?: CandleSeriesInput;
27
+ /** Price-distance required to reverse direction. `"auto"` =
28
+ * ATR-derived; or a fixed value. */
29
+ reversalThreshold?: BoxSizingInput;
30
+ /** Rule for thick/thin line transitions (yang vs yin). */
31
+ thicknessRule?: KagiThicknessRule;
32
+ /** Stroke width for thick (uptrend) lines. */
33
+ thickLineWidth?: number;
34
+ /** Stroke width for thin (downtrend) lines. */
35
+ thinLineWidth?: number;
36
+ /** Source field for price comparisons. */
37
+ source?: TimeOffSource;
38
+ /** Toggle crosshair on hover. */
39
+ crosshairVisible?: boolean;
40
+ /** Crosshair line style. */
41
+ crosshairLineStyle?: GridStyle;
42
+ /** Snap-marker shape. */
43
+ crosshairMarker?: CrosshairMarker;
44
+ width?: number;
45
+ height?: number;
46
+ theme?: ThemeInput;
47
+ palette?: string;
48
+ visualStyle?: "Fill" | "Outline";
49
+ outlineFillColor?: "auto" | string;
50
+ outlineFillOpacity?: number;
51
+ pixelDensityCap?: number;
52
+ fastMode?: boolean;
53
+ /** Glow + glow-color axes. */
54
+ glow?: import('../personalization/axes/glow').GlowInput;
55
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
56
+ /** Pattern fills. */
57
+ pattern?: import('../personalization/axes/pattern').PatternInput;
58
+ patternScale?: number;
59
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
60
+ ariaLabel?: string;
61
+ axisVisible?: boolean;
62
+ yAxisPosition?: YAxisPosition;
63
+ xAxisPosition?: XAxisPosition;
64
+ yAxisPadding?: number;
65
+ gridVisible?: boolean;
66
+ gridStyle?: GridStyle;
67
+ gridDensity?: "sparse" | "normal" | "dense";
68
+ accents?: boolean;
69
+ locale?: string;
70
+ timeZone?: string;
71
+ digitGrouping?: DigitGrouping;
72
+ numberAbbreviation?: NumberAbbreviation;
73
+ decimalPlaces?: DecimalPlaces;
74
+ currency?: string;
75
+ currencyDisplay?: CurrencyDisplay;
76
+ percentPrecision?: PercentPrecision;
77
+ dateFormat?: DateFormat;
78
+ timeFormat?: TimeFormat;
79
+ }
80
+ export interface KagiChartProviderSnapshot {
81
+ theme: ThemeInput;
82
+ palette: string;
83
+ locale: string;
84
+ timeZone: string | undefined;
85
+ visualStyle: VisualStyle;
86
+ outlineFillColor: "auto" | string;
87
+ outlineFillOpacity: number;
88
+ cornerRadius: number;
89
+ borderWidth: number;
90
+ accents: boolean;
91
+ osTheme: Theme;
92
+ appTheme: Theme;
93
+ }
94
+ export interface KagiChartRenderContext {
95
+ personalization: Personalization;
96
+ formatter: ChartFormatter;
97
+ resolvedLocaleBase: string;
98
+ resolvedTimeZone: string | undefined;
99
+ legs: KagiLegs;
100
+ ariaLabel: string;
101
+ cssWidth: number;
102
+ cssHeight: number;
103
+ }
104
+ export interface HoverState {
105
+ readonly pointerX: number;
106
+ readonly pointerY: number;
107
+ readonly idx: number;
108
+ readonly direction: 1 | -1;
109
+ readonly thick: boolean;
110
+ readonly startPrice: number;
111
+ readonly endPrice: number;
112
+ }
113
+ export interface KagiChartControllerProps extends KagiChartBaseProps {
114
+ tooltip?: undefined | false | ((p: KagiChartTooltipProps) => unknown);
115
+ }
116
+ export interface KagiChartControllerCallbacks {
117
+ onContextChange(ctx: KagiChartRenderContext): void;
118
+ onHoverChange(hover: HoverState | null): void;
119
+ }
120
+ export interface KagiChartControllerMountOptions extends KagiChartControllerCallbacks {
121
+ container?: HTMLElement | null;
122
+ staticCanvas: HTMLCanvasElement;
123
+ dynamicCanvas: HTMLCanvasElement | null;
124
+ initialProps: KagiChartControllerProps;
125
+ initialProvider: KagiChartProviderSnapshot;
126
+ }
127
+ export declare class KagiChartController {
128
+ private staticCanvas;
129
+ private dynamicCanvas;
130
+ private callbacks;
131
+ private props;
132
+ private providerCtx;
133
+ private handle;
134
+ private dynCfg;
135
+ private legs;
136
+ private personalization;
137
+ private resolvedLocale;
138
+ private formatter;
139
+ private thicknessRule;
140
+ private thickLineWidth;
141
+ private thinLineWidth;
142
+ private staticDrawAbort;
143
+ private disposed;
144
+ private visGate;
145
+ constructor(opts: KagiChartControllerMountOptions);
146
+ update(props: KagiChartControllerProps, providerCtx: KagiChartProviderSnapshot): void;
147
+ handlePointerMove(e: PointerEvent): void;
148
+ handlePointerLeave(): void;
149
+ dispose(): void;
150
+ private setHover;
151
+ private resolveDerived;
152
+ private applyDynamicCfgFromProps;
153
+ private runStaticDraw;
154
+ }
@@ -0,0 +1,209 @@
1
+ import { LineSeries, LiveState } from '../domain';
2
+ import { Personalization, ChartFormatter, ConnectionIndicator } from '../personalization';
3
+ import { StackingLayout } from '../rendering/stacked-layout';
4
+ import { ExtremeHoverState, HoverState, LineChartBaseProps, ResolvedIndicator, SecondarySeriesDraw, ConnectionIndicatorRenderProps, StaleBannerRenderProps, LineChartTooltipProps, ExtremeTooltipProps } from './line-chart-helpers';
5
+ /** Controller-specific prop type. Extends the framework-agnostic
6
+ * `LineChartBaseProps` (in `line-chart-helpers.ts`) with the four
7
+ * render-prop fields whose return type is widened to `unknown` so both
8
+ * the React adapter (returns `React.ReactNode`) and the Solid adapter
9
+ * (returns `JSX.Element`) pass type-check via covariance. */
10
+ export interface LineChartControllerProps extends LineChartBaseProps {
11
+ tooltip?: boolean | ((p: LineChartTooltipProps) => unknown);
12
+ extremeTooltip?: boolean | ((p: ExtremeTooltipProps) => unknown);
13
+ staleBanner?: boolean | ((p: StaleBannerRenderProps) => unknown);
14
+ connectionIndicator?: ConnectionIndicator | ((p: ConnectionIndicatorRenderProps) => unknown);
15
+ }
16
+ /** Provider snapshot the controller consumes. Mirrors `ChartsProviderValue`
17
+ * (declared in src/react/charts-provider.tsx and src/solid/charts-provider.tsx)
18
+ * but kept as a structural type so this file stays framework-agnostic. */
19
+ export interface LineChartProviderSnapshot {
20
+ theme: import('../personalization').ThemeInput;
21
+ palette: string;
22
+ locale: string;
23
+ timeZone: string | undefined;
24
+ visualStyle: import('../personalization').VisualStyle;
25
+ outlineFillColor: "auto" | string;
26
+ outlineFillOpacity: number;
27
+ cornerRadius: number;
28
+ borderWidth: number;
29
+ accents: boolean;
30
+ osTheme: import('../personalization').Theme;
31
+ appTheme: import('../personalization').Theme;
32
+ }
33
+ /** Snapshot of derived state the adapter exposes to JSX.
34
+ * Recomputed inside `update()` and pushed via `onContextChange`. */
35
+ export interface LineChartRenderContext {
36
+ personalization: Personalization;
37
+ formatter: ChartFormatter;
38
+ resolvedLocaleBase: string;
39
+ resolvedTimeZone: string | undefined;
40
+ series: LineSeries;
41
+ secondarySeriesList: readonly SecondarySeriesDraw[];
42
+ stackedLayout: StackingLayout | null;
43
+ primaryColorOverride: string | undefined;
44
+ ariaLabel: string;
45
+ isSparkline: boolean;
46
+ cssWidth: number;
47
+ cssHeight: number;
48
+ }
49
+ export interface LineChartControllerCallbacks {
50
+ onContextChange(ctx: LineChartRenderContext): void;
51
+ onHoverChange(hover: HoverState | null): void;
52
+ onExtremeHoverChange(eh: ExtremeHoverState | null): void;
53
+ onLiveStateChange(s: LiveState): void;
54
+ onReducedMotionChange(v: boolean): void;
55
+ onResolvedIndicatorsChange(inds: readonly ResolvedIndicator[]): void;
56
+ }
57
+ export interface LineChartControllerMountOptions extends LineChartControllerCallbacks {
58
+ /** The chart's outer container DOM node. `null` in sparkline mode (only
59
+ * the static canvas is mounted). */
60
+ container: HTMLDivElement | null;
61
+ staticCanvas: HTMLCanvasElement;
62
+ /** Dynamic-layer canvas. `null` in sparkline mode. */
63
+ dynamicCanvas: HTMLCanvasElement | null;
64
+ initialProps: LineChartControllerProps;
65
+ initialProvider: LineChartProviderSnapshot;
66
+ }
67
+ export declare class LineChartController {
68
+ private staticCanvas;
69
+ private dynamicCanvas;
70
+ private callbacks;
71
+ private props;
72
+ private providerCtx;
73
+ private handle;
74
+ private hoverState;
75
+ /** Latest extreme-pill hover; mirrored to the adapter via
76
+ * `onExtremeHoverChange` for tooltip JSX. The controller keeps the
77
+ * reference so future extreme-pill timing logic (e.g. auto-dismiss
78
+ * on data update) has somewhere to read from. */
79
+ private extremeHoverState;
80
+ private dynCfg;
81
+ private liveStateInputs;
82
+ private reducedMotion;
83
+ private liveState;
84
+ private resolvedIndicators;
85
+ private series;
86
+ private historySeries;
87
+ private combinedSeries;
88
+ private liveTickTimes;
89
+ private liveTickValues;
90
+ private liveTickLength;
91
+ private liveTickCapacity;
92
+ /** Source-data identity tracked at last resolveDerived. When it
93
+ * changes the live-tick ring is reset (host has provided a new
94
+ * baseline; in-flight ticks predate it). */
95
+ private liveTickSourceId;
96
+ /** Coalesces back-to-back onTick calls in one rAF - only one static
97
+ * draw per frame even if 30 ticks arrive in 16ms. */
98
+ private onTickRafId;
99
+ private personalization;
100
+ private resolvedLocale;
101
+ private formatter;
102
+ private secondarySeriesList;
103
+ private stackedLayout;
104
+ private primaryColorOverride;
105
+ private isSparkline;
106
+ /** Dirty-rect tracking for partial dynamic-layer repaints.
107
+ * Crosshair / hover overlays disturb only thin
108
+ * strips (V + H + small marker) - clipping to those gives a real
109
+ * GPU-fill saving. Auto-disabled below `shouldUseDirtyRects`
110
+ * threshold; force-disabled via `partialRepaints: false` prop. */
111
+ private dirtyRing;
112
+ /** Reused multi-rect scratch - `flushAll` populates this in-place. */
113
+ private dirtyScratch;
114
+ private useDirtyRects;
115
+ /** Previous hover snapshot - used to compute the "old crosshair" rect
116
+ * on hover transitions so the leaving crosshair gets cleared too. */
117
+ private prevHoverSnapX;
118
+ private prevHoverSnapY;
119
+ private prevHoverActive;
120
+ /** Sparkline bitmap cache. For <150px containers,
121
+ * rendering the curve costs more than blitting a cached bitmap. Cache
122
+ * is keyed on every input that affects pixels - palette, theme, line
123
+ * width / dash, curve type, viewport size, data revision. */
124
+ private sparklineCache;
125
+ private mqCleanup;
126
+ private staleTimeoutId;
127
+ private indicatorAbort;
128
+ /** 50ms trailing debounce for kickIndicatorCompute - rapid param
129
+ * changes (e.g. dragging an indicator slider) coalesce into a single
130
+ * recompute. */
131
+ private indicatorComputeDebounceId;
132
+ private rafId;
133
+ /** Visibility source - pauses the rAF loop when the chart is in a
134
+ * hidden tab OR scrolled off-screen. */
135
+ private visibility;
136
+ private visibilityUnsubscribe;
137
+ /** Cancellation flag for the in-flight static-draw async work. Bumped
138
+ * on every redraw + on dispose so any pending TimeAxis awaits short-
139
+ * circuit before they touch a freed handle. */
140
+ private staticDrawAbort;
141
+ private taHandle;
142
+ /** True after `dispose()`. Subsequent calls become no-ops. */
143
+ private disposed;
144
+ constructor(opts: LineChartControllerMountOptions);
145
+ /** Adapter must call this whenever its props or its provider snapshot
146
+ * changes. Idempotent for unchanged inputs. */
147
+ update(props: LineChartControllerProps, providerCtx: LineChartProviderSnapshot): void;
148
+ handlePointerMove(e: PointerEvent): void;
149
+ handlePointerLeave(): void;
150
+ /** Apply an externally-driven crosshair time (e.g. coming from a sibling
151
+ * chart inside `<ChartGroup>` with `syncCrosshair: true`). Suppressed
152
+ * when this chart already has a local hover (the user is hovering this
153
+ * chart - its own hover is the source of truth). When `time` is null,
154
+ * the synced crosshair is cleared. */
155
+ applyExternalCrosshair(time: number | null): void;
156
+ /** Imperative live-tick API. Primitive args
157
+ * (no object literals, no per-call allocation in steady state once
158
+ * the ring buffer has settled). Multiple ticks within one rAF
159
+ * coalesce into a single static draw.
160
+ *
161
+ * `_size` is accepted for API parity with CandleChart/streaming
162
+ * consumers but is unused for line charts (line is value-over-time;
163
+ * size doesn't affect the rendered geometry). */
164
+ onTick(time: number, price: number, _size?: number): void;
165
+ /** Internal: build a `LineSeries` that concatenates the host's
166
+ * base data with the in-flight live ticks. Allocates one pair of
167
+ * typed arrays per static draw - bounded by total tick count. */
168
+ private materializeWithLiveTicks;
169
+ dispose(): void;
170
+ private setHover;
171
+ private setExtremeHover;
172
+ /** Recompute series + personalization + formatter + secondary list +
173
+ * stackedLayout + primaryColorOverride. Pushes a fresh
174
+ * `LineChartRenderContext` to the adapter for JSX rendering. */
175
+ private resolveDerived;
176
+ private applyDynamicCfgFromProps;
177
+ private applyLiveStateInputsFromProps;
178
+ private setupReducedMotionWatcher;
179
+ private tearDownReducedMotionWatcher;
180
+ private kickStaleTimeout;
181
+ /** Debounced wrapper around `kickIndicatorCompute` - coalesces rapid
182
+ * prop changes (e.g. an indicator slider being dragged) into a single
183
+ * engine recompute after 50ms of quiet (coalesced compute on
184
+ * rapid param changes). */
185
+ private kickIndicatorComputeDebounced;
186
+ private kickIndicatorCompute;
187
+ private kickRafLoop;
188
+ private tearDownRafLoop;
189
+ /** Push crosshair-overlay disturbance rects into the dirty ring for
190
+ * this and the previous hover position. The rects must cover every
191
+ * pixel that will be drawn (or was drawn last
192
+ * frame) - V-strip (vertical line + marker), H-strip (horizontal
193
+ * line), live-bar indicator region.
194
+ *
195
+ * No-op when partial repaints are off - caller falls through to a
196
+ * full-canvas clear in that case. */
197
+ private pushDynamicDirtyRects;
198
+ /** Wrap `drawDynamicLayer` with dirty-rect flushing when partial
199
+ * repaints are active. Returns the call to make this a single line
200
+ * at every existing call site. */
201
+ private repaintDynamicWith;
202
+ /** The static-draw orchestration. Mounts the static canvas, awaits the
203
+ * engine TimeAxis, computes layout + colors, calls `drawFullLineChart`,
204
+ * saves the resulting `ChartHandle`, paints the dynamic layer once. */
205
+ private runStaticDraw;
206
+ }
207
+ /** Re-export the underlying types so adapters can reference them
208
+ * without dipping into `src/charts/line-chart-helpers`. */
209
+ export type { HoverState, ExtremeHoverState, ResolvedIndicator, SecondarySeriesDraw, ChartHandle, ChartLayout, DynamicCfg, LiveStateInputs, LineChartBaseProps, } from './line-chart-helpers';