+ {/* Group filter tabs */}
+
+
+ {groups.map((group: ContactGroup) => (
+
+ ))}
+
+
+ {/* Select all / count */}
+
+
+ {selectedContactIds.size} selected
+
+
+ {/* Contact list */}
+
+ {contacts.map((contact: Contact) => {
+ const isSelected = selectedContactIds.has(contact.id);
+ return (
+
+
onToggleContact(contact.id)}>
+
+
+ {contact.name}
+
+
+
+ {formatAddress(contact.address, { start: 4, end: 4 })}
+
+
+
+
+ );
+ })}
+
+
+ );
+}
+
+// --- Step 2: Add to Batch ---
+function StepAddToBatch({
+ entries,
+ resolveToken,
+ onUpdateAmount,
+ onUpdateToken,
+ onRemove,
+}: {
+ entries: BatchContactEntry[];
+ resolveToken: (address: string) => any;
+ onUpdateAmount: (index: number, amount: string) => void;
+ onUpdateToken: (index: number, tokenAddress: string) => void;
+ onRemove: (index: number) => void;
+}) {
+ return (
+