Name the arrangement settings hub "Layout"

The hub arranges and picks what the dashboard, insights and each module
show and holds no theme control, so "Appearance" promised something it
does not have. It reads "Layout" in every locale, and its subtitle says
what it does. In German "Darstellung" now names only the account page's
language-and-units card.
This commit is contained in:
Marc-André Bombeck committed 2026-10-08 20:47:55 +02:00
1 parent f648168266
commit a589e15f86
13 files changed
+40 -40

No files matched your search

@@ -1,5 +1,5 @@
/**
* v1.25.11 (#148) — the "Appearance" hub (slug stays `layout`).
* v1.25.11 (#148) — the "Layout" hub (slug stays `layout`).
*
* The hub is a navigable index: it lists each module as a clickable row
* (`<a href="/settings/layout/<id>">` with the localized title + description +
@@ -433,11 +433,11 @@ describe("<SettingsShell>", () => {
// `/notifications` inbox now shares the "Notifications" label.
expect(html).toContain("Notifications");
// v1.17.1 (F-2) — the view/arrangement editors are reached through one hub
// entry (route stays `/settings/layout`). v1.25.3 — the hub is renamed
// "Appearance" (DE "Darstellung") and indexes every module's view surface;
// the route is unchanged.
// entry (route stays `/settings/layout`). v1.42 — the hub is named
// "Layout": it arranges and picks what each module shows and holds no
// theme, so "Appearance" promised a control it does not have.
expect(html).toContain('href="/settings/layout"');
expect(html).toContain(">Appearance</a>");
expect(html).toContain(">Layout</a>");
// v1.25.3 — Channels folded into Notifications, so it is no longer a
// left-side entry; Sources keeps its own.
expect(html).not.toContain('href="/settings/channels"');
@@ -478,10 +478,10 @@ describe("<SettingsShell>", () => {
// inbox now shares the "Benachrichtigungen" label.
expect(html).toContain("Benachrichtigungen");
// v1.17.1 (F-2) — the view editors are reached through one hub entry
// (route stays `/settings/layout`). v1.25.3 — the German nav label reads
// "Darstellung" (Appearance) to match the renamed hub.
// (route stays `/settings/layout`). v1.42 — "Layout" in German too;
// "Darstellung" now names the account page's language-and-units card.
expect(html).toContain('href="/settings/layout"');
expect(html).toContain(">Darstellung</a>");
expect(html).toContain(">Layout</a>");
// v1.25.3 — Channels ("Kanäle") folded into Notifications; Sources keeps
// its own left-side entry.
expect(html).not.toContain('href="/settings/channels"');
@@ -1,7 +1,7 @@
"use client";
/**
* Settings → Appearance → Documents.
* Settings → Layout → Documents.
*
* Reached from the wrench beside the vault's Upload button, the way the
* illness journal's wrench reaches its own page. Two choices, each in its own
+2 -2
View File
@@ -12,7 +12,7 @@ import { DocumentsSection } from "./documents-section";
import { VorsorgeSection } from "./vorsorge-section";
/**
* v1.25.11 (#148) — single source of truth for the "Appearance" (slug
* v1.25.11 (#148) — single source of truth for the "Layout" (slug
* `layout`) hub + its per-module subpages.
*
* "How my app looks and is arranged" was scattered across several unrelated
@@ -21,7 +21,7 @@ import { VorsorgeSection } from "./vorsorge-section";
* back into a HUB → SUBPAGE model: `/settings/layout` lists the modules as
* clickable rows, and each row opens `/settings/layout/<id>`, which renders
* ONLY that module's section (the same existing section component, verbatim)
* with a "← Appearance" back-link.
* with a "← Layout" back-link.
*
* This module is intentionally NOT `"use client"`: the client hub
* (`layout-section.tsx`) AND the server subpage route
@@ -11,7 +11,7 @@ import { useTranslations } from "@/lib/i18n/context";
import type { ModuleKey } from "@/lib/modules/registry";
/**
* Client gate for an Appearance subpage (`/settings/layout/<module>`).
* Client gate for a Layout subpage (`/settings/layout/<module>`).
*
* The subpage is a real URL a person can land on (a bookmark, the hub's own
* link, a link somebody sent) with its module switched off. It answers in
+2 -2
View File
@@ -11,14 +11,14 @@ import { isSurfaceVisible } from "@/lib/modules/surface";
import { LAYOUT_GROUPS } from "./layout-groups";
/**
* v1.25.11 (#148) — the "Appearance" hub (slug stays `layout`).
* v1.25.11 (#148) — the "Layout" hub (slug stays `layout`).
*
* The hub is a navigable index, NOT a stacked composition: it lists each
* module as a clickable row (title + description + chevron) that opens the
* module's own subpage at `/settings/layout/<id>`. Nothing is stacked inline;
* the per-module view/sort surfaces live on their subpages so the hub reads as
* a short, scannable directory. The visible page heading + subtitle
* ("Appearance" / "Personalize how …") are painted by `SettingsShell` from the
* ("Layout" / "Choose what …") are painted by `SettingsShell` from the
* `layout` slug; this body renders only the row list.
*
* Per-module gating fails OPEN (`!== false`): a missing key reads as enabled so