diff --git a/scripts/online-smoke.cjs b/scripts/online-smoke.cjs
index dd92c5d..19866aa 100644
--- a/scripts/online-smoke.cjs
+++ b/scripts/online-smoke.cjs
@@ -443,6 +443,17 @@ module.exports = async function onlineSmoke({
async () => (await evaluate('window.screenBridge.onlineState()')).connection === 'connected',
'HTTP baseline',
)
+ assert.equal(
+ await evaluate(`(() => {
+ const assignment = document.querySelector('[data-testid="sound-assignment"]')
+ const card = assignment?.closest('.n-card')
+ return card?.querySelector('.n-card-header__main')?.textContent.trim() === 'Игра'
+ && ['Назначить звук этому экрану', 'Отключить управление'].every(label =>
+ !Array.from(document.querySelectorAll('.n-card')).find(c => c.querySelector('.n-card-header__main')?.textContent.trim() === 'Экран')?.textContent.includes(label))
+ })()`),
+ true,
+ 'server screen controls belong to game card',
+ )
await poll(
() =>
evaluate(
diff --git a/src/components/ConnectionPanel.vue b/src/components/ConnectionPanel.vue
index 65ccbc0..88b0669 100644
--- a/src/components/ConnectionPanel.vue
+++ b/src/components/ConnectionPanel.vue
@@ -13,6 +13,7 @@ import {
useMessage,
} from 'naive-ui'
import { computed, ref, watch } from 'vue'
+import ScreenConnectionPanel from './ScreenConnectionPanel.vue'
import {
DEFAULT_SERVER,
type GameMaterial,
@@ -262,6 +263,7 @@ const gameOptions = computed(() => {
>Подключиться
+
Материалы: {{ state.preparation.completed }}/{{ state.preparation.total }} · {{ (state.preparation.downloadedBytes / 1048576).toFixed(1) }} МиБ @@ -287,7 +289,6 @@ const gameOptions = computed(() => { name="materials" >
В игре нет материалов.