╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ───────────────╮ │src/ui/widget/thread.zig│ ╰────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │824 if (description_page) { │ │825 var back_label_buf: ["← back to ".len + thread_name.len]u8 = undefined; │ │826 const back_label = try std.fmt.bufPrint(&back_label_buf, "← back to {s}", .{thread_name}); │ │827 - var text_box = try wgt.TextBox.init(allocator, back_label, .{ .border_style = .single, .round_corners = true, .wrap_kind = .none }); │ │827 + var text_box = try wgt.TextBox.init(allocator, back_label, .{ .border = .single, .round_corners = true, .wrap_kind = .none }); │ │828 errdefer text_box.deinit(allocator); │ │829 text_box.getFocus().mode = .all; │ │830 text_box.getFocus().kind = .{ .custom = try listLink(self.session.page_arena, self.data.identity, entryStatus(entry), "", entry.id, self.data.search orelse "") };│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │831 try inner_box.children.put(allocator, text_box.getFocus().id, .{ .widget = .{ .text_box = text_box }, .rect = null, .min_size = null }); │ │832 self.title_id = text_box.getFocus().id; │ │833 } else { │ │834 - var title = try wgt.TextBox.init(allocator, entry.record.event.title, .{ .border_style = .single, .round_corners = true, .wrap_kind = .word, .label = " title " }); │ │834 + var title = try wgt.TextBox.init(allocator, entry.record.event.title, .{ .border = .single, .round_corners = true, .wrap_kind = .word, .top_label = .{ .text = " title " } });│ │835 errdefer title.deinit(allocator); │ │836 title.getFocus().mode = .all; │ │837 try inner_box.children.put(allocator, title.getFocus().id, .{ .widget = .{ .text_box = title }, .rect = null, .min_size = null }); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1553 } │ │1554 │ │1555 pub fn init(allocator: std.mem.Allocator, data: *const Self, session: *ui.Session) !This { │ │1556 - var outer = try wgt.Box(Widget).init(allocator, .{ .border_style = null, .direction = .vert });│ │1556 + var outer = try wgt.Box(Widget).init(allocator, .{ .border = null, .direction = .vert }); │ │1557 errdefer outer.deinit(allocator); │ │1558 │ │1559 // the tabs at the top. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1738 // the master-detail split showing `status`'s window, or the conflicts │ │1739 // window when null. │ │1740 fn initSplit(allocator: std.mem.Allocator, session: *ui.Session, data: *const Self, status_maybe: ?Status, drafts: bool) !wgt.Box(Widget) { │ │1741 - var box = try wgt.Box(Widget).init(allocator, .{ .border_style = null, .direction = .horiz }); │ │1741 + var box = try wgt.Box(Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │1742 errdefer box.deinit(allocator); │ │1743 │ │1744 const win = if (status_maybe) |status| data.window(status) else if (drafts and supports_drafts) &data.drafts else if (supports_conflicts) &data.conflicts else unreachable;│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1747 // reloads the page rooted at the following thread. │ │1748 { │ │1749 var list_scroll = blk: { │ │1750 - var list_box = try wgt.Box(Widget).init(allocator, .{ .border_style = null, .direction = .vert, .stretch = true }); │ │1750 + var list_box = try wgt.Box(Widget).init(allocator, .{ .border = null, .direction = .vert, .stretch = true }); │ │1751 errdefer list_box.deinit(allocator); │ │1752 if (win.prev_id) |prev| │ │1753 try addRow(allocator, &list_box, "← previous", "", try windowLink(session.page_arena, data, status_maybe, drafts, prev));│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1774 │ │1775 // frame the detail pane inside the master-detail split │ │1776 { │ │1777 - var frame = try wgt.Box(Widget).init(allocator, .{ .border_style = .hidden, .direction = .vert });│ │1777 + var frame = try wgt.Box(Widget).init(allocator, .{ .border = .hidden, .direction = .vert }); │ │1778 errdefer frame.deinit(allocator); │ │1779 frame.getFocus().mode = .mouse; │ │1780 var detail_view = try DetailType.init(allocator, data, session, null, .{}); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1792 // `record` when given. its form: subtree makes the web renderer POST │ │1793 // the inputs to `action`'s route. │ │1794 fn initThreadForm(allocator: std.mem.Allocator, session: *ui.Session, data: *const Self, action: []const u8, record: ?*const Event.Record) !wgt.Box(Widget) {│ │1795 - var box = try wgt.Box(Widget).init(allocator, .{ .border_style = null, .direction = .vert }); │ │1795 + var box = try wgt.Box(Widget).init(allocator, .{ .border = null, .direction = .vert }); │ │1796 errdefer box.deinit(allocator); │ │1797 box.getFocus().kind = .{ .custom = action }; │ │1798 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1800 const saved_fields = if (saved_form) |saved| saved.fields else null; │ │1801 │ │1802 { │ │1803 - var title = try wgt.TextInput.init(allocator, .{ .label = " title ", .name = "title", .visible_width = null, .round_corners = true, .render_content = session.is_terminal }); │ │1803 + var title = try wgt.TextInput.init(allocator, .{ .top_label = .{ .text = " title " }, .name = "title", .visible_width = null, .round_corners = true, .render_content = session.is_terminal });│ │1804 errdefer title.deinit(allocator); │ │1805 title.getFocus().mode = .all; │ │1806 if (saved_fields) |saved| │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1812 } │ │1813 │ │1814 { │ │1815 - var labels = try wgt.TextInput.init(allocator, .{ .label = " labels (separate with spaces) ", .name = "labels", .visible_width = null, .round_corners = true, .render_content = session.is_terminal }); │ │1815 + var labels = try wgt.TextInput.init(allocator, .{ .top_label = .{ .text = " labels (separate with spaces) " }, .name = "labels", .visible_width = null, .round_corners = true, .render_content = session.is_terminal });│ │1816 errdefer labels.deinit(allocator); │ │1817 labels.getFocus().mode = .all; │ │1818 if (saved_fields) |saved| │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1823 } │ │1824 │ │1825 { │ │1826 - var description = try wgt.TextInput.init(allocator, .{ .label = " description (markdown supported) ", .name = "description", .visible_width = null, .round_corners = true, .render_content = session.is_terminal, .multiline = true, .scroll = .{ .fill = true } }); │ │1826 + var description = try wgt.TextInput.init(allocator, .{ .top_label = .{ .text = " description (markdown supported) " }, .name = "description", .visible_width = null, .round_corners = true, .render_content = session.is_terminal, .multiline = true, .scroll = .{ .fill = true } });│ │1827 errdefer description.deinit(allocator); │ │1828 description.getFocus().mode = .all; │ │1829 if (saved_fields) |saved| │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯