From f8900e531a60e80c9d31fdaabab822045ef937c877870c863531624b200b4032 Mon Sep 17 00:00:00 2001 From: q Date: Sat, 26 Sep 2026 10:05:26 +0300 Subject: [PATCH] =?UTF-8?q?UI:=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B8=D0=B9=20=D1=81=D1=82=D0=B8=D0=BB=D1=8C,=20?= =?UTF-8?q?=D1=82=D1=91=D0=BC=D0=BD=D0=B0=D1=8F/=D1=81=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D1=8F=20=D1=82=D0=B5=D0=BC=D0=B0,=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=B0=D0=BB=D0=B8=D1=82=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - styles/main.css: роли цветов (по умолчанию «Индиго»), шкала отступов/скруглений/шрифтов, цвета отношений для обеих тем; жёсткие цвета в стилях заменены на роли. - Палитра: пресеты и личные правки, «Оформление» Авто/День/Ночь, долгое нажатие — редактор цветов с экспортом/импортом. - Каналы: пузыри постов автора, плашки дней, строка «Написать в канал…», «О канале», создание канала с адресом из названия; лента открывается на свежих постах. - Чаты: плоский список, чипы-фильтры, пузыри, плашки дней; нижняя панель скрыта в переписке. - Корневые разделы — единая шапка; профиль и чужой профиль — общая карточка; настройки, кошелёк, сеансы — меню-списки. - Нижняя панель: иконки без подписей, бейджи на иконках. - confirmDialog вместо window.confirm/alert; на телефоне диалоги — шторки снизу. - docs/UI-Design/ISSUES-for-dev.md — найденные ошибки сервера/UI. Co-Authored-By: Claude Opus 5.5 --- VERSION.properties | 2 +- docs/UI-Design/ISSUES-for-dev.md | 41 +++ shine-UI/index.html | 14 +- shine-UI/js/app.js | 37 +-- .../components/arweave-attachment-manager.js | 82 +++-- shine-UI/js/components/channel-editor.js | 9 +- shine-UI/js/components/confirm-dialog.js | 48 +++ shine-UI/js/components/palette-editor.js | 152 +++++++++ shine-UI/js/components/profile-card.js | 110 +++++++ .../js/components/scroll-to-bottom-button.js | 3 +- shine-UI/js/components/toolbar.js | 38 ++- shine-UI/js/components/topbar.js | 5 +- shine-UI/js/components/ui-icon.js | 14 + shine-UI/js/pages/access-servers-view.js | 44 ++- shine-UI/js/pages/add-channel-view.js | 72 +++-- .../js/pages/add-personal-public-chat-view.js | 4 +- shine-UI/js/pages/advanced-settings-view.js | 5 +- shine-UI/js/pages/app-log-view.js | 14 +- shine-UI/js/pages/arweave-uploads-view.js | 8 +- shine-UI/js/pages/channel-about-view.js | 110 ++++--- shine-UI/js/pages/channel-donate-view.js | 2 +- shine-UI/js/pages/channel-thread-view.js | 81 +++-- shine-UI/js/pages/channel-view.js | 121 ++++--- shine-UI/js/pages/channels-list.js | 11 +- shine-UI/js/pages/chat-view.js | 26 +- shine-UI/js/pages/contact-search-view.js | 33 +- shine-UI/js/pages/developer-settings-view.js | 34 +- shine-UI/js/pages/device-pairing-view.js | 4 +- shine-UI/js/pages/device-view.js | 153 ++++----- shine-UI/js/pages/devnet-topup-view.js | 8 +- shine-UI/js/pages/entry-settings-view.js | 12 +- shine-UI/js/pages/key-storage-view.js | 2 +- shine-UI/js/pages/language-view.js | 61 ++-- shine-UI/js/pages/login-view.js | 8 +- shine-UI/js/pages/messages-list.js | 127 +++----- shine-UI/js/pages/network-view.js | 37 +-- shine-UI/js/pages/network/force-graph.js | 31 +- shine-UI/js/pages/notifications-view.js | 24 +- shine-UI/js/pages/profile-edit-view.js | 41 ++- shine-UI/js/pages/profile-view.js | 175 +--------- shine-UI/js/pages/profiles-view.js | 29 +- .../js/pages/public-support-queue-view.js | 8 +- shine-UI/js/pages/register-view.js | 6 +- shine-UI/js/pages/registration-faq-view.js | 36 ++- shine-UI/js/pages/registration-keys-view.js | 2 +- shine-UI/js/pages/server-settings-view.js | 18 +- shine-UI/js/pages/settings-view.js | 102 +++--- shine-UI/js/pages/show-keys-view.js | 35 +- shine-UI/js/pages/start-view.js | 8 +- .../trusted-device-login-settings-view.js | 11 +- shine-UI/js/pages/user-profile-view.js | 152 +-------- shine-UI/js/pages/wallet-view.js | 75 ++--- shine-UI/js/router.js | 11 +- shine-UI/js/services/attachment-format.js | 16 +- shine-UI/js/services/channels-ux.js | 52 +++ shine-UI/js/services/dm-file-service.js | 6 +- .../js/services/qr-key-transfer-service.js | 2 +- shine-UI/js/services/shine-server-resolver.js | 2 +- .../js/services/shine-user-pda-service.js | 2 +- shine-UI/js/services/theme-service.js | 189 ++++++++++- shine-UI/js/services/user-profile-params.js | 2 +- shine-UI/styles/app-shell.css | 115 +++---- shine-UI/styles/buttons-white.css | 86 +++-- shine-UI/styles/components/attachments.css | 81 ++++- shine-UI/styles/components/avatar.css | 25 +- shine-UI/styles/components/call-ui.css | 78 ++--- shine-UI/styles/components/channel-editor.css | 48 +-- shine-UI/styles/components/chips.css | 56 ++++ shine-UI/styles/components/emoji-picker.css | 16 +- shine-UI/styles/components/modal.css | 21 ++ shine-UI/styles/components/nav-list.css | 36 +++ shine-UI/styles/components/overflow-dots.css | 4 +- shine-UI/styles/components/palette-editor.css | 41 +++ shine-UI/styles/components/primitives.css | 176 ++++++---- .../styles/components/scroll-to-bottom.css | 85 ++--- shine-UI/styles/components/tabs.css | 10 +- shine-UI/styles/components/toolbar.css | 35 +- shine-UI/styles/components/topbar.css | 5 +- shine-UI/styles/features/channel.css | 266 +++++---------- shine-UI/styles/features/channels-common.css | 60 +++- shine-UI/styles/features/channels-list.css | 45 +-- shine-UI/styles/features/chat.css | 265 +++++++++------ shine-UI/styles/features/developer-tools.css | 38 +-- shine-UI/styles/features/devices.css | 122 +++---- shine-UI/styles/features/messages.css | 137 +++++--- shine-UI/styles/features/network.css | 150 ++++----- shine-UI/styles/features/notifications.css | 92 ++---- shine-UI/styles/features/preauth.css | 200 ++++++++---- shine-UI/styles/features/profile-page.css | 111 +++++++ shine-UI/styles/features/profile.css | 304 +++++++++--------- shine-UI/styles/features/settings.css | 171 +++++----- shine-UI/styles/layout.css | 16 +- shine-UI/styles/main.css | 127 +++++--- shine-UI/styles/network-graph.css | 180 ++++------- 94 files changed, 3337 insertions(+), 2432 deletions(-) create mode 100644 docs/UI-Design/ISSUES-for-dev.md create mode 100644 shine-UI/js/components/confirm-dialog.js create mode 100644 shine-UI/js/components/palette-editor.js create mode 100644 shine-UI/js/components/profile-card.js create mode 100644 shine-UI/styles/components/chips.css create mode 100644 shine-UI/styles/components/nav-list.css create mode 100644 shine-UI/styles/components/palette-editor.css create mode 100644 shine-UI/styles/features/profile-page.css diff --git a/VERSION.properties b/VERSION.properties index edd0c34e..db6de73c 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.13.0 +client.version=1.13.1 server.version=1.11.0 diff --git a/docs/UI-Design/ISSUES-for-dev.md b/docs/UI-Design/ISSUES-for-dev.md new file mode 100644 index 00000000..bd1d1c64 --- /dev/null +++ b/docs/UI-Design/ISSUES-for-dev.md @@ -0,0 +1,41 @@ +# Замечания к серверу и UI (найдено при редизайне) + +Код по этим пунктам не менялся. + +## Ошибки + +1. **Лента «Подписки» пуста у логинов с заглавными буквами** (например `User_t2_03`). + `Net_ListSubscriptionsFeed_Handler.loadFollowedChannels` ищет `connections_state.login = ?` в исходном регистре, + а в `connections_state` логин хранится в нижнем регистре (FK на `solana_user_pda_current.normalized_login`). + Подписки в базе есть, но `followedChannels` пуст. Отсюда же «подписка не срабатывает» в UI: + кнопка не меняется на «Отписаться», канал не появляется в «Подписках». + +2. **Превью в списке чатов — «Сообщение недоступно»**, хотя в самом чате сообщения расшифровываются. + `messages-list.js` строит превью по `dialog.lastMessageBlobB64`, `catch` глушит настоящую ошибку. + Проверить, не бывает ли так у реальных пользователей (например, если последнее сообщение отправлено с другого устройства). + +3. **Прямой переход по адресу** `/settings`, `/profile`, `/channels/new` при загрузке страницы уводит на «Личные». + +4. **`?localWsPort=` теряется при навигации**: после обновления страницы UI молча подключается к `shineup.me`. + +## Безопасность / конфигурация + +5. **Приватный ключ web-push в репозитории**: `SHiNE-server/src/main/resources/application.properties` → `webpush.vapid.private`. + Если он совпадает с продовым — перевыпустить и убрать из git. + +6. По умолчанию сервер представляется логином прода `server.SHiNE.login=shineupme` — при запуске вне прода легко перепутать. + +## На будущее + +7. **Каждое действие перерисовывает страницу целиком** (лайк → шапка на мгновение «Канал / Загрузка…», лента перестраивается), + отсюда «дёрганье» при переходах назад. Нужны оптимистичные обновления (лайк/ответ меняют только свой элемент), + кэш загруженных лент между переходами, обновление без полной перерисовки. + +8. **Кэш модулей после деплоя.** Страницы в `js/app.js` подключаются с метками `?v=…`, а `js/components/*` и `js/services/*` — без меток, + браузер может держать старую версию. Для изменённых страниц метки подняты до `?v=202609260900`; + для остальных модулей стоит проверить заголовки кэширования или ввести общую метку версии, как у CSS и `app.js`. + +## Не сделано в редизайне + +- Автопроверка серверов в настройках. +- Число подписчиков в шапке канала (нет в API). diff --git a/shine-UI/index.html b/shine-UI/index.html index 55d2ed5c..3430e76f 100644 --- a/shine-UI/index.html +++ b/shine-UI/index.html @@ -6,6 +6,7 @@ name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-visual" /> + @@ -24,6 +25,17 @@ document.documentElement.dataset.themeMode = mode; document.documentElement.dataset.theme = resolved; document.documentElement.style.colorScheme = resolved; + // Своя палитра (см. js/services/theme-service.js) применяется до отрисовки, без вспышки. + try { + const applied = JSON.parse(localStorage.getItem('shine-ui-palette-applied-v1') || 'null'); + const colors = applied && applied[resolved]; + if (colors) { + Object.keys(colors).forEach(function (role) { + if (/^#[0-9a-f]{6}$/i.test(colors[role])) document.documentElement.style.setProperty('--' + role, colors[role]); + }); + if (colors.accent) document.documentElement.style.setProperty('--focus-ring', colors.accent); + } + } catch {} }());