engine(ui): каркас меню-сцен — menuInput, MenuSceneBase, disabled-пункты
- Чистая readMenuInput (MenuActionMap/MenuNavEvent): порядок cancel → move →
  (adjust XOR confirm) → extra; left/right подавляют confirm (Enter в
  настройках не даёт двойной шаг).
- MenuSceneBase: build() из enter(), хуки onMove/onAdjust/onConfirm/
  onCancel/onAction — заменяет скопированную в 4 сценах игры навигацию.
- MenuList.MenuItem.disabled + ListCursor с предикатом выбираемости:
  курсор пропускает недоступные пункты, активация/клик игнорируются.
- Тесты: menuInput (5), listCursor +3 (505 всего); доки ui-and-dialogue.md
  («Меню-сцены», осознанный отказ от updateBelow).

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent c210ed0 commit b1c34502fa2565e3f61c11ed46b897710876232c
@root root authored 4 hours ago
Showing 9 changed files
View
docs/engine/ui-and-dialogue.md
View
packages/engine/src/index.ts
View
packages/engine/src/ui/Button.ts
View
packages/engine/src/ui/MenuList.ts
View
packages/engine/src/ui/MenuSceneBase.ts 0 → 100644
View
packages/engine/src/ui/__tests__/listCursor.test.ts
View
packages/engine/src/ui/__tests__/menuInput.test.ts 0 → 100644
View
packages/engine/src/ui/listCursor.ts
View
packages/engine/src/ui/menuInput.ts 0 → 100644