Files
heygen-com__hyperframes/packages/studio/src/utils/studioSelectionSnapshot.test.ts
Miguel Ángel 9983f37c13 feat(cli): expose Studio selection through preview (#1777)
Add a small Studio selection channel so agents can ask a running preview server
for the element the user selected in Studio. This keeps the UX on the existing
npx hyperframes preview surface while giving agents a stable source file,
target selector, timeline time, and thumbnail URL for follow-up edits.
2026-06-28 15:15:57 -04:00

48 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildStudioSelectionSnapshot } from "./studioSelectionSnapshot";
import type { DomEditSelection } from "../components/editor/domEditing";
describe("buildStudioSelectionSnapshot", () => {
it("serializes a DOM edit selection without the live HTMLElement", () => {
const selection = {
element: { tagName: "H1" } as HTMLElement,
id: null,
hfId: "hero-title",
selector: ".title",
selectorIndex: 0,
label: "Hero title",
tagName: "h1",
sourceFile: "index.html",
compositionPath: "index.html",
isCompositionHost: false,
isInsideLockedComposition: false,
boundingBox: { x: 10, y: 20, width: 300, height: 64 },
textContent: "Launch faster",
dataAttributes: { "data-hf-id": "hero-title" },
inlineStyles: { color: "white" },
computedStyles: { "font-size": "48px" },
textFields: [],
capabilities: { canSelect: true, canEditStyles: true },
} as DomEditSelection;
const snapshot = buildStudioSelectionSnapshot({
projectId: "demo",
selection,
currentTime: 1.25,
});
expect(snapshot).toMatchObject({
schemaVersion: 1,
projectId: "demo",
compositionPath: "index.html",
sourceFile: "index.html",
currentTime: 1.25,
target: { hfId: "hero-title", selector: ".title", selectorIndex: 0 },
thumbnailUrl:
"/api/projects/demo/thumbnail/index.html?t=1.25&format=png&selector=.title&selectorIndex=0",
});
expect(JSON.stringify(snapshot)).not.toContain("HTMLElement");
expect(snapshot).not.toHaveProperty("element");
});
});