import { useState } from 'react'
import NumberInput from '../NumberInput'
import Div from '../../Div'
import Br from '../../Br'
import { Sandbox } from '@startupjs/docs'

# NumberInput

NumberInput позволяет пользователю вводить или изменять число.

```jsx
import { NumberInput } from '@startupjs/ui'
```

## Простой пример

```jsx example
const [value, setValue] = useState()
return (
  <NumberInput
    value={value}
    onChangeNumber={setValue}
  />
)
```

## Disabled

```jsx example
return (
  <NumberInput
    disabled
    value={10}
  />
)
```

## Readonly

```jsx example
return (
  <NumberInput
    readonly
    value={10}
  />
)
```

## Шаг

Шаг указывает сколько знаков после запятой можно ввести, задается числами 1, 0.1, 0.01 и тд в свойстве `step` (1 по умолчанию).

```jsx example
const [value, setValue] = useState()
return (
  <Div>
    <NumberInput
      value={value}
      step={0.001}
      onChangeNumber={setValue}
    />
  </Div>
)
```

## Минимальное и максимальное значения

Минимальное и максимальное значения задаются свойствами 'min' и 'max'

```jsx example
const [value, setValue] = useState()
return (
  <Div>
    <NumberInput
      value={value}
      min={-30}
      max={20}
      onChangeNumber={setValue}
    />
  </Div>
)
```

## Кнопки

Кнопки позволяют изменять число по заданному шагу. Положение кнопок можно изменить передав в компонент свойство `buttonsMode` со значением `vertical` или `horizontal`  (`vertical` по умолчанию) или спрятать передав в компонент свойство `buttonsMode` со значением `none`.

```jsx example
const [valueVertical, setValueVertical] = useState()
const [valueHorizontal, setValueHorizontal] = useState()
const [valueNone, setValueNone] = useState()
return (
  <Div>
    <NumberInput
      buttonsMode='vertical'
      value={valueVertical}
      onChangeNumber={setValueVertical}
    />
    <Br />
    <NumberInput
      buttonsMode='horizontal'
      value={valueHorizontal}
      onChangeNumber={setValueHorizontal}
    />
    <Br />
    <NumberInput
      buttonsMode='none'
      value={valueNone}
      onChangeNumber={setValueNone}
    />
  </Div>
)
```

## Размеры

Размер может быть изменен с помощью свойства `size`. Размер по умолчанию - `m`

```jsx example
const [valueL, setValueL] = useState()
const [valueM, setValueM] = useState()
const [valueS, setValueS] = useState()
return (
  <Div>
    <NumberInput
      size='s'
      value={valueS}
      onChangeNumber={setValueS}
    />
    <Br />
    <NumberInput
      size='m'
      value={valueM}
      onChangeNumber={setValueM}
    />
    <Br />
    <NumberInput
      size='l'
      value={valueL}
      onChangeNumber={setValueL}
    />
  </Div>
)
```

## Стилизация

Для стилизация можно применить свойства:

- `style` - для стилизации корневого компонента
- `inputStyle` - для стилизации поля ввода
- `buttonStyle` - для стилизации кнопок

```jsx example
const [value, setValue] = useState()

return (
  <NumberInput
    style={{
      width: 250
    }}
    buttonStyle={{
      borderWidth: 0
    }}
    inputStyle={{
      borderTopWidth: 0,
      borderLeftWidth: 0,
      borderRightWidth: 0,
      borderRadius: 0
    }}
    placeholder='Enter number'
    value={value}
    onChangeNumber={setValue}
  />
)
```

## Единицы измерения

Свойство `units` отображает единицы измерения поля. По умолчанию единицы измерения отображаются слева от поля. Используйте `unitsPosition='right'` для отображения единиц измерения в правой части поля.

```jsx example
const [value, setValue] = useState()
return (
  <NumberInput
    value={value}
    units='$'
    onChangeNumber={setValue}
  />
)
```

## Sandbox

<Sandbox
  Component={NumberInput}
  extraParams={{
    step: {
      step: 0.0001
    },
    value: {
      step: 0.0001
    }
  }}
  block
/>
