use zoon::*; mod excalidraw_canvas; use excalidraw_canvas::ExcalidrawCanvas; pub use excalidraw_canvas::ExcalidrawController; #[derive(Clone)] pub struct DiagramPanel { canvas_controller: Mutable>>>, } impl DiagramPanel { pub fn new( canvas_controller: Mutable>>>, ) -> impl Element { Self { canvas_controller }.root() } fn root(&self) -> impl Element { Column::new() .s(Padding::all(20)) .s(Scrollbars::y_and_clip_x()) .s(Width::fill()) .s(Height::fill()) .s(Gap::new().y(20)) .item(self.canvas()) } fn canvas(&self) -> impl Element { let canvas_controller = self.canvas_controller.clone(); ExcalidrawCanvas::new() .s(Align::new().top()) .s(Width::fill()) .s(Height::fill()) .task_with_controller(move |controller| { canvas_controller.set(controller.clone()); async {} }) } }