= ({
control,
addonPrefix,
addonSuffix,
size,
className,
isInvalid,
...other
}) => {
const { type, ...controlProps } = control;
const ControlElement = (props: any) => {
switch (type) {
case "autocomplete":
return ;
case "select":
return ;
default:
return ;
}
};
const renderItems = (items: ReactNode | ReactNode[] | undefined) =>
React.Children.map(items, (item) => {
if (typeof item === "string") {
return - {item}
;
} else if (React.isValidElement(item)) {
const itemType = (item as any).type;
const isNativeElement = typeof itemType === "string";
const isButtonElement =
isNativeElement && (itemType === "button" || itemType === "a");
// Wrap native HTML elements (span, p, div) but NOT buttons or links
// Don't wrap React components (Button, etc.)
if (isNativeElement && !isButtonElement) {
return - {item}
;
}
// For buttons, links, and React components, clone with size prop if needed
const propsToAdd =
item.props && typeof item.props === "object" && "size" in item.props
? {}
: { size };
return React.cloneElement(item, propsToAdd);
}
return item;
});
return (
{renderItems(addonPrefix)}
{renderItems(addonSuffix)}
);
};
Group.displayName = "ControlGroup";
export { Group };