feat(runtime): support viewport-ahead reveals

This commit is contained in:
slhx agent
2026-08-02 22:06:18 +02:00
parent c530dc5d8f
commit da28db9775
7 changed files with 62 additions and 19 deletions
+24 -2
View File
@@ -1623,6 +1623,7 @@ fn known_hemx_attr(name: &str) -> bool {
| "data-hemx-every"
| "data-hemx-interval"
| "data-hemx-revealed"
| "data-hemx-revealed-ahead"
| "data-hemx-disable-while-pending"
| "data-hemx-policy"
| "data-hemx-nav"
@@ -1727,6 +1728,20 @@ fn reject_invalid_hemx_attr_values(path: &Path, attrs: &[SurfaceAttribute]) -> i
"expected a non-empty same-origin SSE URL",
));
}
"data-hemx-revealed-ahead"
if !value
.trim()
.parse::<f64>()
.ok()
.is_some_and(|value| value.is_finite() && value >= 0.0) =>
{
return Err(invalid_hemx_value(
path,
&attr.name,
value,
"expected a non-negative number of viewports",
));
}
"data-hemx-debounce" | "data-hemx-delay" | "data-hemx-throttle" | "data-hemx-every"
| "data-hemx-interval"
if !valid_duration(value) =>
@@ -2774,12 +2789,12 @@ mod tests {
let canonical_syms = resources.syms();
assert_eq!(
stable_id("generated-rs", &canonical_generated),
3_748_714_336,
2_620_423_950,
"canonical generated Rust changed"
);
assert_eq!(
stable_id("generated-rs-global", &canonical_globals),
2_783_766_475,
2_559_847_213,
"canonical global-export Rust changed"
);
assert_eq!(
@@ -4223,6 +4238,12 @@ fn main() {{
"data-hemx-delay",
"milliseconds",
),
(
"revealed-ahead-negative",
r#"<form data-hemx-revealed data-hemx-revealed-ahead="-1"></form>"#,
"data-hemx-revealed-ahead",
"non-negative",
),
(
"throttle-invalid",
r#"<button data-hemx-handle="save" data-hemx-throttle="ms">Save</button>"#,
@@ -4333,6 +4354,7 @@ fn main() {{
"data-hemx-client-state-version" => {
"expected a positive client state ABI version"
}
"data-hemx-revealed-ahead" => "expected a non-negative number of viewports",
"data-hemx-on" => "expected runtime-supported events: `click`, `submit`, `input`, `change`, `keydown`, `dragstart`, `dragover`, or `drop`",
"data-hemx-confirm" => "expected a non-empty confirmation message",
"data-hemx-sse" => "expected a non-empty same-origin SSE URL",