namespace Lattice.Core.DragDrop.Abstractions;
///
/// Определяет контракт для объектов, которые могут принимать сбрасываемые данные
/// в операции перетаскивания.
///
///
/// Объекты, реализующие этот интерфейс, могут обрабатывать данные, сброшенные
/// пользователем, и предоставлять визуальную обратную связь во время перетаскивания.
///
public interface IDropTarget
{
///
/// Определяет, может ли объект принять сбрасываемые данные.
///
/// Информация о потенциальном сбросе.
///
/// true, если объект может принять данные; в противном случае — false.
///
///
/// Этот метод вызывается, когда перетаскиваемый объект находится над целью.
/// Реализация должна проверить, совместимы ли данные с целью, и установить
/// предлагаемые эффекты в .
///
Task CanAcceptDropAsync(Models.DropInfo dropInfo, CancellationToken cancellationToken = default);
///
/// Вызывается, когда перетаскиваемый объект находится над целью.
///
/// Информация о текущем положении перетаскивания.
///
/// Этот метод вызывается постоянно, пока пользователь перемещает объект над целью.
/// Реализация может обновить визуальную обратную связь или изменить предлагаемые эффекты.
///
Task DragOverAsync(Models.DropInfo dropInfo, CancellationToken cancellationToken = default);
///
/// Вызывается, когда пользователь сбрасывает данные на цель.
///
/// Информация о сбросе.
///
/// Этот метод вызывается, когда пользователь отпускает кнопку мыши над целью.
/// Реализация должна обработать принятие данных и выполнить соответствующее действие.
///
Task DropAsync(Models.DropInfo dropInfo, CancellationToken cancellationToken = default);
///
/// Вызывается, когда перетаскиваемый объект покидает область цели.
///
///
/// Этот метод вызывается, когда пользователь перемещает объект за пределы цели.
/// Реализация должна очистить любую визуальную обратную связь, установленную ранее.
///
Task DragLeaveAsync(CancellationToken cancellationToken = default);
}