e1d326ffaf refactor(core,react,html): migrate component state definitions to core media-store
- Move PlayButton and MuteButton state definitions from React/HTML packages to core media-store
- Create component-state-definitions directory in @vjs-10/media-store
- Update exports in media-store to include new state definitions
- Update all React and HTML components to import from @vjs-10/media-store
- Remove duplicate state definition files from React and HTML packages
- Establish single source of truth for component state logic in core package
- Fix TypeScript declaration generation for proper module resolution

This migration follows the monorepo architecture where core packages provide
foundation logic and platform packages consume it, eliminating code duplication
and ensuring consistent behavior across implementations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-08 17:15:40 -07:00

VJS-10 Monorepo

A monorepo for Video.js 10 related library packages, organized by platform and runtime environment.

Structure

vjs-10-monorepo/
├── packages/
│   ├── core/               # Runtime-agnostic packages
│   │   ├── media-store/    # State abstraction for media
│   │   ├── playback-engine/# Abstraction for media source management
│   │   ├── media/          # HTMLMediaElement contracts and utilities
│   │   └── icons/          # Environment-agnostic SVG icons
│   ├── html/               # DOM/Browser packages
│   │   ├── html-icons/     # HTML/DOM icon components
│   │   ├── html-media-elements/ # HTML media element components
│   │   ├── html-media-store/    # HTML media store integration
│   │   └── html/           # Complete HTML UI library
│   ├── react/              # React packages
│   │   ├── react-icons/    # React icon components
│   │   ├── react-media-elements/ # React media element components
│   │   ├── react-media-store/   # React media store hooks and context
│   │   └── react/          # Complete React UI library
│   └── react-native/       # React Native packages
│       ├── react-native-icons/  # React Native icon components
│       ├── react-native-media-elements/ # React Native media components
│       └── react-native/   # Complete React Native UI library
└── apps/                   # Example applications (coming soon)

Packages

Core Packages (Runtime Agnostic)

  • @vjs-10/media-store - State management for media players
  • @vjs-10/playback-engine - Abstraction layer for media engines (HLS.js, Dash.js, etc.)
  • @vjs-10/media - HTMLMediaElement contracts and utilities
  • @vjs-10/icons - SVG icon definitions and utilities

HTML/DOM Packages

  • @vjs-10/html-icons - Web component icon elements
  • @vjs-10/html-media-elements - Web component media elements
  • @vjs-10/html-media-store - DOM integration for media store
  • @vjs-10/html - Complete HTML media player UI library

React Packages

  • @vjs-10/react-icons - React icon components
  • @vjs-10/react-media-elements - React media element components
  • @vjs-10/react-media-store - React hooks and context for media state
  • @vjs-10/react - Complete React media player UI library

React Native Packages

  • @vjs-10/react-native-icons - React Native icon components (requires react-native-svg)
  • @vjs-10/react-native-media-elements - React Native media components (requires react-native-video)
  • @vjs-10/react-native - Complete React Native media player UI library

Getting Started

Installation

npm install

Building

Build all packages:

npm run build

Build specific package:

npm run build --workspace=@vjs-10/core

Development

# Install dependencies
npm install

# Build all packages
npm run build

# Run type checking
npm run typecheck

# Run linting
npm run lint

Package Dependencies

The packages are designed with clear dependency relationships:

  • Core packages have no dependencies on other vjs-10 packages
  • HTML packages depend only on core packages
  • React packages depend only on core packages (peer dependency on React)
  • React Native packages depend only on core packages (peer dependencies on React Native, react-native-video, react-native-svg)

This ensures maximum reusability and prevents circular dependencies.

TypeScript

All packages are written in TypeScript and use project references for efficient compilation. The monorepo uses a shared tsconfig.base.json for consistent compiler options across all packages.

License

Apache-2.0

S
Description
[Beta] Video.js v10 - open source media player framework for Web and React.
Readme
54 MiB
Languages
TypeScript 81.9%
MDX 10.7%
CSS 2.7%
Astro 2.7%
JavaScript 1.1%
Other 0.9%