UI: адаптация шапки «Связи», кнопка поиска каналов, локальный тестовый вход

- Связи: верхняя панель не выходит за границы экрана — кнопки назад/Найти/«?»
  не обрезаются на узких устройствах; заголовок сокращается вместо сдвига кнопок.
- Каналы: emoji-иконка поиска заменена на контурную кнопку-лупу в стиле панели
  (подсказка «Найти канал»); окно поиска без изменений.
- Локальный тестовый вход: на localhost/127.0.0.1/::1 — кнопка демо-входа
  (сеанс local-tester, автономные локальные состояния ЛС/каналов/профиля, без
  сервера и пароля); на shineup.me и тестовых доменах кнопка отсутствует.
- Заметки на ручную проверку добавлены в Dev_Docs/Pending_Features.
- VERSION: client 1.2.262.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pixel
2026-07-15 12:40:16 +03:00
co-authored by Claude Opus 4.8
parent 127c561a41
commit 8c4997ee2e
19 changed files with 1066 additions and 143 deletions
+20 -3
View File
@@ -48,7 +48,7 @@ import * as loginOtherDeviceView from './pages/login-other-device-view.js?v=2026
import * as loginPasswordView from './pages/login-password-view.js?v=202606201650';
import * as keyStorageView from './pages/key-storage-view.js';
import * as profileView from './pages/profile-view.js';
import * as profileView from './pages/profile-view.js?v=202607150910';
import * as profileEditView from './pages/profile-edit-view.js';
import * as walletView from './pages/wallet-view.js?v=202605300007';
import * as settingsView from './pages/settings-view.js';
@@ -490,6 +490,10 @@ function startPeriodicUiVersionCheck() {
}
async function checkConnectionHealth() {
if (state.session.isLocalDemo) {
setConnectionStatus('connected');
return;
}
if (connectionCheckInFlight) return;
connectionCheckInFlight = true;
if (connectionState !== 'connected') {
@@ -520,6 +524,10 @@ async function checkConnectionHealth() {
}
function startConnectionMonitor() {
if (state.session.isLocalDemo) {
setConnectionStatus('connected');
return;
}
if (pingIntervalId) {
window.clearInterval(pingIntervalId);
pingIntervalId = null;
@@ -733,6 +741,7 @@ function renderApp() {
const showAppChrome = page.pageMeta?.showAppChrome !== false;
screenEl.classList.toggle('no-app-chrome', !showAppChrome);
screenEl.classList.toggle('preauth-flow', PRE_AUTH_PAGES.includes(pageId));
toolbarEl.innerHTML = '';
if (showAppChrome) {
@@ -746,6 +755,7 @@ function renderApp() {
}
async function tryAutoLogin() {
if (state.session.isLocalDemo) return;
if (!state.session.login || !state.session.sessionId) return;
try {
await authService.reconnect(state.entrySettings.shineServer);
@@ -766,6 +776,7 @@ async function tryAutoLogin() {
}
async function ensureSessionRuntimeStarted() {
if (state.session.isLocalDemo) return;
if (!state.session.isAuthorized || sessionRuntimeStarted) return;
sessionRuntimeStarted = true;
@@ -810,6 +821,10 @@ async function ensureSessionRuntimeStarted() {
async function init() {
consumeCallPushActionFromUrlIfAny();
if (state.session.isLocalDemo) {
setConnectionStatus('connected');
}
addAppLogEntry({
level: 'info',
source: 'app',
@@ -1073,8 +1088,10 @@ async function init() {
try {
await tryAutoLogin();
await hydrateMessagesFromStore();
startConnectionMonitor();
startPeriodicUiVersionCheck();
if (!state.session.isLocalDemo) {
startConnectionMonitor();
startPeriodicUiVersionCheck();
}
await ensureSessionRuntimeStarted();
} finally {
renderApp();