import * as React from 'react'; import classNames from 'classnames'; import RcInputNumber from 'rc-input-number'; import UpOutlined from '@ant-design/icons/UpOutlined'; import DownOutlined from '@ant-design/icons/DownOutlined'; import { ConfigConsumer, ConfigConsumerProps } from '../config-provider'; import { Omit } from '../_util/type'; import SizeContext, { SizeType } from '../config-provider/SizeContext'; // omitting this attrs because they conflicts with the ones defined in InputNumberProps export type OmitAttrs = 'defaultValue' | 'onChange' | 'size'; export interface InputNumberProps extends Omit, OmitAttrs> { prefixCls?: string; min?: number; max?: number; value?: number; step?: number | string; defaultValue?: number; tabIndex?: number; onChange?: (value: number | undefined) => void; disabled?: boolean; size?: SizeType; formatter?: (value: number | string | undefined) => string; parser?: (displayValue: string | undefined) => number | string; decimalSeparator?: string; placeholder?: string; style?: React.CSSProperties; className?: string; name?: string; id?: string; precision?: number; onPressEnter?: React.KeyboardEventHandler; } const InputNumber = React.forwardRef((props, ref) => { const renderInputNumber = ({ getPrefixCls, direction }: ConfigConsumerProps) => { const { className, size: customizeSize, prefixCls: customizePrefixCls, ...others } = props; const prefixCls = getPrefixCls('input-number', customizePrefixCls); const upIcon = ; const downIcon = ; return ( {size => { const mergeSize = customizeSize || size; const inputNumberClass = classNames( { [`${prefixCls}-lg`]: mergeSize === 'large', [`${prefixCls}-sm`]: mergeSize === 'small', [`${prefixCls}-rtl`]: direction === 'rtl', }, className, ); return ( ); }} ); }; return {renderInputNumber}; }); InputNumber.defaultProps = { step: 1, }; export default InputNumber;