yew-scroll-area 0.4.0

Custom scroll area component for yew
Documentation
use std::ops::Deref;
use web_sys::HtmlDivElement;
use yew::prelude::*;

#[derive(Clone)]
pub struct UseHorizontalThumbSizeHandle {
    size: UseStateHandle<f64>,
    outer_ref: NodeRef,
    inner_ref: NodeRef,
}
impl UseHorizontalThumbSizeHandle {
    fn new(size: UseStateHandle<f64>, outer_ref: NodeRef, inner_ref: NodeRef) -> Self {
        Self {
            size,
            outer_ref,
            inner_ref,
        }
    }

    pub fn update(&self) {
        if let (Some(outer), Some(inner)) = (
            self.outer_ref.cast::<HtmlDivElement>(),
            self.inner_ref.cast::<HtmlDivElement>(),
        ) {
            let outer_width = outer.offset_width() as f64;
            let inner_width = inner.offset_width() as f64;
            self.size.set(outer_width / inner_width * outer_width);
        }
    }
}
impl Deref for UseHorizontalThumbSizeHandle {
    type Target = f64;
    fn deref(&self) -> &Self::Target {
        &*self.size
    }
}

pub fn use_horizontal_thumb_size(
    outer_ref: NodeRef,
    inner_ref: NodeRef,
) -> UseHorizontalThumbSizeHandle {
    let size = use_state_eq(|| 0.0);
    UseHorizontalThumbSizeHandle::new(size, outer_ref, inner_ref)
}