24 lines
1.7 KiB
Markdown
24 lines
1.7 KiB
Markdown
---
|
|||
|
|
created: 2026-07-30T22:19:31.770Z
|
||
|
|
title: PiP robustness — close lightbox fluidly, survive tab changes and buffering
|
||
|
|
area: ui
|
||
|
|
severity: major
|
||
|
|
files:
|
||
|
|
- neode-ui/src (lightbox/video player components — locate exact files)
|
||
|
|
---
|
||
|
|
|
||
|
|
## Problem
|
||
|
|
|
||
|
|
Dorian (2026-07-30), two reports:
|
||
|
|
1. Entering picture-in-picture on a video does not close the lightbox — it should close with a fluid on-brand animation as PiP begins.
|
||
|
|
2. "Picture in picture must survive tab changes or video buffering pauses, doesn't seem to, please fix." — PiP currently dies when switching main tabs and/or when the video pauses to buffer.
|
||
|
|
|
||
|
|
Classified by 02-08 (all pre-existing, NOT phase 2): `src/utils/pip.ts`'s `togglePip()` (introduced f72d4b92 2026-07-23) never touches `MediaLightbox.vue`'s visibility state; no `onDeactivated` teardown exists in Cloud/CloudFolder/MediaLightbox (phase 2 added none there); pre-phase-2 tab switches fully unmounted the view, so PiP tab-survival never existed. The `<video>` has zero pause/waiting/stalled listeners — buffering behavior is pure native. KeepAlive actually helps now: the element persists off-screen, so survival is achievable by not letting anything pause/unmount it.
|
||
|
|
|
||
|
|
## Solution
|
||
|
|
|
||
|
|
- PiP enter → close the lightbox with a house-style fluid animation (handoff feel).
|
||
|
|
- While PiP is active: the owning video element must not be paused/reset/unmounted by tab deactivation — exempt media playback from deactivate teardown when `document.pictureInPictureElement` is the view's video (or reparent the video to a persistent host).
|
||
|
|
- Buffering (`waiting` events / `pause` from buffering) must not close PiP or the session — only explicit user stop should.
|
||
|
|
Tracked as UIFIX-05 (phase 1 gap plan).
|