cbf7f65916
Owner review on PR #61: - п.9 (option B). Hide the native spinner on EVERY numeric input in the calculator (DWSC blocks, armament, tech, planet MAT, custom load, lock value, modernization target tech) and drive every step through ArrowUp / ArrowDown. The column widths stay stable and the inputs read consistently across the whole row. The ship blocks keep the smart (0 ↔ 1) jump on ArrowUp/ArrowDown; armament steps ±1 with a JS handler instead of relying on the native spinner. Other inputs step by their natural grain (±0.001 for tech / lock, ±0.01 for MAT / load). - п.10. Tech-level labels (`tech-val`) and the planet MAT label (`mat-val`) now read through the same `Ceil3` formatter as the derived results, so plain-text numeric values share the report's 3-decimal tabular formatting. The design-area component receives `formatNumber` as a prop; the resolved (goal-seek) cell uses the same formatter, so the read-only computed value matches the rest of the row. - п.12. `computeCalculator` now validates the back-solved block against the same DWSC rule the live validator enforces (`0` or `≥ 1`). When the solver lands in the `(0, 1)` gap (e.g. attack 0.5 / weaponsTech 1.5 → weapons 0.333…) the lock is flagged infeasible — the lock input flips red and the claimed block is NOT back-solved into the invalid range, so the design preview keeps reading the user's own typed values instead of silently showing a sub-1 block. - new. Selecting an existing ship class from the name datalist now loads it immediately. `change` fires only on blur in Firefox, which is why the previous behaviour looked delayed; switching the load to `oninput` with an `InputEvent.inputType` check makes the load synchronous everywhere (datalist replacement carries `"insertReplacementText"` in Chromium / WebKit, `undefined` in Firefox; keyboard typing always carries a typing `inputType`). Before loading we compare the live blocks to the previously loaded class (or to the empty defaults) and, if they differ, ask through a `window.confirm`. On decline we revert the name field and leave the design untouched. Tests: calculator-tab and calc-model gain six cases (armament step, tech/MAT formatter labels, lock infeasible on (0, 1) for both attack→weapons and emptyMass→cargo, lock-value Arrow step, dropdown immediate load + confirm-blocks-load + confirm-allows-load), all 779 vitest tests green. docs/calculator-ux.md follows the new behaviour. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
UI client — topic docs
Deeper, topic-based documentation for the Galaxy web/cross-platform UI
client, beyond what fits in ../README.md. Each file
describes how one area works (current state); the staged build history
lives in ../PLAN.md, the active web finalization in
../PLAN-finalize.md, and deferred work in
../ROADMAP.md.
Foundation & platform
- design-system.md — the design tokens (colour / spacing / typography), the light/dark theming mechanism, and the component migration conventions.
- a11y.md — the WCAG 2.2 AA approach: axe + keyboard test gates, the shared a11y primitives, coverage by area, and the map-canvas alternative.
- error-state-ux.md — the central error surface
(taxonomy → translated/actionable messages), the shared
ViewStateplaceholder, the selected-planet ring, and bottom-sheet dismissal. - navigation.md — routes, the sidebar tabs, and the state-preservation rules across view/tab switches.
- storage.md — the
KeyStoreandCacheabstractions and their web (IndexedDB) implementations. - game-state.md — decoding the FlatBuffers report into
GameReportand theGameState/ rendered-report stores. - sync-protocol.md — order-draft sync, turn cutoff, conflict handling, and auto-pause.
- events.md — the signed push channel and event handling.
- calc-bridge.md — the
pkg/calc→ WASM → TypeScript bridge, with the live function surface and parity rules. - wasm-toolchain.md — building
ui/coretocore.wasmwith TinyGo. - pwa-strategy.md — the installable/offline PWA: the native service worker, manifest, icons, and the Playwright PWA gate.
- testing.md — the UI test layers (Vitest + Playwright).
Auth & lobby
- auth-flow.md — device keypair, email-code login, and request signing on the client.
- lobby.md — the lobby/game-list UI and membership flows.
Map & active views
- renderer.md — the PixiJS map renderer contract (world model, hit-test, torus / no-wrap).
- order-composer.md — the order tab and the optimistic order overlay.
- report-view.md — the Reports view.
Tools & inspectors
- calculator-ux.md — the ship-class calculator (design + goal-seek + planet build + reach circles + modernization).
- science-designer-ux.md — the science designer.
- ship-group-actions.md — ship-group inspector actions (move, send, upgrade, …).
- cargo-routes-ux.md — cargo-route composition and reach filtering.
Combat & comms
- battle-viewer-ux.md — the battle viewer.
- diplomail-ui.md — the diplomatic-mail view.
Localisation
- i18n.md — the localisation mechanism and translation bundles.