#![allow(unused_imports)]
use std::collections::HashMap;
use wasm_bindgen::{JsCast, JsValue, prelude::wasm_bindgen};
use web_sys::HtmlElement;
use super::style::{CssProperty, StyleBuilder};
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
static mut SCROLLBARS: Option<HashMap<String, HtmlElement>> = None;
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
#[wasm_bindgen(js_name = registerScrollbar)]
pub fn register_scrollbar(id: String, track: JsValue) {
let track_element = match track.dyn_into::<HtmlElement>() {
Ok(el) => el,
Err(_) => {
web_sys::console::error_1(&"❌ Invalid track element for scrollbar".into());
return;
}
};
unsafe {
let scrollbars_ptr = &raw mut SCROLLBARS;
if (*scrollbars_ptr).is_none() {
*scrollbars_ptr = Some(HashMap::new());
}
if let Some(scrollbars) = &mut *scrollbars_ptr {
scrollbars.insert(id, track_element);
}
}
}
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
#[wasm_bindgen(js_name = updateScrollbarWidth)]
pub fn update_scrollbar_width(id: String, width: f64) {
unsafe {
let scrollbars_ptr = &raw const SCROLLBARS;
if let Some(scrollbars) = &*scrollbars_ptr {
if let Some(track) = scrollbars.get(&id) {
StyleBuilder::new(track)
.add(
CssProperty::Transition,
"width 300ms cubic-bezier(0.25, 0.1, 0.25, 1)",
)
.add(CssProperty::Width, &format!("{}px", width))
.apply();
}
}
}
}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub fn register_scrollbar(_id: String, _track: JsValue) {}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub fn update_scrollbar_width(_id: String, _width: f64) {}