dioxus_web/events/
clipboard.rs1use dioxus_html::{DataTransfer, FileData, HasClipboardData, HasDataTransferData, HasFileData};
2use web_sys::ClipboardEvent;
3
4use crate::WebDataTransfer;
5
6use super::WebEventExt;
7
8pub(crate) struct WebClipboardData {
9 event: ClipboardEvent,
10}
11
12impl WebClipboardData {
13 pub fn new(event: ClipboardEvent) -> Self {
14 Self { event }
15 }
16}
17
18impl HasClipboardData for WebClipboardData {
19 fn as_any(&self) -> &dyn std::any::Any {
20 &self.event as &dyn std::any::Any
21 }
22}
23
24impl HasDataTransferData for WebClipboardData {
25 fn data_transfer(&self) -> DataTransfer {
26 let data = self
27 .event
28 .clipboard_data()
29 .unwrap_or_else(|| web_sys::DataTransfer::new().unwrap());
31 DataTransfer::new(WebDataTransfer::new(data))
32 }
33}
34
35impl HasFileData for WebClipboardData {
36 fn files(&self) -> Vec<FileData> {
37 self.data_transfer().files()
38 }
39}
40
41impl WebEventExt for dioxus_html::ClipboardData {
42 type WebEvent = web_sys::ClipboardEvent;
43
44 #[inline(always)]
45 fn try_as_web_event(&self) -> Option<Self::WebEvent> {
46 self.downcast::<web_sys::ClipboardEvent>().cloned()
47 }
48}