@@ -63,6 +63,8 @@ export interface InputNumberProps<T extends ValueType = ValueType>
6363 /** value will show as string */
6464 stringMode ?: boolean ;
6565
66+ type ?: 'input' | 'spinner' ;
67+
6668 defaultValue ?: T ;
6769 value ?: T | null ;
6870
@@ -84,6 +86,8 @@ export interface InputNumberProps<T extends ValueType = ValueType>
8486 // Customize handler node
8587 upHandler ?: React . ReactNode ;
8688 downHandler ?: React . ReactNode ;
89+ spinnerUpHandler ?: React . ReactNode ;
90+ spinnerDownHandler ?: React . ReactNode ;
8791 keyboard ?: boolean ;
8892 changeOnWheel ?: boolean ;
8993
@@ -119,6 +123,7 @@ type InternalInputNumberProps = Omit<InputNumberProps, 'prefix' | 'suffix'> & {
119123const InternalInputNumber = React . forwardRef (
120124 ( props : InternalInputNumberProps , ref : React . Ref < HTMLInputElement > ) => {
121125 const {
126+ type,
122127 prefixCls,
123128 className,
124129 style,
@@ -131,6 +136,8 @@ const InternalInputNumber = React.forwardRef(
131136 readOnly,
132137 upHandler,
133138 downHandler,
139+ spinnerUpHandler,
140+ spinnerDownHandler,
134141 keyboard,
135142 changeOnWheel = false ,
136143 controls = true ,
@@ -607,7 +614,7 @@ const InternalInputNumber = React.forwardRef(
607614 onCompositionEnd = { onCompositionEnd }
608615 onBeforeInput = { onBeforeInput }
609616 >
610- { controls && (
617+ { type === 'input' && controls && (
611618 < StepHandler
612619 prefixCls = { prefixCls }
613620 upNode = { upHandler }
@@ -617,6 +624,17 @@ const InternalInputNumber = React.forwardRef(
617624 onStep = { onInternalStep }
618625 />
619626 ) }
627+
628+ { type === 'spinner' && controls && (
629+ < StepHandler
630+ prefixCls = { prefixCls }
631+ downNode = { spinnerDownHandler || downHandler }
632+ downDisabled = { downDisabled }
633+ upHidden
634+ onStep = { onInternalStep }
635+ />
636+ ) }
637+
620638 < div className = { `${ inputClassName } -wrap` } >
621639 < input
622640 autoComplete = "off"
@@ -634,13 +652,24 @@ const InternalInputNumber = React.forwardRef(
634652 readOnly = { readOnly }
635653 />
636654 </ div >
655+
656+ { type === 'spinner' && controls && (
657+ < StepHandler
658+ prefixCls = { prefixCls }
659+ upNode = { spinnerUpHandler || upHandler }
660+ upDisabled = { upDisabled }
661+ downHidden
662+ onStep = { onInternalStep }
663+ />
664+ ) }
637665 </ div >
638666 ) ;
639667 } ,
640668) ;
641669
642670const InputNumber = React . forwardRef < InputNumberRef , InputNumberProps > ( ( props , ref ) => {
643671 const {
672+ type = 'input' ,
644673 disabled,
645674 style,
646675 prefixCls = 'rc-input-number' ,
@@ -675,7 +704,7 @@ const InputNumber = React.forwardRef<InputNumberRef, InputNumberProps>((props, r
675704 return (
676705 < SemanticContext . Provider value = { memoizedValue } >
677706 < BaseInput
678- className = { className }
707+ className = { clsx ( ` ${ prefixCls } -type- ${ type } ` , className ) }
679708 triggerFocus = { focus }
680709 prefixCls = { prefixCls }
681710 value = { value }
@@ -696,6 +725,7 @@ const InputNumber = React.forwardRef<InputNumberRef, InputNumberProps>((props, r
696725 ref = { holderRef }
697726 >
698727 < InternalInputNumber
728+ type = { type }
699729 prefixCls = { prefixCls }
700730 disabled = { disabled }
701731 ref = { inputFocusRef }
0 commit comments