Biomarker charts objective · safety.viz v1.9.0 · 3 October 2026
safety.viz's bundle gained one thing: a frozen list, called kit, of 36 parts its own thirteen charts are already built from. It exists so a second chart library on the same page can build its charts from the same parts instead of copying them. Nothing in safety.viz moved, was renamed or behaves differently.
dev after v1.8.0 shipped and so rides the next release. Say so if you want it held out.reconcileFilters, joined after the task was written, because the v1.8.0 review made it the step every chart now calls to settle its filters. Without it bio.viz's filters would behave differently from safety.viz's.SafetyViz.kit, pointing at exactly the functions safety.viz's charts already call. It is a re-export, not new code and not a refactor.One web page
SafetyViz.kit: 36 parts, the same functions the thirteen charts use, read-onlybio.viz's charts look for SafetyViz.kit on the page and build their sidebar, filters, listing, profile rail and canvases from it
src/kit.js, that gathers the 36 parts and freezes the list.src/main.js, so the bundle carries kit. The committed bundle differs by that object and nothing else.Grouped by where they live in safety.viz. Each is the very function object safety.viz's charts use; a test fails if any is not.
| Group | What it is for | Parts |
|---|---|---|
| Drawing engine | Chart.js 4.5.1, the copy safety.viz already carries, so a page loads one. Bar, line and scatter are registered; anything else is a plugin on it. | Chart |
| The page frame | The sidebar of controls, the chart area, the view switcher and the shared styles every chart sits in. | renderShell, controlBuilders, renderViewSelector, applyShellStyles, createElement, option, multiSelect |
| Filters | The filter controls and the rules for what a filter lets through, including the reconciling step every chart now calls. | reconcileFilters, renderFilterControl, normalizeFilterSpec, initFilterState, filterMatches, ALL_VALUE |
| Axis limits | The minimum and maximum inputs for an axis. | syncAxisLimits, seedLimitInput, applyLimitEdit, clearAxisLimits, formatLimit, limitDigits |
| Record listing | The table of participants under a chart: search, sort, pages and a CSV download. | renderListing, searchRows, sortRows, paginate, buildCsv, exportCsv |
| Participant profile | The side panel that opens one participant's results when a row or point is clicked. | mountProfileRail, unmountProfileRail, syncProfileRail, resetProfileRail, buildProfileRows |
| Box drawing | How a box and its whiskers are drawn. | drawBoxWhisker, boxWhiskerPlugin |
| Measure list | Which measures a chart offers, and in what order. | resolveMeasureList, presentMeasures |
| Survival curve | The Kaplan–Meier estimate behind safety.viz's time-to-event curve, for bio.viz's stratified survival chart to draw from rather than reimplement. | kmEstimate |
Left out on purpose: the two status banners, prototypeBanner and experimentalBanner, because their wording is about safety.viz's own release status.
KIT-API hold each of the 36 parts identical to the function its own module exports, hold the list to exactly those 36, and fail if a module gains an export that is neither listed nor deliberately left out.KIT-USE drive a test page that loads only the committed bundle and builds a working page from the kit alone: a sidebar, a filter that narrows a bar chart drawn with kit.Chart, a click that fills the record listing, and a listing row that opens the participant rail. A test fails if that page reaches for any of safety.viz's charts directly.dev's names plus kit, none removed.exportCsv, always names its file after the safety histogram. bio.viz builds its own download from buildCsv instead, so its files are named for its charts. Fixing exportCsv itself would now be a kit change.start setting means: it now only sets what a filter opens on, and only all: false removes the All option. bio.viz takes that in when it re-copies safety.viz's bundle from dev.dev; reconcileFilters joined; the milestone moved to v1.9.0.dev. It reaches main with v1.9.0, through your review of that release candidate.dev (bio.viz task 37).