1d0bafaabb
- #6 align the UI variant id to the backend canonical 'russian_scrabble' (type, variants, Lobby, mock, tests) — fixes the New->Russian 400 - #11/#12 inside Telegram force the colour scheme from WebApp.colorScheme (over OS prefers-color-scheme, fixing the Telegram Desktop breakage) and hide the theme switcher - #14/#15 nav bar takes Telegram's bg; announcement banner gets a dedicated subtle --ad-bg accent token - #16 suppress the reconnect banner while backgrounded and silently reconnect the live stream on return to the foreground - #17 hint zoom scrolls to the placement's bounding box, not the top-left - #19/#20 players plaque: active seat raised with side shadows, others sunk; tap toggles history - #21/#23 history: scrollbar-gutter:stable (no word jitter); fixed-height drawer pins the bottom shadow to the board - #3 (UI) disable nudge on the player's own turn - #18a directional screen slide transitions (forward in from the right, back reveals the lobby) - #13 per-game in-memory cache: instant render on re-entry + background refresh - e2e: openGame waits for the slide transition to settle
33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
// Game variants offered on New Game, and the Stage 15 gating of that choice by the
|
|
// languages the sign-in service supports. Kept out of the .svelte screen so the
|
|
// gating is unit-testable (the project's node-env Vitest layer).
|
|
|
|
import type { MessageKey } from './i18n/index.svelte';
|
|
import type { Variant } from './model';
|
|
|
|
// VariantOption is a selectable game variant with its i18n label key.
|
|
export interface VariantOption {
|
|
id: Variant;
|
|
label: MessageKey;
|
|
}
|
|
|
|
// ALL_VARIANTS lists every variant in display order.
|
|
export const ALL_VARIANTS: VariantOption[] = [
|
|
{ id: 'english', label: 'new.english' },
|
|
{ id: 'russian_scrabble', label: 'new.russian' },
|
|
{ id: 'erudit', label: 'new.erudit' },
|
|
];
|
|
|
|
// VARIANT_LANGUAGE maps each variant to its game language. en -> English;
|
|
// ru -> Russian + Эрудит.
|
|
export const VARIANT_LANGUAGE: Record<Variant, 'en' | 'ru'> = { english: 'en', russian_scrabble: 'ru', erudit: 'ru' };
|
|
|
|
// availableVariants gates ALL_VARIANTS by the session's supported languages. An empty
|
|
// or absent set is ungated (a web/legacy session without a declared set), returning
|
|
// every variant.
|
|
export function availableVariants(supportedLanguages: string[] | undefined): VariantOption[] {
|
|
const langs = supportedLanguages ?? [];
|
|
if (langs.length === 0) return ALL_VARIANTS;
|
|
return ALL_VARIANTS.filter((v) => langs.includes(VARIANT_LANGUAGE[v.id]));
|
|
}
|