Pressing a row does what the row is about. Anything else the row can do is a button on the row itself. A button under the list acting on 'the selected item' is the shape this replaces.
One action, and the whole row is it. The list of rooms, the list of saved links: press it and you are there.
<.action_row on_activate={@on_join} value={%{"channel" => name}}>
<:title>{name}</:title> <:cta label="Join"><Icons.icon_btn_add
/></:cta> </.action_row>
The press opens the row in the panel beside the list, and `current` says which one is open. Remove belongs to the row; Add belongs to the panel, because it has no row to belong to.
<.action_row current={@editing == name} …> <:action event={@on_remove}
label="Remove"><Icons.icon_btn_remove /></:action> </.action_row>
Reordering is the case the old shape charged the most for: select, cross the dialog, press Up, cross back. On the row it is one press per step. A button that cannot apply is disabled in place, so the controls do not shift between rows.
<:action event={@on_move_up} label="Move up" disabled={first?}>
<Icons.icon_btn_up /> </:action>