Skip to content

refactor(packages)!: simplify menus - #2029

Draft
mihar-22 wants to merge 4 commits into
mainfrom
t3code/menu-spike-port-settings-untangling
Draft

refactor(packages)!: simplify menus#2029
mihar-22 wants to merge 4 commits into
mainfrom
t3code/menu-spike-port-settings-untangling

Conversation

@mihar-22

Copy link
Copy Markdown
Member

Refs #1994
Refs #2022

Summary

Continue the menu simplification exploration from #1994 while porting the useful state and composition ideas from #2022. Base menus now stay focused on generic menu behavior, while skins compose settings from menu and radio-group primitives and CSS transitions use the existing popover lifecycle.

Changes

  • Remove settings, i18n, value outlets, back-item types, and view abstractions from the base HTML and React menu APIs
  • Compose captions, quality, playback-rate, and audio-track submenus directly in each skin, with selected labels supplied by the option hooks
  • Split popover open requests from committed state so controlled React roots and cancelable HTML open-change events stay synchronized
  • Replace the viewport/view transition machinery with nested menu presence hooks and active-panel height measurement
  • Keep ending panels mounted for exit transitions, hide and inert covered root items, and reset nested menus when the root closes
  • Add module-graph coverage that prevents base menus from regaining settings or i18n dependencies
  • Update menu CSS variables, events, exports, skins, and sandbox examples for the simplified model
Implementation details

Submenu direction is inferred from local open state. Opening and closing reuse the popover transition lifecycle to expose starting and ending states, while a small shared height helper synchronizes the active panel height. There is no coordinator, viewport, view stack, direction channel, or settings controller.

This remains an exploratory draft; broader manual skin testing is intentionally left for review.

Testing

  • pnpm -F @videojs/core test — 91 files, 1,385 tests
  • pnpm -F @videojs/html test — 41 files, 299 tests
  • pnpm -F @videojs/react test — 39 files, 395 tests
  • pnpm -F @videojs/core build
  • pnpm -F @videojs/html build
  • pnpm -F @videojs/html build:cdn
  • pnpm -F @videojs/react build
  • pnpm -F @videojs/skins build
  • pnpm -F @videojs/sandbox build
  • pnpm typecheck
  • pnpm check:workspace
  • git diff --check

@netlify

netlify Bot commented Aug 10, 2026

Copy link
Copy Markdown

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 8996697
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/6a7b8cd2f8a9a700081cfbbd
😎 Deploy Preview https://deploy-preview-2029--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 10, 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 11, 2026 8:58pm

Request Review

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

🎨 @videojs/html

Path Base initial PR initial Initial diff Lazy diff
/video/minimal-skin 55.19 kB 54.64 kB -559 B (-1.0%) +2.34 kB
/video/minimal-skin.tailwind 55.70 kB 55.34 kB -370 B (-0.6%) +2.34 kB
/video/player 10.01 kB 10.01 kB +3 B (+0.0%) +2.34 kB
/video/skin 55.46 kB 55.03 kB -435 B (-0.8%) +2.34 kB
/video/skin.tailwind 56.21 kB 55.68 kB -539 B (-0.9%) +2.34 kB
/audio/minimal-skin 43.92 kB 42.24 kB -1.68 kB (-3.8%) +2.34 kB
/audio/minimal-skin.tailwind 44.50 kB 42.70 kB -1.80 kB (-4.0%) +2.34 kB
/audio/player 6.99 kB 6.99 kB 0 B (0%) +2.34 kB
/audio/skin 47.69 kB 46.09 kB -1.60 kB (-3.4%) +2.34 kB
/audio/skin.tailwind 48.21 kB 46.59 kB -1.62 kB (-3.4%) +2.34 kB
/background/player 5.32 kB 5.32 kB -3 B (-0.1%) +2.34 kB
/live-video/minimal-skin 51.40 kB 50.08 kB -1.31 kB (-2.6%) +2.34 kB
/live-video/minimal-skin.tailwind 52.05 kB 50.62 kB -1.43 kB (-2.7%) +2.34 kB
/live-video/player 9.42 kB 9.43 kB +12 B (+0.1%) +2.34 kB
/live-video/skin 53.95 kB 52.59 kB -1.36 kB (-2.5%) +2.34 kB
/live-video/skin.tailwind 54.55 kB 53.19 kB -1.36 kB (-2.5%) +2.34 kB
/live-audio/minimal-skin 36.16 kB 36.74 kB +592 B (+1.6%) +2.34 kB
/live-audio/minimal-skin.tailwind 35.62 kB 36.22 kB +613 B (+1.7%) +2.34 kB
/live-audio/player 7.01 kB 7.02 kB +1 B (+0.0%) +2.34 kB
/live-audio/skin 40.09 kB 40.67 kB +586 B (+1.4%) +2.34 kB
/live-audio/skin.tailwind 39.64 kB 40.30 kB +679 B (+1.7%) +2.34 kB
/ui/airplay-button 10.81 kB 10.80 kB -9 B (-0.1%) +2.34 kB
/ui/audio-track-radio-group 10.56 kB 10.81 kB +248 B (+2.3%) +2.34 kB
/ui/captions-button 11.07 kB 11.06 kB -13 B (-0.1%) +2.34 kB
/ui/captions-radio-group 10.62 kB 10.87 kB +250 B (+2.3%) +2.34 kB
/ui/cast-button 10.77 kB 10.76 kB -7 B (-0.1%) +2.34 kB
/ui/compounds 35.75 kB 33.85 kB -1.91 kB (-5.3%) +2.34 kB
/ui/controls 8.21 kB 8.21 kB -3 B (-0.0%) +2.34 kB
/ui/error-dialog 11.20 kB 11.28 kB +77 B (+0.7%) +2.34 kB
/ui/fullscreen-button 10.75 kB 10.74 kB -13 B (-0.1%) +2.34 kB
/ui/menu 20.50 kB 17.59 kB -2.91 kB (-14.2%) +2.34 kB
/ui/mute-button 10.75 kB 10.75 kB -2 B (-0.0%) +2.34 kB
/ui/pip-button 10.74 kB 10.73 kB -8 B (-0.1%) +2.34 kB
/ui/play-button 10.73 kB 10.74 kB +7 B (+0.1%) +2.34 kB
/ui/playback-rate-button 10.92 kB 10.92 kB +1 B (+0.0%) +2.34 kB
/ui/playback-rate-radio-group 10.33 kB 10.58 kB +256 B (+2.4%) +2.34 kB
/ui/popover 7.61 kB 7.93 kB +332 B (+4.3%)
/ui/poster 8.40 kB 8.40 kB -1 B (-0.0%) +2.34 kB
/ui/quality-radio-group 11.12 kB 11.36 kB +245 B (+2.2%) +2.34 kB
/ui/seek-button 10.77 kB 10.79 kB +17 B (+0.2%) +2.34 kB
/ui/slider 11.60 kB 11.61 kB +8 B (+0.1%) +2.34 kB
/ui/status-announcer 10.14 kB 10.14 kB +4 B (+0.0%) +2.34 kB
/ui/status-indicator 12.98 kB 13.10 kB +124 B (+0.9%) +2.34 kB
/ui/time 10.32 kB 10.55 kB +232 B (+2.2%) +2.34 kB
/ui/time-slider 14.43 kB 14.53 kB +107 B (+0.7%) +2.34 kB
/ui/tooltip 8.89 kB 9.22 kB +344 B (+3.8%) +2.34 kB
/ui/volume-indicator 13.00 kB 13.12 kB +126 B (+0.9%) +2.34 kB
/ui/volume-slider 12.22 kB 12.20 kB -21 B (-0.2%) +2.34 kB
/media/container 2.58 kB 2.57 kB -10 B (-0.4%) +2.34 kB
/media/hlsjs-video 138.24 kB 140.20 kB +1.96 kB (+1.4%)
/media/mux-audio 139.09 kB 140.92 kB +1.83 kB (+1.3%)
/media/mux-data 154.03 kB 26.69 kB -127.33 kB (-82.7%)
/media/mux-video 139.34 kB 141.13 kB +1.78 kB (+1.3%)
/media/native-hls-video 5.32 kB 7.51 kB +2.19 kB (+41.2%)
/video (default) 55.51 kB 55.00 kB -515 B (-0.9%) +2.34 kB
/video (default + hls) 191.63 kB 193.01 kB +1.38 kB (+0.7%) +2.34 kB
/video (minimal) 55.11 kB 54.61 kB -512 B (-0.9%) +2.34 kB
/video (minimal + hls) 191.36 kB 192.80 kB +1.44 kB (+0.8%) +2.34 kB
/audio (default) 47.70 kB 46.08 kB -1.62 kB (-3.4%) +2.34 kB
/audio (minimal) 43.96 kB 42.23 kB -1.73 kB (-3.9%) +2.34 kB
/background 5.59 kB 5.60 kB +2 B (+0.0%) +2.34 kB
Small changes (18, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/video/minimal-skin.css 5.92 kB 5.90 kB -18 B (-0.3%)
/video/skin.css 5.92 kB 5.90 kB -17 B (-0.3%)
/audio/minimal-skin.css 4.11 kB 4.08 kB -24 B (-0.6%)
/audio/skin.css 4.05 kB 4.02 kB -30 B (-0.7%)
/live-video/minimal-skin.css 5.92 kB 5.90 kB -18 B (-0.3%)
/live-video/skin.css 5.92 kB 5.90 kB -17 B (-0.3%)
/live-audio/minimal-skin.css 4.11 kB 4.08 kB -24 B (-0.6%)
/live-audio/skin.css 4.05 kB 4.02 kB -30 B (-0.7%)
/ui/alert-dialog 4.14 kB 4.20 kB +65 B (+1.5%)
/ui/alert-dialog-title 1.61 kB 1.62 kB +10 B (+0.6%)
/ui/buffering-indicator 8.04 kB 8.04 kB -2 B (-0.0%)
/ui/seek-indicator 12.47 kB 12.61 kB +134 B (+1.0%)
/ui/thumbnail 9.17 kB 9.16 kB -9 B (-0.1%)
/media/dash-video 211.37 kB 211.36 kB -4 B (-0.0%)
/media/simple-hls-audio-only 21.62 kB 21.59 kB -25 B (-0.1%)
/media/simple-hls-video 27.02 kB 27.08 kB +58 B (+0.2%)
/media/vimeo-video 12.57 kB 12.58 kB +6 B (+0.0%)
/media/youtube-video 6.67 kB 6.67 kB +4 B (+0.1%)
Presets (7)
Entry Initial Lazy
/video (default) 55.00 kB 56.93 kB
/video (default + hls) 193.01 kB 56.93 kB
/video (minimal) 54.61 kB 56.93 kB
/video (minimal + hls) 192.80 kB 56.93 kB
/audio (default) 46.08 kB 56.93 kB
/audio (minimal) 42.23 kB 56.93 kB
/background 5.60 kB 56.93 kB
Media (13)
Entry Initial Lazy
/media/background-video 1.14 kB
/media/container 2.57 kB 56.93 kB
/media/dash-video 211.36 kB
/media/google-cast 6.44 kB
/media/hlsjs-video 140.20 kB
/media/mux-audio 140.92 kB
/media/mux-data 26.69 kB
/media/mux-video 141.13 kB
/media/native-hls-video 7.51 kB
/media/simple-hls-audio-only 21.59 kB
/media/simple-hls-video 27.08 kB
/media/vimeo-video 12.58 kB
/media/youtube-video 6.67 kB
Players (5)
Entry Initial Lazy
/video/player 10.01 kB 56.93 kB
/audio/player 6.99 kB 56.93 kB
/background/player 5.32 kB 56.93 kB
/live-video/player 9.43 kB 56.93 kB
/live-audio/player 7.02 kB 56.93 kB
Skins (30)
Entry Type Initial Lazy
/video/minimal-skin.css css 5.90 kB
/video/skin.css css 5.90 kB
/video/minimal-skin js 54.64 kB 56.93 kB
/video/minimal-skin.tailwind js 55.34 kB 56.93 kB
/video/skin js 55.03 kB 56.93 kB
/video/skin.tailwind js 55.68 kB 56.93 kB
/audio/minimal-skin.css css 4.08 kB
/audio/skin.css css 4.02 kB
/audio/minimal-skin js 42.24 kB 56.93 kB
/audio/minimal-skin.tailwind js 42.70 kB 56.93 kB
/audio/skin js 46.09 kB 56.93 kB
/audio/skin.tailwind js 46.59 kB 56.93 kB
/background/skin.css css 133 B
/background/skin js 1.14 kB
/live-video/minimal-skin.css css 5.90 kB
/live-video/skin.css css 5.90 kB
/live-video/minimal-skin js 50.08 kB 56.93 kB
/live-video/minimal-skin.tailwind js 50.62 kB 56.93 kB
/live-video/skin js 52.59 kB 56.93 kB
/live-video/skin.tailwind js 53.19 kB 56.93 kB
/live-audio/minimal-skin.css css 4.08 kB
/live-audio/skin.css css 4.02 kB
/live-audio/minimal-skin js 36.74 kB 56.93 kB
/live-audio/minimal-skin.tailwind js 36.22 kB 56.93 kB
/live-audio/skin js 40.67 kB 56.93 kB
/live-audio/skin.tailwind js 40.30 kB 56.93 kB
/global.css css 183 B
/shared.css css 104 B
/tailwind.css css 161 B
/skin-element js 1.45 kB
UI Components (39)
Entry Initial Lazy
/ui/airplay-button 10.80 kB 56.93 kB
/ui/alert-dialog 4.20 kB
/ui/alert-dialog-close 1.94 kB
/ui/alert-dialog-description 1.61 kB
/ui/alert-dialog-title 1.62 kB
/ui/audio-track-radio-group 10.81 kB 56.93 kB
/ui/buffering-indicator 8.04 kB
/ui/captions-button 11.06 kB 56.93 kB
/ui/captions-radio-group 10.87 kB 56.93 kB
/ui/cast-button 10.76 kB 56.93 kB
/ui/compounds 33.85 kB 56.93 kB
/ui/controls 8.21 kB 56.93 kB
/ui/error-dialog 11.28 kB 56.93 kB
/ui/fullscreen-button 10.74 kB 56.93 kB
/ui/hotkey 9.32 kB
/ui/menu 17.59 kB 56.93 kB
/ui/mute-button 10.75 kB 56.93 kB
/ui/pip-button 10.73 kB 56.93 kB
/ui/play-button 10.74 kB 56.93 kB
/ui/playback-rate-button 10.92 kB 56.93 kB
/ui/playback-rate-radio-group 10.58 kB 56.93 kB
/ui/popover 7.93 kB
/ui/poster 8.40 kB 56.93 kB
/ui/quality-radio-group 11.36 kB 56.93 kB
/ui/seek-button 10.79 kB 56.93 kB
/ui/seek-indicator 12.61 kB
/ui/seek-indicator-value 1.02 kB
/ui/slider 11.61 kB 56.93 kB
/ui/status-announcer 10.14 kB 56.93 kB
/ui/status-indicator 13.10 kB 56.93 kB
/ui/status-indicator-value 1.02 kB
/ui/thumbnail 9.16 kB
/ui/time 10.55 kB 56.93 kB
/ui/time-slider 14.53 kB 56.93 kB
/ui/tooltip 9.22 kB 56.93 kB
/ui/volume-indicator 13.12 kB 56.93 kB
/ui/volume-indicator-fill 1.03 kB
/ui/volume-indicator-value 1.02 kB
/ui/volume-slider 12.20 kB 56.93 kB

⚛️ @videojs/react

Path Base initial PR initial Initial diff Lazy diff
/media/hlsjs-video 136.61 kB 138.60 kB +2.00 kB (+1.5%)
/media/mux-audio 137.47 kB 139.38 kB +1.90 kB (+1.4%)
/media/mux-data 152.88 kB 25.47 kB -127.41 kB (-83.3%)
/media/mux-video 137.52 kB 139.43 kB +1.91 kB (+1.4%)
/media/native-hls-video 3.53 kB 5.75 kB +2.22 kB (+62.9%)
/video/minimal-skin 43.37 kB 42.44 kB -952 B (-2.1%) +2.34 kB
/video/minimal-skin.tailwind 49.60 kB 48.60 kB -1023 B (-2.0%) +2.34 kB
/video/skin 43.29 kB 42.34 kB -968 B (-2.2%) +2.34 kB
/video/skin.tailwind 49.50 kB 48.63 kB -888 B (-1.8%) +2.34 kB
/audio/minimal-skin 35.65 kB 33.44 kB -2.21 kB (-6.2%) +2.34 kB
/audio/minimal-skin.tailwind 38.20 kB 35.94 kB -2.27 kB (-5.9%) +2.34 kB
/audio/skin 35.59 kB 33.43 kB -2.16 kB (-6.1%) +2.34 kB
/audio/skin.tailwind 40.00 kB 37.73 kB -2.27 kB (-5.7%) +2.34 kB
/live-video/minimal-skin 38.46 kB 36.33 kB -2.13 kB (-5.5%) +2.34 kB
/live-video/minimal-skin.tailwind 44.66 kB 42.48 kB -2.18 kB (-4.9%) +2.34 kB
/live-video/skin 38.48 kB 36.30 kB -2.17 kB (-5.6%) +2.34 kB
/live-video/skin.tailwind 44.75 kB 42.56 kB -2.19 kB (-4.9%) +2.34 kB
/live-audio/minimal-skin 26.40 kB 26.56 kB +162 B (+0.6%) +2.34 kB
/live-audio/minimal-skin.tailwind 29.68 kB 29.81 kB +134 B (+0.4%) +2.34 kB
/live-audio/skin 26.44 kB 26.67 kB +240 B (+0.9%) +2.34 kB
/live-audio/skin.tailwind 29.83 kB 29.99 kB +158 B (+0.5%) +2.34 kB
/ui/airplay-button 10.04 kB 10.02 kB -23 B (-0.2%) +2.34 kB
/ui/audio-track 7.49 kB 7.51 kB +16 B (+0.2%) +2.34 kB
/ui/captions-button 10.01 kB 10.00 kB -13 B (-0.1%) +2.34 kB
/ui/captions-radio-group 7.62 kB 7.64 kB +27 B (+0.3%) +2.34 kB
/ui/cast-button 10.02 kB 10.00 kB -27 B (-0.3%) +2.34 kB
/ui/error-dialog 9.99 kB 10.06 kB +78 B (+0.8%) +2.34 kB
/ui/fullscreen-button 9.98 kB 9.96 kB -13 B (-0.1%) +2.34 kB
/ui/live-button 8.42 kB 8.41 kB -8 B (-0.1%) +2.34 kB
/ui/menu 20.61 kB 16.83 kB -3.79 kB (-18.4%) -54.60 kB
/ui/mute-button 9.97 kB 9.96 kB -18 B (-0.2%) +2.34 kB
/ui/pip-button 9.97 kB 9.96 kB -15 B (-0.1%) +2.34 kB
/ui/play-button 9.96 kB 9.94 kB -17 B (-0.2%) +2.34 kB
/ui/playback-rate-button 9.96 kB 9.94 kB -14 B (-0.1%) +2.34 kB
/ui/quality 8.01 kB 8.03 kB +22 B (+0.3%) +2.34 kB
/ui/seek-button 9.99 kB 9.97 kB -22 B (-0.2%) +2.34 kB
/ui/slider 11.96 kB 11.95 kB -10 B (-0.1%) +2.34 kB
/ui/status-announcer 9.66 kB 9.69 kB +28 B (+0.3%) +2.34 kB
/ui/status-indicator 12.24 kB 12.35 kB +114 B (+0.9%) +2.34 kB
/ui/time 9.28 kB 9.48 kB +198 B (+2.1%) +2.34 kB
/ui/time-slider 12.01 kB 12.08 kB +72 B (+0.6%) +2.34 kB
/ui/volume-indicator 12.34 kB 12.44 kB +103 B (+0.8%) +2.34 kB
/ui/volume-slider 11.40 kB 11.40 kB -1 B (-0.0%) +2.34 kB
/video (default) 43.32 kB 42.43 kB -919 B (-2.1%) +2.34 kB
/video (default + hls) 178.34 kB 179.47 kB +1.13 kB (+0.6%) +2.34 kB
/video (minimal) 43.42 kB 42.45 kB -991 B (-2.2%) +2.34 kB
/video (minimal + hls) 178.37 kB 179.44 kB +1.07 kB (+0.6%) +2.34 kB
/audio (default) 35.68 kB 33.52 kB -2.16 kB (-6.1%) +2.34 kB
/audio (minimal) 35.77 kB 33.54 kB -2.22 kB (-6.2%) +2.34 kB
Small changes (25, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/media/dash-video 209.61 kB 209.68 kB +66 B (+0.0%)
/media/simple-hls-audio-only 19.88 kB 19.89 kB +8 B (+0.0%)
/media/simple-hls-video 25.36 kB 25.41 kB +50 B (+0.2%)
/media/vimeo-video 10.76 kB 10.75 kB -1 B (-0.0%)
/media/youtube-video 4.78 kB 4.78 kB +7 B (+0.1%)
/video/minimal-skin.css 5.81 kB 5.79 kB -18 B (-0.3%)
/video/skin.css 5.81 kB 5.80 kB -14 B (-0.2%)
/audio/minimal-skin.css 3.97 kB 3.94 kB -31 B (-0.8%)
/audio/skin.css 3.90 kB 3.87 kB -28 B (-0.7%)
/background/skin 272 B 273 B +1 B (+0.4%)
/live-video/minimal-skin.css 5.81 kB 5.79 kB -18 B (-0.3%)
/live-video/skin.css 5.81 kB 5.80 kB -14 B (-0.2%)
/live-audio/minimal-skin.css 3.97 kB 3.94 kB -31 B (-0.8%)
/live-audio/skin.css 3.90 kB 3.87 kB -28 B (-0.7%)
/ui/alert-dialog 3.25 kB 3.32 kB +65 B (+2.0%)
/ui/buffering-indicator 7.26 kB 7.27 kB +4 B (+0.1%)
/ui/controls 6.98 kB 6.97 kB -1 B (-0.0%)
/ui/gesture 7.37 kB 7.37 kB -1 B (-0.0%)
/ui/hotkey 7.82 kB 7.82 kB +3 B (+0.0%)
/ui/playback-rate 6.79 kB 6.80 kB +11 B (+0.2%)
/ui/popover 7.47 kB 7.63 kB +167 B (+2.2%)
/ui/poster 6.86 kB 6.87 kB +9 B (+0.1%)
/ui/seek-indicator 11.77 kB 11.88 kB +113 B (+0.9%)
/ui/thumbnail 8.07 kB 8.07 kB -2 B (-0.0%)
/ui/tooltip 8.22 kB 8.35 kB +133 B (+1.6%)
Presets (7)
Entry Initial Lazy
/video (default) 42.43 kB 56.93 kB
/video (default + hls) 179.47 kB 56.93 kB
/video (minimal) 42.45 kB 56.93 kB
/video (minimal + hls) 179.44 kB 56.93 kB
/audio (default) 33.52 kB 56.93 kB
/audio (minimal) 33.54 kB 56.93 kB
/background 581 B
Media (12)
Entry Initial
/media/background-video 394 B
/media/dash-video 209.68 kB
/media/google-cast 5.34 kB
/media/hlsjs-video 138.60 kB
/media/mux-audio 139.38 kB
/media/mux-data 25.47 kB
/media/mux-video 139.43 kB
/media/native-hls-video 5.75 kB
/media/simple-hls-audio-only 19.89 kB
/media/simple-hls-video 25.41 kB
/media/vimeo-video 10.75 kB
/media/youtube-video 4.78 kB
Skins (27)
Entry Type Initial Lazy
/tailwind.css css 161 B
/video/minimal-skin.css css 5.79 kB
/video/skin.css css 5.80 kB
/video/minimal-skin js 42.44 kB 56.93 kB
/video/minimal-skin.tailwind js 48.60 kB 56.93 kB
/video/skin js 42.34 kB 56.93 kB
/video/skin.tailwind js 48.63 kB 56.93 kB
/audio/minimal-skin.css css 3.94 kB
/audio/skin.css css 3.87 kB
/audio/minimal-skin js 33.44 kB 56.93 kB
/audio/minimal-skin.tailwind js 35.94 kB 56.93 kB
/audio/skin js 33.43 kB 56.93 kB
/audio/skin.tailwind js 37.73 kB 56.93 kB
/background/skin.css css 90 B
/background/skin js 273 B
/live-video/minimal-skin.css css 5.79 kB
/live-video/skin.css css 5.80 kB
/live-video/minimal-skin js 36.33 kB 56.93 kB
/live-video/minimal-skin.tailwind js 42.48 kB 56.93 kB
/live-video/skin js 36.30 kB 56.93 kB
/live-video/skin.tailwind js 42.56 kB 56.93 kB
/live-audio/minimal-skin.css css 3.94 kB
/live-audio/skin.css css 3.87 kB
/live-audio/minimal-skin js 26.56 kB 56.93 kB
/live-audio/minimal-skin.tailwind js 29.81 kB 56.93 kB
/live-audio/skin js 26.67 kB 56.93 kB
/live-audio/skin.tailwind js 29.99 kB 56.93 kB
UI Components (33)
Entry Initial Lazy
/ui/airplay-button 10.02 kB 56.93 kB
/ui/alert-dialog 3.32 kB
/ui/audio-track 7.51 kB 56.93 kB
/ui/buffering-indicator 7.27 kB
/ui/captions-button 10.00 kB 56.93 kB
/ui/captions-radio-group 7.64 kB 56.93 kB
/ui/cast-button 10.00 kB 56.93 kB
/ui/controls 6.97 kB
/ui/error-dialog 10.06 kB 56.93 kB
/ui/fullscreen-button 9.96 kB 56.93 kB
/ui/gesture 7.37 kB
/ui/hotkey 7.82 kB
/ui/live-button 8.41 kB 56.93 kB
/ui/menu 16.83 kB
/ui/mute-button 9.96 kB 56.93 kB
/ui/pip-button 9.96 kB 56.93 kB
/ui/play-button 9.94 kB 56.93 kB
/ui/playback-rate 6.80 kB
/ui/playback-rate-button 9.94 kB 56.93 kB
/ui/popover 7.63 kB
/ui/poster 6.87 kB
/ui/quality 8.03 kB 56.93 kB
/ui/seek-button 9.97 kB 56.93 kB
/ui/seek-indicator 11.88 kB
/ui/slider 11.95 kB 56.93 kB
/ui/status-announcer 9.69 kB 56.93 kB
/ui/status-indicator 12.35 kB 56.93 kB
/ui/thumbnail 8.07 kB
/ui/time 9.48 kB 56.93 kB
/ui/time-slider 12.08 kB 56.93 kB
/ui/tooltip 8.35 kB
/ui/volume-indicator 12.44 kB 56.93 kB
/ui/volume-slider 11.40 kB 56.93 kB

🧩 @videojs/core

Path Base initial PR initial Initial diff Lazy diff
/dom 20.00 kB 19.30 kB -715 B (-3.5%)
/i18n 3.06 kB 3.11 kB +49 B (+1.6%) +2.34 kB
/i18n/locales/all 33.25 kB 35.05 kB +1.79 kB (+5.4%)
Small changes (56, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
. 11.61 kB 11.77 kB +158 B (+1.3%)
/i18n/locales/ar 1.17 kB 1.22 kB +48 B (+4.0%)
/i18n/locales/az 1.07 kB 1.09 kB +28 B (+2.6%)
/i18n/locales/bg 1.24 kB 1.29 kB +52 B (+4.1%)
/i18n/locales/bn 1.26 kB 1.28 kB +26 B (+2.0%)
/i18n/locales/bs 971 B 1.00 kB +56 B (+5.8%)
/i18n/locales/ca 1.03 kB 1.07 kB +41 B (+3.9%)
/i18n/locales/cs 1.01 kB 1.07 kB +61 B (+5.9%)
/i18n/locales/cy 1005 B 1.02 kB +43 B (+4.3%)
/i18n/locales/da 964 B 1006 B +42 B (+4.4%)
/i18n/locales/de 1.05 kB 1.09 kB +43 B (+4.0%)
/i18n/locales/el 1.42 kB 1.49 kB +66 B (+4.5%)
/i18n/locales/en 753 B 785 B +32 B (+4.2%)
/i18n/locales/es 981 B 1018 B +37 B (+3.8%)
/i18n/locales/et 1.01 kB 1.05 kB +41 B (+4.0%)
/i18n/locales/eu 1001 B 1.03 kB +50 B (+5.0%)
/i18n/locales/fa 1.17 kB 1.22 kB +58 B (+4.9%)
/i18n/locales/fi 1015 B 1.04 kB +52 B (+5.1%)
/i18n/locales/fr 1.03 kB 1.07 kB +38 B (+3.6%)
/i18n/locales/gd 1.05 kB 1.10 kB +45 B (+4.2%)
/i18n/locales/gl 978 B 1022 B +44 B (+4.5%)
/i18n/locales/he 1.09 kB 1.14 kB +50 B (+4.5%)
/i18n/locales/hi 1.26 kB 1.30 kB +36 B (+2.8%)
/i18n/locales/hr 998 B 1.02 kB +49 B (+4.9%)
/i18n/locales/hu 1.04 kB 1.10 kB +54 B (+5.0%)
/i18n/locales/id 879 B 919 B +40 B (+4.6%)
/i18n/locales/it 995 B 1.01 kB +43 B (+4.3%)
/i18n/locales/ja 1.15 kB 1.18 kB +34 B (+2.9%)
/i18n/locales/ko 1.10 kB 1.14 kB +40 B (+3.6%)
/i18n/locales/lt 997 B 1.02 kB +44 B (+4.4%)
/i18n/locales/lv 1.04 kB 1.09 kB +53 B (+5.0%)
/i18n/locales/mr 1.27 kB 1.30 kB +39 B (+3.0%)
/i18n/locales/nb 948 B 987 B +39 B (+4.1%)
/i18n/locales/ne 1.25 kB 1.29 kB +40 B (+3.1%)
/i18n/locales/nl 986 B 1.00 kB +38 B (+3.9%)
/i18n/locales/nn 956 B 987 B +31 B (+3.2%)
/i18n/locales/oc 1.04 kB 1.08 kB +47 B (+4.4%)
/i18n/locales/pl 1.08 kB 1.14 kB +66 B (+6.0%)
/i18n/locales/pt 1008 B 1.03 kB +44 B (+4.4%)
/i18n/locales/pt-BR 1008 B 1.03 kB +44 B (+4.4%)
/i18n/locales/pt-PT 993 B 1.01 kB +44 B (+4.4%)
/i18n/locales/ro 1.02 kB 1.07 kB +45 B (+4.3%)
/i18n/locales/ru 1.33 kB 1.40 kB +70 B (+5.2%)
/i18n/locales/sk 1.05 kB 1.10 kB +53 B (+4.9%)
/i18n/locales/sl 1008 B 1.04 kB +55 B (+5.5%)
/i18n/locales/sr 1.02 kB 1.07 kB +52 B (+5.0%)
/i18n/locales/sv 986 B 1.01 kB +48 B (+4.9%)
/i18n/locales/te 1.28 kB 1.32 kB +44 B (+3.4%)
/i18n/locales/th 1.24 kB 1.29 kB +50 B (+3.9%)
/i18n/locales/tr 1.03 kB 1.08 kB +43 B (+4.1%)
/i18n/locales/uk 1.34 kB 1.41 kB +69 B (+5.0%)
/i18n/locales/vi 1.05 kB 1.11 kB +55 B (+5.1%)
/i18n/locales/zh 987 B 1.02 kB +55 B (+5.6%)
/i18n/locales/zh-CN 987 B 1.02 kB +55 B (+5.6%)
/i18n/locales/zh-TW 987 B 1.02 kB +53 B (+5.4%)
/i18n/text/time 214 B 280 B +66 B (+30.8%)
Entries (76)
Entry Initial Lazy
. 11.77 kB
/dom 19.30 kB
/components 900 B
/i18n 3.11 kB 56.93 kB
/i18n/locales/all 35.05 kB
/i18n/locales/ar 1.22 kB
/i18n/locales/az 1.09 kB
/i18n/locales/bg 1.29 kB
/i18n/locales/bn 1.28 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 — 1 small size change
Path Base initial PR initial Initial diff Lazy diff
. 1.72 kB 1.71 kB -1 B (-0.1%)
Entries (3)
Entry Initial
. 1.71 kB
/html 703 B
/react 366 B
🔧 @videojs/utils — 4 small size changes
Path Base initial PR initial Initial diff Lazy diff
/events 319 B 320 B +1 B (+0.3%)
/predicate 265 B 297 B +32 B (+12.1%)
/style 190 B 188 B -2 B (-1.1%)
/time 1013 B 1.01 kB +26 B (+2.6%)
Entries (13)
Entry Initial
/array 104 B
/dom 3.29 kB
/events 320 B
/function 369 B
/i18n 44 B
/jwt 176 B
/object 508 B
/predicate 297 B
/percent 281 B
/string 239 B
/style 188 B
/time 1.01 kB
/number 158 B
📦 @videojs/jsx — no changes
Entries (3)
Entry Initial
. 393 B
/jsx-runtime 371 B
/jsx-dev-runtime 375 B

📦 @videojs/media

Path Base initial PR initial Initial diff Lazy diff
/dom 121 B new
/dom/hls-js 136.18 kB 138.13 kB +1.95 kB (+1.4%)
/dom/mux 159.49 kB 161.61 kB +2.12 kB (+1.3%)
/dom/native-hls 3.01 kB 5.26 kB +2.25 kB (+74.7%)
/media-tracks 1.98 kB new
/dom/simple-hls 24.87 kB removed
/dom/simple-hls-audio-only 19.37 kB removed
Small changes (4, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
. 993 B 1.04 kB +70 B (+7.0%)
/dom/dash 209.25 kB 209.38 kB +133 B (+0.1%)
/dom/vimeo 10.19 kB 10.19 kB -2 B (-0.0%)
/dom/youtube 4.16 kB 4.17 kB +9 B (+0.2%)
Entries (15)
Entry Initial
. 1.04 kB
/dom 121 B
/dom/audio-host 1.10 kB
/dom/custom-media-element 2.09 kB
/dom/dash 209.38 kB
/dom/google-cast 4.06 kB
/dom/hls-js 138.13 kB
/dom/media-host 1.20 kB
/dom/media-played-ranges 576 B
/dom/mux 161.61 kB
/dom/native-hls 5.26 kB
/dom/video-host 1.39 kB
/dom/vimeo 10.19 kB
/dom/youtube 4.17 kB
/media-tracks 1.98 kB

📦 @videojs/spf

Path Base initial PR initial Initial diff Lazy diff
/hls 21.67 kB 20.86 kB -833 B (-3.8%)
/simple-hls 24.92 kB new
/simple-hls-audio-only 19.39 kB new
Small changes (1, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/background-video 14.79 kB 14.77 kB -29 B (-0.2%)
Entries (7)
Entry Initial
. 4.53 kB
/dom 6.57 kB
/hls 20.86 kB
/media-tracks 504 B
/background-video 14.77 kB
/simple-hls 24.92 kB
/simple-hls-audio-only 19.39 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 changed the title refactor(packages)!: simplify menu composition refactor(packages)!: simplify menus Aug 11, 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.

1 participant