ratatui_kit/components/adapter/
widget.rs1use crate::{Component, Props};
2use ratatui::widgets::Widget;
3
4pub struct WidgetAdapterProps<T>
14where
15 T: Widget + 'static,
16{
17 pub inner: T,
18}
19
20unsafe impl<T: Widget + 'static> Send for WidgetAdapterProps<T> {}
22unsafe impl<T: Widget + 'static> Sync for WidgetAdapterProps<T> {}
23unsafe impl<T: Widget + 'static> Props for WidgetAdapterProps<T> {}
24
25pub struct WidgetAdapter<T>
26where
27 T: Widget + 'static,
28{
29 inner: T,
30}
31
32unsafe impl<T: Widget + 'static> Send for WidgetAdapter<T> {}
34unsafe impl<T: Widget + 'static> Sync for WidgetAdapter<T> {}
35
36impl<T> Component for WidgetAdapter<T>
37where
38 T: Widget + 'static + Unpin + Clone,
39{
40 type Props<'a> = WidgetAdapterProps<T>;
41
42 fn new(props: &Self::Props<'_>) -> Self {
43 Self {
44 inner: props.inner.clone(),
45 }
46 }
47
48 fn update(
49 &mut self,
50 props: &mut Self::Props<'_>,
51 _hooks: crate::Hooks,
52 _updater: &mut crate::ComponentUpdater,
53 ) {
54 self.inner = props.inner.clone();
55 }
56
57 fn draw(&mut self, drawer: &mut crate::ComponentDrawer<'_, '_>) {
58 drawer.render_widget(self.inner.clone(), drawer.area);
59 }
60}