The past two days
Personal journal / Self-reported
Headache
Mild
Recorded after breakfastDetails
Slept later than usual. Added this note before leaving for work.Fatigue
Noticeable
Recorded at the end of the workday
A chronological record of supplied symptoms and intensity descriptions, with notes and 44px native detail disclosures.
Headache
Mild, self-reported
Personal journal / Self-reported
Headache
Mild
Fatigue
Noticeable
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { SymptomDiary } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/symptom-diary.
npx @noorddev/vlak-cli add symptom-diary
The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/symptom-diary.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { SymptomDiary } from "@noorddev/vlak-react";
<SymptomDiary aria-label="Recent symptom entries" order="newest" entries={[
{ id: "morning", symptom: "Headache", dateTime: "2026-09-06T09:00:00+02:00", timeLabel: "6 Sep, 09:00 CEST", intensity: "Mild, self-reported", notes: "Recorded after breakfast", details: "No additional context recorded" },
{ id: "evening", symptom: "Fatigue", dateTime: "2026-09-05T18:30:00+02:00", timeLabel: "5 Sep, 18:30 CEST", intensity: "Noticeable, self-reported", notes: "Recorded at the end of the workday" },
]} />A time-ordered record of supplied symptoms, descriptions and native detail disclosures.
| Prop | Type | Default | Description |
|---|---|---|---|
entriesrequired | readonly SymptomEntry[] | ||
emptyLabel | string | "No symptoms recorded" | |
order | "newest" | "oldest" | "newest" | Sorts a copy of entries. Equal timestamps retain their supplied order. |
Also accepts HTMLAttributes<HTMLOListElement>.
| Keys | Does |
|---|---|
| Tab | Focuses each detail summary and any supplied actions |
| Enter, Space | Opens or closes a focused native detail disclosure |
<ol class="rs-symptom-diary" aria-label="Recent symptom entries"><li class="rs-symptom-diary-item"> <time class="rs-symptom-diary-time" datetime="2026-09-06T09:00:00+02:00">6 Sep, 09:00 CEST</time> <div class="rs-symptom-diary-content"><div class="rs-symptom-diary-head"><p class="rs-symptom-diary-symptom">Headache</p><p class="rs-symptom-diary-intensity">Mild, self-reported</p></div><p class="rs-symptom-diary-body">Recorded after breakfast</p><details><summary class="rs-symptom-diary-summary" aria-label="Details for Headache, 6 Sep at 09:00 CEST">Details</summary><p class="rs-symptom-diary-body">No additional context recorded</p></details></div> </li></ol>