feat(cli): keyframes command (surface GSAP/CSS/Anime keyframes + 3D onion-skin --shot) (#1603)

Renames the motion-surfacing tool from `hyperframes keyframes` to `hyperframes motion`,
renames the implementation from keyframes*.ts to motion*.ts (keeping the keyframe data
model name where still accurate), and renames the shipped skill from
hyperframes-keyframes to hyperframes-motion. Expands the skill from a command
reference into a full motion-design workflow: reading motion, 3D angle verification,
layered GSAP motion, one-shot reference reproduction, diagnostic checks, and
eval-derived craft guidance.
This commit is contained in:
Miguel Ángel
2026-07-01 19:51:55 -07:00
committed by GitHub
parent 145c71e837
commit a908af11a8
34 changed files with 3973 additions and 159 deletions
+12
View File
@@ -95,6 +95,18 @@ export function computeOverflow(
return Object.keys(overflow).length > 0 ? overflow : null;
}
/**
* Whether a computed `overflow*` value clips its box. Mirrors the rule the
* browser audit (layout-audit.browser.js) uses to decide that text spilling
* past such an ancestor is intentionally masked (odometer/ticker reels) rather
* than a `text_box_overflow` defect. Kept here as the one unit-testable seam of
* that suppression: only `visible` (and the `clip visible` no-op) must NOT clip
* — every clipping value must, or real masked overflow gets reported as a bug.
*/
export function overflowValueClips(value: string | null | undefined): boolean {
return !!value && value !== "visible" && value !== "clip visible";
}
export function summarizeLayoutIssues(issues: LayoutIssue[]): LayoutSummary {
const errorCount = issues.filter((issue) => issue.severity === "error").length;
const warningCount = issues.filter((issue) => issue.severity === "warning").length;