iced-widget-kit 0.1.0

Extra widgets for the Iced GUI library
Documentation
#[cfg(feature = "expander")]
use {crate::expander::Expander, iced_core::Element};

#[cfg(feature = "ribbon")]
use {
    crate::ribbon::{self, Group, Ribbon},
    iced_widget::{button, svg, text},
};

#[cfg(feature = "selector_bar")]
use crate::selector_bar::{
    self, SelectorBar,
    item::{self, Item as SelectorBarItem},
};

/// Creates a new [`Ribbon`] which the provided [`Group`]s.
#[cfg(feature = "ribbon")]
#[must_use]
pub fn ribbon<'a, Id, Message, Theme, Renderer>(
    groups: impl IntoIterator<Item = Group<'a, Id, Message, Theme, Renderer>>,
) -> Ribbon<'a, Id, Message, Theme, Renderer>
where
    Id: Clone + Eq,
    Message: 'a + Clone,
    Theme: 'a + ribbon::Catalog + button::Catalog + svg::Catalog + text::Catalog,
    <Theme as text::Catalog>::Class<'a>: From<text::StyleFn<'a, Theme>>,
    Renderer: 'a + iced_core::Renderer + iced_core::svg::Renderer + iced_core::text::Renderer,
    <Renderer as iced_core::text::Renderer>::Font: From<iced_core::Font>,
    <Renderer as iced_core::text::Renderer>::Paragraph: Clone,
{
    Ribbon::new(groups)
}

/// Creates a new [`SelectorBar`] which the provided [`Item`](crate::selector_bar::item::Item)s.
///
/// # Example
/// ```ignore
/// #[derive(Clone)]
/// enum Message {
///    TabSelected(u32),
/// }
///
/// fn view(&self) -> Element<'_, Message, Theme> {
///     let tabs = (0..5).map(|i| item(i, text!("Tab {}", i + 1)));
///     selector_bar(tabs, self.selected_tab, Message::TabSelected).into()
/// }
/// ```
#[cfg(feature = "selector_bar")]
#[must_use]
pub fn selector_bar<'a, Id, Message, Theme, Renderer>(
    items: impl IntoIterator<Item = SelectorBarItem<'a, Id, Message, Theme, Renderer>>,
    selected_id: Id,
    on_select: impl Fn(Id) -> Message + 'a,
) -> SelectorBar<'a, Id, Message, Theme, Renderer>
where
    Id: Eq,
    Theme: selector_bar::Catalog + item::Catalog,
{
    SelectorBar::new(items, selected_id, on_select)
}

/// Creates a new [`Expander`] from the provided header and content.
///
/// # Example
/// ```ignore
/// enum Message {
///     ExpanderPressed,
/// }
///
/// let mut expander = expander(
///     button("Header").on_press(Message::ExpanderPressed),
///     column!["Item 1", "Item 2", "Item 3"],
///     self.is_expanded,
/// );
/// ```
#[cfg(feature = "expander")]
#[must_use]
pub fn expander<'a, H, C, Message, Theme, Renderer>(
    header: H,
    content: C,
    is_expanded: bool,
) -> Expander<'a, Message, Theme, Renderer>
where
    H: Into<Element<'a, Message, Theme, Renderer>>,
    C: Into<Element<'a, Message, Theme, Renderer>>,
{
    Expander::new(header, content, is_expanded)
}