semiotic 3.5.1 → 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.
- package/CLAUDE.md +21 -19
- package/README.md +22 -16
- package/ai/chartSuggestions.cjs +191 -3
- package/ai/componentMetadata.cjs +3 -3
- package/ai/dist/mcp-server.js +266 -48
- package/ai/examples.md +68 -0
- package/ai/schema.json +900 -1
- package/ai/system-prompt.md +4 -1
- package/dist/components/Tooltip/FlippingTooltip.d.ts +16 -1
- package/dist/components/charts/geo/FlowMap.d.ts +13 -4
- package/dist/components/charts/index.d.ts +6 -0
- package/dist/components/charts/network/OrbitDiagram.d.ts +5 -5
- package/dist/components/charts/network/ProcessSankey.d.ts +141 -0
- package/dist/components/charts/network/processSankey/algorithm.d.ts +136 -0
- package/dist/components/charts/network/processSankey/buildScenes.d.ts +45 -0
- package/dist/components/charts/network/processSankey/ribbonInputs.d.ts +32 -0
- package/dist/components/charts/network/processSankey/streamingLayout.d.ts +58 -0
- package/dist/components/charts/network/processSankey/tooltipUtils.d.ts +41 -0
- package/dist/components/charts/ordinal/BarChart.d.ts +12 -0
- package/dist/components/charts/ordinal/DotPlot.d.ts +9 -0
- package/dist/components/charts/ordinal/GaugeChart.d.ts +20 -0
- package/dist/components/charts/ordinal/SwimlaneChart.d.ts +5 -0
- package/dist/components/charts/realtime/RealtimeHistogram.d.ts +14 -11
- package/dist/components/charts/realtime/defaultRealtimeTooltip.d.ts +19 -0
- package/dist/components/charts/shared/axisExtent.d.ts +59 -0
- package/dist/components/charts/shared/chartSpecs.d.ts +75 -0
- package/dist/components/charts/shared/colorUtils.d.ts +8 -2
- package/dist/components/charts/shared/networkUtils.d.ts +3 -5
- package/dist/components/charts/shared/radialGeometry.d.ts +99 -0
- package/dist/components/charts/shared/regressionUtils.d.ts +59 -0
- package/dist/components/charts/shared/selectionUtils.d.ts +8 -1
- package/dist/components/charts/shared/streamPropsHelpers.d.ts +5 -0
- package/dist/components/charts/shared/types.d.ts +13 -0
- package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +75 -0
- package/dist/components/charts/shared/useEncodingDomain.d.ts +48 -0
- package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -1
- package/dist/components/charts/shared/useNetworkChartSetup.d.ts +148 -0
- package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +87 -0
- package/dist/components/charts/shared/useSeriesFeatures.d.ts +57 -0
- package/dist/components/charts/shared/useStreamStatus.d.ts +33 -0
- package/dist/components/charts/shared/useXYLineStyle.d.ts +69 -0
- package/dist/components/charts/shared/useXYPointStyle.d.ts +87 -0
- package/dist/components/charts/xy/AreaChart.d.ts +24 -0
- package/dist/components/charts/xy/BubbleChart.d.ts +9 -0
- package/dist/components/charts/xy/ConnectedScatterplot.d.ts +16 -0
- package/dist/components/charts/xy/DifferenceChart.d.ts +172 -0
- package/dist/components/charts/xy/Scatterplot.d.ts +34 -0
- package/dist/components/geometry/ribbonGeometry.d.ts +76 -0
- package/dist/components/semiotic-ai.d.ts +2 -0
- package/dist/components/semiotic-network.d.ts +4 -0
- package/dist/components/semiotic-realtime.d.ts +2 -0
- package/dist/components/semiotic-utils.d.ts +4 -0
- package/dist/components/semiotic-xy.d.ts +2 -0
- package/dist/components/semiotic.d.ts +3 -3
- package/dist/components/server/serverChartConfigs.d.ts +2 -0
- package/dist/components/stream/GeoPipelineStore.d.ts +21 -0
- package/dist/components/stream/OrdinalSVGOverlay.d.ts +8 -0
- package/dist/components/stream/PipelineStore.d.ts +5 -0
- package/dist/components/stream/SVGOverlay.d.ts +18 -0
- package/dist/components/stream/annotationAccessorResolver.d.ts +39 -0
- package/dist/components/stream/geoTypes.d.ts +12 -0
- package/dist/components/stream/ordinalTypes.d.ts +12 -0
- package/dist/components/stream/renderers/cornerRadii.d.ts +33 -0
- package/dist/components/stream/types.d.ts +23 -0
- package/dist/components/types/legendTypes.d.ts +1 -1
- package/dist/geo.min.js +1 -1
- package/dist/geo.module.min.js +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +2 -0
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-network.d.ts +4 -0
- package/dist/semiotic-realtime.d.ts +2 -0
- package/dist/semiotic-recipes.min.js +1 -1
- package/dist/semiotic-recipes.module.min.js +1 -1
- package/dist/semiotic-utils.d.ts +4 -0
- package/dist/semiotic-utils.min.js +1 -1
- package/dist/semiotic-utils.module.min.js +1 -1
- package/dist/semiotic-xy.d.ts +2 -0
- package/dist/semiotic.d.ts +3 -3
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +10 -5
|
@@ -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 {};
|
|
@@ -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,38 @@ 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;
|
|
48
82
|
/** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
|
|
49
83
|
xExtent?: [number | undefined, number | undefined] | [number];
|
|
50
84
|
/** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
|
|
@@ -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);
|
|
@@ -10,6 +10,17 @@ export interface AxisConfig {
|
|
|
10
10
|
tickFormat?: (d: any, index?: number, allTicks?: number[]) => string | ReactNode;
|
|
11
11
|
baseline?: boolean | "under";
|
|
12
12
|
jaggedBase?: boolean;
|
|
13
|
+
/** Explicit tick values. When provided, bypasses both d3's "nice"
|
|
14
|
+
* generator and `axisExtent: "exact"` — the caller has hand-picked
|
|
15
|
+
* the positions. Pixel-distance filtering downstream still drops
|
|
16
|
+
* overlapping labels. Accepts `number | Date`: values pass through
|
|
17
|
+
* to the scale (d3-scale's `scaleTime` reads Dates natively;
|
|
18
|
+
* `scaleLinear` accepts numbers — feeding a Date into a linear
|
|
19
|
+
* scale via `valueOf()` works at runtime but `tickFormat` receives
|
|
20
|
+
* the Date as-is, so user formatters should match the axis's
|
|
21
|
+
* underlying scale type). Mirrors the ordinal frame's
|
|
22
|
+
* `rTickValues` contract. */
|
|
23
|
+
tickValues?: Array<number | Date>;
|
|
13
24
|
/** Grid line stroke style: "dashed" (6,4), "dotted" (2,4), or a custom strokeDasharray string. Applied to grid lines extending from ticks across the chart area. */
|
|
14
25
|
gridStyle?: "dashed" | "dotted" | string;
|
|
15
26
|
/** Always include the domain max as a tick, even if d3 omits it. */
|
|
@@ -40,6 +51,12 @@ interface SVGOverlayProps {
|
|
|
40
51
|
yLabelRight?: string;
|
|
41
52
|
xFormat?: (d: number | Date | string, index?: number, allTicks?: number[]) => string | ReactNode;
|
|
42
53
|
yFormat?: (d: number | Date | string) => string | ReactNode;
|
|
54
|
+
/** Axis extent mode. "nice" (default) uses d3-scale's rounded
|
|
55
|
+
* tick generator — labels stay round but the first/last tick
|
|
56
|
+
* may sit inside the data domain. "exact" pins the first and
|
|
57
|
+
* last tick to the actual data min and max with equidistant
|
|
58
|
+
* intermediate ticks. Applies to both x and y axes. */
|
|
59
|
+
axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
|
|
43
60
|
showGrid?: boolean;
|
|
44
61
|
title?: string | ReactNode;
|
|
45
62
|
legend?: ReactNode | {
|
|
@@ -116,6 +133,7 @@ interface SVGUnderlayProps {
|
|
|
116
133
|
showGrid?: boolean;
|
|
117
134
|
xFormat?: (d: number | Date | string, index?: number, allTicks?: number[]) => string | ReactNode;
|
|
118
135
|
yFormat?: (d: number | Date | string) => string | ReactNode;
|
|
136
|
+
axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
|
|
119
137
|
}
|
|
120
138
|
export declare function SVGUnderlay(props: SVGUnderlayProps): import("react/jsx-runtime").JSX.Element | null;
|
|
121
139
|
export declare function SVGOverlay(props: SVGOverlayProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Annotation-context accessors must be string keys — SVG overlay
|
|
3
|
+
* rules look up coordinates with `data[xAccessor]`. When a chart's
|
|
4
|
+
* user accessor is a function, we bake the resolved value under a
|
|
5
|
+
* synthetic stable key on each annotation datum and forward the
|
|
6
|
+
* synthetic key as the annotation's xAccessor / yAccessor.
|
|
7
|
+
*
|
|
8
|
+
* Originally inline in `StreamXYFrame.tsx`; lifted here so
|
|
9
|
+
* `StreamOrdinalFrame` (and any future frame with the same need)
|
|
10
|
+
* can share the same plumbing rather than re-implementing it.
|
|
11
|
+
*/
|
|
12
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
13
|
+
export interface ResolvedAnnotationAccessor {
|
|
14
|
+
/** String key the annotation context will read on each datum. */
|
|
15
|
+
key: string | undefined;
|
|
16
|
+
/** Accessor function when the user supplied one (synthetic key
|
|
17
|
+
* gets baked from this); `null` when the user supplied a string
|
|
18
|
+
* or nothing. */
|
|
19
|
+
fn: ((d: Datum) => any) | null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resolve an accessor pair to the (key, fn) shape the annotation
|
|
23
|
+
* pipeline needs. Probes the primary accessor first, then the
|
|
24
|
+
* fallback (e.g. `valueAccessor` when no `yAccessor` was supplied).
|
|
25
|
+
*
|
|
26
|
+
* - String accessor → use it as the key, no enrichment needed.
|
|
27
|
+
* - Function accessor → use the synthetic resolved-key, run the fn
|
|
28
|
+
* per-datum to bake the value.
|
|
29
|
+
* - Otherwise undefined.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveAnnotationAccessor(primary: unknown, fallback: unknown, resolvedKey: string, fallbackKey: string): ResolvedAnnotationAccessor;
|
|
32
|
+
/**
|
|
33
|
+
* Build an `enrichAnnotationData(rawData)` function that walks the
|
|
34
|
+
* data array and bakes synthetic-key values for any function
|
|
35
|
+
* accessors. Returns the original array reference unchanged when no
|
|
36
|
+
* enrichment is needed (no annotations, no function accessors, or
|
|
37
|
+
* synthetic keys already present).
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildEnrichAnnotationData(xResolved: ResolvedAnnotationAccessor, yResolved: ResolvedAnnotationAccessor, hasAnnotations: boolean): (rawData: Datum[] | undefined) => Datum[] | undefined;
|
|
@@ -95,6 +95,8 @@ export interface GeoPipelineConfig {
|
|
|
95
95
|
introAnimation?: boolean;
|
|
96
96
|
annotations?: Datum[];
|
|
97
97
|
pointIdAccessor?: string | ((d: Datum) => string);
|
|
98
|
+
/** ID accessor on line data — required for `removeLine` by id. */
|
|
99
|
+
lineIdAccessor?: string | ((d: Datum) => string);
|
|
98
100
|
}
|
|
99
101
|
export interface StreamGeoFrameProps<T = Datum> {
|
|
100
102
|
projection: ProjectionProp;
|
|
@@ -108,6 +110,8 @@ export interface StreamGeoFrameProps<T = Datum> {
|
|
|
108
110
|
yAccessor?: string | ((d: T) => number);
|
|
109
111
|
lineDataAccessor?: string | ((d: T) => Datum[]);
|
|
110
112
|
pointIdAccessor?: string | ((d: T) => string);
|
|
113
|
+
/** ID accessor on line data — required for ref `removeLine` by id. */
|
|
114
|
+
lineIdAccessor?: string | ((d: T) => string);
|
|
111
115
|
lineType?: "geo" | "line";
|
|
112
116
|
/** Flow rendering style: "basic" (straight/great-circle), "offset" (bidirectional offset), "arc" (curved arcs) @default "basic" */
|
|
113
117
|
flowStyle?: "basic" | "offset" | "arc";
|
|
@@ -212,6 +216,14 @@ export interface StreamGeoFrameHandle {
|
|
|
212
216
|
pushMany(data: Datum[]): void;
|
|
213
217
|
/** Remove points by ID. Requires pointIdAccessor. */
|
|
214
218
|
removePoint(id: string | string[]): Datum[];
|
|
219
|
+
/** Append a single line/flow record. Coordinates pre-resolved per `lineDataAccessor`. */
|
|
220
|
+
pushLine(line: Datum): void;
|
|
221
|
+
/** Append multiple line/flow records in one batch. */
|
|
222
|
+
pushManyLines(lines: Datum[]): void;
|
|
223
|
+
/** Remove lines by ID. Requires `lineIdAccessor`. */
|
|
224
|
+
removeLine(id: string | string[]): Datum[];
|
|
225
|
+
/** Read the current line/flow set. */
|
|
226
|
+
getLines(): Datum[];
|
|
215
227
|
clear(): void;
|
|
216
228
|
getProjection(): GeoProjection | null;
|
|
217
229
|
getGeoPath(): GeoPath<any, GeoPermissibleObjects> | null;
|
|
@@ -156,6 +156,11 @@ export interface OrdinalPipelineConfig {
|
|
|
156
156
|
windowSize: number;
|
|
157
157
|
windowMode: WindowMode;
|
|
158
158
|
extentPadding: number;
|
|
159
|
+
/** When `"exact"`, the value-axis domain is pinned to the literal data
|
|
160
|
+
* min/max — `extentPadding` is skipped so the first and last ticks
|
|
161
|
+
* land on the actual data bounds. Default `"nice"` keeps the existing
|
|
162
|
+
* padded domain so symbols at the extremes don't clip the plot edge. */
|
|
163
|
+
axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
|
|
159
164
|
projection: "vertical" | "horizontal" | "radial";
|
|
160
165
|
categoryAccessor?: string | ((d: Datum) => string);
|
|
161
166
|
valueAccessor?: string | ((d: Datum) => number) | Array<string | ((d: Datum) => number)>;
|
|
@@ -315,6 +320,13 @@ export interface StreamOrdinalFrameProps<T = Datum> {
|
|
|
315
320
|
rTickValues?: number[];
|
|
316
321
|
/** Align first tick label to start and last tick label to end. Default false. */
|
|
317
322
|
tickLabelEdgeAlign?: boolean;
|
|
323
|
+
/** Axis extent mode for the value (r) axis. `"nice"` (default) uses
|
|
324
|
+
* d3-scale's rounded tick generator. `"exact"` pins the first and
|
|
325
|
+
* last tick to the actual data min and max with equidistant
|
|
326
|
+
* intermediate ticks. The categorical (o) axis is unaffected since
|
|
327
|
+
* it's a band scale, not a continuous one. Ignored when explicit
|
|
328
|
+
* `rTickValues` are provided — caller has hand-picked positions. */
|
|
329
|
+
axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
|
|
318
330
|
pieceStyle?: (d: Datum, category?: string) => Style;
|
|
319
331
|
summaryStyle?: (d: Datum, category?: string) => Style;
|
|
320
332
|
colorScheme?: string | string[];
|