import { memo, useCallback } from 'react' import { EditorView } from '@codemirror/view' import { useCodeMirrorViewContext } from '../codemirror-context' import classnames from 'classnames' import { emitToolbarEvent } from '../../extensions/toolbar/utils/analytics' import MaterialIcon from '@/shared/components/material-icon' import OLTooltip from '@/shared/components/ol/ol-tooltip' export const ToolbarButton = memo<{ id: string className?: string label: string command?: (view: EditorView) => void active?: boolean disabled?: boolean icon: string textIcon?: boolean hidden?: boolean shortcut?: string }>(function ToolbarButton({ id, className, label, command, active = false, disabled, icon, textIcon = false, hidden = false, shortcut, }) { const view = useCodeMirrorViewContext() const handleMouseDown = useCallback((event: React.MouseEvent) => { event.preventDefault() }, []) const handleClick = useCallback( (event: React.MouseEvent) => { emitToolbarEvent(view, id) if (command) { event.preventDefault() command(view) view.focus() } }, [command, view, id] ) const button = ( ) if (!label) { return button } const description = ( <>