╭ changed ──────────────╮ │src/ui/Repo/Commits.zig│ ╰───────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │351 // marks a message the page only shows part of ("" when it's whole). │ │352 fn messageBox(allocator: std.mem.Allocator, message: []const u8, bottom_label: []const u8) !wgt.TextBox {│ │353 var tb = try wgt.TextBox.init(allocator, message, .{ │ │354 - .border_style = .single, │ │354 + .border = .single, │ │355 .round_corners = true, │ │356 .wrap_kind = .word, │ │357 - .label = " message ", │ │358 - .bottom_label = bottom_label, │ │357 + .top_label = .{ .text = " message " }, │ │358 + .bottom_label = .{ .text = bottom_label }, │ │359 .detect_links = true, │ │360 }); │ │361 tb.getFocus().mode = .all; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │387 const detail_min_width: usize = 40; │ │388 │ │389 pub fn init(allocator: std.mem.Allocator, data: *const Self, session: *ui.Session) !View { │ │390 - var outer = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .vert });│ │390 + var outer = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .vert }); │ │391 errdefer outer.deinit(allocator); │ │392 │ │393 if (data.no_commits) { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │406 try outer.children.put(allocator, header_view.getFocus().id, .{ .widget = .{ .search_header = header_view }, .rect = null, .min_size = .{ .width = null, .height = 4 } });│ │407 } │ │408 │ │409 - var box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .horiz }); │ │409 + var box = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │410 errdefer box.deinit(allocator); │ │411 │ │412 // the commit list (one focusable row each), plus a "next" link │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │413 { │ │414 var list_scroll = blk: { │ │415 - var list_box = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .vert, .stretch = true });│ │415 + var list_box = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .vert, .stretch = true }); │ │416 errdefer list_box.deinit(allocator); │ │417 for (data.commits, 0..) |commit, index| { │ │418 // an in-page "ai:" anchor so a commit row is clickable with │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │434 { │ │435 var detail_outer = blk: { │ │436 var detail_scroll = blk2: { │ │437 - var rows = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .vert }); │ │437 + var rows = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .vert }); │ │438 errdefer rows.deinit(allocator); │ │439 break :blk2 try wgt.Scroll(ui.Widget).init(allocator, .{ .box = rows }, .{ .direction = .vert, .web_native = !session.is_terminal, .fill = true });│ │440 }; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │441 errdefer detail_scroll.deinit(allocator); │ │442 - var frame = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = .hidden, .direction = .vert });│ │442 + var frame = try wgt.Box(ui.Widget).init(allocator, .{ .border = .hidden, .direction = .vert }); │ │443 errdefer frame.deinit(allocator); │ │444 // the frame's selected child is its scroll, so the focus chain │ │445 // reaches a row (populateDetail points the scroll's inner box at │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │470 } │ │471 │ │472 fn addRow(allocator: std.mem.Allocator, box: *wgt.Box(ui.Widget), label: []const u8, link: []const u8, bottom_label: []const u8) !void { │ │473 - var row = try wgt.TextBox.init(allocator, label, .{ .border_style = .hidden, .round_corners = true, .wrap_kind = .word, .bottom_label = bottom_label }); │ │473 + var row = try wgt.TextBox.init(allocator, label, .{ .border = .hidden, .round_corners = true, .wrap_kind = .word, .bottom_label = .{ .text = bottom_label } });│ │474 errdefer row.deinit(allocator); │ │475 row.getFocus().mode = .all; │ │476 if (link.len != 0) row.getFocus().kind = .{ .custom = link }; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │479 │ │480 // a focusable row following the "a:" `link`. │ │481 fn addLink(allocator: std.mem.Allocator, box: *wgt.Box(ui.Widget), label: []const u8, link: []const u8) !void { │ │482 - var tb = try wgt.TextBox.init(allocator, label, .{ .border_style = .single, .round_corners = true, .wrap_kind = .none });│ │482 + var tb = try wgt.TextBox.init(allocator, label, .{ .border = .single, .round_corners = true, .wrap_kind = .none }); │ │483 errdefer tb.deinit(allocator); │ │484 tb.getFocus().mode = .all; │ │485 tb.getFocus().kind = .{ .custom = link }; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │627 } else { │ │628 const pa = self.session.page_arena; │ │629 { │ │630 - var row = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .horiz }); │ │630 + var row = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │631 errdefer row.deinit(allocator); │ │632 const diff_route = self.data.handle.location.commitDiffRoute(commit.oid, commit.parent_oid) orelse return error.RouteTooLong;│ │633 try addLink(allocator, &row, "view diff", try pa.allocator().print("a:{s}", .{try diff_route.toUrl(pa)})); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │639 try addLink(allocator, inner, "view commits from this merge", try pa.allocator().print("a:{s}", .{try route.toUrl(pa)}));│ │640 }; │ │641 if (commit.author != .unknown or commit.committer != .unknown) { │ │642 - var row = try wgt.Box(ui.Widget).init(allocator, .{ .border_style = null, .direction = .horiz }); │ │642 + var row = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │643 errdefer row.deinit(allocator); │ │644 if (commit.author != .unknown) { │ │645 var tb = try ui.authorBox(allocator, pa, commit.author); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯