namespace AcDream.App.UI;
///
/// A panel controller implements this and registers itself on each of its
/// s. Port of retail's m_dragHandler vtable
/// (RegisterItemListDragHandler, decomp 230461; confirmed acclient
/// 0x004a539e + the gmToolbarUI block 0x004bdd89).
/// decides the accept/reject OVERLAY only (advisory).
/// is authoritative — it performs the action, or
/// no-ops to reject.
///
public interface IItemListDragHandler
{
/// The drag STARTED from a cell in this list — retail's RecvNotice_ItemListBeginDrag
/// → RemoveShortcut (decomp 0x004bd930/0x004bd450): the handler removes the lifted item from its
/// model + wire so the source slot empties immediately. The item is "in hand" until
/// HandleDropRelease (place) or the drag ends off-target (stays removed). No restore on cancel.
void OnDragLift(UiItemList sourceList, UiItemSlot sourceCell, ItemDragPayload payload);
/// True ⇒ the target cell shows the accept (green) frame; false ⇒ reject (red).
bool OnDragOver(UiItemList targetList, UiItemSlot targetCell, ItemDragPayload payload);
/// Perform the drop (issue the per-panel wire action), or no-op to reject.
void HandleDropRelease(UiItemList targetList, UiItemSlot targetCell, ItemDragPayload payload);
}