feat(geschichte-detail): render article on a reading-sheet surface card
All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 3m59s
CI / OCR Service Tests (pull_request) Successful in 23s
CI / Backend Unit Tests (pull_request) Successful in 4m12s
CI / fail2ban Regex (pull_request) Successful in 43s
CI / Semgrep Security Scan (pull_request) Successful in 23s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m11s
All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 3m59s
CI / OCR Service Tests (pull_request) Successful in 23s
CI / Backend Unit Tests (pull_request) Successful in 4m12s
CI / fail2ban Regex (pull_request) Successful in 43s
CI / Semgrep Security Scan (pull_request) Successful in 23s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m11s
The R-2 mockup shows the article on a distinct light panel, but the impl-ref table only specified the centered container, so the page rendered flat on the canvas. Wrap the <article> in the standard card pattern (BackButton stays outside on the canvas) and record the sheet in both spec impl-ref tables so mockup and impl-ref agree. Closes #797 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -640,7 +640,8 @@
|
|||||||
<thead><tr><th>Element</th><th>Wert</th><th>Hinweise</th></tr></thead>
|
<thead><tr><th>Element</th><th>Wert</th><th>Hinweise</th></tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="grp"><td colspan="3">Artikel-Container</td></tr>
|
<tr class="grp"><td colspan="3">Artikel-Container</td></tr>
|
||||||
<tr><td>Article container</td><td>max-w-3xl mx-auto px-4 py-10</td><td>zentriert, volle Breite auf Mobile</td></tr>
|
<tr><td>Article container</td><td>max-w-3xl mx-auto px-4 py-8</td><td>zentriert, volle Breite auf Mobile</td></tr>
|
||||||
|
<tr><td>Article sheet</td><td>rounded-sm border border-line bg-surface shadow-sm px-5 py-6 sm:px-10 sm:py-10</td><td>Lesebogen-Panel auf dem Canvas (siehe Mockup); BackButton bleibt außerhalb</td></tr>
|
||||||
<tr><td>Story title</td><td>font-family:var(--font-display);font-size:clamp(22px,4vw,32px);color:var(--navy)</td><td>Fraunces, nicht fett</td></tr>
|
<tr><td>Story title</td><td>font-family:var(--font-display);font-size:clamp(22px,4vw,32px);color:var(--navy)</td><td>Fraunces, nicht fett</td></tr>
|
||||||
<tr><td>Back button</td><td><BackButton /> aus $lib/components/BackButton.svelte</td><td>history.back(); nicht <a href></td></tr>
|
<tr><td>Back button</td><td><BackButton /> aus $lib/components/BackButton.svelte</td><td>history.back(); nicht <a href></td></tr>
|
||||||
<tr class="grp"><td colspan="3">Metazeile</td></tr>
|
<tr class="grp"><td colspan="3">Metazeile</td></tr>
|
||||||
|
|||||||
@@ -630,6 +630,7 @@
|
|||||||
<tr class="grp"><td colspan="3">Seitenstruktur</td></tr>
|
<tr class="grp"><td colspan="3">Seitenstruktur</td></tr>
|
||||||
<tr><td>Bedingte Logik</td><td>{#if geschichte.type === 'JOURNEY'} JourneyReader {:else} StoryReader {/if}</td><td>in +page.svelte von /geschichten/[id]</td></tr>
|
<tr><td>Bedingte Logik</td><td>{#if geschichte.type === 'JOURNEY'} JourneyReader {:else} StoryReader {/if}</td><td>in +page.svelte von /geschichten/[id]</td></tr>
|
||||||
<tr><td>Artikel-Container</td><td>max-w-3xl mx-auto px-4 py-8</td><td>gleich wie StoryReader</td></tr>
|
<tr><td>Artikel-Container</td><td>max-w-3xl mx-auto px-4 py-8</td><td>gleich wie StoryReader</td></tr>
|
||||||
|
<tr><td>Artikel-Sheet</td><td>rounded-sm border border-line bg-surface shadow-sm px-5 py-6 sm:px-10 sm:py-10</td><td>Lesebogen-Panel auf dem Canvas, gleich wie Story (R-2); BackButton bleibt außerhalb</td></tr>
|
||||||
<tr><td>Journey-Badge</td><td>inline-flex px-2 py-px rounded-sm text-[10px] font-bold uppercase tracking-widest bg-orange-50 text-orange-700 border border-orange-200 mb-2</td><td>über dem Titel; nicht für STORY</td></tr>
|
<tr><td>Journey-Badge</td><td>inline-flex px-2 py-px rounded-sm text-[10px] font-bold uppercase tracking-widest bg-orange-50 text-orange-700 border border-orange-200 mb-2</td><td>über dem Titel; nicht für STORY</td></tr>
|
||||||
<tr><td>Titel</td><td>font-serif text-3xl text-ink leading-tight mb-4</td><td>gleich wie Story</td></tr>
|
<tr><td>Titel</td><td>font-serif text-3xl text-ink leading-tight mb-4</td><td>gleich wie Story</td></tr>
|
||||||
<tr><td>Metabar</td><td>flex items-center gap-3 pb-4 border-b border-subtle mb-4</td><td>gleich wie Story</td></tr>
|
<tr><td>Metabar</td><td>flex items-center gap-3 pb-4 border-b border-subtle mb-4</td><td>gleich wie Story</td></tr>
|
||||||
|
|||||||
@@ -53,7 +53,10 @@ async function handleDelete() {
|
|||||||
<BackButton />
|
<BackButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<article aria-labelledby="geschichte-title">
|
<article
|
||||||
|
aria-labelledby="geschichte-title"
|
||||||
|
class="rounded-sm border border-line bg-surface px-5 py-6 shadow-sm sm:px-10 sm:py-10"
|
||||||
|
>
|
||||||
<header class="mb-6">
|
<header class="mb-6">
|
||||||
{#if isJourney}
|
{#if isJourney}
|
||||||
<span
|
<span
|
||||||
|
|||||||
@@ -70,6 +70,19 @@ describe('geschichten/[id] page', () => {
|
|||||||
.toBeVisible();
|
.toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('renders the article on a reading-sheet surface card (#797)', async () => {
|
||||||
|
render(GeschichtePage, {
|
||||||
|
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||||
|
props: { data: baseData() }
|
||||||
|
});
|
||||||
|
|
||||||
|
const article = document.querySelector('article');
|
||||||
|
expect(article).not.toBeNull();
|
||||||
|
for (const cls of ['bg-surface', 'border-line', 'rounded-sm', 'shadow-sm']) {
|
||||||
|
expect(article!.className).toContain(cls);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it('renders the author full name from firstName + lastName', async () => {
|
it('renders the author full name from firstName + lastName', async () => {
|
||||||
render(GeschichtePage, {
|
render(GeschichtePage, {
|
||||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||||
|
|||||||
Reference in New Issue
Block a user