* feat(artplayer): add feature-flagged shared controls
Co-authored-by: Lars Emig <lars.emig@pickware.de>
* fix(artplayer): align native type and signal inputs
---------
Co-authored-by: Lars Emig <lars.emig@pickware.de>
* feat(videojs): add feature-flagged shared controls
Rebuild the Video.js shared-controls integration on the current player lifecycle with Tech rebinds, source-scoped tracks, reset ordering, volume preservation, diagnostics gating, and default-off compatibility.
Credits and supersedes the stacked implementation proposed in #1153.
Co-authored-by: Lars Emig <lars.emig@pickware.de>
* fix(videojs): harden MPEG-TS reset lifecycle
---------
Co-authored-by: Lars Emig <lars.emig@pickware.de>
* feat(player-controls): shared engine-agnostic controls layer (flag off)
Introduce a shared, engine-agnostic player-controls layer in libs/ui/playback
as pure additive library code with no consumers yet.
- Contract (player-controls.model.ts): PlayerControlsCapabilities,
PlayerControlsState, and PlayerControlsCommands make up the
PlayerController interface every engine adapter implements.
- Single presentation component (app-player-controls): one controls UI
binding purely to a PlayerController, with focused helpers for
visibility auto-hide, volume, fullscreen (built-in DOM path), menus,
keyboard shortcuts, seek/volume feedback, and the controls surface.
- Web-video adapter (web-video-controls.adapter.ts + host directive):
drives the contract from an HTMLVideoElement, including optional
HLS.js quality/audio-track integration and series episode navigation.
- Feature flag WEB_PLAYER_SHARED_CONTROLS (web-player-controls.flag.ts)
defaults to OFF; no player component consumes the new layer yet, so
runtime behavior is unchanged.
- docs/architecture/player-controls-contract.md documents the target
architecture (later PRs add the embedded-MPV adapter, immersive
overlay, and host-supplied fullscreen delegate).
Review-driven hardening: the web-video adapter now holds the host
series-navigation signal reactively (updates after setContext are
reflected); the shared controls template is fully localized via
ngx-translate (reusing the EMBEDDED_MPV.PLAYER.* keys); single click on
the viewport toggles play/pause deferred so a double-click still
fullscreens; keyboard shortcuts are shadow-DOM-safe (composedPath) and
guard against duplicate-instance double-execution (defaultPrevented);
and hidden controls now also disable shortcuts.
Test coverage extended per Codecov patch report.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(player-controls): harden shared controls foundation
* fix(player-controls): restore detached adapter state
* fix(player-controls): harden keyboard and adapter state
* fix(player-controls): refresh readiness and hide timers
* fix(player-controls): keep controls root inside surface
* fix(player-controls): hide seek controls for live streams
* fix(player-controls): harden multi-engine control state
* fix(player-controls): respect runtime interaction availability
* fix(player-controls): gate loading toggles and localize mute
* fix(player-controls): harden surface and error states
* fix(player-controls): preserve volume and cursor state
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: 4gray <serega05@gmail.com>
The wiki export to an external Obsidian vault is unused. Remove the
wiki:export/test:wiki-export npm scripts, the external-wiki-sync
architecture doc, and the IPTVNATOR_WIKI_VAULT workflow instructions
from CLAUDE.md and AGENTS.md.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Rewrite architecture sections against the current filesystem: post-reorg
lib paths (libs/portal/*, libs/playlist/*, libs/workspace/*), /workspace
route tree, canonical libs/shared/database schema (10 tables,
better-sqlite3), renamed channel-list views, EPG timeline ribbon,
18 i18n locales, import flows in libs/playlist/import/feature, and drop
the unused @ngrx/component-store recommendation.
Add a rule to Documentation After Changes (mirrored in AGENTS.md):
agents must keep CLAUDE.md/AGENTS.md up to date when changes touch
anything they describe, and fix stale claims they notice in passing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>