@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,107 @@
1
+ import { Personalization, ThemeInput, VisualStyle, Theme, LabelBehavior, TreemapColorScale, ViewMode, RadiusProportion, LabelRotation, ResolvedLabelContent, ChartFormatter } from '../personalization';
2
+ import { Hierarchy } from './hierarchy';
3
+ import { HoverState, SunburstChartBaseProps, SunburstChartTooltipProps } from './sunburst-chart-helpers';
4
+ export interface SunburstChartProviderSnapshot {
5
+ theme: ThemeInput;
6
+ palette: string;
7
+ locale: string;
8
+ timeZone: string | undefined;
9
+ visualStyle: VisualStyle;
10
+ outlineFillColor: "auto" | string;
11
+ outlineFillOpacity: number;
12
+ cornerRadius: number;
13
+ borderWidth: number;
14
+ accents: boolean;
15
+ osTheme: Theme;
16
+ appTheme: Theme;
17
+ }
18
+ export interface SunburstChartRenderContext {
19
+ personalization: Personalization;
20
+ formatter: ChartFormatter;
21
+ resolvedLocaleBase: string;
22
+ resolvedTimeZone: string | undefined;
23
+ hierarchy: Hierarchy;
24
+ currentPath: readonly string[];
25
+ rootIdx: number;
26
+ resolvedLabelBehavior: LabelBehavior;
27
+ resolvedColorScale: TreemapColorScale;
28
+ resolvedViewMode: ViewMode;
29
+ resolvedRadiusProportion: RadiusProportion;
30
+ resolvedLabelRotation: LabelRotation;
31
+ resolvedLabelContent: ResolvedLabelContent;
32
+ showBreadcrumb: boolean;
33
+ totalValue: number;
34
+ ariaLabel: string;
35
+ cssWidth: number;
36
+ cssHeight: number;
37
+ /** True when drilled in (rootIdx is not the topmost hierarchy node).
38
+ * Hosts use this to render the center back-button overlay. */
39
+ isDrilled: boolean;
40
+ /** Diameter of the center disc reserved for the back-button overlay
41
+ * when `isDrilled` is true. 0 when nested. */
42
+ centerDiscDiameter: number;
43
+ /** Name of the currently-drilled-into node (= the visible root). */
44
+ rootName: string;
45
+ /** Aggregated value of the currently-drilled-into root. */
46
+ rootValue: number;
47
+ /** Aggregated delta of the currently-drilled-into root (NaN when none). */
48
+ rootDelta: number;
49
+ }
50
+ export interface SunburstChartControllerCallbacks {
51
+ onContextChange(ctx: SunburstChartRenderContext): void;
52
+ onHoverChange(hover: HoverState | null): void;
53
+ }
54
+ export interface SunburstChartControllerProps extends SunburstChartBaseProps {
55
+ tooltip?: undefined | false | ((p: SunburstChartTooltipProps) => unknown);
56
+ }
57
+ export interface SunburstChartControllerMountOptions extends SunburstChartControllerCallbacks {
58
+ container?: HTMLElement | null;
59
+ staticCanvas: HTMLCanvasElement;
60
+ dynamicCanvas: HTMLCanvasElement | null;
61
+ initialProps: SunburstChartControllerProps;
62
+ initialProvider: SunburstChartProviderSnapshot;
63
+ }
64
+ export declare class SunburstChartController {
65
+ private staticCanvas;
66
+ private dynamicCanvas;
67
+ private callbacks;
68
+ private props;
69
+ private providerCtx;
70
+ private handle;
71
+ private hoverState;
72
+ private dynCfg;
73
+ private hierarchy;
74
+ private personalization;
75
+ private resolvedLocale;
76
+ private formatter;
77
+ private resolvedLabelBehavior;
78
+ private resolvedColorScale;
79
+ private resolvedViewMode;
80
+ private resolvedRadiusProportion;
81
+ private resolvedLabelRotation;
82
+ private resolvedLabelContent;
83
+ private resolvedDepthLimit;
84
+ private internalPath;
85
+ private currentPath;
86
+ private rootIdx;
87
+ private nodeColors;
88
+ private a0Buf;
89
+ private a1Buf;
90
+ private r0Buf;
91
+ private r1Buf;
92
+ private staticDrawAbort;
93
+ private disposed;
94
+ private visGate;
95
+ constructor(opts: SunburstChartControllerMountOptions);
96
+ update(props: SunburstChartControllerProps, providerCtx: SunburstChartProviderSnapshot): void;
97
+ handlePointerMove(e: PointerEvent): void;
98
+ handlePointerLeave(): void;
99
+ drillTo(idx: number): void;
100
+ handleClick(e: MouseEvent): void;
101
+ setPath(newPath: readonly string[]): void;
102
+ dispose(): void;
103
+ private setHover;
104
+ private resolveDerived;
105
+ private applyDynamicCfgFromProps;
106
+ private runStaticDraw;
107
+ }
@@ -0,0 +1,143 @@
1
+ import { Personalization, ThemeInput, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat, LegendPosition, LegendVisibility, LabelBehavior, DepthLimitInput, TreemapColorScale, ViewMode, RadiusProportion, LabelRotation, LabelContentInput, ResolvedLabelContent, ChartFormatter } from '../personalization';
2
+ import { Viewport } from '../viewport/viewport-sizer';
3
+ import { GridStyle } from '../rendering/draw/grid';
4
+ import { CrosshairMarker } from '../rendering/draw/crosshair';
5
+ import { Hierarchy, HierarchyNode } from './hierarchy';
6
+ import { resolveTreemapColors } from './treemap-chart-helpers';
7
+ export type { HierarchyNode };
8
+ export interface SunburstChartTooltipProps {
9
+ readonly idx: number;
10
+ readonly name: string;
11
+ readonly value: number;
12
+ readonly percent: number;
13
+ readonly depth: number;
14
+ readonly path: readonly string[];
15
+ readonly color: string;
16
+ readonly pointerX: number;
17
+ readonly pointerY: number;
18
+ readonly containerWidth: number;
19
+ readonly containerHeight: number;
20
+ readonly theme: import('../personalization').Theme;
21
+ readonly palette: import('../personalization').Palette;
22
+ readonly locale: string;
23
+ readonly timeZone: string | undefined;
24
+ readonly formatter: ChartFormatter;
25
+ }
26
+ export interface SunburstChartBaseProps {
27
+ /** Root hierarchy - a tree of `{ name, value?, children? }`. The
28
+ * chart renders concentric rings, one per depth level. */
29
+ data?: HierarchyNode;
30
+ /** Default 'uniform'. */
31
+ radiusProportion?: RadiusProportion;
32
+ /** Default 'horizontal'. */
33
+ labelRotation?: LabelRotation;
34
+ /** Default false. Same shape as DonutChart's centerLabel. */
35
+ centerLabel?: boolean | string;
36
+ /** Inherited from PieChart-related axes - gap between slices. Default 1°. */
37
+ padAngle?: number;
38
+ /** Inherited from TreemapChart axes. */
39
+ labelBehavior?: LabelBehavior;
40
+ labelContent?: LabelContentInput;
41
+ depthLimit?: DepthLimitInput;
42
+ colorScale?: TreemapColorScale;
43
+ viewMode?: ViewMode;
44
+ breadcrumb?: boolean;
45
+ currentPath?: readonly string[];
46
+ onPathChange?: (path: readonly string[]) => void;
47
+ legend?: LegendVisibility;
48
+ legendPosition?: LegendPosition;
49
+ crosshairVisible?: boolean;
50
+ crosshairLineStyle?: GridStyle;
51
+ crosshairMarker?: CrosshairMarker;
52
+ width?: number;
53
+ height?: number;
54
+ theme?: ThemeInput;
55
+ palette?: string;
56
+ visualStyle?: "Fill" | "Outline";
57
+ outlineFillColor?: "auto" | string;
58
+ outlineFillOpacity?: number;
59
+ pixelDensityCap?: number;
60
+ fastMode?: boolean;
61
+ /** Glow + glow-color axes. */
62
+ glow?: import('../personalization/axes/glow').GlowInput;
63
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
64
+ /** Pattern fills. */
65
+ pattern?: import('../personalization/axes/pattern').PatternInput;
66
+ patternScale?: number;
67
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
68
+ ariaLabel?: string;
69
+ accents?: boolean;
70
+ locale?: string;
71
+ timeZone?: string;
72
+ cornerRadius?: number;
73
+ borderWidth?: number;
74
+ digitGrouping?: DigitGrouping;
75
+ numberAbbreviation?: NumberAbbreviation;
76
+ decimalPlaces?: DecimalPlaces;
77
+ currency?: string;
78
+ currencyDisplay?: CurrencyDisplay;
79
+ percentPrecision?: PercentPrecision;
80
+ dateFormat?: DateFormat;
81
+ timeFormat?: TimeFormat;
82
+ }
83
+ export declare const DEFAULT_SUNBURST_PAD_ANGLE_DEG = 1.5;
84
+ export declare const DEFAULT_FONT = "11px system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif";
85
+ export interface HoverState {
86
+ readonly pointerX: number;
87
+ readonly pointerY: number;
88
+ readonly idx: number;
89
+ readonly name: string;
90
+ readonly value: number;
91
+ readonly percent: number;
92
+ readonly depth: number;
93
+ readonly path: readonly string[];
94
+ readonly color: string;
95
+ }
96
+ export interface DynamicCfg {
97
+ readonly crosshairVisible: boolean;
98
+ readonly crosshairLineStyle: GridStyle;
99
+ readonly crosshairMarker: CrosshairMarker;
100
+ }
101
+ export interface ChartLayout {
102
+ innerLeft: number;
103
+ innerRight: number;
104
+ innerTop: number;
105
+ innerBottom: number;
106
+ cx: number;
107
+ cy: number;
108
+ maxRadius: number;
109
+ /** Per-node geometry. */
110
+ a0: Float64Array;
111
+ a1: Float64Array;
112
+ r0: Float64Array;
113
+ r1: Float64Array;
114
+ rootIdx: number;
115
+ maxRelativeDepth: number;
116
+ viewport: Viewport;
117
+ }
118
+ export interface ChartHandle {
119
+ readonly dynamicCtx: CanvasRenderingContext2D | null;
120
+ readonly layout: ChartLayout;
121
+ readonly crosshairLineColor: string;
122
+ readonly crosshairMarkerStroke: string;
123
+ readonly nodeColors: readonly string[];
124
+ }
125
+ export declare function defaultAriaLabel(h: Hierarchy): string;
126
+ export declare function pathTo(h: Hierarchy, idx: number): readonly string[];
127
+ export { resolveTreemapColors };
128
+ export interface DrawFullSunburstArgs {
129
+ ctx: CanvasRenderingContext2D;
130
+ h: Hierarchy;
131
+ layout: ChartLayout;
132
+ nodeColors: readonly string[];
133
+ personalization: Personalization;
134
+ borderWidth: number;
135
+ labelRotation: LabelRotation;
136
+ resolvedLabelContent: ResolvedLabelContent;
137
+ formatter: ChartFormatter;
138
+ totalValue: number;
139
+ viewMode?: ViewMode;
140
+ }
141
+ export declare function drawFullSunburstChart(args: DrawFullSunburstArgs): void;
142
+ export declare function drawSunburstDynamicLayer(handle: ChartHandle, hover: HoverState | null, cfg: DynamicCfg): void;
143
+ export declare function findSliceAtRadial(h: Hierarchy, layout: ChartLayout, px: number, py: number): number;
@@ -0,0 +1,40 @@
1
+ import { RadiusProportion } from '../personalization/axes/radius-proportion';
2
+ import { Hierarchy } from './hierarchy';
3
+ export interface SunburstLayoutOptions {
4
+ /** Starting angle in radians (root spans [startAngle, endAngle]). */
5
+ readonly startAngle: number;
6
+ readonly endAngle: number;
7
+ /** Outer radius in pixels (root center = 0). */
8
+ readonly maxRadius: number;
9
+ /** Gap between sibling slices (radians). */
10
+ readonly padAngle: number;
11
+ /** Radial gap (px) BETWEEN concentric rings. The innermost visible
12
+ * ring's inner edge and the outermost ring's outer edge are left
13
+ * untouched - only the boundaries between rings get the inset. */
14
+ readonly ringGap?: number;
15
+ /** Ring-thickness allocation. */
16
+ readonly radiusProportion: RadiusProportion;
17
+ /** Maximum depth to render - interpreted as ABSOLUTE depth in the
18
+ * hierarchy. For nested mode (rootIdx === 0) this is identical to
19
+ * the relative depth from root. For drill-down (rootIdx > 0) the
20
+ * layout converts to relative via `maxDepth - depths[rootIdx]`. */
21
+ readonly maxDepth: number;
22
+ /** Which node is the visible root. Default 0 - the hierarchy root.
23
+ * When non-zero, the layout re-roots so children of `rootIdx` fill
24
+ * the entire angular range and the entire `[innerRadius, maxRadius]`
25
+ * radial range. */
26
+ readonly rootIdx?: number;
27
+ /** Center-disc radius (px) when re-rooted. The visible root takes
28
+ * `[0, innerRadius]` - typically used by hosts to reserve room for a
29
+ * back-button / drilled-parent label overlay. Default 0. */
30
+ readonly innerRadius?: number;
31
+ }
32
+ /** Lay out the entire hierarchy into the caller-owned arrays. Each must
33
+ * have length === h.length. */
34
+ export declare function layoutSunburst(h: Hierarchy, opts: SunburstLayoutOptions, a0: Float64Array, a1: Float64Array, r0: Float64Array, r1: Float64Array): void;
35
+ /** Equal-thickness rings. */
36
+ export declare function ringRadiiUniform(start: number, end: number, depth: number): readonly number[];
37
+ /** Ring thickness proportional to the total value at each depth level. */
38
+ export declare function ringRadiiValueWeighted(h: Hierarchy, start: number, end: number, depth: number): readonly number[];
39
+ /** Square-root-scaled compromise. */
40
+ export declare function ringRadiiSqrtWeighted(h: Hierarchy, start: number, end: number, depth: number): readonly number[];
@@ -0,0 +1,53 @@
1
+ import { ResolvedBoxSizing } from '../personalization/axes/box-sizing';
2
+ interface CandleSeriesView {
3
+ readonly times: Float64Array;
4
+ readonly opens: Float64Array;
5
+ readonly highs: Float64Array;
6
+ readonly lows: Float64Array;
7
+ readonly closes: Float64Array;
8
+ }
9
+ export declare function computeAtrApprox(c: CandleSeriesView, period: number): number;
10
+ export declare function resolveBoxValue(c: CandleSeriesView, sizing: ResolvedBoxSizing): number;
11
+ export interface RenkoBricks {
12
+ /** Each brick's bottom price. */
13
+ readonly bottomPrices: Float64Array;
14
+ /** Each brick's top price (always bottomPrices[i] + brickSize). */
15
+ readonly topPrices: Float64Array;
16
+ /** +1 for up brick, -1 for down brick. */
17
+ readonly directions: Int8Array;
18
+ /** Source candle index that printed this brick. Useful for tooltips. */
19
+ readonly sourceIdx: Int32Array;
20
+ readonly length: number;
21
+ readonly brickSize: number;
22
+ }
23
+ export type RenkoSource = "close" | "high-low";
24
+ export declare function buildRenkoBricks(c: CandleSeriesView, brickSize: number, reversalThreshold: number, source: RenkoSource): RenkoBricks;
25
+ export interface KagiLegs {
26
+ /** Start price of each leg. */
27
+ readonly startPrices: Float64Array;
28
+ /** End price of each leg. */
29
+ readonly endPrices: Float64Array;
30
+ /** +1 for up leg, -1 for down leg. */
31
+ readonly directions: Int8Array;
32
+ /** Whether this leg renders as Yang (thick / true) or Yin (thin / false).
33
+ * Resolved at draw time per `thicknessRule`. */
34
+ readonly thick: Uint8Array;
35
+ /** Source candle index where the leg ended. */
36
+ readonly sourceIdx: Int32Array;
37
+ readonly length: number;
38
+ }
39
+ export declare function buildKagiLegs(c: CandleSeriesView, reversalAmount: number, source: RenkoSource): KagiLegs;
40
+ export interface PnFColumns {
41
+ /** Each column's bottom-most box price. */
42
+ readonly bottomBoxes: Float64Array;
43
+ /** Each column's top-most box price. */
44
+ readonly topBoxes: Float64Array;
45
+ /** +1 for X (up) column, -1 for O (down) column. */
46
+ readonly directions: Int8Array;
47
+ /** Source candle index where this column ended. */
48
+ readonly sourceIdx: Int32Array;
49
+ readonly length: number;
50
+ readonly boxSize: number;
51
+ }
52
+ export declare function buildPnFColumns(c: CandleSeriesView, boxSize: number, reversalCount: number, source: RenkoSource): PnFColumns;
53
+ export {};
@@ -0,0 +1,103 @@
1
+ import { Personalization, ThemeInput, VisualStyle, Theme, TileLayout, LabelBehavior, TreemapColorScale, ViewMode, ResolvedLabelContent, ChartFormatter } from '../personalization';
2
+ import { Hierarchy } from './hierarchy';
3
+ import { HoverState, TreemapChartBaseProps, TreemapChartTooltipProps } from './treemap-chart-helpers';
4
+ export interface TreemapChartProviderSnapshot {
5
+ theme: ThemeInput;
6
+ palette: string;
7
+ locale: string;
8
+ timeZone: string | undefined;
9
+ visualStyle: VisualStyle;
10
+ outlineFillColor: "auto" | string;
11
+ outlineFillOpacity: number;
12
+ cornerRadius: number;
13
+ borderWidth: number;
14
+ accents: boolean;
15
+ osTheme: Theme;
16
+ appTheme: Theme;
17
+ }
18
+ export interface TreemapChartRenderContext {
19
+ personalization: Personalization;
20
+ formatter: ChartFormatter;
21
+ resolvedLocaleBase: string;
22
+ resolvedTimeZone: string | undefined;
23
+ hierarchy: Hierarchy;
24
+ /** Current root path (controlled or internal). Used by adapters to render breadcrumbs. */
25
+ currentPath: readonly string[];
26
+ /** Resolved root index for the current view (drill-down) - 0 in nested mode. */
27
+ rootIdx: number;
28
+ resolvedTileLayout: TileLayout;
29
+ resolvedLabelBehavior: LabelBehavior;
30
+ resolvedColorScale: TreemapColorScale;
31
+ resolvedViewMode: ViewMode;
32
+ resolvedLabelContent: ResolvedLabelContent;
33
+ showBreadcrumb: boolean;
34
+ totalValue: number;
35
+ ariaLabel: string;
36
+ cssWidth: number;
37
+ cssHeight: number;
38
+ }
39
+ export interface TreemapChartControllerCallbacks {
40
+ onContextChange(ctx: TreemapChartRenderContext): void;
41
+ onHoverChange(hover: HoverState | null): void;
42
+ }
43
+ export interface TreemapChartControllerProps extends TreemapChartBaseProps {
44
+ tooltip?: undefined | false | ((p: TreemapChartTooltipProps) => unknown);
45
+ }
46
+ export interface TreemapChartControllerMountOptions extends TreemapChartControllerCallbacks {
47
+ /** Outer container DOM node. Visibility source pauses draws when the
48
+ * chart is off-screen / in a hidden tab. */
49
+ container?: HTMLElement | null;
50
+ staticCanvas: HTMLCanvasElement;
51
+ dynamicCanvas: HTMLCanvasElement | null;
52
+ initialProps: TreemapChartControllerProps;
53
+ initialProvider: TreemapChartProviderSnapshot;
54
+ }
55
+ export declare class TreemapChartController {
56
+ private staticCanvas;
57
+ private dynamicCanvas;
58
+ private callbacks;
59
+ private props;
60
+ private providerCtx;
61
+ private handle;
62
+ private hoverState;
63
+ private dynCfg;
64
+ private hierarchy;
65
+ private personalization;
66
+ private resolvedLocale;
67
+ private formatter;
68
+ private resolvedTileLayout;
69
+ private resolvedLabelBehavior;
70
+ private resolvedColorScale;
71
+ private resolvedViewMode;
72
+ private resolvedLabelContent;
73
+ private resolvedDepthLimit;
74
+ /** Internal session-state path (used when host doesn't control). */
75
+ private internalPath;
76
+ private currentPath;
77
+ private rootIdx;
78
+ private nodeColors;
79
+ private nodeBoundsX0;
80
+ private nodeBoundsY0;
81
+ private nodeBoundsX1;
82
+ private nodeBoundsY1;
83
+ private staticDrawAbort;
84
+ private disposed;
85
+ private visGate;
86
+ constructor(opts: TreemapChartControllerMountOptions);
87
+ update(props: TreemapChartControllerProps, providerCtx: TreemapChartProviderSnapshot): void;
88
+ handlePointerMove(e: PointerEvent): void;
89
+ handlePointerLeave(): void;
90
+ /** Drill into a node by clicking it (drill-down mode). Adapters wire
91
+ * this to onClick on the canvas. Updates internal path or fires the
92
+ * onPathChange callback in controlled mode. */
93
+ drillTo(idx: number): void;
94
+ /** Adapter-level click handler - drill into the clicked tile. */
95
+ handleClick(e: MouseEvent): void;
96
+ /** Navigate breadcrumb. Adapters call this from breadcrumb clicks. */
97
+ setPath(newPath: readonly string[]): void;
98
+ dispose(): void;
99
+ private setHover;
100
+ private resolveDerived;
101
+ private applyDynamicCfgFromProps;
102
+ private runStaticDraw;
103
+ }
@@ -0,0 +1,163 @@
1
+ import { Personalization, ThemeInput, DigitGrouping, NumberAbbreviation, DecimalPlaces, CurrencyDisplay, PercentPrecision, DateFormat, TimeFormat, LegendPosition, LegendVisibility, TileLayout, LabelBehavior, DepthLimitInput, TreemapColorScale, ViewMode, LabelContentInput, ResolvedLabelContent, ChartFormatter } from '../personalization';
2
+ import { Viewport } from '../viewport/viewport-sizer';
3
+ import { CrosshairMarker } from '../rendering/draw/crosshair';
4
+ import { GridStyle } from '../rendering/draw/grid';
5
+ import { Hierarchy, HierarchyNode } from './hierarchy';
6
+ export type { HierarchyNode } from './hierarchy';
7
+ export interface TreemapChartTooltipProps {
8
+ readonly idx: number;
9
+ readonly name: string;
10
+ readonly value: number;
11
+ readonly percent: number;
12
+ readonly depth: number;
13
+ readonly path: readonly string[];
14
+ readonly color: string;
15
+ readonly pointerX: number;
16
+ readonly pointerY: number;
17
+ readonly containerWidth: number;
18
+ readonly containerHeight: number;
19
+ readonly theme: import('../personalization').Theme;
20
+ readonly palette: import('../personalization').Palette;
21
+ readonly locale: string;
22
+ readonly timeZone: string | undefined;
23
+ readonly formatter: ChartFormatter;
24
+ }
25
+ export interface TreemapChartBaseProps {
26
+ /** Root hierarchy - `{ name, value?, children? }`. The chart packs
27
+ * children into rectangles proportional to their value. */
28
+ data?: HierarchyNode;
29
+ /** Default 'squarify'. */
30
+ tileLayout?: TileLayout;
31
+ /** Default 2 px. */
32
+ tilePadding?: number;
33
+ /** Default 4 px. */
34
+ parentChildPadding?: number;
35
+ /** Default 'auto'. */
36
+ labelBehavior?: LabelBehavior;
37
+ /** Default 'name + percent'. */
38
+ labelContent?: LabelContentInput;
39
+ /** Default 'all'. */
40
+ depthLimit?: DepthLimitInput;
41
+ /** Default 'flat-categorical'. */
42
+ colorScale?: TreemapColorScale;
43
+ /** Default 'nested'. */
44
+ viewMode?: ViewMode;
45
+ /** Default true (drill-down only). */
46
+ breadcrumb?: boolean;
47
+ /** Controlled-mode current path (drill-down only). When omitted, the
48
+ * controller manages an internal session-state path. */
49
+ currentPath?: readonly string[];
50
+ /** Controlled-mode change handler. Required if `currentPath` is set. */
51
+ onPathChange?: (path: readonly string[]) => void;
52
+ legend?: LegendVisibility;
53
+ legendPosition?: LegendPosition;
54
+ crosshairVisible?: boolean;
55
+ crosshairLineStyle?: GridStyle;
56
+ crosshairMarker?: CrosshairMarker;
57
+ width?: number;
58
+ height?: number;
59
+ theme?: ThemeInput;
60
+ palette?: string;
61
+ visualStyle?: "Fill" | "Outline";
62
+ outlineFillColor?: "auto" | string;
63
+ outlineFillOpacity?: number;
64
+ pixelDensityCap?: number;
65
+ fastMode?: boolean;
66
+ /** Glow + glow-color axes. */
67
+ glow?: import('../personalization/axes/glow').GlowInput;
68
+ glowColor?: import('../personalization/axes/glow').GlowColorInput;
69
+ /** Pattern fills. */
70
+ pattern?: import('../personalization/axes/pattern').PatternInput;
71
+ patternScale?: number;
72
+ patternColor?: import('../personalization/axes/pattern').PatternColorInput;
73
+ ariaLabel?: string;
74
+ accents?: boolean;
75
+ locale?: string;
76
+ timeZone?: string;
77
+ cornerRadius?: number;
78
+ borderWidth?: number;
79
+ digitGrouping?: DigitGrouping;
80
+ numberAbbreviation?: NumberAbbreviation;
81
+ decimalPlaces?: DecimalPlaces;
82
+ currency?: string;
83
+ currencyDisplay?: CurrencyDisplay;
84
+ percentPrecision?: PercentPrecision;
85
+ dateFormat?: DateFormat;
86
+ timeFormat?: TimeFormat;
87
+ }
88
+ export declare const DEFAULT_FONT = "12px system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif";
89
+ export declare const DEFAULT_LABEL_FONT_SIZE = 11;
90
+ export declare const DEFAULT_TILE_PADDING_PX = 4;
91
+ export declare const DEFAULT_PARENT_CHILD_PADDING_PX = 2;
92
+ export declare const BREADCRUMB_HEIGHT_PX = 28;
93
+ export interface HoverState {
94
+ readonly pointerX: number;
95
+ readonly pointerY: number;
96
+ readonly idx: number;
97
+ readonly name: string;
98
+ readonly value: number;
99
+ readonly percent: number;
100
+ readonly depth: number;
101
+ readonly path: readonly string[];
102
+ readonly color: string;
103
+ }
104
+ export interface DynamicCfg {
105
+ readonly crosshairVisible: boolean;
106
+ readonly crosshairLineStyle: GridStyle;
107
+ readonly crosshairMarker: CrosshairMarker;
108
+ }
109
+ export interface ChartLayout {
110
+ innerLeft: number;
111
+ innerRight: number;
112
+ innerTop: number;
113
+ innerBottom: number;
114
+ /** Per-node bounds (length = h.length). */
115
+ x0: Float64Array;
116
+ y0: Float64Array;
117
+ x1: Float64Array;
118
+ y1: Float64Array;
119
+ /** Subtree root index (drill-down: this is the node currently displayed; nested: root = 0). */
120
+ rootIdx: number;
121
+ /** Effective max depth to render (relative to rootIdx). */
122
+ maxRelativeDepth: number;
123
+ viewport: Viewport;
124
+ }
125
+ export interface ChartHandle {
126
+ readonly dynamicCtx: CanvasRenderingContext2D | null;
127
+ readonly layout: ChartLayout;
128
+ readonly crosshairLineColor: string;
129
+ readonly crosshairMarkerStroke: string;
130
+ /** Per-node CSS colors. */
131
+ readonly nodeColors: readonly string[];
132
+ }
133
+ export declare function defaultAriaLabel(h: Hierarchy): string;
134
+ /** Build a path of names from root to `idx`. */
135
+ export declare function pathTo(h: Hierarchy, idx: number): readonly string[];
136
+ /**
137
+ * `parentColorMode` controls how non-leaf nodes are colored under the
138
+ * `directional` scale:
139
+ * - "neutral" (treemap default): parents render as muted neutral
140
+ * because in a treemap they CONTAIN their children - coloring them
141
+ * directionally would compete visually with the children inside.
142
+ * - "directional" (sunburst): parents sit on their OWN radial ring,
143
+ * separate from children, so they get their aggregated direction
144
+ * color just like leaves do.
145
+ */
146
+ export declare function resolveTreemapColors(h: Hierarchy, rootIdx: number, scale: TreemapColorScale, variant: import('../personalization/palette/types').PaletteVariant, viewMode?: ViewMode, _palette?: import('../personalization/palette/types').Palette, _theme?: import('../personalization/palette/types').Theme, parentColorMode?: "neutral" | "directional"): readonly string[];
147
+ export interface DrawFullTreemapArgs {
148
+ ctx: CanvasRenderingContext2D;
149
+ h: Hierarchy;
150
+ layout: ChartLayout;
151
+ nodeColors: readonly string[];
152
+ personalization: Personalization;
153
+ cornerRadius: number;
154
+ borderWidth: number;
155
+ labelBehavior: LabelBehavior;
156
+ resolvedLabelContent: ResolvedLabelContent;
157
+ formatter: ChartFormatter;
158
+ totalValue: number;
159
+ viewMode: ViewMode;
160
+ }
161
+ export declare function drawFullTreemapChart(args: DrawFullTreemapArgs): void;
162
+ export declare function drawTreemapDynamicLayer(handle: ChartHandle, hover: HoverState | null, cfg: DynamicCfg): void;
163
+ export declare function findTileAt(h: Hierarchy, layout: ChartLayout, px: number, py: number, viewMode: ViewMode): number;
@@ -0,0 +1,29 @@
1
+ import { TileLayout } from '../personalization/axes/tile-layout';
2
+ import { Hierarchy } from './hierarchy';
3
+ export interface TreemapBounds {
4
+ /** Outer rect of the layout. */
5
+ readonly x0: number;
6
+ readonly y0: number;
7
+ readonly x1: number;
8
+ readonly y1: number;
9
+ /** Inset between siblings, in pixels. */
10
+ readonly padding: number;
11
+ /** Extra inset for nested children inside their parent (creates a
12
+ * visible "frame" effect for hierarchy). */
13
+ readonly parentChildPadding: number;
14
+ /** Extra top inset on parent tiles to reserve space for the sector
15
+ * header label. Applied only at the level *above* leaves in
16
+ * multi-depth nested treemaps (so the sector container reserves
17
+ * room for "Banking 3.9B ▼ 1.7%" at its top without overlapping
18
+ * the ticker tiles inside). 0 / undefined = no reservation. */
19
+ readonly headerPadding?: number;
20
+ }
21
+ /** Lay out the entire hierarchy into the caller-owned `x0/y0/x1/y1` arrays.
22
+ * `length` of each must equal `h.length`. The root's bounds come from
23
+ * `bounds`; children recurse inside their parent's bounds minus padding. */
24
+ export declare function layoutTreemap(h: Hierarchy, layout: TileLayout, bounds: TreemapBounds, x0: Float64Array, y0: Float64Array, x1: Float64Array, y1: Float64Array): void;
25
+ /** Re-lay-out only the subtree rooted at `rootIdx` inside the given
26
+ * bounds. The root's own bounds are set to `bounds.{x0,y0,x1,y1}` and
27
+ * its descendants recurse inside that rect. Used by drill-down to
28
+ * make a non-root subtree fill the whole chart area. */
29
+ export declare function layoutTreemapSubtree(h: Hierarchy, rootIdx: number, layout: TileLayout, bounds: TreemapBounds, x0: Float64Array, y0: Float64Array, x1: Float64Array, y1: Float64Array): void;
@@ -0,0 +1,38 @@
1
+ export interface ChartControllerHandle<TProps, THandle = void> {
2
+ /** Replace the controller's prop snapshot. Triggers a redraw on next frame. */
3
+ update(props: TProps): void;
4
+ /** Release all resources: cancel rAF, disconnect observers, dispose engine handles. Idempotent. */
5
+ dispose(): void;
6
+ /**
7
+ * Imperative handle exposed to host code via the adapter's ref. Charts that
8
+ * have no imperative API set this to `void`; charts like CandleChart return a
9
+ * concrete object with methods (e.g. `startTrendline()`).
10
+ */
11
+ readonly handle: THandle;
12
+ }
13
+ /**
14
+ * Mount options every controller accepts. The adapter passes the host-provided
15
+ * container DOM node + initial props; the controller does the rest.
16
+ */
17
+ export interface ChartControllerMountOptions<TProps> {
18
+ /** The host container element. Adapter creates it via its framework's JSX. */
19
+ container: HTMLElement;
20
+ /** Initial props snapshot. Subsequent prop changes flow via `update()`. */
21
+ initialProps: TProps;
22
+ /**
23
+ * Optional cross-chart context (theme defaults, palette registry, locale,
24
+ * shared engine session). Adapter resolves it from its provider and hands it
25
+ * in here. `null` is acceptable - controllers fall back to library defaults.
26
+ */
27
+ context?: ChartsControllerContext | null;
28
+ }
29
+ /**
30
+ * Subset of personalization-provider state that controllers consume directly.
31
+ * Keep this framework-free - it's a plain object the adapter populates from
32
+ * its ChartsProvider.
33
+ */
34
+ export interface ChartsControllerContext {
35
+ readonly version: number;
36
+ }
37
+ /** Constructor signature for a chart controller. */
38
+ export type ChartControllerConstructor<TProps, THandle = void> = new (options: ChartControllerMountOptions<TProps>) => ChartControllerHandle<TProps, THandle>;