Repository navigation
Semiotic v3.11.1
Added
- RealtimeHistogram and TemporalHistogram stacked segments carry
categories:
every non-zero{ category, value }in the bin, bottom to top, shared by the
bin's segments. The default histogram tooltip adds acategory countrow. getSourceRows(datumOrHover)insemiotic/realtimeandsemiotic/utils
returns the authored rows behind a histogram bin, stacked segment, or
categoriesentry. TheHistogramBinDatumtype describes the bin datum.createDagreFit(nodes, edges, plot, config?)and
createFlextreeFit(nodes, plot, config?)insemiotic/recipesreturn the
exact fitdagreLayout/flextreeLayoutapply (scale,dx,dy,
bounds,project,invert,nodeBounds), so minimaps and overlays can
align with the fitted graph without copying recipe defaults.
semiotic/network/zoomexportsprojectNetworkPointand
invertNetworkRectfor applying the zoom camera.adaptiveTimeTicksaccepts opt-inincludeYearandincludeDate
("always"default,"auto","never"),referenceTime, and
deltaStyle: "clock"to shorten axis labels. Defaults and value-only
(tooltip) labels are unchanged.- Top-level
showAxeson LineChart, AreaChart, StackedAreaChart,
DifferenceChart, Scatterplot, BubbleChart, Heatmap, QuadrantChart,
MultiAxisLineChart, WaterfallChart, CandlestickChart, ConnectedScatterplot,
and MinimapChart (its detail chart). It follows the chart mode by default;
an explicit value wins, matchingresponsiveRuleswin over it, and
frameProps.showAxesstill wins over both. Margins are kept. Chart schemas
andvalidatePropsaccept it. - GaugeChart
centerLabel: a serializable caption drawn beneath the center
value as native SVG text. - RealtimeHistogram and TemporalHistogram support
tooltip="multi"and
{ mode: "multi", content? }: hovering anywhere in a column (above a short
stack or between bars included) lists every stacked category in that bin,
with its range and total. Keyboard focus gets the same rows. LinearBrushinsemiotic/controls: an accessible one-dimensional range
brush for any track. It is controlled (value) or uncontrolled
(defaultValue);onChangefires on every change andonChangeEndonce
per release or keyboard step, withatDomainStart/atDomainEndflags. Map
it withdomainor the chart's ownscale, overlay a chart's plot with
inset, and customize it withmaskStyle, selection and handle styles,
renderHandle, a move handle, double-click reset,minSpan,snap, and
extent and domain labels (two lines with a\n). It is a group of three
sliders with arrow, Shift, Page Up/Down, Home/End, and Escape keys, emits
control observations, and follows the ThemeProvider colors without a store.- MinimapChart overview brush options:
minimap.brushStyle(fill,
fillOpacity,stroke,strokeWidth,activeStroke,mask),
minimap.handles(with an optional move handle),minimap.renderHandle,
minimap.showExtentLabelswithminimap.extentLabelFormat(defaults to
xFormat),minimap.resetOnDoubleClick,minimap.minSpan, and
minimap.brushLabel.onBrushEnd(extent, meta)fires once per changed
release, keyboard step, or reset. MinimapChart acceptsonObservation
(brush/brush-end, pluscontrol-start/control-endfor gestures) and
chartId.renderChartdraws the mask, handles, and labels.
Changed
-
Multi-series hover (
tooltip="multi"and{ mode: "multi" }) snaps to the
first or last sample in x-extent padding instead of showing nothing, on every
chart that uses it (LineChart, AreaChart, StackedAreaChart, DifferenceChart,
MultiAxisLineChart, MinimapChart, BumpChart, XYCustomChart, and
RealtimeLineChart). The crosshair and series dots sit on the edge sample, and
xValue/xPxreport it; the tooltip still follows the cursor. -
Brush selections take the theme's
colors.selection, falling back to
colors.primary, instead of a fixed steelblue: XY and ordinal frame brushes,
ScatterplotMatrix, MinimapChart, andrenderChartMinimapChart output. In
the browser they follow the--semiotic-selection-colorand
--semiotic-primaryvariables that ThemeProvider sets, so theme changes
restyle them in place. Without a theme they use the light theme's
#00a2ce. -
MinimapChart's overview brush is a LinearBrush, so the minimap no longer
loads d3-brush. It is keyboard-accessible (start, range, and end sliders)
and themed. Unlike the d3 brush, the ends cannot cross (they stop 1px, or
minSpan, apart), there are no Alt/Space/Meta modifier gestures, a touch
drag across the brush axis pans the page, edges have 24px targets, a new
selection starts after 3px of movement, andonBrushno longer repeats the
final extent on release. The d3.brush-group/.overlay/.selection
SVG is replaced by HTML parts markeddata-semiotic-brush-part; update
CSS or tests that target the d3 classes. Static output insets the
selection by half its stroke to match the browser's border. -
MinimapChart re-reads the overview's scales after size, margin, and
y-extent changes, not only data changes, so the brush maps through the
current layout after a resize.
Fixed
- Horizontal XY axes call index-aware formatters such as
adaptiveTimeTicks
with the ticks actually rendered, after overlapping labels are thinned, and
judge duplicate labels on those rendered labels. Date changes are no longer
hidden by thinning, rendered ticks are no longer dropped as look-alike
duplicates, andincludeMaxlabels compare with the tick before them. A
formatter that readsindexnow sees rendered indices. Static rendering
matches. adaptiveTimeTickshour-granularity labels show the tick's minutes
("14:30") instead of always":00".- BumpChart passes the rendered ticks to
xFormatas authored dates, so
adaptiveTimeTicksshortens its labels there too. - BumpChart resolves
showAxesthroughmodeandresponsiveRulesin the
browser, matchingrenderChart, so compact modes hide its axes. - GaugeChart string and number
centerContentrender as native SVG text in
the browser and in static SVG, instead of an HTML overlay and
foreignObject. Fragments of SVG elements also stay native. renderChartGaugeChart takes its compact readout and scale-label defaults
from the resolved mode, includingresponsiveRules, as the browser does.- Static and pre-hydration SVG areas multiply
fillOpacity(default 0.7) by
opacity, as the canvas does. This fixes BumpCharthighlightTopneutral
trajectories and ribbon/line opacity (drawn fully opaque in SSR), bounds
bands, and the AreaChart/StackedAreaChartopacityprop. SSR areas that set
onlyopacitynow render lighter, matching the canvas. - BumpChart honors a named
colorSchemetogether withhighlightTop, instead
of deferring to the theme palette. renderChartBumpChart normalizeshighlightTop,neutralColor, and
colorthe same way as the browser (numeric strings count) and draws the
default rank grid.- Static SVG violins fall back to
opacityfor their fill opacity, as the
canvas does. - BumpChart reserves endpoint-label room from the label text on each labeled
side (capped at 38% of the width; today's margins are the floor), so long
names no longer run off the chart. Start labels clear the rank ticks, and
over-long labels truncate with "…" and keep the full name in<title>.
Partial margins merge over these defaults in the browser and in
renderChartalike,frameProps.margincounts as explicit, and a side
legend shares its side with the labels instead of overlapping them. renderChartLineChartdirectLabelno longer grows margin sides the
caller pinned, matching the browser.- Custom multi-series tooltip content near the last sample receives every
series instead of one datum. - Keyboard focus in multi-series mode carries
allSeriesandxValuelike
pointer hover. - LineChart
gapStrategy="break"no longer writes_gapSegmentonto datums
passed to tooltips,onClick, and observations. Series from a function
lineBystay separate across gaps,fillAreaseries lists keep their fill,
style rules see the authored series, and multi-series rows show the series
name instead of an internal segment key. - Multi-series rows for an ungrouped series have an empty
groupinstead of
_default, so RealtimeLineChart labels its row with the value accessor. - Declarative and multi-series tooltip content, click observations, and
tap-to-lock linked hover keep a histogram bin's source rows instead of
losing them to a copied datum. - Realtime and physics chart specs no longer claim multi-series tooltip
support for charts that fall back to one datum (RealtimeSwarmChart,
RealtimeWaterfallChart, RealtimeHeatmap, and physics charts). In
development,{ mode: "multi", content }on such a chart warns once. - RealtimeHistogram and TemporalHistogram bins match a linked point selection
on any time inside[binStart, binEnd), not only a time a source row carries
exactly, so a time picked on a linked line chart highlights its bin. - Mobile
tapToSelecton an aggregate mark publishes its source rows' field
values, as linked hover does. - MinimapChart keeps a brush drag going when the chart re-renders during it,
as with a controlledbrushExtentor an inlineonBrushthat sets parent
state. Every move after the first, and the release, used to be lost.
ScatterplotMatrix cell brushes read their callback the same way. - MinimapChart
minimap.brushDirection: "y"sets the detail chart's y domain
instead of its x domain, reports ascending extents, and draws a controlled
y extent in the overview (it was drawn with negative height, so invisible).
renderChartapplies the brushed range to the same axis.