# @cloud-ru/ds-timeline
> Пакет таймлайна — вертикальная цепочка событий с маркерами, соединительными линиями и опциональным контентом в противоположной колонке.
Docs: /snack-v2/components/timeline/
## Установка
```sh
pnpm add @cloud-ru/ds-timeline
```
## API
### Timeline
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `alternate` | `boolean` | — | no | Перемешать положение контента |
| `className` | `string` | — | no | CSS-класс для элемента с контентом |
| `contentPosition` | `left \| right` | `right` | no | Положение контента |
| `data-test-id` | `string` | — | no | |
| `fullWidth` | `boolean` | — | no | Сделать таймлайн во всю ширину |
| `items` | `TimelineItem[]` | — | yes | Пункты таймлайна |
#### Related types
- `ContentPosition` = `left | right`
- `TimelineItem` (interface)
- `TrackItemProps` (interface)
- `TrackProps` (interface)
### Track
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `dotAppearance` | `blue \| green \| neutral \| orange \| pink \| primary \| red \| violet \| yellow` | — | no | Семантический цвет маркера |
| `dotVariant` | `default \| subEvent` | `default` | no | Вид маркера |
| `lineStyle` | `dashed \| solid` | — | no | Стиль нижней линии |
| `position` | `center \| end \| start` | — | yes | Положение элемента в ленте: первый, промежуточный или последний |
| `showLines` | `boolean` | `true` | no | Показывать вертикальные сегменты |
#### Related types
- `Appearance` = `blue | green | neutral | orange | pink | primary | red | violet | yellow`
- `Position` = `center | end | start`
- `Style` = `dashed | solid`
- `TrackDotProps` (interface)
- `TrackLineProps` (interface)
- `Variant` = `default | subEvent`
### TrackDot
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `appearance` | `blue \| green \| neutral \| orange \| pink \| primary \| red \| violet \| yellow` | `neutral` | no | Семантический цвет маркера |
| `variant` | `default \| subEvent` | `default` | no | Вид маркера |
### TrackItem
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `alternateMode` | `boolean` | — | no | Перемешать положение контента |
| `content` | `ReactNode` | — | yes | Контент |
| `contentPosition` | `left \| right` | `right` | no | Положение контента |
| `data-test-id` | `string` | — | no | Стабильный идентификатор для e2e/tests |
| `dotAppearance` | `blue \| green \| neutral \| orange \| pink \| primary \| red \| violet \| yellow` | — | no | Семантический цвет маркера |
| `dotVariant` | `default \| subEvent` | — | no | Вид маркера |
| `key` | `string` | — | no | Уникальный ключ |
| `lineStyle` | `dashed \| solid` | — | no | Стиль нижней линии |
| `opposite` | `ReactNode` | — | no | Контент в противоположной колонке |
| `position` | `center \| end \| start` | — | yes | Положение элемента в ленте: первый, промежуточный или последний |
| `showLines` | `boolean` | — | no | Показывать вертикальные сегменты |
#### Related types
- `ContentPosition` = `left | right`
- `Position` = `center | end | start`
- `TrackDotProps` (interface)
- `TrackLineProps` (interface)
- `TrackProps` (interface)
### TrackLine
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `style` | `dashed \| solid` | `solid` | no | |
## Примеры
### Alternate
```tsx
import { Timeline } from '@cloud-ru/ds-timeline';
const items = [
{ content: 'Создано', opposite: '10:00' },
{ content: 'Назначено', opposite: '10:10' },
{ content: 'Завершено', opposite: '10:30', dotAppearance: 'green' as const },
];
export function Alternate() {
return ;
}
```
### Basic
```tsx
import { Timeline } from '@cloud-ru/ds-timeline';
const items = [
{ content: 'Заявка создана' },
{ content: 'Передана в работу' },
{ content: 'В обработке' },
{ content: 'Выполнено' },
];
export function Basic() {
return ;
}
```
### WithOpposite
```tsx
import { Timeline } from '@cloud-ru/ds-timeline';
const items = [
{ content: 'Заявка создана', opposite: '10:00' },
{ content: 'Обработка', opposite: '10:15' },
{ content: 'Выполнено', opposite: '10:40', dotAppearance: 'green' as const },
];
export function WithOpposite() {
return ;
}
```