feat(ui): lobby site-style sidebar + profile screen (#47)

- Wrap lobby and profile in a shared `lobby-shell.svelte` chrome:
  page-list sidebar (Overview/Profile) and a top "Player-xxxx"
  identity strip mirroring the project site's monospace look.
- Strip the legacy `lobby.title`, device-session-id `<code>`, and
  `lobby.greeting` paragraph; the identity strip both names the user
  and opens the profile editor.
- Add a top-level `profile` AppScreen with a three-field form
  (`display_name`, `preferred_language`, `time_zone`) backed by a new
  `src/api/account.ts` wrapper around `user.account.get`,
  `user.profile.update`, and `user.settings.update`. Saving switches
  the active i18n locale in-place when the new preferred language is
  one the UI ships translations for.
- Update e2e fixture + auth-flow / lobby-flow specs to use the new
  `lobby-account-name` testid and wait for the loaded identity before
  releasing pending `SubscribeEvents` (webkit revocation race). New
  `profile-screen.spec.ts` covers navigation, edit-save, and cancel.
- Sync `ui/docs/lobby.md` and `ui/docs/navigation.md` to the new
  layout.

Closes #47
This commit is contained in:
Ilia Denisov
2026-05-26 13:42:10 +02:00
parent b03993fcb1
commit 2ecdecad1e
15 changed files with 1122 additions and 132 deletions
+6 -3
View File
@@ -215,6 +215,9 @@ export interface AccountFixture {
email: string;
userName: string;
displayName: string;
preferredLanguage?: string;
timeZone?: string;
declaredCountry?: string;
}
export function buildAccountResponsePayload(account: AccountFixture): Uint8Array {
@@ -237,9 +240,9 @@ export function buildAccountResponsePayload(account: AccountFixture): Uint8Array
const email = builder.createString(account.email);
const userName = builder.createString(account.userName);
const displayName = builder.createString(account.displayName);
const preferredLanguage = builder.createString("en");
const timeZone = builder.createString("UTC");
const declaredCountry = builder.createString("");
const preferredLanguage = builder.createString(account.preferredLanguage ?? "en");
const timeZone = builder.createString(account.timeZone ?? "UTC");
const declaredCountry = builder.createString(account.declaredCountry ?? "");
AccountView.startAccountView(builder);
AccountView.addUserId(builder, userId);
AccountView.addEmail(builder, email);