use leptos::prelude::*;
use crate::meta::{VisibilityState, DisabledState, ActivityState};
#[component]
pub fn ContextMenuPrimitive(
children: Children,
#[prop(default = VisibilityState::Closed)] state: VisibilityState,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
let uid_cm = crate::infra::uid::generate("cm");
view! {
<div
data-rs-context-menu=""
data-rs-uid=uid_cm
data-rs-interaction="overlay"
data-rs-state=state.as_str()
class=class
>
{children()}
</div>
}
}
#[component]
pub fn ContextMenuTriggerPrimitive(
children: Children,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<div
data-rs-context-menu-trigger=""
class=class
>
{children()}
</div>
}
}
#[component]
pub fn ContextMenuContentPrimitive(
children: Children,
#[prop(default = VisibilityState::Closed)] state: VisibilityState,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<div
data-rs-context-menu-content=""
data-rs-state=state.as_str()
role="menu"
class=class
>
{children()}
</div>
}
}
#[component]
pub fn ContextMenuItemPrimitive(
children: Children,
#[prop(default = DisabledState::Enabled)] disabled: DisabledState,
#[prop(default = ActivityState::Inactive)] highlighted: ActivityState,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<button
type="button"
data-rs-context-menu-item=""
role="menuitem"
data-rs-activity=highlighted.as_str()
data-rs-disabled=if disabled.disabled() { Some("disabled") } else { None }
aria-disabled=disabled.aria_disabled()
tabindex=if disabled.disabled() { "-1" } else { "0" }
class=class
>
{children()}
</button>
}
}
#[component]
pub fn ContextMenuSeparatorPrimitive(
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<div
data-rs-context-menu-separator=""
role="separator"
class=class
/>
}
}
#[component]
pub fn ContextMenuGroupPrimitive(
children: Children,
#[prop(into, optional)] label: Option<String>,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<div
data-rs-context-menu-group=""
role="group"
aria-label=label
class=class
>
{children()}
</div>
}
}
#[component]
pub fn ContextMenuLabelPrimitive(
children: Children,
#[prop(into, default = String::new())] class: String,
) -> impl IntoView {
view! {
<div
data-rs-context-menu-label=""
role="presentation"
aria-hidden="true"
class=class
>
{children()}
</div>
}
}