Result states per component
Final, preliminary, corrected, amended, critical, absent, uninterpreted.
FHIR R4 · source-first · MIT core
30 accessible components typed to FHIR R4 — where a missing value, an unrecorded one, and one nobody has read yet are three different things on screen.
Source is copied into your repo. Yours to read, audit and change.
npx @zoblocks/cli add pulse-loaderPulse
Heart and rhythm line, 60 bpm
Rhythm
One strip, swept
Breath
15 a minute
Helix
For the lab
Infusion
Determinate
Paced to resting physiology rather than to a spinner: 60 beats a minute, a seven percent beat, nothing above 1.7 Hz. Each one is installed on its own, respects prefers-reduced-motion with a designed still state, and announces the wait in words.
Why this exists
A generic card renders a value. It has no opinion about a result that came back preliminary, a range that doesn’t exist, a record flagged restricted, or a potassium of 6.8. Those aren’t edge cases. They are Tuesday.
Final, preliminary, corrected, amended, critical, absent, uninterpreted.
Patient-facing, standard admin, and clinical-dense — switchable at any container.
The components are source. Nothing sits between you and the render.
New · Data Grid
Scroll it, sort it, select rows. This is the shipped component, not a picture of one.
Adult outpatient · Team 4 · updated 11:47
3 results arrived at 11:47 — nothing moved.
| IOP | Ideation with plan | 0.82 | Today 14:00 | A. Vance | ||
| PHP | Ideation, no plan | 0.68 | Today 15:30 | A. Vance | ||
| IOP | Ideation, no plan | 0.61 | Mon 8:30 | A. Vance | ||
| PHP | Ideation, no plan | 0.57 | Tue 9:00 | T. Boateng | ||
| PHP | Ideation, no plan | 0.52 | Mon 13:00 | T. Boateng | ||
| IOP | Ideation, no plan | 0.51 | Fri 12:30 | A. Vance | ||
| IOP | None reported | 0.41 | Fri 18:20 | K. Marsh | ||
| IOP | Ideation, no plan | 0.40 | Thu 16:30 | A. Vance | ||
| PHP | Passive ideation | 0.40 | Fri 8:00 | T. Boateng | ||
| PHP | Ideation, no plan | 0.39 | Today 17:10 | S. Okafor | ||
| PHP | Passive ideation | 0.32 | Thu 12:00 | T. Boateng | ||
| IOP | Passive ideation | 0.31 | Wed 11:30 | A. Vance | ||
| IOP | Passive ideation | 0.25 | Tue 15:30 | A. Vance | ||
| PHP | Passive ideation | 0.21 | Wed 16:00 | T. Boateng | ||
| IOP | None reported | 0.12 | Mon 10:30 | A. Vance |
15 of 130 clients loaded.
Click a cell and use the arrow keys. Every name and number is invented.
All 14 statesThe library
Every one below is the real component, running. Operate it — right-click a patient, type into the date field, throw the switch. Nothing here is a screenshot.
A. Vance, MD — attending
Signed 12 Aug 2026, 16:20 +05:30, on a note whose text hash is stored beside it.
Provenance/9f2c · agent · Practitioner/7
01/Signature
Provenance
It records what was on screen at the moment of signing, so a countersignature can be defended a year later.
02/Loaders
Five waits with different meanings, each with a designed reduced-motion state rather than a spinner that simply stops.
Right-click a row yourself. The header is what the pointer lands on.
03/Context menu
Patient
It names the record before it offers to change it, so the first thing under the pointer is never a verb.
Follow-up, 12 Aug 2026. Reviewed by A. Vance, MD.
Chief complaint: six weeks of progressive fatigue and dyspnea.
Signed 12 Aug, 16:20 +05:30.
04/Tabs
Eleven skins over one accessibility tree, so choosing a look is never a choice about whether a keyboard works.
05/Switch
Flag
Three values, not two: on, off, and nobody has said. The commit is visible, reversible, and survives a conflict.
06/Date & time
Period
One contract behind every temporal control — a range is two clicks with a live preview between them, and nothing reaches your state until Done.
Quality

Healthcare engineering services
Netsmart
since 20170incidents, 14-week cutover
9 yrs
The core is MIT. Nothing is gated behind an account, and the source lands in your repository where you can read every line before you trust it.
npx @zoblocks/cli add pulse-loaderRun zoblocks init once to say where your @/ alias points. The public catalogue needs no configuration and no account — paid components add a registry namespace and a token.