fix(tabel): koppen breken niet meer over de tabellijnen, en de tabel vult de dia #794

Merged
brenno merged 6 commits from fix/tabel-kolombreedte into main 2026-07-24 11:41:49 +00:00
Owner

Gemeld op een OpenKAT-managementoverzicht: "de tabel lijnt niet optimaal uit, er lopen teksten uit koppen dwars door de lijnen heen".

Wat er misging

Kolombreedtes werden verdeeld op tekenaantal, zonder ondergrens. Gemeten op de gemelde dia (Top-5 issues, 1280 px breed):

kolom kreeg kop had nodig
# 288 px 37 px
Ernst 105 px 108 px
Systemen 105 px 162 px
Orgs 52 px 91 px
  1. Systemen telt vier tekens minder dan Finding maar is bréder. Zo'n kolom kreeg minder ruimte dan het woord nodig heeft: de kop brak letter voor letter af (Orgs werd een verticale streep van één teken breed), en zodra de kolom onder haar eigen celmarge zakte tekende de tekst buiten de cel — dwars over de tabellijnen.
  2. De #-kolom werd 288 px breed voor enkel rangnummers, omdat het bijschrift "Eerste 5 van 22 regels" in cel 0 van een verder lege slotrij stond en dáár als kolominhoud meetelde.

Wat er nu gebeurt

  • Elke kolom krijgt eerst marge plus haar breedste ondeelbare kopwoord; pas wat overblijft wordt naar inhoud verdeeld. Meten en tekenen delen die geometrie. Na de fix: # 48 px, Finding 526 px, geen kolom onder haar kopbreedte.
  • Het bijschrift staat onder de tabel als losse regel, niet in een cel van één kolom.
  • De tabel vult ook de hoogte van de dia. De letter groeit tot ze past, begrensd door leesbaarheid (nooit groter dan een opsommingsregel) én door de breedte: groeit ze door, dan eisen de kolommen samen meer minimumruimte dan de tabel breed is — precies de klem hierboven — dus stopt de groei daarvóór. Wat een korte tabel dan nog overhoudt gaat naar de rijen zelf, begrensd op één em per zijde.
  • De kwaliteitswaarschuwing "celtekst staat op het minimumformaat" kwam uit een dichtheidsformule over rijen en kolommen. Dat zei niets meer zodra de tabel zijn letter uit de hoogte haalt (18 kolommen met losse tekens rendert ruim en kreeg toch de waarschuwing); ze draait nu dezelfde inpassing als de render.

Borging

  • tableColumnWidths: elke kolom past haar eigen kopwoord, de som is exact de tabelbreedte, en een kop breder dan de tabel wordt teruggeschaald in plaats van overgetekend. Eén keer rood gezien zonder de ondergrens.
  • tableFit: een korte tabel groeit, een tekstrijke krimpt, en groeien stopt vóór de kolomminima de breedte opeten.
  • Preview-tests op de echte widget, en een golden table_narrow_headers die precies de gemelde vorm vastlegt.
  • make check en make test-golden groen.
Gemeld op een OpenKAT-managementoverzicht: "de tabel lijnt niet optimaal uit, er lopen teksten uit koppen dwars door de lijnen heen". ## Wat er misging Kolombreedtes werden verdeeld op **tekenaantal**, zonder ondergrens. Gemeten op de gemelde dia (Top-5 issues, 1280 px breed): | kolom | kreeg | kop had nodig | | --- | --- | --- | | `#` | 288 px | 37 px | | `Ernst` | 105 px | 108 px | | `Systemen` | 105 px | 162 px | | `Orgs` | 52 px | 91 px | 1. `Systemen` telt vier tekens minder dan `Finding` maar is bréder. Zo'n kolom kreeg minder ruimte dan het woord nodig heeft: de kop brak letter voor letter af (`Orgs` werd een verticale streep van één teken breed), en zodra de kolom onder haar eigen celmarge zakte tekende de tekst buiten de cel — dwars over de tabellijnen. 2. De `#`-kolom werd 288 px breed voor enkel rangnummers, omdat het bijschrift "Eerste 5 van 22 regels" in cel 0 van een verder lege slotrij stond en dáár als kolominhoud meetelde. ## Wat er nu gebeurt - Elke kolom krijgt eerst marge plus haar breedste ondeelbare kopwoord; pas wat overblijft wordt naar inhoud verdeeld. Meten en tekenen delen die geometrie. Na de fix: `#` 48 px, `Finding` 526 px, geen kolom onder haar kopbreedte. - Het bijschrift staat onder de tabel als losse regel, niet in een cel van één kolom. - **De tabel vult ook de hoogte van de dia.** De letter groeit tot ze past, begrensd door leesbaarheid (nooit groter dan een opsommingsregel) én door de breedte: groeit ze door, dan eisen de kolommen samen meer minimumruimte dan de tabel breed is — precies de klem hierboven — dus stopt de groei daarvóór. Wat een korte tabel dan nog overhoudt gaat naar de rijen zelf, begrensd op één em per zijde. - De kwaliteitswaarschuwing "celtekst staat op het minimumformaat" kwam uit een dichtheidsformule over rijen en kolommen. Dat zei niets meer zodra de tabel zijn letter uit de hoogte haalt (18 kolommen met losse tekens rendert ruim en kreeg toch de waarschuwing); ze draait nu dezelfde inpassing als de render. ## Borging - `tableColumnWidths`: elke kolom past haar eigen kopwoord, de som is exact de tabelbreedte, en een kop breder dan de tabel wordt teruggeschaald in plaats van overgetekend. Eén keer rood gezien zonder de ondergrens. - `tableFit`: een korte tabel groeit, een tekstrijke krimpt, en groeien stopt vóór de kolomminima de breedte opeten. - Preview-tests op de echte widget, en een golden `table_narrow_headers` die precies de gemelde vorm vastlegt. - `make check` en `make test-golden` groen.
Kolombreedtes gingen op tekenaantal, zonder ondergrens. Een kop als
"Systemen" telt minder tekens dan "Finding" maar is breder, dus zo'n
kolom kreeg minder ruimte dan het woord nodig heeft: de kop brak letter
voor letter af, en zakte de kolom onder haar eigen celmarge, dan tekende
de tekst buiten de cel — dwars over de tabellijnen heen.

Nu krijgt elke kolom eerst marge plus haar breedste ondeelbare kopwoord;
pas wat overblijft wordt naar inhoud verdeeld. Meten en tekenen delen die
geometrie, dus de hoogtemeting blijft kloppen. De tabelmaten verhuizen
naar een eigen bestand, doorgegeven via slide_layout_metrics.

Datzelfde tekenaantal maakte het "N van totaal"-bijschrift van een
weergavelimiet tot inhoud van kolom 0: die werd een kwart slide breed
voor enkel rangnummers. Het bijschrift staat nu onder de tabel in plaats
van erin, waar het als losse regel hoort. Eén wijziging, want het raakt
dezelfde kolomverdeling in hetzelfde bestand.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Eén brede tekstkolom naast vier korte, koppen langer dan hun inhoud, plus
het bijschrift van een weergavelimiet — precies het OpenKAT-overzicht
waarop dit opviel. De bestaande tabel-golden schoof mee met de nieuwe
kolomverdeling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Een overzicht van vijf regels bleef als strookje bovenin hangen met de
onderste helft leeg: de celgrootte kwam uit een dichtheidsformule met een
plafond, en het inpassen kon alleen krimpen, nooit groeien.

De letter groeit nu tot de tabel de beschikbare hoogte vult. Twee grenzen
houden dat eerlijk. Leesbaarheid: celtekst blijft bijtekst en wordt nooit
groter dan een opsommingsregel. En breedte: groeit de letter door, dan
eisen de kolommen samen meer minimumruimte dan de tabel breed is —
precies de klem waar de kolomondergrens voor bestaat — dus stopt de groei
daarvóór.

Wat een korte tabel dan nog overhoudt gaat naar de rijen zelf, begrensd op
één em per zijde: drie regels worden luchtige banden in plaats van een
streepje met een gat eronder. Past het bij de kleinste letter nóg niet,
dan houdt het op — dan schaalt de dia als geheel terug.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
"Celtekst staat op het minimumformaat" kwam uit een formule over het
aantal rijen en kolommen. Sinds de tabel zijn letter uit de beschikbare
hoogte haalt, zegt dat niets meer: achttien kolommen met losse tekens
rendert ruim en kreeg toch de waarschuwing.

De controle draait nu dezelfde inpassing als de render, op een
referentiedia — het thema, het logo en de titelafbreking van de gebruiker
kent ze niet, dus oordeelt ze over een representatieve dia. De oude
dichtheidsformule had daarna geen gebruiker meer.

De check verhuist naar een top-level functie in dezelfde library: hij
tripte het klasseplafond van SlideQualityAnalyzer, en dat plafond hoor je
niet op te hogen voor gedrag dat niet in de klasse thuishoort.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 03dd734ce4 into main 2026-07-24 11:41:49 +00:00
Sign in to join this conversation.
No description provided.