Files
patrickandClaude Sonnet 5 78ab9a1300
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
docs/shl: Tote Kanban-Verweise entfernt, Modul-Href-Dopplung aufgeloest
Fable-Review auf Code-Dopplung/interne Links (siehe Analyse). P0-Funde:

- Dangling Prosa-Verweise auf die per PR #367 geloeschten *-kanban/-Ordner
  in SKALIERUNGSKONZEPT.md, STORAGE-KONZEPT.md, MIGRATIONSKONZEPT.md,
  SICHERHEITSKONZEPT.md (7x "siehe X-kanban/README.md"), PRODUKTARCHITEKTUR.md
  um Hinweis ergaenzt, dass Boards jetzt in main-Historie/Gitea-PRs liegen.
- dms/internal/searchsync/searchsync_test.go:19: falscher Pfad im Kommentar
  ("internal/bulkedit"/"internal/jobqueue" statt "dms/internal/...").
- web/shl/components/ModuleNavShell.tsx: resolveHrefClientOnly war inhaltlich
  identisch zu resolveModuleHref in web/portal/app/ModuleGrid.tsx (zwei
  unabhaengig gepflegte Kopien derselben Hostname-Ersetzung). Als
  resolveModuleHref aus shl exportiert, ModuleGrid.tsx nutzt jetzt die
  gemeinsame Funktion, Test-Import entsprechend umgestellt.
- web/portal/lib/modules.test.ts: KNOWN_REAL_PERMISSIONS-Whitelist hatte
  kennzahlen.read (migrations/0019_kennzahlen_policy_rule.up.sql, real
  existierend seit ANA-02/PR #362) nie nachgetragen, Test lief seitdem
  unbemerkt im Fehler. Ergaenzt.

go test/vitest: web/portal (15/15) und web/shl (61/61) gruen auf Testhost 131.
Verbleibender P0-Punkt (14 Web-Apps ohne ModuleNavShell) braucht
Produktentscheidung -- mehrere Registry-Keys (ai/mail/workflow/connect)
sind bereits durch eine jeweils ANDERE App belegt als die ohne Navigation
(z.B. mail-search hat "mail", mail-postfach nicht), daher keine mechanische
Zuordnung moeglich ohne zu raten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-19 13:09:53 +02:00
..

@nexarch/shl — UI-Shell & Design-System (Core SHL-01)

Gemeinsames Paket für alle NEXARCH-Modul-Frontends (Core, DMS, Mail, Archive, Workflow, AI, Connect). Ein Modul-Frontend importiert ausschließlich über index.ts, kopiert keine Komponenten oder Tokens lokal.

Enthält

  • Design-Tokens (tokens/tokens.ts) — Farbe (Hell/Dunkel), Abstand, Typografie. Kontrastwerte gegen WCAG 2.1 AA geprüft (siehe __tests__/tokens.test.ts).
  • Theming (theme/ThemeProvider.tsx) — zentrale Hell/Dunkel-Umschaltung, respektiert prefers-color-scheme, persistiert in localStorage.
  • i18n-Rahmen (i18n/i18n.tsx) — Umschaltmechanismus Deutsch/Englisch. Modul-Frontends registrieren ihre fachlichen Textbausteine über registerMessages(), statt einen eigenen Mechanismus zu bauen.
  • Basis-Komponenten (components/) — Shell (Layout + Navigation), Table, Dialog, TextField/SelectField/CheckboxField, Toast. Alle mit WCAG-2.1-AA-Grundlage (Tastaturbedienung, ARIA-Attribute, Fokus-Management).

Verwendung in einem Modul-Frontend

import { ThemeProvider, I18nProvider, ToastProvider, Shell } from "@nexarch/shl";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <ThemeProvider>
      <I18nProvider initialLocale="de">
        <ToastProvider>
          <Shell modules={[]} tenantLabel="Mandant XY">
            {children}
          </Shell>
        </ToastProvider>
      </I18nProvider>
    </ThemeProvider>
  );
}

Bekannter offener Punkt

Die vier bereits gebauten Core-Frontends (TEN-05, LIC-04, AUD-04, OPS-02) sind vor diesem Paket entstanden und binden es noch nicht ein — Retrofit ist der nächste Schritt, siehe nexarch-state.json.

Tests

Ausführung auf dem Test-Host (nicht lokal, siehe Projekt-Testinfrastruktur):

npm install
npm test
npm run typecheck