╭ changed ────────╮ │src/main_wasm.zig│ ╰─────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────╮ │73 _replaceState(url.ptr, @intCast(url.len)); │ │74 } │ │75 │ │76 - const html = try web.generateHtml(allocator, root_ptr); │ │76 + const html = try web.generateHtml(allocator, root_ptr, &session);│ │77 defer allocator.free(html); │ │78 _setHtml(html.ptr, @intCast(html.len)); │ │79 │ ╰─────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │80 - // emit the overlay (form + inputs + button) on every tick so the wasm │ │81 - // layout drives positions, not just the server's initial render. JS │ │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 │ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────╮ │90 const root_focus = root_ptr.getFocus(); │ │91 if (root_focus.grandchild_id) |gid| { │ │92 if (root_focus.children.get(gid)) |child| { │ │93 - // browser-focus the focused overlay control (text input, submit button│ │93 + // browser-focus the focused native control (text input, submit button │ │94 // or file picker) so the browser handles typing, Enter-to-submit and │ │95 // Enter-to-open-the-picker natively. without this the control never │ │96 // gets focus and Enter falls through to the wasm. │ ╰───────────────────────────────────────────────────────────────────────────────────────╯