+ );
+}
diff --git a/components/contacts/contact-context-menu.tsx b/components/contacts/contact-context-menu.tsx
index 67c445e5e..85120125f 100644
--- a/components/contacts/contact-context-menu.tsx
+++ b/components/contacts/contact-context-menu.tsx
@@ -18,6 +18,7 @@ import {
Trash2,
Copy,
Printer,
+ FolderInput,
} from "@/components/icons";
import type { ContactCard } from "@/lib/jmap/types";
import { getContactPrimaryEmail } from "@/stores/contact-store";
@@ -50,6 +51,9 @@ interface ContactContextMenuProps {
/** Writes to the contact in the app's composer. */
onCompose?: () => void;
onDuplicate?: () => void;
+ /** Move to another address book; undefined where there is none to move to. */
+ onMoveTo?: () => void;
+ onBatchMoveTo?: () => void;
onBatchExport?: () => void;
onBatchAddToGroup?: () => void;
onBatchDelete?: () => void;
@@ -69,6 +73,8 @@ export function ContactContextMenu({
onAddToGroup,
onCompose,
onDuplicate,
+ onMoveTo,
+ onBatchMoveTo,
onBatchExport,
onBatchAddToGroup,
onBatchDelete,
@@ -121,6 +127,9 @@ export function ContactContextMenu({
onClick={handle(() => onBatchAddToGroup?.())}
disabled={!onBatchAddToGroup}
/>
+ {onBatchMoveTo && (
+