pp-planer/resources/js
Thorsten Bus d75d748417 feat: T19 - Song Preview Modal + PDF Download
- SongPreviewModal.vue: Teleport modal with song text in arrangement order
  - Group headers with group.color background
  - Side-by-side translations when use_translation=true
  - Copyright footer from song metadata
  - Close button + click-outside/Escape dismiss
  - PDF download button

- SongPdfController.php: PDF generation endpoint
  - GET /songs/{song}/arrangements/{arrangement}/pdf
  - Uses barryvdh/laravel-dompdf with DejaVu Sans font
  - Old-school CSS only (NO Tailwind)
  - Handles German umlauts correctly

- resources/views/pdf/song.blade.php: PDF template
  - Title header, groups with colored headers, slide text, copyright footer
  - Includes translation text when present
  - Simple CSS: font-family, color, background-color, margin, padding

- Tests: 9 new (25 assertions)
  - PDF content type verification
  - Filename includes song title
  - Groups in correct arrangement order
  - Translation text included when present
  - Copyright footer present
  - German umlauts render correctly
  - Auth guard
  - 404 when arrangement doesn't belong to song
  - Empty arrangement handling

All tests passing: 133/133 (728 assertions)
Build: ✓ Vite production build successful
Fix: Removed duplicate content from SongPdfTest.php (parse error)
2026-03-01 20:15:02 +01:00
..
Components feat: T19 - Song Preview Modal + PDF Download 2026-03-01 20:15:02 +01:00
Composables feat: Wave 1 Foundation - Database, OAuth, Sync, Files, Layout, Email (T2-T7) 2026-03-01 19:39:26 +01:00
Layouts feat: Wave 2 - Service list, Song CRUD, Slide upload, Arrangements, Song matching, Translation 2026-03-01 19:55:37 +01:00
Pages feat: Wave 3 (partial) - Service Edit page + 4 blocks (T14-T18) 2026-03-01 20:09:47 +01:00
app.js feat: Laravel 12 scaffolding with Breeze Vue + Docker setup 2026-03-01 19:25:32 +01:00
bootstrap.js feat: Laravel 12 scaffolding with Breeze Vue + Docker setup 2026-03-01 19:25:32 +01:00