Skip to content

feat(packages): add chapter slider components - #1980

Closed
sampotts wants to merge 1 commit into
mainfrom
feat/chapters
Closed

feat(packages): add chapter slider components#1980
sampotts wants to merge 1 commit into
mainfrom
feat/chapters

Conversation

@sampotts

@sampotts sampotts commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds the reusable chapter slider foundation across core, React, and HTML. The way it works is:

  • Chapters are sourced from a .vtt file and read through the same logic as thumbnails.
  • Added a Slider.Segments generic component and connected TimeSlider.Segments component which pulls the above chapters and renders the segments using SVG rect elements.
  • Added a Slider.Chapter component that renders the current chapter for the pointer position. I was torn between this name and TimeSlider.Chapter as we have a bit of a mix with Slider.Thumbnail. Happy to be swayed in either direction.

Closes #1843

Decisions made

  • Currently it's garbage in, garbage out in that if the chapters don't span the whole timeline, they only see the specified chapters. We could fill the gaps with unknown chapters but I figured this would be a bit odd. Open to ideas.

Changes

  • Add generic slider segment and chapter primitives with shared timeline lookup logic.
  • Add React and HTML components, including connected time-slider segments and text-track access.
  • Add dynamic slider clip paths, orientation support, and segment highlighting state.
  • Add focused core, React, HTML, and HLS text-track coverage.

Testing

  • pnpm -F @videojs/core test
  • pnpm -F @videojs/html test
  • pnpm -F @videojs/react test
  • pnpm -F @videojs/media test metadata-tracks
  • pnpm typecheck

The skin and sandbox implementation is split into stacked follow-up PR #2002.


Note

Medium Risk
Touches shared slider pointer handling and text-track selection used by thumbnails and time sliders; behavior changes are covered by tests but affect all slider types.

Overview
Adds chapter-aware time slider UI across core, DOM, React, and HTML: segmented tracks from chapter VTT cues, pointer chapter titles, and shared text-track selection.

Slider segments & chapters — New SliderSegmentsCore / SliderChapterCore turn value-domain ranges and chapter cues into percentage geometry and titles. getChapterSegments fills gaps between cues with non-highlighted ranges. Segments render as an SVG clip path wired through --media-slider-clip-path on the slider root; pointer-hover highlights the active segment via data-highlighted.

Framework components — Generic Slider.Segments / Slider.Chapter (React + media-slider-* custom elements) and connected TimeSlider.Segments that pull the first chapters track from player state. Slider context now exposes id, min, max, and setTrackClipPath.

Text tracksgetTextTrack, createTextTrackSelector, and React useTextTrack return normalized cues and src (chapters + thumbnail metadata). Thumbnails use the same selector path instead of ad hoc feature fields.

Other — Shared findTimelineEntry replaces duplicate binary search in thumbnail lookup. DOM slider pointer-up keeps pointing true for mouse release inside the track (for segment/chapter preview) but clears it for outside release and touch. HLS.js mixin sets default chapters tracks to hidden so cues are available without showing native chapter UI.

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

@netlify

netlify Bot commented Aug 6, 2026

Copy link
Copy Markdown

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit b869814
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/6a792949b33bb30008b72c2e
😎 Deploy Preview https://deploy-preview-1980--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 6, 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 10, 2026 1:29am

Request Review

@github-actions

github-actions Bot commented Aug 6, 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 56.32 kB +1.13 kB (+2.0%) 0 B
/video/minimal-skin.tailwind 55.70 kB 56.86 kB +1.17 kB (+2.1%) 0 B
/video/skin 55.46 kB 56.66 kB +1.21 kB (+2.2%) 0 B
/video/skin.tailwind 56.21 kB 57.31 kB +1.10 kB (+2.0%) 0 B
/audio/minimal-skin 43.92 kB 45.08 kB +1.15 kB (+2.6%) 0 B
/audio/minimal-skin.tailwind 44.50 kB 45.60 kB +1.10 kB (+2.5%) 0 B
/audio/skin 47.69 kB 48.85 kB +1.16 kB (+2.4%) 0 B
/audio/skin.tailwind 48.21 kB 49.31 kB +1.09 kB (+2.3%) 0 B
/live-video/minimal-skin 51.40 kB 52.61 kB +1.22 kB (+2.4%) 0 B
/live-video/minimal-skin.tailwind 52.05 kB 53.14 kB +1.09 kB (+2.1%) 0 B
/live-video/skin 53.95 kB 55.09 kB +1.14 kB (+2.1%) 0 B
/live-video/skin.tailwind 54.55 kB 55.66 kB +1.11 kB (+2.0%) 0 B
/live-audio/minimal-skin 36.16 kB 37.35 kB +1.19 kB (+3.3%) 0 B
/live-audio/minimal-skin.tailwind 35.62 kB 36.79 kB +1.17 kB (+3.3%) 0 B
/live-audio/skin 40.09 kB 41.25 kB +1.16 kB (+2.9%) 0 B
/live-audio/skin.tailwind 39.64 kB 40.80 kB +1.17 kB (+2.9%) 0 B
/ui/compounds 35.75 kB 36.96 kB +1.21 kB (+3.4%) 0 B
/ui/slider 11.60 kB 12.45 kB +872 B (+7.3%) 0 B
/ui/slider-chapter 7.88 kB new
/ui/slider-segments 2.47 kB new
/ui/time-slider 14.43 kB 15.58 kB +1.15 kB (+8.0%) 0 B
/ui/time-slider-segments 8.65 kB new
/ui/volume-slider 12.22 kB 13.03 kB +833 B (+6.7%) 0 B
/video (default) 55.51 kB 56.63 kB +1.13 kB (+2.0%) 0 B
/video (default + hls) 191.63 kB 192.86 kB +1.23 kB (+0.6%) 0 B
/video (minimal) 55.11 kB 56.23 kB +1.13 kB (+2.0%) 0 B
/video (minimal + hls) 191.36 kB 192.39 kB +1.03 kB (+0.5%) 0 B
/audio (default) 47.70 kB 48.87 kB +1.17 kB (+2.4%) 0 B
/audio (minimal) 43.96 kB 45.07 kB +1.11 kB (+2.5%) 0 B
Small changes (29, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/video/player 10.01 kB 10.01 kB -5 B (-0.0%) 0 B
/live-video/player 9.42 kB 9.42 kB -5 B (-0.1%) 0 B
/ui/airplay-button 10.81 kB 10.79 kB -20 B (-0.2%) 0 B
/ui/alert-dialog 4.14 kB 4.13 kB -13 B (-0.3%)
/ui/audio-track-radio-group 10.56 kB 10.56 kB -1 B (-0.0%) 0 B
/ui/buffering-indicator 8.04 kB 8.04 kB -8 B (-0.1%)
/ui/captions-button 11.07 kB 11.05 kB -17 B (-0.1%) 0 B
/ui/cast-button 10.77 kB 10.76 kB -8 B (-0.1%) 0 B
/ui/controls 8.21 kB 8.20 kB -10 B (-0.1%) 0 B
/ui/error-dialog 11.20 kB 11.20 kB -5 B (-0.0%) 0 B
/ui/fullscreen-button 10.75 kB 10.74 kB -14 B (-0.1%) 0 B
/ui/hotkey 9.32 kB 9.31 kB -4 B (-0.0%)
/ui/menu 20.50 kB 20.45 kB -56 B (-0.3%) 0 B
/ui/mute-button 10.75 kB 10.75 kB +5 B (+0.0%) 0 B
/ui/pip-button 10.74 kB 10.74 kB -3 B (-0.0%) 0 B
/ui/play-button 10.73 kB 10.74 kB +6 B (+0.1%) 0 B
/ui/playback-rate-button 10.92 kB 10.93 kB +9 B (+0.1%) 0 B
/ui/playback-rate-radio-group 10.33 kB 10.34 kB +2 B (+0.0%) 0 B
/ui/popover 7.61 kB 7.60 kB -10 B (-0.1%)
/ui/poster 8.40 kB 8.39 kB -10 B (-0.1%) 0 B
/ui/quality-radio-group 11.12 kB 11.10 kB -20 B (-0.2%) 0 B
/ui/seek-button 10.77 kB 10.78 kB +6 B (+0.1%) 0 B
/ui/status-announcer 10.14 kB 10.13 kB -10 B (-0.1%) 0 B
/ui/status-indicator 12.98 kB 12.97 kB -11 B (-0.1%) 0 B
/ui/thumbnail 9.17 kB 9.31 kB +143 B (+1.5%)
/ui/time 10.32 kB 10.31 kB -11 B (-0.1%) 0 B
/ui/volume-indicator 13.00 kB 13.00 kB +5 B (+0.0%) 0 B
/media/container 2.58 kB 2.58 kB +1 B (+0.0%) 0 B
/background 5.59 kB 5.59 kB -5 B (-0.1%) 0 B
Presets (7)
Entry Initial Lazy
/video (default) 56.63 kB 54.60 kB
/video (default + hls) 192.86 kB 54.60 kB
/video (minimal) 56.23 kB 54.60 kB
/video (minimal + hls) 192.39 kB 54.60 kB
/audio (default) 48.87 kB 54.60 kB
/audio (minimal) 45.07 kB 54.60 kB
/background 5.59 kB 54.60 kB
Media (13)
Entry Initial Lazy
/media/background-video 1.14 kB
/media/container 2.58 kB 54.60 kB
/media/dash-video 211.37 kB
/media/google-cast 6.44 kB
/media/hlsjs-video 138.24 kB
/media/mux-audio 139.09 kB
/media/mux-data 154.03 kB
/media/mux-video 139.34 kB
/media/native-hls-video 5.32 kB
/media/simple-hls-audio-only 21.62 kB
/media/simple-hls-video 27.02 kB
/media/vimeo-video 12.57 kB
/media/youtube-video 6.67 kB
Players (5)
Entry Initial Lazy
/video/player 10.01 kB 54.60 kB
/audio/player 6.99 kB 54.60 kB
/background/player 5.32 kB 54.60 kB
/live-video/player 9.42 kB 54.60 kB
/live-audio/player 7.01 kB 54.60 kB
Skins (30)
Entry Type Initial Lazy
/video/minimal-skin.css css 5.92 kB
/video/skin.css css 5.92 kB
/video/minimal-skin js 56.32 kB 54.60 kB
/video/minimal-skin.tailwind js 56.86 kB 54.60 kB
/video/skin js 56.66 kB 54.60 kB
/video/skin.tailwind js 57.31 kB 54.60 kB
/audio/minimal-skin.css css 4.11 kB
/audio/skin.css css 4.05 kB
/audio/minimal-skin js 45.08 kB 54.60 kB
/audio/minimal-skin.tailwind js 45.60 kB 54.60 kB
/audio/skin js 48.85 kB 54.60 kB
/audio/skin.tailwind js 49.31 kB 54.60 kB
/background/skin.css css 133 B
/background/skin js 1.14 kB
/live-video/minimal-skin.css css 5.92 kB
/live-video/skin.css css 5.92 kB
/live-video/minimal-skin js 52.61 kB 54.60 kB
/live-video/minimal-skin.tailwind js 53.14 kB 54.60 kB
/live-video/skin js 55.09 kB 54.60 kB
/live-video/skin.tailwind js 55.66 kB 54.60 kB
/live-audio/minimal-skin.css css 4.11 kB
/live-audio/skin.css css 4.05 kB
/live-audio/minimal-skin js 37.35 kB 54.60 kB
/live-audio/minimal-skin.tailwind js 36.79 kB 54.60 kB
/live-audio/skin js 41.25 kB 54.60 kB
/live-audio/skin.tailwind js 40.80 kB 54.60 kB
/global.css css 183 B
/shared.css css 104 B
/tailwind.css css 161 B
/skin-element js 1.45 kB
UI Components (42)
Entry Initial Lazy
/ui/airplay-button 10.79 kB 54.60 kB
/ui/alert-dialog 4.13 kB
/ui/alert-dialog-close 1.94 kB
/ui/alert-dialog-description 1.61 kB
/ui/alert-dialog-title 1.61 kB
/ui/audio-track-radio-group 10.56 kB 54.60 kB
/ui/buffering-indicator 8.04 kB
/ui/captions-button 11.05 kB 54.60 kB
/ui/captions-radio-group 10.62 kB 54.60 kB
/ui/cast-button 10.76 kB 54.60 kB
/ui/compounds 36.96 kB 54.60 kB
/ui/controls 8.20 kB 54.60 kB
/ui/error-dialog 11.20 kB 54.60 kB
/ui/fullscreen-button 10.74 kB 54.60 kB
/ui/hotkey 9.31 kB
/ui/menu 20.45 kB 54.60 kB
/ui/mute-button 10.75 kB 54.60 kB
/ui/pip-button 10.74 kB 54.60 kB
/ui/play-button 10.74 kB 54.60 kB
/ui/playback-rate-button 10.93 kB 54.60 kB
/ui/playback-rate-radio-group 10.34 kB 54.60 kB
/ui/popover 7.60 kB
/ui/poster 8.39 kB 54.60 kB
/ui/quality-radio-group 11.10 kB 54.60 kB
/ui/seek-button 10.78 kB 54.60 kB
/ui/seek-indicator 12.47 kB
/ui/seek-indicator-value 1.02 kB
/ui/slider 12.45 kB 54.60 kB
/ui/slider-chapter 7.88 kB
/ui/slider-segments 2.47 kB
/ui/status-announcer 10.13 kB 54.60 kB
/ui/status-indicator 12.97 kB 54.60 kB
/ui/status-indicator-value 1.02 kB
/ui/thumbnail 9.31 kB
/ui/time 10.31 kB 54.60 kB
/ui/time-slider 15.58 kB 54.60 kB
/ui/time-slider-segments 8.65 kB
/ui/tooltip 8.89 kB 54.60 kB
/ui/volume-indicator 13.00 kB 54.60 kB
/ui/volume-indicator-fill 1.03 kB
/ui/volume-indicator-value 1.02 kB
/ui/volume-slider 13.03 kB 54.60 kB

⚛️ @videojs/react

Path Base initial PR initial Initial diff Lazy diff
/video/minimal-skin.tailwind 49.60 kB 49.90 kB +306 B (+0.6%) 0 B
/video/skin.tailwind 49.50 kB 49.80 kB +307 B (+0.6%) 0 B
/ui/slider 11.96 kB 12.92 kB +976 B (+8.0%) 0 B
/ui/time-slider 12.01 kB 12.95 kB +966 B (+7.9%) 0 B
/video (default) 43.32 kB 43.68 kB +368 B (+0.8%) 0 B
/video (minimal + hls) 178.37 kB 178.77 kB +408 B (+0.2%) 0 B
Small changes (47, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/video/minimal-skin 43.37 kB 43.59 kB +223 B (+0.5%) 0 B
/video/skin 43.29 kB 43.53 kB +250 B (+0.6%) 0 B
/audio/minimal-skin 35.65 kB 35.82 kB +177 B (+0.5%) 0 B
/audio/minimal-skin.tailwind 38.20 kB 38.31 kB +109 B (+0.3%) 0 B
/audio/skin 35.59 kB 35.73 kB +142 B (+0.4%) 0 B
/audio/skin.tailwind 40.00 kB 40.12 kB +127 B (+0.3%) 0 B
/live-video/minimal-skin 38.46 kB 38.60 kB +140 B (+0.4%) 0 B
/live-video/minimal-skin.tailwind 44.66 kB 44.78 kB +118 B (+0.3%) 0 B
/live-video/skin 38.48 kB 38.61 kB +138 B (+0.4%) 0 B
/live-video/skin.tailwind 44.75 kB 44.88 kB +142 B (+0.3%) 0 B
/live-audio/minimal-skin 26.40 kB 26.50 kB +109 B (+0.4%) 0 B
/live-audio/minimal-skin.tailwind 29.68 kB 29.79 kB +113 B (+0.4%) 0 B
/live-audio/skin 26.44 kB 26.54 kB +103 B (+0.4%) 0 B
/live-audio/skin.tailwind 29.83 kB 29.95 kB +122 B (+0.4%) 0 B
/ui/airplay-button 10.04 kB 10.04 kB -3 B (-0.0%) 0 B
/ui/alert-dialog 3.25 kB 3.25 kB -7 B (-0.2%)
/ui/audio-track 7.49 kB 7.48 kB -9 B (-0.1%) 0 B
/ui/buffering-indicator 7.26 kB 7.26 kB -1 B (-0.0%)
/ui/captions-button 10.01 kB 10.02 kB +13 B (+0.1%) 0 B
/ui/captions-radio-group 7.62 kB 7.63 kB +9 B (+0.1%) 0 B
/ui/cast-button 10.02 kB 10.01 kB -15 B (-0.1%) 0 B
/ui/controls 6.98 kB 6.97 kB -1 B (-0.0%)
/ui/error-dialog 9.99 kB 9.98 kB -8 B (-0.1%) 0 B
/ui/fullscreen-button 9.98 kB 9.97 kB -7 B (-0.1%) 0 B
/ui/gesture 7.37 kB 7.36 kB -8 B (-0.1%)
/ui/hotkey 7.82 kB 7.81 kB -10 B (-0.1%)
/ui/live-button 8.42 kB 8.42 kB -3 B (-0.0%) 0 B
/ui/mute-button 9.97 kB 9.96 kB -9 B (-0.1%) 0 B
/ui/pip-button 9.97 kB 9.97 kB -6 B (-0.1%) 0 B
/ui/play-button 9.96 kB 9.95 kB -11 B (-0.1%) 0 B
/ui/playback-rate-button 9.96 kB 9.96 kB -1 B (-0.0%) 0 B
/ui/popover 7.47 kB 7.47 kB -1 B (-0.0%)
/ui/poster 6.86 kB 6.86 kB +1 B (+0.0%)
/ui/quality 8.01 kB 8.01 kB -2 B (-0.0%) 0 B
/ui/seek-button 9.99 kB 9.99 kB -1 B (-0.0%) 0 B
/ui/seek-indicator 11.77 kB 11.77 kB -4 B (-0.0%)
/ui/status-announcer 9.66 kB 9.65 kB -6 B (-0.1%) 0 B
/ui/status-indicator 12.24 kB 12.23 kB -5 B (-0.0%) 0 B
/ui/thumbnail 8.07 kB 8.24 kB +175 B (+2.1%)
/ui/time 9.28 kB 9.29 kB +8 B (+0.1%) 0 B
/ui/tooltip 8.22 kB 8.22 kB +2 B (+0.0%)
/ui/volume-indicator 12.34 kB 12.34 kB -7 B (-0.1%) 0 B
/ui/volume-slider 11.40 kB 11.56 kB +164 B (+1.4%) 0 B
/video (default + hls) 178.34 kB 178.63 kB +296 B (+0.2%) 0 B
/video (minimal) 43.42 kB 43.70 kB +288 B (+0.6%) 0 B
/audio (default) 35.68 kB 35.82 kB +138 B (+0.4%) 0 B
/audio (minimal) 35.77 kB 35.89 kB +131 B (+0.4%) 0 B
Presets (7)
Entry Initial Lazy
/video (default) 43.68 kB 54.60 kB
/video (default + hls) 178.63 kB 54.60 kB
/video (minimal) 43.70 kB 54.60 kB
/video (minimal + hls) 178.77 kB 54.60 kB
/audio (default) 35.82 kB 54.60 kB
/audio (minimal) 35.89 kB 54.60 kB
/background 581 B
Media (12)
Entry Initial
/media/background-video 394 B
/media/dash-video 209.61 kB
/media/google-cast 5.34 kB
/media/hlsjs-video 136.61 kB
/media/mux-audio 137.47 kB
/media/mux-data 152.88 kB
/media/mux-video 137.52 kB
/media/native-hls-video 3.53 kB
/media/simple-hls-audio-only 19.88 kB
/media/simple-hls-video 25.36 kB
/media/vimeo-video 10.76 kB
/media/youtube-video 4.78 kB
Skins (27)
Entry Type Initial Lazy
/tailwind.css css 161 B
/video/minimal-skin.css css 5.81 kB
/video/skin.css css 5.81 kB
/video/minimal-skin js 43.59 kB 54.60 kB
/video/minimal-skin.tailwind js 49.90 kB 54.60 kB
/video/skin js 43.53 kB 54.60 kB
/video/skin.tailwind js 49.80 kB 54.60 kB
/audio/minimal-skin.css css 3.97 kB
/audio/skin.css css 3.90 kB
/audio/minimal-skin js 35.82 kB 54.60 kB
/audio/minimal-skin.tailwind js 38.31 kB 54.60 kB
/audio/skin js 35.73 kB 54.60 kB
/audio/skin.tailwind js 40.12 kB 54.60 kB
/background/skin.css css 90 B
/background/skin js 272 B
/live-video/minimal-skin.css css 5.81 kB
/live-video/skin.css css 5.81 kB
/live-video/minimal-skin js 38.60 kB 54.60 kB
/live-video/minimal-skin.tailwind js 44.78 kB 54.60 kB
/live-video/skin js 38.61 kB 54.60 kB
/live-video/skin.tailwind js 44.88 kB 54.60 kB
/live-audio/minimal-skin.css css 3.97 kB
/live-audio/skin.css css 3.90 kB
/live-audio/minimal-skin js 26.50 kB 54.60 kB
/live-audio/minimal-skin.tailwind js 29.79 kB 54.60 kB
/live-audio/skin js 26.54 kB 54.60 kB
/live-audio/skin.tailwind js 29.95 kB 54.60 kB
UI Components (33)
Entry Initial Lazy
/ui/airplay-button 10.04 kB 54.60 kB
/ui/alert-dialog 3.25 kB
/ui/audio-track 7.48 kB 54.60 kB
/ui/buffering-indicator 7.26 kB
/ui/captions-button 10.02 kB 54.60 kB
/ui/captions-radio-group 7.63 kB 54.60 kB
/ui/cast-button 10.01 kB 54.60 kB
/ui/controls 6.97 kB
/ui/error-dialog 9.98 kB 54.60 kB
/ui/fullscreen-button 9.97 kB 54.60 kB
/ui/gesture 7.36 kB
/ui/hotkey 7.81 kB
/ui/live-button 8.42 kB 54.60 kB
/ui/menu 20.61 kB 54.60 kB
/ui/mute-button 9.96 kB 54.60 kB
/ui/pip-button 9.97 kB 54.60 kB
/ui/play-button 9.95 kB 54.60 kB
/ui/playback-rate 6.79 kB
/ui/playback-rate-button 9.96 kB 54.60 kB
/ui/popover 7.47 kB
/ui/poster 6.86 kB
/ui/quality 8.01 kB 54.60 kB
/ui/seek-button 9.99 kB 54.60 kB
/ui/seek-indicator 11.77 kB
/ui/slider 12.92 kB 54.60 kB
/ui/status-announcer 9.65 kB 54.60 kB
/ui/status-indicator 12.23 kB 54.60 kB
/ui/thumbnail 8.24 kB
/ui/time 9.29 kB 54.60 kB
/ui/time-slider 12.95 kB 54.60 kB
/ui/tooltip 8.22 kB
/ui/volume-indicator 12.34 kB 54.60 kB
/ui/volume-slider 11.56 kB 54.60 kB

🧩 @videojs/core

Path Base initial PR initial Initial diff Lazy diff
. 11.61 kB 12.06 kB +459 B (+3.9%)
Small changes (1, ≤ 300 B)
Path Base initial PR initial Initial diff Lazy diff
/dom 20.00 kB 20.23 kB +239 B (+1.2%)
Entries (76)
Entry Initial Lazy
. 12.06 kB
/dom 20.23 kB
/components 900 B
/i18n 3.06 kB 54.60 kB
/i18n/locales/all 33.25 kB
/i18n/locales/ar 1.17 kB
/i18n/locales/az 1.07 kB
/i18n/locales/bg 1.24 kB
/i18n/locales/bn 1.26 kB
/i18n/locales/bs 971 B
/i18n/locales/ca 1.03 kB
/i18n/locales/cs 1.01 kB
/i18n/locales/cy 1005 B
/i18n/locales/da 964 B
/i18n/locales/de 1.05 kB
/i18n/locales/el 1.42 kB
/i18n/locales/en 753 B
/i18n/locales/es 981 B
/i18n/locales/et 1.01 kB
/i18n/locales/eu 1001 B
/i18n/locales/fa 1.17 kB
/i18n/locales/fi 1015 B
/i18n/locales/fr 1.03 kB
/i18n/locales/gd 1.05 kB
/i18n/locales/gl 978 B
/i18n/locales/he 1.09 kB
/i18n/locales/hi 1.26 kB
/i18n/locales/hr 998 B
/i18n/locales/hu 1.04 kB
/i18n/locales/id 879 B
/i18n/locales/it 995 B
/i18n/locales/ja 1.15 kB
/i18n/locales/ko 1.10 kB
/i18n/locales/lt 997 B
/i18n/locales/lv 1.04 kB
/i18n/locales/mr 1.27 kB
/i18n/locales/nb 948 B
/i18n/locales/ne 1.25 kB
/i18n/locales/nl 986 B
/i18n/locales/nn 956 B
/i18n/locales/oc 1.04 kB
/i18n/locales/pl 1.08 kB
/i18n/locales/pt 1008 B
/i18n/locales/pt-BR 1008 B
/i18n/locales/pt-PT 993 B
/i18n/locales/ro 1.02 kB
/i18n/locales/ru 1.33 kB
/i18n/locales/sk 1.05 kB
/i18n/locales/sl 1008 B
/i18n/locales/sr 1.02 kB
/i18n/locales/sv 986 B
/i18n/locales/te 1.28 kB
/i18n/locales/th 1.24 kB
/i18n/locales/tr 1.03 kB
/i18n/locales/uk 1.34 kB
/i18n/locales/vi 1.05 kB
/i18n/locales/zh 987 B
/i18n/locales/zh-CN 987 B
/i18n/locales/zh-TW 987 B
/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 214 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 366 B
🔧 @videojs/utils — no changes
Entries (13)
Entry Initial
/array 104 B
/dom 3.29 kB
/events 319 B
/function 369 B
/i18n 44 B
/jwt 176 B
/object 508 B
/predicate 265 B
/percent 281 B
/string 239 B
/style 190 B
/time 1013 B
/number 158 B
📦 @videojs/jsx — no changes
Entries (3)
Entry Initial
. 393 B
/jsx-runtime 371 B
/jsx-dev-runtime 375 B
📦 @videojs/media — no changes
Entries (15)
Entry Initial
. 993 B
/dom/audio-host 1.10 kB
/dom/custom-media-element 2.09 kB
/dom/dash 209.25 kB
/dom/google-cast 4.06 kB
/dom/hls-js 136.18 kB
/dom/media-host 1.20 kB
/dom/media-played-ranges 576 B
/dom/mux 159.49 kB
/dom/native-hls 3.01 kB
/dom/simple-hls 24.87 kB
/dom/simple-hls-audio-only 19.37 kB
/dom/video-host 1.39 kB
/dom/vimeo 10.19 kB
/dom/youtube 4.16 kB
📦 @videojs/spf — no changes
Entries (5)
Entry Initial
. 4.53 kB
/dom 6.57 kB
/hls 21.67 kB
/media-tracks 504 B
/background-video 14.79 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.

Comment thread packages/react/src/ui/slider/slider-segments.tsx Outdated
Comment thread packages/html/src/define/video/skin.ts Outdated
Comment thread packages/html/src/ui/slider/slider-segments-element.ts Outdated
Comment thread packages/core/src/dom/store/selectors.ts
@cursor

cursor Bot commented Aug 6, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@sampotts sampotts changed the title feat(packages): add chapter support feat(packages): add chapter slider components Aug 6, 2026
@sampotts
sampotts marked this pull request as ready for review August 6, 2026 23:44
@sampotts
sampotts requested a review from mihar-22 August 6, 2026 23:47

export const SliderSegmentsDataAttrs = {
/** Present when there are slider segments to render. */
hasSegments: 'data-segments',

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

This just makes the tailwind a little cleaner since we can do has-[[data-segments]] rather than a massively horrid className I had to use prior.

/** Size of a slider segment as a percentage. */
size: '--media-slider-segment-size',
/** Offset of a slider segment as a percentage. */
offset: '--media-slider-segment-offset',

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Used to generate the x or y coordinates.

@cursor

cursor Bot commented Aug 7, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

Comment thread packages/core/src/core/ui/slider/slider-segments-core.ts

@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 1 potential issue.

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 95be2d0. Configure here.

Comment thread packages/react/src/ui/time-slider/time-slider-segments.tsx Outdated
@sampotts

Copy link
Copy Markdown
Collaborator Author

Closing in favor of #2043

@sampotts sampotts closed this 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.

Feature: Media provides chapters from sidecar VTT tracks

1 participant