import { NumberInput } from '@mantine/core' import { useEffect, useState } from 'react' import type { BaseEditorProps } from './types' interface NumericEditorProps extends BaseEditorProps { max?: number min?: number step?: number } export function NumericEditor({ autoFocus = true, max, min, onCancel, onCommit, onMoveNext, onMovePrev, step = 1, value }: NumericEditorProps) { const [inputValue, setInputValue] = useState(value ?? '') useEffect(() => { setInputValue(value ?? '') }, [value]) const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault() onCommit(typeof inputValue === 'number' ? inputValue : Number(inputValue)) } else if (e.key === 'Escape') { e.preventDefault() onCancel() } else if (e.key === 'Tab') { e.preventDefault() onCommit(typeof inputValue === 'number' ? inputValue : Number(inputValue)) if (e.shiftKey) { onMovePrev?.() } else { onMoveNext?.() } } } return ( setInputValue(val ?? '')} onKeyDown={handleKeyDown} size="xs" step={step} value={inputValue} /> ) }