mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-14 18:01:20 +08:00
9983f37c13
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.
48 lines
1.6 KiB
TypeScript
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");
|
|
});
|
|
});
|