╭ changed ────────╮ │src/serve_ssh.zig│ ╰─────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────╮ │49 .height_cells = if (pty.height_cells == 0) 24 else pty.height_cells,│ │50 }; │ │51 │ │52 - // build the UsersAndRepos page in a session-scoped arena. same fallback│ │53 - // pattern as web.zig — if the admin repo doesn't exist yet, render an │ │54 - // empty page rather than refusing the connection. │ │52 + // build the Home page in a session-scoped arena. │ │53 var page_arena = std.heap.ArenaAllocator.init(allocator); │ │54 defer page_arena.deinit(); │ │55 │ ╰────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────╮ │56 const repo_opts: rp.RepoOpts(.xit) = .{}; │ │57 const Repo = rp.Repo(.xit, repo_opts); │ │60 - var repo_or_err = Repo.open(io, allocator, .{ .path = handler.admin_repo_path });│ │61 - const page: ui.Page = if (repo_or_err) |*repo| blk: { │ │62 - defer repo.deinit(io, allocator); │ │63 - break :blk .{ .users_and_repos = try .init(repo_opts, &page_arena, repo) }; │ │64 - } else |_| .{ .users_and_repos = .empty() }; │ │58 + var repo = try Repo.open(io, allocator, .{ .path = handler.admin_repo_path }); │ │59 + defer repo.deinit(io, allocator); │ │60 + const page: ui.Page = .{ .home = try .init(repo_opts, &page_arena, &repo) }; │ │61 │ │62 var root = try ui.initRoot(allocator, &page); │ │63 defer root.deinit(); │ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──╮ │src/try.zig│ ╰───────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮ │186 // consume events into the database │ │187 try evt.consume(repo_opts, io, allocator, &repo, .{ .kind = .head, .name = "haxy/meta" });│ │188 │ │189 - break :blk .{ .users_and_repos = try .init(repo_opts, &page_arena, &repo) }; │ │189 + break :blk .{ .home = try .init(repo_opts, &page_arena, &repo) }; │ │190 }; │ │191 │ │192 // start the server │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │ 9 const Focus = xitui.focus.Focus; │ │10 const evt = @import("./event.zig"); │ │11 │ │12 -pub const UsersAndRepos = @import("./ui/UsersAndRepos.zig"); │ │12 +pub const Home = @import("./ui/Home.zig"); │ │13 │ │14 pub const Page = union(enum) { │ │15 - users_and_repos: UsersAndRepos, │ │15 + home: Home, │ │16 }; │ │17 │ │18 pub fn run(io: std.Io, allocator: std.mem.Allocator, page: *const Page) !void {│ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮ │85 │ │86 pub fn initRoot(allocator: std.mem.Allocator, page: *const Page) !Widget { │ │87 var root: Widget = switch (page.*) { │ │88 - .users_and_repos => |*p| .{ .users_and_repos = try UsersAndRepos.View.init(allocator, p) },│ │88 + .home => |*p| .{ .home = try Home.View.init(allocator, p) }, │ │89 }; │ │90 errdefer root.deinit(); │ │91 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────╮ │105 box: wgt.Box(Widget), │ │106 text_box: wgt.TextBox(Widget), │ │107 scroll: wgt.Scroll(Widget), │ │108 + stack: wgt.Stack(Widget), │ │109 selectable_list: SelectableList, │ │109 - users_and_repos: UsersAndRepos.View,│ │110 + home: Home.View, │ │111 + home_header: Home.Header.View, │ │112 + home_users: Home.Users.View, │ │113 + home_repos: Home.Repos.View, │ │114 │ │115 pub fn deinit(self: *Widget) void { │ │116 switch (self.*) { │ ╰─────────────────────────────────────────────╯ ╭ removed ───────────────╮ │src/ui/UsersAndRepos.zig│ ╰────────────────────────╯ ╭ added ────────╮ │src/ui/Home.zig│ ╰───────────────╯ ╭ added ───────────────╮ │src/ui/Home/Header.zig│ ╰──────────────────────╯ ╭ added ──────────────╮ │src/ui/Home/Repos.zig│ ╰─────────────────────╯ ╭──────╮ │next →│ ╰──────╯