mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-05 10:14:30 +00:00
Brand-loop live test (SDS duplicate, plans/figma/brand-loop-test-plan.md) proved the recolor chain end-to-end and surfaced three gaps: - runtime now defines every declared composition variable as a CSS custom property (document root at init + scoped sub-comp hosts in the loader), so imported var(--slug, literal) fills resolve live — without this the frozen literal always won and variable-driven rebranding could not propagate. Slug kept byte-compatible with the figma importer (parity test). render --variables overrides win. - figma component --name: variant frames are often all named 'Platform=Desktop' and slug-collided across imports. - imported fragments carry data-hf-snippet and the project linter skips composition-root rules for them. - /figma skill documents the field-tested non-Enterprise tokens path (MCP get_variable_defs joined with REST boundVariables ids). Shared-helper extractions (injectScopedStyles, flattenedRoot module, parseHostVariableValues, rasterizeFallback, shapeCss) satisfy the dedup/complexity audit the runtime changes tripped. Validated live: brand-loop renders purple from the attribute alone (no manual :root); 118 figma + 662 runtime/compiler + 331 lint tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
/**
|
|
* Shared between the build-time bundler (htmlBundler) and the runtime
|
|
* composition loader: when a sub-composition's inner root is flattened into
|
|
* its host, these timing/identity attributes must be stripped and the
|
|
* authored id preserved as data — identical semantics in both worlds.
|
|
*/
|
|
|
|
export const FLATTENED_INNER_ROOT_STRIP_ATTRS = [
|
|
"data-composition-id",
|
|
"data-composition-file",
|
|
"data-start",
|
|
"data-duration",
|
|
"data-end",
|
|
"data-track-index",
|
|
"data-track",
|
|
"data-composition-src",
|
|
"data-hf-authored-duration",
|
|
"data-hf-authored-end",
|
|
];
|
|
|
|
/** Strip timing attrs, demote the authored id, and mark the flattened root. */
|
|
export function markFlattenedInnerRoot(prepared: Element): void {
|
|
const authoredRootId = prepared.getAttribute("id")?.trim();
|
|
for (const attrName of FLATTENED_INNER_ROOT_STRIP_ATTRS) {
|
|
prepared.removeAttribute(attrName);
|
|
}
|
|
if (authoredRootId) {
|
|
prepared.removeAttribute("id");
|
|
prepared.setAttribute("data-hf-authored-id", authoredRootId);
|
|
}
|
|
prepared.setAttribute("data-hf-inner-root", "true");
|
|
}
|