feat(settings): standardize settings and admin section framing

Introduce a shared SettingsSectionFrame (the settings twin of the admin
renderer's SectionFrame) that emits the canonical visible heading +
subheading, and route all 19 settings sections through it. Every settings
page now shows a real h1 + subtitle in the reference Übersicht style
instead of an invisible sr-only title; the section bodies drop their own
headings and off-style intro paragraphs (the explanatory copy folds into
the frame subtitle).

- Route the admin About page through SectionFrame so it carries the same
  visible heading as every other admin section.
- Rename the AI settings section from KI-Auswertung to KI-Anbieter across
  six locales: the page configures the provider and key, not an analysis.
- Add a heading-block spacer to the settings and admin sidebars so the
  first menu item lines up with the top of the first card.
- Remove the always-on core-domains card from Module: a tracking area that
  can't be turned off doesn't need listing.
- Move the proactive-coach control out of Benachrichtigungen into Coach.
- Move admin module availability out of the Coach section into its own
  page: it gates every module, not just the coach.
- Give the Layout Insights editor a proper Insights heading.

Adds settings.sections.<slug>.subtitle and the new admin keys across all
six locales; removes the now-unused module core-domain strings.
This commit is contained in:
Marc-André Bombeck committed 2026-06-18 21:28:33 +02:00
1 parent ae3091df9e
commit 33d7d103da
42 files changed
+822 -802

No files matched your search

+27 -7
View File
@@ -94,18 +94,32 @@ export function AdminSectionRenderer({
// v1.18.1 — the former ai-quality, assistant, and coach-feedback
// sections fold into one Coach area: surface toggles + operator
// config first, then the two feedback-quality tables.
// v1.18.6 (W9) — server-wide module availability moved out to its own
// `module-availability` section: it gates EVERY module, not just the
// coach, so it no longer belongs stacked under Coach.
return (
<SectionFrame
title={t("admin.section.coach.title")}
subtitle={t("admin.section.coach.subtitle")}
>
<AssistantSection />
<ModuleAvailabilitySection />
<AiServerKeySection />
<CoachFeedbackSection />
<AiQualitySection />
</SectionFrame>
);
case "module-availability":
// v1.18.6 (W9) — operator-side server-wide module on/off, its own
// admin section (was stacked under Coach). Reconciled name: the
// user-facing "Module" settings pick from what is available here.
return (
<SectionFrame
title={t("admin.section.module-availability.title")}
subtitle={t("admin.section.module-availability.subtitle")}
>
<ModuleAvailabilitySection />
</SectionFrame>
);
case "feedback":
return (
<SectionFrame
@@ -191,12 +205,18 @@ export function AdminSectionRenderer({
</SectionFrame>
);
case "about":
// v1.4.36 W4e — About section reused as-is from the settings
// surface. The component owns its own heading + cards layout
// so no SectionFrame wrapper.
// v1.18.6 — the About surface no longer carries the tour-replay card
// (consolidated onto Settings → Advanced), so there's nothing to hide.
return <AboutSection />;
// v1.4.36 W4e — About section reused as-is from the settings surface.
// v1.18.6 (W9) — route it through `SectionFrame` like every other admin
// section so it gets the same visible heading + subtitle (the one admin
// page that was bypassing the frame and showing no heading).
return (
<SectionFrame
title={t("admin.section.about.title")}
subtitle={t("admin.section.about.subtitle")}
>
<AboutSection />
</SectionFrame>
);
default:
slug satisfies never;
return null;