/** * Die Textabstände – Zeilen-, Wort- und Zeichenabstand in Stufen. * * **Warum es das gibt.** WCAG 1.4.12 (Textabstand) verlangt, dass sich Text * mit weiterem Zeilen-, Wort- und Zeichenabstand darstellen lässt, ohne dass * Inhalt verlorengeht. Im Browser erfüllt man das, indem man nutzereigene * Stilblätter toleriert; der eigene Prüfplan stellt den Fall entsprechend mit * einem Entwicklerwerkzeug-Stilblatt nach. * * In einer ausgelieferten Electron-Anwendung hat der Endnutzer aber weder * Erweiterungen noch Entwicklerwerkzeuge — der Einzige, der die Abstände * ändern könnte, ist die Anwendung selbst. Formal ist das kein Verstoß gegen * 1.4.12: In einer geschlossenen Umgebung misst das Kriterium die Toleranz * gegenüber Overrides, die es hier gar nicht geben kann. Es ist trotzdem eine * Lücke, und zwar bei denen, für die das Kriterium geschrieben wurde: * Menschen mit Legasthenie, mit Sehbehinderung, mit Konzentrationsstörungen. * Für sie ist die (gute) Vorgabe 1,65 manchmal einfach zu eng. * * **Die Werte der weiteren Stufe** sind genau die aus 1.4.12: Zeilenhöhe das * 1,5-fache der Schriftgröße, Wortabstand 0,16 em, Zeichenabstand 0,12 em. * Weil die Anwendung schon bei 1,65 anfängt, liegt die weitere Stufe darüber * und nicht darunter — das Kriterium nennt Mindestwerte, keine Sollwerte. */ /** Die wählbaren Stufen. */ export const TEXTABSTAENDE = ['normal', 'weit', 'sehr-weit'] as const; export type Textabstand = (typeof TEXTABSTAENDE)[number]; export const TEXTABSTAND_STANDARD: Textabstand = 'normal'; /** Beschriftung für die Bedienelemente und die Ansage. */ export const TEXTABSTAND_BEZEICHNUNG: Readonly> = Object.freeze({ normal: 'Normal', weit: 'Weit', 'sehr-weit': 'Sehr weit', }); /** Was die Stufe bewirkt – steht als erklärender Satz am Bedienelement. */ export const TEXTABSTAND_ERKLAERUNG: Readonly> = Object.freeze({ normal: 'Die gewohnte Darstellung.', weit: 'Mehr Luft zwischen Zeilen, Wörtern und Buchstaben.', 'sehr-weit': 'Noch mehr Luft – für längere Texte am Stück.', }); export function istTextabstand(wert: unknown): wert is Textabstand { return typeof wert === 'string' && (TEXTABSTAENDE as readonly string[]).includes(wert); } export function textabstandBereinigen(wert: unknown): Textabstand { return istTextabstand(wert) ? wert : TEXTABSTAND_STANDARD; } /** „Zeilenabstand: Weit“ – für die Live-Region nach dem Umstellen. */ export function textabstandAnsage(stufe: Textabstand): string { return `Textabstand: ${TEXTABSTAND_BEZEICHNUNG[stufe]}.`; }