mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-14 21:26:15 -08:00
Three components mounted on every launch imported Material eagerly: the startup status (progress spinner), the update notification panel (buttons, icons, dialog) and the EPG import progress panel (buttons, icons, tooltip, progress bar, dialog). The two panels have nothing to show until an import starts or an update is available, so each is now an eager host with a `@defer (when visible)` block around the former component: the EPG panel view and the update notification card load with their first appearance, and their Material dependencies and the panel code with them. Specs cover the deferred render, the dismiss path and the card reporting download results back to the panel. The startup status shows its spinner immediately, so deferring it would only add a chunk round trip and a placeholder swap on the first screen. It is now a static copy of the indeterminate `<mat-spinner diameter="32">`: the same clipped half circles, stroke, durations and keyframes, 1.25x slower under reduced motion, as plain markup. The static markup also sets no attributes after insertion, where the component bound a dozen. renderer.initialBytes: 1,534,606 -> 1,463,083 bytes (-71,523) on a local production build; tooltip, progress bar, progress spinner, icon and the EPG panel code left the initial bundle. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>