mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
* fix(studio): support web-component refs in useTimelinePlayer The studio's `useTimelinePlayer` hook returns an `iframeRef` that consumers attach to an `<iframe>` element. When consumers wrap the iframe in a custom element (e.g. `<hyperframes-player>`) that puts the iframe inside its shadow DOM, every `iframeRef.current.contentWindow` access returned `null` and `getAdapter()` silently failed — meaning timeline seek, play, pause, and `refreshPlayer` all became no-ops. Changes: - Add `resolveIframe(el)` helper that returns the underlying iframe whether the host is the iframe itself, a custom element with a shadow-DOM iframe, or a wrapper with a descendant iframe. - Export `resolveIframe` from the studio so consumers can pre-resolve the iframe before assigning it to `iframeRef`. - Internal `useTimelinePlayer` keeps the strict `HTMLIFrameElement` ref type, so existing consumers attaching directly to an `<iframe>` are unaffected. Also adds: - JSDoc on the player's `iframeElement` getter. - "Advanced: iframe access" docs section in `packages/player/README.md` and `docs/packages/player.mdx`. - Type-safety lint rules in `.oxlintrc.json` and a "Type-safety conventions" section in `CONTRIBUTING.md`. Backward compatible — App.tsx and NLELayout.tsx continue to work unchanged. * chore(lint): defer no-explicit-any rule; it broke existing codebase The new rules added 37 errors across 32 existing files — mostly legitimate `window as any` casts at browser-global and test-mock boundaries. Enabling them without fixing all violations breaks CI. Revert the `.oxlintrc.json` additions and soften the CONTRIBUTING.md wording to describe the convention without claiming lint enforcement (that enforcement will come in a follow-up PR that fixes all sites).
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
// NLE Layout
|
|
export { NLELayout } from "./components/nle/NLELayout";
|
|
export { NLEPreview } from "./components/nle/NLEPreview";
|
|
export { CompositionBreadcrumb } from "./components/nle/CompositionBreadcrumb";
|
|
export type { CompositionLevel } from "./components/nle/CompositionBreadcrumb";
|
|
|
|
// Player (preview, timeline, playback controls)
|
|
export {
|
|
Player,
|
|
PlayerControls,
|
|
Timeline,
|
|
VideoThumbnail,
|
|
CompositionThumbnail,
|
|
useTimelinePlayer,
|
|
resolveIframe,
|
|
usePlayerStore,
|
|
liveTime,
|
|
formatTime,
|
|
} from "./player";
|
|
export type { TimelineElement } from "./player";
|
|
|
|
// Editor
|
|
export { SourceEditor } from "./components/editor/SourceEditor";
|
|
export { PropertyPanel } from "./components/editor/PropertyPanel";
|
|
export { FileTree } from "./components/editor/FileTree";
|
|
|
|
// App
|
|
export { StudioApp } from "./App";
|
|
|
|
// Hooks
|
|
export { useElementPicker } from "./hooks/useElementPicker";
|
|
export type { PickedElement } from "./hooks/useElementPicker";
|
|
|
|
// Utilities
|
|
export { resolveSourceFile, applyPatch } from "./utils/sourcePatcher";
|
|
export type { PatchOperation } from "./utils/sourcePatcher";
|
|
export { parseStyleString, mergeStyleIntoTag, findElementBlock } from "./utils/htmlEditor";
|