/// Generates builder methods that delegate to a `props: ContainerProps` field.
/// Must be invoked inside an `impl SomeBuilder { ... }` block.
macro_rules! impl_props_methods {
    () => {
        pub fn gap(mut self, gap: f32) -> Self {
            self.props = self.props.gap(gap);
            self
        }
        pub fn padding(mut self, padding: impl $crate::converters::IntoEdges) -> Self {
            self.props = self.props.padding(padding);
            self
        }
        pub fn background(mut self, color: ruin_ui::Color) -> Self {
            self.props = self.props.background(color);
            self
        }
        pub fn border(mut self, border: impl $crate::converters::IntoBorder) -> Self {
            self.props = self.props.border(border);
            self
        }
        pub fn border_radius(mut self, radius: f32) -> Self {
            self.props = self.props.border_radius(radius);
            self
        }
        pub fn width(mut self, width: f32) -> Self {
            self.props = self.props.width(width);
            self
        }
        pub fn height(mut self, height: f32) -> Self {
            self.props = self.props.height(height);
            self
        }
        pub fn min_width(mut self, min_width: f32) -> Self {
            self.props = self.props.min_width(min_width);
            self
        }
        pub fn min_height(mut self, min_height: f32) -> Self {
            self.props = self.props.min_height(min_height);
            self
        }
        pub fn min_size(self, w: f32, h: f32) -> Self {
            self.min_width(w).min_height(h)
        }
        pub fn flex(mut self, flex: f32) -> Self {
            self.props = self.props.flex(flex);
            self
        }
        pub fn align_items(mut self, align: ruin_ui::AlignItems) -> Self {
            self.props = self.props.align_items(align);
            self
        }
        pub fn align_self(mut self, align: ruin_ui::AlignItems) -> Self {
            self.props = self.props.align_self(align);
            self
        }
        pub fn justify_content(mut self, justify: ruin_ui::JustifyContent) -> Self {
            self.props = self.props.justify_content(justify);
            self
        }
        pub fn widget_ref<T>(mut self, widget_ref: $crate::hooks::WidgetRef<T>) -> Self {
            self.props = self.props.widget_ref(widget_ref);
            self
        }
    };
}

pub mod button;
pub mod container;
pub mod scroll_box;
pub mod text;

pub use button::{ButtonBuilder, button};
pub use container::{ContainerBuilder, ContainerProps, block, column, row};
pub use scroll_box::{ScrollBoxBuilder, scroll_box};
pub use text::{FontWeight, TextBuilder, TextRole, text};
