Skip to content

fix(skin): align control and caption transitions#985

Open
sampotts wants to merge 2 commits intomainfrom
feat/control-transitions
Open

fix(skin): align control and caption transitions#985
sampotts wants to merge 2 commits intomainfrom
feat/control-transitions

Conversation

@sampotts
Copy link
Collaborator

Summary

  • Align control and caption transition timing across the default and minimal skins.
  • Switch animated UI pieces to individual transform properties for smoother state changes.
  • Allow long error descriptions to wrap without overflowing the dialog.

Testing

  • Not run (Not requested).

Closes #956

@vercel
Copy link

vercel bot commented Mar 17, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
v10-sandbox Ready Ready Preview, Comment Mar 17, 2026 5:46am

Request Review

@netlify
Copy link

netlify bot commented Mar 17, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 7956501
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/69b8eabf8d516b0008b98a0b
😎 Deploy Preview https://deploy-preview-985--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Contributor

📦 Bundle Size Report

🎨 @videojs/html

Path Base PR Diff %
/media/dash-video 236.04 kB 235.71 kB -337 B -0.1% 🔽
Presets (7)
Entry Size
/video (default) 22.92 kB
/video (default + hls) 153.40 kB
/video (minimal) 22.78 kB
/video (minimal + hls) 153.03 kB
/audio (default) 21.33 kB
/audio (minimal) 21.30 kB
/background 6.47 kB
Media (5)
Entry Size
/media/background-video 617 B
/media/container 1.91 kB
/media/dash-video 235.71 kB
/media/hls-video 131.17 kB
/media/simple-hls-video 11.94 kB
Players (3)
Entry Size
/video/player 6.33 kB
/audio/player 6.32 kB
/background/player 6.31 kB
Skins (16)
Entry Type Size
/video/minimal-skin.css css 3.03 kB
/video/skin.css css 3.08 kB
/video/minimal-skin js 22.17 kB
/video/minimal-skin.tailwind js 22.48 kB
/video/skin js 22.36 kB
/video/skin.tailwind js 22.68 kB
/audio/minimal-skin.css css 2.25 kB
/audio/skin.css css 2.29 kB
/audio/minimal-skin js 20.76 kB
/audio/minimal-skin.tailwind js 20.77 kB
/audio/skin js 20.77 kB
/audio/skin.tailwind js 21.03 kB
/background/skin.css css 124 B
/background/skin js 999 B
/base.css css 180 B
/shared.css css 43 B
UI Components (21)
Entry Size
/ui/alert-dialog 2.08 kB
/ui/alert-dialog-close 1.22 kB
/ui/alert-dialog-description 1.49 kB
/ui/alert-dialog-title 1.50 kB
/ui/buffering-indicator 1.78 kB
/ui/captions-button 1.75 kB
/ui/controls 1.80 kB
/ui/fullscreen-button 1.75 kB
/ui/mute-button 1.76 kB
/ui/pip-button 1.79 kB
/ui/play-button 1.75 kB
/ui/playback-rate-button 1.77 kB
/ui/popover 3.28 kB
/ui/poster 1.67 kB
/ui/seek-button 1.75 kB
/ui/slider 2.00 kB
/ui/thumbnail 2.11 kB
/ui/time 1.61 kB
/ui/time-slider 2.94 kB
/ui/tooltip 2.58 kB
/ui/volume-slider 2.17 kB

Sizes are marginal over the root entry point.

⚛️ @videojs/react

(no changes)

Presets (7)
Entry Size
/video (default) 18.71 kB
/video (default + hls) 149.52 kB
/video (minimal) 18.73 kB
/video (minimal + hls) 149.51 kB
/audio (default) 14.93 kB
/audio (minimal) 14.97 kB
/background 3.19 kB
Media (4)
Entry Size
/media/background-video 539 B
/media/dash-video 236.15 kB
/media/hls-video 131.78 kB
/media/simple-hls-video 12.33 kB
Skins (14)
Entry Type Size
/video/minimal-skin.css css 3.03 kB
/video/skin.css css 3.08 kB
/video/minimal-skin js 18.64 kB
/video/minimal-skin.tailwind js 21.71 kB
/video/skin js 18.60 kB
/video/skin.tailwind js 21.73 kB
/audio/minimal-skin.css css 2.25 kB
/audio/skin.css css 2.29 kB
/audio/minimal-skin js 14.88 kB
/audio/minimal-skin.tailwind js 16.93 kB
/audio/skin js 14.82 kB
/audio/skin.tailwind js 17.17 kB
/background/skin.css css 90 B
/background/skin js 272 B
UI Components (18)
Entry Size
/ui/alert-dialog 2.72 kB
/ui/buffering-indicator 2.24 kB
/ui/captions-button 2.30 kB
/ui/controls 2.24 kB
/ui/fullscreen-button 2.28 kB
/ui/mute-button 2.27 kB
/ui/pip-button 2.29 kB
/ui/play-button 2.28 kB
/ui/playback-rate-button 2.28 kB
/ui/popover 3.32 kB
/ui/poster 2.12 kB
/ui/seek-button 2.28 kB
/ui/slider 2.97 kB
/ui/thumbnail 2.54 kB
/ui/time 2.33 kB
/ui/time-slider 2.77 kB
/ui/tooltip 3.18 kB
/ui/volume-slider 2.69 kB

Sizes are marginal over the root entry point.

🧩 @videojs/core

(no changes)

Entries (6)
Entry Size
. 4.78 kB
/dom 8.40 kB
/dom/media/custom-media-element 1.81 kB
/dom/media/dash 235.62 kB
/dom/media/hls 131.27 kB
/dom/media/simple-hls 11.85 kB

🏷️ @videojs/element

(no changes)

Entries (2)
Entry Size
. 999 B
/context 936 B

📦 @videojs/store

(no changes)

Entries (3)
Entry Size
. 1.32 kB
/html 700 B
/react 360 B

🔧 @videojs/utils

(no changes)

Entries (10)
Entry Size
/array 104 B
/dom 1.25 kB
/events 227 B
/function 261 B
/object 119 B
/predicate 265 B
/string 148 B
/style 190 B
/time 478 B
/number 158 B

📦 @videojs/spf

(no changes)

Entries (3)
Entry Size
. 40 B
/dom 10.04 kB
/playback-engine 9.94 kB

ℹ️ How to interpret

All sizes are standalone totals (minified + brotli).

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the default and minimal skins’ transition timing to keep controls and native captions in sync, while moving several animations to modern individual transform properties (translate/scale) and improving error dialog text wrapping.

Changes:

  • Introduces shared CSS variables for controls transition duration/delay (with pointer-type adjustments) and reuses them for native caption track transitions.
  • Migrates multiple animations from transform to individual translate/scale properties (controls, popups, buttons, slider thumb, caption container).
  • Prevents long error descriptions from overflowing by forcing aggressive line-breaking.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/skins/src/minimal/tailwind/video.tailwind.ts Adds shared transition vars and updates controls/captions timing for minimal Tailwind skin.
packages/skins/src/minimal/tailwind/components/error.ts Allows error description breaking in minimal Tailwind skin.
packages/skins/src/minimal/css/video.css Adds shared transition vars and updates minimal CSS controls transitions to translate.
packages/skins/src/minimal/css/components/slider.css Uses translate property for thumb centering.
packages/skins/src/minimal/css/components/preview.css Uses translate property for spinner centering.
packages/skins/src/minimal/css/components/popup.css Switches popup animation from transform to scale.
packages/skins/src/minimal/css/components/error.css Switches error animation to scale and enables breaking long descriptions.
packages/skins/src/minimal/css/components/captions.css Aligns caption vars/timing to controls vars and switches to translate transitions.
packages/skins/src/minimal/css/components/buttons.css Switches button active animation from transform to scale.
packages/skins/src/default/tailwind/video.tailwind.ts Adds shared transition vars and updates controls/captions timing for default Tailwind skin.
packages/skins/src/default/tailwind/components/error.ts Allows error description breaking in default Tailwind skin.
packages/skins/src/default/css/video.css Adds shared transition vars, updates control transitions to scale, and gates fullscreen cursor hiding to fine pointers.
packages/skins/src/default/css/components/slider.css Uses translate property for thumb centering.
packages/skins/src/default/css/components/preview.css Uses translate property for spinner centering.
packages/skins/src/default/css/components/popup.css Switches popup animation from transform to scale.
packages/skins/src/default/css/components/error.css Switches error animation to scale and enables breaking long descriptions.
packages/skins/src/default/css/components/captions.css Aligns caption vars/timing to controls vars and switches to translate transitions.
packages/skins/src/default/css/components/buttons.css Switches button active animation from transform to scale.
packages/html/src/define/base.css Updates base native captions transition from transform to translate.
packages/core/src/dom/media/custom-media-element/index.ts Updates injected native captions CSS from transform to translate.
Comments suppressed due to low confidence (2)

packages/skins/src/minimal/tailwind/video.tailwind.ts:51

  • In the caption track Tailwind rules, the container is now positioned via translate-y-(--media-caption-track-y) but is still using transition-transform. Since this PR is switching animations to individual transform properties (translate/scale), consider updating the transition utility here to explicitly transition translate (and keep reduced-motion behavior consistent) so caption movement animates as intended across browsers and matches the CSS-skin/base.css changes.
    '[--media-caption-track-delay:calc(var(--media-controls-transition-delay)+25ms)]',
    '[--media-caption-track-duration:var(--media-controls-transition-duration)]',
    'has-[[data-controls][data-visible]]:[--media-caption-track-y:-3rem]',
    // Native caption track container
    !isShadowDOM
      ? [
          '[&_video::-webkit-media-text-track-container]:transition-transform',
          '[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)',
          '[&_video::-webkit-media-text-track-container]:ease-out',
          '[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)',
          '[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)',

packages/skins/src/default/tailwind/video.tailwind.ts:53

  • The Tailwind styling for the native caption track container still uses transition-transform, while the caption positioning is done with translate-y-(--media-caption-track-y) and the CSS/base styles in this PR switch the caption animation to transition: translate .... To avoid the caption transition silently not animating (depending on how transition-transform expands), update this to transition translate explicitly and keep reduced-motion behavior consistent with the CSS skin.
    '[--media-caption-track-y:-0.5rem]',
    '[--media-caption-track-delay:calc(var(--media-controls-transition-delay)+25ms)]',
    '[--media-caption-track-duration:var(--media-controls-transition-duration)]',
    'has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]',
    // Native caption track container
    !isShadowDOM
      ? [
          '[&_video::-webkit-media-text-track-container]:transition-transform',
          '[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)',
          '[&_video::-webkit-media-text-track-container]:ease-out',
          '[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)',
          '[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)',

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines 5 to 22
.media-minimal-skin {
--media-caption-track-duration: 150ms;
--media-caption-track-delay: 600ms;
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: calc(var(--media-controls-transition-delay) + 25ms);
--media-caption-track-y: -0.5rem;

&:has(.media-controls[data-visible]) {
--media-caption-track-delay: 25ms;
--media-caption-track-y: -3rem;
}

@media (prefers-reduced-motion: reduce) {
--media-caption-track-duration: 50ms;
}
}

.media-minimal-skin video::-webkit-media-text-track-container {
/* NOTE: The delay must account for the controls delay/duration */
transition: transform var(--media-caption-track-duration) ease-out;
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
transform: translateY(var(--media-caption-track-y)) scale(0.98);
translate: 0 var(--media-caption-track-y);
scale: 0.98;
z-index: 1;
font-family: inherit;
}
Comment on lines 91 to 104
&:not([data-visible]) {
opacity: 0;
pointer-events: none;
translate: 0 100%;

@media (pointer: fine) {
transform: translateY(100%);
filter: blur(8px);
transition-duration: 500ms;
transition-delay: 500ms;

@media (prefers-reduced-motion: reduce) {
scale: 1;
transform: translateY(0);
translate: 0 0;
filter: blur(0);
transition-duration: 100ms;
}
}
}
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.

Skins: Investigate controls transition on mobile

2 participants