66 lines
1.3 KiB
TypeScript
66 lines
1.3 KiB
TypeScript
'use client'
|
|||
|
|||
import type { ComponentProps } from 'react'
|
|||
import { cn } from '@/lib/utils'
|
|||
import { Button } from '@/components/ui/button'
|
|||
import {
|
|||
Tooltip,
|
|||
TooltipContent,
|
|||
TooltipProvider,
|
|||
TooltipTrigger,
|
|||
} from '@/components/ui/tooltip'
|
|||
|
|||
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(
|
|||
'text-muted-foreground hover:text-foreground relative size-9 p-1.5',
|
|||
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
|
|||
}
|