From b7eb5ecd54cda309f416a404178a8c4bf23a37f5 Mon Sep 17 00:00:00 2001 From: lklynet Date: Sun, 11 Jan 2026 17:49:13 -0500 Subject: [PATCH] feat(theme): add hypermind theme with notification support Added a new (official) hypermind theme with color scheme to match new site and a notification display when switching themes --- README.md | 2 +- THEMES.md | 5 ++++ assets/images/hypermind-theme.png | Bin 0 -> 36029 bytes package.json | 2 +- public/app.js | 31 ++++++++++++++++++++- public/index.html | 1 + public/style.css | 31 +++++++++++++++++++++ public/themes/hypermind.css | 43 ++++++++++++++++++++++++++++++ 8 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 assets/images/hypermind-theme.png create mode 100644 public/themes/hypermind.css diff --git a/README.md b/README.md index 99b1f05..b4ed40a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ A completely decentralized chat system built directly on top of the swarm topolo ### 3. Visualizations * **Particle Map:** Visualizes approximate peer locations (if enabled). * **Themes:** Built-in theme switcher (Nord, Solarized, Tokyo Night, etc).
- Default Nord Solarized Tokyo Night Volcano + Default Nord Solarized Tokyo Night Volcano Hypermind --- diff --git a/THEMES.md b/THEMES.md index ba034d6..f020290 100644 --- a/THEMES.md +++ b/THEMES.md @@ -20,6 +20,10 @@ ![Volcano theme screenshot](assets/images/volcano-theme.png) +### Hypermind + +![Hypermind theme screenshot](assets/images/hypermind-theme.png) + # Contributing custom themes 1. Fork `main` and clone locally to your device. @@ -35,6 +39,7 @@ 'nord-dark.css', 'solarized-light.css', 'volcano.css', + 'hypermind.css', 'new-theme.css' /* always add to the end of the list ]; ``` diff --git a/assets/images/hypermind-theme.png b/assets/images/hypermind-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca8c66f57110c5c72a6355bcc3f383ededab8ce GIT binary patch literal 36029 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

KRM`1Dd451T7K?=@kFz<@u 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 Rri~DYEL1_V=(WMe{{>9#U)TTu literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 4d0f4f4..ad9d208 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hypermind", - "version": "0.10.0", + "version": "0.11.0", "description": "A decentralized P2P counter of active deployments", "main": "server.js", "scripts": { diff --git a/public/app.js b/public/app.js index 59a4194..ad8c4f7 100644 --- a/public/app.js +++ b/public/app.js @@ -823,11 +823,39 @@ const themes = [ "nord-dark.css", "solarized-light.css", "volcano.css", + "hypermind.css", ]; let currentThemeIndex = 0; +let notificationTimeout; + +function showThemeNotification(themeName) { + const notification = document.getElementById("theme-notification"); + if (!notification) return; + + const displayName = themeName + .replace(".css", "") + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + + notification.innerText = `Theme: ${displayName}`; + notification.classList.remove("hidden"); + + notification.offsetHeight; + + notification.classList.add("show"); + + if (notificationTimeout) clearTimeout(notificationTimeout); + + notificationTimeout = setTimeout(() => { + notification.classList.remove("show"); + setTimeout(() => { + notification.classList.add("hidden"); + }, 300); + }, 2000); +} -// Initialize currentThemeIndex based on the theme loaded by index.html const currentThemeLink = document.getElementById("theme-css"); if (currentThemeLink) { const currentThemeName = currentThemeLink.href.split("/").pop(); @@ -856,6 +884,7 @@ function cycleTheme() { localStorage.setItem("hypermind-theme", newTheme); btn.disabled = false; btn.style.opacity = ""; + showThemeNotification(newTheme); }; newLink.onerror = () => { diff --git a/public/index.html b/public/index.html index 5c27fbe..b5734c0 100644 --- a/public/index.html +++ b/public/index.html @@ -124,6 +124,7 @@ +