Christian Pillsbury and Claude Opus 4.8
557d8bd72f
refactor(spf): drive live reload via a RecurringRunner instead of an epoch signal (WIP)
...
Replace the signal-as-event live-reload scheduler with a runner-driven model.
The `resolveTrack` loader schedules its resolve work on a new `RecurringRunner`
that re-runs the task on an injected `reschedule` policy; the separate
`scheduleTrackReload` behavior and its per-type reload-epoch signals are deleted.
Core (`core/tasks`):
- `Task.run()` is now memoized (runs once, shares the result across calls) and
gains `clone()` (fresh, pending, structurally identical) — added to `TaskLike`.
- `RecurringRunner`: single-slot, id-keyed (dedup same id / abort-and-replace on
new id), time-free. Each cycle runs `Promise.all([task.run(), reschedule(task,
previous, signal)])` and re-runs a `clone()` while reschedule resolves `true`.
- `Reschedule<T> = (task, previous, signal) => PromiseLike<boolean>` — invoked
concurrently with the run, observes it via the memoized `run()`, owns its delay.
- `delayedReschedule(cadence)` builds a Reschedule from a pure ms-cadence fn,
start-anchored (subtracts the run's elapsed) so reloads are measured from
load-start per RFC 8216 §6.3.4, preserving half-on-unchanged.
Supporting:
- `@videojs/utils/time`: add cancellable `sleep(ms, signal)`.
- `media/hls/reload-policy`: `mediaPlaylistReloadDelay` (pure cadence; relocated
scheduler logic — target-duration, half-on-unchanged, stop-on-ENDLIST, retry).
- `resolve-track`: baked universal completeness gate + injected `reschedule`;
engine composes `delayedReschedule(mediaPlaylistReloadDelay)`.
WIP: not fully validated end-to-end against a live stream through this path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 09:59:24 -07:00
edfec1c93e
revert(core): unmerge i18n stack base ( #1707 )
...
Co-authored-by: Wesley Luyten <me@wesleyluyten.com >
2026-06-18 15:20:35 -07:00
accf4bfa34
fix(packages): escape HTML special chars in serializeAttributes to prevent XSS ( #1670 )
...
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: Wesley Luyten <me@wesleyluyten.com >
2026-06-18 12:23:19 -07:00
768bf09da0
feat(core): add i18n foundation with English locale and UI wiring ( #1589 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Wesley Luyten <me@wesleyluyten.com >
2026-06-18 11:55:38 -07:00
Wesley Luyten and GitHub
1b31f3e8d7
feat(core): add vimeo media host and html/react components ( #1667 )
2026-06-18 09:36:31 +10:00
Wesley Luyten and GitHub
0ffe1a9197
feat(media)!: add Google Cast by default to HLS, DASH media ( #1661 )
2026-06-12 17:34:14 -07:00
Santiago Puppo and GitHub
24a78d253a
refactor(core): airplay button ( #1614 )
2026-06-03 13:54:28 -07:00
Sam Potts and GitHub
760870fdf2
fix(core): disable toggle captions when there are no captions ( #1598 )
2026-05-26 09:49:50 +10:00
Sam Potts and GitHub
ad831d25f0
feat(packages): add playback rate menu ( #1527 )
2026-05-14 08:37:52 +10:00
0cfd3bb395
feat(spf): HLS engine composition walkthrough + doc-driven cleanups ( #1512 )
...
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-05 12:07:26 -07:00
2f7212028c
refactor(react): replace prototype-walking and inferred class props ( #1376 )
...
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-20 09:20:46 -07:00
rahim and GitHub
769d436f4e
fix(react): prevent gesture tap from firing on slider interactions ( #1361 )
2026-04-17 18:01:26 -07:00
Wesley Luyten and GitHub
8530316987
revert(packages): add server-only bundles ( #1349 ) ( #1354 )
2026-04-17 11:44:53 -07:00
rahim and GitHub
3331fdaf25
fix(packages): add server-only bundles ( #1349 )
2026-04-16 00:59:14 -07:00
rahim and GitHub
b768c29f98
fix(packages): ignore gestures on interactive child elements ( #1327 )
2026-04-14 02:11:01 -07:00
Wesley Luyten and GitHub
8f1653efcd
refactor(packages)!: replace DelegateMixin & ProxyMixin with MediaHost base classes ( #1292 )
2026-04-14 00:18:11 -05:00
rahim and GitHub
1509a66f60
feat(packages): add gesture bindings to default skins and presets ( #1310 )
2026-04-10 22:08:10 -07:00
rahim and GitHub
071325de4d
fix(utils): stable sort comparator and orphaned JSDoc ( #1286 )
2026-04-08 17:39:28 +10:00
rahim and GitHub
627ea204fc
feat(packages): add hotkey system with coordinator, actions, and ARIA support ( #1238 )
2026-04-07 00:13:05 -07:00
rahim and GitHub
0c95ab4109
refactor(packages): move slider throttle from commit to change ( #1219 )
2026-04-05 22:19:11 -07:00
4cda8fb94f
refactor(html): SkinMixin -> SkinElement ( #1159 )
...
Co-authored-by: Rahim <rahim.alwer@gmail.com >
2026-03-31 22:22:45 -07:00
Wesley Luyten and GitHub
1b2afc6e41
feat: add native hls media + refactor ( #1154 )
2026-03-30 20:13:19 -05:00
rahim and GitHub
c3641c888c
fix(utils): polyfill AbortSignal.any for Chromium ≤115 ( #1142 )
2026-03-26 13:47:48 -07:00
Sam Potts and GitHub
7bacb1b2ae
fix(utils): handle missing media.querySelectorAll for HLS ( #986 )
2026-03-18 08:57:29 +11:00
Sam Potts and GitHub
82ede77322
fix: correct popup fallback positioning offsets ( #981 )
2026-03-17 13:14:35 +11:00
d751fdabea
feat(skin): add audio skins for HTML and React presets ( #772 )
...
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 12:12:49 +11:00
rahim and GitHub
206bc9b4ae
fix(html): apply popover data attributes before showing via popover API ( #763 )
2026-03-06 14:53:13 -08:00
Wesley Luyten and GitHub
04e98f4007
fix: textTrackList and optimize ( #760 )
2026-03-06 14:10:42 -06:00
Wesley Luyten and GitHub
5c116065a9
feat: add subtitles handling + captions core ( #692 )
2026-03-05 17:11:49 -06:00
rahim and GitHub
2f8ca094ad
feat(react): add slider component ( #644 )
2026-02-28 00:48:51 -08:00
rahim and GitHub
44188d4823
feat(core): add popover component ( #615 )
2026-02-28 00:33:30 -08:00
rahim and GitHub
7bae887920
feat(core): add thumbnail component and text track store feature ( #643 )
2026-02-27 15:19:11 -08:00
Wesley Luyten and GitHub
c2bc488366
feat: add background video preset ( #607 )
2026-02-26 16:00:36 -06:00
Sam Potts and GitHub
7d3be367f5
feat(react): implement default and minimal video skins ( #550 )
2026-02-19 07:43:44 +11:00
Sam Potts and GitHub
78de97ec23
feat(icons): setup icons package ( #536 )
2026-02-16 14:11:40 +11:00
rahim and GitHub
7efee3d033
feat(packages): add slider core layer ( #529 )
2026-02-14 01:30:29 +11:00
rahim and GitHub
839a7e43bf
feat(store): state subscription primitives ( #528 )
2026-02-14 00:30:38 +11:00
rahim and GitHub
7b8bc11f9f
feat(core): add time display component ( #460 )
2026-02-06 14:31:33 +11:00
rahim and GitHub
01c3f891cf
chore(packages): add dev builds ( #452 )
2026-02-04 20:05:38 +11:00
rahim and GitHub
b75316d23f
refactor(packages): replace disposer with abort controller ( #449 )
2026-02-04 15:32:59 +11:00
rahim and GitHub
9cfab264d8
feat(core): add play button component ( #383 )
2026-02-04 00:33:14 +11:00
rahim and GitHub
9fa172e8a4
refactor(store): remove queue and task system ( #382 )
2026-02-03 15:06:06 +11:00
rahim and GitHub
ad94af25b5
feat(store): store selector api ( #370 )
2026-02-02 13:11:05 +11:00
rahim and GitHub
fe892cb911
refactor(store): v2 ( #362 )
2026-01-31 23:34:11 +11:00
Sam Potts and GitHub
bf76dfa593
chore(ci): eslint + prettier → biome ( #325 )
2026-01-23 11:33:04 +00:00
rahim and GitHub
f01a5fcf5c
refactor(store): rename slice to feature ( #318 )
2026-01-21 00:33:28 +11:00
rahim and GitHub
e643ee1f08
fix(store): guard abort on request supersession ( #313 )
2026-01-20 01:58:52 +11:00
rahim and GitHub
beb8615c1c
feat(store): add reactive state primitives ( #311 )
2026-01-20 00:59:14 +11:00
rahim and GitHub
648aae7e31
feat(store): lit bindings ( #289 )
2026-01-06 22:26:09 +11:00
rahim and GitHub
0354e3ef9c
chore(packages): remove isolatedDeclarations for store type inference support ( #295 )
2026-01-06 14:09:36 +11:00