biji_ui/components/tooltip/
context.rs1use 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}