mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
feat(core): declarative variable bindings — data-var-src, data-var-text, css custom props
This commit is contained in:
@@ -40,12 +40,14 @@ Timed child elements are clips. **`class="clip"` is required on visible timed el
|
||||
|
||||
When a clip is a sub-composition host (loads another composition file):
|
||||
|
||||
| Attribute | Required | Meaning |
|
||||
| ---------------------------- | -------- | ---------------------------------------------------------------------- |
|
||||
| `data-composition-id` | Yes | The internal composition ID of the loaded file. |
|
||||
| `data-composition-src` | Yes | Path to the sub-composition HTML file. |
|
||||
| `data-width` / `data-height` | Yes | Render dimensions for the sub-composition instance. |
|
||||
| `data-variable-values` | No | Per-instance variable overrides as JSON. See `variables-and-media.md`. |
|
||||
| Attribute | Required | Meaning |
|
||||
| ---------------------------- | -------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| `data-composition-id` | Yes | The internal composition ID of the loaded file. |
|
||||
| `data-composition-src` | Yes | Path to the sub-composition HTML file. |
|
||||
| `data-width` / `data-height` | Yes | Render dimensions for the sub-composition instance. |
|
||||
| `data-variable-values` | No | Per-instance variable overrides as JSON. See `variables-and-media.md`. |
|
||||
| `data-var-src` | No | Binds the element's `src` to a declared variable id (media/image substitution, authored src = fallback). |
|
||||
| `data-var-text` | No | Binds the element's own text to a scalar variable id; children are preserved. |
|
||||
|
||||
See `sub-compositions.md` for the full wiring pattern.
|
||||
|
||||
|
||||
@@ -15,12 +15,29 @@ Declare variables on the `<html>` element with `data-composition-variables`. Eac
|
||||
></html>
|
||||
```
|
||||
|
||||
Read resolved values once during initialization:
|
||||
**Prefer declarative bindings — no script needed** for direct substitution:
|
||||
|
||||
```html
|
||||
<img class="clip" data-start="0" data-duration="5" data-var-src="heroImage" src="fallback.jpg" />
|
||||
<h1 class="clip" data-start="0" data-duration="5" data-var-text="title">Fallback</h1>
|
||||
<style>
|
||||
.card {
|
||||
color: var(--accent);
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
- `data-var-src="id"` substitutes the element's `src` (URL string or image `{url}`); the authored `src` is the fallback.
|
||||
- `data-var-text="id"` substitutes the element's own text; element children (nested clips, animated spans) are preserved.
|
||||
- Every scalar variable is applied automatically as a `--{id}` CSS custom property on the composition root, so `var(--id)` CSS responds to overrides — no `setProperty` boilerplate.
|
||||
- Bindings resolve identically in preview and render, and per-instance for sub-compositions.
|
||||
- Caveat: media with audio should keep a real fallback `src` — render audio extraction reads the authored attribute (lint: `media_variable_src_no_fallback`).
|
||||
|
||||
For logic beyond direct substitution (loops, conditionals, derived values), read values once during initialization:
|
||||
|
||||
```js
|
||||
const { title, accent } = window.__hyperframes.getVariables();
|
||||
document.getElementById("title").textContent = title;
|
||||
document.documentElement.style.setProperty("--accent", accent);
|
||||
```
|
||||
|
||||
### Variable Rules
|
||||
|
||||
Reference in New Issue
Block a user