Label Matins nocturns and the Invitatory in the rendered ordo
Deploy / deploy (push) Successful in 1m17s

Adds a section-heading ResolvedPart kind and emits "Invitatory" and
"Nocturn I/II/III" headings in matins.ts, so the hour's structural
boundaries are visible instead of rendering as one undifferentiated
stream of parts. Ferial (1-nocturn) days get no Nocturn heading, matching
their existing single-unnumbered-nocturn design.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 05:28:44 -04:00
parent e7bbc7c9f5
commit a9f673fef9
5 changed files with 31 additions and 2 deletions
+5
View File
@@ -210,6 +210,11 @@ export type ResolvedPart =
// have a single unnumbered nocturn and don't use this wrapper at all —
// see hours/matins.ts). `nocturn` is 1-3.
| { kind: 'nocturn-psalmody'; nocturn: number; psalms: ResolvedPart[] }
// A standalone structural heading with no content of its own — marks the
// start of a larger named section that doesn't correspond to one specific
// part kind (Matins' "Invitatory", "Nocturn I/II/III"). Distinct from the
// per-part `<h3 class="ordo-part-label">` every other kind already uses.
| { kind: 'section-heading'; label: string }
// Matins only. Sung after the last lesson on a 3-nocturn day (Sunday or
// a Duplex+ sanctoral winner) — see hours/matins.ts. Never present on a
// plain ferial (1-nocturn) day.