Skip to content

Releases: nteract/semiotic

Semiotic v3.1.0

21 Mar 16:18
87e3fbf

Choose a tag to compare

Semiotic v3.1.0

Geographic visualization, accessibility foundation, performance optimizations, and comprehensive bug fixes.

Added

Geographic Visualization (semiotic/geo)

  • ChoroplethMap — sequential color encoding on GeoJSON features with valueAccessor, colorScheme, and reference geography strings ("world-110m", "world-50m")
  • ProportionalSymbolMap — sized/colored point symbols on a geographic basemap with sizeBy, sizeRange, and colorBy
  • FlowMap — origin-destination flow lines with width encoding, animated particles (showParticles, particleStyle), and lineType ("geo"|"line")
  • DistanceCartogram — ORBIS-style projection distortion based on travel cost with concentric ring overlay, north indicator, configurable strength and line mode
  • StreamGeoFrame — low-level geo frame with full control over areas, points, lines, canvas rendering, and push API for streaming
  • Zoom/Pan — all geo charts accept zoomable, zoomExtent, onZoom with imperative getZoom()/resetZoom()
  • Drag Rotate — globe spinning for orthographic projections, latitude clamped to [-90, 90]
  • Tile MapstileURL, tileAttribution, tileCacheSize for slippy-map basemaps (Mercator only)
  • Reference geographyresolveReferenceGeography() returns Natural Earth GeoJSON features; mergeData() joins external data into features
  • GeoParticlePool — object-pool polyline particle system for animated flow particles
  • GeoCanvasHitTester — spatial indexing for hover/click hit detection on canvas-rendered geo marks
  • 6 documentation pages, 2 playground pages, 1 recipe page
  • Comprehensive test suites: FlowMap (25), ChoroplethMap (16), DistanceCartogram (19), colorUtils (+6), hooks (+3)

Accessibility (WCAG 2.1 AA ~70%)

  • Canvas aria-label on all Stream Frames describing chart type and data shape
  • Legend keyboard navigation — roving tabindex, Enter/Space activate, arrow keys navigate
  • aria-live="polite" region mirroring tooltip text for screen readers
  • SVG <title> and <desc> on all overlay components
  • aria-label on ChartContainer toolbar buttons
  • 35 Playwright accessibility integration tests

Streaming

  • Streaming legend support — useStreamingLegend hook discovers categories from pushed data dynamically
  • 20+ Playwright streaming regression tests (canvas pixel sampling, legend appearance, tooltip content, stability)

Performance

  • Color map cache — skips rebuild when categories unchanged
  • Stacked area cache — skips cumulative sum when data unchanged
  • Buffer array cache — dirty flag prevents re-materialization on hover/transition ticks
  • Canvas buffer reuse — skips GPU reallocation when dimensions unchanged
  • Path2D caching on geo nodes — eliminates per-hover allocations
  • Streaming push backpressure — microtask batching in DataSourceAdapter

AI Tooling

  • MCP server consolidated from 19 tools to 3 (renderChart, diagnoseConfig, reportIssue)
  • Self-healing error boundaries — SafeRender runs diagnoseConfig on chart failures (dev mode)
  • 61 new unit tests for withChartWrapper, network utilities, and ordinal push API

Fixed

  • Grey fills on push API charts — end-to-end fix for color pipeline when colorScale is unavailable during streaming
  • LineChart infinite re-render loop — circular dependency between statistical overlay effect and line style
  • tooltip={false} now correctly disables tooltips on all 22 remaining HOCs
  • Network HOC tooltip double-chrome wrapping (7 charts)
  • Math.min/max(...spread) stack overflow on >100K datasets
  • Unbounded memory growth in "growing" window mode (capped at 1M default)
  • Geo hooks crash — "Rendered more hooks than during previous render" in FlowMap and ChoroplethMap
  • ChoroplethMap colorScale crash with null areas during async loading
  • Function colorBy produced undefined colorsuseColorScale derives categories from data when colorBy is a function
  • Area/StackedArea tooltips showing "-" instead of values
  • Force graph centering and streaming refresh
  • FIFO category ordering for streaming ordinal charts
  • Edge hit areas expanded to 5px minimum tolerance
  • Sankey crossing reduction via barycenter ordering
  • Anti-meridian line handling for geo projections
  • And 20+ more fixes — see CHANGELOG.md

Improved

  • @ts-nocheck removed from Legend.tsx — full type safety restored
  • 38 as any casts eliminated from PipelineStore
  • useSyncExternalStore replaces custom shim (concurrent mode safe)
  • Shared useChartSetup hook — 10 HOCs refactored, ~170 lines removed

Tests

  • 1944 total tests, 106 test files
  • Direct tests for StreamXYFrame (39) and StreamOrdinalFrame (44)
  • Legend tests (33), tooltipUtils tests (35), ordinal scene builder tests (67)

Semiotic v3.0.1

20 Mar 04:44

Choose a tag to compare

Semiotic v3.0.1

Bug fixes, emphasis prop, direct labels, gap strategy fixes, and export improvements.

Added

  • emphasis prop — all charts accept emphasis="primary" | "secondary". ChartGrid spans primary charts across two columns
  • directLabel rendering — labels now actually render via new "text" annotation type
  • gapStrategy fixes"break" correctly splits lines at null boundaries; "interpolate" no longer coerces null to 0

Fixed

  • PNG export now composites canvas + SVG layers (previously captured only axes)
  • directLabel annotations no longer silently dropped
  • gapStrategy="break" no longer draws lines through gaps
  • colorBy type mismatch in network/hierarchy charts
  • Duplicate amplitude property in StreamOrdinalFrameProps

See CHANGELOG.md for details.

Semiotic v3.0.0

20 Mar 04:44
3bb2c48

Choose a tag to compare

Semiotic v3.0.0

Complete rewrite of Semiotic. Stream-first canvas architecture, 37 HOC chart components, full TypeScript, AI tooling, coordinated views, realtime encoding, and native server-side rendering.

Highlights

  • Stream-first rendering — all frames are canvas-first with SVG overlays for labels, axes, and annotations
  • 37 HOC chart components — XY (LineChart, Scatterplot, Heatmap, ...), Ordinal (BarChart, BoxPlot, ...), Network (ForceDirectedGraph, SankeyDiagram, ...), Realtime (RealtimeLineChart, ...)
  • Full TypeScript strict mode with generic type parameters on all components
  • Server-side rendering — component-level SSR (automatic in Next.js/Remix/Astro) + standalone semiotic/server
  • Realtime visual encoding — decay, pulse, transition, staleness effects
  • Coordinated views — LinkedCharts, CategoryColorProvider, cross-filtering, linked hover/brush
  • AI toolingsemiotic/ai schema, MCP server, CLI, validateProps, diagnoseConfig
  • 9 sub-package entry pointssemiotic, semiotic/xy, semiotic/ordinal, semiotic/network, semiotic/realtime, semiotic/geo, semiotic/ai, semiotic/data, semiotic/server

See CHANGELOG.md for the full list.

Annotation & Brush Bug-Squashing

21 Jan 03:13

Choose a tag to compare

FIXES

  • Updating note props wouldn't cause the note to rerender (thanks @torioLuz!)
  • Brushing could return null extent, failing the destructuring default (in the docs even!)

Smarter Tooltips, Clean Up Logging Issues

15 Nov 20:16

Choose a tag to compare

Minor release (the real work is going on in the semiotic-2 branch) that adds some functionality thanks to @torioLuz and otherwise just cleans up some minor logging bugs

FEATURES

  • Outbound tick lines option (@torioLuz could you make a PR to document this on semiotic-docs and/or a codepen or other to show how to use it?)
  • Add more tooltip attributes to improve tooltip behavior (@torioLuz could you make a PR to document this on semiotic-docs and/or a codepen or other to show how to use it?)

FIXES

  • Remove console log from OrdinalFrame

React 16.8+ Compatibility

06 Oct 20:01

Choose a tag to compare

Semiotic 2.0 deprecates a lot of old compatibility props, removes the download button and gets rid of deprecated lifecycle events. It should also (hopefully) take advantage of some of the newer React features. Please take a look and file any issues you discover.

  • DownloadButton is gone. It provided some convenience and much hassle and my philosophy on how to handle exporting data is that it should be a case-by-case feature handled outside of the dataviz framework.
  • Since everyone didn't always want to render with sketchy rendering it's optional now, so to enable sketchy rendering you will need to import Rough or a Rough-like library and pass it to your frame using the sketchyRenderingEngine prop. So something like:
import roughjs from "roughjs/dist/rough.es5.umd.js"
<XYFrame 
   sketchyRenderingEngine={roughjs}
/>
  • Old names for props (like areas in XYFrame which was replaced by summaries) are no longer honored.
  • react15Wrapper is removed from FacetController since React 15 is no longer supported
  • wordcloud has been removed from NetworkFrame it was never a very good word cloud

Other changes should be coming. If you have any suggestions just let me know. Bugfixes to 1.X will, of course, continue.

Fix UMD, custom OrdinalFrame type

03 Sep 02:03

Choose a tag to compare

FIXES

  • UMD build wasn't working with d3-require (thanks @mbostock)
  • Annotations wouldn't update if you change the label (thanks @mph006)
  • Custom type (where you send a function) wasn't working if you sent back an array of SVG elements

Calculate Extent with Annotations Included

29 Jul 22:00

Choose a tag to compare

FIXES

  • Annotations in FacetController might not have been displayed prior to an interaction (thanks @susielu!)
  • Invert extent wasn't being honored in FacetController (thanks @susielu!)
  • Area annotation wasn't properly offset in XYFrame

FEATURES

  • Honor optimizeCustomTooltipPosition in OrdinalFrame (thanks @torioLuz!) this allows you to change the tooltip position based on positive and negative data and whether it gets close to the edges.
  • Extent objects now honor a includeAnnotations option (which takes true or false) which if set to true calculates the extent of the frame based not only on the data but also on simple annotations (any annotation types that use the data attributes like xy, x, y, react-annotation, not bounds or coordinates or anything like that).

Fix Download Button, Column Brushing, Add Orphan Points

24 Jun 17:29

Choose a tag to compare

FEATURES

  • In NetworkFrame in motifs mode you can now set a padding prop for your networkSettings that determines the number of pixels between each group.
  • XYFrame now supports filterRenderedLines and filterRenderedSummaries which allows you to remove lines or summaries after they have been calculated so that the extent and other aspects of the chart are based on the complete dataset
  • showLinePoints now honors an "orphan" setting that will only show line points if a point has an undefined point immediately before and after that point. This means it will only have any kind of effect if you have defined set but when you do, it lets you show a floating point as a point so that it's not lost in the way a line renders.
    Screen Shot 2019-06-24 at 10 22 54 AM

FIXES

  • The download feature should be working again
  • Column brushes in vertical projection would hang if there were no zero values among your columns (so for instance in a parallel coordinates setting)

Torn Baseline

10 Apr 19:23

Choose a tag to compare

FIXES

  • As expected, the TypeScript migration introduces a few issues and these seem to all be ironed out now (hence the lack of release notes since 1.19.1 as things get ironed out.
  • FacetController had issues when one of the child frames had no data.

FEATURES

  • Full docs on how to better style your axes at https://semiotic.nteract.io/guides/axis
  • Axes can now display a jagged base tick for you to use in non-zero baseline situations (this was historically a best practice half a century ago and seems useful to bring back) You can accomplish this by setting an axis prop: jaggedBase: true

Screen Shot 2019-04-09 at 6 50 26 PM

* `baseline: "under"` support for drawing the neatline of an axis under the viz layer (by default it's drawn above it) * Documentation for cluster/grouped bar charts at https://semiotic.nteract.io/guides/bar-chart * `OrdinalFrame` pieces are now decorated with an `rName` prop that corresponds to the string name of an accessor sent to `rAccessors` and is useful in tandem with arrays of accessors. * The container div for frames in OrdinalFrame is now decorated with the value of `projection` as a className

OTHER

  • More tests! Please feel free to submit PRs for tests there are so many open issues related to this and I'm trying to handle them as they come up but if someone wants to start building a more robust set of tests then please let me know. We also need to expose the types in a sensible way and always need more docs.