woocraft 0.4.5

GPUI components lib for Woocraft design system.
Documentation
use gpui::{AnyElement, ParentElement, RenderOnce, StyleRefinement};
use smallvec::SmallVec;

use super::ListItem;
use crate::{Selectable, StyledExt};

pub struct ListSeparatorItem {
  style: StyleRefinement,
  children: SmallVec<[AnyElement; 2]>,
}

impl Default for ListSeparatorItem {
  fn default() -> Self {
    Self::new()
  }
}

impl ListSeparatorItem {
  pub fn new() -> Self {
    Self {
      style: StyleRefinement::default(),
      children: SmallVec::new(),
    }
  }
}

impl ParentElement for ListSeparatorItem {
  fn extend(&mut self, elements: impl IntoIterator<Item = AnyElement>) {
    self.children.extend(elements);
  }
}

impl Selectable for ListSeparatorItem {
  fn selected(self, _: bool) -> Self {
    self
  }

  fn is_selected(&self) -> bool {
    false
  }
}

impl RenderOnce for ListSeparatorItem {
  fn render(self, _: &mut gpui::Window, _: &mut gpui::App) -> impl gpui::IntoElement {
    ListItem::new("separator")
      .separator()
      .refine_style(&self.style)
      .children(self.children)
      .disabled(true)
  }
}