mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-10 22:20:14 +00:00
* refactor: split useTimelinePlayer.ts and hyperframes-player.ts into focused modules (<500 LOC each) * fix(ci): scope 500 LOC check to packages/studio, add allowlist for grandfathered files * feat(cli): Linux ARM64 support — auto-install Chromium on DGX Spark / GB10 / Jetson Chrome Headless Shell has no Linux ARM64 binary. On arm64 Linux: - Detects the platform automatically - Tries to auto-install system Chromium via apt-get (works on Ubuntu/Debian ARM) - Falls back to clear manual instructions with exact commands - 'hyperframes browser ensure' guides through the setup interactively - After setup, all render commands work without any flags * fix(ci): disable Windows Defender real-time monitoring to prevent EPERM builds Path exclusions are insufficient — Defender re-scans new files created during bun install before the exclusion takes effect. Disable real-time monitoring for the entire job duration instead (standard CI practice). * refactor(studio): split all files >500 LOC + extract useToast, delete allowlist All 11 large files split into focused modules under 500 LOC. App.tsx extracted toast logic into useToast hook (493 LOC now). .filesize-allowlist deleted — no longer needed. * fix: remove unused imports from split files, extract useToast from App.tsx App.tsx: 504 → 493 lines (toast logic extracted to useToast hook) timelineDOM.ts: remove unused imports from re-export pattern MotionPanel.tsx: remove unused clampStudioCustomEasePoints import studioMotionOps.ts: remove unused StudioGsapMotionDirection import * fix(ci): use Set-MpPreference to fully disable Windows Defender (both jobs) * fix(producer): use node --experimental-strip-types instead of tsx for build:fonts Eliminates the tsx binary dependency that Windows Defender locks during bun install, causing EPERM errors. Node 22.6+ strips TypeScript types natively with no external binary. * chore: remove .filesize-allowlist — App.tsx is now 493 lines (<500) * fix(ci): disable Windows Defender before checkout to prevent all EPERM races * fix(producer): skip build:fonts if fontData.generated.ts already exists The generated file is tracked in git, so CI doesn't need to regenerate it. This avoids @fontsource/inter node_modules access on Windows which triggers EPERM from Defender scanning during bun install.
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import type { ReactNode } from "react";
|
|
import { getTimelineTrackStyle, type TimelineTrackStyle } from "./timelineTheme";
|
|
|
|
export interface TrackVisualStyle extends TimelineTrackStyle {
|
|
icon: ReactNode;
|
|
}
|
|
|
|
const ICON_BASE = "/icons/timeline";
|
|
function TimelineIcon({ src }: { src: string }) {
|
|
return (
|
|
<img
|
|
src={src}
|
|
alt=""
|
|
width={12}
|
|
height={12}
|
|
style={{ filter: "brightness(0) invert(1)" }}
|
|
draggable={false}
|
|
/>
|
|
);
|
|
}
|
|
|
|
const IconCaptions = <TimelineIcon src={`${ICON_BASE}/captions.svg`} />;
|
|
const IconImage = <TimelineIcon src={`${ICON_BASE}/image.svg`} />;
|
|
const IconMusic = <TimelineIcon src={`${ICON_BASE}/music.svg`} />;
|
|
const IconText = <TimelineIcon src={`${ICON_BASE}/text.svg`} />;
|
|
const IconComposition = <TimelineIcon src={`${ICON_BASE}/composition.svg`} />;
|
|
const IconAudio = <TimelineIcon src={`${ICON_BASE}/audio.svg`} />;
|
|
|
|
const ICONS: Record<string, ReactNode> = {
|
|
video: IconImage,
|
|
audio: IconMusic,
|
|
img: IconImage,
|
|
div: IconComposition,
|
|
span: IconCaptions,
|
|
p: IconText,
|
|
h1: IconText,
|
|
section: IconComposition,
|
|
sfx: IconAudio,
|
|
};
|
|
|
|
export function getTrackStyle(tag: string): TrackVisualStyle {
|
|
const trackStyle = getTimelineTrackStyle(tag);
|
|
const normalized = tag.toLowerCase();
|
|
const icon =
|
|
normalized.startsWith("h") && normalized.length === 2 && "123456".includes(normalized[1] ?? "")
|
|
? ICONS.h1
|
|
: (ICONS[normalized] ?? IconComposition);
|
|
return { ...trackStyle, icon };
|
|
}
|