Commit Graph
90 Commits
Author SHA1 Message Date
Sam PottsandGitHub cfac2fb18a chore: copy update to trigger a deploy (#39) 2025-10-07 16:27:02 +11:00
Sam PottsandGitHub 4ffaa58634 feat(ui): styling fixes for toasted skin (#38) 2025-10-06 13:16:49 +11:00
Sam PottsandGitHub bdd2f36e13 feat(ui): add toasted skin 2025-10-04 19:26:02 +10:00
Wesley Luyten 5195c09af6 fix: rename attributes to kebab-case 2025-10-03 13:30:53 -05:00
Wesley Luyten 0a42bfe86d fix: React version mismatch, add forward refs 2025-10-02 15:03:39 -05:00
Wesley LuytenandGitHub 17b632f5f9 feat: add media-popover, cleanup html demo (#34) 2025-10-02 14:09:33 -05:00
Wesley LuytenandGitHub f775a3daf7 feat: add popover React component (#33) 2025-10-02 11:03:44 -05:00
Wesley LuytenandGitHub 7b79854304 feat: add HTML vertical orientation to time and volume (#32)
* feat: add vertical orientation to time and volume
range components

* fix: improve resetting of styles
2025-10-01 15:02:23 -05:00
Wesley LuytenandGitHub 5e3cb8ad81 feat: add range orientation to react components (#30) 2025-09-26 17:57:21 -05:00
687b7655b0 feat: add core range, time and volume range (#23)
* feat: add poc for core time range class

* fix: use object keys instead of strings
for minification

* Update packages/react/react/src/components/TimeRange.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: cleanup and add time range core to html

* fix: add range core component, implement volume

* Update packages/core/core/src/utils/state.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update packages/core/core/src/components/range.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-26 14:10:40 -05:00
Sam Potts 1ef66c9461 fix(ui): revert style testing change 2025-09-26 11:49:46 +10:00
Sam Potts 0afa9b7187 fix: skin exports/imports 2025-09-26 11:38:26 +10:00
Sam Potts f8fbe61c38 refactor: remove container radius from the skin 2025-09-26 11:38:26 +10:00
Wesley LuytenandGitHub a3f9630bd1 fix: seek jump back to current time (#22) 2025-09-23 15:26:45 -05:00
Wesley LuytenandGitHub aefe890fee feat: add volume range compound component (#19) 2025-09-23 11:07:47 -05:00
RahimandGitHub e3dcb6aba7 chore: gitignore cleanup (#21) 2025-09-23 23:32:00 +10:00
RahimandGitHub 6ad5340b40 chore: new builds & types using tsdown (#20) 2025-09-23 23:12:19 +10:00
Rahim 68666d0901 done 2025-09-23 00:57:47 +10:00
Rahim d2b2dd4868 done 2025-09-22 23:39:30 +10:00
Sam Potts d3221ec211 feat(ui): minor style tweaks 2025-09-22 09:30:10 +10:00
Sam Potts 9950945008 feat(ui): port over default skin 2025-09-21 13:37:14 +10:00
Wesley LuytenandGitHub 017ecdbff9 feat: add compound html timerange component (#14)
* fix: add context logic to component factory

* feat: add compound time range html component
2025-09-18 17:58:53 -05:00
Wesley LuytenandGitHub 71a8dafd74 feat: make time range compound component (#10)
* feat: make time range compound component

* fix: add root ctx, use skin styles

* fix: improve time range

* fix: move more logic to root component

* fix: renaming

* fix: dragging and add memo to context value

* fix: improve time range styles
2025-09-15 11:27:40 -05:00
597e79d7fc fix(time-display): clean up time utilities and simplify components
- Remove deprecated formatDuration function from time utils
- Simplify HTML current time display by removing template generation
- Use direct shadow DOM text content updates for better performance
- Remove unused imports from React current time display component
- Enable show-remaining by default in HTML skin
- Ensure consistent negative time formatting across platforms

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
ab07a8a9a2 feat: add showRemaining functionality to current time display
Adds support for displaying remaining time (countdown) instead of elapsed time:

**HTML Component:**
- Add `show-remaining` attribute support with observedAttributes
- Implement attributeChangedCallback for reactive updates
- Display remaining time as `-{duration - currentTime}` when attribute present
- Maintain backward compatibility with default current time display

**React Component:**
- Add `showRemaining` prop with proper TypeScript typing
- Calculate and display remaining time in render function
- Destructure prop to avoid passing to DOM element
- Consistent `-{remaining}` format matching HTML component

**Usage:**
- HTML: `<media-current-time-display show-remaining></media-current-time-display>`
- React: `<CurrentTimeDisplay showRemaining />`

Both implementations include documentation comments and maintain
consistent behavior across platforms.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
5aeeb6dde6 style: add visual styling to time display components
Adds consistent styling to duration and current time display components
across both HTML and React platforms:
- Semi-transparent dark background matching other UI components
- Monospace font for better time alignment
- Proper padding, borders, and text alignment
- Consistent color scheme with existing control bar elements

Both HTML and React skins now display time values with proper visual
styling that integrates seamlessly with the control bar design.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
0746d400af refactor: rename formatDuration to formatDisplayTime
Renames the time formatting utility to be more generic since it's used for
both duration and currentTime display:
- Add formatDisplayTime as the primary function name
- Update all component references to use formatDisplayTime
- Keep formatDuration as deprecated alias for backward compatibility
- More semantic naming that reflects actual usage across components

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
5bd0a154db feat: implement current time display components
Adds current time display functionality across HTML and React platforms:
- Core state definition for current time with duration support
- HTML component with shadow DOM and span rendering
- React component following hook-style architecture
- Integration into both HTML and React default skins
- Proper exports and component registration

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
6db4c3c4b8 refactor: move time formatting logic to platform components
Move time formatting responsibility from core component state definition
to platform-specific components for better separation of concerns:

- Core state definition now only provides raw duration value
- HTML component calls formatDuration() in _update() method
- React component calls formatDuration() in render function
- Maintains same functionality with cleaner architecture

This approach gives platforms more control over formatting and reduces
the responsibility of the core state abstraction.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
2ed219158d feat(skins): integrate duration display into default skins
Add duration display components to both HTML and React default skins:
- HTML: Add media-duration-display element to control bar
- React: Add DurationDisplay component to MediaSkinDefault

Duration display appears between time range and mute button controls,
providing users with total media duration information in the default
player interface.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
c5b659f449 feat(react): implement duration display component
Add React duration display component using VJS-10 hook-style patterns:
- Native React component using media store hooks
- Uses duration display state definition from media-store
- Minimal implementation rendering single span element
- Follows toConnectedComponent pattern for consistency

Component renders formatted duration (e.g., "4:32") without styling or
ARIA attributes, providing a clean foundation for duration display.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
e35dd44be8 feat(html): implement duration display component
Add HTML duration display component using VJS-10 hook-style architecture:
- Custom element with shadow DOM containing single span
- Uses duration display state definition from media-store
- Minimal implementation without styling or ARIA attributes
- Follows toConnectedHTMLComponent pattern for consistency

Component renders formatted duration (e.g., "4:32") in a simple span element.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
d0036fc7d6 feat(media-store): add duration display component state definition
Implement framework-agnostic duration display state definition following
VJS-10 patterns:
- Read-only component with duration transformation logic
- Formatted duration string and accessibility phrase generation
- Integrates with time formatting utilities for consistent display

This enables duration display components across HTML, React, and React Native
while maintaining shared business logic in the core package.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
7e26e547ea feat(media-store): add comprehensive time formatting utilities
Add time formatting functions ported from Media Chrome:
- formatTime() - formats seconds to HH:MM:SS or MM:SS
- formatAsTimePhrase() - creates accessibility descriptions
- isValidDuration() - validates duration values
- formatDuration() - combines formatting with fallback handling

These utilities provide the foundation for time-based display components
across HTML, React, and React Native platforms.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:59:15 -07:00
d0d487601e fix(icons): add currentColor fill to fullscreen icons for proper theming
The fullscreen enter/exit SVG icons were missing fill="currentColor"
attributes, causing them to render as black/invisible against dark
button backgrounds. This fix ensures proper theming support.

Also integrates fullscreen button into React default skin with
MediaContainer wrapper for complete out-of-the-box functionality.

- Fix fullscreen-enter.svg and fullscreen-exit.svg with currentColor fill
- Add MediaContainer wrapper to React MediaSkinDefault
- Add FullscreenButton to React control bar with proper icon states
- Add CSS for fullscreen button icon state management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
23e3876630 feat(react): add MediaContainer component for fullscreen functionality
Add MediaContainer component that provides fullscreen container registration
for React applications. Includes useMediaContainerRef hook for manual
element registration and MediaContainer wrapper component for convenience.

- Add MediaContainer.tsx with useMediaContainerRef hook and component
- Export MediaContainer and useMediaContainerRef from React package
- Clean up React demo to remove testing modifications

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
35072fd7c5 refactor(html): remove temporary fullscreen test code from play button
Clean up development artifacts:
- Remove double-click event listener for fullscreen testing
- Remove temporary mediaStore reference and console logging
- Simplify handleEvent to only handle click for play/pause
- Restore play button to single responsibility (playback control only)

Play button now focuses solely on play/pause functionality while
fullscreen control is handled by dedicated fullscreen button.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
465342e431 feat(html): integrate fullscreen button into control bar and improve container lifecycle
Complete fullscreen button integration:
- Add fullscreen button to media-skin-default control bar as rightmost control
- Icon styling follows play/pause pattern with proper state-based visibility
- Container state owner lifecycle management in media-container component
- Component factory passes mediaStore reference to support advanced integrations

Control bar layout: Play → Time → Mute → Volume → Fullscreen
Icons change appropriately based on [data-fullscreen] attribute state.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
7d819dfcd9 feat(react): add fullscreen button component
Implement React fullscreen button with native React patterns:
- useFullscreenButtonState hook for media store integration
- useFullscreenButtonProps hook for element attribute management
- renderFullscreenButton function for button rendering
- Connected component via toConnectedComponent factory
- Explicit enter/exit methods matching HTML implementation
- Proper accessibility and data attributes

Provides consistent fullscreen functionality across HTML and React
platforms using shared state definition from media-store.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
63a340213f feat(html): add fullscreen button component and icons
Implement HTML fullscreen button following established patterns:
- MediaFullscreenButton web component with hook-style architecture
- HTML icon components: MediaFullscreenEnterIcon, MediaFullscreenExitIcon
- State management via useFullscreenButtonState hook
- Props handling via useFullscreenButtonProps hook
- Explicit enter/exit fullscreen methods (no toggle)
- Proper accessibility with aria-label and data-tooltip

Components integrate seamlessly with existing HTML component architecture
and provide foundation for control bar integration.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
e19b98b120 feat(media-store): add fullscreen button component state definition
Add reusable state definition for fullscreen button components:
- FullscreenButtonState interface with fullscreen boolean
- Explicit request methods: requestEnterFullscreen, requestExitFullscreen
- Follows established pattern similar to play/pause and mute/unmute
- Platform-agnostic state logic shared between HTML and React

State definition provides consistent behavior across all platforms
while enabling explicit control over fullscreen enter/exit actions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
7f243c22d8 feat(media-store): add fullscreen state mediator with shadow DOM support
Implement comprehensive fullscreen state management:
- Cross-browser fullscreen API support (webkit, moz, ms prefixes)
- Advanced shadow DOM traversal for nested web components
- Support for container-based fullscreen targeting
- Event-driven state updates with stateOwnersUpdateHandlers
- Fallback support for older Safari versions using composed node traversal

The implementation handles complex scenarios where fullscreen elements
are nested within shadow DOM boundaries, ensuring accurate state
detection in modern web component architectures.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
29ed5e3759 feat(icons): add fullscreen enter and exit icons
Add SVG assets for fullscreen functionality with Media Chrome-compatible paths:
- fullscreen-enter.svg: expand corners icon for entering fullscreen
- fullscreen-exit.svg: contract corners icon for exiting fullscreen
- Both icons use 26x24 viewBox matching Media Chrome design

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
2e99ba79ae refactor(media-store): add container state owner and rename event types
- Add container state owner to StateOwners type for fullscreen support
- Rename mediaelementchangerequest to mediastateownerchangerequest
- Add containerstateownerchangerequest event handling
- Refactor updateStateOwners to support multiple state owners
- Update all usage locations across HTML and React packages
- Validated with Playwright testing on both demo applications

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
da94272f63 refactor(media-store): replace mediaEvents with stateOwnersUpdateHandlers pattern
- Replace simple mediaEvents arrays with stateOwnersUpdateHandlers functions
- Add cleanup function returns to prevent memory leaks
- Update factory to use new event handler pattern with proper teardown
- Maintain backward compatibility with all existing functionality
- Enable support for multiple state owners (media, document, etc.)
- All existing controls (play/pause, volume, seek) tested and working

This refactor provides the foundation for cross-platform fullscreen support
and other multi-state-owner scenarios while following Media Chrome patterns.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 08:06:08 -07:00
Christian PillsburyandChristian Pillsbury 517bb30678 chore: remove range css from skins for now. 2025-09-09 07:59:56 -07:00
Christian PillsburyandChristian Pillsbury bef0d42631 chore: Add todo code comments. 2025-09-09 07:59:56 -07:00
Christian PillsburyandChristian Pillsbury d239f416bd chore: Add todo code comments. 2025-09-09 07:59:56 -07:00
77c2932b8d fix(media-store): replace tsup with rollup for consistent build tooling
- Remove tsup configuration and dependencies
- Add rollup configuration matching other packages in monorepo
- Use 'rollup -c && tsc --project tsconfig.build.json' build pattern
- Add tsconfig.build.json for declaration-only builds
- Install required rollup plugins (@rollup/plugin-typescript, node-resolve, commonjs)

This eliminates the need for manual dist file modifications by using the same
proven build approach as HTML/React packages. TypeScript now automatically
generates all .d.ts files in proper directory structure.

Fixes the fundamental build system inconsistency where media-store used different
tooling than the rest of the monorepo.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 07:59:56 -07:00
d8809c5abe fix(media-store): resolve TypeScript declaration generation build issues
- Switch from pure tsup to hybrid tsup + tsc approach for declaration generation
- Update build script to use 'tsup && tsc --emitDeclarationOnly'
- Disable tsup's DTS generation to avoid conflicts with TypeScript composite projects
- Ensure all component state definitions have proper .d.ts files generated
- Fix build pipeline that was requiring manual dist file modifications

This resolves the fundamental build system issue where TypeScript declarations
weren't being properly generated, eliminating the need for manual dist file edits.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 07:59:56 -07:00