# Окно и ввод — `api.window` Группа `api.window` управляет окном приложения, плавающим полем ввода и списком выбора. ## Окно | Метод | Описание | | --- | --- | | `api.window:close()` | Закрыть окно | | `api.window:toggle_maximize()` | Развернуть окно / вернуть прежний размер | | `api.window:set_maximized(true/false)` | Развернуть (`true`) или восстановить (`false`) окно | | `api.window:minimize()` | Свернуть окно | | `api.window:is_maximized()` | Развёрнуто ли окно прямо сейчас | Команды окна не выполняются в момент вызова из Lua: они складываются в очередь и применяются видом в начале следующего кадра. ## Плавающее поле ввода `api.window:open_input(options)` открывает однострочное поле ввода чуть выше центра окна. Параметры передаются таблицей: | Поле | Описание | | --- | --- | | `title` | Текст над полем; если не задан, окно состоит из одной строки ввода | | `placeholder` | Подсказка внутри пустого поля ввода | | `callback` | `function(text)` — вызывается после Enter, когда окно уже закрыто | Пока окно открыто, сочетания клавиш приложения не работают. Текст набирается в поле; `Enter` подтверждает ввод и запускает `callback`, `Esc` и клик мышью вне окна закрывают его без вызова колбэка. ```lua api.window:open_input({ title = "Имя файла", placeholder = "src/main.rs", callback = function(text) api.editor:open(text, {}) end, }) ``` ## Плавающий список выбора `api.window:open_select(options)` открывает список выбора чуть выше центра окна. Параметры передаются таблицей: | Поле | Описание | | --- | --- | | `items` | Непустой массив пунктов (см. ниже) | | `selected` | id пункта, выделенного при открытии; если не задан или не найден — первый пункт | | `title` | Текст над списком; отделяется горизонтальной чертой, без заголовка черты нет | | `callback` | `function(id)` — вызывается после Enter, когда окно уже закрыто; получает id выбранного пункта | Каждый пункт — таблица с полями: | Поле | Описание | | --- | --- | | `label` | Отображаемое значение (обязательно) | | `id` | Строка, которая вернётся в `callback` (обязательно) | | `icon` | Имя иконки Lucide, например `"file"`; пустое или неизвестное имя — пункт без иконки | | `description` | Серое описание справа от названия; обрезается троеточием, название имеет приоритет | Каждый пункт занимает одну строку. Если иконка есть хотя бы у одного пункта, у остальных остаётся пустое место такой же ширины, чтобы названия начинались на одном уровне. Пока список открыт, сочетания клавиш приложения не работают: стрелки меняют выделение, `Home`/`End` прыгают к краям, `Enter` подтверждает выбор и вызывает `callback` с id пункта, клик по пункту выбирает и подтверждает его, а `Esc` и клик вне окна закрывают список без колбэка. ```lua api.window:open_select({ title = "Режим", selected = "release", items = { { id = "debug", label = "Debug", icon = "file", description = "с отладкой" }, { id = "release", label = "Release", icon = "folder" }, }, callback = function(id) api.editor:set_active_text(id) end, }) ```