Skip to content

Semiotic v3.1.0

Latest

Choose a tag to compare

@emeeks emeeks released this 21 Mar 16:18
· 102 commits to main since this release
87e3fbf

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)