Skip to content

chore(cleanup): delete nine dead components, orphaned i18n keys and unused deps#1116

Merged
4gray merged 4 commits into
masterfrom
claude/elastic-neumann-ff252f
Jul 4, 2026
Merged

chore(cleanup): delete nine dead components, orphaned i18n keys and unused deps#1116
4gray merged 4 commits into
masterfrom
claude/elastic-neumann-ff252f

Conversation

@4gray

@4gray 4gray commented Jul 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • Deletes nine verified-dead components (~4,800 LOC) orphaned mostly by the EPG timeline rework (feat(epg): rework live EPG panel into a horizontal timeline #1102), each re-verified to have zero class references and zero selector usages outside their own files.
  • Removes their barrel exports, 18 now-orphaned i18n keys from all 18 locale files, dead CSS selectors targeting the deleted elements, and four unused dependencies from package.json.

Changes

Deleted components

  • EpgListComponent + private child epg-list-item/ (libs/ui/epg)
  • EpgViewComponent and LiveEpgPanelComponent (libs/ui/shared-portals)
  • StalkerCollectionChannelsListComponent (libs/portal/stalker/feature)
  • NavigationComponent (libs/portal/shared/ui — sibling portal-rail-links.component kept)
  • FilterSortMenuComponent (libs/playlist/shared/ui)
  • video-player ToolbarComponent (libs/ui/playback — sibling sidebar/ kept)
  • PortalCollectionShellComponent (libs/portal/shared/ui)
  • LoadingOverlayComponent (libs/portal/xtream/feature)

Alive code extracted from the deleted trees

  • LiveEpgPanelSummary interface → libs/ui/shared-portals/src/lib/live-epg-panel-summary.ts (4 live layouts import it via the barrel, unchanged)
  • EpgProgramActivationEvent interface → libs/ui/epg/src/lib/epg-program-activation-event.ts (used by the timeline and 3 layouts)
  • epg-list.utils.ts trimmed to the three helpers the EPG timeline still uses (getProgramTimeMs, getProgramDateKey, areProgramsSame) and moved to libs/ui/epg/src/lib/epg-program.utils.ts
  • epg-item-description/ moved up out of the deleted epg-list/ folder (still used by the programme dialog, multi-EPG, and channel-list-item)

Cleanup

  • 18 orphaned i18n keys removed from all 18 locales (checked for dynamic key construction before removing)
  • Dead CSS selectors removed from styles.scss, _portal-layout.scss, unified-live-tab.component.scss
  • Unused deps removed: lodash (+ @types/lodash), semver, @ngrx/component-store, @videojs/http-streaming (videojs-quality-selector-hls declares no peer dependency on it; video.js 8 bundles VHS internally)
  • Docs updated: docs/architecture/m3u-playlist-module.md, docs/architecture/iptvnator-ui-guidelines.md, CLAUDE.md

Testing

  • pnpm nx build web — passes
  • pnpm nx build electron-backend — passes
  • pnpm nx affected -t test --uncommitted — 113 tests across 34 projects, all pass
  • pnpm nx affected -t lint --uncommitted — 38/40 pass; the 2 failures (workspace-shell-util, remote-control) are pre-existing issues in files this PR does not touch
  • No new regression tests: pure dead-code removal with no behavior change; deleted specs belonged to the deleted components

🤖 Generated with Claude Code

4gray and others added 2 commits July 2, 2026 00:41
…nused deps

Removes verified-dead components (0 class/selector references outside
their own files): EpgListComponent (+ epg-list-item), EpgViewComponent,
LiveEpgPanelComponent, StalkerCollectionChannelsListComponent,
NavigationComponent, FilterSortMenuComponent, video-player
ToolbarComponent, PortalCollectionShellComponent and
LoadingOverlayComponent, together with their barrel exports.

Alive code extracted from the deleted trees:
- LiveEpgPanelSummary -> libs/ui/shared-portals/src/lib/live-epg-panel-summary.ts
- EpgProgramActivationEvent -> libs/ui/epg/src/lib/epg-program-activation-event.ts
- epg-list.utils.ts trimmed to the three timeline-used helpers and moved
  to libs/ui/epg/src/lib/epg-program.utils.ts
- epg-item-description/ moved up out of the deleted epg-list/ folder

Also removes 18 i18n keys now unused (from all 18 locales), dead CSS
selectors targeting the deleted elements, and unused dependencies:
lodash (+ @types/lodash), semver, @ngrx/component-store and
@videojs/http-streaming (videojs-quality-selector-hls declares no peer
dependency on it; video.js 8 bundles VHS).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The merged note said @ngrx/component-store is listed in package.json but
unused; this branch removes the dependency entirely.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Jul 1, 2026

Copy link
Copy Markdown

Greptile Summary

This PR removes nine verified-dead Angular components (~4,800 LOC) left over from the EPG timeline rework in #1102, along with orphaned i18n keys, dead CSS selectors, and four unused npm dependencies. The alive code embedded in those trees (two interfaces and a utility module) has been cleanly extracted into standalone files.

  • Components deleted: EpgListComponent, EpgViewComponent, LiveEpgPanelComponent, StalkerCollectionChannelsListComponent, NavigationComponent, FilterSortMenuComponent, video-player ToolbarComponent, PortalCollectionShellComponent, and LoadingOverlayComponent — each verified to have zero class references and zero selector usages outside their own files.
  • Alive code extracted: LiveEpgPanelSummary and EpgProgramActivationEvent interfaces promoted to standalone files; utility helpers from epg-list.utils.ts retained in a new epg-program.utils.ts; epg-item-description/ moved up to libs/ui/epg/src/lib/.
  • Dependencies removed: lodash/@types/lodash, semver, @ngrx/component-store, and @videojs/http-streaming from package.json; no remaining imports found for any of them.

Confidence Score: 5/5

Safe to merge — pure dead-code removal with all alive code correctly extracted and re-wired.

Every deleted component was verified to have zero class references and zero selector usages in the surviving codebase. All import paths for the relocated utilities and interfaces were updated across eight consumer files. The barrel exports for both affected libraries are consistent with what the surviving callers import. Removed npm packages have no remaining import sites. The build and 113 unit tests pass per the PR description.

No files require special attention. The extracted utility file (epg-program.utils.ts) and the two new interface files are straightforward and match their consumers exactly.

Important Files Changed

Filename Overview
libs/ui/epg/src/lib/epg-program.utils.ts New utility file extracted from the deleted epg-list.utils.ts; contains getProgramTimeMs, getProgramDateKey, deduplicateProgramsByTimeSlot, and areProgramsSame — all still referenced by surviving consumers.
libs/ui/epg/src/lib/epg-program-activation-event.ts Interface extracted from the deleted EpgListComponent; now has its own file and barrel export, used by the timeline and list-view components.
libs/ui/shared-portals/src/lib/live-epg-panel-summary.ts LiveEpgPanelSummary interface extracted from the deleted LiveEpgPanelComponent; the barrel now only exports this interface, matching all four import sites.
libs/ui/epg/src/index.ts Barrel updated: removed epg-list and epg-list/epg-item-description exports; added epg-item-description (from moved location) and epg-program-activation-event exports.
libs/ui/shared-portals/src/index.ts Barrel now exports only the LiveEpgPanelSummary interface; epg-view and live-epg-panel component exports removed along with their deleted components.
package.json Removes four unused direct dependencies: lodash/types, semver, @ngrx/component-store, and @videojs/http-streaming; no remaining imports found for any of them in the codebase.
tools/coverage/coverage-policy.json Moves shared-portals from the covered section to the excluded section with an accurate reason (now a type-only library with no runtime code to test).
apps/web/src/assets/i18n/en.json 18 orphaned i18n keys removed; verified no remaining references in templates or TypeScript files across the repo.
libs/ui/styles/_portal-layout.scss Dead CSS selectors targeting app-live-epg-panel and app-epg-view removed; surviving selectors for app-epg-timeline and app-epg-list-view retained.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph deleted["Deleted Components (dead code)"]
        D1[EpgListComponent]
        D2[EpgViewComponent]
        D3[LiveEpgPanelComponent]
        D4[StalkerCollectionChannelsListComponent]
        D5[NavigationComponent]
        D6[FilterSortMenuComponent]
        D7[ToolbarComponent]
        D8[PortalCollectionShellComponent]
        D9[LoadingOverlayComponent]
    end

    subgraph extracted["Extracted — alive code"]
        E1[epg-program-activation-event.ts]
        E2[epg-program.utils.ts]
        E3[live-epg-panel-summary.ts]
        E4[epg-item-description/]
    end

    subgraph survivors["Surviving consumers"]
        S1[epg-timeline.component.ts]
        S2[epg-list-view.component.ts]
        S3[epg-list-view.utils.ts]
        S4[multi-epg-container.component.ts]
        S5[4 layout components]
    end

    D1 -->|extracted| E1
    D1 -->|extracted| E2
    D1 -->|extracted| E4
    D3 -->|extracted| E3

    E1 --> S1
    E1 --> S2
    E2 --> S1
    E2 --> S3
    E4 --> S2
    E4 --> S4
    E3 --> S5
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    subgraph deleted["Deleted Components (dead code)"]
        D1[EpgListComponent]
        D2[EpgViewComponent]
        D3[LiveEpgPanelComponent]
        D4[StalkerCollectionChannelsListComponent]
        D5[NavigationComponent]
        D6[FilterSortMenuComponent]
        D7[ToolbarComponent]
        D8[PortalCollectionShellComponent]
        D9[LoadingOverlayComponent]
    end

    subgraph extracted["Extracted — alive code"]
        E1[epg-program-activation-event.ts]
        E2[epg-program.utils.ts]
        E3[live-epg-panel-summary.ts]
        E4[epg-item-description/]
    end

    subgraph survivors["Surviving consumers"]
        S1[epg-timeline.component.ts]
        S2[epg-list-view.component.ts]
        S3[epg-list-view.utils.ts]
        S4[multi-epg-container.component.ts]
        S5[4 layout components]
    end

    D1 -->|extracted| E1
    D1 -->|extracted| E2
    D1 -->|extracted| E4
    D3 -->|extracted| E3

    E1 --> S1
    E1 --> S2
    E2 --> S1
    E2 --> S3
    E4 --> S2
    E4 --> S4
    E3 --> S5
Loading

Reviews (4): Last reviewed commit: "Merge origin/master: wire new EPG list v..." | Re-trigger Greptile

The Tier A gate failed in CI because deleting the dead epg-view and
live-epg-panel components removed the only specs in libs/ui/shared-portals.
The lib now contains a single type-only interface (LiveEpgPanelSummary),
so there is no runtime code to unit test; reclassify it to Tier C with a
documented reason, matching the gate's own guidance.

Also update remaining doc references to the deleted components in
docs/architecture/stalker-epg.md, iptvnator-ui-guidelines.md and
CLAUDE.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@4gray

4gray commented Jul 1, 2026

Copy link
Copy Markdown
Owner Author

@greptileai

Master added EpgListViewComponent (#1115) written against the old
epg-list/ paths this branch deletes, plus the lint/coverage CI
hardening (#1117). Resolution:

- ui/epg barrel: keep relocated epg-item-description and
  epg-program-activation-event exports, add the three new
  epg-list-view exports, drop the deleted epg-list.component export.
- epg-list-view imports updated to ../epg-item-description,
  ../epg-program-activation-event and ../epg-program.utils.
- Restore deduplicateProgramsByTimeSlot (+ private helpers) in
  epg-program.utils.ts — the new list view makes it live again.
- _portal-layout.scss / unified-live-tab.component.scss: panel
  selectors cover app-epg-timeline and app-epg-list-view only.
- Drop the deleted epg-list.component.spec.ts entry from the
  max-lines baseline.
- m3u-playlist-module.md: add EpgListViewComponent to the EPG
  components table.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@4gray

4gray commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@greptileai

1 similar comment
@4gray

4gray commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@greptileai

@4gray

4gray commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 0b4fb83d68

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@4gray 4gray merged commit 1c710d6 into master Jul 4, 2026
17 checks passed
4gray added a commit that referenced this pull request Jul 4, 2026
Resolves conflicts against the dead-component cleanup (#1116), the
max-lines lint baseline (#1117) and the vertical EPG list view (#1115):

- libs/ui/shared-portals/src/index.ts: keep master's barrel (EpgView and
  LiveEpgPanel components were deleted, LiveEpgPanelSummary extracted)
  plus the new actor-view export from this branch
- settings-form.utils.ts / settings.component.spec.ts: keep both the new
  epgViewMode control from master and the tmdb settings group

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant