refactor: inline letter-canvas's 19 pure labels, extract letter-line (RD-26)

Twenty of letter-canvas's twenty-eight input()s are $localize labels that no
caller ever binds. Inline nineteen of them as template i18n, using the same
ids and source text so messages.en.xlf does not change. recipientText stays
an input() because its message embeds a literal \n, which as template text
becomes a different source string to Angular's extractor.

Extract letter-line.component.ts for the #line template plus the
label/auto/state/sample helpers it needs, replacing letter-canvas's three
ngTemplateOutlet incantations with one tag each. Its helpers are exported
pure functions with a spec, no TestBed.

The file stays over the 250-line budget (77 lines of CSS plus one letter's
markup), so the eslint-disable max-lines directive stays too, with its
reason rewritten to say so plainly — the only such disable left in the repo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-09-05 00:25:35 +02:00
co-authored by Claude Sonnet 5
parent bcac3789d3
commit 7a8eab917b
6 changed files with 498 additions and 108 deletions
+32 -1
View File
@@ -20,7 +20,7 @@ tested where._
Every bullet below is a real test name from the suite — an `it()` title (frontend) or a test
method name (backend), read as a sentence. Nothing here is hand-written prose: this page
**is** the suite, reshaped for a business reader. 543 frontend behaviours across
**is** the suite, reshaped for a business reader. 556 frontend behaviours across
9 contexts; 261 backend behaviours across 42 test
classes.
@@ -337,6 +337,10 @@ classes.
- preserves library order (= reading order)
- never offers non-kern passages
#### placeholderDefs
- keys the placeholder list by its key
#### proefbriefErrorMessage (TE-002 trust boundary)
- surfaces the ProblemDetails detail when present
@@ -348,6 +352,33 @@ classes.
- derives reason checkboxes (code + label) from the negatief reason passages
- positief has no reason-specific redenen
#### resolveAuto
- reads autoResolvable off the field
- defaults to false for an unknown key
#### resolveLabel
- returns the field label for a known key
- falls back to the bare key when the field is unknown
#### resolveSample
- prefers the canned sample value over the label
- resolves datum to the caller-supplied sample date
- falls back to the field label for anything else
#### resolveState
- defaults to ok when the key has no diagnostic
- surfaces the worst recorded severity
#### worstSeverities
- ignores a diagnostic with no placeholder key
- keeps error over a warning already recorded for the same key
- does not let a later warning downgrade an error
### herregistratie
#### IntakeWizardComponent