╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ───────────╮ │src/ui/Repo/Refs.zig│ ╰────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │189 │ │190 if (rows.children.count() > 0) rows.getFocus().child_id = rows.children.keys()[0]; │ │191 │ │192 - break :blk try wgt.Scroll(ui.Widget).init(allocator, .{ .box = rows }, .{ .direction = .vert, .web_native = !session.is_terminal }); │ │192 + // fill the column (rows top-aligned, scroll bar pinned to the │ │193 + // edge) rather than shrinking to the widest row. │ │194 + break :blk try wgt.Scroll(ui.Widget).init(allocator, .{ .box = rows }, .{ .direction = .vert, .web_native = !session.is_terminal, .fill = true });│ │195 }; │ │196 errdefer scroll.deinit(allocator); │ │197 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────╮ │241 } │ │242 │ │243 // split the available width evenly between the two columns when it's │ │242 - // known; otherwise let them size to their content. the scroll's own │ │243 - // min width stretches it (and its rows/scroll bar) across the column │ │244 - // rather than only the widest row; the Scroll passes that min down to │ │245 - // its rows. (index 1 in each column box is the scroll; 0 is the label.) │ │244 + // known; otherwise let them size to their content. each column's Scroll │ │245 + // has `fill = true`, so it stretches across the column (rows/scroll bar)│ │246 + // rather than hugging the widest row. │ │247 if (constraint.max_size.width) |w| { │ │248 const half = w / 2; │ │249 for (self.box.children.values()) |*child| { │ ╰──────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │250 child.min_size = .{ .width = half, .height = null }; │ │251 child.max_size = .{ .width = half, .height = null }; │ │251 - child.widget.box.children.values()[1].min_size = .{ .width = half, .height = null };│ │252 } │ │253 } else { │ │254 for (self.box.children.values()) |*child| { │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────╮ │255 child.min_size = null; │ │256 child.max_size = null; │ │257 - child.widget.box.children.values()[1].min_size = null;│ │257 } │ │258 } │ │259 │ ╰───────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────╮ │261 - // clear the incoming min height so each column sizes to its content and │ │262 - // its Scroll clips to the viewport rather than stretching to fill. │ │260 + // clear the incoming min height; each column's Scroll fills the viewport│ │261 + // height itself (via `fill`), keeping its bar pinned to the edge. │ │262 try self.box.build(allocator, .{ │ │263 .min_size = .{ .width = null, .height = null }, │ │264 .max_size = constraint.max_size, │ ╰──────────────────────────────────────────────────────────────────────────────────────╯