| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-04-23 | 5.8 kB | |
| Semiotic v3.4.1 source code.tar.gz | 2026-04-23 | 7.5 MB | |
| Semiotic v3.4.1 source code.zip | 2026-04-23 | 8.1 MB | |
| Totals: 3 Items | 15.6 MB | 0 | |
Added
CandlestickChartHOC (semiotic/xy) — wrapschartType="candlestick"with the same mode-aware, animated, push-API conventions as the other XY HOCs. Required:highAccessor,lowAccessor. Optional:openAccessor+closeAccessor— omit both and the chart degrades to a range/dumbbell visualization (endpoint dots + wick, no body). Honorsmode="primary" | "context" | "sparkline":scalePaddingscales from width (12 / 10 / 3) to keep leftmost/rightmost bars from clipping,extentPaddingdrops to 2% at widths ≤200 so the y-domain isn't padded into uselessness, and sparkline zeroestop/bottommargin (axes are stripped, so the 2px defaults were dead space). Full docs page at/charts/candlestick-chartwith static ↔ streaming toggle, range-chart demo, compact-mode grid for OHLC + Range, and an Animation section demoing data-morph (seeded regenerate button) and a sliding push/remove window.- Candlestick animation support — the transition pipeline in
pipelineTransitions.tsgained full enter/update/exit branches fortype: "candlestick"nodes. Bars matching by x-identity smoothly interpolate all four y-coords (openY,closeY,highY,lowY) when data updates; new bars fade in; scrolled-off bars fade out with a held-in-place gray stub. Snapshot carriesbodyWidthtoo so exits don't jump to a 6px fallback on the final frame. Renderer now compositesdecayOpacity * style.opacityso decay and transition fades stack.getNodeIdentityprefers an existing_transitionKeyover the datum-derived key so exit stubs stay stable across overlapping transitions (fixes a latent reshuffle risk for all exit-node types, not just candlestick). - Server-side rendering for candlestick —
renderChart("CandlestickChart", ...)works through a new entry inserverChartConfigs.ts. Passthrough config: HOC-level accessors map 1:1 to frame-level ones;openAccessor/closeAccessorare forwarded without defaults soPipelineStorecan auto-detect range mode. compactMode: booleanonuseChartModereturn — the context∨sparkline union now lives on the hook instead of being recomputed in each HOC.GaugeChartconsumes it (replaces the localmodeIsContext || modeIsSparklineflag and collapses three conditional-render branches into one).candlestick-range-*visual regression fixtures — 3 new modes × 3 browsers = 9 baselines added to the chart-modes matrix specifically covering range-mode rendering (the path that motivated the dot-radius cap).
Changed
- Candlestick sparkline rendering — three rendering changes converge to make high/low lines actually visible at 120×24:
- Wick is drawn on top of the body at
layout.height < 60with a 2px minimum stroke. At sparkline heights the protrusion above/below a tiny body is often <2px and lands on subpixel boundaries, antialiasing to ~11% alpha (invisible). Drawing the wick last shows the full high-low range as a continuous line through the body. - Range-mode dot radius scales with
bodyWidth/2and caps atlayout.height * 0.12(was hardcodedmax(wickWidth * 2, 4)— ≥4px always, marble-sized on a 24px row). Scales up for primary/context. - Scene builder now computes the same gap-derived
bodyWidthin OHLC and range modes so the renderer has a scale-aware basis for dot sizing. GaugeChartneedle formula simplification —innerRadius > 20 ? innerRadius - 8 : radius - 1. TheMath.max(1, ...)/Math.max(2, ...)floors in the previous formula were dead: the guarded expression is always well above the floor in either branch.- Type safety sweep — ~216
anytypes eliminated across the codebase. Scene-node interfaces, scale helpers, hook returns, and accessor resolution gained concrete types. No behavior change; catches more regressions at compile time. - Major dependency updates —
@playwright/test+playwright-chromium^1.17.1→^1.59.1(regenerated 9 darwin baselines for chromium font-rendering shifts on label-heavy charts),vitest+@vitest/coverage-v8+@vitest/ui^4.0.18→^4.1.4,typedoc^0.28.17→^0.28.19,@axe-core/playwright^4.11.1→^4.11.2,@modelcontextprotocol/sdk1.27.1 → 1.29.0,@types/nodealigned to Node 22.19.17 (matches the Volta-pinned runtime)..node-versioncorrected from18→22.22.1.
Fixed
RealtimeHistogram.showLegenddead pass-through —showLegendwas being fed intouseChartModebut the resolved value was never consumed (the HOC doesn't construct alegendprop for StreamXYFrame). Removed the feed-in and updated the comment to explain the absence.arrowOfTimewrongly exposed onStreamOrdinalFrame— removed. The prop only applies to XY time-series layouts; its presence on the ordinal frame was a leftover from a shared-types refactor.- Doc TOC duplicate-key warning — two sections titled "When to reach for which" on
/theming/semantic-colorsslugged to the same React key. Renamed to "When to reach for which role" and "When to reach for which primitive";PageLayoutadditionally de-dupes TOC keys defensively so a transient DOM overlap during route transitions can't re-surface the warning.item.idstill carries the real heading id for anchor navigation;item.keyis a separate React-only identifier. - Shadowed cookbook import in
App.js—import CandlestickChartPage from "./pages/cookbook/..."was re-importing the same symbol used by the new/charts/route, so the charts-route fell through to the cookbook recipe. Renamed toCandlestickCookbookPage.
Tooling
ai/schema.jsonandvalidationMap.tsgainedCandlestickChartentries;check-schema-freshness.jsandcheck-ssr-alignment.jsboth pass.