Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: create Stepper component #2098

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
227 changes: 227 additions & 0 deletions src/components/Stepper/README-ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
<!--GITHUB_BLOCK-->

# Stepper

<!--/GITHUB_BLOCK-->

```tsx
import {Stepper} from '@gravity-ui/uikit';
```

`Stepper` - это компонент, который отображает прогресс при помощи последовательности пронумерованных шагов. Компонент обеспечивает возможность использования wizard-like процессов работы.

## Example

<!--GITHUB_BLOCK-->

```jsx
<Stepper>
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item>Step 2</Stepper.Item>
<Stepper.Item>Step 3</Stepper.Item>
<Stepper.Item>Step 4 with very long title</Stepper.Item>
</Stepper>
```

<!-- Storybook example -->

<StepperDefault />

<!--/GITHUB_BLOCK-->

### Interactive items

Используйте `onUpdate` и `value` параметры вместе с кастомным состоянием для управления шагами

<!--GITHUB_BLOCK-->

```jsx
const [value, setValue] = React.useState();

return (
<Stepper value={value} onUpdate={setValue}>
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item>Step 2</Stepper.Item>
<Stepper.Item>Step 3</Stepper.Item>
<Stepper.Item>Step 4 with very long title</Stepper.Item>
</Stepper>
);
```

<!-- Storybook example -->

<StepperInteractiveShowcase />

<!--/GITHUB_BLOCK-->

### Different views

<!--GITHUB_BLOCK-->

```jsx
<Stepper>
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item view="error">Step 2</Stepper.Item>
<Stepper.Item view="error">Step 3</Stepper.Item>
<Stepper.Item view="success">Step 4</Stepper.Item>
</Stepper>
```

<!-- Storybook example -->

<StepperView/>

<!--/GITHUB_BLOCK-->

### Different sizes

<!--GITHUB_BLOCK-->

```jsx
<Flex direction="column" gap={4}>
<Stepper {...args} size="s">
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item>Step 2</Stepper.Item>
<Stepper.Item>Step 3</Stepper.Item>
</Stepper>

<Stepper {...args} size="m">
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item>Step 2</Stepper.Item>
<Stepper.Item>Step 3</Stepper.Item>
</Stepper>

<Stepper {...args} size="l">
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item>Step 2</Stepper.Item>
<Stepper.Item>Step 3</Stepper.Item>
</Stepper>
</Flex>
```

<!-- Storybook example -->

<StepperSize/>

<!--/GITHUB_BLOCK-->

### Disabled steps

<!--GITHUB_BLOCK-->

```jsx
<Stepper>
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item disabled>Step 2</Stepper.Item>
<Stepper.Item disabled>Step 3</Stepper.Item>
<Stepper.Item disabled>Step 4 with very long title</Stepper.Item>
</Stepper>
```

<!-- Storybook example -->

<StepperDisabled/>

<!--/GITHUB_BLOCK-->

### Custom icons

<!--GITHUB_BLOCK-->

```jsx
<Stepper>
<Stepper.Item icon={<Icon data={Rocket} />}>Step 1</Stepper.Item>
<Stepper.Item view="error" icon={<Icon data={CreditCard} />}>
Step 2
</Stepper.Item>
<Stepper.Item view="success" icon={<Icon data={Cloud} />}>
Step 3
</Stepper.Item>
<Stepper.Item>Step 4 with very long title</Stepper.Item>
</Stepper>
```

<!-- Storybook example -->

<StepperCustomIcons/>

<!--/GITHUB_BLOCK-->

### Custom step separator

<!--GITHUB_BLOCK-->

```jsx
const Separator = () => {
return <Text color="secondary">{'->'}</Text>;
};

<Stepper {...args} separator={<Separator />}>
<Stepper.Item>Step 1</Stepper.Item>
<Stepper.Item view="error">Step 2</Stepper.Item>
<Stepper.Item view="success">Step 3</Stepper.Item>
<Stepper.Item>Step 4 with very long title</Stepper.Item>
</Stepper>;
```

<!-- Storybook example -->

<StepperCustomSeparator/>

<!--/GITHUB_BLOCK-->

### Step with floating element

<!--GITHUB_BLOCK-->

```jsx
<Stepper {...args} separator={<Separator />}>
<Tooltip content="fancy step with tooltip">
<Stepper.Item>Step 1</Stepper.Item>
</Tooltip>
<Stepper.Item view="error">Step 2</Stepper.Item>
<Stepper.Item view="success">Step 3</Stepper.Item>
<Stepper.Item>Step 4 with very long title</Stepper.Item>
</Stepper>
```

<!-- Storybook example -->

<StepperWithFloatingElements/>

<!--/GITHUB_BLOCK-->

## Properties

| Name | Description | Type | Default |
| :--------------- | :---------------------------------------------------------------------------------- | :------------------------------------- | :------ |
| children | Дочерние элементы степера. | `React.ReactElement<StepperItemProps>` | |
| size | Задает размер степа. | `"s"` `"m"` `"l"` | `"s"` |
| value | Текущий выбранный идентификатор степа. | `number` `string` | |
| onUpdate | Функция для обновления текущего выбранного элемента. | `Function` | |
| qa | `data-qa` HTML атрибут, используется для тестирования. | `string` | |
| separator | Кастомная нода-разделитель степов. | `React.ReactNode` | |
| className | CSS имя класса Step контейнера. | `string` | |
| style | Задает инлайн-стили Step контейнера. | `CSSProperties` | |
| aria-label | Определяет строковое значение, используемое в качестве метки для текущего элемента. | `string` | |
| aria-labelledby | Определяет элементы, используемые в качестве метки для текущего элемента. | `string` | |
| aria-describedby | Определяет элементы, описывающие объект. | `string` | |

### StepperItemProps

| Name | Description | Type | Default |
| :-------- | :----------------------------------------------------------------------- | :----------------------------- | :------- |
| id | Идентификатора степа. Если не передан, берется значения индекса массива. | `string` `number` | |
| view | Внешний вид степа. | `"idle"` `"error"` `"success"` | `"idle"` |
| children | Внутреннее содержимое степа. | `React.Node` | |
| disabled | Устанавливает заблокированное состояние для степа. | `boolean` | |
| icon | Задает кастомную иконка степа | `SVGIconData` | |
| onClick | Обработчик клика на степ | `React.MouseEventHandler` | |
| className | CSS class name элемента | `string` | |

### CSS API

| Name | Description |
| :-------------------------------- | :--------------------------------------------- |
| `--g-stepper-gap` | Расстояние между степами и разделителем. |
| `--g-stepper-item-text-max-width` | Максимальная ширина текстового контента степа. |
Loading
Loading