Обои с зарядом
Заставка с текущим состоянием под точное разрешение вашего экрана. Открывается с вкладки «Заряд».

Зачем это
Системного виджета у мини-приложения быть не может — см. «Только в Telegram». Обои закрывают ту же потребность единственным доступным способом: состояние видно, не открывая приложение.
Это не автоматика. Картинку надо пересобирать руками, когда состояние изменилось, — и в этом её честность: обои показывают то, что вы про себя отметили, а не то, что приложение угадало.
Что в шторке
- Превью — картинка готовится заранее и целиком, ещё до того, как вы нажмёте «Сохранить».
- Четыре уровня — можно сделать обои не для текущего состояния, а для любого: например, заранее подготовить все четыре.
- Размер экрана. Первым идёт «Мой экран» — точное разрешение устройства, на котором вы открыли приложение. Дальше готовые размеры: iPhone Pro/Max, Android, iPad, рабочий стол.
- «Сохранить обои» — заблокирована, пока картинка не готова.
Как сохраняется
Три способа подряд, до первого сработавшего:
- Системное «Поделиться». Единственный надёжный путь в «Фото» на iOS.
- Обычное скачивание ссылкой. Внутри Telegram эта ступень пропускается целиком: в его вебвью атрибут
downloadприсутствует, но нажатие ни к чему не приводит — файл не сохраняется, и ошибки при этом нет. - Вручную. Картинка разворачивается на весь экран с подсказкой «нажмите и удерживайте, затем выберите „Сохранить в Фото“».

Отмена системного меню «Поделиться» считается успехом: вы передумали, а не сломали.
Пределы и предупреждения
- Обои не обновляются сами. Сменили состояние — пересоберите картинку.
- Надписи на картинке (
HIGH,MEDIUM,LOW,CHARGING) — английские намеренно: это часть оформления из референсов, а не текст интерфейса, и переводу не подлежит. - «Мой экран» берёт размер вебвью Telegram, а не физического экрана. Обычно они совпадают, но на планшете в разделённом окне — нет.
- Сохранение выдаёт достижение «Обои на экране».
Рядом
Заряд · Только в Telegram · Копия данных
Как это работает внутри
- Рендер —
src/wallpaper/render.tsна canvas; геометрия батареи берётся изBATTERY_GEOMETRYвsrc/components/BatteryIcon.tsx, то есть картинка и иконка в интерфейсе — одна и та же фигура, а не две похожие. - Сохранение —
saveFileвsrc/wallpaper/save.ts; та же лестница используется для копии данных, но там есть ещё одна ступень — буфер обмена. - Blob готовится в эффекте, а не по нажатию: Safari аннулирует пользовательский жест после
await, иnavigator.share, вызванный позже, уже не откроется. AbortErrorотnavigator.shareтрактуется как успех.- Шторка пересоздаётся при каждом открытии (
key={initialLevel}), иначе она помнила бы прошлый выбор уровня, хотя заряд с тех пор мог смениться. - Размеры —
deviceSize()иsizePresets()вsave.ts; первый используетdevicePixelRatio.