import React, { InputHTMLAttributes, ChangeEvent, MouseEvent, forwardRef } from 'react'; import { calculateTrackPosition } from './helpers'; import { Button, Icon, Input, Wrapper } from './styles'; import { faMinus, faPlus } from '@fortawesome/free-solid-svg-icons'; export interface InputRange extends Omit, 'defaultValue' | 'onChange'> { value: number; onChange: (value: number) => void; id?: string; min?: number; max?: number; step?: number; controls?: boolean; } const InputRange = forwardRef( ({ min = 0, max = 100, step = 1, controls = false, value, onChange, id, ...otherProps }, ref) => { const onChangeHandler = (e: ChangeEvent) => { onChange(Number(e.target.value)); }; const decrement = (e: MouseEvent) => { e.preventDefault(); onChange(value - step); }; const increment = (e: MouseEvent) => { e.preventDefault(); onChange(value + step); }; if (!id) { console.warn('Id is a required prop of the inputRange component'); } return ( {controls && ( )} {controls && ( )} ); }, ); export default InputRange;