- The page takes the screens' words its mockup draws from their own texts: screen.ha (Home Assistant's words, filled
from Home Assistant), screen.time, screen.date, screen.number and screen.tile.page, per language next to _meta and
editor. The copies under editor.mockup go; the rest of `screen` and all of `addon` stay out of the build.
- Numbers in the mockup follow the screens' language (screen.number, with its minimum grouping) or the chosen style,
as the firmware writes them.
- @intlify/unplugin-vue-i18n compiles every text at build time, so the page runs vue-i18n's runtime-only build
without the message compiler; every language's _meta comes with the page. Empty texts stay out while building.
- The live updates carry the editor's language (api/events?language=), as an EventSource sends no headers.
- web/ needs Node 22.13 or newer: vue-i18n 11.4, Vite 7 and the unplugin ask for it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- vue-i18n 11 with the Composition API: English comes with the page, any other language loads the first time it is
needed from screen_manager/translations, and a text a language lacks shows in English. The build keeps only _meta
and editor of each file (vite.config.ts), never the screens' or the add-on's texts.
- The editor follows the language of the user's Home Assistant profile (<html lang> of Home Assistant's page), else
the browser's; plural forms follow the file's _meta.plural, with the screens' rules.
- Every request tells the add-on the editor's language (X-ESP-Screens-Language), so its own words can follow it.
- The mockup draws the screens' words (Unavailable, Page 2 ›, the date, "5 min ago") in the screens' language, with
their clock and number format.
- Settings → Language & region: the screen language, time format and number format for every screen, with the user's
own profile offered when it differs. The per-screen clock choice goes; the top bar points there. A screen that
still needs the new language says so in its update badge.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The page is now web/ (Vue 3 + Vite + TypeScript), built into screen_manager/app/static
with hashed file names; server.py serves index.html as built and /assets/. The Python
API, the data and the firmware are unchanged. Your screens sit in a sidebar, the pages
of a screen stand next to each other at the screen's own shape, the library sits on the
right, and a tile's settings slide in as a drawer while the mockup stays in view. New
screen, Firmware & USB, Alerts, Override YAML and Settings are pages of their own.
Fonts moved to web/src/assets; the tests read the source through tests/editor_sources.py.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>