Donutgramплагины
На этой страницеAPI ui

Нативные страницы

Стройте интерфейс из описания узлов, callback ID и ресурсов пакета.

API ui

Страница плагина — нативный интерфейс, описанный JSON-совместимыми узлами. Для неё объявите ui.contribute / settings.

Первая страница

const clicked = api.ui.callback(async () => {
  await api.ui.toast("Готово");
});

await api.ui.render({
  id: "tools",
  title: "Инструменты",
  nodes: [
    { id: "intro", type: "text", text: "Выберите действие" },
    { id: "run", type: "button", title: "Проверить", callbackId: clicked.id }
  ]
});

Типы узлов

Тип Основные поля
section, list children
text, markdown text, необязательный title
button title, callbackId
toggle title, boolean value, callbackId
input, multiline title, строковый value, callbackId
select options, выбранный value, callbackId
slider, stepper minimum, maximum, step, value, callbackId
image asset от api.assets.image

Переключатель

const changed = api.ui.callback(async value => {
  const current = await api.settings.get();
  await api.settings.set({ ...current, enabled: value });
});

const toggle = {
  id: "enabled",
  type: "toggle",
  title: "Включить замену",
  value: true,
  callbackId: changed.id
};

Поле enabled должно быть объявлено в settingsSchema, если callback сохраняет его через settings API.

Значения select и чисел

У select до 32 вариантов { title, value }; value — строка, число, boolean или null и должен совпадать с одним вариантом. Для slider/stepper обязательны конечные согласованные границы, положительный шаг и выровненное значение.

Лимиты

До 128 узлов, глубина 0–6 и 64 КиБ JSON на страницу. id уникальны во всём дереве. Заголовок — до 200 UTF-16 единиц, текст и значение input — до 4096.

Время жизни

Повторный render того же page ID заменяет содержимое. Закрытая или устаревшая страница не вызывает прежние callbacks. При остановке runtime её ресурсы освобождаются.

await api.ui.dispose({ id: "tools" });
clicked.dispose();

Проверка перед запуском

python tools/dgplugin.py validate-ui page.json

Markdown поддерживает ограниченный набор оформления и списки. Произвольные HTML, CSS, WebView, внешние картинки и исполняемые ссылки не вставляются в нативную страницу.