#![doc = include_str!("../../../docs/api/drag-and-drop.md")]
use dioxus::prelude::*;
mod delivery;
mod draggable;
mod drop_zone;
mod overlay;
mod pointer;
mod provider;
pub use draggable::Draggable;
pub use drop_zone::{BridgeDropZone, DropZone, ParentZone};
pub use overlay::{DragOverlay, SettleSlot};
pub use provider::DndProvider;
pub(crate) use delivery::{deliver_drop, DropCompletion, SettleRoute, RELEASE_RECOVERY_MOVES};
pub(crate) use overlay::overlay_style;
pub(crate) use pointer::{primary_press, touch_style, HoldTimer};
pub(crate) fn merge_style(attributes: &mut Vec<Attribute>, functional: &str) -> String {
let user = attributes
.iter()
.position(|a| a.name == "style")
.map(|i| attributes.remove(i));
match user.map(|a| a.value) {
Some(dioxus::core::AttributeValue::Text(s)) => format!("{functional} {s}"),
_ => functional.to_string(),
}
}