Beim Antworten war das Schreibfeld einen Buchstaben breit

Filipes Bildschirmfoto: Die Antwortleiste nimmt die ganze Breite, und
daneben steht ein Schreibfeld, in dem der Text senkrecht laeuft --
"defi / niti / v / hah / a".

DIE ABSICHT STAND DA, DIE REGEL NICHT. `.chat__eingabe` ist eine Reihe
OHNE Umbruch, und die Antwortleiste ist darin ein gleichberechtigtes
Element -- sie nimmt ihren Platz NEBEN dem Schreibfeld. Das
`margin-bottom: 8px` an der Leiste sagt seit jeher, dass sie darueber
gehoert; durchgesetzt wurde es nie.

Dazu stand am Schreibfeld `min-width: 0`. Das ist woertlich die
Erlaubnis, auf nichts zu schrumpfen -- und genau das hat es getan.

BEHOBEN MIT EINER REGEL, NICHT MIT EINER ZAHL: Die Zeile darf jetzt
umbrechen, die Antwortleiste nimmt sich mit `flex-basis: 100%` immer
die ganze Zeile, und das Schreibfeld hat eine Untergrenze von 8rem.
Bricht es darunter, bricht lieber die Zeile um, als dass das Feld
unbenutzbar wird.

Gemessen an der schmalsten Breite, die das Haus kennt:
  320 px: Schreibfeld 166 px, Antwortleiste 670 px (eigene Zeile)
  430 px: Schreibfeld 216 px
Vorher: rund 30 px.

pruef-chat-optik prueft das jetzt mit -- und nicht nur die Breite des
Feldes, sondern auch, dass die Leiste wirklich eine eigene Zeile
nimmt. Ohne die zweite Zeile waere die erste nur zufaellig gruen,
solange der zitierte Text kurz genug ist.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-21 14:11:04 +02:00
co-authored by Claude Opus 5
parent 314561fb64
commit 9a30f9e304
39 changed files with 595 additions and 506 deletions
+66
View File
@@ -591,6 +591,72 @@ melde("\n=== Man sieht, mit wem man schreibt ===");
await luna.ctx.close();
await pat.ctx.close();
/* =======================================================================
DAS SCHREIBFELD BLEIBT BREIT GENUG -- AUCH BEIM ANTWORTEN
=======================================================================
Filipes Bildschirmfoto vom 21.09.2026: Die Antwortleiste nimmt die
ganze Breite, und daneben steht ein Schreibfeld von der Breite eines
einzigen Buchstabens. Der Text laeuft senkrecht: "defi / niti / v /
hah / a".
URSACHE: `.chat__eingabe` ist eine Reihe OHNE Umbruch, und die
Antwortleiste ist darin ein gleichberechtigtes Element. Das
Schreibfeld hatte `min-width: 0` -- also woertlich die Erlaubnis,
auf nichts zu schrumpfen.
Das `margin-bottom` an der Leiste sagte seit jeher, dass sie
DARUEBER gehoert. Durchgesetzt wurde es nie. Wieder ein Fall von:
Die Absicht stand da, die Regel nicht.
GEMESSEN WIRD AN DER SCHMALSTEN BREITE, die das Haus kennt -- wenn
es dort passt, passt es ueberall.
======================================================================= */
melde("\n=== Antworten quetscht das Schreibfeld nicht ===");
{
for (const breite of [320, 430]) {
const p2 = await alsRolle("admin", "CODE-DOGI-0001", "chat.html?raum=treff", breite);
try {
await p2.seite.waitForTimeout(900);
const mass = await p2.seite.evaluate(() => {
const l = document.getElementById("antwort-leiste");
const t = document.getElementById("text");
if (!l || !t) return null;
/* Die Leiste wird eingeblendet wie beim Antworten -- mit einem
langen Text, denn genau der hat sie breit gemacht. */
l.hidden = false;
const von = document.getElementById("antwort-von");
const txt = document.getElementById("antwort-text");
if (von) von.textContent = "Diene";
if (txt) {
txt.textContent = "Ohaaa, da bin ich voll dabei. Das waere ein "
+ "Unterschied wie Tag und Nacht, wirklich jedes Mal wieder.";
}
const r = t.getBoundingClientRect();
const rl = l.getBoundingClientRect();
return { feld: Math.round(r.width), leiste: Math.round(rl.width),
fenster: window.innerWidth };
});
ok(!!mass, `${breite} px: Schreibfeld und Antwortleiste sind da`);
if (mass) {
/* 8rem = 128 px ist die Untergrenze aus der Stilvorlage. Ein
Feld darunter ist kein Schreibfeld mehr, sondern ein Spalt. */
ok(mass.feld >= 128,
`${breite} px: das Schreibfeld ist ${mass.feld} px breit (mindestens 128)`);
/* UND DIE LEISTE HAT IHRE EIGENE ZEILE. Waere sie schmaler als
das Fenster, saesse sie wieder neben dem Feld -- dann waere
die Zeile darueber nur zufaellig gruen, weil der Text kurz
genug war. */
ok(mass.leiste > mass.feld,
`${breite} px: die Antwortleiste nimmt die ganze Zeile `
+ `(${mass.leiste} gegen ${mass.feld} px)`);
}
} finally {
await p2.ctx.close();
}
}
}
await browser.close();
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }