diff --git a/VERSION.properties b/VERSION.properties index 3c67cf67..b39284dc 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.5.32 +client.version=1.5.33 server.version=1.4.10 diff --git a/shine-UI/js/app.js b/shine-UI/js/app.js index 50789928..7b93e921 100644 --- a/shine-UI/js/app.js +++ b/shine-UI/js/app.js @@ -212,6 +212,10 @@ function setShellMetricVar(name, valuePx) { appShellEl.style.setProperty(name, `${Math.max(0, Math.ceil(Number(valuePx || 0)))}px`); } +function setKeyboardOffsetPx(valuePx = 0) { + setShellMetricVar('--keyboard-offset', valuePx); +} + function attachSlotHeightObserver(slotEl, cssVarName) { if (!slotEl || typeof ResizeObserver !== 'function') return null; const sync = () => { diff --git a/shine-UI/js/pages/channels-list.js b/shine-UI/js/pages/channels-list.js index 49ab2531..2d7b932c 100644 --- a/shine-UI/js/pages/channels-list.js +++ b/shine-UI/js/pages/channels-list.js @@ -14,6 +14,7 @@ import { import { makeShineChannelRoute } from '../services/shine-routes.js'; import { navigateBack } from '../router.js'; import { buildArweaveDataUrl } from '../services/arweave-file-service.js'; +import { parseDmTechBlocks } from '../services/dm-tech-blocks.js'; export const pageMeta = { id: 'channels-list', title: 'Каналы' }; @@ -26,7 +27,9 @@ const DIARY_DISPLAY_NAME = 'Дневник'; function cleanChannelMessagePreview(text) { const parsed = parseMessageAttachments(text); - return String(parsed.text || '').trim() || (parsed.attachments.length ? 'Вложение' : 'Ждем ваших начинаний'); + const dmParsed = parseDmTechBlocks(String(parsed.text || '')); + return String(dmParsed.displayText || dmParsed.visibleText || '').trim() + || (parsed.attachments.length ? 'Вложение' : 'Ждем ваших начинаний'); } function isChannelsDemoMode() { diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index c6d921ea..ec9643ae 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -783,6 +783,7 @@ async function mergeDirectMessagesPage(chatId, payloadMessages) { function setChatKeyboardOpen(isOpen) { document.body.classList.toggle('chat-keyboard-open', !!isOpen); + document.body.classList.toggle('chat-toolbar-persistent', !!isOpen); } export function render({ navigate, route, chrome }) { @@ -1010,10 +1011,20 @@ export function render({ navigate, route, chrome }) { let emojiPickerOpen = false; let emojiSelection = null; const baseViewportHeight = Math.max(window.visualViewport?.height || 0, window.innerHeight || 0); + const appShell = document.querySelector('.app-shell'); + + const setKeyboardInset = (valuePx = 0) => { + appShell?.style.setProperty('--keyboard-offset', `${Math.max(0, Math.ceil(Number(valuePx || 0)))}px`); + }; const syncKeyboardUi = () => { - const viewportHeight = Math.max(window.visualViewport?.height || 0, window.innerHeight || 0); + const viewport = window.visualViewport || null; + const viewportHeight = Math.max(viewport?.height || 0, window.innerHeight || 0); const viewportShrunk = baseViewportHeight - viewportHeight > 120; + const keyboardInset = viewportShrunk + ? Math.max(0, (window.innerHeight || 0) - viewportHeight - Number(viewport?.offsetTop || 0)) + : 0; + setKeyboardInset(keyboardInset); setChatKeyboardOpen(inputFocused && viewportShrunk); if (inputFocused) { window.requestAnimationFrame(() => scrollToLatestMessage(log)); @@ -1511,6 +1522,7 @@ export function render({ navigate, route, chrome }) { }); screen.cleanup = () => { setChatKeyboardOpen(false); + setKeyboardInset(0); stopAllTwemojiAnimations(); window.removeEventListener('shine-chat-messages-updated', handleIncomingChatRefresh); window.visualViewport?.removeEventListener('resize', syncKeyboardUi); diff --git a/shine-UI/js/pages/profile-view.js b/shine-UI/js/pages/profile-view.js index 16661c25..88d4952a 100644 --- a/shine-UI/js/pages/profile-view.js +++ b/shine-UI/js/pages/profile-view.js @@ -101,8 +101,6 @@ export function render({ navigate, chrome }) { const topbar = document.createElement('header'); topbar.className = 'page-header app-topbar-shell app-topbar-shell--profile'; topbar.innerHTML = ` -
-

Профиль пользователя