biji_ui/components/tooltip/
context.rs

1use std::time::Duration;
2
3use leptos::{
4    html::{Button, Div},
5    prelude::*,
6};
7
8use super::tooltip::Positioning;
9
10#[derive(Copy, Clone)]
11pub struct TooltipContext {
12    pub trigger_ref: NodeRef<Button>,
13    pub content_ref: NodeRef<Div>,
14    pub open: RwSignal<bool>,
15    pub pointer_inside_trigger: RwSignal<bool>,
16    pub pointer_inside_content: RwSignal<bool>,
17    pub hide_delay: Duration,
18    pub positioning: Positioning,
19    pub arrow_size: i32,
20}
21
22impl Default for TooltipContext {
23    fn default() -> Self {
24        Self {
25            trigger_ref: NodeRef::default(),
26            content_ref: NodeRef::default(),
27            open: RwSignal::new(false),
28            pointer_inside_trigger: RwSignal::new(false),
29            pointer_inside_content: RwSignal::new(false),
30            hide_delay: Duration::from_millis(200),
31            positioning: Positioning::default(),
32            arrow_size: 8,
33        }
34    }
35}
36
37impl TooltipContext {
38    pub fn open(&self) {
39        self.open.set(true);
40    }
41
42    pub fn close(&self) {
43        self.open.set(false);
44    }
45
46    pub fn toggle(&self) {
47        if self.open.get() {
48            self.close();
49        } else {
50            self.open();
51        }
52    }
53}