Skip to main content

MenuItem

Enum MenuItem 

Source
pub enum MenuItem {
    SectionLabel(SharedString),
    Separator,
#[non_exhaustive]
Item { key: SharedString, label: SharedString, shortcut: Option<SharedString>, icon: Option<&'static str>, is_danger: bool, description: Option<SharedString>, submenu: Vec<MenuItem>, is_interactive: bool, }, }
Expand description

One entry of a dropdown menu.

Variants§

§

SectionLabel(SharedString)

Section caption (<MenuSection> title).

§

Separator

A divider row between items.

§

#[non_exhaustive]
Item

A menu row.

#[non_exhaustive]: build one through MenuItem::new and its builders, which cover every field, so a later row capability is an additive change rather than a break for literal construction.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§key: SharedString

Stable key identifying the item.

§label: SharedString

Visible text of the item.

§shortcut: Option<SharedString>

Optional shortcut hint shown on the row.

§icon: Option<&'static str>

Optional icon asset path.

§is_danger: bool

Whether the item uses danger styling.

§description: Option<SharedString>

Description inside a Dropdown.Item — v3’s “With Descriptions”.

§submenu: Vec<MenuItem>

Dropdown.SubmenuTrigger — the rows this item opens. The row grows a trailing indicator and the panel appears beside it.

§is_interactive: bool

Whether the row’s own content owns the interaction, in place of the row acting as one button. See MenuItem::is_interactive.

Implementations§

Source§

impl MenuItem

Source

pub fn new(key: impl Into<SharedString>, label: impl Into<SharedString>) -> Self

Creates a menu item from a key and a label.

Source

pub fn description(self, text: impl Into<SharedString>) -> Self

Description — the second line v3 composes inside an item.

Source

pub fn is_interactive(self, interactive: bool) -> Self

Hands the row’s interaction to the element Menu::item_content draws for it, in place of the row behaving as one button.

HeroUI composes rows that carry an inline secondary control — a small select, a stepper — on the trailing edge, where pressing that control must not also pick the row and close the menu. A stock row attaches an unconditional click that reports the action and dismisses, plus the [data-pressed] 98% scale over the whole row, so a hosted control is unusable inside one. Setting this drops all three, and Enter and Space stop activating the row, leaving the hosted element to answer the pointer and the keyboard itself.

What it keeps: the row stays a keyboard stop with its hover fill, highlight and focus ring, and it keeps its menuitem role and accessible name, so arrowing through the menu is unchanged.

Nothing else is needed to host a popup-opening control such as a crate::select::Select. Such a control registers its own panel on the shared overlay stack, which makes it topmost, and the menu’s outside-press and Escape dismissals are already gated on being topmost — so they stand down for as long as the inner panel is open.

Ignored together with MenuItem::submenu: a submenu trigger already opts out of the row click, and its flyout is the interaction.

Source

pub fn submenu(self, items: Vec<MenuItem>) -> Self

Dropdown.SubmenuTrigger — the rows this item opens.

Source

pub fn shortcut(self, s: impl Into<SharedString>) -> Self

Sets the shortcut hint shown on the row.

Source

pub fn icon(self, path: &'static str) -> Self

Sets the icon asset path.

Source

pub fn danger(self) -> Self

Marks the item as a danger item.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more