semiotic 3.5.0 → 3.5.2

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 (105) hide show
  1. package/CLAUDE.md +21 -19
  2. package/README.md +22 -16
  3. package/ai/chartSuggestions.cjs +191 -3
  4. package/ai/componentMetadata.cjs +3 -3
  5. package/ai/dist/mcp-server.js +266 -48
  6. package/ai/examples.md +68 -0
  7. package/ai/schema.json +900 -1
  8. package/ai/system-prompt.md +4 -1
  9. package/dist/components/Tooltip/FlippingTooltip.d.ts +16 -1
  10. package/dist/components/charts/geo/FlowMap.d.ts +13 -4
  11. package/dist/components/charts/index.d.ts +6 -0
  12. package/dist/components/charts/network/OrbitDiagram.d.ts +5 -5
  13. package/dist/components/charts/network/ProcessSankey.d.ts +141 -0
  14. package/dist/components/charts/network/processSankey/algorithm.d.ts +136 -0
  15. package/dist/components/charts/network/processSankey/buildScenes.d.ts +45 -0
  16. package/dist/components/charts/network/processSankey/ribbonInputs.d.ts +32 -0
  17. package/dist/components/charts/network/processSankey/streamingLayout.d.ts +58 -0
  18. package/dist/components/charts/network/processSankey/tooltipUtils.d.ts +41 -0
  19. package/dist/components/charts/ordinal/BarChart.d.ts +14 -0
  20. package/dist/components/charts/ordinal/BoxPlot.d.ts +2 -0
  21. package/dist/components/charts/ordinal/DotPlot.d.ts +11 -0
  22. package/dist/components/charts/ordinal/GaugeChart.d.ts +20 -0
  23. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +2 -0
  24. package/dist/components/charts/ordinal/Histogram.d.ts +2 -0
  25. package/dist/components/charts/ordinal/LikertChart.d.ts +2 -0
  26. package/dist/components/charts/ordinal/RidgelinePlot.d.ts +2 -0
  27. package/dist/components/charts/ordinal/StackedBarChart.d.ts +2 -0
  28. package/dist/components/charts/ordinal/SwarmPlot.d.ts +2 -0
  29. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +7 -0
  30. package/dist/components/charts/ordinal/ViolinPlot.d.ts +2 -0
  31. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +14 -11
  32. package/dist/components/charts/realtime/defaultRealtimeTooltip.d.ts +43 -0
  33. package/dist/components/charts/shared/axisExtent.d.ts +59 -0
  34. package/dist/components/charts/shared/chartSpecs.d.ts +75 -0
  35. package/dist/components/charts/shared/colorUtils.d.ts +8 -2
  36. package/dist/components/charts/shared/networkUtils.d.ts +3 -5
  37. package/dist/components/charts/shared/radialGeometry.d.ts +99 -0
  38. package/dist/components/charts/shared/regressionUtils.d.ts +59 -0
  39. package/dist/components/charts/shared/selectionUtils.d.ts +8 -1
  40. package/dist/components/charts/shared/streamPropsHelpers.d.ts +5 -0
  41. package/dist/components/charts/shared/types.d.ts +13 -0
  42. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +75 -0
  43. package/dist/components/charts/shared/useEncodingDomain.d.ts +48 -0
  44. package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -1
  45. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +148 -0
  46. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +87 -0
  47. package/dist/components/charts/shared/useSeriesFeatures.d.ts +57 -0
  48. package/dist/components/charts/shared/useStreamStatus.d.ts +33 -0
  49. package/dist/components/charts/shared/useXYLineStyle.d.ts +69 -0
  50. package/dist/components/charts/shared/useXYPointStyle.d.ts +87 -0
  51. package/dist/components/charts/xy/AreaChart.d.ts +38 -0
  52. package/dist/components/charts/xy/BubbleChart.d.ts +13 -0
  53. package/dist/components/charts/xy/CandlestickChart.d.ts +4 -0
  54. package/dist/components/charts/xy/ConnectedScatterplot.d.ts +20 -0
  55. package/dist/components/charts/xy/DifferenceChart.d.ts +172 -0
  56. package/dist/components/charts/xy/Heatmap.d.ts +4 -0
  57. package/dist/components/charts/xy/LineChart.d.ts +12 -0
  58. package/dist/components/charts/xy/MinimapChart.d.ts +7 -0
  59. package/dist/components/charts/xy/Scatterplot.d.ts +38 -0
  60. package/dist/components/charts/xy/StackedAreaChart.d.ts +12 -0
  61. package/dist/components/geometry/ribbonGeometry.d.ts +76 -0
  62. package/dist/components/semiotic-ai.d.ts +2 -0
  63. package/dist/components/semiotic-network.d.ts +4 -0
  64. package/dist/components/semiotic-realtime.d.ts +2 -0
  65. package/dist/components/semiotic-utils.d.ts +4 -0
  66. package/dist/components/semiotic-xy.d.ts +2 -0
  67. package/dist/components/semiotic.d.ts +3 -3
  68. package/dist/components/server/serverChartConfigs.d.ts +2 -0
  69. package/dist/components/stream/GeoPipelineStore.d.ts +21 -0
  70. package/dist/components/stream/OrdinalSVGOverlay.d.ts +8 -0
  71. package/dist/components/stream/PipelineStore.d.ts +5 -0
  72. package/dist/components/stream/SVGOverlay.d.ts +18 -0
  73. package/dist/components/stream/annotationAccessorResolver.d.ts +39 -0
  74. package/dist/components/stream/geoTypes.d.ts +12 -0
  75. package/dist/components/stream/ordinalTypes.d.ts +12 -0
  76. package/dist/components/stream/renderers/cornerRadii.d.ts +33 -0
  77. package/dist/components/stream/types.d.ts +23 -0
  78. package/dist/components/types/legendTypes.d.ts +1 -1
  79. package/dist/geo.min.js +1 -1
  80. package/dist/geo.module.min.js +1 -1
  81. package/dist/network.min.js +1 -1
  82. package/dist/network.module.min.js +1 -1
  83. package/dist/ordinal.min.js +1 -1
  84. package/dist/ordinal.module.min.js +1 -1
  85. package/dist/realtime.min.js +1 -1
  86. package/dist/realtime.module.min.js +1 -1
  87. package/dist/semiotic-ai.d.ts +2 -0
  88. package/dist/semiotic-ai.min.js +1 -1
  89. package/dist/semiotic-ai.module.min.js +1 -1
  90. package/dist/semiotic-network.d.ts +4 -0
  91. package/dist/semiotic-realtime.d.ts +2 -0
  92. package/dist/semiotic-recipes.min.js +1 -1
  93. package/dist/semiotic-recipes.module.min.js +1 -1
  94. package/dist/semiotic-utils.d.ts +4 -0
  95. package/dist/semiotic-utils.min.js +1 -1
  96. package/dist/semiotic-utils.module.min.js +1 -1
  97. package/dist/semiotic-xy.d.ts +2 -0
  98. package/dist/semiotic.d.ts +3 -3
  99. package/dist/semiotic.min.js +1 -1
  100. package/dist/semiotic.module.min.js +1 -1
  101. package/dist/server.min.js +1 -1
  102. package/dist/server.module.min.js +1 -1
  103. package/dist/xy.min.js +1 -1
  104. package/dist/xy.module.min.js +1 -1
  105. package/package.json +10 -5
@@ -5,6 +5,7 @@ import type { RealtimeFrameHandle } from "../../realtime/types";
5
5
  import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
6
6
  import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
7
7
  import { type TooltipProp } from "../../Tooltip/Tooltip";
8
+ import { type RegressionProp } from "../shared/regressionUtils";
8
9
  /**
9
10
  * BubbleChart component props
10
11
  */
@@ -110,6 +111,18 @@ export interface BubbleChartProps<TDatum extends Datum = Datum> extends BaseChar
110
111
  * Annotation objects to render on the chart
111
112
  */
112
113
  annotations?: Datum[];
114
+ /**
115
+ * Overlay a regression line on the bubbles. Accepts `true` (linear
116
+ * with default styling), a method name (`"linear"` | `"polynomial"`
117
+ * | `"loess"`), or a full `RegressionConfig`. Sugar over the `trend`
118
+ * annotation — drop into the `annotations` array directly for richer
119
+ * setups.
120
+ */
121
+ regression?: RegressionProp;
122
+ /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
123
+ xExtent?: [number | undefined, number | undefined] | [number];
124
+ /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
125
+ yExtent?: [number | undefined, number | undefined] | [number];
113
126
  /**
114
127
  * Additional StreamXYFrame props for advanced customization
115
128
  * For full control, consider using StreamXYFrame directly
@@ -19,6 +19,10 @@ export interface CandlestickChartProps<TDatum extends Datum = Datum> extends Bas
19
19
  candlestickStyle?: CandlestickStyle;
20
20
  tooltip?: TooltipProp;
21
21
  annotations?: Datum[];
22
+ /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
23
+ xExtent?: [number | undefined, number | undefined] | [number];
24
+ /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
25
+ yExtent?: [number | undefined, number | undefined] | [number];
22
26
  enableHover?: boolean;
23
27
  showGrid?: boolean;
24
28
  frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
@@ -5,6 +5,8 @@ import type { RealtimeFrameHandle } from "../../realtime/types";
5
5
  import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
6
6
  import { type TooltipProp } from "../../Tooltip/Tooltip";
7
7
  import type { LegendInteractionMode } from "../shared/hooks";
8
+ import { type RegressionProp } from "../shared/regressionUtils";
9
+ import type { ForecastConfig, AnomalyConfig } from "../shared/statisticalOverlays";
8
10
  /**
9
11
  * ConnectedScatterplot component props
10
12
  */
@@ -37,6 +39,24 @@ export interface ConnectedScatterplotProps<TDatum extends Datum = Datum> extends
37
39
  legendInteraction?: LegendInteractionMode;
38
40
  /** Annotation objects to render on the chart */
39
41
  annotations?: Datum[];
42
+ /**
43
+ * Overlay a regression line under the connected path. Accepts
44
+ * `true`, a method name (`"linear"` | `"polynomial"` | `"loess"`),
45
+ * or a full `RegressionConfig`. Sugar over the `trend` annotation.
46
+ */
47
+ regression?: RegressionProp;
48
+ /**
49
+ * Forecast overlay — same shape as LineChart's `forecast` prop.
50
+ * Adds tagged future points + envelope annotations to the
51
+ * connected path.
52
+ */
53
+ forecast?: ForecastConfig;
54
+ /** Anomaly overlay — adds a ±σ band + anomaly dot annotations. */
55
+ anomaly?: AnomalyConfig;
56
+ /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
57
+ xExtent?: [number | undefined, number | undefined] | [number];
58
+ /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
59
+ yExtent?: [number | undefined, number | undefined] | [number];
40
60
  /** Additional StreamXYFrame props for advanced customization */
41
61
  frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
42
62
  }
@@ -0,0 +1,172 @@
1
+ import type { Datum } from "../shared/datumTypes";
2
+ import * as React from "react";
3
+ import type { StreamXYFrameProps } from "../../stream/types";
4
+ import type { RealtimeFrameHandle } from "../../realtime/types";
5
+ import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
6
+ import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
7
+ import { type TooltipProp } from "../../Tooltip/Tooltip";
8
+ /**
9
+ * DifferenceChart props
10
+ */
11
+ export interface DifferenceChartProps<TDatum extends Datum = Datum> extends BaseChartProps, AxisConfig {
12
+ /** Array of `{x, a, b}` data points. Omit for push API mode. */
13
+ data?: TDatum[];
14
+ /** Accessor for the x value. Default `"x"`. */
15
+ xAccessor?: ChartAccessor<TDatum, number>;
16
+ /** Accessor for series A. Default `"a"`. */
17
+ seriesAAccessor?: ChartAccessor<TDatum, number>;
18
+ /** Accessor for series B. Default `"b"`. */
19
+ seriesBAccessor?: ChartAccessor<TDatum, number>;
20
+ /** Display label for series A (legend + tooltip). Default `"A"`. */
21
+ seriesALabel?: string;
22
+ /** Display label for series B. Default `"B"`. */
23
+ seriesBLabel?: string;
24
+ /** Fill color when series A is above series B. Default `"var(--semiotic-danger, #dc2626)"`. */
25
+ seriesAColor?: string;
26
+ /** Fill color when series B is above series A. Default `"var(--semiotic-info, #2563eb)"`. */
27
+ seriesBColor?: string;
28
+ /** Show the A and B series as overlay lines on top of the filled difference. Default `true`. */
29
+ showLines?: boolean;
30
+ /** Line stroke width when `showLines` is true. Default `1.5`. */
31
+ lineWidth?: number;
32
+ /** Show data points on the overlay lines. Default `false`. */
33
+ showPoints?: boolean;
34
+ /** Point radius when `showPoints` is true. Default `3`. */
35
+ pointRadius?: number;
36
+ /** Curve interpolation for both the area boundary and overlay lines. Default `"linear"`. */
37
+ curve?: "linear" | "monotoneX" | "monotoneY" | "step" | "stepAfter" | "stepBefore" | "basis" | "cardinal" | "catmullRom";
38
+ /** Fill opacity for the difference region. Default `0.6`. */
39
+ areaOpacity?: number;
40
+ /** Gradient fill across each segment, same shape as AreaChart.gradientFill. */
41
+ gradientFill?: boolean | {
42
+ topOpacity: number;
43
+ bottomOpacity: number;
44
+ } | {
45
+ colorStops: Array<{
46
+ offset: number;
47
+ color: string;
48
+ }>;
49
+ };
50
+ /** Enable hover annotations. */
51
+ enableHover?: boolean;
52
+ /** Show grid lines. Default `false`. */
53
+ showGrid?: boolean;
54
+ /** Show legend. Default `true`. */
55
+ showLegend?: boolean;
56
+ /** Legend interaction mode. */
57
+ legendInteraction?: LegendInteractionMode;
58
+ /** Legend position. */
59
+ legendPosition?: LegendPosition;
60
+ /** Tooltip config. */
61
+ tooltip?: TooltipProp;
62
+ /** Annotation objects. */
63
+ annotations?: Datum[];
64
+ /** Fixed x domain. */
65
+ xExtent?: [number | undefined, number | undefined] | [number];
66
+ /** Fixed y domain. */
67
+ yExtent?: [number | undefined, number | undefined] | [number];
68
+ /** Stable ID accessor for push-mode `remove()` / `update()`. */
69
+ pointIdAccessor?: string | ((d: Datum) => string);
70
+ /** Maximum number of raw rows kept in the push buffer. When exceeded,
71
+ * oldest rows are evicted FIFO (sliding window). Default: unbounded.
72
+ * Recommended for long-running streams so the per-render segment
73
+ * recomputation stays bounded. */
74
+ windowSize?: number;
75
+ /** Pass-through StreamXYFrame props. */
76
+ frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
77
+ }
78
+ /**
79
+ * Crossover-segmented record used by the area pipeline. One row per
80
+ * vertex along either the upper or lower boundary; `__diffSegment` is a
81
+ * group key per segment so the area scene builder produces one polygon
82
+ * per id with the correct fill color.
83
+ */
84
+ interface SegmentRow {
85
+ __x: number;
86
+ /** Upper boundary y value (max of A, B). The area pipeline reads this. */
87
+ __y: number;
88
+ /** Lower boundary y value (min of A, B) — picked up as per-datum y0. */
89
+ __y0: number;
90
+ /** Segment id. Format: `"seg-<index>-<winner>"`. */
91
+ __diffSegment: string;
92
+ /** Which series is on top in this segment ("A" or "B"). Drives fill. */
93
+ __diffWinner: "A" | "B";
94
+ /** Original A value at this x (or interpolated at crossovers). */
95
+ __valA: number;
96
+ /** Original B value at this x (or interpolated at crossovers). */
97
+ __valB: number;
98
+ /** Original datum (for tooltip lookup at non-crossover vertices). */
99
+ __sourceDatum?: Datum;
100
+ }
101
+ /**
102
+ * Walk sorted data, splitting at each A↔B crossover. Inserts an
103
+ * interpolated vertex on BOTH sides of every crossover so adjacent
104
+ * segments meet at a zero-width point (no jagged edges).
105
+ *
106
+ * Non-finite rows are skipped; the algorithm tracks the most recent
107
+ * VALID non-tie row (not the index neighbor) for crossover detection,
108
+ * so a non-finite gap doesn't drop a crossover that straddles it.
109
+ *
110
+ * Tie rows (a === b) are handled distinctly from non-tie rows:
111
+ *
112
+ * - When a tie row sits BETWEEN two non-tie rows with the SAME
113
+ * winner, the tie is emitted in that winner's segment as a
114
+ * zero-width vertex.
115
+ * - When a tie row sits between non-tie rows with DIFFERENT winners,
116
+ * the FIRST tie of the run becomes the crossover vertex. The old
117
+ * segment closes at the tie's x, the new segment opens at the same
118
+ * point, and any subsequent tie rows (multi-tie runs) carry into
119
+ * the new segment as zero-width vertices.
120
+ *
121
+ * This preserves the data's actual zero-difference point: if the user
122
+ * supplied a tie row explicitly, the fill switches color exactly at
123
+ * that x rather than at a linear-interpolated x that ignored the tie.
124
+ *
125
+ * Exported for direct unit-testing — the area pipeline depends on the
126
+ * exact crossover-vertex shape produced here.
127
+ */
128
+ export declare function computeDifferenceSegments<TDatum extends Datum>(raw: TDatum[], getX: (d: TDatum) => number, getA: (d: TDatum) => number, getB: (d: TDatum) => number): SegmentRow[];
129
+ /**
130
+ * DifferenceChart — fills the area between two series with a color
131
+ * that switches based on which series is higher at each x. Crossover
132
+ * points are interpolated so segments meet cleanly. Both series can
133
+ * optionally be drawn as overlay lines on top of the fill.
134
+ *
135
+ * Classic uses: temperature anomaly (actual vs. normal), forecast
136
+ * accuracy (actual vs. predicted), budget variance, A/B comparison.
137
+ *
138
+ * @example
139
+ * ```tsx
140
+ * <DifferenceChart
141
+ * data={[
142
+ * { date: 1, actual: 50, forecast: 45 },
143
+ * { date: 2, actual: 52, forecast: 60 },
144
+ * { date: 3, actual: 70, forecast: 58 },
145
+ * ]}
146
+ * xAccessor="date"
147
+ * seriesAAccessor="actual"
148
+ * seriesBAccessor="forecast"
149
+ * seriesALabel="Actual"
150
+ * seriesBLabel="Forecast"
151
+ * />
152
+ * ```
153
+ *
154
+ * @example
155
+ * ```tsx
156
+ * // Streaming via push API — omit `data`, push raw {x, a, b} rows.
157
+ * const ref = useRef<RealtimeFrameHandle>(null)
158
+ * useEffect(() => {
159
+ * const id = setInterval(() => {
160
+ * const t = Date.now()
161
+ * ref.current?.push({ x: t, a: 50 + Math.random() * 10, b: 50 + Math.random() * 10 })
162
+ * }, 500)
163
+ * return () => clearInterval(id)
164
+ * }, [])
165
+ * return <DifferenceChart ref={ref} xAccessor="x" seriesAAccessor="a" seriesBAccessor="b" />
166
+ * ```
167
+ */
168
+ export declare const DifferenceChart: {
169
+ <TDatum extends Datum = Datum>(props: DifferenceChartProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
170
+ displayName?: string;
171
+ };
172
+ export {};
@@ -114,6 +114,10 @@ export interface HeatmapProps<TDatum extends Datum = Datum> extends BaseChartPro
114
114
  * Annotation objects to render on the chart
115
115
  */
116
116
  annotations?: Datum[];
117
+ /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
118
+ xExtent?: [number | undefined, number | undefined] | [number];
119
+ /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
120
+ yExtent?: [number | undefined, number | undefined] | [number];
117
121
  /**
118
122
  * Additional StreamXYFrame props for advanced customization
119
123
  * For full control, consider using StreamXYFrame directly
@@ -181,6 +181,18 @@ export interface LineChartProps<TDatum extends Datum = Datum> extends BaseChartP
181
181
  * envelope around the extrapolated forecast region.
182
182
  */
183
183
  forecast?: ForecastConfig;
184
+ /**
185
+ * Fixed x domain `[min, max]`. Either bound may be `undefined` to leave
186
+ * that side data-derived.
187
+ */
188
+ xExtent?: [number | undefined, number | undefined] | [number];
189
+ /**
190
+ * Fixed y domain `[min, max]`. Either bound may be `undefined` to leave
191
+ * that side data-derived. Wins over the auto-computed envelope extent
192
+ * when forecast bounds are present, so explicit user intent stays
193
+ * authoritative.
194
+ */
195
+ yExtent?: [number | undefined, number | undefined] | [number];
184
196
  /**
185
197
  * Additional StreamXYFrame props for advanced customization
186
198
  * For full control, consider using StreamXYFrame directly
@@ -67,6 +67,13 @@ export interface MinimapChartProps<TDatum extends Datum = Datum> extends Omit<Ba
67
67
  onBrush?: (extent: [number, number] | null) => void;
68
68
  /** Controlled brush extent */
69
69
  brushExtent?: [number, number];
70
+ /**
71
+ * Fixed y domain `[min, max]` (either bound may be undefined to leave
72
+ * that side data-derived). xExtent is reserved for brush selection on
73
+ * MinimapChart — pass `frameProps.xExtent` if you need to override the
74
+ * brushed x range from advanced consumers.
75
+ */
76
+ yExtent?: [number | undefined, number | undefined] | [number];
70
77
  /** Additional StreamXYFrame props */
71
78
  frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
72
79
  }
@@ -5,6 +5,8 @@ import type { RealtimeFrameHandle } from "../../realtime/types";
5
5
  import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
6
6
  import { type TooltipProp } from "../../Tooltip/Tooltip";
7
7
  import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
8
+ import { type RegressionProp } from "../shared/regressionUtils";
9
+ import type { ForecastConfig, AnomalyConfig } from "../shared/statisticalOverlays";
8
10
  /**
9
11
  * Scatterplot component props
10
12
  */
@@ -45,6 +47,42 @@ export interface ScatterplotProps<TDatum extends Datum = Datum> extends BaseChar
45
47
  legendPosition?: LegendPosition;
46
48
  /** Annotation objects to render on the chart */
47
49
  annotations?: Datum[];
50
+ /**
51
+ * Overlay a regression line on the scatter. Accepts:
52
+ * - `true` — linear regression with default styling
53
+ * - `"linear"` | `"polynomial"` | `"loess"` — pick a method
54
+ * - `RegressionConfig` — full control (method, bandwidth, order,
55
+ * color, strokeWidth, strokeDasharray, label)
56
+ *
57
+ * Sugar over `annotations={[{ type: "trend", … }]}` — for richer
58
+ * setups (multiple regression lines, custom anchoring) drop into
59
+ * the annotations array directly.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * <Scatterplot data={d} xAccessor="x" yAccessor="y" regression />
64
+ * <Scatterplot data={d} xAccessor="x" yAccessor="y" regression="loess" />
65
+ * <Scatterplot data={d} xAccessor="x" yAccessor="y"
66
+ * regression={{ method: "polynomial", order: 3, color: "#ef4444", label: "Cubic" }} />
67
+ * ```
68
+ */
69
+ regression?: RegressionProp;
70
+ /**
71
+ * Forecast overlay — extends the scatter with tagged future
72
+ * points + (optional) confidence-envelope annotations. Same shape
73
+ * as LineChart's `forecast` prop.
74
+ */
75
+ forecast?: ForecastConfig;
76
+ /**
77
+ * Anomaly overlay — adds a ±σ band annotation and per-point
78
+ * anomaly dots. Standalone (without forecast) gives raw anomaly
79
+ * detection on the scatter.
80
+ */
81
+ anomaly?: AnomalyConfig;
82
+ /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
83
+ xExtent?: [number | undefined, number | undefined] | [number];
84
+ /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
85
+ yExtent?: [number | undefined, number | undefined] | [number];
48
86
  /** Additional StreamXYFrame props for advanced customization */
49
87
  frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
50
88
  }
@@ -159,6 +159,18 @@ export interface StackedAreaChartProps<TDatum extends Datum = Datum> extends Bas
159
159
  * Annotation objects to render on the chart
160
160
  */
161
161
  annotations?: Datum[];
162
+ /**
163
+ * Fixed x domain `[min, max]`. Either bound may be `undefined` to leave
164
+ * that side data-derived.
165
+ */
166
+ xExtent?: [number | undefined, number | undefined] | [number];
167
+ /**
168
+ * Fixed y domain `[min, max]`. Either bound may be `undefined` to leave
169
+ * that side data-derived. Stacked areas auto-extend the y domain to
170
+ * cover the cumulative sum unless `yExtent` is fully specified —
171
+ * passing `yExtent={[0, 200]}` pins both bounds.
172
+ */
173
+ yExtent?: [number | undefined, number | undefined] | [number];
162
174
  /**
163
175
  * Additional StreamXYFrame props for advanced customization
164
176
  * For full control, consider using StreamXYFrame directly
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Shared ribbon geometry — emits both the SVG path-D string and the
3
+ * centerline cubic-bezier cache for a sankey-style band.
4
+ *
5
+ * Both SankeyDiagram (via `areaLink` in `./sankeyLinks`) and
6
+ * ProcessSankey (via the HOC's ribbon-spec construction) need to
7
+ * draw the same M-C-L-C-Z trapezoid-cap-with-bezier-sides shape and
8
+ * provide a matching 4-point centerline bezier for the particle
9
+ * pool. The two charts compute their inputs differently — Sankey
10
+ * reads (x0/x1/y0/y1, sankeyWidth) from the d3-sankey layout while
11
+ * ProcessSankey computes (sx, sTop, sBot, tx, tTop, tBot, cp1X, cp2X)
12
+ * from its temporal attachment math — but the *emission* is shared.
13
+ *
14
+ * For Sankey: cp1X = xi(curvature), cp2X = xi(1-curvature) (smooth
15
+ * S-curve, symmetric around the midpoint).
16
+ * For ProcessSankey: cp1X = cp2X = cx where `cx` depends on
17
+ * `ribbonLane` ("source"/"target"/"both") — concentrates
18
+ * the bend at a chosen x position.
19
+ */
20
+ import type { BezierCache } from "../stream/networkTypes";
21
+ export interface RibbonGeometryInput {
22
+ /** Source x coordinate. */
23
+ sx: number;
24
+ /** Source band top (y at source end, smaller y). */
25
+ sTop: number;
26
+ /** Source band bottom (y at source end, larger y). */
27
+ sBot: number;
28
+ /** Target x coordinate. */
29
+ tx: number;
30
+ /** Target band top. */
31
+ tTop: number;
32
+ /** Target band bottom. */
33
+ tBot: number;
34
+ /** x of the near-source bezier control point. The top curve uses
35
+ * `(cp1X, sTop)` as its first control point and the bottom curve
36
+ * uses `(cp1X, sBot)` as its last (mirrored). */
37
+ cp1X: number;
38
+ /** x of the near-target bezier control point. The top curve uses
39
+ * `(cp2X, tTop)` as its second control point and the bottom curve
40
+ * uses `(cp2X, tBot)` as its first (mirrored). */
41
+ cp2X: number;
42
+ }
43
+ export interface RibbonGeometryOutput {
44
+ /** Closed SVG path describing the visible ribbon band. */
45
+ pathD: string;
46
+ /** Centerline cubic for the particle pool. Matches the shape
47
+ * `NetworkPipelineStore.buildStandardBezier` produces for sankey
48
+ * edges, so both ribbon kinds drive the shared particle
49
+ * pipeline identically. */
50
+ bezier: BezierCache;
51
+ }
52
+ /**
53
+ * Build both the visible-ribbon path-D and the centerline bezier
54
+ * cache from a single set of geometric inputs.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * // SankeyDiagram (smooth curvature-based S-curve):
59
+ * const xi = interpolateNumber(source.x1, target.x0)
60
+ * buildRibbonGeometry({
61
+ * sx: source.x1, tx: target.x0,
62
+ * sTop: edge.y0 - edge.sankeyWidth / 2,
63
+ * sBot: edge.y0 + edge.sankeyWidth / 2,
64
+ * tTop: edge.y1 - edge.sankeyWidth / 2,
65
+ * tBot: edge.y1 + edge.sankeyWidth / 2,
66
+ * cp1X: xi(0.5), cp2X: xi(0.5), // curvature defaults to 0.5
67
+ * })
68
+ *
69
+ * // ProcessSankey (lane-aware bend):
70
+ * const cx = ribbonLane === "source" ? sx + (tx - sx) * 0.85
71
+ * : ribbonLane === "target" ? sx + (tx - sx) * 0.15
72
+ * : (sx + tx) / 2
73
+ * buildRibbonGeometry({ sx, sTop, sBot, tx, tTop, tBot, cp1X: cx, cp2X: cx })
74
+ * ```
75
+ */
76
+ export declare function buildRibbonGeometry(input: RibbonGeometryInput): RibbonGeometryOutput;
@@ -1,5 +1,6 @@
1
1
  export { LineChart } from "./charts/xy/LineChart";
2
2
  export { AreaChart } from "./charts/xy/AreaChart";
3
+ export { DifferenceChart } from "./charts/xy/DifferenceChart";
3
4
  export { StackedAreaChart } from "./charts/xy/StackedAreaChart";
4
5
  export { Scatterplot } from "./charts/xy/Scatterplot";
5
6
  export { ConnectedScatterplot } from "./charts/xy/ConnectedScatterplot";
@@ -30,6 +31,7 @@ export { SwimlaneChart } from "./charts/ordinal/SwimlaneChart";
30
31
  export { ForceDirectedGraph } from "./charts/network/ForceDirectedGraph";
31
32
  export { ChordDiagram } from "./charts/network/ChordDiagram";
32
33
  export { SankeyDiagram } from "./charts/network/SankeyDiagram";
34
+ export { ProcessSankey } from "./charts/network/ProcessSankey";
33
35
  export { TreeDiagram } from "./charts/network/TreeDiagram";
34
36
  export { Treemap } from "./charts/network/Treemap";
35
37
  export { CirclePack } from "./charts/network/CirclePack";
@@ -11,10 +11,12 @@ export { TreeDiagram } from "./charts/network/TreeDiagram";
11
11
  export { Treemap } from "./charts/network/Treemap";
12
12
  export { CirclePack } from "./charts/network/CirclePack";
13
13
  export { OrbitDiagram } from "./charts/network/OrbitDiagram";
14
+ export { ProcessSankey } from "./charts/network/ProcessSankey";
14
15
  export { NetworkCustomChart } from "./charts/custom/NetworkCustomChart";
15
16
  export type { StreamNetworkFrameProps, StreamNetworkFrameHandle, NetworkChartType, NetworkSceneNode, NetworkSceneEdge, NetworkLabel, ThresholdAlertConfig } from "./stream/networkTypes";
16
17
  export type { ForceDirectedGraphProps } from "./charts/network/ForceDirectedGraph";
17
18
  export type { SankeyDiagramProps } from "./charts/network/SankeyDiagram";
19
+ export type { ProcessSankeyProps, ProcessSankeyTick } from "./charts/network/ProcessSankey";
18
20
  export type { ChordDiagramProps } from "./charts/network/ChordDiagram";
19
21
  export type { TreeDiagramProps } from "./charts/network/TreeDiagram";
20
22
  export type { TreemapProps } from "./charts/network/Treemap";
@@ -22,3 +24,5 @@ export type { CirclePackProps } from "./charts/network/CirclePack";
22
24
  export type { OrbitDiagramProps } from "./charts/network/OrbitDiagram";
23
25
  export type { NetworkCustomChartProps } from "./charts/custom/NetworkCustomChart";
24
26
  export type { NetworkCustomLayout, NetworkLayoutContext, NetworkLayoutResult, } from "./stream/networkCustomLayout";
27
+ export { validateProcessSankey, formatProcessSankeyIssue, } from "./charts/network/processSankey/algorithm";
28
+ export type { ProcessSankeyNode as ProcessSankeyValidatorNode, ProcessSankeyEdge as ProcessSankeyValidatorEdge, ProcessSankeyIssue, } from "./charts/network/processSankey/algorithm";
@@ -20,3 +20,5 @@ export type { RealtimeHeatmapProps } from "./charts/realtime/RealtimeHeatmap";
20
20
  export type { ArrowOfTime, WindowMode, ThresholdType, LineStyle, BarStyle, WaterfallStyle, SwarmStyle, AnnotationContext, CrosshairStyle, HoverAnnotationConfig, HoverData } from "./realtime/types";
21
21
  export type { StreamXYFrameProps, StreamXYFrameHandle, StreamChartType } from "./stream/types";
22
22
  export type { StreamNetworkFrameProps, StreamNetworkFrameHandle, NetworkChartType } from "./stream/networkTypes";
23
+ export { useStreamStatus } from "./charts/shared/useStreamStatus";
24
+ export type { StreamStatus, StreamStatusOptions, StreamStatusResult, } from "./charts/shared/useStreamStatus";
@@ -29,3 +29,7 @@ export { RingBuffer } from "./realtime/RingBuffer";
29
29
  export { IncrementalExtent } from "./realtime/IncrementalExtent";
30
30
  export { normalizeTooltip, MultiPointTooltip } from "./Tooltip/Tooltip";
31
31
  export { useReducedMotion, useHighContrast } from "./stream/useMediaPreferences";
32
+ export { sweepToAngles, valueToAngle, computeArcBoundingBox, } from "./charts/shared/radialGeometry";
33
+ export type { SweepAngles, ArcBoundingBox } from "./charts/shared/radialGeometry";
34
+ export { useStreamStatus } from "./charts/shared/useStreamStatus";
35
+ export type { StreamStatus, StreamStatusOptions, StreamStatusResult, } from "./charts/shared/useStreamStatus";
@@ -6,6 +6,7 @@ import StreamXYFrame from "./stream/StreamXYFrame";
6
6
  export { StreamXYFrame };
7
7
  export { LineChart } from "./charts/xy/LineChart";
8
8
  export { AreaChart } from "./charts/xy/AreaChart";
9
+ export { DifferenceChart } from "./charts/xy/DifferenceChart";
9
10
  export { StackedAreaChart } from "./charts/xy/StackedAreaChart";
10
11
  export { Scatterplot } from "./charts/xy/Scatterplot";
11
12
  export { ConnectedScatterplot } from "./charts/xy/ConnectedScatterplot";
@@ -21,6 +22,7 @@ export type { StreamXYFrameProps, StreamXYFrameHandle } from "./stream/types";
21
22
  export type { CustomLayout, LayoutContext, LayoutResult } from "./stream/customLayout";
22
23
  export type { LineChartProps } from "./charts/xy/LineChart";
23
24
  export type { AreaChartProps } from "./charts/xy/AreaChart";
25
+ export type { DifferenceChartProps } from "./charts/xy/DifferenceChart";
24
26
  export type { StackedAreaChartProps } from "./charts/xy/StackedAreaChart";
25
27
  export type { ScatterplotProps } from "./charts/xy/Scatterplot";
26
28
  export type { ConnectedScatterplotProps } from "./charts/xy/ConnectedScatterplot";
@@ -1,7 +1,7 @@
1
1
  import StreamXYFrame from "./stream/StreamXYFrame";
2
2
  import StreamOrdinalFrame from "./stream/StreamOrdinalFrame";
3
3
  import StreamNetworkFrame from "./stream/StreamNetworkFrame";
4
- import { Scatterplot, ConnectedScatterplot, LineChart, AreaChart, StackedAreaChart, Heatmap, BubbleChart, BarChart, StackedBarChart, LikertChart, SwarmPlot, BoxPlot, Histogram, ViolinPlot, RidgelinePlot, DotPlot, PieChart, DonutChart, GaugeChart, GroupedBarChart, FunnelChart, SwimlaneChart, ForceDirectedGraph, ChordDiagram, SankeyDiagram, TreeDiagram, Treemap, CirclePack, OrbitDiagram, ScatterplotMatrix, MinimapChart, QuadrantChart, MultiAxisLineChart, CandlestickChart, XYCustomChart, NetworkCustomChart, OrdinalCustomChart } from "./charts";
4
+ import { Scatterplot, ConnectedScatterplot, LineChart, AreaChart, DifferenceChart, StackedAreaChart, Heatmap, BubbleChart, BarChart, StackedBarChart, LikertChart, SwarmPlot, BoxPlot, Histogram, ViolinPlot, RidgelinePlot, DotPlot, PieChart, DonutChart, GaugeChart, GroupedBarChart, FunnelChart, SwimlaneChart, ForceDirectedGraph, ChordDiagram, SankeyDiagram, ProcessSankey, TreeDiagram, Treemap, CirclePack, OrbitDiagram, ScatterplotMatrix, MinimapChart, QuadrantChart, MultiAxisLineChart, CandlestickChart, XYCustomChart, NetworkCustomChart, OrdinalCustomChart } from "./charts";
5
5
  import { LinkedCharts } from "./LinkedCharts";
6
6
  import { ThemeProvider, useTheme } from "./ThemeProvider";
7
7
  import { exportChart } from "./export/exportChart";
@@ -23,8 +23,8 @@ import { RealtimeTemporalHistogram, RealtimeHistogram } from "./charts/realtime/
23
23
  import { RealtimeSwarmChart } from "./charts/realtime/RealtimeSwarmChart";
24
24
  import { RealtimeWaterfallChart } from "./charts/realtime/RealtimeWaterfallChart";
25
25
  import { RealtimeHeatmap } from "./charts/realtime/RealtimeHeatmap";
26
- export { StreamXYFrame, StreamOrdinalFrame, StreamNetworkFrame, Scatterplot, ConnectedScatterplot, LineChart, AreaChart, StackedAreaChart, Heatmap, BubbleChart, BarChart, StackedBarChart, LikertChart, SwarmPlot, BoxPlot, Histogram, ViolinPlot, RidgelinePlot, DotPlot, ForceDirectedGraph, ChordDiagram, SankeyDiagram, TreeDiagram, PieChart, DonutChart, GaugeChart, FunnelChart, GroupedBarChart, SwimlaneChart, Treemap, CirclePack, OrbitDiagram, ScatterplotMatrix, MinimapChart, QuadrantChart, MultiAxisLineChart, CandlestickChart, XYCustomChart, NetworkCustomChart, OrdinalCustomChart, LinkedCharts, ThemeProvider, useTheme, exportChart, toConfig, fromConfig, toURL, fromURL, copyConfig, configToJSX, serializeSelections, deserializeSelections, fromVegaLite, ChartErrorBoundary, ChartContainer, ChartGrid, CategoryColorProvider, useCategoryColors, ContextLayout, DetailsPanel, Tooltip, MultiLineTooltip, normalizeTooltip, RingBuffer, IncrementalExtent, RealtimeLineChart, RealtimeTemporalHistogram, RealtimeHistogram, RealtimeSwarmChart, RealtimeWaterfallChart, RealtimeHeatmap, createHatchPattern };
27
- export { ScatterplotProps, ConnectedScatterplotProps, LineChartProps, AreaChartProps, StackedAreaChartProps, HeatmapProps, BubbleChartProps, BarChartProps, StackedBarChartProps, LikertChartProps, SwarmPlotProps, BoxPlotProps, HistogramProps, ViolinPlotProps, DotPlotProps, PieChartProps, DonutChartProps, GaugeChartProps, GaugeThreshold, FunnelChartProps, GroupedBarChartProps, SwimlaneChartProps, RidgelinePlotProps, OrbitDiagramProps, OrbitNode, ForceDirectedGraphProps, ChordDiagramProps, SankeyDiagramProps, TreeDiagramProps, TreemapProps, CirclePackProps, ScatterplotMatrixProps, MinimapChartProps, MinimapConfig, QuadrantChartProps, MultiAxisLineChartProps, MultiAxisSeriesConfig, CandlestickChartProps, QuadrantsConfig, QuadrantConfig, CenterlineStyle, BaseChartProps, AxisConfig, Accessor, ChartAccessor, ChartMode } from "./charts";
26
+ export { StreamXYFrame, StreamOrdinalFrame, StreamNetworkFrame, Scatterplot, ConnectedScatterplot, LineChart, AreaChart, DifferenceChart, StackedAreaChart, Heatmap, BubbleChart, BarChart, StackedBarChart, LikertChart, SwarmPlot, BoxPlot, Histogram, ViolinPlot, RidgelinePlot, DotPlot, ForceDirectedGraph, ChordDiagram, SankeyDiagram, ProcessSankey, TreeDiagram, PieChart, DonutChart, GaugeChart, FunnelChart, GroupedBarChart, SwimlaneChart, Treemap, CirclePack, OrbitDiagram, ScatterplotMatrix, MinimapChart, QuadrantChart, MultiAxisLineChart, CandlestickChart, XYCustomChart, NetworkCustomChart, OrdinalCustomChart, LinkedCharts, ThemeProvider, useTheme, exportChart, toConfig, fromConfig, toURL, fromURL, copyConfig, configToJSX, serializeSelections, deserializeSelections, fromVegaLite, ChartErrorBoundary, ChartContainer, ChartGrid, CategoryColorProvider, useCategoryColors, ContextLayout, DetailsPanel, Tooltip, MultiLineTooltip, normalizeTooltip, RingBuffer, IncrementalExtent, RealtimeLineChart, RealtimeTemporalHistogram, RealtimeHistogram, RealtimeSwarmChart, RealtimeWaterfallChart, RealtimeHeatmap, createHatchPattern };
27
+ export { ScatterplotProps, ConnectedScatterplotProps, LineChartProps, AreaChartProps, DifferenceChartProps, StackedAreaChartProps, HeatmapProps, BubbleChartProps, BarChartProps, StackedBarChartProps, LikertChartProps, SwarmPlotProps, BoxPlotProps, HistogramProps, ViolinPlotProps, DotPlotProps, PieChartProps, DonutChartProps, GaugeChartProps, GaugeThreshold, FunnelChartProps, GroupedBarChartProps, SwimlaneChartProps, RidgelinePlotProps, OrbitDiagramProps, OrbitNode, ForceDirectedGraphProps, ChordDiagramProps, SankeyDiagramProps, ProcessSankeyProps, ProcessSankeyTick, TreeDiagramProps, TreemapProps, CirclePackProps, ScatterplotMatrixProps, MinimapChartProps, MinimapConfig, QuadrantChartProps, MultiAxisLineChartProps, MultiAxisSeriesConfig, CandlestickChartProps, QuadrantsConfig, QuadrantConfig, CenterlineStyle, BaseChartProps, AxisConfig, Accessor, ChartAccessor, ChartMode } from "./charts";
28
28
  export type { StreamXYFrameProps, StreamXYFrameHandle, StreamChartType, RuntimeMode, SceneNode, Changeset, StreamScales, StreamLayout, CurveType, CanvasRendererFn } from "./stream/types";
29
29
  export type { StreamRendererFn } from "./stream/renderers/types";
30
30
  export type { StreamOrdinalFrameProps, StreamOrdinalFrameHandle, OrdinalChartType, OrdinalScales, OrdinalSceneNode } from "./stream/ordinalTypes";
@@ -9,6 +9,7 @@ export declare const CHART_CONFIGS: {
9
9
  Sparkline: ChartConfig;
10
10
  LineChart: ChartConfig;
11
11
  AreaChart: ChartConfig;
12
+ DifferenceChart: ChartConfig;
12
13
  StackedAreaChart: ChartConfig;
13
14
  Scatterplot: ChartConfig;
14
15
  CandlestickChart: ChartConfig;
@@ -44,6 +45,7 @@ export declare const CHART_CONFIGS: {
44
45
  GaugeChart: ChartConfig;
45
46
  ForceDirectedGraph: ChartConfig;
46
47
  SankeyDiagram: ChartConfig;
48
+ ProcessSankey: ChartConfig;
47
49
  ChordDiagram: ChartConfig;
48
50
  TreeDiagram: ChartConfig;
49
51
  Treemap: ChartConfig;
@@ -47,6 +47,27 @@ export declare class GeoPipelineStore {
47
47
  pushPoint(datum: Datum): void;
48
48
  /** Push multiple streaming points */
49
49
  pushMany(data: Datum[]): void;
50
+ /** Append a single line/flow record (coordinates pre-resolved). Lines
51
+ * aren't ring-buffered — the bounded set is the geography.
52
+ * Mutates `lineData` in place to avoid the O(n) GC churn of an
53
+ * array spread per push. The mutation is invisible to callers
54
+ * because `setLines` defensive-copies on entry and `getLines`
55
+ * defensive-copies on exit. */
56
+ pushLine(line: Datum): void;
57
+ /** Append multiple line/flow records in one pass. Same in-place
58
+ * mutation rationale as `pushLine`. Loops instead of
59
+ * `Array.prototype.push(...safe)` so very large batches don't
60
+ * blow the engine's argument-count limit (mirrors how `pushMany`
61
+ * for points iterates rather than spreads). */
62
+ pushManyLines(lines: Datum[]): void;
63
+ /** Remove line records by id. Requires `lineIdAccessor`. */
64
+ removeLine(id: string | string[]): Datum[];
65
+ /** Read the current line/flow set (post-push, pre-projection).
66
+ * Defensive copy — `pushLine` / `pushManyLines` mutate
67
+ * `lineData` in place, so returning by reference would let
68
+ * callers observe ingest-side mutations on a snapshot they
69
+ * thought was stable. */
70
+ getLines(): Datum[];
50
71
  /**
51
72
  * Remove points by ID. Requires pointIdAccessor to be configured.
52
73
  * Returns the removed items.
@@ -4,6 +4,7 @@ import type { OrdinalScales } from "./ordinalTypes";
4
4
  import type { AnnotationContext } from "../realtime/types";
5
5
  import type { ReactNode } from "react";
6
6
  import type { LegendGroup, GradientLegendConfig } from "../types/legendTypes";
7
+ import { type AxisExtentMode } from "../charts/shared/axisExtent";
7
8
  interface OrdinalSVGOverlayProps {
8
9
  width: number;
9
10
  height: number;
@@ -26,6 +27,12 @@ interface OrdinalSVGOverlayProps {
26
27
  rTickValues?: number[];
27
28
  /** Align first tick label to start, last to end */
28
29
  tickLabelEdgeAlign?: boolean;
30
+ /** Axis extent mode. "nice" (default) uses d3-scale's rounded
31
+ * tick generator. "exact" pins the first and last value-axis
32
+ * tick to the actual data min and max with equidistant
33
+ * intermediate ticks. Ignored for the categorical (o) axis;
34
+ * applies to the value (r) axis only. */
35
+ axisExtent?: AxisExtentMode;
29
36
  showGrid?: boolean;
30
37
  title?: string | ReactNode;
31
38
  legend?: ReactNode | {
@@ -69,6 +76,7 @@ interface OrdinalSVGUnderlayProps {
69
76
  showGrid?: boolean;
70
77
  rFormat?: (d: number) => string;
71
78
  rTickValues?: number[];
79
+ axisExtent?: AxisExtentMode;
72
80
  }
73
81
  export declare function OrdinalSVGUnderlay(props: OrdinalSVGUnderlayProps): import("react/jsx-runtime").JSX.Element | null;
74
82
  export declare function OrdinalSVGOverlay(props: OrdinalSVGOverlayProps): import("react/jsx-runtime").JSX.Element | null;
@@ -14,6 +14,11 @@ export interface PipelineConfig {
14
14
  extentPadding: number;
15
15
  /** Pixel inset on scale ranges to prevent glyph clipping at chart edges. Default 0. */
16
16
  scalePadding?: number;
17
+ /** When `"exact"`, the x and y axis domains pin to the literal data
18
+ * min/max — `extentPadding` is skipped so the first and last ticks
19
+ * read as the actual data bounds. Default `"nice"` keeps the existing
20
+ * padded domain so glyphs at the extremes don't clip the plot edge. */
21
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
17
22
  maxCapacity?: number;
18
23
  xAccessor?: string | ((d: Datum) => number);
19
24
  yAccessor?: string | ((d: Datum) => number);