semiotic 3.5.1 → 3.5.3

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 (127) hide show
  1. package/CLAUDE.md +26 -23
  2. package/README.md +27 -21
  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 +914 -1
  8. package/ai/system-prompt.md +4 -1
  9. package/dist/components/ThemeProvider.d.ts +2 -2
  10. package/dist/components/Tooltip/FlippingTooltip.d.ts +16 -1
  11. package/dist/components/charts/geo/FlowMap.d.ts +13 -4
  12. package/dist/components/charts/index.d.ts +6 -0
  13. package/dist/components/charts/network/OrbitDiagram.d.ts +5 -5
  14. package/dist/components/charts/network/ProcessSankey.d.ts +163 -0
  15. package/dist/components/charts/network/SankeyDiagram.d.ts +5 -1
  16. package/dist/components/charts/network/processSankey/algorithm.d.ts +193 -0
  17. package/dist/components/charts/network/processSankey/buildScenes.d.ts +51 -0
  18. package/dist/components/charts/network/processSankey/ribbonInputs.d.ts +32 -0
  19. package/dist/components/charts/network/processSankey/streamingLayout.d.ts +71 -0
  20. package/dist/components/charts/network/processSankey/tooltipUtils.d.ts +41 -0
  21. package/dist/components/charts/ordinal/BarChart.d.ts +12 -0
  22. package/dist/components/charts/ordinal/DotPlot.d.ts +9 -0
  23. package/dist/components/charts/ordinal/GaugeChart.d.ts +20 -0
  24. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +5 -0
  25. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +2 -0
  26. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +16 -11
  27. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +2 -0
  28. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +2 -0
  29. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +2 -0
  30. package/dist/components/charts/realtime/defaultRealtimeTooltip.d.ts +19 -0
  31. package/dist/components/charts/shared/axisExtent.d.ts +59 -0
  32. package/dist/components/charts/shared/chartSpecs.d.ts +75 -0
  33. package/dist/components/charts/shared/colorUtils.d.ts +8 -2
  34. package/dist/components/charts/shared/networkUtils.d.ts +3 -5
  35. package/dist/components/charts/shared/radialGeometry.d.ts +99 -0
  36. package/dist/components/charts/shared/regressionUtils.d.ts +59 -0
  37. package/dist/components/charts/shared/selectionUtils.d.ts +8 -1
  38. package/dist/components/charts/shared/streamPropsHelpers.d.ts +5 -0
  39. package/dist/components/charts/shared/tooltipUtils.d.ts +11 -0
  40. package/dist/components/charts/shared/types.d.ts +19 -0
  41. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +78 -0
  42. package/dist/components/charts/shared/useChartSetup.d.ts +2 -0
  43. package/dist/components/charts/shared/useCustomChartSetup.d.ts +1 -0
  44. package/dist/components/charts/shared/useEncodingDomain.d.ts +48 -0
  45. package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -1
  46. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +150 -0
  47. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +87 -0
  48. package/dist/components/charts/shared/useSeriesFeatures.d.ts +57 -0
  49. package/dist/components/charts/shared/useStreamStatus.d.ts +33 -0
  50. package/dist/components/charts/shared/useXYLineStyle.d.ts +69 -0
  51. package/dist/components/charts/shared/useXYPointStyle.d.ts +87 -0
  52. package/dist/components/charts/shared/withChartWrapper.d.ts +10 -3
  53. package/dist/components/charts/xy/AreaChart.d.ts +36 -2
  54. package/dist/components/charts/xy/BubbleChart.d.ts +9 -0
  55. package/dist/components/charts/xy/ConnectedScatterplot.d.ts +16 -0
  56. package/dist/components/charts/xy/DifferenceChart.d.ts +172 -0
  57. package/dist/components/charts/xy/LineChart.d.ts +26 -2
  58. package/dist/components/charts/xy/Scatterplot.d.ts +39 -1
  59. package/dist/components/geometry/ribbonGeometry.d.ts +76 -0
  60. package/dist/components/semiotic-ai.d.ts +2 -0
  61. package/dist/components/semiotic-network.d.ts +4 -0
  62. package/dist/components/semiotic-realtime.d.ts +2 -0
  63. package/dist/components/semiotic-utils.d.ts +4 -0
  64. package/dist/components/semiotic-xy.d.ts +2 -0
  65. package/dist/components/semiotic.d.ts +4 -4
  66. package/dist/components/server/renderToStaticSVG.d.ts +2 -1
  67. package/dist/components/server/serverChartConfigs.d.ts +3 -0
  68. package/dist/components/server/staticAnnotations.d.ts +1 -1
  69. package/dist/components/server/themeResolver.d.ts +7 -1
  70. package/dist/components/store/ThemeStore.d.ts +7 -1
  71. package/dist/components/stream/AccessibleDataTable.d.ts +2 -2
  72. package/dist/components/stream/GeoPipelineStore.d.ts +21 -0
  73. package/dist/components/stream/OrdinalSVGOverlay.d.ts +8 -0
  74. package/dist/components/stream/PipelineStore.d.ts +25 -13
  75. package/dist/components/stream/SVGOverlay.d.ts +9 -18
  76. package/dist/components/stream/accessorUtils.d.ts +2 -1
  77. package/dist/components/stream/annotationAccessorResolver.d.ts +39 -0
  78. package/dist/components/stream/geoTypes.d.ts +12 -0
  79. package/dist/components/stream/layouts/hierarchyLayoutPlugin.d.ts +1 -1
  80. package/dist/components/stream/networkTypes.d.ts +11 -0
  81. package/dist/components/stream/ordinalTypes.d.ts +27 -1
  82. package/dist/components/stream/renderers/cornerRadii.d.ts +33 -0
  83. package/dist/components/stream/renderers/wedgePathBuilder.d.ts +56 -0
  84. package/dist/components/stream/types.d.ts +127 -11
  85. package/dist/components/stream/xySceneBuilders/areaGradient.d.ts +20 -0
  86. package/dist/components/stream/xySceneBuilders/barScene.d.ts +2 -2
  87. package/dist/components/stream/xySceneBuilders/candlestickScene.d.ts +2 -2
  88. package/dist/components/stream/xySceneBuilders/heatmapScene.d.ts +2 -2
  89. package/dist/components/stream/xySceneBuilders/lineScene.d.ts +4 -3
  90. package/dist/components/stream/xySceneBuilders/pointScene.d.ts +2 -2
  91. package/dist/components/stream/xySceneBuilders/ribbonScene.d.ts +107 -0
  92. package/dist/components/stream/xySceneBuilders/swarmScene.d.ts +2 -2
  93. package/dist/components/stream/xySceneBuilders/types.d.ts +9 -12
  94. package/dist/components/stream/xySceneBuilders/waterfallScene.d.ts +2 -2
  95. package/dist/components/types/legendTypes.d.ts +1 -1
  96. package/dist/geo.min.js +1 -1
  97. package/dist/geo.module.min.js +1 -1
  98. package/dist/network.min.js +1 -1
  99. package/dist/network.module.min.js +1 -1
  100. package/dist/ordinal.min.js +1 -1
  101. package/dist/ordinal.module.min.js +1 -1
  102. package/dist/realtime.min.js +1 -1
  103. package/dist/realtime.module.min.js +1 -1
  104. package/dist/semiotic-ai.d.ts +2 -0
  105. package/dist/semiotic-ai.min.js +1 -1
  106. package/dist/semiotic-ai.module.min.js +1 -1
  107. package/dist/semiotic-data.min.js +1 -1
  108. package/dist/semiotic-data.module.min.js +1 -1
  109. package/dist/semiotic-network.d.ts +4 -0
  110. package/dist/semiotic-realtime.d.ts +2 -0
  111. package/dist/semiotic-recipes.min.js +1 -1
  112. package/dist/semiotic-recipes.module.min.js +1 -1
  113. package/dist/semiotic-themes.min.js +1 -1
  114. package/dist/semiotic-themes.module.min.js +1 -1
  115. package/dist/semiotic-utils.d.ts +4 -0
  116. package/dist/semiotic-utils.min.js +1 -1
  117. package/dist/semiotic-utils.module.min.js +1 -1
  118. package/dist/semiotic-xy.d.ts +2 -0
  119. package/dist/semiotic.d.ts +4 -4
  120. package/dist/semiotic.min.js +1 -1
  121. package/dist/semiotic.module.min.js +1 -1
  122. package/dist/server.min.js +1 -1
  123. package/dist/server.module.min.js +1 -1
  124. package/dist/xy.min.js +1 -1
  125. package/dist/xy.module.min.js +1 -1
  126. package/package.json +23 -10
  127. package/dist/components/stream/xySceneBuilders/boundsScene.d.ts +0 -9
@@ -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,9 +23,9 @@ 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";
28
- export type { StreamXYFrameProps, StreamXYFrameHandle, StreamChartType, RuntimeMode, SceneNode, Changeset, StreamScales, StreamLayout, CurveType, CanvasRendererFn } from "./stream/types";
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
+ export type { StreamXYFrameProps, StreamXYFrameHandle, StreamChartType, RuntimeMode, SceneNode, Changeset, StreamScales, StreamLayout, CurveType, CanvasRendererFn, XYFrameAxisConfig, BandConfig } from "./stream/types";
29
29
  export type { StreamRendererFn } from "./stream/renderers/types";
30
30
  export type { StreamOrdinalFrameProps, StreamOrdinalFrameHandle, OrdinalChartType, OrdinalScales, OrdinalSceneNode } from "./stream/ordinalTypes";
31
31
  export type { StreamNetworkFrameProps, StreamNetworkFrameHandle, NetworkChartType, NetworkSceneNode, NetworkSceneEdge, NetworkLabel, ThresholdAlertConfig } from "./stream/networkTypes";
@@ -22,6 +22,7 @@ import type { StreamGeoFrameProps } from "../stream/geoTypes";
22
22
  import { type ThemeInput } from "./themeResolver";
23
23
  import { CHART_CONFIGS } from "./serverChartConfigs";
24
24
  type FrameType = "xy" | "ordinal" | "network" | "geo";
25
+ type StaticFrameProps = (StreamXYFrameProps | StreamNetworkFrameProps | StreamOrdinalFrameProps | StreamGeoFrameProps) & ThemeAwareProps;
25
26
  interface ThemeAwareProps {
26
27
  theme?: ThemeInput;
27
28
  showLegend?: boolean;
@@ -35,7 +36,7 @@ interface ThemeAwareProps {
35
36
  /** Prefix for SVG element IDs — used by renderDashboard to avoid collisions */
36
37
  _idPrefix?: string;
37
38
  }
38
- export declare function renderToStaticSVG(frameType: FrameType, props: (StreamXYFrameProps | StreamNetworkFrameProps | StreamOrdinalFrameProps | StreamGeoFrameProps) & ThemeAwareProps): string;
39
+ export declare function renderToStaticSVG(frameType: FrameType, props: StaticFrameProps): string;
39
40
  export declare function renderXYToStaticSVG(props: StreamXYFrameProps & ThemeAwareProps): string;
40
41
  export declare function renderOrdinalToStaticSVG(props: StreamOrdinalFrameProps & ThemeAwareProps): string;
41
42
  export declare function renderNetworkToStaticSVG(props: StreamNetworkFrameProps & ThemeAwareProps): string;
@@ -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;
@@ -26,6 +27,7 @@ export declare const CHART_CONFIGS: {
26
27
  };
27
28
  };
28
29
  ConnectedScatterplot: ChartConfig;
30
+ QuadrantChart: ChartConfig;
29
31
  Heatmap: ChartConfig;
30
32
  BarChart: ChartConfig;
31
33
  StackedBarChart: ChartConfig;
@@ -44,6 +46,7 @@ export declare const CHART_CONFIGS: {
44
46
  GaugeChart: ChartConfig;
45
47
  ForceDirectedGraph: ChartConfig;
46
48
  SankeyDiagram: ChartConfig;
49
+ ProcessSankey: ChartConfig;
47
50
  ChordDiagram: ChartConfig;
48
51
  TreeDiagram: ChartConfig;
49
52
  Treemap: ChartConfig;
@@ -29,7 +29,7 @@ interface AnnotationLayout {
29
29
  height: number;
30
30
  }
31
31
  export interface StaticAnnotationConfig {
32
- annotations: Datum[];
32
+ annotations?: Datum[];
33
33
  scales: AnnotationScales;
34
34
  layout: AnnotationLayout;
35
35
  theme: SemioticTheme;
@@ -6,7 +6,12 @@
6
6
  * No CSS custom properties — everything is concrete for inline SVG.
7
7
  */
8
8
  import type { SemioticTheme } from "../store/ThemeStore";
9
- export type ThemeInput = string | Partial<SemioticTheme> | undefined;
9
+ type PartialThemeObject = Omit<Partial<SemioticTheme>, "colors" | "typography" | "tooltip"> & {
10
+ colors?: Partial<SemioticTheme["colors"]>;
11
+ typography?: Partial<SemioticTheme["typography"]>;
12
+ tooltip?: Partial<NonNullable<SemioticTheme["tooltip"]>>;
13
+ };
14
+ export type ThemeInput = string | PartialThemeObject | undefined;
10
15
  /**
11
16
  * Resolve a theme input to a full SemioticTheme object.
12
17
  *
@@ -37,3 +42,4 @@ export declare function themeStyles(theme: SemioticTheme): {
37
42
  titleFontSize: number;
38
43
  tickFontFamily: string;
39
44
  };
45
+ export {};
@@ -90,6 +90,12 @@ export interface ThemeStoreState {
90
90
  theme: SemioticTheme;
91
91
  setTheme: (theme: ThemeStoreUpdate) => void;
92
92
  }
93
- export type ThemeStoreUpdate = Partial<SemioticTheme> | "light" | "dark" | "high-contrast";
93
+ export type SemioticThemeUpdate = Omit<Partial<SemioticTheme>, "colors" | "typography" | "tooltip" | "accessibility"> & {
94
+ colors?: Partial<SemioticTheme["colors"]>;
95
+ typography?: Partial<SemioticTheme["typography"]>;
96
+ tooltip?: Partial<NonNullable<SemioticTheme["tooltip"]>>;
97
+ accessibility?: Partial<NonNullable<SemioticTheme["accessibility"]>>;
98
+ };
99
+ export type ThemeStoreUpdate = SemioticThemeUpdate | "light" | "dark" | "high-contrast";
94
100
  export declare function resolveThemeUpdate(current: SemioticTheme, theme: ThemeStoreUpdate): SemioticTheme;
95
101
  export declare const ThemeProvider: import("react").FC<import("./createStore").StoreProviderProps<ThemeStoreState>>, useThemeSelector: <R>(selector: (state: ThemeStoreState) => R) => R;
@@ -1,14 +1,14 @@
1
1
  import * as React from "react";
2
2
  /** Scene node type used by the accessible data table — accepts any frame's scene nodes */
3
3
  type AnySceneNode = {
4
- type: string;
4
+ type?: string;
5
5
  [key: string]: any;
6
6
  };
7
7
  declare const SR_ONLY_STYLE: React.CSSProperties;
8
8
  /**
9
9
  * Compute an aria-label describing the chart type and data shape from the scene graph.
10
10
  */
11
- export declare function computeCanvasAriaLabel(scene: AnySceneNode[], chartType: string): string;
11
+ export declare function computeCanvasAriaLabel(scene: AnySceneNode[] | null | undefined, chartType: string): string;
12
12
  /**
13
13
  * Compute an aria-label for network charts from scene nodes and edges.
14
14
  */
@@ -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;
@@ -1,8 +1,10 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import { type Quadtree } from "d3-quadtree";
3
3
  import { RingBuffer } from "../realtime/RingBuffer";
4
- import type { Changeset, StreamChartType, StreamScales, StreamLayout, SceneNode, PointSceneNode, CandlestickStyle, Style, ArrowOfTime, WindowMode, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, CurveType, BarStyle, ThemeSemanticColors } from "./types";
4
+ import type { Changeset, StreamChartType, StreamScales, StreamLayout, SceneNode, PointSceneNode, CandlestickStyle, Style, ArrowOfTime, WindowMode, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, CurveType, BarStyle, ThemeSemanticColors, BandConfig } from "./types";
5
+ import { type CoercibleNumber } from "./accessorUtils";
5
6
  import type { ActiveTransition } from "./pipelineTransitionUtils";
7
+ import type { ResolvedRibbon } from "./xySceneBuilders/ribbonScene";
6
8
  import type { CustomLayout } from "./customLayout";
7
9
  import type { MarginType } from "../types/marginType";
8
10
  export interface PipelineConfig {
@@ -14,13 +16,18 @@ export interface PipelineConfig {
14
16
  extentPadding: number;
15
17
  /** Pixel inset on scale ranges to prevent glyph clipping at chart edges. Default 0. */
16
18
  scalePadding?: number;
19
+ /** When `"exact"`, the x and y axis domains pin to the literal data
20
+ * min/max — `extentPadding` is skipped so the first and last ticks
21
+ * read as the actual data bounds. Default `"nice"` keeps the existing
22
+ * padded domain so glyphs at the extremes don't clip the plot edge. */
23
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
17
24
  maxCapacity?: number;
18
- xAccessor?: string | ((d: Datum) => number);
19
- yAccessor?: string | ((d: Datum) => number);
20
- timeAccessor?: string | ((d: Datum) => number);
21
- valueAccessor?: string | ((d: Datum) => number);
25
+ xAccessor?: string | ((d: Datum) => CoercibleNumber);
26
+ yAccessor?: string | ((d: Datum) => CoercibleNumber);
27
+ timeAccessor?: string | ((d: Datum) => CoercibleNumber);
28
+ valueAccessor?: string | ((d: Datum) => CoercibleNumber);
22
29
  colorAccessor?: string | ((d: Datum) => string);
23
- sizeAccessor?: string | ((d: Datum) => number);
30
+ sizeAccessor?: string | ((d: Datum) => CoercibleNumber);
24
31
  groupAccessor?: string | ((d: Datum) => string);
25
32
  categoryAccessor?: string | ((d: Datum) => string);
26
33
  lineDataAccessor?: string;
@@ -35,16 +42,17 @@ export interface PipelineConfig {
35
42
  baseline?: "zero" | "wiggle" | "silhouette";
36
43
  /** Stack order — see StreamXYFrameProps.stackOrder. */
37
44
  stackOrder?: "key" | "insideOut" | "asc" | "desc";
38
- openAccessor?: string | ((d: Datum) => number);
39
- highAccessor?: string | ((d: Datum) => number);
40
- lowAccessor?: string | ((d: Datum) => number);
41
- closeAccessor?: string | ((d: Datum) => number);
45
+ openAccessor?: string | ((d: Datum) => CoercibleNumber);
46
+ highAccessor?: string | ((d: Datum) => CoercibleNumber);
47
+ lowAccessor?: string | ((d: Datum) => CoercibleNumber);
48
+ closeAccessor?: string | ((d: Datum) => CoercibleNumber);
42
49
  candlestickStyle?: CandlestickStyle;
43
50
  /** Internal: set by PipelineStore when open/close accessors are both missing */
44
51
  candlestickRangeMode?: boolean;
45
- boundsAccessor?: string | ((d: Datum) => number);
52
+ boundsAccessor?: string | ((d: Datum) => CoercibleNumber);
46
53
  boundsStyle?: any;
47
- y0Accessor?: string | ((d: Datum) => number);
54
+ y0Accessor?: string | ((d: Datum) => CoercibleNumber);
55
+ band?: BandConfig | BandConfig[];
48
56
  gradientFill?: {
49
57
  topOpacity: number;
50
58
  bottomOpacity: number;
@@ -144,8 +152,12 @@ export declare class PipelineStore {
144
152
  private getCategory;
145
153
  private getSize;
146
154
  private getColor;
147
- private getBounds;
148
155
  private getY0;
156
+ /** Unified ribbon list — `boundsAccessor` + `band` both compose into
157
+ * this single array (see `resolveRibbons`). Read by the scene
158
+ * builders, y-extent expansion, and tooltip enrichment (which
159
+ * filters on `kind === "band"`). Empty when neither prop is set. */
160
+ resolvedRibbons: ResolvedRibbon[];
149
161
  private getOpen;
150
162
  private getHigh;
151
163
  private getLow;
@@ -1,25 +1,9 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
- import type { StreamScales, MarginalGraphicsConfig } from "./types";
2
+ import type { StreamScales, MarginalGraphicsConfig, XYFrameAxisConfig } from "./types";
3
3
  import type { AnnotationContext } from "../realtime/types";
4
4
  import type { ReactNode } from "react";
5
5
  import type { LegendGroup, GradientLegendConfig } from "../types/legendTypes";
6
- export interface AxisConfig {
7
- orient: "left" | "right" | "top" | "bottom";
8
- label?: string;
9
- ticks?: number;
10
- tickFormat?: (d: any, index?: number, allTicks?: number[]) => string | ReactNode;
11
- baseline?: boolean | "under";
12
- jaggedBase?: boolean;
13
- /** 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
- gridStyle?: "dashed" | "dotted" | string;
15
- /** Always include the domain max as a tick, even if d3 omits it. */
16
- includeMax?: boolean;
17
- /** Auto-rotate labels 45° when horizontal spacing is too tight. */
18
- autoRotate?: boolean;
19
- /** Highlight ticks at time boundaries (new month, year, etc.) with semibold text.
20
- * `true` auto-detects Date boundaries. A function receives (value, index) and returns true for landmark ticks. */
21
- landmarkTicks?: boolean | ((value: any, index: number) => boolean);
22
- }
6
+ export type AxisConfig = XYFrameAxisConfig;
23
7
  interface SVGOverlayProps {
24
8
  width: number;
25
9
  height: number;
@@ -40,6 +24,12 @@ interface SVGOverlayProps {
40
24
  yLabelRight?: string;
41
25
  xFormat?: (d: number | Date | string, index?: number, allTicks?: number[]) => string | ReactNode;
42
26
  yFormat?: (d: number | Date | string) => string | ReactNode;
27
+ /** Axis extent mode. "nice" (default) uses d3-scale's rounded
28
+ * tick generator — labels stay round but the first/last tick
29
+ * may sit inside the data domain. "exact" pins the first and
30
+ * last tick to the actual data min and max with equidistant
31
+ * intermediate ticks. Applies to both x and y axes. */
32
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
43
33
  showGrid?: boolean;
44
34
  title?: string | ReactNode;
45
35
  legend?: ReactNode | {
@@ -116,6 +106,7 @@ interface SVGUnderlayProps {
116
106
  showGrid?: boolean;
117
107
  xFormat?: (d: number | Date | string, index?: number, allTicks?: number[]) => string | ReactNode;
118
108
  yFormat?: (d: number | Date | string) => string | ReactNode;
109
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
119
110
  }
120
111
  export declare function SVGUnderlay(props: SVGUnderlayProps): import("react/jsx-runtime").JSX.Element | null;
121
112
  export declare function SVGOverlay(props: SVGOverlayProps): import("react/jsx-runtime").JSX.Element | null;
@@ -12,6 +12,7 @@
12
12
  * the variable in the dependency array so the reference changes when behavior changes.
13
13
  */
14
14
  export declare function accessorsEquivalent(a: string | ((...args: any[]) => any) | undefined, b: string | ((...args: any[]) => any) | undefined): boolean;
15
- export declare function resolveAccessor<T extends Record<string, unknown>>(accessor: string | ((d: T) => number) | undefined, fallback: string): (d: T) => number;
15
+ export type CoercibleNumber = number | Date | string;
16
+ export declare function resolveAccessor<T extends Record<string, unknown>>(accessor: string | ((d: T) => CoercibleNumber) | undefined, fallback: string): (d: T) => number;
16
17
  export declare function resolveRawAccessor<T extends Record<string, unknown>>(accessor: string | ((d: T) => unknown) | undefined, fallback: string): (d: T) => unknown;
17
18
  export declare function resolveStringAccessor<T extends Record<string, unknown>>(accessor: string | ((d: T) => string) | undefined, fallback?: string): ((d: T) => string) | undefined;
@@ -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;
@@ -5,7 +5,7 @@ import type { NetworkLayoutPlugin } from "../networkTypes";
5
5
  * Uses d3-hierarchy for all layout computations. This plugin is `hierarchical: true`,
6
6
  * meaning the input data is a single root node object rather than flat nodes+edges arrays.
7
7
  *
8
- * The hierarchy root is passed via `(config as any).__hierarchyRoot`, set by the store
8
+ * The hierarchy root is passed via `config.__hierarchyRoot`, set by the store
9
9
  * before calling computeLayout. The plugin builds the d3 hierarchy internally, runs the
10
10
  * appropriate layout algorithm, and populates the nodes/edges arrays.
11
11
  *
@@ -262,9 +262,20 @@ export interface NetworkLineEdge {
262
262
  export interface NetworkBezierEdge {
263
263
  type: "bezier";
264
264
  pathD: string;
265
+ /** When false, the hit tester skips this edge. Used for
266
+ * decorative scene-edges like ProcessSankey's gradient stubs —
267
+ * they paint visually but shouldn't intercept hover. */
268
+ interactive?: boolean;
265
269
  bezierCache?: BezierCache;
266
270
  style: Style;
267
271
  datum: SceneDatum;
272
+ /** Internal gradient used by circular sankey stub bands. */
273
+ _gradient?: {
274
+ x0: number;
275
+ x1: number;
276
+ from: number;
277
+ to: number;
278
+ };
268
279
  _pulseIntensity?: number;
269
280
  _pulseColor?: string;
270
281
  /** Lazily-built Path2D for hit testing; invalidated when pathD changes. */
@@ -21,8 +21,22 @@ export interface WedgeSceneNode {
21
21
  startAngle: number;
22
22
  /** End angle in radians, canvas convention */
23
23
  endAngle: number;
24
- /** Corner radius for rounded wedge arcs (d3-shape arc.cornerRadius) */
24
+ /** Corner radius for rounded wedge arcs (d3-shape arc.cornerRadius).
25
+ * When set on its own, rounds ALL FOUR corners (the d3-shape default).
26
+ * Pair with `roundedEnds` to round only the gauge's outer endpoints —
27
+ * the swimlane analogue for radial sectors: first wedge's start side
28
+ * + last wedge's end side rounded, internal zone seams stay square. */
25
29
  cornerRadius?: number;
30
+ /** Selective per-end rounding. When omitted, `cornerRadius` rounds all
31
+ * four corners. When provided, `cornerRadius` rounds ONLY the sides
32
+ * marked `true` — `{ start: true }` rounds the wedge's startAngle
33
+ * side (both inner and outer corners at that angle), `{ end: true }`
34
+ * rounds the endAngle side. The gauge scene builder uses this to
35
+ * paint outer endpoints rounded but internal zone seams square. */
36
+ roundedEnds?: {
37
+ start?: boolean;
38
+ end?: boolean;
39
+ };
26
40
  style: Style;
27
41
  datum: SceneDatum;
28
42
  category?: string;
@@ -156,6 +170,11 @@ export interface OrdinalPipelineConfig {
156
170
  windowSize: number;
157
171
  windowMode: WindowMode;
158
172
  extentPadding: number;
173
+ /** When `"exact"`, the value-axis domain is pinned to the literal data
174
+ * min/max — `extentPadding` is skipped so the first and last ticks
175
+ * land on the actual data bounds. Default `"nice"` keeps the existing
176
+ * padded domain so symbols at the extremes don't clip the plot edge. */
177
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
159
178
  projection: "vertical" | "horizontal" | "radial";
160
179
  categoryAccessor?: string | ((d: Datum) => string);
161
180
  valueAccessor?: string | ((d: Datum) => number) | Array<string | ((d: Datum) => number)>;
@@ -315,6 +334,13 @@ export interface StreamOrdinalFrameProps<T = Datum> {
315
334
  rTickValues?: number[];
316
335
  /** Align first tick label to start and last tick label to end. Default false. */
317
336
  tickLabelEdgeAlign?: boolean;
337
+ /** Axis extent mode for the value (r) axis. `"nice"` (default) uses
338
+ * d3-scale's rounded tick generator. `"exact"` pins the first and
339
+ * last tick to the actual data min and max with equidistant
340
+ * intermediate ticks. The categorical (o) axis is unaffected since
341
+ * it's a band scale, not a continuous one. Ignored when explicit
342
+ * `rTickValues` are provided — caller has hand-picked positions. */
343
+ axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
318
344
  pieceStyle?: (d: Datum, category?: string) => Style;
319
345
  summaryStyle?: (d: Datum, category?: string) => Style;
320
346
  colorScheme?: string | string[];
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Per-corner radius utilities shared between the canvas (`barCanvasRenderer`)
3
+ * and SVG (`SceneToSVG`) paint paths.
4
+ *
5
+ * Both paths previously carried the same `hasAnyCornerRadius` predicate
6
+ * and the same `min(radius, w/2, h/2)` clamp inline. Splitting them by
7
+ * renderer left two near-identical implementations that drifted in
8
+ * comments more than once; centralizing here keeps the swimlane rounding
9
+ * contract — and any future per-corner shape (cards, tab corners,
10
+ * partial-stack rounding) — in one place.
11
+ *
12
+ * The actual path-tracing primitives (canvas `arcTo` vs SVG `A`) stay in
13
+ * each renderer because their output formats differ — this module owns
14
+ * the geometry, the renderers own the drawing language.
15
+ */
16
+ import type { RectSceneNode } from "../types";
17
+ /** True when at least one corner has a positive radius. */
18
+ export declare function hasAnyCornerRadius(c: NonNullable<RectSceneNode["cornerRadii"]>): boolean;
19
+ export interface ClampedCornerRadii {
20
+ tl: number;
21
+ tr: number;
22
+ br: number;
23
+ bl: number;
24
+ }
25
+ /**
26
+ * Read each corner's radius and clamp to `[0, min(w, h) / 2]` so a
27
+ * corner never overdraws past the rect's center on thin lanes AND a
28
+ * negative input never leaks into the `moveTo` / `lineTo` math (where
29
+ * a negative radius would offset the start point into invalid space,
30
+ * producing visibly bent or escaping paths even though the `arcTo`
31
+ * is gated on `> 0`). Missing corners collapse to 0 (square).
32
+ */
33
+ export declare function clampCornerRadii(node: RectSceneNode): ClampedCornerRadii;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Annular sector path builder with selective per-end corner rounding.
3
+ *
4
+ * d3-shape's `arc().cornerRadius()` rounds ALL FOUR corners of an
5
+ * annular sector uniformly — there's no built-in per-corner control.
6
+ * For gauges with multiple zones we want the gauge's OUTER endpoints
7
+ * rounded (the swimlane convention applied radially) but internal zone
8
+ * seams to stay square. This helper builds the path manually so each
9
+ * end can be opted in independently.
10
+ *
11
+ * The geometry mirrors d3's algorithm: a corner circle of radius `cr`
12
+ * is inscribed tangent to both walls (the outer/inner arc and the
13
+ * radial line at the relevant angle). The angular setback from the
14
+ * radial line is `asin(cr / (R ± cr))` — `R - cr` for outer corners
15
+ * (corner centers sit `cr` inward of the outer arc), `R + cr` for
16
+ * inner corners.
17
+ *
18
+ * Returned shape is an SVG path `d` attribute, equivalently consumable
19
+ * by Path2D in canvas. Coordinates are wedge-local (centered at
20
+ * origin); the renderer translates to `(cx, cy)`.
21
+ *
22
+ * Inputs use the **canvas angle convention** (0 = 3 o'clock, positive
23
+ * clockwise) — same as `WedgeSceneNode.startAngle/endAngle`. d3-shape
24
+ * uses 0 = 12 o'clock, so callers that pre-rotated by `+π/2` to call
25
+ * d3-arc should NOT pre-rotate when calling this helper.
26
+ */
27
+ export interface AnnularPathOptions {
28
+ innerRadius: number;
29
+ outerRadius: number;
30
+ startAngle: number;
31
+ endAngle: number;
32
+ cornerRadius?: number;
33
+ /** Round the side at startAngle (both inner + outer corners there). */
34
+ roundStart?: boolean;
35
+ /** Round the side at endAngle (both inner + outer corners there). */
36
+ roundEnd?: boolean;
37
+ }
38
+ /**
39
+ * Build the SVG path for an annular sector with per-end rounding.
40
+ *
41
+ * When `cornerRadius` is 0 or unset, OR neither `roundStart` nor
42
+ * `roundEnd` is true, the result is a plain unrounded sector — same
43
+ * shape `drawWedgeManual` would emit. When both ends are rounded with
44
+ * a single cornerRadius value, the output matches what d3-arc would
45
+ * produce. The novel case is mixed rounding: e.g. `roundStart: true,
46
+ * roundEnd: false` rounds only the gauge's leading edge.
47
+ *
48
+ * Defensive clamps:
49
+ * - `cornerRadius` is clamped to `(outerRadius - innerRadius) / 2`
50
+ * so the corner circles can't cross the ring's centerline (which
51
+ * would invert the inner radial line).
52
+ * - If the angular sweep is too small to fit two corner radii
53
+ * end-to-end on the requested side, that side falls back to
54
+ * unrounded so the path stays well-formed.
55
+ */
56
+ export declare function annularSectorPath(opts: AnnularPathOptions): string;