import { forwardRef, Fragment, useMemo } from "react" // --- Tiptap UI Primitive --- import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/tiptap-ui-primitive/tooltip" // --- Lib --- import { cn, parseShortcutKeys } from "@/lib/tiptap-utils" import "@/components/tiptap-ui-primitive/button/button-colors.scss" import "@/components/tiptap-ui-primitive/button/button.scss" export type ButtonVariant = "ghost" | "primary" export type ButtonSize = "small" | "default" | "large" export interface ButtonProps extends React.ButtonHTMLAttributes { showTooltip?: boolean tooltip?: React.ReactNode shortcutKeys?: string variant?: ButtonVariant size?: ButtonSize } export const ShortcutDisplay: React.FC<{ shortcuts: string[] }> = ({ shortcuts, }) => { if (shortcuts.length === 0) return null return (
{shortcuts.map((key, index) => ( {index > 0 && +} {key} ))}
) } export const Button = forwardRef( ( { className, children, tooltip, showTooltip = true, shortcutKeys, variant, size, ...props }, ref ) => { const shortcuts = useMemo( () => parseShortcutKeys({ shortcutKeys }), [shortcutKeys] ) if (!tooltip || !showTooltip) { return ( ) } return ( {children} {tooltip} ) } ) Button.displayName = "Button" export default Button