╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ─────────────╮ │src/ui/Repo/Events.zig│ ╰──────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │776 }; │ │777 ui.widget.markSelected(tab, index == self.selected_tab); │ │778 } │ │778 - try self.box.build(allocator, constraint, root_focus); │ │779 + try self.scroll.build(allocator, constraint, root_focus); │ │780 } │ │781 │ │782 pub fn input(self: *Header.View, allocator: std.mem.Allocator, key: Key, root_focus: *Focus) !void {│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │782 - const selected = self.box.getFocus().child_id orelse return; │ │783 + const selected = self.scroll.row().getFocus().child_id orelse return; │ │784 const stops = [_]?usize{ self.tab_ids[0], self.tab_ids[1], self.button_id }; │ │785 const count = 2 + @as(usize, @intFromBool(self.button_id != null)); │ │786 const current = std.mem.indexOfScalar(?usize, stops[0..count], selected) orelse return;│ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────╮ │799 if (!self.session.is_terminal) return; │ │800 if (self.session.host_request != null) return; │ │801 const button_id = self.button_id orelse return; │ │801 - const child = self.box.children.getPtr(button_id) orelse return; │ │802 + const child = self.scroll.row().children.getPtr(button_id) orelse return;│ │803 const button = switch (child.widget) { │ │804 .text_box => |*button| button, │ │805 else => return, │ ╰──────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────╮ │810 │ │811 fn syncFocused(self: *Header.View) bool { │ │812 const button_id = self.button_id orelse return false; │ │812 - return self.box.getFocus().child_id == button_id; │ │813 + return self.scroll.row().getFocus().child_id == button_id;│ │814 } │ │815 │ │816 pub fn getSelectedIndex(self: *Header.View) ?usize { │ ╰───────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────╮ │816 - const id = self.box.getFocus().child_id orelse return null; │ │817 + const id = self.scroll.row().getFocus().child_id orelse return null;│ │818 return std.mem.indexOfScalar(usize, &self.tab_ids, id); │ │819 } │ │820 │ ╰─────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ │821 pub fn focusCurrent(self: *Header.View, root_focus: *Focus) void { │ │821 - root_focus.setFocus(self.box.getFocus().child_id orelse self.tab_ids[0]); │ │822 + root_focus.setFocus(self.scroll.row().getFocus().child_id orelse self.tab_ids[0]);│ │823 } │ │824 │ │825 pub fn clearGrid(self: *Header.View) void { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────╮ │825 - self.box.clearGrid(); │ │826 + self.scroll.clearGrid(); │ │827 } │ │828 │ │829 pub fn getGrid(self: Header.View) ?Grid {│ ╰──────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────╮ │829 - return self.box.getGrid(); │ │830 + return self.scroll.getGrid(); │ │831 } │ │832 │ │833 pub fn getFocus(self: *Header.View) *Focus {│ ╰─────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────╮ │833 - return self.box.getFocus(); │ │834 + return self.scroll.getFocus();│ │835 } │ │836 }; │ │837 }; │ ╰───────────────────────────────────────────────╯ ╭ changed ───────────╮ │src/ui/Repo/Refs.zig│ ╰────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │164 │ │165 // both backends list refs in sorted order, so a prefix is just a seek │ │166 { │ │167 - var header = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │168 - errdefer header.deinit(allocator); │ │167 + var header_scroll = try ui.widget.HeaderScroll.init(allocator, session); │ │168 + errdefer header_scroll.deinit(allocator); │ │169 + const header = header_scroll.row(); │ │170 { │ │171 var search_box = try ui.widget.SearchBox.init(allocator, session, " search ", "search", data.search);│ │172 errdefer search_box.deinit(allocator); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯