mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-07 18:26:17 +00:00
* ci: run fallow audit in lefthook pre-commit Mirrors the same `fallow audit --base ... --fail-on-issues` check that runs in CI, but locally against HEAD so issues surface at commit time instead of after the push round-trip. Scoped to `packages/**` source files via the glob — non-code edits (README, docs, top-level configs) skip the hook entirely. Measured locally: ~5s in parallel with the existing lint/format/typecheck checks. Doesn't extend wall-clock time because typecheck (~11s) is the long pole, and lefthook runs commands in parallel. The default `--gate new-only` means inherited findings don't block the commit — same gate behavior as CI, so local pre-commit and PR audit agree. * refactor: delete orphan declarations flagged by fallow After fallow's auto-fix de-exports unused symbols, oxlint surfaces them as no-unused-vars. This PR deletes those orphan declarations outright. Biggest cleanup: studio/src/icons/SystemIcons.tsx shrinks from 132 to 57 lines — 33 unused icon wrappers and their phosphor-icon imports deleted. Other deletions across 14 more files covering paired getter/setters, helper functions, dead env constants, internal components with no callers, and cascading unused imports. Cascade-causing files held back for follow-up PRs: renderOrchestrator barrel of captureCost re-exports, telemetry/portUtils/remote barrels, Button.tsx + ui/index.ts (would orphan whole file), studioMotion type re-exports. Test plan: typecheck clean across 8 packages, oxlint + oxfmt clean, fallow audit exit 0 (remaining findings inherited), cli + studio vitest suites pass.
16 lines
611 B
TypeScript
16 lines
611 B
TypeScript
import type { DomEditLayerItem } from "./domEditing";
|
|
|
|
const MEDIA_LAYER_TAGS = new Set(["audio", "canvas", "img", "picture", "svg", "video"]);
|
|
|
|
export function getTimelineLayerPanelSummary(layers: readonly DomEditLayerItem[]): string {
|
|
const childCount = Math.max(0, layers.length - 1);
|
|
if (childCount > 0) {
|
|
return `${childCount} nested selectable layer${childCount === 1 ? "" : "s"}`;
|
|
}
|
|
const layer = layers[0];
|
|
if (!layer) return "No selectable layers";
|
|
return MEDIA_LAYER_TAGS.has(layer.tagName.trim().toLowerCase())
|
|
? "Single selectable media layer"
|
|
: "Single selectable layer";
|
|
}
|