Deutsch
Qualität
@templatical/quality ist das Dachpaket für die Template-Qualitäts-Werkzeuge von Templatical — deterministische Linter, die Autorenfehler im Editor und in Headless- / CI-Prüfungen erkennen. MIT-lizenziert, ESM, kein Vue, kein DOM.
Linter
| Linter | Was er erkennt | Standard-Schweregrade |
|---|---|---|
| Barrierefreiheit | Fehlender Alt-Text, niedriger Kontrast, vage CTAs, übersprungene Überschriftenebenen, zu kleine Touch-Ziele, lange GROSSBUCHSTABEN, target=_blank ohne rel, fehlender Preheader, … | überwiegend error/warning |
| Struktur | Doppelte Block-IDs, Sektionen mit falscher Spaltenanzahl, verschachtelte Sektionen, leere Sektionen, leere Spalten, Heros, die als normale Sektion dargestellt werden, Hintergrundbilder, die Outlook unter Windows nicht übereinanderlegen kann | überwiegend error; einige warning |
| Links | Gefährliche URL-Schemata (javascript:), nicht unterstützte Protokolle, fehlerhafte mailto: / tel:, relative URLs, Staging-/localhost-URLs, die ins Template lecken | überwiegend warning; link.javascript-protocol ist error |
| Zustellbarkeit | Abweichender URL-Linktext, URL-Kürzer, IP-Links und bildlastige E-Mails mit wenig Text | warning oder info |
| Kompatibilität | Nicht unterstütztes durchgereichtes HTML und CSS sowie kompilierte Gmail-Größe | warning oder info |
| Lokalisierung | Fehlende Übersetzungen, veraltete Quell-Hashes und abweichende Merge-Tags | warning |
Alle Linter liefern dieselbe LintIssue-Struktur und teilen sich dieselbe Optionsfläche (LintOptions) — Konsumenten können sie also in jeder Kombination ausführen, Ergebnisse zusammenführen und beim Gruppieren nach ruleId-Präfix (a11y.*, structure.*, link.*, deliverability.*, compat.*, localization.*) filtern. Die Schweregrad-Overrides und tool-spezifischen Stellschrauben jedes Linters liegen unter seinem eigenen Namensraum (accessibility, structure, links, deliverability, compatibility, localization); setzen Sie einen davon auf false, um den jeweiligen Linter komplett zu deaktivieren.
Alles mit einem Aufruf ausführen. lintTemplate(content, options?) ist der einzelne aggregierte Einstiegspunkt — er führt alle Linter aus und liefert die zusammengeführten LintIssue[] (zuerst Barrierefreiheit, dann Struktur, dann Links, dann Zustellbarkeit, dann Kompatibilität, dann Lokalisierung). Greifen Sie standardmäßig dazu; die einzelnen Linter-Funktionen bleiben exportiert, falls Sie nur eine Teilmenge ausführen wollen. Um eine Kategorie zu überspringen, setzen Sie ihren Schlüssel auf false: lintTemplate(content, { structure: false }). Siehe Headless-Nutzung.
contentLocale wählt die geprüfte Version, locale die Meldungssprache. Wörterbücher bleiben eine Vereinigung aller Sprachen. Die drei localization.*-Regeln stehen unter Optionen, mit Fallback, Veraltung und Merge-Tag-Verhalten.
Architektur
Das Paket trifft keine UI-Annahmen. Das useTemplateLint-Composable des Editors lädt @templatical/quality per dynamischem Import nach, ruft alle Linter über den einzelnen lintTemplate-Aufruf bei (entprellten) Inhaltsänderungen auf und speist den zusammengeführten Issue-Strom in den Probleme-Sidebar-Tab und die Per-Block-Canvas-Badges. applyFix(issue) führt jeden Patch über den bestehenden Block-Update-Pfad des Editors aus — Fixes landen so als ordentliche Undo-Einträge.
Installation
@templatical/quality ist eine optionale Abhängigkeit des Editors und wird standardmäßig mitinstalliert. Sie können es weglassen: Der Editor funktioniert ohne das Paket und blendet den Tab „Probleme“ aus. Für die Headless-Nutzung oder um es wieder hinzuzufügen, installieren Sie es ausdrücklich:
bash
npm install @templatical/qualitybash
pnpm add @templatical/qualitybash
yarn add @templatical/qualitybash
bun add @templatical/qualityCDN-Nutzer
Wenn Sie Templatical per CDN laden, gibt es nichts zu installieren. Das Editor-CDN-Bundle liefert @templatical/quality als separat ausgelagerten Code-Split-Chunk aus, der automatisch nachgeladen wird, sobald Linting aktiv ist.
Editor anbinden
Übergeben Sie lint an init() oder initCloud():
ts
import { init } from "@templatical/editor";
const editor = init({
container: "#editor",
locale: "de",
lint: {
accessibility: {
rules: {
"a11y.img-missing-alt": "warning", // von Standard 'error' herabstufen
"a11y.text-all-caps": "off", // komplett deaktivieren
},
thresholds: { minFontSize: 16 },
},
structure: {
rules: { "structure.empty-column": "info" }, // warning → info
},
links: {
rules: { "link.localhost-or-staging": "error" }, // vor Versand hochstufen
nonProductionHosts: ["*.staging.*", "*.preview.*"],
},
deliverability: { thresholds: { minTextLength: 250 } },
compatibility: { thresholds: { maxHtmlBytes: 92_160 } },
},
});Der Tab „Probleme“ und die Canvas-Badges erscheinen automatisch, sobald das Quality-Paket verfügbar ist. Bei lint.disabled === true — oder wenn jeder Linter-Key (accessibility, structure, links, deliverability, compatibility) auf false steht — lädt der Editor das Paket gar nicht erst nach: kein Chunk-Download, keine UI.
Setzen Sie einen einzelnen Linter auf false, um nur dessen Regeln auszuschalten:
ts
init({ container: "#editor", lint: { links: false } });Schnellzugriff
- Optionen —
disabled,locale, pro-Tool-Namensräumeaccessibility/structure/links/deliverability/compatibility. - Schweregrade & Fixes — Schweregrad-Modell + wie Auto-Fix-Patches im Editor landen.
- Headless-Nutzung —
lintTemplate+ Validierung gespeicherter Templates in CI / Server-Save-Handlern. - Lokalen beitragen — Regel-Nachrichten + Vague-Text-Dictionaries hinzufügen.
- Barrierefreiheits-Linter — was er erkennt, Regelkatalog.
- Struktur-Linter — was er erkennt, Regelkatalog.
- Links-Linter — was er erkennt, Regelkatalog.
- Zustellbarkeits-Linter — Inhaltsmuster und Regelkatalog.
- Kompatibilitäts-Linter — Client-Support für durchgereichte Inhalte und kompilierte Größe.