Repository navigation
feat(player): unify timeline controls and video scrubbing - #64
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
3 of 4 tasks
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6173878760 was released at 5fa335a |
Leftium
marked this pull request as ready for review
October 14, 2026 17:18
Leftium
marked this pull request as draft
October 14, 2026 18:28
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6175421133 was released at 7d2d48e |
Leftium
marked this pull request as ready for review
October 14, 2026 18:36
Leftium
marked this pull request as draft
October 14, 2026 18:38
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6175618010 was released at ee9d2f2 |
Leftium
marked this pull request as ready for review
October 14, 2026 18:44
Leftium
marked this pull request as draft
October 14, 2026 18:47
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6175788048 was released at 977e153 |
Leftium
marked this pull request as ready for review
October 14, 2026 18:58
Leftium
marked this pull request as draft
October 14, 2026 19:07
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6177404480 was released at bd29f4c |
Leftium
marked this pull request as ready for review
October 14, 2026 20:14
Leftium
marked this pull request as draft
October 14, 2026 20:15
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6177454380 was released at a2e76fe |
Leftium
marked this pull request as ready for review
October 14, 2026 20:15
Leftium
marked this pull request as draft
October 14, 2026 20:16
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6177477946 was released at d44ab9a |
Leftium
marked this pull request as ready for review
October 14, 2026 20:16
Leftium
marked this pull request as draft
October 14, 2026 20:28
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6177754872 was released at f58e678 |
Leftium
marked this pull request as ready for review
October 14, 2026 20:31
Leftium
marked this pull request as draft
October 14, 2026 20:33
Owner
Author
|
This PR was claimed |
Owner
Author
|
This PR's claim 6177849457 was released at 83efa38 |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #62, PR 2: video-surface scrubbing and editor timeline consolidation. Keep #62 open for hold-to-step and Clip settings; watch reveal/docking remains in #15.
This PR follows the Continuum protocol at 9aea333.
Horizontal video dragging jumps to the cursor's time in editor and watch modes without changing A/B or the share URL. The shared recognizer owns direction locking after 8 CSS pixels, capture, taps, cancellation, and synthetic-click suppression. Static
touch-action: pan-y pinch-zoompreserves vertical scrolling and pinch; capture begins only after horizontal intent. The competing watch-only tap recognizer is removed. Media, engine, and iframe remain intact.Editor dragging uses the full-width timeline axis. The watch timeline now spans the visible player width, including portrait-video side margins, at the visible canvas bottom edge. Watch dragging uses that track between clip tails and retains its axis when Theater hides the chrome. Black margins remain tappable; seeks clamp to VIDEO/A:B scope.
The editor combines progress and A/B handles on one full-width 20px track, flush with the video and retaining the 16px gap below. The full 36px timeline space is reserved before duration settles, preventing a loading shift. Both A and B point up, with every vertex on a track edge. Their tips retain exact times; unconstrained triangles are equilateral, with bases shifting at source edges and away from each other. Crossing preserves role swapping, physical focus, and capture. The abrupt source-edge fallback is removed. Timeline edits retain at least 1/30 second between endpoints (or the full source if shorter), preventing collapsed-range errors and layout shifts.
Solid blue A and purple B triangles have white labels. Matching upward markers share the same colors in the Clip range summary and dialog. Invisible 44px targets make handles easier to grab beside the splitter; overlapping targets acquire the nearest tip, with A winning ties. Targets remain inside the source width and outrank splitter hit padding. The entire timeline is above the splitter; coordinate-based forwarding also protects handle grabs and navigation clicks covered by splitter padding. Splitter padding extends only toward settings in both layouts, allowing video-edge playback taps and scrubbing while resizing remains accessible from the other side. Other range sliders retain circles and their existing policies.
Editor and watch share red played progress outside A:B, deep orange (#f07800) played progress inside A:B, pale yellow (#ffe66d) unplayed selection, and gray remaining source. The editor's plain red/orange playhead line ends at the timeline top. White edges, shadows, and transport arrow are removed; watch has no playhead line.
Edit mode starts in VIDEO playback scope, allowing playback outside the selected range. One Play button uses the "Clip Only" binary toggle beside Sound and Loop. Its A:B text icon is crossed out when Clip Only is off and remains visible on compact layouts; the label appears alongside other control labels. Switching to A:B enters the selected loop when the playhead is outside it; VIDEO preserves the current position. Loop/Once applies to the chosen scope. Watch retains its existing automatic initial scope choice. Selection and share URL do not change when scope switches.
Video scrubbing updates
currentTimeandtransportTimetogether to preview the release destination. Only endpoint inspection freezes transport. The scrub session privately saves its original position; cancellation restores position/playback. Provider seeks are coalesced per animation frame. Release restores playback when scope permits. In A:B scope, editor inspection outside the selection stays paused and Play re-enters A; watch retains VIDEO/A:B and Loop/Once semantics.Verification
Physical iPhone Safari/Android touch, toolbar collapse, orientation, and real YouTube seeking latency remain manual. Automated WebKit does not establish those device results or decoded-frame accuracy. The full live-YouTube advisory suite was not run.
Test lifecycle
Retired PR #63's separate source-navigation and broad line-layout journeys; useful signed URL, alignment, and provider identity assertions are consolidated into scrub cases. Four cases x Chromium/WebKit remain eight executions, excluded from routine gates and probationary through PR 3 in #62. The new cheap minimum-span Node case remains permanent for invalid clip/playback regressions at source bounds. The five cheap gesture lifecycle Node cases remain permanent for accidental playback and cancellation regressions. Existing watch assertions now reflect full-width geometry and yellow/orange colors; no routine cases were added.
Navigation helpers acquire empty track space so endpoints retain pointer ownership. Removed redundant external response/fulfillment count equality after WebKit CI reported 3 responses versus 2 fulfillments during picker history traversal. Every external request must still be intercepted and locally fulfilled or aborted; response counts remain diagnostic attachments.
Ready for independent review after release of the matching Continuum claim. Do not merge as part of this task.