refactor(react): replace prototype-walking and inferred class props (#1376)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
rahim
2026-04-20 09:20:46 -07:00
committed by GitHub
co-authored by Claude Opus 4.6
parent 5e9a02c851
commit 2f7212028c
21 changed files with 256 additions and 176 deletions
+2 -2
View File
@@ -12,6 +12,6 @@ export type { PlaybackRateOwners, PlaybackRateState } from './features/track-pla
export { trackPlaybackRate } from './features/track-playback-rate';
export { appendSegment } from './media/append-segment';
export { flushBuffer } from './media/buffer-flusher';
export type { SpfMediaAPI } from './playback-engine/adapter';
export { SpfMedia, SpfMediaMixin } from './playback-engine/adapter';
export type { SpfMediaAPI, SpfMediaProps } from './playback-engine/adapter';
export { SpfMedia, SpfMediaMixin, spfMediaDefaultProps } from './playback-engine/adapter';
export { destroyVttParser, parseVttSegment } from './text/parse-vtt-segment';
@@ -3,10 +3,18 @@ import { update } from '../../core/signals/primitives';
import type { PlaybackEngineConfig } from './engine';
import { createPlaybackEngine, type PlaybackEngine } from './engine';
export interface SpfMediaAPI {
readonly engine: PlaybackEngine;
export interface SpfMediaProps {
src: string;
preload: '' | 'none' | 'metadata' | 'auto';
}
export const spfMediaDefaultProps: SpfMediaProps = {
src: '',
preload: '',
};
export interface SpfMediaAPI extends SpfMediaProps {
readonly engine: PlaybackEngine;
attach(mediaElement: HTMLMediaElement): void;
detach(): void;
destroy(): void;
@@ -35,7 +43,7 @@ export function SpfMediaMixin<Base extends Constructor<any>>(BaseClass: Base) {
class SpfMediaImpl extends BaseClass {
#engine: PlaybackEngine;
#config: PlaybackEngineConfig;
#preload: '' | 'none' | 'metadata' | 'auto' = '';
#preload: '' | 'none' | 'metadata' | 'auto' = spfMediaDefaultProps.preload;
/** Pending loadstart listener from a deferred play() retry, if any. */
#loadstartListener: (() => void) | null = null;