diff --git a/config/config.json b/config/config.json index 2fd13e9..d73ef86 100644 --- a/config/config.json +++ b/config/config.json @@ -8,8 +8,6 @@ "verboseLogs": false, "autoDownloadPlaylist": true, "customCodec": "h264", - - "logSystem": true, "outputTitleCheck": true, "downloadSystem": true, diff --git a/main.js b/main.js index 272a9c5..e8a3a07 100644 --- a/main.js +++ b/main.js @@ -205,6 +205,49 @@ app.whenReady().then(async () => { return configFeatures; }); + const featureWhitelist = new Set([ + "autoUpdate", + "discordRPC", + "customTopBar", + "autoCheckInfo", + "addThumbnail", + "addMetadata", + "verboseLogs", + "autoDownloadPlaylist", + "customCodec" + ]); + + + ipcMain.handle("set-feature", (event, { key, value }) => { + try { + if (!featureWhitelist.has(key)) { + logger.warn(`Rejected feature (not whitelisted): ${key}`); + return false; + } + + // optionnel mais propre + if (configFeatures[key] === value) { + return true; + } + + configFeatures[key] = value; + + fs.writeFileSync( + configFolderPath, + JSON.stringify(configFeatures, null, 2), + "utf-8" + ); + + logger.info(`Feature updated: ${key} = ${value}`); + return true; + + } catch (err) { + logger.error(`set-feature failed (${key}): ${err.message}`); + return false; + } + }); + + configFeatures.discordRPC ? startRPC() : ""; await createMainWindow(); diff --git a/package-lock.json b/package-lock.json index 27d3a4c..1f7d0b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "chalk": "^4.1.2", "debug": "^4.4.1", "discord-rpc": "^4.0.1", - "electron-squirrel-startup": "^1.0.1", "electron-updater": "^6.6.2", "express": "^5.1.0", "express-rate-limit": "^8.2.1", @@ -428,7 +427,6 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, - "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -450,7 +448,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -467,7 +464,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -482,7 +478,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 10.0.0" } @@ -971,6 +966,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1512,9 +1508,9 @@ } }, "node_modules/cacache/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", + "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1905,8 +1901,7 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -2432,30 +2427,6 @@ "node": ">= 10.0.0" } }, - "node_modules/electron-squirrel-startup": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz", - "integrity": "sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/electron-squirrel-startup/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/electron-squirrel-startup/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/electron-updater": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.7.3.tgz", @@ -2526,7 +2497,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -2547,7 +2517,6 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -2579,16 +2548,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -2721,6 +2680,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -4096,9 +4056,9 @@ } }, "node_modules/node-abi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.24.0.tgz", - "integrity": "sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.25.0.tgz", + "integrity": "sha512-BRrQZc23ljOLms7EXVds3MOpB59/x7gaORodNuIwt96JKlflUmrOgv5hSJZEEM/WkW3uXpjZ4x1wcFu8V9mTpw==", "dev": true, "license": "MIT", "dependencies": { @@ -4220,9 +4180,9 @@ } }, "node_modules/node-gyp/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", + "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -4521,6 +4481,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4550,7 +4511,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -4568,7 +4528,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": "^12.20.0 || >=14" } @@ -4826,7 +4785,6 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -5443,7 +5401,6 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -5507,7 +5464,6 @@ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "minimist": "^1.2.6" }, @@ -5802,6 +5758,7 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.8", diff --git a/preload.js b/preload.js index aacdf74..e9ca875 100644 --- a/preload.js +++ b/preload.js @@ -5,6 +5,7 @@ contextBridge.exposeInMainWorld("electronAPI", { selectDownloadFolder: () => ipcRenderer.invoke("select-download-folder"), setProgress: (percent) => ipcRenderer.send("set-progress", percent), getFeatures: () => ipcRenderer.invoke("features"), + setFeature: (key, value) => ipcRenderer.invoke("set-feature", { key, value }), getVersion: () => ipcRenderer.invoke("version"), getValidatedDownloadPath: (path) => ipcRenderer.invoke("validate-download-path", path) }); diff --git a/public/assets/icon/settings.svg b/public/assets/icon/settings.svg new file mode 100644 index 0000000..39ab649 --- /dev/null +++ b/public/assets/icon/settings.svg @@ -0,0 +1,2 @@ + +ionicons-v5-q \ No newline at end of file diff --git a/public/index.html b/public/index.html index da15ac5..7050fe2 100644 --- a/public/index.html +++ b/public/index.html @@ -23,7 +23,6 @@ -
@@ -31,12 +30,170 @@
+ + -
- - + +
+
+ + + +
+

SETTINGS

+

Changes are saved automatically.
Somes changes could need a restart

+
+ + +
+

Basic Settings

+ +
+
+
+ Thème + + +
+ Choose the theme of the application +
+
+ + +
+ +
+ Discord RPC + Enable/disable Discord Rich Presence for your app. +
+
+ +
+ +
+ Download Playlist automatically? + If enabled, playlists will download without confirmation. +
+
+ + + +
+ +
+ Custom Top bar + Use this if the topbar is missing or you prefer a custom one. +
+
+ +
+ +
+ Auto Fetch Info + Automatically fetch information for new downloads. +
+
+
+ + + +
+ Advanced Settings + +
+ +
+ Auto Update + Enable automatic app updates. +
+
+ + + +
+ +
+ Add Metadata + Include metadata in downloaded files. +
+
+ +
+ +
+ Add Thumbnail + Include thumbnails in downloaded files. +
+
+ +
+
+ Custom Codec + + Choose your preferred video codec. +
+
+ +
+ + +
+ Developer Settings + + + + + +
+ +
+ Verbose Logs + Show verbose logs for debugging purposes. +
+
+ +
+ + + + +
- +
@@ -97,9 +254,13 @@
+ +

Because Why Not ?

+ + diff --git a/public/script/customthemes.js b/public/script/customthemes.js index 34b5ec0..129a7e7 100644 --- a/public/script/customthemes.js +++ b/public/script/customthemes.js @@ -1,8 +1,7 @@ const themes = { - default: { label: "Default", subtitle: "Because why not?" }, dark: { label: "Sombre", subtitle: "Darkness is my ally" }, light: { label: "Clair", subtitle: "Qui aime ce thème ?" }, - neon: { label: "Néon", subtitle: "How was your day ?"}, + neon: { label: "Purple", subtitle: "How was your day ?"}, nf: { label: "NF", subtitle: "You call it music, i call it my Therapist" }, songbird: { label: "Songbird", subtitle: "From Her to Eternity" }, drift: { label: "Drift", subtitle: "Si la route t'appelle, contre appel" }, diff --git a/public/script/fetchinfo.js b/public/script/fetchinfo.js index 9db3040..af9c9b7 100644 --- a/public/script/fetchinfo.js +++ b/public/script/fetchinfo.js @@ -25,10 +25,9 @@ async function fetchVideoInfo(url) { return { error: "Network or JSON Issue" }; } } -async function init() { - const configFeatures = await window.electronAPI.getFeatures(); - if (!configFeatures.autoCheckInfo) return; + +async function init() { document.addEventListener("DOMContentLoaded", () => { const urlInput = document.getElementById("UrlInput"); @@ -38,6 +37,10 @@ async function init() { let lastFetchedUrl = ""; urlInput.addEventListener("input", async () => { + + const configFeatures = await window.electronAPI.getFeatures(); + if (!configFeatures.autoCheckInfo) return; + const url = urlInput.value.trim(); // Si champ vide -> reset total diff --git a/public/script/settingsPanel.js b/public/script/settingsPanel.js new file mode 100644 index 0000000..ae8f2f9 --- /dev/null +++ b/public/script/settingsPanel.js @@ -0,0 +1,50 @@ +const settingsPanel = document.getElementById("settings-panel"); +const settingsModal = document.querySelector(".settings-modal"); + +const settingsButton = document.getElementById("settings-button"); + +let isOpen = false; + +settingsButton.addEventListener("click", () => { + const isOpen = settingsPanel.style.display === "block"; + settingsPanel.style.display = isOpen ? "none" : "block"; +}); + +function closePanel() { + isOpen = false; + settingsPanel.style.display = "none"; +} + +// charge les features +async function loadSettings() { + const features = await window.electronAPI.getFeatures(); + + document.querySelectorAll(".settings-section input, .settings-section select").forEach(el => { + const key = el.dataset.key; + if (features[key] !== undefined) { + if (el.type === "checkbox") el.checked = features[key]; + else if (el.tagName === "SELECT") el.value = features[key]; + } + + el.addEventListener("change", () => { + let value = el.type === "checkbox" ? el.checked : el.value; + window.electronAPI.setFeature(key, value); + }); + }); +} + +// ouvrir le JSON +document.getElementById("open-json-btn").addEventListener("click", () => { + window.topbarAPI.openConfig(); // ton IPC existant +}); + + +/* clic sur l'overlay = fermer */ +settingsPanel.addEventListener("click", closePanel); + +/* clic dans la modal = stop propagation */ +settingsModal.addEventListener("click", (e) => { + e.stopPropagation(); +}); + +loadSettings(); diff --git a/public/styles/components/themebutton.css b/public/styles/components/themebutton.css deleted file mode 100644 index 3031696..0000000 --- a/public/styles/components/themebutton.css +++ /dev/null @@ -1,38 +0,0 @@ -.theme-switcher { - position: absolute; - top: 60px; - right: 10px; - background: #242424; - padding: 8px 12px; - border-radius: 8px; - color: #fff; - font-family: sans-serif; - font-size: 0.9rem; - display: flex; - align-items: center; - gap: 8px; - z-index: 1050; -} - -.theme-switcher label { - cursor: pointer; - font-weight: 600; -} - -.theme-switcher select { - background: #fff; - border: 1px solid #242424; - border-radius: 6px; - padding: 4px 8px; - color: #000; - cursor: pointer; - font-weight: 600; - transition: background 0.3s ease, color 0.3s ease; -} - -.theme-switcher select:hover, -.theme-switcher select:focus { - background: #474747; - color: #fff; - outline: none; -} diff --git a/public/styles/layout/settingsPanel.css b/public/styles/layout/settingsPanel.css new file mode 100644 index 0000000..0fa7b3d --- /dev/null +++ b/public/styles/layout/settingsPanel.css @@ -0,0 +1,234 @@ +/* SETTINGS BUTTON */ +.settings-button { + display: flex; + align-items: center; + justify-content: center; + position: fixed; + top: 60px; + right: 20px; + opacity: 0.8; + background-color: var(--settings-button-bg-color); + border-radius: 14px; + padding: 8px; + border: none; + box-shadow: 0 6px 16px rgba(0,0,0,0.25); + transition: transform 0.15s ease, box-shadow 0.15s ease; +} + +.settings-button svg { + width: 40px; + height: 40px; + stroke: var(--settings-button-text-color); +} + +.settings-button:hover { + transform: scale(1.1); + cursor: pointer; + box-shadow: 0 10px 24px rgba(0,0,0,0.35); +} + +.settings-button:active { + transform: scale(0.95); +} + + +/* SETTINGS PANEL */ +.settings-panel { + position: fixed; + top: 60px; + right: 40px; + width: 40vw; + max-width: 320px; + max-height: 80vh; + background-color: var(--settings-bg-primary-color); + border-radius: 12px; + padding: 20px; + box-shadow: 0 8px 24px rgba(0,0,0,0.4); + display: none; + overflow-y: auto; + z-index: 9999; + animation: slideIn 0.2s ease-out; + color: var(--settings-text-color); +} + +.settings-panel::-webkit-scrollbar { + width: 0px; + background: transparent; +} + +.settings-modal { + width: 100%; + min-height: auto; + max-height: none; + padding: 0; + background: none; + box-shadow: none; + border-radius: none; + +} + +/* TITLE */ +.settings-title { + margin-bottom: 20px; +} + +.settings-title h2 { + margin: 0; + font-size: 24px; +} + +.settings-title p { + font-size: 14px; + color: #ccc; + margin-top: 4px; +} + +/* SECTION */ +.settings-section { + display: flex; + flex-direction: column; + margin-bottom: 20px; + padding: 10px 15px; + background: var(--settings-bg-secondary-color); + border-radius: 12px; + gap: 6px; +} + +.settings-section h3 { + margin: 0 0 10px 0; + font-size: 18px; +} + +/* SETTING ITEM */ +.setting-item { + display: flex; + align-items: flex-start; + gap: 12px; + margin-bottom: 8px; + margin-top: 8px; +} + +.setting-item input[type="checkbox"] { + margin: 0; + flex-shrink: 0; + width: 20px; + height: 20px; +} + +.setting-info { + display: flex; + flex-direction: column; +} + +.setting-title { + font-size: 14px; + font-weight: 500; +} + +.setting-info small { + font-size: 12px; + color: var(--settings-subtitle-color); + margin-top: 2px; + font-style: italic; +} + +#theme .settings-title{ + display: flex; +} + +.setting-item select { + width: 70%; + background: #fff; + border: 1px solid #242424; + border-radius: 6px; + padding: 4px 8px; + color: #000; + cursor: pointer; + font-weight: 600; + transition: background 0.3s ease, color 0.3s ease; +} + +.setting-item select:hover, +.setting-item select:focus { + background: #474747; + color: #fff; + outline: none; +} + +/* SELECT */ +.settings-section select { + margin-left: 10px; +} + +/* DETAILS / DROPDOWN */ +details { + margin-bottom: 20px; + padding: 10px 15px; + background: #2a2a2a; + border-radius: 12px; +} + +details[open] { + box-shadow: 0 4px 15px rgba(0,0,0,0.3); +} + +details summary { + cursor: pointer; +} + +/* FOOTER */ +.settings-footer { + margin-top: 20px; + display: flex; + flex-direction: column; + gap: 10px; +} + +#open-json-btn { + padding: 6px 12px; + border-radius: 8px; + border: none; + cursor: pointer; + font-weight: 600; + background-color: var(--form-button-bg-color); + color: #fff; +} + +#experimental-args { + width: 100%; + min-height: 80px; + background-color: #1e1e1e; + border-radius: 8px; + padding: 8px; + color: #fff; + border: 1px solid #333; + resize: vertical; +} + +/* CLOSE BTN */ +.close-btn { + position: absolute; + top: 20px; + right: 20px; + background: none; + border: none; + color: white; + font-size: 24px; + cursor: pointer; + opacity: 0.6; +} + +.close-btn:hover { + opacity: 1; +} + +/* ANIMATION */ +@keyframes popIn { + from { transform: scale(0.95); opacity: 0; } + to { transform: scale(1); opacity: 1; } +} + +@keyframes slideIn { + from { transform: translateX(20px); opacity: 0; } + to { transform: translateX(0); opacity: 1; } +} \ No newline at end of file diff --git a/public/styles/styles.css b/public/styles/styles.css index 6472249..2a4aa3e 100644 --- a/public/styles/styles.css +++ b/public/styles/styles.css @@ -1,12 +1,12 @@ /* Layout */ @import url("layout/form.css"); +@import url("layout/settingsPanel.css"); @import url("layout/container.css"); @import url("layout/header.css"); @import url("layout/videoinfo.css"); /* Components */ @import url("components/checkbox.css"); -@import url("components/themebutton.css"); @import url("components/loader.css"); @import url("theme/themeimport.css"); @@ -49,6 +49,16 @@ body { } +/* Because why not */ +#reference{ + position: fixed; + pointer-events: none; + bottom:0vh; + left: 10px; + font-size: 1em; + color: #b0b0b02f; +} + /* Scrollbar globale pour Chromium/Electron */ body::-webkit-scrollbar { width: 10px; diff --git a/public/styles/theme/chirac-theme.css b/public/styles/theme/chirac-theme.css index daee9f3..2645be5 100644 --- a/public/styles/theme/chirac-theme.css +++ b/public/styles/theme/chirac-theme.css @@ -42,6 +42,16 @@ body.chirac { /* Playlist Color */ --playlist-background-color: #d1d1d1ca; + + /* Settings */ + --settings-button-bg-color: #00196a; + --settings-button-text-color: #dcdcdc; + + --settings-bg-primary-color: #0b0528; + --settings-bg-secondary-color: #1c1055; + + --settings-text-color: #cecece; + --settings-subtitle-color: #adadad; } diff --git a/public/styles/theme/dark-theme.css b/public/styles/theme/dark-theme.css index b259c33..e1bd48f 100644 --- a/public/styles/theme/dark-theme.css +++ b/public/styles/theme/dark-theme.css @@ -36,4 +36,14 @@ body.dark { /* Playlist Color */ --playlist-background-color: #303030; + + /* Settings */ + --settings-button-bg-color: #1e1e1e; + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: #1e1e1e; + --settings-bg-secondary-color: #2a2a2a; + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #aaa; + } diff --git a/public/styles/theme/default-theme.css b/public/styles/theme/default-theme.css deleted file mode 100644 index 6694dc1..0000000 --- a/public/styles/theme/default-theme.css +++ /dev/null @@ -1,43 +0,0 @@ -:root { - /* Couleurs générales */ - --background-color: #001224; /* body background bleu nuit */ - --default-text-color: #eee; /* texte clair principal */ - --subtitle-color: #007bff; /* sous-titres, header p */ - --mp3-text-color: #000000; /* couleur texte checkbox inline */ - - /* Formulaire */ - --form-bg-color: #ffffff; /* fond du formulaire */ - --form-input-bg-color: #f9f9f9; /* fond inputs */ - --form-input-border-color: #cccccc; /* bordure inputs */ - --form-input-border-focus-color: #0056b3; /* bordure focus */ - --form-input-text-color: #333333; /* texte inputs */ - --form-input-placeholder-color: #aaaaaa; /* placeholder */ - --form-button-bg-color: #007bff; /* bouton bg */ - --form-button-text-color: #ffffff; /* texte bouton */ - --form-button-bg-hover-color: #0056b3; /* bouton hover */ - - /* Checkbox */ - --checkbox-bg-default: #cccccc; - --checkbox-bg-checked: #3B82F6; - --checkbox-checkmark-border-color: #E0E0E2; - --checkbox-pulse-color: rgba(59, 130, 246, 0.5); - - /* Download status */ - --download-status-color: #007bff; - - /* Video Info Box */ - --infos-box-color: #0c0140; - --video-info-text-color: #ffffff; - --video-info-heading-color: #007bff; - --video-info-list-color: #cccccc; - --video-info-list-strong-color: #e6e6e6; - --video-info-link-color: #007bff; - --video-info-link-hover-color: #0056b3; - - /* Playlist Color */ - --playlist-background-color: #070823a3; -} - -body.default .download-path #savePath { - color: #ffffff; -} \ No newline at end of file diff --git a/public/styles/theme/drift-theme.css b/public/styles/theme/drift-theme.css index 9d318a7..f55f365 100644 --- a/public/styles/theme/drift-theme.css +++ b/public/styles/theme/drift-theme.css @@ -42,7 +42,17 @@ body.drift { /* Playlist Color */ --playlist-background-color: #424b5cc2; - } + + /* Settings */ + --settings-button-bg-color: #1e222ace; + --settings-button-text-color: #b3b3b4; + + --settings-bg-primary-color: #1e222a; + --settings-bg-secondary-color: #272d38; + + --settings-text-color: #bababa; + --settings-subtitle-color: #cacaca; +} diff --git a/public/styles/theme/fanatic-theme.css b/public/styles/theme/fanatic-theme.css index 3f8ff0c..401fd67 100644 --- a/public/styles/theme/fanatic-theme.css +++ b/public/styles/theme/fanatic-theme.css @@ -36,4 +36,14 @@ body.fanatic{ /* Playlist Color */ --playlist-background-color: #2b2b2b; + + /* Settings */ + --settings-button-bg-color: #1e1e1e; + --settings-button-text-color: #dcdcdc; + + --settings-bg-primary-color: #1e1e1e; + --settings-bg-secondary-color: #2d2d2d; + + --settings-text-color: #cecece; + --settings-subtitle-color: #adadad; } diff --git a/public/styles/theme/light-theme.css b/public/styles/theme/light-theme.css index 862f47d..4b1d2b1 100644 --- a/public/styles/theme/light-theme.css +++ b/public/styles/theme/light-theme.css @@ -36,4 +36,13 @@ body.light { /* Playlist Color */ --playlist-background-color: #c5c5c5b2; + + /* Settings */ + --settings-button-bg-color: #e4e4e4; + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: #cbcbcb; + --settings-bg-secondary-color: #cbcbcb; + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #656565; } diff --git a/public/styles/theme/neon-theme.css b/public/styles/theme/neon-theme.css index 987cd83..63c87da 100644 --- a/public/styles/theme/neon-theme.css +++ b/public/styles/theme/neon-theme.css @@ -43,6 +43,15 @@ body.neon { /* Playlist Color */ --playlist-background-color: #3e3e64; + + /* Settings */ + --settings-button-bg-color: #202038; + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: #242454; + --settings-bg-secondary-color: #2f2f6f; + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #d2d2d2; } body.neon .download-path { diff --git a/public/styles/theme/nf-theme.css b/public/styles/theme/nf-theme.css index 65b086a..5b7ac42 100644 --- a/public/styles/theme/nf-theme.css +++ b/public/styles/theme/nf-theme.css @@ -42,6 +42,15 @@ body.nf { /* Playlist Color */ --playlist-background-color: #4f4f4f; + + /* Settings */ + --settings-button-bg-color: #2a2a2a; + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: #2a2a2a; + --settings-bg-secondary-color: #313131; + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #7a7979; } body.nf .download-path { diff --git a/public/styles/theme/songbird-theme.css b/public/styles/theme/songbird-theme.css index 3eaaab3..976d0cc 100644 --- a/public/styles/theme/songbird-theme.css +++ b/public/styles/theme/songbird-theme.css @@ -42,6 +42,15 @@ body.songbird { /* Playlist Color */ --playlist-background-color: #3f0000; + + /* Settings */ + --settings-button-bg-color: rgba(29, 0, 0, 0.784); + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: #121212; + --settings-bg-secondary-color: #1a1a1a; + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #7a7979; } body.cyberpunk .download-path { diff --git a/public/styles/theme/spicy-theme.css b/public/styles/theme/spicy-theme.css index 3866a59..a001407 100644 --- a/public/styles/theme/spicy-theme.css +++ b/public/styles/theme/spicy-theme.css @@ -36,6 +36,17 @@ body.spicy { /* Playlist Color */ --playlist-background-color: #353232; + + /* Settings */ + --settings-button-bg-color: #1a1a1a; + --settings-button-text-color: #dcdcdc; + + --settings-bg-primary-color: #1a1a1a; + --settings-bg-secondary-color: #292929; + + --settings-text-color: #cecece; + --settings-subtitle-color: #adadad; + } /* Optionnel: background piments */ diff --git a/public/styles/theme/themeimport.css b/public/styles/theme/themeimport.css index eb320a6..7de5d07 100644 --- a/public/styles/theme/themeimport.css +++ b/public/styles/theme/themeimport.css @@ -1,6 +1,5 @@ @import url("chirac-theme.css"); @import url("dark-theme.css"); -@import url("default-theme.css"); @import url("fanatic-theme.css"); @import url("light-theme.css"); @import url("nf-theme.css"); diff --git a/public/styles/variables.css b/public/styles/variables.css index cfbb85d..29362d3 100644 --- a/public/styles/variables.css +++ b/public/styles/variables.css @@ -33,4 +33,14 @@ --video-info-list-strong-color: #000000; --video-info-link-color: #007bff; --video-info-link-hover-color: #0056b3; + + /* Settings */ + --settings-button-bg-color: var(--form-bg-color); + --settings-button-text-color: var(--default-text-color); + + --settings-bg-primary-color: var(--form-bg-color); + --settings-bg-secondary-color: var(--form-bg-color); + --settings-text-color: var(--default-text-color); + --settings-subtitle-color: #aaa; + }