canonrs-core 0.1.0

CanonRS core types, traits and primitives
//! @canon-level: strict
//! @canon-owner: primitives-team
//! Drag Handle Primitive - Visual handle for draggable items

use leptos::prelude::*;

#[component]
pub fn DragHandlePrimitive(
    children: Children,
    #[prop(into, default = String::new())] class: String,
    #[prop(optional)] id: Option<String>,
    #[prop(default = false)] active: bool,
) -> impl IntoView {
    let uid_dh = crate::infra::uid::generate("dh");
    view! {
        <button
            type="button"
            data-rs-drag-handle=""
            data-rs-uid=uid_dh
            data-rs-state={if active { "open" } else { "closed" }}
            aria-label="Drag to reorder"
            class=class
            id=id.filter(|s| !s.is_empty())
        >
            {children()}
        </button>
    }
}