> ## Documentation Index
> Fetch the complete documentation index at: https://ziva.zeleza.ru/llms.txt
> Use this file to discover all available pages before exploring further.

# SingleSelectTask

> Выбор одного варианта со списками, подсказками и таймаутами

# SingleSelectTask

`SingleSelectTask` выводит список вариантов и позволяет выбрать ровно один пункт. Подходит для выбора окружения, профиля конфигурации, режима установки и т.д.

## Базовый пример

```go theme={null}
options := []string{
    "development::Среда разработки",
    "staging::Тестовая среда",
    "production::Боевая среда",
}

env := ziva.NewSingleSelectTask("Выбор среды", options)
```

<img src="https://mintcdn.com/terem/7tfdR1JkDhuUAiXc/images/pic_2.png?fit=max&auto=format&n=7tfdR1JkDhuUAiXc&q=85&s=fb22218f1d789964f0b43bce8f0358f2" alt="Скриншот: задача одиночного выбора" width="955" height="423" data-path="images/pic_2.png" />

Добавьте задачу в очередь и прочитайте результат после выполнения:

```go theme={null}
queue := ziva.NewQueue("Конфигурация")
queue.AddTasks(env)
_ = queue.Run()

fmt.Println("Выбрана среда:", env.GetSelected())
```

## Настройки

### Значение по умолчанию

```go theme={null}
env.WithDefaultItem("staging") // по строке
env.WithDefaultItem(2)          // по индексу (0-based)
```

### Таймаут

```go theme={null}
env.WithTimeout(15*time.Second, "production")
```

Если пользователь не успеет сделать выбор, задача завершится значением по умолчанию.

### Viewport и счётчики

```go theme={null}
env.WithViewport(5, true) // отображать по 5 элементов и счётчик «1/10»
```

Viewport полезен, если список длинный — пользователь может прокручивать его клавишами `↑`/`↓`/`j`/`k`.

### Отключение элементов

```go theme={null}
env.WithItemsDisabled([]string{"maintenance"}) // по значениям
env.WithItemsDisabled([]int{0, 3})              // по индексам
```

Отключенные пункты отображаются в списке, но выбрать их нельзя.

### Настройка подсказок

```go theme={null}
```

Разделитель применяется ко всем задачам выбора в приложении.

## Работа с результатом

```go theme={null}
value := env.GetSelected()      // строка
index := env.GetSelectedIndex() // индекс выбранного элемента
```

## Советы

* Поддерживайте список опций в актуальном состоянии до запуска очереди. После создания задачи менять `[]string` напрямую не нужно.
* Используйте подсказки, чтобы расшифровывать короткие коды (`prod`, `int`, `cli`).
* Если нужно предложить нестандартный пункт (например, «Другое»), добавьте отдельную `InputTask` после `SingleSelectTask` и показывайте её условно.
* Для динамических списков генерируйте массив перед созданием задачи; менять его во время работы очереди не получится.

## Связанные материалы

* [MultiSelectTask](/ru/components/multiselect-task)
* [YesNoTask](/ru/components/yesno-task)
