Skip to content

Latest commit

 

History

History
372 lines (280 loc) · 14.3 KB

File metadata and controls

372 lines (280 loc) · 14.3 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.10.6] - 2026-06-15

Fixed

  • Player no longer leaks its internal z-index to the host page: .vide-ui and the IMA ad container now establish their own stacking context (isolation: isolate), so controls (z-index 3) and the IMA overlay (z-index 10 on touch) can't overlap host UI.
  • destroy() resets player state to idle (it previously kept reporting the last state, e.g. ready).

[0.10.5] - 2026-03-15

Fixed

  • State machine missing transitions: buffering→paused/ended and error→ready
  • once()/off() removal bug — track wrappers in WeakMap so off() removes pre-fire handlers
  • EventBus event drift — route drm:keystatus and drm:ready through EventBus
  • VAST content restore timeout and error state listener to prevent onReady leaks
  • VMAP content restore using player.src instead of player.el.src for HLS/DASH routing
  • sendBeacon fallback to Image pixel when return value is false
  • DRM/HLS race condition — await drmReady promise before config merge
  • Destroy guards on on/off/emit/once/play/pause/src to prevent post-destroy leaks
  • Copy cleanups array before iterating in destroy() to prevent mutation during loop

Changed

  • Replace noExplicitAny suppressions with EventHandler<never> in event system

Added

  • devicePixelRatio in MediaSelectionHints for Retina-aware media scoring
  • Error codes ERR_VAST_RESTORE_TIMEOUT (6000) and ERR_VMAP_RESTORE_TIMEOUT (7000)

[0.10.4] - 2026-03-12

Changed

  • Mark Player.duration as readonly and remove no-op setter
  • Expose setState on PluginPlayer via typed object literal instead of as unknown as cast
  • Extract resolveAndLoadSource() to deduplicate handler matching in processSourceElements and src setter

[0.10.3] - 2026-03-12

Fixed

  • IMA ResizeObserver loop causing continuous resize during ad playback

Added

  • Framework selector to playground code generation
  • data-tooltip attributes to React, Vue, and Svelte framework wrappers

Changed

  • Fix responsive layout, replace emoji logo with SVG, update IMA text

[0.10.2] - 2026-03-11

Changed

  • Larger UI controls: icon 18px, button 34px, controls height 48px
  • Thicker progress bar (4px/6px) with visible track background
  • More spacious tooltip padding
  • Remove hero demo footer badge

[0.10.1] - 2026-03-11

Fixed

  • Biome lint and formatting issues across docs, UI theme, and streaming plugins

[0.10.0] - 2026-03-11

Changed

  • Redesign UI controls: inline progress bar layout, stroke-based SVG icons, mockup-matched styling
  • Redesign Playground: 3-column layout with config sidebar, live inspector, and read-only code panel

[0.9.11] - 2026-03-06

Changed

  • Refactor core.ts: extract pure modules for state machine, event bus, text tracks, and media listeners

[0.9.10] - 2026-03-05

Fixed

  • Biome lint and format issues across DRM plugin, tests, theme CSS, and IMA example
  • README Features section: flatten to single list, add OMID, TypeScript, zero deps, web standards

[0.9.9] - 2026-03-05

Added

  • DRM plugin: PlayReady (Edge/Xbox/Smart TV) and ClearKey (testing/dev) key system support
  • DRM plugin: robustness level and encryption scheme configuration
  • DRM plugin: license request retry with exponential backoff
  • DRM plugin: key status events on the player event bus
  • DRM plugin: FairPlay init data transform callback and standalone DRM capability query API
  • DRM plugin: generalized server certificate management (Widevine + FairPlay)
  • Type-safe pluginData via PluginDataMap registry (setPluginData/getPluginData with generics)
  • Docs: Features section, StackBlitz playground, and dedicated CDN page
  • Docs: DRM plugin docs for PlayReady, ClearKey, robustness, retry, and events

Fixed

  • Mini progress bar showing during normal video playback (now ad-only)

Changed

  • Theme animations: BigPlay scale+fade, controls slide-up+fade, conic-gradient loader, accent glow on progress handle

[0.9.8] - 2026-03-02

Added

  • Google IMA SDK plugin (vide/ima) — delegates ad lifecycle to IMA SDK
  • IMA framework components: Ima (wrapping), ImaPlugin (ref-based), useIma hook for React, Vue, Svelte
  • IMA plugin documentation with layout structure guide and framework usage examples
  • VPAID 2.0 plugin (vide/vpaid) for JavaScript-based interactive ad creatives
  • VAST parser: apiFramework on VastMediaFile, adParameters on VastLinear
  • IMA and VPAID to plugin tables in README, docs index, and demo page
  • IMA to docs sidebar navigation
  • React IMA example with three usage patterns (wrap, ref, hook)

Fixed

  • IMA: content video not pausing during ad breaks (CONTENT_PAUSE_REQUESTED now pauses content)
  • IMA: plugin cleanup during ad break now resumes content playback and resets player state

[0.9.7] - 2026-03-01

Fixed

  • Trailing blank line in VAST plugin (src/vast/index.ts)

[0.9.6] - 2026-03-01

Added

  • PluginPlayer interface for type-safe plugin state control
  • VAST ads support in ended state for on-demand ad insertion (post-roll)
  • ARIA attributes and accessibility improvements across all UI implementations (React, Vue, Svelte)
  • Custom Components section to Vue and Svelte docs
  • Styling section to React docs

Fixed

  • Post-roll ad: restore content source and use player interface after ad ends
  • Post-roll ad skip leaving ad media still playing
  • Text shadow intensity in theme.css for improved readability
  • Vue/Svelte VideVideo: align with React by removing div wrapper and slot support
  • video.js migration guide inaccuracies
  • Biome lint and format issues from accessibility changes
  • Ad-learn-more tests to match updated component structure

[0.9.5] - 2026-03-01

Fixed

  • Lint errors in React AdLearnMore, Vue AdLearnMore, and Svelte VideUI

[0.9.4] - 2026-03-01

Changed

  • Ad components (React, Vue, Svelte): AdLearnMore now matches vanilla UI structure (icon, title, hostname)
  • Ad components (React, Vue, Svelte): AdSkip now renders span.vide-skip__label + skip icon matching vanilla
  • Ad component ordering in docs/examples: AdOverlay replaced by AdLearnMore as default
  • Removed showTitle prop from AdLearnMore (title auto-displays when available)

Fixed

  • AdLabel/AdCountdown no longer float above controls when AdLearnMore (CTA) is absent
  • Svelte VideUI: fixed bind:this on const variable (changed to let)

Added

  • Icons: IconExternalLink, IconSkipForward for React, Vue, Svelte
  • React docs: useUi vs <Vide.UI> clarification
  • React docs: custom components guide with useVideContext() and useVideEvent() examples

[0.9.2] - 2026-03-01

Fixed

  • Lint errors across React, Svelte, and Vue components

[0.9.1] - 2026-03-01

Changed

  • Redesigned ad UI: improved layout, skip button style, mini progress bar, responsive adjustments

[0.9.0] - 2026-03-01

Added

  • Ad UI components: AdLearnMore, AdCountdown, AdLabel, AdSkip, AdOverlay (vanilla, React, Vue, Svelte)
  • ad:start event payload expanded: clickThrough, skipOffset, duration, adTitle
  • useAdState hook/composable for React, Vue, Svelte (AdState with active, meta)
  • AdMeta type for framework ad state
  • UI include option for opt-in components (ad-learn-more defaults to off)
  • Ad Pod sequence playback: multiple <Ad> elements with sequence attributes are played sequentially
  • Waterfall ad fallback: multiple <Ad> elements without sequence are tried in order until one succeeds
  • Pod events: ad:pod:start, ad:pod:end, ad:pod:adstart, ad:pod:adend
  • Stand-alone ad substitution in pods per VAST 3.3.1 (failed pod ads replaced with unsequenced ads)
  • allowMultipleAds enforcement in VMAP (when false, only first ad is played)
  • New exports: classifyAds, playSingleAd, playPod, playWaterfall, selectMediaFile
  • New types: ClassifiedAds, PlayableAd, PodResult, PlaySingleAdOptions, SingleAdResult
  • HTML examples: index.html, vast-debug.html, without-ui.html, ad-pod.html, cdn-ads.html, cdn-all.html, cdn-individual.html, companion-ads.html, nonlinear-ads.html, ui-standalone.html, wrapper.html

Changed

  • Svelte: createVidePlayer() returns PlayerGetter directly instead of { player } object

Fixed

  • React context returns Player | null instead of throwing
  • CSS class name: vide-ad-skipvide-skip to match theme.css
  • Svelte/Vue: cross-entry imports, CSS classes, child element structure

[0.8.0] - 2026-02-28

Added

  • <audio> element support with isAudio property and automatic UI exclusion
  • Live stream detection (isLive, seekableRange, livestatechange event)
  • Unified quality level API for HLS/DASH streams
  • Text track API for subtitle/caption control
  • IIFE global builds for CDN / <script> tag usage
  • Ad clickThrough navigation support
  • Automatic error recovery for HLS/DASH streaming plugins

Fixed

  • Play button icon not updating during ad states
  • Lint errors (formatting, import sorting)

[0.7.4] - 2026-02-28

Added

  • repository field for npm provenance

Fixed

  • Stub jsdom media methods for test compatibility

[0.7.3] - 2026-02-28

Added

  • idle → playing and loading → playing state transitions for early play calls
  • UI styling reference, HTML attributes guide, and CDN usage docs
  • Testing, docs, and bundle size sections to CONTRIBUTING.md

Fixed

  • E2E UI tests: focus correct element and use correct class name
  • API reference 404 by moving TypeDoc output to docs/api-reference/

[0.7.2] - 2026-02-28

Added

  • DRM standalone EME support (encrypted MP4 without HLS/DASH)
  • Error code constants (ERR_DRM_*, ERR_HLS_*, ERR_DASH_*, ERR_MEDIA)
  • iOS Safari DRM patches
  • E2E test suite (Playwright) for core playback, HLS, UI controls, and keyboard shortcuts
  • TypeDoc API reference generation
  • Performance tests (setup timing budgets, event listener cleanup, create/destroy cycle stability)
  • HTML markup examples to docs and README

Fixed

  • Bigplay button staying visible during playback (race condition)
  • API reference link to point to TypeDoc-generated index

[0.7.1] - 2026-02-28

Added

  • CI workflow (GitHub Actions)
  • VitePress documentation site
  • CHANGELOG.md
  • packageManager field for pnpm version detection in CI

Fixed

  • Bigplay button not hiding during playback
  • Biome lint errors

[0.7.0] - 2026-02-28

Added

  • DRM plugin with Widevine and FairPlay support
  • SSAI plugin for server-side ad insertion metadata detection (HLS DATERANGE/ID3, DASH EventStream)
  • setPluginData() / getPluginData() for cross-plugin data sharing
  • Proxy 17 HTMLVideoElement properties on Player interface (loop, autoplay, poster, preload, defaultPlaybackRate, defaultMuted, crossOrigin, controls, etc.)

Fixed

  • SSAI DATERANGE detection and reworked example with real HLS metadata

[0.6.1] - 2026-02-28

Fixed

  • Bigplay button appearing during playback due to autohide class collision

[0.6.0] - 2026-02-28

Added

  • UI plugin with two-layer architecture (headless components + optional theme)
  • 13 UI components: play, progress, time, volume, fullscreen, loader, error, bigplay, poster, ad-countdown, ad-skip, ad-overlay, ad-label
  • YouTube-quality UI: SVG icons, keyboard shortcuts (Space, arrows, M, F, 0-9), click-to-play, auto-hide controls
  • BEM class names and CSS custom properties for styling
  • theme.css with design tokens, explicit box-model, ad UI polish
  • Individual component exports for standalone usage (createPlayButton, createProgress, etc.)
  • AdPlugin integration for VAST skip/click/countdown via getAdPlugin()
  • DASH streaming plugin (wraps dashjs)
  • DASH + VAST example

Fixed

  • UI plugin bugs: fullscreen, bigplay replay, ad-skip, headless progress
  • VAST content restoration after ad skip/end
  • Content source not restored after VAST ad on HTML-attributed src
  • <source> tag race condition and DASH autoplay handling

[0.5.0] - 2026-02-28

Added

  • HLS streaming plugin (wraps hls.js, 618 bytes gzip)
  • SourceHandler mechanism for extensible source handling
  • player.src setter/getter with SourceHandler hook chain
  • registerSourceHandler() for custom source types
  • <source> element auto-processing
  • State transition support for source switching during playback
  • Safari native HLS detection with dynamic hls.js import
  • Fatal error mapping and hlsConfig passthrough

Fixed

  • VAST content restoration for HLS sources
  • Content autoplay after VAST ad ends on HLS sources

[0.4.2] - 2026-02-27

Added

  • VAST/VMAP tracking events (mute, unmute, fullscreen, volumeChange)
  • PlayerEventMap ad event types

[0.4.1] - 2026-02-27

Added

  • ad:click event with clickThrough and clickTracking data
  • Example HTML files for various plugin combinations

Fixed

  • SIMID sandbox, creative overlay display, and requestStop handling
  • DOM removed from VAST plugin (plugin no longer creates DOM elements)

[0.4.0] - 2026-02-27

Added

  • SIMID 1.2 plugin for interactive ad creatives
  • Sandboxed iframe communication via MessageChannel
  • Full SIMID handshake sequence
  • Media event bridge for creatives
  • Policy-based creative request handling
  • AdPlugin lifecycle (adPlugins option) for VAST/VMAP plugins
  • InteractiveCreativeFile extraction in VAST parser

Changed

  • Refactored OMID to use AdPlugin lifecycle

[0.3.0] - 2026-02-27

Added

  • OMID plugin for ad viewability measurement via OM SDK
  • Typed EventBus fallback with addEventListener / removeEventListener delegation to HTMLVideoElement

[0.2.0] - 2026-02-27

Added

  • VMAP plugin with ad break scheduling and wrapper ad resolution
  • VAST event tracking: click, pause/resume, skip

Fixed

  • VAST ad playback: infer initial state, wait for canplay
  • Spec gaps, error handling, and type safety issues from codebase audit

[0.1.0] - 2026-02-27

Added

  • Core player with createPlayer() factory
  • EventBus with typed custom events (statechange, error, ad:*)
  • StateMachine with validated state transitions
  • Plugin system with explicit opt-in via player.use()
  • HTMLVideoElement proxy pattern
  • VAST 4.1 parser (pure function, no I/O)
  • VAST tracker with sendBeacon/Image pixel support
  • Quartile tracking for ad metrics
  • TypeScript strict mode, ESM only, zero dependencies