Marcel
bc2dd3a98a
fix(notification): add role=link and touch target to view-all button
...
CI / Backend Unit Tests (push) Successful in 4m15s
CI / fail2ban Regex (push) Successful in 39s
CI / Compose Bucket Idempotency (push) Failing after 11s
CI / OCR Service Tests (pull_request) Successful in 17s
CI / Backend Unit Tests (pull_request) Successful in 4m17s
CI / Unit & Component Tests (push) Failing after 1m48s
CI / OCR Service Tests (push) Successful in 17s
CI / Unit & Component Tests (pull_request) Failing after 2m3s
CI / fail2ban Regex (pull_request) Successful in 40s
CI / Compose Bucket Idempotency (pull_request) Failing after 11s
- role="link" restores screen reader link semantics (Leonie blocker)
- min-h-[44px] px-1 meets WCAG 2.2 §2.5.8 and our 44×48px target size
- Comment in handleViewAll explains close-before-navigate ordering
- Tests updated to getByRole('link') + new call-order assertion
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 17:43:11 +02:00
Marcel
8ccc9aba1a
fix(notification): replace view-all anchor with button to prevent iframe navigation
...
SvelteKit's capture-phase link interceptor fires before the component's
onclick handler, so e.preventDefault() was structurally too late to stop
iframe navigation in vitest-browser. Replacing the <a href> with a
<button type="button"> removes the href entirely — the interceptor never
fires — and the existing goto() mock in tests is sufficient.
Also splits the single view-all test into two focused it() blocks and
clears mocks in afterEach to prevent cross-test mock leakage.
Fixes #551
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 17:43:11 +02:00
Marcel
37026bbbb8
refactor(notification): extract handleViewAll named function
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 11:35:40 +02:00
Marcel
53ecfee25e
test(notification): assert href is preserved on view-all link
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 11:35:40 +02:00
Marcel
ed91c9bcf6
fix(notification): prevent iframe navigation — use goto instead of href follow
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 11:35:40 +02:00
Marcel
661e8582a2
test(notification): add goto mock and tighten selector in NotificationDropdown spec
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 11:35:40 +02:00
Marcel
57f4d12808
test(notification): expand NotificationDropdown coverage
...
Adds MENTION verb text, REPLY verb/glyph, multiple notifications
rendering.
3 new tests covering ~5 branches.
Refs #496 .
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-11 21:50:28 +02:00
Marcel
2bce127065
test(notification): cover NotificationDropdown branches
...
Dialog with bell label, empty state vs populated list, mark-all-read
visibility branch, REPLY vs MENTION text, unread-dot rendering, all
three callback wirings (onMarkRead, onMarkAllRead, onClose).
10 tests covering the notification dropdown surface.
Refs #496 .
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-11 21:50:28 +02:00
Marcel
a1b89670c0
docs(legibility): add 18 per-domain README.md files (DOC-6)
...
Backend (9): document, person, tag, user, geschichte, notification,
ocr, audit, dashboard.
Frontend (8): document, person, tag, user, geschichte, notification,
ocr, shared.
OCR service (1): ocr-service/README.md.
Each README covers: what the domain owns, explicit non-ownership,
public surface (verified by grep against the codebase), internal
layout, and cross-domain dependencies.
Closes #400
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-06 07:36:38 +02:00
Marcel
d6db7a07bd
refactor: move shared utilities to lib/shared/ sub-packages
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-05 14:35:15 +02:00
Marcel
051d2f246e
refactor: move notification domain to lib/notification/
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-05 14:22:02 +02:00