import { MinusIcon, PlusIcon } from 'lucide-react'; import React, { useEffect, useMemo, useState } from 'react'; interface NumberInputProps { className?: string; value?: number; onChange?: (value: number) => void; height?: number | string; } const NumberInput: React.FC = ({ className, value: initialValue, onChange, height, }) => { const [value, setValue] = useState(() => { return initialValue ?? 0; }); useEffect(() => { if (initialValue !== undefined) { setValue(initialValue); } }, [initialValue]); const handleDecrement = () => { if (value > 0) { setValue(value - 1); onChange?.(value - 1); } }; const handleIncrement = () => { setValue(value + 1); onChange?.(value + 1); }; const handleChange = (e: React.ChangeEvent) => { const newValue = Number(e.target.value); if (!isNaN(newValue)) { setValue(newValue); onChange?.(newValue); } }; const handleInput = (e: React.ChangeEvent) => { // If the input value is not a number, the input is not allowed if (!/^\d*$/.test(e.target.value)) { e.preventDefault(); } }; const style = useMemo( () => ({ height: height ? `${height.toString().replace('px', '')}px` : 'auto', }), [height], ); return (
); }; export default NumberInput;