semiotic 3.5.2 → 3.5.4

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 (101) hide show
  1. package/CLAUDE.md +9 -8
  2. package/README.md +15 -15
  3. package/ai/componentMetadata.cjs +9 -2
  4. package/ai/dist/mcp-server.js +4 -1
  5. package/ai/examples.md +27 -0
  6. package/ai/schema.json +300 -41
  7. package/ai/system-prompt.md +1 -1
  8. package/dist/components/ThemeProvider.d.ts +2 -2
  9. package/dist/components/charts/index.d.ts +3 -3
  10. package/dist/components/charts/network/ProcessSankey.d.ts +22 -0
  11. package/dist/components/charts/network/SankeyDiagram.d.ts +5 -1
  12. package/dist/components/charts/network/Treemap.d.ts +8 -0
  13. package/dist/components/charts/network/processSankey/algorithm.d.ts +57 -0
  14. package/dist/components/charts/network/processSankey/buildScenes.d.ts +6 -0
  15. package/dist/components/charts/network/processSankey/streamingLayout.d.ts +13 -0
  16. package/dist/components/charts/ordinal/GaugeChart.d.ts +10 -0
  17. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +2 -0
  18. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +24 -0
  19. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +2 -0
  20. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +2 -0
  21. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +2 -0
  22. package/dist/components/charts/shared/gaugeGradient.d.ts +62 -0
  23. package/dist/components/charts/shared/hooks.d.ts +2 -2
  24. package/dist/components/charts/shared/streamPropsHelpers.d.ts +2 -2
  25. package/dist/components/charts/shared/tooltipUtils.d.ts +11 -0
  26. package/dist/components/charts/shared/types.d.ts +17 -2
  27. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +4 -1
  28. package/dist/components/charts/shared/useChartSetup.d.ts +4 -2
  29. package/dist/components/charts/shared/useCustomChartSetup.d.ts +2 -1
  30. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +2 -0
  31. package/dist/components/charts/shared/withChartWrapper.d.ts +10 -3
  32. package/dist/components/charts/xy/AreaChart.d.ts +27 -2
  33. package/dist/components/charts/xy/LineChart.d.ts +26 -2
  34. package/dist/components/charts/xy/Scatterplot.d.ts +5 -1
  35. package/dist/components/semiotic-ai.d.ts +1 -1
  36. package/dist/components/semiotic-realtime.d.ts +3 -3
  37. package/dist/components/semiotic-server.d.ts +1 -0
  38. package/dist/components/semiotic-xy.d.ts +1 -1
  39. package/dist/components/semiotic.d.ts +6 -5
  40. package/dist/components/server/renderToStaticSVG.d.ts +4 -1
  41. package/dist/components/server/serverChartConfigs.d.ts +1 -0
  42. package/dist/components/server/staticAnnotations.d.ts +1 -1
  43. package/dist/components/server/staticLegend.d.ts +35 -0
  44. package/dist/components/server/themeResolver.d.ts +7 -1
  45. package/dist/components/store/ThemeStore.d.ts +9 -1
  46. package/dist/components/stream/AccessibleDataTable.d.ts +2 -2
  47. package/dist/components/stream/NetworkSVGOverlay.d.ts +2 -1
  48. package/dist/components/stream/OrdinalSVGOverlay.d.ts +2 -1
  49. package/dist/components/stream/PipelineStore.d.ts +20 -13
  50. package/dist/components/stream/SVGOverlay.d.ts +4 -30
  51. package/dist/components/stream/SceneToSVG.d.ts +1 -1
  52. package/dist/components/stream/accessorUtils.d.ts +2 -1
  53. package/dist/components/stream/geoTypes.d.ts +2 -1
  54. package/dist/components/stream/hoverUtils.d.ts +1 -0
  55. package/dist/components/stream/layouts/hierarchyLayoutPlugin.d.ts +1 -1
  56. package/dist/components/stream/legendRenderer.d.ts +2 -1
  57. package/dist/components/stream/networkTypes.d.ts +13 -1
  58. package/dist/components/stream/ordinalTypes.d.ts +31 -3
  59. package/dist/components/stream/renderers/wedgePathBuilder.d.ts +87 -0
  60. package/dist/components/stream/types.d.ts +110 -16
  61. package/dist/components/stream/xySceneBuilders/areaGradient.d.ts +20 -0
  62. package/dist/components/stream/xySceneBuilders/barScene.d.ts +2 -2
  63. package/dist/components/stream/xySceneBuilders/candlestickScene.d.ts +2 -2
  64. package/dist/components/stream/xySceneBuilders/heatmapScene.d.ts +2 -2
  65. package/dist/components/stream/xySceneBuilders/lineScene.d.ts +4 -3
  66. package/dist/components/stream/xySceneBuilders/pointScene.d.ts +2 -2
  67. package/dist/components/stream/xySceneBuilders/ribbonScene.d.ts +107 -0
  68. package/dist/components/stream/xySceneBuilders/swarmScene.d.ts +2 -2
  69. package/dist/components/stream/xySceneBuilders/types.d.ts +9 -12
  70. package/dist/components/stream/xySceneBuilders/waterfallScene.d.ts +2 -2
  71. package/dist/components/types/legendTypes.d.ts +15 -0
  72. package/dist/components/types/marginType.d.ts +17 -3
  73. package/dist/geo.min.js +1 -1
  74. package/dist/geo.module.min.js +1 -1
  75. package/dist/network.min.js +1 -1
  76. package/dist/network.module.min.js +1 -1
  77. package/dist/ordinal.min.js +1 -1
  78. package/dist/ordinal.module.min.js +1 -1
  79. package/dist/realtime.min.js +1 -1
  80. package/dist/realtime.module.min.js +1 -1
  81. package/dist/semiotic-ai.d.ts +1 -1
  82. package/dist/semiotic-ai.min.js +1 -1
  83. package/dist/semiotic-ai.module.min.js +1 -1
  84. package/dist/semiotic-data.min.js +1 -1
  85. package/dist/semiotic-data.module.min.js +1 -1
  86. package/dist/semiotic-realtime.d.ts +3 -3
  87. package/dist/semiotic-server.d.ts +1 -0
  88. package/dist/semiotic-themes.min.js +1 -1
  89. package/dist/semiotic-themes.module.min.js +1 -1
  90. package/dist/semiotic-utils.min.js +1 -1
  91. package/dist/semiotic-utils.module.min.js +1 -1
  92. package/dist/semiotic-xy.d.ts +1 -1
  93. package/dist/semiotic.d.ts +6 -5
  94. package/dist/semiotic.min.js +1 -1
  95. package/dist/semiotic.module.min.js +1 -1
  96. package/dist/server.min.js +1 -1
  97. package/dist/server.module.min.js +1 -1
  98. package/dist/xy.min.js +1 -1
  99. package/dist/xy.module.min.js +1 -1
  100. package/package.json +25 -25
  101. package/dist/components/stream/xySceneBuilders/boundsScene.d.ts +0 -9
@@ -1,11 +1,18 @@
1
1
  import type { Datum } from "../shared/datumTypes";
2
2
  import * as React from "react";
3
- import type { StreamXYFrameProps } from "../../stream/types";
3
+ import type { StreamXYFrameProps, BandConfig } from "../../stream/types";
4
4
  import type { RealtimeFrameHandle } from "../../realtime/types";
5
5
  import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
6
6
  import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
7
7
  import { type TooltipProp } from "../../Tooltip/Tooltip";
8
8
  import type { ForecastConfig, AnomalyConfig } from "../shared/statisticalOverlays";
9
+ export interface SemanticGradientStop {
10
+ /** Percent from baseline to line/top. 0 = baseline, 100 = line/top. */
11
+ at: number;
12
+ color: string;
13
+ /** Optional opacity applied to this stop. */
14
+ opacity?: number;
15
+ }
9
16
  /**
10
17
  * AreaChart component props
11
18
  */
@@ -23,7 +30,7 @@ export interface AreaChartProps<TDatum extends Datum = Datum> extends BaseChartP
23
30
  * Field name or function to access x values
24
31
  * @default "x"
25
32
  */
26
- xAccessor?: ChartAccessor<TDatum, number>;
33
+ xAccessor?: ChartAccessor<TDatum, number | Date | string>;
27
34
  /**
28
35
  * Field name or function to access y values
29
36
  * @default "y"
@@ -90,6 +97,14 @@ export interface AreaChartProps<TDatum extends Datum = Datum> extends BaseChartP
90
97
  color: string;
91
98
  }>;
92
99
  };
100
+ /**
101
+ * Semantic area gradient stops expressed in user-facing percentages:
102
+ * `at: 0` is the baseline and `at: 100` is the line/top of the area.
103
+ * This is converted to `gradientFill.colorStops`, whose raw offsets use
104
+ * the renderer coordinate convention (`0` = top, `1` = baseline).
105
+ * When set, this takes precedence over `gradientFill`.
106
+ */
107
+ semanticGradient?: SemanticGradientStop[];
93
108
  /**
94
109
  * Area opacity (flat fill, ignored when gradientFill is set)
95
110
  * @default 0.7
@@ -183,6 +198,16 @@ export interface AreaChartProps<TDatum extends Datum = Datum> extends BaseChartP
183
198
  * ```
184
199
  */
185
200
  anomaly?: AnomalyConfig;
201
+ /**
202
+ * Asymmetric min/max band(s) drawn under the area fill. Distinct from
203
+ * `y0Accessor` (which replaces the area's baseline) — `band` is a
204
+ * decorative envelope painted beneath the area, driven by independent
205
+ * `y0Accessor` / `y1Accessor` per band. Pass an array for fan charts.
206
+ *
207
+ * The hovered datum gets `band: { y0, y1 }` and `bands: [...]` for
208
+ * tooltip access. See the LineChart docs for full ergonomics.
209
+ */
210
+ band?: BandConfig<TDatum> | Array<BandConfig<TDatum>>;
186
211
  /**
187
212
  * Fixed x domain `[min, max]`. Either bound may be `undefined` to leave
188
213
  * that side data-derived. Useful for pinning a time axis to a known
@@ -1,6 +1,6 @@
1
1
  import type { Datum } from "../shared/datumTypes";
2
2
  import * as React from "react";
3
- import type { StreamXYFrameProps } from "../../stream/types";
3
+ import type { StreamXYFrameProps, BandConfig } from "../../stream/types";
4
4
  import type { RealtimeFrameHandle } from "../../realtime/types";
5
5
  import type { LegendInteractionMode } from "../shared/hooks";
6
6
  import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
@@ -29,7 +29,7 @@ export interface LineChartProps<TDatum extends Datum = Datum> extends BaseChartP
29
29
  * Field name or function to access x values
30
30
  * @default "x"
31
31
  */
32
- xAccessor?: ChartAccessor<TDatum, number>;
32
+ xAccessor?: ChartAccessor<TDatum, number | Date | string>;
33
33
  /**
34
34
  * Field name or function to access y values
35
35
  * @default "y"
@@ -181,6 +181,30 @@ export interface LineChartProps<TDatum extends Datum = Datum> extends BaseChartP
181
181
  * envelope around the extrapolated forecast region.
182
182
  */
183
183
  forecast?: ForecastConfig;
184
+ /**
185
+ * Asymmetric min/max band(s) drawn under the line. Differs from
186
+ * `forecast`/`anomaly` (computed envelopes around a series) by being
187
+ * pure data passthrough — provide `y0Accessor` / `y1Accessor` and the
188
+ * band is drawn between them at each x.
189
+ *
190
+ * Pass an array for percentile fans (e.g. p25/p75 on top of p10/p90).
191
+ * Each band participates in y-extent auto-derivation, so a tall band
192
+ * can never get clipped. The hovered datum is enriched with
193
+ * `band: { y0, y1 }` (first band) and `bands: [...]` (all bands) so
194
+ * tooltip functions can read the envelope without re-running the
195
+ * accessors.
196
+ *
197
+ * @example
198
+ * ```tsx
199
+ * <LineChart
200
+ * data={[{ time, average, min, max }, ...]}
201
+ * xAccessor="time"
202
+ * yAccessor="average"
203
+ * band={{ y0Accessor: "min", y1Accessor: "max" }}
204
+ * />
205
+ * ```
206
+ */
207
+ band?: BandConfig<TDatum> | Array<BandConfig<TDatum>>;
184
208
  /**
185
209
  * Fixed x domain `[min, max]`. Either bound may be `undefined` to leave
186
210
  * that side data-derived.
@@ -14,9 +14,13 @@ export interface ScatterplotProps<TDatum extends Datum = Datum> extends BaseChar
14
14
  /** Array of data points. Each point should have x and y properties. */
15
15
  data?: TDatum[];
16
16
  /** Field name or function to access x values @default "x" */
17
- xAccessor?: ChartAccessor<TDatum, number>;
17
+ xAccessor?: ChartAccessor<TDatum, number | Date | string>;
18
18
  /** Field name or function to access y values @default "y" */
19
19
  yAccessor?: ChartAccessor<TDatum, number>;
20
+ /** X scale type @default "linear" */
21
+ xScaleType?: "linear" | "log" | "time";
22
+ /** Y scale type @default "linear" */
23
+ yScaleType?: "linear" | "log";
20
24
  /** Field name or function to determine point color */
21
25
  colorBy?: ChartAccessor<TDatum, string>;
22
26
  /** Color scheme for categorical data or custom colors array @default "category10" */
@@ -37,7 +37,7 @@ export { Treemap } from "./charts/network/Treemap";
37
37
  export { CirclePack } from "./charts/network/CirclePack";
38
38
  export { OrbitDiagram } from "./charts/network/OrbitDiagram";
39
39
  export { RealtimeLineChart } from "./charts/realtime/RealtimeLineChart";
40
- export { RealtimeHistogram } from "./charts/realtime/RealtimeHistogram";
40
+ export { RealtimeHistogram, TemporalHistogram } from "./charts/realtime/RealtimeHistogram";
41
41
  export { RealtimeSwarmChart } from "./charts/realtime/RealtimeSwarmChart";
42
42
  export { RealtimeWaterfallChart } from "./charts/realtime/RealtimeWaterfallChart";
43
43
  export { RealtimeHeatmap } from "./charts/realtime/RealtimeHeatmap";
@@ -7,13 +7,13 @@ import StreamNetworkFrame from "./stream/StreamNetworkFrame";
7
7
  import { RingBuffer } from "./realtime/RingBuffer";
8
8
  import { IncrementalExtent } from "./realtime/IncrementalExtent";
9
9
  import { RealtimeLineChart } from "./charts/realtime/RealtimeLineChart";
10
- import { RealtimeHistogram } from "./charts/realtime/RealtimeHistogram";
10
+ import { RealtimeHistogram, TemporalHistogram } from "./charts/realtime/RealtimeHistogram";
11
11
  import { RealtimeSwarmChart } from "./charts/realtime/RealtimeSwarmChart";
12
12
  import { RealtimeWaterfallChart } from "./charts/realtime/RealtimeWaterfallChart";
13
13
  import { RealtimeHeatmap } from "./charts/realtime/RealtimeHeatmap";
14
- export { StreamXYFrame, StreamNetworkFrame, RingBuffer, IncrementalExtent, RealtimeLineChart, RealtimeHistogram, RealtimeSwarmChart, RealtimeWaterfallChart, RealtimeHeatmap };
14
+ export { StreamXYFrame, StreamNetworkFrame, RingBuffer, IncrementalExtent, RealtimeLineChart, RealtimeHistogram, TemporalHistogram, RealtimeSwarmChart, RealtimeWaterfallChart, RealtimeHeatmap };
15
15
  export type { RealtimeLineChartProps } from "./charts/realtime/RealtimeLineChart";
16
- export type { RealtimeHistogramProps } from "./charts/realtime/RealtimeHistogram";
16
+ export type { RealtimeHistogramProps, TemporalHistogramProps } from "./charts/realtime/RealtimeHistogram";
17
17
  export type { RealtimeSwarmChartProps } from "./charts/realtime/RealtimeSwarmChart";
18
18
  export type { RealtimeWaterfallChartProps } from "./charts/realtime/RealtimeWaterfallChart";
19
19
  export type { RealtimeHeatmapProps } from "./charts/realtime/RealtimeHeatmap";
@@ -1,5 +1,6 @@
1
1
  export { renderToStaticSVG, renderXYToStaticSVG, renderOrdinalToStaticSVG, renderNetworkToStaticSVG, renderGeoToStaticSVG, renderChart, renderToImage, renderDashboard, } from "./server/renderToStaticSVG";
2
2
  export type { RenderToImageOptions, DashboardChart, DashboardLayout, RenderDashboardOptions, } from "./server/renderToStaticSVG";
3
+ export type { LegendLayout } from "./types/legendTypes";
3
4
  export { renderToAnimatedGif, generateFrameSVGs, generateFrameSequence } from "./server/animatedGif";
4
5
  export type { AnimatedGifOptions } from "./server/animatedGif";
5
6
  export { resolveTheme, themeStyles } from "./server/themeResolver";
@@ -21,7 +21,7 @@ export { XYCustomChart } from "./charts/custom/XYCustomChart";
21
21
  export type { StreamXYFrameProps, StreamXYFrameHandle } from "./stream/types";
22
22
  export type { CustomLayout, LayoutContext, LayoutResult } from "./stream/customLayout";
23
23
  export type { LineChartProps } from "./charts/xy/LineChart";
24
- export type { AreaChartProps } from "./charts/xy/AreaChart";
24
+ export type { AreaChartProps, SemanticGradientStop } from "./charts/xy/AreaChart";
25
25
  export type { DifferenceChartProps } from "./charts/xy/DifferenceChart";
26
26
  export type { StackedAreaChartProps } from "./charts/xy/StackedAreaChart";
27
27
  export type { ScatterplotProps } from "./charts/xy/Scatterplot";
@@ -19,13 +19,14 @@ import { Tooltip, MultiLineTooltip, normalizeTooltip } from "./Tooltip/Tooltip";
19
19
  import { RingBuffer } from "./realtime/RingBuffer";
20
20
  import { IncrementalExtent } from "./realtime/IncrementalExtent";
21
21
  import { RealtimeLineChart } from "./charts/realtime/RealtimeLineChart";
22
- import { RealtimeTemporalHistogram, RealtimeHistogram } from "./charts/realtime/RealtimeHistogram";
22
+ import { RealtimeTemporalHistogram, RealtimeHistogram, TemporalHistogram } from "./charts/realtime/RealtimeHistogram";
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, 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 } 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, TemporalHistogram, RealtimeSwarmChart, RealtimeWaterfallChart, RealtimeHeatmap, createHatchPattern };
27
+ export type { LegendLayout } from "./types/legendTypes";
28
+ export { ScatterplotProps, ConnectedScatterplotProps, LineChartProps, AreaChartProps, SemanticGradientStop, 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";
29
+ export type { StreamXYFrameProps, StreamXYFrameHandle, StreamChartType, RuntimeMode, SceneNode, Changeset, StreamScales, StreamLayout, CurveType, CanvasRendererFn, XYFrameAxisConfig, BandConfig } from "./stream/types";
29
30
  export type { StreamRendererFn } from "./stream/renderers/types";
30
31
  export type { StreamOrdinalFrameProps, StreamOrdinalFrameHandle, OrdinalChartType, OrdinalScales, OrdinalSceneNode } from "./stream/ordinalTypes";
31
32
  export type { StreamNetworkFrameProps, StreamNetworkFrameHandle, NetworkChartType, NetworkSceneNode, NetworkSceneEdge, NetworkLabel, ThresholdAlertConfig } from "./stream/networkTypes";
@@ -57,7 +58,7 @@ export { darkenColor, lightenColor } from "./charts/shared/colorManipulation";
57
58
  export type { TooltipProp, TooltipConfig, TooltipField, MultiLineTooltipConfig } from "./Tooltip/Tooltip";
58
59
  export type { ArrowOfTime, WindowMode, ThresholdType, LineStyle, BarStyle, WaterfallStyle, SwarmStyle, AnnotationContext, AnnotationAnchorMode, CrosshairStyle, HoverAnnotationConfig, HoverData } from "./realtime/types";
59
60
  export type { RealtimeLineChartProps } from "./charts/realtime/RealtimeLineChart";
60
- export type { RealtimeTemporalHistogramProps, RealtimeHistogramProps } from "./charts/realtime/RealtimeHistogram";
61
+ export type { RealtimeTemporalHistogramProps, RealtimeHistogramProps, TemporalHistogramProps } from "./charts/realtime/RealtimeHistogram";
61
62
  export type { RealtimeSwarmChartProps } from "./charts/realtime/RealtimeSwarmChart";
62
63
  export type { RealtimeWaterfallChartProps } from "./charts/realtime/RealtimeWaterfallChart";
63
64
  export type { RealtimeHeatmapProps } from "./charts/realtime/RealtimeHeatmap";
@@ -1,4 +1,5 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
+ import type { LegendLayout } from "../types/legendTypes";
2
3
  /**
3
4
  * Server-side rendering of Semiotic charts to standalone SVG strings.
4
5
  *
@@ -22,6 +23,7 @@ import type { StreamGeoFrameProps } from "../stream/geoTypes";
22
23
  import { type ThemeInput } from "./themeResolver";
23
24
  import { CHART_CONFIGS } from "./serverChartConfigs";
24
25
  type FrameType = "xy" | "ordinal" | "network" | "geo";
26
+ type StaticFrameProps = (StreamXYFrameProps | StreamNetworkFrameProps | StreamOrdinalFrameProps | StreamGeoFrameProps) & ThemeAwareProps;
25
27
  interface ThemeAwareProps {
26
28
  theme?: ThemeInput;
27
29
  showLegend?: boolean;
@@ -32,10 +34,11 @@ interface ThemeAwareProps {
32
34
  background?: string;
33
35
  className?: string;
34
36
  legendPosition?: "right" | "left" | "top" | "bottom";
37
+ legendLayout?: LegendLayout;
35
38
  /** Prefix for SVG element IDs — used by renderDashboard to avoid collisions */
36
39
  _idPrefix?: string;
37
40
  }
38
- export declare function renderToStaticSVG(frameType: FrameType, props: (StreamXYFrameProps | StreamNetworkFrameProps | StreamOrdinalFrameProps | StreamGeoFrameProps) & ThemeAwareProps): string;
41
+ export declare function renderToStaticSVG(frameType: FrameType, props: StaticFrameProps): string;
39
42
  export declare function renderXYToStaticSVG(props: StreamXYFrameProps & ThemeAwareProps): string;
40
43
  export declare function renderOrdinalToStaticSVG(props: StreamOrdinalFrameProps & ThemeAwareProps): string;
41
44
  export declare function renderNetworkToStaticSVG(props: StreamNetworkFrameProps & ThemeAwareProps): string;
@@ -27,6 +27,7 @@ export declare const CHART_CONFIGS: {
27
27
  };
28
28
  };
29
29
  ConnectedScatterplot: ChartConfig;
30
+ QuadrantChart: ChartConfig;
30
31
  Heatmap: ChartConfig;
31
32
  BarChart: ChartConfig;
32
33
  StackedBarChart: 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;
@@ -7,6 +7,21 @@
7
7
  import * as React from "react";
8
8
  import type { SemioticTheme } from "../store/ThemeStore";
9
9
  import type { Datum } from "../charts/shared/datumTypes";
10
+ import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
11
+ interface LegendItemLayout {
12
+ category: string;
13
+ width: number;
14
+ x: number;
15
+ y: number;
16
+ }
17
+ interface StaticLegendMetrics {
18
+ items: LegendItemLayout[];
19
+ width: number;
20
+ height: number;
21
+ swatchSize: number;
22
+ labelOffset: number;
23
+ swatchRadius: number;
24
+ }
10
25
  export interface StaticLegendConfig {
11
26
  /** Category labels to show in legend */
12
27
  categories: string[];
@@ -28,13 +43,33 @@ export interface StaticLegendConfig {
28
43
  };
29
44
  /** Title presence (affects top-position offset) */
30
45
  hasTitle?: boolean;
46
+ /** SSR legend layout controls */
47
+ legendLayout?: LegendLayout;
48
+ /** Optional id namespace used for generated SVG ids */
49
+ idPrefix?: string;
50
+ }
51
+ export interface StaticLegendGroupsConfig extends Omit<StaticLegendConfig, "categories" | "colorScheme"> {
52
+ legendGroups: LegendGroup[];
53
+ }
54
+ export interface StaticGradientLegendConfig extends Omit<StaticLegendConfig, "categories" | "colorScheme"> {
55
+ gradient: GradientLegendConfig;
31
56
  }
57
+ export declare function measureStaticLegend(config: StaticLegendConfig): Omit<StaticLegendMetrics, "items" | "labelOffset" | "swatchRadius">;
58
+ export declare function measureStaticLegendGroups(config: StaticLegendGroupsConfig): Omit<StaticLegendMetrics, "items" | "labelOffset" | "swatchRadius">;
59
+ export declare function measureStaticGradientLegend(config: StaticGradientLegendConfig): {
60
+ width: number;
61
+ height: number;
62
+ swatchSize: number;
63
+ };
32
64
  /**
33
65
  * Render a static legend as SVG elements.
34
66
  * Returns null if no categories to show.
35
67
  */
36
68
  export declare function renderStaticLegend(config: StaticLegendConfig): React.ReactNode;
69
+ export declare function renderStaticLegendGroups(config: StaticLegendGroupsConfig): React.ReactNode;
70
+ export declare function renderStaticGradientLegend(config: StaticGradientLegendConfig): React.ReactNode;
37
71
  /**
38
72
  * Extract unique categories from data using an accessor.
39
73
  */
40
74
  export declare function extractCategories(data: any[], accessor: string | ((d: Datum) => string) | undefined): string[];
75
+ export {};
@@ -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 {};
@@ -34,6 +34,8 @@ export interface SemioticTheme {
34
34
  textSecondary: string;
35
35
  grid: string;
36
36
  border: string;
37
+ /** Separator/border color for cell-like marks such as treemap tiles and heatmap cells. Falls back to `border`. */
38
+ cellBorder?: string;
37
39
  focus?: string;
38
40
  /** Linked hover/selection highlight color */
39
41
  selection?: string;
@@ -90,6 +92,12 @@ export interface ThemeStoreState {
90
92
  theme: SemioticTheme;
91
93
  setTheme: (theme: ThemeStoreUpdate) => void;
92
94
  }
93
- export type ThemeStoreUpdate = Partial<SemioticTheme> | "light" | "dark" | "high-contrast";
95
+ export type SemioticThemeUpdate = Omit<Partial<SemioticTheme>, "colors" | "typography" | "tooltip" | "accessibility"> & {
96
+ colors?: Partial<SemioticTheme["colors"]>;
97
+ typography?: Partial<SemioticTheme["typography"]>;
98
+ tooltip?: Partial<NonNullable<SemioticTheme["tooltip"]>>;
99
+ accessibility?: Partial<NonNullable<SemioticTheme["accessibility"]>>;
100
+ };
101
+ export type ThemeStoreUpdate = SemioticThemeUpdate | "light" | "dark" | "high-contrast";
94
102
  export declare function resolveThemeUpdate(current: SemioticTheme, theme: ThemeStoreUpdate): SemioticTheme;
95
103
  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
  */
@@ -1,7 +1,7 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import type { ReactNode } from "react";
3
3
  import type { NetworkLabel } from "./networkTypes";
4
- import type { LegendGroup, GradientLegendConfig } from "../types/legendTypes";
4
+ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/legendTypes";
5
5
  type AnnotationAnchorNode = {
6
6
  type: string;
7
7
  datum: Datum | null;
@@ -43,6 +43,7 @@ export interface NetworkSVGOverlayProps {
43
43
  legendHighlightedCategory?: string | null;
44
44
  legendIsolatedCategories?: Set<string>;
45
45
  legendPosition?: "right" | "left" | "top" | "bottom";
46
+ legendLayout?: LegendLayout;
46
47
  /** User-provided SVG elements on top */
47
48
  foregroundGraphics?: ReactNode;
48
49
  /** Scene nodes for annotation positioning */
@@ -3,7 +3,7 @@ import * as React from "react";
3
3
  import type { OrdinalScales } from "./ordinalTypes";
4
4
  import type { AnnotationContext } from "../realtime/types";
5
5
  import type { ReactNode } from "react";
6
- import type { LegendGroup, GradientLegendConfig } from "../types/legendTypes";
6
+ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/legendTypes";
7
7
  import { type AxisExtentMode } from "../charts/shared/axisExtent";
8
8
  interface OrdinalSVGOverlayProps {
9
9
  width: number;
@@ -49,6 +49,7 @@ interface OrdinalSVGOverlayProps {
49
49
  legendHighlightedCategory?: string | null;
50
50
  legendIsolatedCategories?: Set<string>;
51
51
  legendPosition?: "right" | "left" | "top" | "bottom";
52
+ legendLayout?: LegendLayout;
52
53
  foregroundGraphics?: ReactNode;
53
54
  annotations?: Datum[];
54
55
  svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
@@ -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 {
@@ -20,12 +22,12 @@ export interface PipelineConfig {
20
22
  * padded domain so glyphs at the extremes don't clip the plot edge. */
21
23
  axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
22
24
  maxCapacity?: number;
23
- xAccessor?: string | ((d: Datum) => number);
24
- yAccessor?: string | ((d: Datum) => number);
25
- timeAccessor?: string | ((d: Datum) => number);
26
- 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);
27
29
  colorAccessor?: string | ((d: Datum) => string);
28
- sizeAccessor?: string | ((d: Datum) => number);
30
+ sizeAccessor?: string | ((d: Datum) => CoercibleNumber);
29
31
  groupAccessor?: string | ((d: Datum) => string);
30
32
  categoryAccessor?: string | ((d: Datum) => string);
31
33
  lineDataAccessor?: string;
@@ -40,16 +42,17 @@ export interface PipelineConfig {
40
42
  baseline?: "zero" | "wiggle" | "silhouette";
41
43
  /** Stack order — see StreamXYFrameProps.stackOrder. */
42
44
  stackOrder?: "key" | "insideOut" | "asc" | "desc";
43
- openAccessor?: string | ((d: Datum) => number);
44
- highAccessor?: string | ((d: Datum) => number);
45
- lowAccessor?: string | ((d: Datum) => number);
46
- 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);
47
49
  candlestickStyle?: CandlestickStyle;
48
50
  /** Internal: set by PipelineStore when open/close accessors are both missing */
49
51
  candlestickRangeMode?: boolean;
50
- boundsAccessor?: string | ((d: Datum) => number);
52
+ boundsAccessor?: string | ((d: Datum) => CoercibleNumber);
51
53
  boundsStyle?: any;
52
- y0Accessor?: string | ((d: Datum) => number);
54
+ y0Accessor?: string | ((d: Datum) => CoercibleNumber);
55
+ band?: BandConfig | BandConfig[];
53
56
  gradientFill?: {
54
57
  topOpacity: number;
55
58
  bottomOpacity: number;
@@ -149,8 +152,12 @@ export declare class PipelineStore {
149
152
  private getCategory;
150
153
  private getSize;
151
154
  private getColor;
152
- private getBounds;
153
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[];
154
161
  private getOpen;
155
162
  private getHigh;
156
163
  private getLow;
@@ -1,36 +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
- 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
- /** 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>;
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. */
25
- gridStyle?: "dashed" | "dotted" | string;
26
- /** Always include the domain max as a tick, even if d3 omits it. */
27
- includeMax?: boolean;
28
- /** Auto-rotate labels 45° when horizontal spacing is too tight. */
29
- autoRotate?: boolean;
30
- /** Highlight ticks at time boundaries (new month, year, etc.) with semibold text.
31
- * `true` auto-detects Date boundaries. A function receives (value, index) and returns true for landmark ticks. */
32
- landmarkTicks?: boolean | ((value: any, index: number) => boolean);
33
- }
5
+ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/legendTypes";
6
+ export type AxisConfig = XYFrameAxisConfig;
34
7
  interface SVGOverlayProps {
35
8
  width: number;
36
9
  height: number;
@@ -78,6 +51,7 @@ interface SVGOverlayProps {
78
51
  legendIsolatedCategories?: Set<string>;
79
52
  /** Legend position relative to chart area */
80
53
  legendPosition?: "right" | "left" | "top" | "bottom";
54
+ legendLayout?: LegendLayout;
81
55
  foregroundGraphics?: ReactNode;
82
56
  marginalGraphics?: MarginalGraphicsConfig;
83
57
  xValues?: number[];
@@ -13,7 +13,7 @@ export declare function xySceneNodeToSVG(node: SceneNode, i: number, idPrefix?:
13
13
  export declare function networkSceneNodeToSVG(node: NetworkSceneNode, i: number): React.ReactNode;
14
14
  export declare function networkSceneEdgeToSVG(edge: NetworkSceneEdge, i: number): React.ReactNode;
15
15
  export declare function networkLabelToSVG(label: NetworkLabel, i: number): React.ReactNode;
16
- export declare function ordinalSceneNodeToSVG(node: OrdinalSceneNode, i: number): React.ReactNode;
16
+ export declare function ordinalSceneNodeToSVG(node: OrdinalSceneNode, i: number, idPrefix?: string): React.ReactNode;
17
17
  export declare function geoSceneNodeToSVG(node: GeoSceneNode, i: number): React.ReactNode;
18
18
  /**
19
19
  * Returns true when running in a true server/Node.js context where
@@ -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;
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { GeoProjection, GeoPath, GeoPermissibleObjects } from "d3-geo";
3
- import type { GradientLegendConfig, LegendGroup } from "../types/legendTypes";
3
+ import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
4
4
  import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, SceneDatum, PointSceneNode, ThemeSemanticColors } from "./types";
5
5
  import type { AnimateProp } from "./pipelineTransitionUtils";
6
6
  import type { HoverAnnotationConfig, HoverData } from "../realtime/types";
@@ -191,6 +191,7 @@ export interface StreamGeoFrameProps<T = Datum> {
191
191
  gradient: GradientLegendConfig;
192
192
  };
193
193
  legendPosition?: "right" | "left" | "top" | "bottom";
194
+ legendLayout?: LegendLayout;
194
195
  legendHoverBehavior?: (item: {
195
196
  label: string;
196
197
  } | null) => void;
@@ -19,6 +19,7 @@ export interface HoverPointerCoords {
19
19
  clientX: number;
20
20
  clientY: number;
21
21
  }
22
+ export declare function normalizeHoverDatum(rawDatum: any): any;
22
23
  /**
23
24
  * Build a HoverData object from a raw datum and pixel coordinates.
24
25
  * The raw datum is preserved as `hover.data` for tooltip / callback
@@ -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
  *
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import type { LegendGroup, GradientLegendConfig } from "../types/legendTypes";
2
+ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/legendTypes";
3
3
  export interface LegendRenderConfig {
4
4
  legend: ReactNode | {
5
5
  legendGroups: LegendGroup[];
@@ -15,6 +15,7 @@ export interface LegendRenderConfig {
15
15
  left: number;
16
16
  };
17
17
  legendPosition?: "right" | "left" | "top" | "bottom";
18
+ legendLayout?: LegendLayout;
18
19
  title?: string | ReactNode;
19
20
  legendHoverBehavior?: (item: {
20
21
  label: string;