diff --git a/miniapp/assets/app.js b/miniapp/assets/app.js index 0002c1e..7db679d 100644 --- a/miniapp/assets/app.js +++ b/miniapp/assets/app.js @@ -9,12 +9,35 @@ const BACKEND_URL = "https://api.wasrusgen1.pro"; const app = document.getElementById("app"); +/* ----------------- Theme / variant helpers ----------------- */ +const THEME_KEY = "zov_variant"; +const THEMES = [ + { id: "", name: "ЗОВ", dotA: "#003E7E", dotB: "#76BD22", outline: false }, + { id: "b", name: "Foundry", dotA: "#15140F", dotB: "#B68A1A", outline: false }, + { id: "c", name: "Boardroom",dotA: "#0E2A2E", dotB: "#D08A55", outline: false }, + { id: "d", name: "Atelier", dotA: "#2E5266", dotB: "#E9EBEF", outline: true }, +]; + +function applyVariant(id) { + const html = document.documentElement; + if (id) { + html.setAttribute("data-variant", id); + } else { + html.removeAttribute("data-variant"); + } + try { localStorage.setItem(THEME_KEY, id); } catch(e) {} +} + +function savedVariant() { + try { return localStorage.getItem(THEME_KEY) ?? ""; } catch(e) { return ""; } +} + /* ----------------- Telegram WebApp setup ----------------- */ function setupTelegram() { const scheme = tg?.colorScheme || (window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light"); document.documentElement.setAttribute("data-theme", scheme); - // Зафиксирован вариант A — Editorial Calm - document.documentElement.setAttribute("data-variant", "a"); + // Восстанавливаем тему из localStorage (по умолч. — brand) + applyVariant(savedVariant()); if (!tg) return; try { @@ -36,6 +59,38 @@ function haptic(type = "selection") { } catch (e) {} } +/* ----------------- Palette switcher UI ----------------- */ +function renderPaletteSwitcher() { + const current = savedVariant(); + const wrap = el(`
`); + // Маленький ярлык слева + const lbl = el(`Тема`); + wrap.appendChild(lbl); + + THEMES.forEach(t => { + const btn = el(` + + `); + btn.addEventListener("click", () => { + haptic(); + applyVariant(t.id); + // Перерисовываем все кнопки + wrap.querySelectorAll(".ps-btn").forEach((b, i) => { + b.classList.toggle("active", THEMES[i].id === t.id); + }); + }); + wrap.appendChild(btn); + }); + + return wrap; +} + /* ----------------- Data ----------------- */ async function fetchMe() { if (!BACKEND_URL) { @@ -122,6 +177,9 @@ async function renderManagerHome(me) { app.innerHTML = ""; document.body.classList.add("has-bottom-nav"); + // Palette (theme) switcher — вверху экрана + app.appendChild(renderPaletteSwitcher()); + // Greeting + bell (placeholder) const greetingEl = el(`
@@ -683,7 +741,7 @@ function renderRoleChooser() {