╭ changed ────────────╮ │src/ui/Repo/Files.zig│ ╰─────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │501 const has_content = self.detailInner().children.count() > 0; │ │502 const content_focused = if (root_focus.grandchild_id) |g| self.detailInner().children.contains(g) else false; │ │503 self.detailScrollFrame().options.border_style = if (!has_content) null else if (content_focused) .double else .single;│ │504 - │ │505 - // same for the "next" link above the content. │ │506 - const nav_box = self.navBox(); │ │507 - for (nav_box.children.keys(), nav_box.children.values()) |id, *child| { │ │508 - switch (child.widget) { │ │509 - .text_box => |*tb| tb.options.border_style = if (nav_box.getFocus().child_id == id) .single else .hidden, │ │510 - else => {}, │ │511 - } │ │512 - } │ │504 │ │505 // cap the list at list_max_width only while the detail pane fits beside │ │506 // it. the box drops the detail pane when the width can't hold both │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │561 // the pane empty. │ │562 if (self.selectedEntry()) |entry| { │ │563 if (!entry.is_dir) { │ │573 - // the "next" window link sits above the scroll, so it stays put │ │564 + // the window links sit above the scroll, so they stay put │ │565 // while the content scrolls. │ │566 + if (entry.window_start > 0) try self.addNavLink(allocator, nav_box, "scroll to top", entry, 0); │ │567 if (entry.has_more) try self.addNavLink(allocator, nav_box, "next lines →", entry, entry.window_start + file_page);│ │568 if (!entry.loaded) { │ │569 // the placeholder carries the file's "a:" link, so enter │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │604 const path = try childDir(page_arena.allocator(), self.data.dir, entry.name); │ │605 const route = ui.RoutablePage.repoFilesRoute(self.data.identity, self.data.ref_or_oid, self.data.ref_or_oid_value, path, target_start) orelse return error.RouteTooLong;│ │606 const link = try std.fmt.allocPrint(page_arena.allocator(), "a:{s}", .{try route.toUrl(page_arena)}); │ │615 - var tb = try wgt.TextBox(ui.Widget).init(allocator, label, .{ .border_style = .hidden, .rounded_corners = true, .wrap_kind = .none }); │ │607 + var tb = try wgt.TextBox(ui.Widget).init(allocator, label, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none }); │ │608 errdefer tb.deinit(allocator); │ │609 tb.getFocus().focusable = true; │ │610 tb.getFocus().kind = .{ .custom = link }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯