22 lines
1.2 KiB
TypeScript
22 lines
1.2 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { compileTemplate } from "../views/engine/compiler.ts";
|
|
import { lex } from "../views/engine/lexer.ts";
|
|
import { parse } from "../views/engine/parser.ts";
|
|
import { stage } from "../views/stage.ts";
|
|
|
|
test("stage manager emits native scroll-driven scenes and portal transitions", () => {
|
|
const css = stage()
|
|
.scene("intro-in", { selector: ".intro", keyframes: { "0%": { opacity: 0, transform: "translateY(2rem)" }, "100%": { opacity: 1, transform: "translateY(0)" } }, range: "entry 0% cover 45%" })
|
|
.portal("main", { old: { opacity: 1 }, new: { opacity: 0 }, duration: "180ms" })
|
|
.css();
|
|
expect(css).toContain("animation-timeline: view()");
|
|
expect(css).toContain("animation-range: entry 0% cover 45%");
|
|
expect(css).toContain("::view-transition-old(main)");
|
|
});
|
|
|
|
test("portal blocks compile to named view-transition boundaries", () => {
|
|
const parsed = parse(lex("portal main\n h1 Hello"));
|
|
const compiled = compileTemplate(parsed.nodes, { path: "/tmp/portal.spug", dir: "/tmp" });
|
|
expect(compiled.source).toContain("data-muddle-portal=\\\"main\\\"");
|
|
expect(compiled.source).toContain("view-transition-name:main");
|
|
});
|