Split motion packs from accessibility overrides

This commit is contained in:
2026-03-20 12:03:46 +08:00
parent 010638503f
commit e5434bada9
8 changed files with 320 additions and 64 deletions
@@ -0,0 +1,52 @@
import { describe, expect, it } from "vitest";
import {
defaultMotionAccessibility,
defaultMotionMode,
defaultMotionPack,
motionAccessibilityDetails,
motionAccessibilityNames,
motionModeNames,
motionPackDetails,
motionPackNames,
setMotionAccessibility,
setMotionMode,
setMotionPack
} from "@ai-ui/tokens";
describe("motion contract", () => {
it("exposes default values that exist in the public name sets", () => {
expect(motionPackNames).toContain(defaultMotionPack);
expect(motionAccessibilityNames).toContain(defaultMotionAccessibility);
expect(motionModeNames).toContain(defaultMotionMode);
expect(motionPackDetails[defaultMotionPack].label).toBeTruthy();
expect(motionAccessibilityDetails[defaultMotionAccessibility].label).toBeTruthy();
});
it("sets the active motion pack on the document root", () => {
setMotionPack("spring");
expect(document.documentElement.dataset.motionPack).toBe("spring");
});
it("sets reduced motion accessibility on the document root", () => {
setMotionAccessibility("reduced");
expect(document.documentElement.dataset.motion).toBe("reduced");
});
it("removes the accessibility override when system mode is restored", () => {
setMotionAccessibility("reduced");
setMotionMode("system");
expect(document.documentElement.dataset.motion).toBeUndefined();
});
it("supports explicit full motion override on custom roots", () => {
const target = document.createElement("div");
setMotionAccessibility("full", target);
expect(target.dataset.motion).toBe("full");
});
});