euv-example 0.3.24

An example application demonstrating the euv UI framework with reactive signals, custom components, and WebAssembly.
Documentation
use crate::*;

/// Creates a click event handler that toggles a boolean signal.
///
/// Produces a `NativeEventHandler` that flips the value of the given
/// boolean signal on each click. Useful for toggle buttons, visibility
/// switches, and drawer open/close patterns.
///
/// # Arguments
///
/// - `Signal<bool>` - The boolean signal to toggle.
///
/// # Returns
///
/// - `NativeEventHandler` - A click event handler that toggles the signal.
pub fn use_toggle(signal: Signal<bool>) -> NativeEventHandler {
    NativeEventHandler::new(NativeEventName::Click, move |_event: Event| {
        let current: bool = signal.get();
        signal.set(!current);
    })
}

/// Creates an input event handler that updates a string signal.
///
/// # Arguments
///
/// - `Signal<String>` - The signal to update with the input value.
///
/// # Returns
///
/// - `NativeEventHandler` - An input handler.
pub fn on_input_value(signal: Signal<String>) -> NativeEventHandler {
    NativeEventHandler::new(NativeEventName::Input, move |event: Event| {
        if let Some(target) = event.target()
            && let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
        {
            signal.set(input.value());
        }
    })
}

/// Creates a change event handler that updates a string signal.
///
/// # Arguments
///
/// - `Signal<String>` - The signal to update with the change value.
///
/// # Returns
///
/// - `NativeEventHandler` - A change handler.
pub fn on_change_value(signal: Signal<String>) -> NativeEventHandler {
    NativeEventHandler::new(NativeEventName::Change, move |event: Event| {
        if let Some(target) = event.target()
            && let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
        {
            signal.set(input.value());
        }
    })
}

/// Creates a change event handler that updates a boolean signal from checkbox.
///
/// # Arguments
///
/// - `Signal<bool>` - The signal to update with the checked state.
///
/// # Returns
///
/// - `NativeEventHandler` - A change handler.
pub fn on_change_checked(signal: Signal<bool>) -> NativeEventHandler {
    NativeEventHandler::new(NativeEventName::Change, move |event: Event| {
        if let Some(target) = event.target()
            && let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
        {
            signal.set(input.checked());
        }
    })
}