import { useControl, useField, type FieldName } from "@conform-to/react/future"; import { Field, type FieldProps } from "../field/Field"; import { Range } from "./Range"; interface Props extends Omit { name: FieldName; min?: number; max?: number; step?: number; showMinMax?: "onHover" | "always" | "never"; showValue?: boolean; } export function RangeField({ name, min, max, step, showMinMax, showValue, id: forcedId, ...rest }: Props) { const field = useField(name); const id = forcedId ?? field.id; const control = useControl({ defaultValue: field.defaultValue, parse(payload) { if (typeof payload !== "string") { throw new Error("range input must return string"); } return parseInt(payload); }, serialize(value) { return value.toString(); }, }); return ( <> { control.change(value); }} onBlur={() => control.blur()} /> ); }