Input · InputNumber

InputNumber

Through the mouse or keyboard, input the value in the range. Unlike Input, it has a stepper operation area for digital scenes, and it can display more complex content formats when used with Parser.

When to Use

When you need to get a standard value.

Demos

How to import

import { InputNumber } from '@fibrous/semi-ui-solid';

Basic Input Box

简单数字输入框


设置了步长 step=2


设置 shiftStep=100, 按住 shift 同时点击按钮,可以一次增加/减少100


设置了上下界 min=1,max=10


Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return (
        <div style={{ width: '280px' }}>
            <span id="inputnumber-basic-simple">简单数字输入框</span>
            <InputNumber aria-labelledby="inputnumber-basic-simple" />
            <br />
            <br />

            <span id="inputnumber-basic-step">设置了步长 step=2 </span>
            <InputNumber aria-labelledby="inputnumber-basic-step" step={2} />
            <br />
            <br />

            <span id="inputnumber-basic-shift-step">设置 shiftStep=100, 按住 shift 同时点击按钮,可以一次增加/减少100 </span>
            <InputNumber aria-labelledby="inputnumber-basic-shift-step" shiftStep={100} />
            <br />
            <br />

            <span id="inputnumber-basic-range">设置了上下界 min=1,max=10</span>
            <InputNumber aria-labelledby="inputnumber-basic-range" min={1} max={10} defaultValue={1} />
            <br />
            <br />
        </div>
    );
}
设置了默认值 defaultValue=1


禁用 disabled=true


设置了小数位数 precision=2


设置了 innerButtons=true
小时

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return (
        <div style={{ width: '280px' }}>
            <span id="inputnumber-basic-more-default-value">设置了默认值 defaultValue=1 </span>
            <InputNumber aria-labelledby="inputnumber-basic-more-default-value" defaultValue={1} />
            <br />
            <br />

            <span id="inputnumber-basic-more-disabled">禁用 disabled=true</span>
            <InputNumber aria-labelledby="inputnumber-basic-more-disabled" defaultValue={2} disabled />
            <br />
            <br />

            <span id="inputnumber-basic-more-precision">设置了小数位数 precision=2 </span>
            <InputNumber aria-labelledby="inputnumber-basic-more-precision" precision={2} defaultValue={1.234} />
            <br />
            <br />

            <span id="inputnumber-basic-more-inner-buttons">设置了 innerButtons=true </span>
            <InputNumber aria-labelledby="inputnumber-basic-more-inner-buttons" innerButtons suffix="小时" defaultValue={1} style={{ width: '190px' }} />
            <br />
        </div>
    );
}

Inner Buttons

With innerButtons, you can hide the buttons on the right into the interior, which will only be displayed when hover occurs

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return <InputNumber aria-label="Number with inner buttons" innerButtons style={{ width: '190px' }} />;
}

The innerButtons buttons temporarily replace the content of the suffix prop while hovered or focused, and the original content comes back afterwards.

Set hideButtons to true to hide the buttons completely

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return <InputNumber aria-label="Number without buttons" hideButtons style={{ width: '190px' }} />;
}

Size

默认尺寸 size=default


大尺寸 size=large


小尺寸 size=small

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return (
        <div style={{ width: '180px' }}>
            <span id="inputnumber-size-default">默认尺寸 size=default</span>
            <InputNumber aria-labelledby="inputnumber-size-default" />
            <br />
            <br />

            <span id="inputnumber-size-large">大尺寸 size=large</span>
            <InputNumber aria-labelledby="inputnumber-size-large" size="large" />
            <br />
            <br />

            <span id="inputnumber-size-small">小尺寸 size=small</span>
            <InputNumber aria-labelledby="inputnumber-size-small" size="small" />
            <br />
        </div>
    );
}

Custom Display Format and Resolution

A pair of methods for formatter and parser, which generally need to be set at the same time, otherwise the value cannot be resolved correctly.

人民币


自定义串

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

const log = (v: number | string) => {
    console.log(`Changed to: [${typeof v}] ${v}`);
};

export default function InputNumberDemo() {
    return (
        <div style={{ width: '180px' }}>
            <span id="inputnumber-formatter-rmb">人民币</span>
            <InputNumber aria-labelledby="inputnumber-formatter-rmb" onChange={log} defaultValue={1000} min={0} formatter={(value) => `¥ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} parser={(value) => value.replace(/¥\s?|(,*)/g, '')} />
            <br />
            <br />

            <span id="inputnumber-formatter-custom">自定义串</span>
            <InputNumber aria-labelledby="inputnumber-formatter-custom" onChange={log} defaultValue={1111} formatter={(value) => String(value).split('').join('-')} parser={(value) => value.replace(/-/g, '')} />
            <br />
        </div>
    );
}

Can Only Enter Numbers

With formatter and onNumberChange (the numberChange event in Vue), a pure digital input box can be implemented.

Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return <InputNumber aria-label="Integer" formatter={(value) => `${value}`.replace(/\D/g, '')} onNumberChange={(number) => console.log(number)} min={0} max={Number.MAX_SAFE_INTEGER} />;
}

Currency Display

In internationalization mode, enable currency={true} (just currency in Vue) and the component will automatically display the corresponding currency type according to localeCode. (Note that the component key value needs to be updated after switching the language type)

Code
import { createSignal, For } from 'solid-js';
import type { Locale } from '@fibrous/semi-foundation/locale/interface';
import ar from '@fibrous/semi-foundation/locale/source/ar';
import de from '@fibrous/semi-foundation/locale/source/de';
import en_GB from '@fibrous/semi-foundation/locale/source/en_GB';
import en_US from '@fibrous/semi-foundation/locale/source/en_US';
import es from '@fibrous/semi-foundation/locale/source/es';
import fr from '@fibrous/semi-foundation/locale/source/fr';
import id_ID from '@fibrous/semi-foundation/locale/source/id_ID';
import it from '@fibrous/semi-foundation/locale/source/it';
import ja_JP from '@fibrous/semi-foundation/locale/source/ja_JP';
import ko_KR from '@fibrous/semi-foundation/locale/source/ko_KR';
import ms_MY from '@fibrous/semi-foundation/locale/source/ms_MY';
import nl_NL from '@fibrous/semi-foundation/locale/source/nl_NL';
import pl_PL from '@fibrous/semi-foundation/locale/source/pl_PL';
import pt_BR from '@fibrous/semi-foundation/locale/source/pt_BR';
import ro from '@fibrous/semi-foundation/locale/source/ro';
import ru_RU from '@fibrous/semi-foundation/locale/source/ru_RU';
import sv_SE from '@fibrous/semi-foundation/locale/source/sv_SE';
import th_TH from '@fibrous/semi-foundation/locale/source/th_TH';
import tr_TR from '@fibrous/semi-foundation/locale/source/tr_TR';
import vi_VN from '@fibrous/semi-foundation/locale/source/vi_VN';
import zh_CN from '@fibrous/semi-foundation/locale/source/zh_CN';
import zh_TW from '@fibrous/semi-foundation/locale/source/zh_TW';
import { InputNumber, LocaleProvider, Select } from '@fibrous/semi-ui-solid';

const language: Record<string, Locale> = {
    zh_CN,
    en_GB,
    en_US,
    ko_KR,
    ja_JP,
    ar,
    vi_VN,
    ru_RU,
    id_ID,
    ms_MY,
    th_TH,
    tr_TR,
    pt_BR,
    zh_TW,
    es,
    sv_SE,
    pl_PL,
    nl_NL,
    de,
    it,
    fr,
    ro,
};

export default function InputNumberDemo() {
    const [locale, setLocale] = createSignal<Locale>(zh_CN);
    const [localeCode, setLocaleCode] = createSignal('zh_CN');

    const onLanguageChange = (code: unknown) => {
        if (typeof code !== 'string') {
            return;
        }
        setLocale(language[code]);
        setLocaleCode(code);
    };

    return (
        <>
            <div style={{ 'padding-bottom': '20px' }}>
                <Select aria-label="切换语言" onChange={onLanguageChange} insetLabel="切换语言" style={{ width: '250px' }} defaultValue="zh_CN">
                    <Select.Option value="zh_CN">简体中文</Select.Option>
                    <Select.Option value="en_US">英语(美)</Select.Option>
                    <Select.Option value="en_GB">英语(英)</Select.Option>
                    <Select.Option value="ja_JP">日语</Select.Option>
                    <Select.Option value="ko_KR">韩语</Select.Option>
                    <Select.Option value="ar">阿拉伯语</Select.Option>
                    <Select.Option value="vi_VN">越南语</Select.Option>
                    <Select.Option value="ru_RU">俄罗斯语</Select.Option>
                    <Select.Option value="id_ID">印尼语</Select.Option>
                    <Select.Option value="ms_MY">马来语</Select.Option>
                    <Select.Option value="th_TH">泰语</Select.Option>
                    <Select.Option value="tr_TR">土耳其语</Select.Option>
                    <Select.Option value="pt_BR">葡萄牙语(巴西)</Select.Option>
                    <Select.Option value="zh_TW">繁体中文</Select.Option>
                    <Select.Option value="es">西班牙语</Select.Option>
                    <Select.Option value="de">德语</Select.Option>
                    <Select.Option value="it">意大利语</Select.Option>
                    <Select.Option value="fr">法语</Select.Option>
                    <Select.Option value="ro">罗马尼亚语</Select.Option>
                    <Select.Option value="sv_SE">瑞典语</Select.Option>
                    <Select.Option value="pl_PL">波兰语</Select.Option>
                    <Select.Option value="nl_NL">荷兰语</Select.Option>
                </Select>
            </div>
            <LocaleProvider locale={locale()}>
                {/* the item is the locale code, so a language change remounts the input, as the React key does */}
                <For each={[localeCode()]}>{() => <InputNumber aria-label="金额" currency defaultValue={123456.78} />}</For>
            </LocaleProvider>
        </>
    );
}

You can also specify the currency to be displayed by manually passing localeCode and currency.

🇨🇳 人民币


🇪🇺 欧元


🇯🇵 日元


🇻🇳 越南盾


Code
import { InputNumber } from '@fibrous/semi-ui-solid';

const defaultValue = 123456.78;

export default function InputNumberDemo() {
    return (
        <div>
            <div id="inputnumber-currency-locale-cny">🇨🇳 人民币</div>
            <InputNumber aria-labelledby="inputnumber-currency-locale-cny" localeCode="zh-CN" currency="CNY" defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-locale-eur">🇪🇺 欧元</div>
            <InputNumber aria-labelledby="inputnumber-currency-locale-eur" localeCode="de-DE" currency="EUR" defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-locale-jpy">🇯🇵 日元</div>
            <InputNumber aria-labelledby="inputnumber-currency-locale-jpy" localeCode="ja-JP" currency="JPY" defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-locale-vnd">🇻🇳 越南盾</div>
            <InputNumber aria-labelledby="inputnumber-currency-locale-vnd" localeCode="vi-VN" currency="VND" defaultValue={defaultValue} />
            <br />
            <br />
        </div>
    );
}

Supports three display modes: symbol, code, and name. It is controlled by the currencyDisplay property. The currency symbol is displayed by default. Set showCurrencySymbol to false to hide the display of currency symbol/code/name

🇨🇳 CNY ➕ code


🇨🇳 CNY ➕ symbol


🇨🇳 CNY ➕ name


Code
import { InputNumber } from '@fibrous/semi-ui-solid';

const defaultValue = 123456.78;

export default function InputNumberDemo() {
    return (
        <div>
            <div id="inputnumber-currency-display-code">🇨🇳 CNY ➕ code</div>
            <InputNumber aria-labelledby="inputnumber-currency-display-code" currency="CNY" currencyDisplay="code" defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-display-symbol">🇨🇳 CNY ➕ symbol</div>
            <InputNumber aria-labelledby="inputnumber-currency-display-symbol" currency="CNY" currencyDisplay="symbol" defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-display-name">🇨🇳 CNY ➕ name</div>
            <InputNumber aria-labelledby="inputnumber-currency-display-name" currency="CNY" currencyDisplay="name" defaultValue={defaultValue} />
            <br />
            <br />
        </div>
    );
}

Hide the display of currency symbols/codes/names, and display the currency symbol through the prefix/suffix

🇨🇳 CNY ➕ code
CNY


🇨🇳 CNY ➕ symbol
¥


🇨🇳 CNY ➕ name
人民币


Code
import { InputNumber } from '@fibrous/semi-ui-solid';

const defaultValue = 123456.78;

export default function InputNumberDemo() {
    return (
        <div>
            <div id="inputnumber-currency-affix-code">🇨🇳 CNY ➕ code</div>
            <InputNumber aria-labelledby="inputnumber-currency-affix-code" style={{ width: '200px' }} currency="CNY" prefix="CNY" showCurrencySymbol={false} defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-affix-symbol">🇨🇳 CNY ➕ symbol</div>
            <InputNumber aria-labelledby="inputnumber-currency-affix-symbol" style={{ width: '200px' }} currency="CNY" prefix="¥" showCurrencySymbol={false} defaultValue={defaultValue} />
            <br />
            <br />
            <div id="inputnumber-currency-affix-name">🇨🇳 CNY ➕ name</div>
            <InputNumber aria-labelledby="inputnumber-currency-affix-name" style={{ width: '200px' }} currency="CNY" suffix="人民币" showCurrencySymbol={false} defaultValue={defaultValue} />
            <br />
            <br />
        </div>
    );
}

Scientific Notation Display

When the number is long, you can enable scientific notation display via the scientificNotation property. It displays in scientific notation when out of focus, and displays the full number when in focus.

启用科学计数法(默认阈值 15 位)


自定义阈值(10 位)


超大数字


小数场景


Code
import { InputNumber } from '@fibrous/semi-ui-solid';

export default function InputNumberDemo() {
    return (
        <div style={{ width: '280px' }}>
            <span id="inputnumber-scientific-default">启用科学计数法(默认阈值 15 位)</span>
            <InputNumber aria-labelledby="inputnumber-scientific-default" scientificNotation defaultValue={123456789012345} />
            <br />
            <br />

            <span id="inputnumber-scientific-threshold">自定义阈值(10 位)</span>
            <InputNumber aria-labelledby="inputnumber-scientific-threshold" scientificNotation={{ threshold: 10 }} defaultValue={1234567890} />
            <br />
            <br />

            <span id="inputnumber-scientific-large">超大数字</span>
            <InputNumber aria-labelledby="inputnumber-scientific-large" scientificNotation defaultValue={1e16} />
            <br />
            <br />

            <span id="inputnumber-scientific-decimal">小数场景</span>
            <InputNumber aria-labelledby="inputnumber-scientific-decimal" scientificNotation precision={10} defaultValue={0.000000123456789} />
            <br />
            <br />
        </div>
    );
}

API Reference

Props

PropertyDescriptionTypeDefault
addonAfterTrailing addon, shown outside the input on the right.JSX.Element-
addonBeforeLeading addon, shown outside the input on the left.JSX.Element-
borderlessBorderless mode.boolean-
clearIconIcon of the clear button, as an element. Takes effect only when showClear is true.JSX.Element-
compositionWhether to enable composition mode. When enabled, onChange is not called during IME composition and is called once after it ends.boolean-
currencyCurrency, such as CNY, EUR or USD. When true, uses defaultCurrency, or the currency of the locale pack when that is not set.string | boolean-
currencyDisplayHow the currency is shown: symbol, code or name.'code' | 'symbol' | 'name'-
defaultCurrencyCurrency used when currency is true. Priority: own prop, global default, locale pack.string-
defaultValueInitial value when uncontrolled.number | string-
disabledWhether disabled. Falls back to the value of the enclosing InputGroup when not set.boolean-
formatterFormat of the displayed value, usually set together with parser.Type(value: number | string) => string-
getValueLengthFunction that measures the text length. When set, it enforces maxLength and minLength instead of the native maxlength attribute.Type(value: string) => number-
hideButtonsHides the step buttons; with innerButtons also true, no built-in button is shown either.boolean-
hideSuffixHides the suffix while the clear button is shown; by default the two sit side by side.boolean-
innerButtonsPuts the step buttons inside the input, shown on hover or focus and temporarily replacing suffix.booleanfalse
inputRefCallback ref for the native input element, which receives the HTMLInputElement; use it for native methods such as select().Type(element: HTMLInputElement) => void-
inputStyleStyle of the native input, as an object (kebab-case keys) or a string.JSX.CSSProperties | string-
insetLabelInset label, shown inside the input.JSX.Element-
insetLabelIdThe id of the inset label.string-
keepFocusKeeps the input focused when a step button is clicked.booleanfalse
localeCodeLocale code used for formatting in currency mode, such as zh-CN, en-US or de-DE. Priority: own prop, global default, locale pack of LocaleProvider or ConfigProvider.string-
maxMaximum value.numberInfinity
maximumFractionDigitsMaximum number of fraction digits shown, passed to Intl.NumberFormat.number-
maxLengthMaximum length of the input text.number-
minMinimum value.number-Infinity
minimumFractionDigitsMinimum number of fraction digits shown, passed to Intl.NumberFormat.number-
minLengthMinimum length of the input text.number-
modeInput mode, password, which shows a button to toggle visibility.InputMode-
onBlurCalled when focus leaves the input; the event is the focusout of the wrapper.Type(e: FocusEvent) => void-
onChangeCalled when the value changes. e is the typing, the pointerdown of a step button, the arrow or Home/End keydown, or the blur that caused it. Mounting and value changes do not call it; an out-of-range value is shown as given and is corrected and reported only after a user action.Type(value: number | string, e: InputNumberChangeEvent) => void-
onClearCalled when the clear button is clicked.Type(e: MouseEvent) => void-
onDownClickCalled when the decrease button is clicked, with the stepped value and the pointerdown event. While held, it is called on every step with the event that began the press.Type(value: string, e: PointerEvent) => void-
onEnterPressCalled when the Enter key is pressed.Type(e: InputElementEvent<KeyboardEvent>) => void-
onFocusCalled when focus enters the input; the event is the focusin of the wrapper.Type(e: FocusEvent) => void-
onKeyDownCalled when a key is pressed in the input; the event is its keydown.TypeJSX.EventHandlerUnion<HTMLInputElement, KeyboardEvent>-
onlyBorderInternal prop giving the border width of the wrapper in pixels, set by other components; callers normally do not pass it.number-
onNumberChangeCalled when the number changes; the first argument is the number, and the second is as in onChange.Type(value: number, e: InputNumberChangeEvent) => void-
onUpClickCalled when the increase button is clicked, with the stepped value and the pointerdown event. While held, it is called on every step with the event that began the press.Type(value: string, e: PointerEvent) => void-
parserConverts the text from formatter back to a number string; used together with formatter.Type(value: string) => string-
placeholderPlaceholder text.string | number-
precisionNumerical precision, the number of fraction digits kept.number-
prefixPrefix content, shown inside the input on the left.JSX.Element-
prefixClsClass name prefix of the component; the root class is the prefix plus -number, semi-input-number by default.string"semi-input"
pressIntervalInterval in milliseconds between repeats while a step button is held.number250
pressTimeoutDelay in milliseconds before repeating starts while a step button is held.number250
preventScrollWhether focusing stops the browser from scrolling the document to the input; applies to focusing inside the component.boolean-
readonlyWhether read-only. Locks typing and hides the clear button; the native readOnly locks typing only.boolean-
refRef of the root element (.semi-input-number), typed HTMLDivElement. focus() and blur() on the root act on the input.TypeRef<HTMLDivElement>-
scientificNotationShows scientific notation when blurred and the full number when focused. Pass { threshold } to configure the threshold, 15 significant digits by default. Not supported in currency mode.boolean | ScientificNotationConfig-
shiftStepStep of each change while Shift is held; may be a decimal.number10
showClearWhether to show the clear button.boolean-
showClearIgnoreDisabledInternal prop set by DatePicker; callers normally do not pass it.boolean-
showCurrencySymbolWhether to show the currency symbol, code or name; only in currency mode.booleantrue
sizeInput size: default, small or large. The size of the enclosing InputGroup takes precedence when it is set.InputSize-
stepStep of each change; may be a decimal.number1
suffixSuffix content, shown inside the input on the right.JSX.Element-
typeThe type attribute of the native input, text by default.string-
validateStatusValidation status: default, error, warning or success.ValidateStatus-
valueCurrent value; passing it makes the component controlled, so update it in onChange. An explicit undefined is treated as uncontrolled.number | string-

class, style and ref land on the outer .semi-input-number root element; the other native attributes and events (id, name, aria-*, data-*, onInput, onKeyUp and so on) land on the native input.

Methods

ref gets the root element (HTMLDivElement), not a handle. focus() and blur() on the root act on the input, and focus() without arguments follows the preventScroll prop. Native methods such as select() and setSelectionRange() are called on the input element that inputRef receives.

Accessibility

Guideline: https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/

ARIA

  • InputNumber has spinbutton role
  • spinbutton uses aria-valuenow for current value, aria-valuemax for acceptable maximum value, and aria-valuemin for acceptable minimum value
  • When InputNumber is used in Form, the value of the input box's aria-labelledby reference is Field label

Keyboard and Focus

  • InputNumber can get focus, keyboard users can use Tab and Shift + Tab to switch focus (Increase and decrease buttons are not focusable)
  • Keyboard users can press up key ⬆️ or down key ⬇️ and the input value will increase or decrease by step (default is 1)
  • Hold down Shift + Up ⬆️ or Down ⬇️ , the input value will increase or decrease by shiftStep (default is 10)
  • Home jumps to the value of min and End to max, when that bound is set; without it the key moves the caret as usual
  • When the value is already at a bound and a key leaves it unchanged, onChange is not called (the change event in Vue)

Design Tokens

These are the component's internal Sass variables and cannot be overridden. To customize styles, override the --semi-* CSS variables (see the Design Token page) or write unlayered CSS rules.
Sass variableValueUsage
$transition_duration-inputNumber-bgvar(--semi-transition_duration-none)数字输入框-背景色-动画持续时间
$transition_function-inputNumber-bgvar(--semi-transition_function-easeIn)数字输入框-背景色-过渡曲线
$transition_delay-inputNumber-bgvar(--semi-transition_delay-none)数字输入框-背景色-延迟时间
$transition_duration-inputNumber-bordervar(--semi-transition_duration-none)数字输入框-边框-动画持续时间
$transition_function-inputNumber-bordervar(--semi-transition_function-easeIn)数字输入框-边框-过渡曲线
$transition_delay-inputNumber-bordervar(--semi-transition_delay-none)数字输入框-边框-延迟时间
$transform_scale-inputNumbervar(--semi-transform_scale-none)数字输入框-变大
$height-inputNumber_button_default$height-control-default数字输入框高度 - 默认
$height-inputNumber_button_large$height-control-large数字输入框高度 - 大
$height-inputNumber_button_small$height-control-small数字输入框高度 - 小
$height-inputNumber_button_inner_default$height-control-default - 2px隐藏步进器的数字输入框高度 - 默认
$height-inputNumber_button_inner_large$height-control-large - 2px隐藏步进器的数字输入框高度 - 大
$height-inputNumber_button_inner_small$height-control-small - 2px隐藏步进器的数字输入框高度 - 小
$width-inputNumber_button14px步进器按钮宽度
$radius-inputNumbervar(--semi-border-radius-small)步进器按钮圆角 - 外部
$radius-inputNumber_innervar(--semi-border-radius-small)步进器按钮圆角 - 内部
$spacing-inputNumber_button-marginLeft4px步进器按钮左侧外边距
$color-inputNumber_button-text-defaultvar(--semi-color-text-2)步进器按钮图标颜色
$color-inputNumber_button-text-disabledvar(--semi-color-disabled-text)步进器按钮图标颜色 - 禁用
$color-inputNumber_button-bg-defaultvar(--semi-color-bg-2)步进器按钮背景颜色
$color-inputNumber_button-bg-disabledvar(--semi-color-disabled-fill)步进器按钮背景颜色 - 禁用
$color-inputNumber_button-bg-hovervar(--semi-color-fill-0)步进器按钮图标颜色 - 悬浮
$color-inputNumber_button-bg-activevar(--semi-color-fill-1)步进器按钮图标颜色 - 按下
$color-inputNumber_button-border-defaultvar(--semi-color-border)步进器按钮描边颜色
$color-inputNumber_button-border-hovervar(--semi-color-fill-2)步进器按钮描边颜色 - 悬浮
$width-inputNumber_button-border1px步进器按钮描边宽度
$spacing-inputNumber_button_inner-marginLeft$spacing-tight隐藏步进器按钮左侧外边距
$spacing-inputNumber_clearbtn_suffix-marginLeft-$spacing-extra-tight清空按钮左侧外边距