Skip to content

refactor(html)!: replace ContainerMixin with ContainerElement - #2280

Merged
mihar-22 merged 9 commits into
mainfrom
t3code/html-container-element
Aug 24, 2026
Merged

refactor(html)!: replace ContainerMixin with ContainerElement#2280
mihar-22 merged 9 commits into
mainfrom
t3code/html-container-element

Conversation

@mihar-22

@mihar-22 mihar-22 commented Aug 20, 2026

Copy link
Copy Markdown
Member

Refs #2364

Summary

Replace the container mixin with one concrete ContainerElement, move its registration path to @videojs/html/ui/container, and make player/media/container attachment safe when elements connect, disconnect, reorder, or upgrade late.

This replaces #2244, which GitHub marked merged into the old feature branch rather than main when that stack was rebuilt.

Before

import { ContainerMixin, MediaElement } from '@videojs/html';
import '@videojs/html/media/container';

class CustomContainerElement extends ContainerMixin(MediaElement) {}

After

import { ContainerElement } from '@videojs/html';
import '@videojs/html/ui/container';

class CustomContainerElement extends ContainerElement {}

<media-container> keeps the same tag name. Registration and lifecycle docs, demos, the VJSC HTML target, and API-doc fixtures move with the implementation.

Testing

  • pnpm -F @videojs/html test — 401 tests
  • pnpm -F @videojs/html build
  • pnpm --dir packages/skins exec vitest run vjsc/tests/vite.test.ts — 6 tests
  • pnpm --dir site test — 608 tests
  • pnpm typecheck
  • pnpm check:workspace

Note

High Risk
Breaking public HTML API: mixin removal, import path change, and attach lifecycle rewrite can mis-attach media or containers if registration/release is wrong.

Overview
Replaces HTML ContainerMixin with a concrete ContainerElement (<media-container>). Custom containers now subclass that class instead of composing mixins, and registration moves from @videojs/html/media/container to @videojs/html/ui/container.

Media and container attach now use identity-safe register* callbacks that return a release function, so disconnecting an older element cannot clear a newer one. Native <video>/<audio> are tracked with a subtree MutationObserver instead of a one-shot querySelector fallback.

Docs, demos, skins targeting, and API-doc fixtures follow the new import path and drop the mixin composition examples.

Reviewed by Cursor Bugbot for commit 1539ad6. Bugbot is set up for automated code reviews on this repo. Configure here.

@netlify

netlify Bot commented Aug 20, 2026

Copy link
Copy Markdown

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 1539ad6
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/6a8a3dcd59976100083e64e2
😎 Deploy Preview https://deploy-preview-2280--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

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

@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
v10-sandbox Ready Ready Preview Aug 23, 2026 12:24am

Request Review

@pkg-pr-new

pkg-pr-new Bot commented Aug 20, 2026

Copy link
Copy Markdown
@videojs/core

pnpm add https://pkg.pr.new/@videojs/core@2280

@videojs/element

pnpm add https://pkg.pr.new/@videojs/element@2280

@videojs/html

pnpm add https://pkg.pr.new/@videojs/html@2280

@videojs/media

pnpm add https://pkg.pr.new/@videojs/media@2280

@videojs/react

pnpm add https://pkg.pr.new/@videojs/react@2280

@videojs/spf

pnpm add https://pkg.pr.new/@videojs/spf@2280

@videojs/store

pnpm add https://pkg.pr.new/@videojs/store@2280

@videojs/utils

pnpm add https://pkg.pr.new/@videojs/utils@2280

commit: 1539ad6

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

🎨 @videojs/html

Path Base initial PR initial Initial diff Lazy diff
/ui/container 3.08 kB new +56.87 kB
/media/container 3.13 kB removed -56.87 kB
Small changes (83, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/video/minimal-skin.css 6.43 kB 6.42 kB -12 B (-0.2%)
/video/skin.css 6.22 kB 6.20 kB -21 B (-0.3%)
/video/minimal-skin 58.49 kB 58.52 kB +33 B (+0.1%) 0 B
/video/minimal-skin.tailwind 59.26 kB 59.32 kB +63 B (+0.1%) 0 B
/video/player 10.37 kB 10.46 kB +95 B (+0.9%) 0 B
/video/skin 58.66 kB 58.59 kB -70 B (-0.1%) 0 B
/video/skin.tailwind 59.47 kB 59.54 kB +71 B (+0.1%) 0 B
/audio/minimal-skin.css 4.71 kB 4.69 kB -15 B (-0.3%)
/audio/skin.css 4.63 kB 4.61 kB -19 B (-0.4%)
/audio/minimal-skin 44.75 kB 44.73 kB -24 B (-0.1%) 0 B
/audio/minimal-skin.tailwind 45.36 kB 45.30 kB -58 B (-0.1%) 0 B
/audio/player 7.08 kB 7.18 kB +98 B (+1.4%) 0 B
/audio/skin 48.56 kB 48.58 kB +15 B (+0.0%) 0 B
/audio/skin.tailwind 49.22 kB 49.21 kB -18 B (-0.0%) 0 B
/background/player 5.46 kB 5.56 kB +105 B (+1.9%) 0 B
/live-video/minimal-skin.css 6.43 kB 6.42 kB -12 B (-0.2%)
/live-video/skin.css 6.22 kB 6.20 kB -21 B (-0.3%)
/live-video/minimal-skin 52.66 kB 52.62 kB -39 B (-0.1%) 0 B
/live-video/minimal-skin.tailwind 53.02 kB 53.11 kB +95 B (+0.2%) 0 B
/live-video/player 9.75 kB 9.85 kB +101 B (+1.0%) 0 B
/live-video/skin 55.07 kB 55.01 kB -52 B (-0.1%) 0 B
/live-video/skin.tailwind 55.69 kB 55.60 kB -84 B (-0.1%) 0 B
/live-audio/minimal-skin.css 4.71 kB 4.69 kB -15 B (-0.3%)
/live-audio/skin.css 4.63 kB 4.61 kB -19 B (-0.4%)
/live-audio/minimal-skin 38.65 kB 38.67 kB +15 B (+0.0%) 0 B
/live-audio/minimal-skin.tailwind 38.11 kB 38.11 kB +2 B (+0.0%) 0 B
/live-audio/player 7.10 kB 7.20 kB +97 B (+1.3%) 0 B
/live-audio/skin 42.22 kB 42.19 kB -36 B (-0.1%) 0 B
/live-audio/skin.tailwind 41.81 kB 41.78 kB -30 B (-0.1%) 0 B
/ui/airplay-button 11.06 kB 11.07 kB +4 B (+0.0%) 0 B
/ui/buffering-indicator 8.49 kB 8.48 kB -12 B (-0.1%) 0 B
/ui/captions-button 11.33 kB 11.33 kB +4 B (+0.0%) 0 B
/ui/cast-button 11.05 kB 11.04 kB -14 B (-0.1%) 0 B
/ui/compounds 35.17 kB 35.10 kB -73 B (-0.2%) 0 B
/ui/error-dialog 11.54 kB 11.53 kB -3 B (-0.0%) 0 B
/ui/fullscreen-button 11.03 kB 11.01 kB -13 B (-0.1%) 0 B
/ui/gesture 9.30 kB 9.31 kB +1 B (+0.0%) 0 B
/ui/hotkey 9.74 kB 9.73 kB -10 B (-0.1%) 0 B
/ui/menu 18.94 kB 18.93 kB -9 B (-0.0%) 0 B
/ui/mute-button 11.07 kB 11.08 kB +9 B (+0.1%) 0 B
/ui/pip-button 11.03 kB 11.02 kB -12 B (-0.1%) 0 B
/ui/play-button 11.03 kB 11.01 kB -21 B (-0.2%) 0 B
/ui/playback-rate-button 11.14 kB 11.12 kB -14 B (-0.1%) 0 B
/ui/popover 8.24 kB 8.24 kB -2 B (-0.0%) 0 B
/ui/poster 8.56 kB 8.55 kB -9 B (-0.1%) 0 B
/ui/quality-radio-group 11.80 kB 11.80 kB +4 B (+0.0%) 0 B
/ui/seek-indicator 12.45 kB 12.41 kB -35 B (-0.3%) 0 B
/ui/slider 11.88 kB 11.88 kB +1 B (+0.0%) 0 B
/ui/status-announcer 10.43 kB 10.40 kB -35 B (-0.3%) 0 B
/ui/status-indicator 12.76 kB 12.77 kB +3 B (+0.0%) 0 B
/ui/thumbnail 9.67 kB 9.66 kB -13 B (-0.1%) 0 B
/ui/time 10.77 kB 10.74 kB -39 B (-0.4%) 0 B
/ui/time-slider 14.83 kB 14.80 kB -31 B (-0.2%) 0 B
/ui/time-slider-chapter-title 8.66 kB 8.66 kB -2 B (-0.0%) 0 B
/ui/time-slider-chapters 9.63 kB 9.62 kB -14 B (-0.1%) 0 B
/ui/title 8.07 kB 8.05 kB -13 B (-0.2%) 0 B
/ui/volume-indicator 12.79 kB 12.77 kB -14 B (-0.1%) 0 B
/media/mux-video 142.47 kB 142.33 kB -141 B (-0.1%)
/media/mux-audio 142.09 kB 142.14 kB +47 B (+0.0%)
/media/background-video 1.14 kB 1.15 kB +5 B (+0.4%)
/media/cloudflare-video 6.25 kB 6.25 kB -5 B (-0.1%)
/media/dash-video 211.90 kB 211.76 kB -142 B (-0.1%)
/media/hls-audio 21.84 kB 21.83 kB -10 B (-0.0%)
/media/hls-background-video 16.79 kB 16.78 kB -5 B (-0.0%)
/media/hls-video 27.77 kB 27.75 kB -16 B (-0.1%)
/media/hlsjs-video 141.05 kB 141.11 kB +58 B (+0.0%)
/media/mux-background-video 16.78 kB 16.80 kB +21 B (+0.1%)
/media/native-hls-video 7.51 kB 7.51 kB +3 B (+0.0%)
/media/shaka-video 199.34 kB 199.21 kB -134 B (-0.1%)
/media/spotify-audio 6.23 kB 6.24 kB +3 B (+0.0%)
/media/tiktok-video 6.28 kB 6.29 kB +12 B (+0.2%)
/media/twitch-video 6.20 kB 6.19 kB -10 B (-0.2%)
/media/vimeo-video 13.01 kB 13.03 kB +20 B (+0.2%)
/media/youtube-video 6.76 kB 6.79 kB +23 B (+0.3%)
/global.css 183 B 166 B -17 B (-9.3%)
/skin-element 1.38 kB 1.36 kB -12 B (-0.9%)
/video (default) 58.71 kB 58.65 kB -59 B (-0.1%) 0 B
/video (default + hls) 197.59 kB 197.59 kB +5 B (+0.0%) 0 B
/video (minimal) 58.49 kB 58.51 kB +20 B (+0.0%) 0 B
/video (minimal + hls) 197.47 kB 197.38 kB -96 B (-0.0%) 0 B
/audio (default) 48.66 kB 48.60 kB -61 B (-0.1%) 0 B
/audio (minimal) 44.72 kB 44.69 kB -30 B (-0.1%) 0 B
/background 5.75 kB 5.86 kB +112 B (+1.9%) 0 B
Presets (7)
Entry Initial Lazy
/video (default) 58.65 kB 56.87 kB
/video (default + hls) 197.59 kB 56.87 kB
/video (minimal) 58.51 kB 56.87 kB
/video (minimal + hls) 197.38 kB 56.87 kB
/audio (default) 48.60 kB 56.87 kB
/audio (minimal) 44.69 kB 56.87 kB
/background 5.86 kB 56.87 kB
Media (19)
Entry Initial
/media/mux-video 142.33 kB
/media/mux-audio 142.14 kB
/media/background-video 1.15 kB
/media/cloudflare-video 6.25 kB
/media/dash-video 211.76 kB
/media/google-cast 6.45 kB
/media/hls-audio 21.83 kB
/media/hls-background-video 16.78 kB
/media/hls-video 27.75 kB
/media/hlsjs-video 141.11 kB
/media/mux-background-video 16.80 kB
/media/mux-data 26.64 kB
/media/native-hls-video 7.51 kB
/media/shaka-video 199.21 kB
/media/spotify-audio 6.24 kB
/media/tiktok-video 6.29 kB
/media/twitch-video 6.19 kB
/media/vimeo-video 13.03 kB
/media/youtube-video 6.79 kB
Players (5)
Entry Initial Lazy
/video/player 10.46 kB 56.87 kB
/audio/player 7.18 kB 56.87 kB
/background/player 5.56 kB 56.87 kB
/live-video/player 9.85 kB 56.87 kB
/live-audio/player 7.20 kB 56.87 kB
Skins (29)
Entry Type Initial Lazy
/video/minimal-skin.css css 6.42 kB
/video/skin.css css 6.20 kB
/video/minimal-skin js 58.52 kB 56.87 kB
/video/minimal-skin.tailwind js 59.32 kB 56.87 kB
/video/skin js 58.59 kB 56.87 kB
/video/skin.tailwind js 59.54 kB 56.87 kB
/audio/minimal-skin.css css 4.69 kB
/audio/skin.css css 4.61 kB
/audio/minimal-skin js 44.73 kB 56.87 kB
/audio/minimal-skin.tailwind js 45.30 kB 56.87 kB
/audio/skin js 48.58 kB 56.87 kB
/audio/skin.tailwind js 49.21 kB 56.87 kB
/background/skin.css css 145 B
/background/skin js 1.14 kB
/live-video/minimal-skin.css css 6.42 kB
/live-video/skin.css css 6.20 kB
/live-video/minimal-skin js 52.62 kB 56.87 kB
/live-video/minimal-skin.tailwind js 53.11 kB 56.87 kB
/live-video/skin js 55.01 kB 56.87 kB
/live-video/skin.tailwind js 55.60 kB 56.87 kB
/live-audio/minimal-skin.css css 4.69 kB
/live-audio/skin.css css 4.61 kB
/live-audio/minimal-skin js 38.67 kB 56.87 kB
/live-audio/minimal-skin.tailwind js 38.11 kB 56.87 kB
/live-audio/skin js 42.19 kB 56.87 kB
/live-audio/skin.tailwind js 41.78 kB 56.87 kB
/global.css css 166 B
/shared.css css 99 B
/skin-element js 1.36 kB
UI Components (44)
Entry Initial Lazy
/ui/airplay-button 11.07 kB 56.87 kB
/ui/alert-dialog 4.23 kB 56.87 kB
/ui/alert-dialog-close 1.95 kB 56.87 kB
/ui/alert-dialog-description 1.63 kB 56.87 kB
/ui/alert-dialog-title 1.65 kB 56.87 kB
/ui/audio-track-radio-group 11.22 kB 56.87 kB
/ui/buffering-indicator 8.48 kB 56.87 kB
/ui/captions-button 11.33 kB 56.87 kB
/ui/captions-radio-group 11.30 kB 56.87 kB
/ui/cast-button 11.04 kB 56.87 kB
/ui/compounds 35.10 kB 56.87 kB
/ui/container 3.08 kB 56.87 kB
/ui/controls 8.63 kB 56.87 kB
/ui/error-dialog 11.53 kB 56.87 kB
/ui/fullscreen-button 11.01 kB 56.87 kB
/ui/gesture 9.31 kB 56.87 kB
/ui/hotkey 9.73 kB 56.87 kB
/ui/menu 18.93 kB 56.87 kB
/ui/mute-button 11.08 kB 56.87 kB
/ui/pip-button 11.02 kB 56.87 kB
/ui/play-button 11.01 kB 56.87 kB
/ui/playback-rate-button 11.12 kB 56.87 kB
/ui/playback-rate-radio-group 11.21 kB 56.87 kB
/ui/popover 8.24 kB 56.87 kB
/ui/poster 8.55 kB 56.87 kB
/ui/quality-radio-group 11.80 kB 56.87 kB
/ui/seek-button 11.07 kB 56.87 kB
/ui/seek-indicator 12.41 kB 56.87 kB
/ui/seek-indicator-value 1.03 kB
/ui/slider 11.88 kB 56.87 kB
/ui/status-announcer 10.40 kB 56.87 kB
/ui/status-indicator 12.77 kB 56.87 kB
/ui/status-indicator-value 1.02 kB
/ui/thumbnail 9.66 kB 56.87 kB
/ui/time 10.74 kB 56.87 kB
/ui/time-slider 14.80 kB 56.87 kB
/ui/time-slider-chapter-title 8.66 kB 56.87 kB
/ui/time-slider-chapters 9.62 kB 56.87 kB
/ui/title 8.05 kB 56.87 kB
/ui/tooltip 9.60 kB 56.87 kB
/ui/volume-indicator 12.77 kB 56.87 kB
/ui/volume-indicator-fill 1.03 kB
/ui/volume-indicator-value 1.02 kB
/ui/volume-slider 12.53 kB 56.87 kB
⚛️ @videojs/react — 42 small size changes
Path Base initial PR initial Initial diff Lazy diff
/media/spotify-audio 4.21 kB 4.22 kB +1 B (+0.0%)
/media/twitch-video 4.30 kB 4.30 kB -2 B (-0.0%)
/media/vimeo-video 11.21 kB 11.19 kB -19 B (-0.2%)
/media/youtube-video 4.86 kB 4.86 kB +1 B (+0.0%)
/video/minimal-skin 46.27 kB 46.23 kB -41 B (-0.1%) 0 B
/video/minimal-skin.tailwind 53.08 kB 53.10 kB +13 B (+0.0%) 0 B
/video/skin 46.19 kB 46.13 kB -63 B (-0.1%) 0 B
/video/skin.tailwind 52.83 kB 52.83 kB -7 B (-0.0%) 0 B
/audio/minimal-skin 35.61 kB 35.60 kB -7 B (-0.0%) 0 B
/audio/minimal-skin.tailwind 40.65 kB 40.61 kB -38 B (-0.1%) 0 B
/audio/skin 35.63 kB 35.51 kB -115 B (-0.3%) 0 B
/audio/skin.tailwind 40.58 kB 40.56 kB -22 B (-0.1%) 0 B
/live-video/minimal-skin 38.40 kB 38.30 kB -104 B (-0.3%) 0 B
/live-video/minimal-skin.tailwind 44.87 kB 44.86 kB -16 B (-0.0%) 0 B
/live-video/skin 38.35 kB 38.37 kB +14 B (+0.0%) 0 B
/live-video/skin.tailwind 44.85 kB 44.83 kB -19 B (-0.0%) 0 B
/live-audio/minimal-skin 27.77 kB 27.69 kB -74 B (-0.3%) 0 B
/live-audio/minimal-skin.tailwind 31.57 kB 31.50 kB -73 B (-0.2%) 0 B
/live-audio/skin 27.81 kB 27.77 kB -46 B (-0.2%) 0 B
/live-audio/skin.tailwind 31.72 kB 31.69 kB -34 B (-0.1%) 0 B
/ui/audio-track-radio-group 9.05 kB 9.05 kB +5 B (+0.1%) 0 B
/ui/captions-button 10.25 kB 10.25 kB -1 B (-0.0%) 0 B
/ui/error-dialog 10.31 kB 10.31 kB +2 B (+0.0%) 0 B
/ui/gesture 7.79 kB 7.80 kB +6 B (+0.1%) 0 B
/ui/play-button 10.20 kB 10.20 kB +1 B (+0.0%) 0 B
/ui/playback-rate-button 10.20 kB 10.20 kB -5 B (-0.0%) 0 B
/ui/playback-rate-radio-group 9.09 kB 9.09 kB +1 B (+0.0%) 0 B
/ui/poster 7.49 kB 7.49 kB +1 B (+0.0%) 0 B
/ui/quality-radio-group 9.53 kB 9.54 kB +7 B (+0.1%) 0 B
/ui/seek-button 10.23 kB 10.23 kB -5 B (-0.0%) 0 B
/ui/seek-indicator 11.78 kB 11.75 kB -33 B (-0.3%) 0 B
/ui/slider 12.54 kB 12.57 kB +21 B (+0.2%) 0 B
/ui/status-announcer 9.96 kB 9.93 kB -28 B (-0.3%) 0 B
/ui/thumbnail 8.63 kB 8.64 kB +3 B (+0.0%) 0 B
/ui/time 9.74 kB 9.69 kB -52 B (-0.5%) 0 B
/ui/time-slider 14.04 kB 14.03 kB -10 B (-0.1%) 0 B
/video (default) 46.32 kB 46.22 kB -105 B (-0.2%) 0 B
/video (default + hls) 184.25 kB 184.03 kB -226 B (-0.1%) 0 B
/video (minimal) 46.40 kB 46.35 kB -47 B (-0.1%) 0 B
/video (minimal + hls) 184.30 kB 184.13 kB -178 B (-0.1%) 0 B
/audio (default) 35.65 kB 35.58 kB -80 B (-0.2%) 0 B
/audio (minimal) 35.73 kB 35.61 kB -122 B (-0.3%) 0 B
Presets (7)
Entry Initial Lazy
/video (default) 46.22 kB 56.87 kB
/video (default + hls) 184.03 kB 56.87 kB
/video (minimal) 46.35 kB 56.87 kB
/video (minimal + hls) 184.13 kB 56.87 kB
/audio (default) 35.58 kB 56.87 kB
/audio (minimal) 35.61 kB 56.87 kB
/background 581 B 56.87 kB
Media (23)
Entry Initial
/media/mux-video/hls-js 140.62 kB
/media/mux-video/spf 27.09 kB
/media/mux-audio/hls-js 140.46 kB
/media/mux-audio/spf 21.07 kB
/media/background-video 402 B
/media/cloudflare-video 4.35 kB
/media/dash-video 210.29 kB
/media/google-cast 5.34 kB
/media/hls-audio 20.11 kB
/media/hls-background-video 16.41 kB
/media/hls-video 26.05 kB
/media/hlsjs-video 139.58 kB
/media/mux-audio 140.44 kB
/media/mux-background-video 16.40 kB
/media/mux-data 25.45 kB
/media/mux-video 140.54 kB
/media/native-hls-video 5.75 kB
/media/shaka-video 197.52 kB
/media/spotify-audio 4.22 kB
/media/tiktok-video 4.18 kB
/media/twitch-video 4.30 kB
/media/vimeo-video 11.19 kB
/media/youtube-video 4.86 kB
Players (5)
Entry Initial Lazy
/video/player 7.51 kB 56.87 kB
/audio/player 3.95 kB 56.87 kB
/background/player 2.27 kB 56.87 kB
/live-video/player 6.90 kB 56.87 kB
/live-audio/player 3.95 kB 56.87 kB
Skins (26)
Entry Type Initial Lazy
/video/minimal-skin.css css 6.34 kB
/video/skin.css css 6.11 kB
/video/minimal-skin js 46.23 kB 56.87 kB
/video/minimal-skin.tailwind js 53.10 kB 56.87 kB
/video/skin js 46.13 kB 56.87 kB
/video/skin.tailwind js 52.83 kB 56.87 kB
/audio/minimal-skin.css css 4.56 kB
/audio/skin.css css 4.48 kB
/audio/minimal-skin js 35.60 kB 56.87 kB
/audio/minimal-skin.tailwind js 40.61 kB 56.87 kB
/audio/skin js 35.51 kB 56.87 kB
/audio/skin.tailwind js 40.56 kB 56.87 kB
/background/skin.css css 90 B
/background/skin js 277 B
/live-video/minimal-skin.css css 6.34 kB
/live-video/skin.css css 6.11 kB
/live-video/minimal-skin js 38.30 kB 56.87 kB
/live-video/minimal-skin.tailwind js 44.86 kB 56.87 kB
/live-video/skin js 38.37 kB 56.87 kB
/live-video/skin.tailwind js 44.83 kB 56.87 kB
/live-audio/minimal-skin.css css 4.56 kB
/live-audio/skin.css css 4.48 kB
/live-audio/minimal-skin js 27.69 kB 56.87 kB
/live-audio/minimal-skin.tailwind js 31.50 kB 56.87 kB
/live-audio/skin js 27.77 kB 56.87 kB
/live-audio/skin.tailwind js 31.69 kB 56.87 kB
UI Components (37)
Entry Initial Lazy
/ui/airplay-button 10.28 kB 56.87 kB
/ui/alert-dialog 3.33 kB 56.87 kB
/ui/audio-track 7.89 kB 56.87 kB
/ui/audio-track-radio-group 9.05 kB 56.87 kB
/ui/buffering-indicator 7.72 kB 56.87 kB
/ui/captions-button 10.25 kB 56.87 kB
/ui/captions-radio-group 9.17 kB 56.87 kB
/ui/cast-button 10.26 kB 56.87 kB
/ui/controls 7.43 kB 56.87 kB
/ui/error-dialog 10.31 kB 56.87 kB
/ui/fullscreen-button 10.23 kB 56.87 kB
/ui/gesture 7.80 kB 56.87 kB
/ui/hotkey 8.21 kB 56.87 kB
/ui/live-button 8.69 kB 56.87 kB
/ui/menu 18.31 kB 56.87 kB
/ui/mute-button 10.26 kB 56.87 kB
/ui/pip-button 10.22 kB 56.87 kB
/ui/play-button 10.20 kB 56.87 kB
/ui/playback-rate 7.94 kB 56.87 kB
/ui/playback-rate-button 10.20 kB 56.87 kB
/ui/playback-rate-radio-group 9.09 kB 56.87 kB
/ui/popover 7.93 kB 56.87 kB
/ui/poster 7.49 kB 56.87 kB
/ui/quality 8.38 kB 56.87 kB
/ui/quality-radio-group 9.54 kB 56.87 kB
/ui/seek-button 10.23 kB 56.87 kB
/ui/seek-indicator 11.75 kB 56.87 kB
/ui/slider 12.57 kB 56.87 kB
/ui/status-announcer 9.93 kB 56.87 kB
/ui/status-indicator 12.07 kB 56.87 kB
/ui/thumbnail 8.64 kB 56.87 kB
/ui/time 9.69 kB 56.87 kB
/ui/time-slider 14.03 kB 56.87 kB
/ui/title 7.19 kB 56.87 kB
/ui/tooltip 8.66 kB 56.87 kB
/ui/volume-indicator 12.15 kB 56.87 kB
/ui/volume-slider 11.96 kB 56.87 kB
🧩 @videojs/core — 2 small size changes
Path Base initial PR initial Initial diff Lazy diff
. 12.90 kB 12.85 kB -48 B (-0.4%)
/i18n 3.20 kB 3.23 kB +28 B (+0.9%) 0 B
Entries (76)
Entry Initial Lazy
. 12.85 kB
/dom 20.83 kB 56.87 kB
/vjsc 1.64 kB
/i18n 3.23 kB 56.87 kB
/i18n/locales/all 34.97 kB
/i18n/locales/ar 1.22 kB
/i18n/locales/az 1.09 kB
/i18n/locales/bg 1.29 kB
/i18n/locales/bn 1.23 kB
/i18n/locales/bs 1.00 kB
/i18n/locales/ca 1.07 kB
/i18n/locales/cs 1.07 kB
/i18n/locales/cy 1.02 kB
/i18n/locales/da 1006 B
/i18n/locales/de 1.09 kB
/i18n/locales/el 1.49 kB
/i18n/locales/en 785 B
/i18n/locales/es 1018 B
/i18n/locales/et 1.05 kB
/i18n/locales/eu 1.03 kB
/i18n/locales/fa 1.22 kB
/i18n/locales/fi 1.04 kB
/i18n/locales/fr 1.07 kB
/i18n/locales/gd 1.10 kB
/i18n/locales/gl 1022 B
/i18n/locales/he 1.14 kB
/i18n/locales/hi 1.30 kB
/i18n/locales/hr 1.02 kB
/i18n/locales/hu 1.10 kB
/i18n/locales/id 919 B
/i18n/locales/it 1.01 kB
/i18n/locales/ja 1.18 kB
/i18n/locales/ko 1.14 kB
/i18n/locales/lt 1.02 kB
/i18n/locales/lv 1.09 kB
/i18n/locales/mr 1.30 kB
/i18n/locales/nb 987 B
/i18n/locales/ne 1.29 kB
/i18n/locales/nl 1.00 kB
/i18n/locales/nn 987 B
/i18n/locales/oc 1.08 kB
/i18n/locales/pl 1.14 kB
/i18n/locales/pt 1.03 kB
/i18n/locales/pt-BR 1.03 kB
/i18n/locales/pt-PT 1.01 kB
/i18n/locales/ro 1.07 kB
/i18n/locales/ru 1.40 kB
/i18n/locales/sk 1.10 kB
/i18n/locales/sl 1.04 kB
/i18n/locales/sr 1.07 kB
/i18n/locales/sv 1.01 kB
/i18n/locales/te 1.32 kB
/i18n/locales/th 1.29 kB
/i18n/locales/tr 1.08 kB
/i18n/locales/uk 1.41 kB
/i18n/locales/vi 1.11 kB
/i18n/locales/zh 1.02 kB
/i18n/locales/zh-CN 1.02 kB
/i18n/locales/zh-TW 1.02 kB
/i18n/text/airplay 101 B
/i18n/text/buttons 137 B
/i18n/text/captions 93 B
/i18n/text/cast 114 B
/i18n/text/common 90 B
/i18n/text/container 75 B
/i18n/text/errors 285 B
/i18n/text/fullscreen 98 B
/i18n/text/live 126 B
/i18n/text/menu 249 B
/i18n/text/pip 101 B
/i18n/text/playback 80 B
/i18n/text/seek 105 B
/i18n/text/slider 65 B
/i18n/text/status 222 B
/i18n/text/time 280 B
/i18n/text/volume 133 B
🏷️ @videojs/element — no changes
Entries (2)
Entry Initial
. 996 B
/context 943 B
📦 @videojs/store — no changes
Entries (3)
Entry Initial
. 1.72 kB
/html 703 B
/react 365 B
🔧 @videojs/utils — 2 small size changes
Path Base initial PR initial Initial diff Lazy diff
/i18n 194 B 249 B +55 B (+28.4%)
/time 1.01 kB 975 B -64 B (-6.2%)
Entries (13)
Entry Initial
/array 271 B
/dom 4.73 kB
/events 320 B
/function 386 B
/i18n 249 B
/jwt 176 B
/object 535 B
/predicate 297 B
/percent 281 B
/string 239 B
/style 212 B
/time 975 B
/number 199 B
📦 @videojs/media — no changes
Entries (20)
Entry Initial
. 1.07 kB
/dom 121 B
/dom/audio-host 1.10 kB
/dom/cloudflare 3.69 kB
/dom/custom-media-element 2.09 kB
/dom/dash 209.83 kB
/dom/google-cast 4.06 kB
/dom/hls-js 139.17 kB
/dom/media-host 1.20 kB
/dom/media-played-ranges 576 B
/dom/mux 162.62 kB
/dom/native-hls 5.25 kB
/dom/shaka 197.02 kB
/dom/spotify 3.58 kB
/dom/tiktok 3.57 kB
/dom/twitch 3.62 kB
/dom/video-host 1.39 kB
/dom/vimeo 10.62 kB
/dom/youtube 4.25 kB
/media-tracks 2.05 kB
📦 @videojs/spf — no changes
Entries (10)
Entry Initial
. 4.53 kB
/dom 6.58 kB
/hls 21.83 kB
/media-tracks 504 B
/hls-background-video 15.86 kB
/hls-audio 19.60 kB
/hls-video 25.64 kB
/mux-audio 20.54 kB
/mux-background-video 15.85 kB
/mux-video 26.50 kB

ℹ️ How to interpret

Each entry is independently bundled, minified, and brotli-compressed. Initial size includes its static import graph; lazy dynamic chunks are reported separately.

Entries are not additive because their dependency graphs overlap. Preset rows represent realistic combined bundles.

Changes of 300 B or less across initial, lazy, and total size are collapsed, not discarded.

Run pnpm size locally to check current initial sizes.

@mihar-22
mihar-22 force-pushed the t3code/html-container-element branch from 50d2f3c to 2cbc807 Compare August 21, 2026 20:51
@mihar-22
mihar-22 requested review from luwes and sampotts August 21, 2026 20:55
@mihar-22
mihar-22 marked this pull request as ready for review August 21, 2026 20:56

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cbc807. Configure here.

Comment thread packages/html/src/define/global.css
Comment thread packages/html/src/store/provider-mixin.ts

@luwes luwes left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM!
just reminder of the import weirdness, can possibly look at after.
heads up: this pr also changes the changelog of a previous beta.

@mihar-22
mihar-22 merged commit 76fa285 into main Aug 24, 2026
32 checks passed
@mihar-22
mihar-22 deleted the t3code/html-container-element branch August 24, 2026 03:23
@luwes luwes mentioned this pull request Aug 23, 2026
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.

2 participants