╭ changed ───────────────╮ │src/ui/widget/thread.zig│ ╰────────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │2582 const entry = self.data.selectedThread() orelse return; │ │2583 │ │2584 const form = self.threadForm() orelse return; │ │2608 - const target_branch_field_index = form.children.count() - 3; │ │2609 - const title_input = &form.children.values()[title_field_index].widget.text_input; │ │2610 - const tags_input = &form.children.values()[tags_field_index].widget.text_input; │ │2611 - const description_input = &form.children.values()[description_field_index].widget.text_input;│ │2585 + const title_input = try formField(form, "title"); │ │2586 + const tags_input = try formField(form, "tags"); │ │2587 + const description_input = try formField(form, "description"); │ │2588 │ │2589 const title = try title_input.text(allocator); │ │2590 defer allocator.free(title); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │2592 defer allocator.free(tags); │ │2593 const description = try description_input.text(allocator); │ │2594 defer allocator.free(description); │ │2619 - const target_branch = if (comptime supports_drafts) try form.children.values()[target_branch_field_index].widget.text_input.text(allocator) else "";│ │2595 + const target_branch = if (comptime supports_drafts) try (try formField(form, "target_branch")).text(allocator) else ""; │ │2596 defer if (comptime supports_drafts) allocator.free(target_branch); │ │2597 │ │2598 if (!Event.fieldsValid(title, tags)) { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │2653 const aa = self.session.arena.allocator(); │ │2654 const source = if (supports_drafts) blk: { │ │2655 const form = self.threadForm() orelse break :blk null; │ │2680 - break :blk switch (form.children.values()[source_field_index].widget) { │ │2681 - .patch_source => |*value| value, │ │2682 - else => null, │ │2683 - }; │ │2656 + break :blk formWidget(form, .patch_source); │ │2657 } else null; │ │2658 self.session.data.form_feedback = @unionInit(ui.Session.FormFeedback, @tagName(feedback_tag), .{│ │2659 .failure = failure, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯