Быстрый старт
Минимальный шаблон
Любой кастомный виджет должен быть ровно в таком виде:
function Widget() {
const { fill } = useParams({
fill: { type: "colorGradient", default: "#ffffff" },
});
return (
<div style={{ width: "100%", height: "100%" }}>
<div style={{ width: "100%", height: "100%", background: fill }} />
</div>
);
}
Если код прошёл компиляцию, появится превью в редакторе, и блок станет доступен в местах размещения блоков.
![Рабочий минимум виджета и превью] []
Как создать виджет
- Откройте редактор кастомных виджетов из раздела виджетов/библиотеки.
- Создайте новый виджет и укажите уникальное имя.
- Вставьте код
Widget(). - Сохраните — при ошибке в консоли появится диагностика compile/runtime.
- Добавьте виджет на страницу и проверьте рендер в режиме редактора.
Базовые правила по отладке
- Используйте консольный лог только через
debug(...)— это специальная capability, которая безопасно пишет лог в журнал виджета. - Для проверки компиляции смотрите ошибки в панели code-log/логах (коды
INVALID_PROGRAM_SHAPE,FORBIDDEN...и т.д.). - Если блок не появился после сохранения, проверьте:
- единственная ли функция
Widget()без параметров; - нет ли
var; - нет ли запрещённых JSX-атрибутов (
onClick,styleс неподдерживаемыми полями и др.).
- единственная ли функция
- Не полагайтесь на мгновенную загрузку шрифта для
textToPath: рендер может пройтися в 1-й проходе сready=false.
Что обычно делают потом
- добавляют параметры (
useParams): размеры, отступы, stroke, mode-переключатели; - выносят тяжёлые расчёты в
useBlockMemo; - добавляют
editable="text"илиuseControlPoints()для интерактивного редактирования; - оптимизируют параметры под удобство панели свойств.
![Базовый жизненный цикл виджета: код → тест → сохранение → размещение] []
Рекомендуемый порядок развития виджета
- Сначала логика параметров — просто корректное
useParams+ базовый рендер. - Потом вычисления — вынесите повторяемые вычисления в
useBlockMemo. - Потом UX редактирования — editable-текст, кнопки, переключатели.
- Потом устойчивость — проверки на пустые значения, fallback-ветки, лимиты.