import type { Expression } from "@velarscript/compiler/extension"; import type { WebKeyframesExpression } from "./ast.ts"; import { type LookStaticValue } from "./look-static.ts"; /** The const bindings a stop may name: this module's, plus imported ones. */ export type KeyframeStaticValues = ReadonlyMap; /** * Static CSS spelling accepted inside a generated `@keyframes` rule. Charter * section 17 promises a stop reuses the Look property and value checker, so * this is that checker (`lookStaticCssValue`) rather than a second, narrower * grammar: the same literals, unit values, arithmetic, builder calls, named * arguments, and const design tokens a Look property accepts. */ export declare function keyframeCssValue(expression: Expression, values?: KeyframeStaticValues): string | null; /** * The identity of a keyframes structure: equal structures produce equal text * and different structures never do. Injectivity is the whole job, so the * form is JSON rather than a delimiter-joined string. Joining raw values with * `:`, `;`, `{`, `}`, and `|` let one stop's value forge another structure's * spelling — `transform = "a}|100{transform:b"` canonicalized exactly as a * two-stop animation did, so both received one name, one rule was emitted, and * the second animation silently played the first (LOK-U11). JSON escapes the * delimiters inside a value, which is what makes the mapping one to one. */ export declare function keyframesCanonical(expression: WebKeyframesExpression, values?: KeyframeStaticValues): string; /** * A 128-bit FNV-1a over the canonical form, written as 32 hex digits. The * name is a promise that equal structures share one rule, which a 32-bit hash * could not keep: two unrelated animations in one application collide by * accident often enough to matter, and a collision here is not a build error * but a component playing another component's motion. */ export declare function keyframesName(canonical: string): string; //# sourceMappingURL=keyframes.d.ts.map