use crate::catalog_types::{ComponentApi, PropDef, PropType};
pub const STACKPRIMITIVE_API: ComponentApi = ComponentApi {
id: "stack-primitive",
description: "Opiniated flex container for vertical or horizontal linear layouts",
props: &[
PropDef { name: "children", kind: PropType::Children, required: true, default: None, description: "Child elements" },
PropDef { name: "direction", kind: PropType::Enum(&["vertical", "horizontal"]), required: false, default: Some("vertical"), description: "Stack or flex direction" },
PropDef { name: "align", kind: PropType::Enum(&["stretch", "start", "center", "end"]), required: false, default: Some("stretch"), description: "Flex or stack align-items" },
PropDef { name: "gap", kind: PropType::Enum(&["none", "xs", "sm", "md", "lg", "xl"]), required: false, default: Some("sm"), description: "Gap between items" },
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};
pub const FLEXPRIMITIVE_API: ComponentApi = ComponentApi {
id: "flex-primitive",
description: "Free-form flex layout with full control over direction, justify, align, gap and wrap",
props: &[
PropDef { name: "children", kind: PropType::Children, required: true, default: None, description: "Child elements" },
PropDef { name: "direction", kind: PropType::Enum(&["row", "column", "row-reverse", "column-reverse"]), required: false, default: Some("row"), description: "Stack or flex direction" },
PropDef { name: "justify", kind: PropType::Enum(&["start", "end", "center", "between", "around", "evenly"]), required: false, default: Some("start"), description: "Flex justify-content" },
PropDef { name: "align", kind: PropType::Enum(&["stretch", "start", "center", "end", "baseline"]), required: false, default: Some("stretch"), description: "Flex or stack align-items" },
PropDef { name: "gap", kind: PropType::Enum(&["none", "xs", "sm", "md", "lg", "xl"]), required: false, default: Some("sm"), description: "Gap between items" },
PropDef { name: "wrap", kind: PropType::Bool, required: false, default: Some("false"), description: "Whether flex items wrap" },
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};
pub const SPACERPRIMITIVE_API: ComponentApi = ComponentApi {
id: "spacer-primitive",
description: "Auto-expanding spacer for pushing content apart in flex layouts",
props: &[
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};
pub const CONTAINERPRIMITIVE_API: ComponentApi = ComponentApi {
id: "container-primitive",
description: "Max-width centered layout container with size variants",
props: &[
PropDef { name: "children", kind: PropType::Children, required: true, default: None, description: "Child elements" },
PropDef { name: "size", kind: PropType::Enum(&["sm", "md", "lg", "xl", "full"]), required: false, default: Some("lg"), description: "Size variant of the component" },
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};
pub const GRIDPRIMITIVE_API: ComponentApi = ComponentApi {
id: "grid-primitive",
description: "CSS grid container with configurable columns and gap for content grids",
props: &[
PropDef { name: "children", kind: PropType::Children, required: true, default: None, description: "Child elements" },
PropDef { name: "cols", kind: PropType::Enum(&["1", "2", "3", "4", "6", "12", "auto"]), required: false, default: Some("auto"), description: "Number of grid columns" },
PropDef { name: "gap", kind: PropType::Enum(&["none", "xs", "sm", "md", "lg", "xl"]), required: false, default: Some("sm"), description: "Gap between items" },
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};
pub const CENTERPRIMITIVE_API: ComponentApi = ComponentApi {
id: "center-primitive",
description: "Centers content horizontally, vertically or both within its container",
props: &[
PropDef { name: "children", kind: PropType::Children, required: true, default: None, description: "Child elements" },
PropDef { name: "mode", kind: PropType::Enum(&["horizontal", "vertical", "both"]), required: false, default: Some("both"), description: "Operational mode of the component" },
PropDef { name: "class", kind: PropType::String, required: false, default: Some(""), description: "Additional CSS class names" },
],
};