diff --git a/CLAUDE.md b/CLAUDE.md index 44b624e17..8395aaa2d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -251,7 +251,7 @@ This is an Nx monorepo with the following structure: - **ui/playback** - Player UI (video/audio players) - **ui/pipes** - Angular pipes - **ui/remote-control** - Remote-control UI pieces - - **ui/shared-portals** - Portal-related UI components + - **ui/shared-portals** - Shared portal types (`LiveEpgPanelSummary`) - **ui/styles** - Shared styles/theme - **workspace/{shell,dashboard}** - Workspace shell (layout/navigation) and dashboard diff --git a/docs/architecture/iptvnator-ui-guidelines.md b/docs/architecture/iptvnator-ui-guidelines.md index eec478e0d..d0d3f9f29 100644 --- a/docs/architecture/iptvnator-ui-guidelines.md +++ b/docs/architecture/iptvnator-ui-guidelines.md @@ -28,10 +28,10 @@ Use it when changing existing views or introducing new list-based UI in the work `libs/ui/components/src/lib/channel-list-container/channel-list-item/channel-list-item.component.html` - Channel row styles: `libs/ui/components/src/lib/channel-list-container/channel-list-item/channel-list-item.component.scss` -- Shared EPG pane: - `libs/ui/shared-portals/src/lib/epg-view/epg-view.component.html` -- Shared EPG pane styles: - `libs/ui/shared-portals/src/lib/epg-view/epg-view.component.scss` +- Shared EPG timeline: + `libs/ui/epg/src/lib/epg-timeline/epg-timeline.component.html` +- Shared EPG timeline styles: + `libs/ui/epg/src/lib/epg-timeline/epg-timeline.component.scss` - Shared list selection style: `apps/web/src/nav-list.scss` - Theme tokens: diff --git a/docs/architecture/stalker-epg.md b/docs/architecture/stalker-epg.md index a1b7e8914..80bf997fe 100644 --- a/docs/architecture/stalker-epg.md +++ b/docs/architecture/stalker-epg.md @@ -14,7 +14,7 @@ Stalker now uses two EPG paths with different purposes: - The active channel EPG panel uses `get_epg_info` as a bulk endpoint, fetches a 7-day window once per playlist session, caches programs by channel id, and - renders the selected channel through the shared `app-epg-list` component. + renders the selected channel through the shared `app-epg-timeline` component. - Channel rows no longer send preview EPG requests during initial category load. They stay empty until bulk EPG has been fetched once, then derive their current program and progress bar from the cached bulk map. @@ -39,7 +39,7 @@ date-navigator UI used in the M3U/Xtream flows. │ │ ensureBulkItvEpg(168) │ │ │ selectedItvEpgPrograms() │ │ ▼ │ │ -│ current program preview ├── bulk hit → app-epg-list │ +│ current program preview ├── bulk hit → app-epg-timeline │ │ after first bulk load └── empty/unsupported → short fallback │ └────────────────────────────────────────────────────────────────────────────┘ │ │ @@ -166,7 +166,7 @@ Key mapped fields: ### Active panel data (`get_epg_info` / fallback) → `EpgProgram` -The active panel uses controlled `EpgProgram[]` because `app-epg-list` filters +The active panel uses controlled `EpgProgram[]` because `app-epg-timeline` filters and groups by day. Normalization rules: @@ -183,10 +183,9 @@ Normalization rules: | File | Purpose | | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | | `libs/portal/stalker/data-access/src/lib/stores/features/with-stalker-epg.feature.ts` | bulk cache and fallback handling | -| `libs/portal/stalker/feature/src/lib/stalker-live-stream-layout/stalker-live-stream-layout.component.ts` | active-channel EPG loading and controlled `app-epg-list` wiring | +| `libs/portal/stalker/feature/src/lib/stalker-live-stream-layout/stalker-live-stream-layout.component.ts` | active-channel EPG loading and controlled `app-epg-timeline` wiring | | `libs/portal/stalker/feature/src/lib/stalker-live-stream-layout/stalker-live-stream-layout.component.html` | active panel template | -| `libs/portal/stalker/feature/src/lib/stalker-collection-channels-list/stalker-collection-channels-list.component.ts` | row preview loading | -| `libs/ui/shared-portals/src/lib/epg-list/epg-list.component.ts` | shared controlled EPG list with date navigator | +| `libs/ui/epg/src/lib/epg-timeline/epg-timeline.component.ts` | shared controlled EPG timeline with date navigator | ### Store API @@ -210,7 +209,7 @@ playlists. 1. User activates a live channel 2. The component ensures playback link resolution as before 3. The component calls `ensureBulkItvEpg(168)` on first use for the playlist -4. `selectedItvEpgPrograms()` feeds `app-epg-list` +4. `selectedItvEpgPrograms()` feeds `app-epg-timeline` 5. If the selected channel has no bulk programs, the component falls back to `get_short_epg` @@ -267,5 +266,5 @@ is available. ## Future Enhancements - add cache refresh / invalidation for long-running live sessions -- add Stalker catch-up support to `app-epg-list` once the playback flow exists +- add Stalker catch-up support to `app-epg-timeline` once the playback flow exists - optionally add category-level prefetch timing metrics for bulk EPG diff --git a/tools/coverage/coverage-policy.json b/tools/coverage/coverage-policy.json index d97aa5185..d29c4c0a7 100644 --- a/tools/coverage/coverage-policy.json +++ b/tools/coverage/coverage-policy.json @@ -184,13 +184,6 @@ "validationCommand": "pnpm nx test ui-playback", "e2eTags": ["@playback", "@m3u"] }, - { - "name": "shared-portals", - "root": "libs/ui/shared-portals", - "sourceRoot": "libs/ui/shared-portals/src", - "validationCommand": "pnpm nx test shared-portals", - "e2eTags": ["@xtream", "@stalker"] - }, { "name": "workspace-dashboard-data-access", "root": "libs/workspace/dashboard/data-access", @@ -277,6 +270,11 @@ "name": "remote-control", "root": "libs/ui/remote-control", "reason": "No unit specs yet; validate through remote-control flows or add focused tests when behavior changes directly." + }, + { + "name": "shared-portals", + "root": "libs/ui/shared-portals", + "reason": "Type-only library after the dead epg-view/live-epg-panel components were removed; only the LiveEpgPanelSummary interface remains, so there is no runtime code to unit test." } ] },