Opens on the granter's client (routed via promptFor). Renders one row per
target, each row showing the target's portrait and the top N peeked cards
from their default deck. The user can click a row to activate it; the
active row enables drag-reorder and discard checkboxes. Other rows are
read-only previews.
For "each" iterator mode, callers loop with a 1-target spec — same dialog,
single row, no scroll needed. For "all" iterator mode, all targets are
rendered in a vertically scrollable container.
Cancel resolves to null. The granter's user is responsible for surface-level
UI; the calling outcome (running on the GM/executor) takes the returned
arrangement and applies the writes.
Multi-target scry arrangement dialog.
Opens on the granter's client (routed via promptFor). Renders one row per target, each row showing the target's portrait and the top N peeked cards from their default deck. The user can click a row to activate it; the active row enables drag-reorder and discard checkboxes. Other rows are read-only previews.
For "each" iterator mode, callers loop with a 1-target spec — same dialog, single row, no scroll needed. For "all" iterator mode, all targets are rendered in a vertically scrollable container.
Returns (via Promise.resolve) the per-target arrangement: [{ actorId, sourceDeckId, keptCardIds: string[], discardedCardIds: string[] }, ...]
Cancel resolves to null. The granter's user is responsible for surface-level UI; the calling outcome (running on the GM/executor) takes the returned arrangement and applies the writes.