From 9ad18f92d9f23027a1b0273c5b0b9db2c989c05a Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 15 Jun 2026 14:52:28 +0200 Subject: [PATCH] feat(timeline): make a grouped cluster one contained card Wraps each cluster in a bordered, rounded surface card (keeping the colour rail) so the header and its letters read as a single unit. Refs #827 --- frontend/src/lib/timeline/LetterBucket.svelte | 76 ++++++++++--------- .../lib/timeline/LetterBucket.svelte.spec.ts | 17 +++++ 2 files changed, 58 insertions(+), 35 deletions(-) diff --git a/frontend/src/lib/timeline/LetterBucket.svelte b/frontend/src/lib/timeline/LetterBucket.svelte index 986e4790..12fb85a9 100644 --- a/frontend/src/lib/timeline/LetterBucket.svelte +++ b/frontend/src/lib/timeline/LetterBucket.svelte @@ -57,16 +57,20 @@ let revealed = $state(bucket.kind !== 'fallback');
{#if !nested} -
+
{#if mode === 'thema' && bucket.kind === 'tag'} {:else if mode === 'event' && bucket.kind === 'event'} @@ -81,42 +85,44 @@ let revealed = $state(bucket.kind !== 'fallback');
{/if} - {#if !revealed} - - {:else} -
    - {#each visible as letter (entryKey(letter))} -
  • - -
  • - {/each} -
- {#if hiddenCount > 0} +
+ {#if !revealed} + {:else} +
    + {#each visible as letter (entryKey(letter))} +
  • + +
  • + {/each} +
+ {#if hiddenCount > 0} + + {/if} {/if} - {/if} +
diff --git a/frontend/src/lib/timeline/LetterBucket.svelte.spec.ts b/frontend/src/lib/timeline/LetterBucket.svelte.spec.ts index 79b1d63a..854460f5 100644 --- a/frontend/src/lib/timeline/LetterBucket.svelte.spec.ts +++ b/frontend/src/lib/timeline/LetterBucket.svelte.spec.ts @@ -161,3 +161,20 @@ describe('LetterBucket — leftover drawer (#827 redesign)', () => { expect(document.querySelector('[data-testid="bucket-show-more"]')).not.toBeNull(); }); }); + +describe('LetterBucket — card chrome (#827 redesign)', () => { + it('renders the cluster as a contained card (bordered, rounded, surface)', () => { + const bucket: Bucket = { + key: 'tag:t1', + kind: 'tag', + title: 'Krieg', + color: 'sienna', + letters: [makeEntry({ documentId: 'a' })] + }; + render(LetterBucket, { bucket, mode: 'thema', year: 1916 }); + const card = document.querySelector('[data-testid="letter-bucket"]') as HTMLElement; + expect(card.className).toMatch(/\brounded\b|rounded-/); + expect(card.className).toContain('border'); + expect(card.className).toContain('bg-surface'); + }); +});