<%# Top bar: remaining count + skip %>
<%= turbo_frame_tag "categorize_remaining" do %>
<%= t(".remaining", count: @total_uncategorized) %>
<% end %>
<%= link_to transactions_categorize_path(position: @position + 1),
class: "flex items-center gap-1.5 text-sm font-medium text-secondary hover:text-primary" do %>
<%= t(".skip") %>
<%= icon("arrow-right", size: "sm") %>
<% end %>
<%# Group identity — above columns %>
<%= render partial: "transactions/categorizes/group_title",
locals: { display_name: @group.display_name, color: @group.merchant&.color || "#737373", transaction_type: @group.transaction_type } %>
<%= turbo_frame_tag "categorize_group_summary" do %>
<%= t(".transaction_count", count: @group.entries.size) %>
·
<%= format_money(@group.entries.sum { |e| e.amount_money.abs }) %>
<% end %>
<%# Main form %>
<%= form_with url: transactions_categorize_path, method: :post, id: "categorize-form", class: "w-full" do |form| %>
<%= form.hidden_field :position, value: @position %>
<%= form.hidden_field :transaction_type, value: @group.transaction_type %>
<%# Left column (60%): rule creation + transaction list %>
<%# Rule creation %>
<%# Transaction list %>
<%= t(".transactions_hint") %>
<%= render partial: "transactions/categorizes/transaction_list",
locals: { entries: @group.entries, categories: @categories } %>
<%# Right column (40%): category picker %>
<%= t(".assign_category") %>
<%# Search field %>
<%= icon("search", class: "absolute left-3 text-secondary") %>
"
autocomplete="off"
autofocus
class="w-full pl-9 pr-3 py-2 text-sm bg-transparent border-none rounded-lg focus:outline-none focus:ring-0 placeholder:text-secondary"
data-list-filter-target="input"
data-categorize-target="filter"
data-action="input->list-filter#filter">
<%# Category pills — submit the form directly %>
<%= t(".no_categories") %>
<% @categories.each do |category| %>
<% end %>
<% end %>