╭ changed ────╮ │build.zig.zon│ ╰─────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ 3 .version = "0.0.0", │ │ 4 .dependencies = .{ │ │ 5 .xit = .{ │ │ 6 - .url = "git+https://github.com/xit-vcs/xit#81dd696376f085645452483e310b2b56c68d4d30",│ │ 7 - .hash = "xit-0.0.0-Ub3nDE4mVAH69BI1gUvS9mXi8lZ3JQ9peYK8BBvoOn4g", │ │ 6 + .url = "git+https://github.com/xit-vcs/xit#53cdbb77e7b4316ccfe033499316c72991acc52a",│ │ 7 + .hash = "xit-0.0.0-Ub3nDFomVAG7x7MdcyRL74mlr1KHjSaL6h2q6Co8zrH6", │ │ 8 }, │ │ 9 }, │ │10 .paths = .{ │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ───────────╮ │src/embed/index.html│ ╰────────────────────╯ ╭────────────────────────────────────────────╮ │121 │ │122 #grid .clickable { │ │123 cursor: pointer; │ │124 + } │ │125 + │ │126 + #grid a.cell-link:hover { │ │127 + text-decoration: underline;│ │128 } │ │129 </style> │ │130 </head> │ ╰────────────────────────────────────────────╯ ╭ changed ──────────╮ │src/embed/script.js│ ╰───────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────╮ │442 wasmInstance.exports._tick(minRows(), maxCols()); │ │443 return; │ │444 } │ │445 + // a link inside a cell's text opens in a new tab on its own │ │446 + if (event.target.closest("a.cell-link")) return; │ │447 const span = event.target.closest(".clickable"); │ │448 if (!span) return; │ │449 // leave modified / non-left clicks (open-in-new-tab, etc.) to the browser│ ╰───────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──╮ │src/try.zig│ ╰───────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │378 if (len >= msg_target or len + 1 + word.len > 120) break; │ │379 try msg_writer.writer.print(" {s}", .{word}); │ │380 } │ │381 - // the newest commit's message runs past what the detail pane │ │382 - // reads, so it shows the truncated message and its link. │ │381 + // the newest commit's message links to the project and runs │ │382 + // past what the detail pane reads, so it shows the truncated │ │383 + // message and its link. │ │384 if (c == commit_count - 1) { │ │385 + try msg_writer.writer.writeAll("\n\nsee https://github.com/xit-vcs/haxy"); │ │386 for (0..ui.detail_preview_lines) |line| { │ │387 try msg_writer.writer.print("\n{d} {s}", .{ line, scatter_words[line % scatter_words.len] });│ │388 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │2622 .unknown => "", │ │2623 .email, .user_name => |t| t, │ │2624 }; │ │2625 - var tb = try wgt.TextBox.init(allocator, text, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none, .label = " author " });│ │2625 + var tb = try wgt.TextBox.init(allocator, text, .{ .border_style = .single, .round_corners = true, .wrap_kind = .none, .label = " author " }); │ │2626 errdefer tb.deinit(allocator); │ │2627 tb.getFocus().mode = .all; │ │2628 switch (author) { │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ────────────╮ │src/ui/Auth/Login.zig│ ╰─────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │33 const button_index: usize = 2; │ │34 │ │35 pub fn init(allocator: std.mem.Allocator, data: *const Self, session: *ui.Session) !View { │ │36 - var box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .rounded_corners = true, .direction = .vert });│ │36 + var box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .round_corners = true, .direction = .vert }); │ │37 errdefer box.deinit(allocator); │ │38 // marks this subtree as an HTML form scope for the web renderer │ │39 box.getFocus().kind = .{ .custom = "form:login" }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │41 var nav_ids: [3]usize = undefined; │ │42 │ │43 { │ │44 - var username = try wgt.TextInput.init(allocator, .{ .label = " username ", .name = "username", .rounded_corners = true, .render_content = session.is_terminal });│ │44 + var username = try wgt.TextInput.init(allocator, .{ .label = " username ", .name = "username", .round_corners = true, .render_content = session.is_terminal }); │ │45 errdefer username.deinit(allocator); │ │46 username.getFocus().mode = .all; │ │47 if (session.formFeedback(.login)) |feedback| try username.setContent(allocator, feedback.username); │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │54 } │ │55 │ │56 { │ │57 - var password = try wgt.TextInput.init(allocator, .{ .label = " password ", .password = true, .name = "password", .rounded_corners = true, .render_content = session.is_terminal });│ │57 + var password = try wgt.TextInput.init(allocator, .{ .label = " password ", .password = true, .name = "password", .round_corners = true, .render_content = session.is_terminal }); │ │58 errdefer password.deinit(allocator); │ │59 password.getFocus().mode = .all; │ │60 nav_ids[password_index] = password.getFocus().id; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │66 } │ │67 │ │68 { │ │69 - var button = try wgt.TextBox.init(allocator, "login", .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none });│ │69 + var button = try wgt.TextBox.init(allocator, "login", .{ .border_style = .single, .round_corners = true, .wrap_kind = .none }); │ │70 errdefer button.deinit(allocator); │ │71 button.getFocus().mode = .all; │ │72 // the renderer distinguishes plain clickables from buttons that │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─────────────╮ │src/ui/Auth/Logout.zig│ ╰──────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │25 const button_index: usize = 1; │ │26 │ │27 pub fn init(allocator: std.mem.Allocator, data: *const Self, session: *ui.Session) !View { │ │28 - var box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .rounded_corners = true, .direction = .vert });│ │28 + var box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .round_corners = true, .direction = .vert }); │ │29 errdefer box.deinit(allocator); │ │30 // marks this subtree as an HTML form scope for the web renderer │ │31 box.getFocus().kind = .{ .custom = "form:logout" }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯