material-you-react/src/primitive-components/button-components/segmented-buttons/segmented-buttons.tsx

30 lines
848 B
TypeScript
Raw Normal View History

import React, { cloneElement, forwardRef, ReactElement } from 'react';
import { SegmentedButtonProps } from './segmented-buttons.types';
export const SegmentedButtons = forwardRef<
HTMLDivElement,
SegmentedButtonProps
>(({ children, ...props }, ref) => {
if (children.length <= 1) {
2024-02-02 13:39:02 +03:00
throw 'You must build segmented button with 2 or more buttton';
}
const buttons = children.map((button: ReactElement, index) => {
const classes =
`m3-button-segment ${button.props.className ?? ''}`.trimEnd();
return cloneElement(button, {
className: classes,
key: index,
});
});
return (
<div
className={`m3 m3-segmented-buttons ${props.className ?? ''}`.trimEnd()}
ref={ref}
>
{buttons}
</div>
);
});