← Назад к Wiki
Посібник розробника

Посібник з розробки віджетів та UI налаштувань

Посібник з розробки віджетів

🇬🇧 English version

1. Сітка дашборда

UI Core будує дашборд як CSS grid. Розміри з manifest.json:

sizeШиринаВисотаЗастосування
1x11 колонка1 рядокПростий індикатор
2x12 колонки1 рядокКомпактний статус
2x22 колонки2 рядкиПовноцінний віджет з графіком
4x1вся ширина1 рядокГоризонтальна панель

2. Ключове правило: віджет живе в iframe

  • Немає 100vh — використовуйте width/height: 100%
  • Немає скролу — scrolling="no" заданий батьком
  • Немає доступу до parent DOM
  • Немає alert/confirm/prompt

3. Обов'язковий CSS-шаблон

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body { width: 100%; height: 100%; overflow: hidden; }
.root { width: 100%; height: 100%; display: flex; flex-direction: column; padding: 14px 16px; gap: 10px; overflow: hidden; }

4. BASE URL

const BASE = window.location.pathname
  .replace(/\/(widget|settings)(\.html)?(\?.*)?$/, '');

5. Адаптивні макети

Використовуйте checkLayout() для визначення компактного режиму при height < 160px.

6. Отримання даних

const data = await fetch(BASE + '/status').then(r => r.json());
setInterval(load, 30_000);

7. Core API з віджета

UI token (read-only, TTL 1 год) передається через query параметр ?ui_token=....

8. Realtime: SSE

const es = new EventSource(BASE + '/events/stream');
es.addEventListener('state_changed', (e) => updateUI(JSON.parse(e.data)));

9. settings.html

Показується в прокручуваному модальному вікні. Зберігання через API модуля, не localStorage.

Чеклист

  • html, body: width/height 100%, overflow hidden
  • Немає 100vh, немає position: fixed
  • BASE обчислюється з pathname
  • Є обробка помилок на всіх fetch
  • Автооновлення через setInterval або SSE
  • Компактний режим при height < 160px
Посібник з розробки віджетів та UI налаштувань | Wiki · Selena Home AI