SHA256
Палитра «Сияние» по умолчанию, новые роли цветов. Лента канала: плоские записи, ряд действий с равным шагом иконок, дата у записи. Обсуждение со строкой ввода, личный чат, шторки. Вход и регистрация: стартовый экран (надпись «СИЯНИЕ», сияние мандалы), настройки входа со статусами серверов, статус логина в одну строку, вход с другого устройства (код, таймер, шаги), сохранение ключей с переключателями. Корневые разделы – заголовок по центру; фильтр чатов – переключатель; уведомления – список как в чатах; фото – просмотр на весь экран. Общее: один зазор под шапкой (--page-top-gap), переключатели высотой с поле ввода, второстепенные кнопки по одной роли (в том числе на экранах устройств и серверов), иконки только из ui-icon.js, полоса прокрутки скрыта, среднее тире в текстах интерфейса. Что нужно от сервера и разработчика – docs/UI-Design/UI-v4-for-dev.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
62 lines
2.7 KiB
JavaScript
62 lines
2.7 KiB
JavaScript
import { createTopBar } from '../components/topbar.js';
|
|
import {
|
|
isDeveloperToolsEnabled,
|
|
isDmFileTransferEnabled,
|
|
setDeveloperToolsEnabled,
|
|
setDmFileTransferEnabled,
|
|
} from '../services/feature-settings.js';
|
|
|
|
export const pageMeta = { id: 'advanced-settings-view', title: 'Дополнительные настройки' };
|
|
|
|
function createToggleRow({ id, title, hint, checked }) {
|
|
const label = document.createElement('label');
|
|
label.className = 'card settings-feature-toggle-row';
|
|
label.htmlFor = id;
|
|
label.innerHTML = `
|
|
<span class="settings-feature-toggle-copy">
|
|
<strong class="settings-feature-toggle-title">${title}</strong>
|
|
<span class="settings-feature-toggle-hint">${hint}</span>
|
|
</span>
|
|
<input class="switch" id="${id}" type="checkbox" ${checked ? 'checked' : ''} />
|
|
`;
|
|
return label;
|
|
}
|
|
|
|
export function render({ navigate, chrome }) {
|
|
const screen = document.createElement('section');
|
|
screen.className = 'stack advanced-settings-screen';
|
|
|
|
chrome?.setTopbar(createTopBar({
|
|
title: 'Дополнительные настройки',
|
|
back: { label: '←', onClick: () => navigate('settings-view') },
|
|
}));
|
|
|
|
const intro = document.createElement('div');
|
|
intro.className = 'settings-intro';
|
|
intro.innerHTML = `
|
|
<p class="meta-muted">Скрытые возможности. Экран открывается пятью быстрыми нажатиями по заголовку «Настройки».</p>
|
|
`;
|
|
|
|
const developerRow = createToggleRow({
|
|
id: 'advanced-developer-tools',
|
|
title: 'Настройки разработчика',
|
|
hint: 'Показывать блок «Версии» и кнопку настроек разработчика в обычных настройках. По умолчанию выключено.',
|
|
checked: isDeveloperToolsEnabled(),
|
|
});
|
|
|
|
const filesRow = createToggleRow({
|
|
id: 'advanced-dm-files',
|
|
title: 'Передача файлов в личных сообщениях',
|
|
hint: 'Разрешить зашифрованные файлы любого размера, несколько файлов за сообщение и голосовые. Полученные ранее файлы останутся доступными.',
|
|
checked: isDmFileTransferEnabled(),
|
|
});
|
|
|
|
const developerInput = developerRow.querySelector('#advanced-developer-tools');
|
|
const filesInput = filesRow.querySelector('#advanced-dm-files');
|
|
developerInput?.addEventListener('change', () => setDeveloperToolsEnabled(developerInput.checked));
|
|
filesInput?.addEventListener('change', () => setDmFileTransferEnabled(filesInput.checked));
|
|
|
|
screen.append(intro, developerRow, filesRow);
|
|
return screen;
|
|
}
|