feat(timeline): one row per medication, no cap on value lines, range popover

A medication arrived as up to four kinds of item (its own span, its
courses, its dose changes, its pauses) and was drawn item by item, so a
medication with a course read as two bars on two rows. Every item of one
medication now carries the medication's id as `group`, and the lane draws
one row per group: the courses are the stretches it was taken, each dose
change cuts them into pieces labelled with their dose, and a pause is a
gap in the same bar. The selection bar and the phone chronicle list one
entry per medication with the dose in the text.

The value series cap of six is gone. The response carries
`availableSeries`, every series the record can show, and the picker is
one compact "Values (n)" button whose menu lists them. Past the fifth
line the five data colours repeat; every line is named at its left.

Choosing a range opens a popover anchored to the "Range" segment (a sheet
on a phone) with "Apply", so the chart no longer moves; the URL keeps the
range as before. The selection bar sits on the card under a hairline
instead of a grey box, the legend explains the dashed stroke and the
hollow point, and no timeline text joins its parts with a middle dot or
calls an open span "ongoing".
This commit is contained in:
Marc-André Bombeck committed 2026-10-09 15:02:14 +02:00
1 parent bde6880c3e
commit 1440ad4301
37 files changed
+2507 -390

No files matched your search

+19 -4
View File
@@ -23472,11 +23472,11 @@ paths:
- in: query
name: values
schema:
description: Comma-separated value series to include, as `MeasurementType` names or `MOOD`, at most 6. More, or an
unknown name, answers 422.
description: Comma-separated value series to include, as `MeasurementType` names or `MOOD`. A name given twice counts
once, so the list is bounded by the names that exist; an unknown name answers 422.
type: string
description: Comma-separated value series to include, as `MeasurementType` names or `MOOD`, at most 6. More, or an
unknown name, answers 422.
description: Comma-separated value series to include, as `MeasurementType` names or `MOOD`. A name given twice counts
once, so the list is bounded by the names that exist; an unknown name answers 422.
responses:
"200":
description: The timeline for the requested zoom and window.
@@ -81602,6 +81602,13 @@ components:
type: array
items:
$ref: "#/components/schemas/TimelineSeries"
availableSeries:
type: array
items:
type: string
description: "Every value series this record can show, whatever the window: the `MeasurementType` names with live
readings that the caller may see (events excluded), and `MOOD` when the mood score is visible and has
entries. Each may be named in `values`."
notable:
type: array
items:
@@ -81628,6 +81635,7 @@ components:
- standing
- bucket
- series
- availableSeries
- notable
additionalProperties: false
TimelineItem:
@@ -81688,6 +81696,12 @@ components:
anyOf:
- type: string
- type: "null"
group:
anyOf:
- type: string
- type: "null"
description: "Items that belong to one thing share a group and are drawn on one row: a medication's own span, its
courses, its dose changes and its pauses all carry the medication's id. Null for an item that stands alone."
required:
- id
- kind
@@ -81699,6 +81713,7 @@ components:
- label
- sub
- href
- group
additionalProperties: false
TimelineStandingItem:
type: object