import type { ElementType, ReactNode, HTMLAttributes } from "react";
import type {
StackGap,
StackAlign,
StackJustify,
} from "@shared/components/Stack";
import "@shared/components/Inline.css";
export interface InlineProps extends HTMLAttributes {
/** Token-aligned gap between children (maps to `--space-*`). */
gap?: StackGap;
align?: StackAlign;
justify?: StackJustify;
/** Wrap to a new line when children overflow. Defaults to true. */
wrap?: boolean;
as?: ElementType;
children?: ReactNode;
}
/**
* Horizontal flex row with token-aligned gap. Sister to {@link Stack}.
* Wraps by default — pass `wrap={false}` for a strict single-line layout.
*/
export function Inline({
gap = "2",
align = "center",
justify,
wrap = true,
as,
className,
children,
...rest
}: InlineProps) {
const Tag: ElementType = as ?? "div";
const classes = [
"sui-inline",
`sui-inline--gap-${gap}`,
`sui-inline--align-${align}`,
justify ? `sui-inline--justify-${justify}` : "",
wrap ? "" : "sui-inline--nowrap",
className ?? "",
]
.filter(Boolean)
.join(" ");
return (
{children}
);
}