terrazzo-terminal 0.2.8

A simple web-based terminal emulator built on Terrazzo.
use std::rc::Rc;

use terrazzo::html;
use terrazzo::prelude::*;

use super::mousemove::MousemoveManager;

terrazzo_css::import_style!(pub(super) style, "resize_bar.scss");

#[derive(Clone)]
pub struct ResizeBarProperties {
    pub dblclick: Rc<dyn Fn()>,
    pub class: Option<&'static str>,
}

impl Default for ResizeBarProperties {
    fn default() -> Self {
        Self {
            dblclick: Rc::new(|| {}),
            class: None,
        }
    }
}

#[html]
pub fn resize_bar_horz(
    resize_manager: MousemoveManager,
    properties: ResizeBarProperties,
) -> XElement {
    div(
        class = style::RESIZE_BAR_HORZ,
        class = properties.class,
        #[cfg(not(feature = "client-prod"))]
        class = "resize-bar-horz",
        mousedown = resize_manager.mousedown(),
        dblclick = move |_| {
            resize_manager.delta.set(None);
            (properties.dblclick)();
        },
        div(div()),
    )
}

#[html]
pub fn resize_bar_vert(
    resize_manager: MousemoveManager,
    properties: ResizeBarProperties,
) -> XElement {
    div(
        class = style::RESIZE_BAR_VERT,
        class = properties.class,
        #[cfg(not(feature = "client-prod"))]
        class = "resize-bar-vert",
        mousedown = resize_manager.mousedown(),
        dblclick = move |_| {
            resize_manager.delta.set(None);
            (properties.dblclick)();
        },
        div(div()),
    )
}