import { CompositionProbe, type ProbeResult, readPositiveDimension } from "./composition-probe.js"; import { isControlsClick, setupControls, setupPoster } from "./controls-setup.js"; import { adoptShadowStyles, createCompositionIframe, scaleIframeToFit } from "./iframe-dom.js"; import { DirectTimelineClock } from "./direct-timeline-clock.js"; import { ParentMediaManager } from "./parent-media.js"; import { isRealmHtmlMediaElement } from "./media-element-guards.js"; import { handleRuntimeMessage } from "./runtime-message-handler.js"; import { SHADER_CAPTURE_SCALE_ATTR, SHADER_LOADING_ATTR, type ShaderLoadingMode, getShaderCaptureScaleFromElement, getShaderModeFromElement, prepareSrcForElement, prepareSrcdocForElement, } from "./shader-options.js"; import { createShaderLoader } from "./shader-loader-element.js"; import { ShaderLoaderState } from "./shader-loader-state.js"; import { PLAYER_STYLES } from "./styles.js"; import { type DirectTimelineAdapter } from "./timeline-adapters.js"; import { runtimeProtocolMetadata } from "@hyperframes/core/runtime/protocol"; // Playback-rate bounds mirror the runtime clamp in // packages/core/src/runtime/init.ts (applyPlaybackRate) and media.ts so the // player accepts the same range as the in-iframe runtime: an out-of-range rate // would otherwise drive the parent-proxied