feat: FTPS, AppError, Site Manager, tests, multi-window, auto-clear, CI/CD, virtual scroll
- FTPS: реализован FtpsClient через suppaftp + async-native-tls - AppError: кастомный enum с Serialize вместо Result<T, String> - Site Manager UI: создание/редактирование/удаление сайтов - Тесты: 53 тестов (domain, storage, transfer, fs, remote) - Multi-window: новое окно + сохранение геометрии - Auto-clear: воркер чистит завершённые задачи по таймеру - CI/CD: 3-ступенчатый пайплайн (lint→build→test) с кэшированием - Virtual scroll: fileTable с рендером только видимых строк - UI: исправлены close-кнопки, color-scheme для select, скриншоты в README
This commit is contained in:
parent
545dd4ed0b
commit
e188fbef36
52 changed files with 5188 additions and 523 deletions
|
|
@ -43,11 +43,14 @@ export async function loadSettings() {
|
|||
const themeTransitionMs = 300;
|
||||
let themeTimeout = null;
|
||||
|
||||
const DARK_THEMES = new Set(["ember", "midnight", "forest", "ash"]);
|
||||
|
||||
export function applyTheme(themeId) {
|
||||
const html = document.documentElement;
|
||||
// Add a class to enable CSS transitions during theme switch
|
||||
html.classList.add("theme-transitioning");
|
||||
html.setAttribute("data-theme", themeId);
|
||||
html.style.colorScheme = DARK_THEMES.has(themeId) ? "dark" : "light";
|
||||
clearTimeout(themeTimeout);
|
||||
themeTimeout = setTimeout(() => {
|
||||
html.classList.remove("theme-transitioning");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue