'use client' import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options' import type { UseUndoRedoConfig } from '@admin/hooks/content-editor/use-undo-redo' import type { BaseUIEvent } from '@base-ui/react' import { Button } from '@admin/components/ui/button' import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor' import { useUndoRedo } from '@admin/hooks/content-editor/use-undo-redo' import { useCallback } from 'react' import { getControlTooltipTitle, shouldHideUnavailableControl, shouldShowControlShortcut } from '../control-options' import { HistoryShortcutBadge } from './history-shortcut-badge' type EditorButtonProps = React.ComponentProps & { tooltip?: ControlTooltip } export { HistoryShortcutBadge } from './history-shortcut-badge' export interface UndoRedoButtonProps extends Omit, Omit { availability?: ControlAvailability text?: string shortcut?: ControlShortcut } export function UndoRedoButton({ editor: providedEditor, action, availability, text, onExecuted, shortcut, tooltip, onClick, children, ref, ...buttonProps }: UndoRedoButtonProps) { const { editor } = useTiptapEditor(providedEditor) const { isVisible, handleAction, label, canExecute, Icon, shortcutKeys } = useUndoRedo({ editor, action, hideWhenUnavailable: shouldHideUnavailableControl(availability), onExecuted }) const handleClick = useCallback( (event: BaseUIEvent>) => { onClick?.(event) if (event.defaultPrevented) return handleAction() }, [handleAction, onClick] ) if (!isVisible) { return null } return ( ) }