mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 18:25:47 +02:00
Feat: Settings Panel
This commit is contained in:
16
main.js
16
main.js
@@ -204,6 +204,22 @@ app.whenReady().then(async () => {
|
|||||||
ipcMain.handle("features", () => {
|
ipcMain.handle("features", () => {
|
||||||
return configFeatures;
|
return configFeatures;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ipcMain.handle("set-feature", (event, { key, value }) => {
|
||||||
|
try {
|
||||||
|
// update mémoire
|
||||||
|
configFeatures[key] = value;
|
||||||
|
|
||||||
|
// écriture directe sur le JSON
|
||||||
|
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() : "";
|
configFeatures.discordRPC ? startRPC() : "";
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ contextBridge.exposeInMainWorld("electronAPI", {
|
|||||||
selectDownloadFolder: () => ipcRenderer.invoke("select-download-folder"),
|
selectDownloadFolder: () => ipcRenderer.invoke("select-download-folder"),
|
||||||
setProgress: (percent) => ipcRenderer.send("set-progress", percent),
|
setProgress: (percent) => ipcRenderer.send("set-progress", percent),
|
||||||
getFeatures: () => ipcRenderer.invoke("features"),
|
getFeatures: () => ipcRenderer.invoke("features"),
|
||||||
|
setFeature: (key, value) => ipcRenderer.invoke("set-feature", { key, value }),
|
||||||
getVersion: () => ipcRenderer.invoke("version"),
|
getVersion: () => ipcRenderer.invoke("version"),
|
||||||
getValidatedDownloadPath: (path) => ipcRenderer.invoke("validate-download-path", path)
|
getValidatedDownloadPath: (path) => ipcRenderer.invoke("validate-download-path", path)
|
||||||
});
|
});
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
2
public/assets/icon/settings.svg
Normal file
2
public/assets/icon/settings.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><title>ionicons-v5-q</title><path d="M262.29,192.31a64,64,0,1,0,57.4,57.4A64.13,64.13,0,0,0,262.29,192.31ZM416.39,256a154.34,154.34,0,0,1-1.53,20.79l45.21,35.46A10.81,10.81,0,0,1,462.52,326l-42.77,74a10.81,10.81,0,0,1-13.14,4.59l-44.9-18.08a16.11,16.11,0,0,0-15.17,1.75A164.48,164.48,0,0,1,325,400.8a15.94,15.94,0,0,0-8.82,12.14l-6.73,47.89A11.08,11.08,0,0,1,298.77,470H213.23a11.11,11.11,0,0,1-10.69-8.87l-6.72-47.82a16.07,16.07,0,0,0-9-12.22,155.3,155.3,0,0,1-21.46-12.57,16,16,0,0,0-15.11-1.71l-44.89,18.07a10.81,10.81,0,0,1-13.14-4.58l-42.77-74a10.8,10.8,0,0,1,2.45-13.75l38.21-30a16.05,16.05,0,0,0,6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16,16,0,0,0-6.07-13.94l-38.19-30A10.81,10.81,0,0,1,49.48,186l42.77-74a10.81,10.81,0,0,1,13.14-4.59l44.9,18.08a16.11,16.11,0,0,0,15.17-1.75A164.48,164.48,0,0,1,187,111.2a15.94,15.94,0,0,0,8.82-12.14l6.73-47.89A11.08,11.08,0,0,1,213.23,42h85.54a11.11,11.11,0,0,1,10.69,8.87l6.72,47.82a16.07,16.07,0,0,0,9,12.22,155.3,155.3,0,0,1,21.46,12.57,16,16,0,0,0,15.11,1.71l44.89-18.07a10.81,10.81,0,0,1,13.14,4.58l42.77,74a10.8,10.8,0,0,1-2.45,13.75l-38.21,30a16.05,16.05,0,0,0-6.05,14.08C416.17,247.67,416.39,251.83,416.39,256Z" style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -23,7 +23,6 @@
|
|||||||
<button id="logs-btn" title="Logs">Logs</button>
|
<button id="logs-btn" title="Logs">Logs</button>
|
||||||
<button id="website-btn" title="Website">Website</button>
|
<button id="website-btn" title="Website">Website</button>
|
||||||
<button id="wiki-btn" title="Wiki">Wiki</button>
|
<button id="wiki-btn" title="Wiki">Wiki</button>
|
||||||
<button id="config-btn" title="Configuration">Configuration</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="window-controls">
|
<div class="window-controls">
|
||||||
<button id="minimize-btn" title="Réduire"><img src="assets/icon/minimize.svg"></button>
|
<button id="minimize-btn" title="Réduire"><img src="assets/icon/minimize.svg"></button>
|
||||||
@@ -31,18 +30,167 @@
|
|||||||
<button id="close-btn" title="Fermer"><img src="assets/icon/close.svg"></button>
|
<button id="close-btn" title="Fermer"><img src="assets/icon/close.svg"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="theme-switcher" id="theme-switcher" style="display: none;">
|
|
||||||
<label for="themeSelect">Thème :</label>
|
|
||||||
<select id="themeSelect" aria-label="Choisir le thème"></select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button id="settings-button" class="settings-button" onclick="openPanel()"> <img src="assets/icon/settings.png"> </button>
|
<button class="settings-button" id="settings-button">
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><title>ionicons-v5-q</title><path d="M262.29,192.31a64,64,0,1,0,57.4,57.4A64.13,64.13,0,0,0,262.29,192.31ZM416.39,256a154.34,154.34,0,0,1-1.53,20.79l45.21,35.46A10.81,10.81,0,0,1,462.52,326l-42.77,74a10.81,10.81,0,0,1-13.14,4.59l-44.9-18.08a16.11,16.11,0,0,0-15.17,1.75A164.48,164.48,0,0,1,325,400.8a15.94,15.94,0,0,0-8.82,12.14l-6.73,47.89A11.08,11.08,0,0,1,298.77,470H213.23a11.11,11.11,0,0,1-10.69-8.87l-6.72-47.82a16.07,16.07,0,0,0-9-12.22,155.3,155.3,0,0,1-21.46-12.57,16,16,0,0,0-15.11-1.71l-44.89,18.07a10.81,10.81,0,0,1-13.14-4.58l-42.77-74a10.8,10.8,0,0,1,2.45-13.75l38.21-30a16.05,16.05,0,0,0,6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16,16,0,0,0-6.07-13.94l-38.19-30A10.81,10.81,0,0,1,49.48,186l42.77-74a10.81,10.81,0,0,1,13.14-4.59l44.9,18.08a16.11,16.11,0,0,0,15.17-1.75A164.48,164.48,0,0,1,187,111.2a15.94,15.94,0,0,0,8.82-12.14l6.73-47.89A11.08,11.08,0,0,1,213.23,42h85.54a11.11,11.11,0,0,1,10.69,8.87l6.72,47.82a16.07,16.07,0,0,0,9,12.22,155.3,155.3,0,0,1,21.46,12.57,16,16,0,0,0,15.11,1.71l44.89-18.07a10.81,10.81,0,0,1,13.14,4.58l42.77,74a10.8,10.8,0,0,1-2.45,13.75l-38.21,30a16.05,16.05,0,0,0-6.05,14.08C416.17,247.67,416.39,251.83,416.39,256Z" style="fill:none;stroke:var(--settings-button-text-color);stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
<div class="settings-panel" id="settings-panel" style="display: none;">
|
|
||||||
<h3> Settings Panel </h3>
|
<div class="settings-panel" id="settings-panel">
|
||||||
<div class="container">
|
<div class="settings-modal">
|
||||||
|
|
||||||
|
<button class="close-btn" onclick="closePanel()">✕</button>
|
||||||
|
|
||||||
|
<div class="settings-title">
|
||||||
|
<h2>SETTINGS</h2>
|
||||||
|
<p style="font-size: 0.8em;">Changes are saved automatically. <br> Somes changes could need a restart</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Basic Settings visibles -->
|
||||||
|
<div class="settings-section">
|
||||||
|
<h3>Basic Settings</h3>
|
||||||
|
|
||||||
|
<div class="setting-item" id="theme" style="margin-left: 32px;">
|
||||||
|
<div class="setting-info">
|
||||||
|
<div style="display: flex;">
|
||||||
|
<span class="setting-title">Thème</span>
|
||||||
|
|
||||||
|
<select id="themeSelect" data-key="theme" aria-label="Choisir le thème">
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<small>Choose the theme of the application</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="discordRPC" id="discordRPC">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Discord RPC</span>
|
||||||
|
<small>Enable/disable Discord Rich Presence for your app.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoDownloadPlaylist" id="autoDownloadPlaylist">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Download Playlist automatically?</span>
|
||||||
|
<small>If enabled, playlists will download without confirmation.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="notifySystem" id="notifySystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Notification at the end</span>
|
||||||
|
<small>Notify when a download finishes.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="customTopBar" id="customTopBar">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Custom Top bar</span>
|
||||||
|
<small>Use this if the topbar is missing or you prefer a custom one.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoCheckInfo" id="autoCheckInfo">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Auto Fetch Info</span>
|
||||||
|
<small>Automatically fetch information for new downloads.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Advanced Settings -->
|
||||||
|
<details class="settings-section">
|
||||||
|
<summary>Advanced Settings</summary>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoUpdate" id="autoUpdate">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Auto Update</span>
|
||||||
|
<small>Enable automatic app updates.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="outputTitleCheck" id="outputTitleCheck">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Output title (special chars)</span>
|
||||||
|
<small>Check for unusual characters in output titles.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="addMetadata" id="addMetadata">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Add Metadata</span>
|
||||||
|
<small>Include metadata in downloaded files.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="addThumbnail" id="addThumbnail">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Add Thumbnail</span>
|
||||||
|
<small>Include thumbnails in downloaded files.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item" style="margin-left: 32px; margin-top: 20px;">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Custom Codec</span>
|
||||||
|
<select data-key="customCodec">
|
||||||
|
<option value="h264">H264</option>
|
||||||
|
<option value="vp9">VP9</option>
|
||||||
|
<option value="av1">AV1</option>
|
||||||
|
</select>
|
||||||
|
<small>Choose your preferred video codec.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<!-- Developer Settings -->
|
||||||
|
<details class="settings-section">
|
||||||
|
<summary>Developer Settings</summary>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="downloadSystem" id="downloadSystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Download System</span>
|
||||||
|
<small>Enable/disable the internal download system.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="logSystem" id="logSystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Log System</span>
|
||||||
|
<small>Enable logging system.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="verboseLogs" id="verboseLogs">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Verbose Logs</span>
|
||||||
|
<small>Show verbose logs for debugging purposes.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<div class="settings-footer">
|
||||||
|
<button id="open-json-btn">Open JSON Configuration</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -106,6 +254,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span id="version-badge" class="version-badge"></span>
|
<span id="version-badge" class="version-badge"></span>
|
||||||
|
|
||||||
|
<h2 id="reference"> Because Why Not ? </h2>
|
||||||
|
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script src="script/custompath.js"></script>
|
<script src="script/custompath.js"></script>
|
||||||
|
|||||||
@@ -1,7 +1,50 @@
|
|||||||
const settingsButton = document.getElementById("settings-button")
|
const settingsPanel = document.getElementById("settings-panel");
|
||||||
const settingsPanel = document.getElementById("settings-panel")
|
const settingsModal = document.querySelector(".settings-modal");
|
||||||
|
|
||||||
function openPanel(){
|
const settingsButton = document.getElementById("settings-button");
|
||||||
settingsPanel.style.display = "block";
|
|
||||||
console.log("Click")
|
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();
|
||||||
|
|||||||
@@ -1,33 +1,234 @@
|
|||||||
.settings-button{
|
/* SETTINGS BUTTON */
|
||||||
display:flex;
|
.settings-button {
|
||||||
background-color: rgba(219, 219, 219, 0.89);
|
display: flex;
|
||||||
border-radius: 12px;
|
align-items: center;
|
||||||
padding: 5px;
|
justify-content: center;
|
||||||
transition: all ease-in-out 0.2s;
|
position: fixed;
|
||||||
position: absolute;
|
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;
|
top: 60px;
|
||||||
right: 40px;
|
right: 40px;
|
||||||
border: none;
|
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-button img{
|
.settings-panel::-webkit-scrollbar {
|
||||||
width: 50px;
|
width: 0px;
|
||||||
height: 50px;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-button:hover{
|
.settings-modal {
|
||||||
transform: scale(1.2);
|
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;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-button:active{
|
/* FOOTER */
|
||||||
transform: scale(0.9);
|
.settings-footer {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-panel{
|
#open-json-btn {
|
||||||
position: absolute;
|
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%;
|
width: 100%;
|
||||||
height: 100%;
|
min-height: 80px;
|
||||||
background-color: red;
|
background-color: #1e1e1e;
|
||||||
z-index: 9999999;
|
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; }
|
||||||
}
|
}
|
||||||
@@ -33,4 +33,14 @@
|
|||||||
--video-info-list-strong-color: #000000;
|
--video-info-list-strong-color: #000000;
|
||||||
--video-info-link-color: #007bff;
|
--video-info-link-color: #007bff;
|
||||||
--video-info-link-hover-color: #0056b3;
|
--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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user