Interface: EditorUiApi
Главный API для управления пользовательским интерфейсом редактора.
Предоставляет доступ ко всем компонентам UI, включая панель инструментов, боковые панели, модальные окна, уведомления и контекстное меню.
Позволяет надстройкам и расширениям добавлять свои элементы управления и слои поверх основного рабочего пространства документа.
Remarks
Структура UI редактора:
┌─────────────────────────────────────────────────────┐
│ Панель инструментов (ribbon) │
├──────────────────────────────────────┬──────────────┤
│ Основное рабочее пространство │ Боковая │
│ (документ) │ панель │
│ + Графический слой (overlays) │ (sidebar) │
│ + Уведомления (toasts) │ справа │
│ + Контекстное меню │ │
│ + Модальные окна (modals) │ │
└──────────────────────────────────────┴──────────────┘
Компоненты EditorUiApi:
- ribbon — панель инструментов с кнопками и меню
- sidebar — боковые панели с вкладками
- toasts — всплывающие уведомления
- modals — модальные окна и диалоги
- contextMenu — контекстное меню (правый клик)
- updateUiNodes — методы обновления пользовательских элементов
Типичные сценарии использования:
- Добавление кнопок и вкладок в панель инструментов
- Создание боковых панелей для параметров надстройки
- Показ уведомлений о выполнении операций
- Открытие модальных окон для ввода данных
- Добавление пунктов в контекстное меню
- Динамическое обновление элементов UI
- Отображение результатов и статуса операций
Example
Использование разных компонентов EditorUiApi
// Добавить вкладку с кнопками в панель инструментов
editorApi.ui.ribbon.addTab({
id: 'plugin:tab',
title: 'My Plugin',
groups: [{
id: 'plugin:group',
type: 'controls',
controls: [{
id: 'plugin:button',
title: 'Do something',
type: 'button',
onClick: editorApi.createCallback(() => {
editorApi.ui.toasts.showToast({ id, content: 'Done!' });
})
}]
}]
});
// Добавить боковую панель
editorApi.ui.sidebar.addTab({
id: 'plugin:sidebar',
title: 'Settings',
content: [{
type: 'controls',
items: [{
id: 'plugin:info',
type: 'textblock',
content: 'Plugin is ready'
}]
}]
});
// Добавить пункт в контекстное меню
editorApi.ui.contextMenu.addItems([{
id: 'plugin:menu-item',
title: 'My action',
onClick: editorApi.createCallback(() => {
editorApi.ui.toasts.showToast({ id, content: 'Action executed' });
})
}]);
See
- RibbonApi — панель инструментов
- SidebarApi — боковые панели
- ToastsApi — уведомления
- ModalsApi — модальные окна
- ContextMenuApi — контекстное меню
Methods
updateUiNodes()
updateUiNodes(
updates,priority?):void
Метод для динамического обновления пользовательских элементов интерфейса.
Позволяет изменять свойства элементов UI (контент, состояние, видимость) после их создания.
Parameters
updates
Массив обновлений для элементов UI
priority?
Приоритет обработки (Normal по умолчанию, High для срочных обновлений)
Returns
void
Remarks
Типы обновлений:
- Изменение содержимого (content)
- Изменение состояния (disabled, error, checked)
- Изменение текста (title, placeholder, helperText)
- Изменение стилей (styles)
- Изменение видимости (visible)
Работает только с элементами надстройки:
- Запросы на встроенные элементы редактора игнорируются
- ID элемента должен содержать префикс надстройки
- Контейнер должен содержать такой элемент
Приоритеты:
Normal(default) — обновление выполняется в очередиHigh— срочное обновление, выполняется как можно скорее
Throws
Может выбросить ошибку если элемент не найден (в некоторых случаях)
Example
Обновление содержимого элемента
editorApi.ui.updateUiNodes([
{
id: 'plugin:info',
content: 'Новое содержимое'
}
]);
Обновление нескольких полей состояния (error, helperText)
editorApi.ui.updateUiNodes([
{
id: 'plugin:input',
error: true,
helperText: 'Ошибка валидации'
}
]);
Обновление с высоким приоритетом
editorApi.ui.updateUiNodes(
[
{
id: 'plugin:status',
content: 'Критическая ошибка!'
}
],
Priority.High // Срочное обновление
);
Обновление сразу нескольких элементов
const updates: UINodeUpdate[] = [
{
id: 'plugin:input-email',
error: false,
helperText: ''
},
{
id: 'plugin:input-password',
error: false,
helperText: ''
},
{
id: 'plugin:button-submit',
disabled: false
}
];
editorApi.ui.updateUiNodes(updates);
Обновление при изменении состояния (real-time валидация)
// В обработчике onInput для текстового поля
onInput: editorApi.createCallback((value: string) => {
const isValid = value.length >= 8;
editorApi.ui.updateUiNodes([
{
id: 'plugin:password',
error: !isValid,
helperText: isValid
? 'Пароль хороший'
: `Ещё ${8 - value.length} символов`
},
{
id: 'plugin:submit-btn',
disabled: !isValid
}
]);
})
See
- UINodeUpdate — структура обновления элемента
- Priority — типы приоритетов
- RibbonApi — для управления элементами панели инструментов
- SidebarApi — для управления элементами боковой панели
Properties
contextMenu
readonlycontextMenu:ContextMenuApi
API управления контекстным меню (правый клик).
Позволяет добавлять пользовательские пункты в контекстное меню, которое появляется при клике правой кнопкой мыши на документе.
Remarks
Характеристики:
- Появляется при клике правой кнопкой мыши
- Размещает кастомные пункты ниже стандартных
- Поддерживает условную видимость (shownInScopes)
- Поддерживает группировку пунктов
- Может содержать вложенные подменю
Типичные пункты:
- Быстрые действия (Copy, Paste, Delete)
- Трансформация текста (Uppercase, Lowercase)
- Специальные операции (Export, Analyze)
- Настройки объекта
Лучшие практики:
- Ограничивайте количество пунктов (максимум 5-7)
- Группируйте связанные пункты
- Используйте условную видимость
- Не дублируйте стандартные операции
See
ContextMenuApi — полное описание API
Example
editorApi.ui.contextMenu.addItems([
{
id: 'plugin:action',
title: 'Мое действие',
shownInScopes: [{ scope: 'text' }],
onClick: editorApi.createCallback(() => {})
}
]);
modals
readonlymodals:ModalsApi
API управления модальными окнами (диалогами).
Позволяет открывать и управлять модальными окнами для ввода данных, подтверждения действий и отображения информации.
Remarks
Типы модальных окон:
- Диалоги подтверждения (OK / Cancel)
- Формы ввода данных
- Оповещения и предупреждения
- Окна информации и справки
Характеристики:
- Блокируют взаимодействие с остальным интерфейсом
- Отображаются в центре экрана
- Требуют действия пользователя (выбор кнопки)
- Могут содержать сложные формы
Использование:
- Подтверждение опасных операций (Delete, Clear)
- Ввод данных (Search, Settings)
- Важные сообщения
- Выбор из вариантов
Лучшие практики:
- Используйте для важных решений
- Не перегружайте содержимое
- Предоставляйте понятные опции (OK, Cancel, Apply)
- Выделяйте опасные действия (Delete красным)
See
ModalsApi — полное описание API
Example
editorApi.ui.modals.showModal({
title: 'Подтверждение',
content: 'Вы уверены?',
buttons: [
{ title: 'OK', variant: 'primary' },
{ title: 'Cancel', variant: 'secondary' }
]
});
ribbon
readonlyribbon:RibbonApi
API управления верхней панелью инструментов.
Позволяет добавлять и управлять вкладками, группами и элементами управления в верхней панели инструментов редактора.
Remarks
Возможности:
- Создание пользовательских вкладок
- Добавление кнопок, выпадающих меню, селекторов
- Организация элементов в группы
- Управление порядком и видимостью элементов
Типичные элементы панели инструментов:
- Кнопки действий (Save, Copy, Paste)
- Выпадающие меню (Format, Export)
- Селекторы (Font Size, Style)
- Индикаторы статуса
Лучшие практики:
- Ограничивайте количество вкладок (максимум 3-5)
- Группируйте связанные элементы
- Используйте понятные иконки
See
RibbonApi — полное описание API
Example
editorApi.ui.ribbon.addTab({
id: 'plugin:tab',
title: 'My Plugin',
order: 10,
groups: [{
id: 'plugin:group',
type: 'controls',
controls: [
{
id: 'plugin:button',
title: 'Action',
type: 'button',
onClick: editorApi.createCallback(() => {})
}
]
}]
});
sidebar
readonlysidebar:SidebarApi
API управления боковыми панелями с вкладками.
Позволяет создавать и управлять боковыми панелями, которые отображаются слева или справа от основного рабочего пространства.
Remarks
Возможности:
- Создание пользовательских панелей
- Добавление вкладок на панели
- Размещение элементов управления и контента
- Управление позицией и размером панели
- Поддержка прокрутки и динамического контента
Типичный контент:
- Параметры надстройки (Settings)
- Информационные панели (Info, Help)
- Навигационные панели (Outline, Navigation)
- Результаты операций (Results, Output)
- Формы ввода данных
Лучшие практики:
- Используйте для параметров и настроек
- Отображайте информацию и результаты
- Группируйте элементы логически
- Предусмотрите скролл для длинного контента
See
SidebarApi — полное описание API
Example
editorApi.ui.sidebar.addTab({
id: 'plugin:panel',
title: 'Settings',
icon: 'Settings',
content: [{
type: 'controls',
items: [
{
id: 'plugin:input',
type: 'input',
title: 'Parameter',
placeholder: 'Enter value'
}
]
}]
});
toasts
readonlytoasts:ToastsApi
API управления всплывающими уведомлениями (toast notifications).
Позволяет показывать короткие информационные, предупредительные и ошибочные сообщения пользователю.
Remarks
Типы уведомлений:
- не указан - нейтральный, без иконки
error— красные, для ошибок
Характеристики:
- Появляются в углу экрана (обычно внизу справа)
- Автоматически исчезают через несколько секунд
- Не блокируют работу пользователя
- Стекируются если несколько сообщений
Использование:
- Подтверждение операций
- Уведомления об ошибках
- Информирование о статусе
- Подсказки пользователю
Лучшие практики:
- Используйте краткие сообщения (до 100 символов)
- Не показывайте много сообщений одновременно
- Предложите решение для ошибок
See
ToastsApi — полное описание API
Example
editorApi.ui.toasts.showToast({ id, content: 'Успешно сохранено' });
editorApi.ui.toasts.showToast({ id, type: 'error', content: 'Ошибка при сохранении' });