diff --git a/packages/html/src/web_sys_bind/events.rs b/packages/html/src/web_sys_bind/events.rs
index 5f0e5b2a3..196099444 100644
--- a/packages/html/src/web_sys_bind/events.rs
+++ b/packages/html/src/web_sys_bind/events.rs
@@ -4,6 +4,7 @@ use crate::events::{
};
use crate::geometry::{ClientPoint, Coordinates, ElementPoint, PagePoint, ScreenPoint};
use crate::input_data::{decode_key_location, decode_mouse_button_set, MouseButton};
+use crate::DragData;
use keyboard_types::{Code, Key, Modifiers};
use std::convert::TryInto;
use std::str::FromStr;
@@ -40,6 +41,7 @@ uncheck_convert![
CompositionEvent => CompositionData,
KeyboardEvent => KeyboardData,
MouseEvent => MouseData,
+ MouseEvent => DragData,
TouchEvent => TouchData,
PointerEvent => PointerData,
WheelEvent => WheelData,
@@ -117,6 +119,14 @@ impl From<&MouseEvent> for MouseData {
}
}
+impl From<&MouseEvent> for DragData {
+ fn from(value: &MouseEvent) -> Self {
+ Self {
+ mouse: MouseData::from(value),
+ }
+ }
+}
+
impl From<&TouchEvent> for TouchData {
fn from(e: &TouchEvent) -> Self {
Self {
diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs
index 427adc742..252add068 100644
--- a/packages/web/src/dom.rs
+++ b/packages/web/src/dom.rs
@@ -229,11 +229,13 @@ pub fn virtual_event_from_websys_event(event: web_sys::Event, target: Element) -
"change" | "input" | "invalid" | "reset" | "submit" => read_input_to_data(target),
- "click" | "contextmenu" | "dblclick" | "doubleclick" | "drag" | "dragend" | "dragenter"
- | "dragexit" | "dragleave" | "dragover" | "dragstart" | "drop" | "mousedown"
- | "mouseenter" | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" => {
+ "click" | "contextmenu" | "dblclick" | "doubleclick" | "mousedown" | "mouseenter"
+ | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" => {
Rc::new(MouseData::from(event))
}
+ "drag" | "dragend" | "dragenter" | "dragexit" | "dragleave" | "dragover" | "dragstart"
+ | "drop" => Rc::new(DragData::from(event)),
+
"pointerdown" | "pointermove" | "pointerup" | "pointercancel" | "gotpointercapture"
| "lostpointercapture" | "pointerenter" | "pointerleave" | "pointerover" | "pointerout" => {
Rc::new(PointerData::from(event))