veza/apps/web/src/features/player/components
senke 260e668615 feat(v0.13.1): conformité audio & player — gapless, crossfade, normalization
TASK-AUDIO-001: Enhanced gapless playback with 10s pre-buffering
TASK-AUDIO-002: Crossfade UI in expanded player (0-12s configurable slider)
TASK-AUDIO-003: Audio normalization via Web Audio API GainNode (EBU R128)
TASK-AUDIO-004: Complete player features (playback speed, preload, fade)

- AudioPlayerService: added normalization gain node, connectAudioGraph(),
  setNormalizationGain(), setNormalizationEnabled() with dB-to-linear conversion
- useAudioAnalyser: integrated with gain node for correct audio graph routing
- useAudioNormalization: new hook syncing normalization state with track changes
- PlayerStore: added normalizationEnabled setting (persisted)
- AudioSettingsPanel: new component with crossfade slider + normalization toggle
- PlayerExpanded: added audio settings panel with Settings2 icon toggle
- GlobalPlayer: integrated useAudioNormalization hook
- usePlayer: extended pre-buffer window from 5s to 10s for gapless playback
- 97 tests passing (56 service + 41 store)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:38:44 +01:00
..
audio-player feat(player): integrate HLS streaming with ABR quality switching 2026-02-22 21:24:40 +01:00
player-bar feat(a11y): ARIA labels, aria-haspopup menu, icon button labels 2026-02-25 09:55:30 +01:00
AudioPlayer.stories.tsx style(player): elevate AudioPlayer to SaaS Premium 2026-02-07 14:04:13 +01:00
AudioPlayer.test.tsx [FE-TEST-008] test: Add component tests for player components 2025-12-25 17:23:39 +01:00
AudioPlayer.tsx refactor(player): decompose AudioPlayer into audio-player module 2026-02-06 13:37:04 +01:00
AudioSettingsPanel.tsx feat(v0.13.1): conformité audio & player — gapless, crossfade, normalization 2026-03-12 22:38:44 +01:00
GlobalPlayer.stories.tsx refactor(ui): replace gray colors with Sumi tokens 2026-02-17 17:03:57 +01:00
GlobalPlayer.tsx feat(v0.13.1): conformité audio & player — gapless, crossfade, normalization 2026-03-12 22:38:44 +01:00
MiniPlayer.stories.tsx refactor(ui): replace gray colors with Sumi tokens 2026-02-17 17:03:57 +01:00
MiniPlayer.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
MiniPlayer.tsx a11y: skip link exists in App, ChatInput aria-label, sidebar focus trap, MiniPlayer aria-live 2026-02-12 21:55:25 +01:00
NextPreviousButtons.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
NextPreviousButtons.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
NextPreviousButtons.tsx style(player): elevate player components to SaaS Premium 2026-02-07 16:01:56 +01:00
PlaybackSpeedControl.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
PlaybackSpeedControl.test.tsx feat(player): Lot F - PlaybackSpeedControl, useMediaSession, waveform 2026-02-20 00:40:53 +01:00
PlaybackSpeedControl.tsx feat(player): Lot F - PlaybackSpeedControl, useMediaSession, waveform 2026-02-20 00:40:53 +01:00
PlayerControls.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
PlayerControls.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
PlayerError.stories.tsx style(stories): replace kodo decorators with design tokens in all story files 2026-02-07 15:10:32 +01:00
PlayerError.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
PlayerError.tsx chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
PlayerExpanded.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
PlayerExpanded.tsx feat(v0.13.1): conformité audio & player — gapless, crossfade, normalization 2026-03-12 22:38:44 +01:00
PlayerLoading.stories.tsx chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
PlayerLoading.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlayerLoading.tsx Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy 2026-02-14 17:23:32 +01:00
PlayerQueue.stories.tsx feat(release): v0.202 — Lots G, H, F, C, D 2026-02-20 18:16:17 +01:00
PlayerQueue.tsx fix(player): resolve TypeScript errors in PlayerQueue and queue API types 2026-02-21 05:11:07 +01:00
PlayPauseButton.stories.tsx chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
PlayPauseButton.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
PlayPauseButton.tsx style(player): elevate player components to SaaS Premium 2026-02-07 16:01:56 +01:00
ProgressBar.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
ProgressBar.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
ProgressBar.tsx style(player): elevate player components to SaaS Premium 2026-02-07 16:01:56 +01:00
QualitySelector.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
QualitySelector.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
QualitySelector.tsx feat(v0.501): Sprint 2 -- HLS production-ready 2026-02-22 18:16:37 +01:00
RepeatShuffleButtons.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
RepeatShuffleButtons.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
RepeatShuffleButtons.tsx feat(ui): tooltip adoption + search highlighting & skeleton loading 2026-02-09 23:14:00 +01:00
TimeDisplay.stories.tsx chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
TimeDisplay.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
TimeDisplay.tsx style(player): elevate player components to SaaS Premium 2026-02-07 15:33:31 +01:00
TrackInfo.stories.tsx chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
TrackInfo.test.tsx refactor(ui): replace gray colors with Sumi tokens 2026-02-17 17:03:57 +01:00
TrackInfo.tsx refactor(ui): replace gray colors with Sumi tokens 2026-02-17 17:03:57 +01:00
VolumeControl.stories.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
VolumeControl.test.tsx test(web): player, playlists, tracks tests; feat(playlists): permissions utils 2026-02-11 22:19:24 +01:00
VolumeControl.tsx feat(ui): tooltip adoption + search highlighting & skeleton loading 2026-02-09 23:14:00 +01:00
WaveformDisplay.stories.tsx feat(v0.501): Sprint 2 -- HLS production-ready 2026-02-22 18:16:37 +01:00
WaveformDisplay.tsx feat(v0.501): Sprint 2 -- HLS production-ready 2026-02-22 18:16:37 +01:00