╭ changed ────────╮ │src/main_wasm.zig│ ╰─────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ │56 // min == max height fills it exactly, and each Scroll clips to its │ │57 // viewport while handing its full content to a native-scrollable element. │ │58 // a full-height page instead grows to its content and the browser scrolls │ │59 - // the whole page, which the overlay's absolute positions track. │ │59 + // the whole page. │ │60 const max_height: ?u32 = if (session.data.current_page.fullHeight()) null else min_height;│ │61 try root_ptr.build(allocator, .{ │ │62 .min_size = .{ .width = null, .height = min_height }, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │77 defer allocator.free(html); │ │78 _setHtml(html.ptr, @intCast(html.len)); │ │79 │ │80 - // emit the editable form overlay on every tick so the wasm layout drives│ │81 - // positions, not just the server's initial render. JS │ │82 - // diffs the result against the previous overlay; an unchanged overlay │ │83 - // leaves the live <form> alone — crucial since wiping it mid-click │ │84 - // would detach the submit button before the browser can dispatch the │ │85 - // form submission. │ │86 - const overlay = try web.generateOverlay(allocator, root_ptr, &session); │ │87 - defer allocator.free(overlay); │ │88 - _setOverlay(overlay.ptr, @intCast(overlay.len)); │ │89 - │ │80 const root_focus = root_ptr.getFocus(); │ │81 if (root_focus.grandchild_id) |gid| { │ │82 if (root_focus.children.get(gid)) |child| { │ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────╮ │170 │ │171 extern fn _consoleLog(arg: [*]const u8, len: u32) void; │ │172 extern fn _setHtml(arg: [*]const u8, len: u32) void; │ │183 -extern fn _setOverlay(arg: [*]const u8, len: u32) void; │ │173 extern fn _replaceState(arg: [*]const u8, len: u32) void;│ │174 extern fn _focusInput(focus_id: u32) void; │ │175 extern fn _navigate(arg: [*]const u8, len: u32) void; │ ╰──────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │224 }; │ │225 } │ │226 │ │238 -// js calls this when the value of an overlay <input> changes; we replace │ │227 +// js calls this when the value of a native <input> changes; we replace │ │228 // the matching TextInput's content with the supplied utf-8 bytes. │ │229 export fn _setTextInputValue(focus_id: u32, value_ptr: [*]const u8, value_len: u32) void {│ │230 setTextInputValue(focus_id, value_ptr[0..value_len]) catch |err| { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯