66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
'use client';
|
|
|
|
import { Button } from '@repo/shadcn-ui/components/ui/button';
|
|
import {
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipProvider,
|
|
TooltipTrigger,
|
|
} from '@repo/shadcn-ui/components/ui/tooltip';
|
|
import { cn } from '@repo/shadcn-ui/lib/utils';
|
|
import type { ComponentProps } from 'react';
|
|
|
|
export type ActionsProps = ComponentProps<'div'>;
|
|
|
|
export const Actions = ({ className, children, ...props }: ActionsProps) => (
|
|
<div className={cn('flex items-center gap-1', className)} {...props}>
|
|
{children}
|
|
</div>
|
|
);
|
|
|
|
export type ActionProps = ComponentProps<typeof Button> & {
|
|
tooltip?: string;
|
|
label?: string;
|
|
};
|
|
|
|
export const Action = ({
|
|
tooltip,
|
|
children,
|
|
label,
|
|
className,
|
|
variant = 'ghost',
|
|
size = 'sm',
|
|
...props
|
|
}: ActionProps) => {
|
|
const button = (
|
|
<Button
|
|
className={cn(
|
|
'size-9 p-1.5 text-muted-foreground hover:text-foreground',
|
|
className
|
|
)}
|
|
size={size}
|
|
type="button"
|
|
variant={variant}
|
|
{...props}
|
|
>
|
|
{children}
|
|
<span className="sr-only">{label || tooltip}</span>
|
|
</Button>
|
|
);
|
|
|
|
if (tooltip) {
|
|
return (
|
|
<TooltipProvider>
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>{button}</TooltipTrigger>
|
|
<TooltipContent>
|
|
<p>{tooltip}</p>
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
</TooltipProvider>
|
|
);
|
|
}
|
|
|
|
return button;
|
|
};
|