import type { ControllerProps, FieldValues } from 'react-hook-form'; import { Controller } from 'react-hook-form'; import type { NumberInput2Props } from './NumberInput2.js'; import { NumberInput2 } from './NumberInput2.js'; interface NumberInput2ControllerProps< TFieldValues extends FieldValues = FieldValues, > extends Omit, Pick, 'control' | 'name'> { controllerProps?: Omit< ControllerProps, 'control' | 'name' | 'render' >; noShadowBox?: boolean; transformValue?: (value: number) => number; } const numberPattern = /^-?\d+(\.\d+)?$/; export function NumberInput2Controller< TFieldValues extends FieldValues = FieldValues, >(props: NumberInput2ControllerProps) { const { controllerProps = {}, onValueChange, name, control, intent = 'none', noShadowBox = false, style, transformValue, ...otherInputProps } = props; const { rules, ...otherControllerProps } = controllerProps; return ( { const { onChange, ...otherFieldProps } = field; return ( { if (numberPattern.test(valueAsString)) { onChange( typeof transformValue === 'function' ? transformValue(valueAsNumber) : valueAsNumber, ); } else { onChange(valueAsString); } onValueChange?.(valueAsNumber, valueAsString, event); }} {...otherInputProps} style={{ ...style, ...(noShadowBox && !invalid && { boxShadow: 'none' }), }} intent={invalid ? 'danger' : intent} /> ); }} /> ); }