1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import { Children, ReactElement, cloneElement } from 'react';
- import { ButtonProps } from '@/components/ui/button';
- import { cn } from '@/lib/utils';
- interface ButtonGroupProps {
- className?: string;
- orientation?: 'horizontal' | 'vertical';
- children: ReactElement<ButtonProps>[];
- }
- export const ButtonGroup = ({
- className,
- orientation = 'horizontal',
- children,
- }: ButtonGroupProps) => {
- const totalButtons = Children.count(children);
- const isHorizontal = orientation === 'horizontal';
- const isVertical = orientation === 'vertical';
- return (
- <div
- className={cn(
- 'flex',
- {
- 'flex-col': isVertical,
- 'w-fit': isVertical,
- },
- className
- )}
- >
- {Children.map(children, (child, index) => {
- const isFirst = index === 0;
- const isLast = index === totalButtons - 1;
- return cloneElement(child, {
- className: cn(
- {
- 'rounded-l-none': isHorizontal && !isFirst,
- 'rounded-r-none': isHorizontal && !isLast,
- 'border-l-0': isHorizontal && !isFirst,
- 'rounded-t-none': isVertical && !isFirst,
- 'rounded-b-none': isVertical && !isLast,
- 'border-t-0': isVertical && !isFirst,
- },
- child.props.className
- ),
- });
- })}
- </div>
- );
- };
|