Revert "Simplify settings preferences layout"

This reverts commit b3b097d265.
This commit is contained in:
2026-04-02 01:08:45 +03:00
parent b3b097d265
commit 02d1d0dc4b
4 changed files with 58 additions and 66 deletions

View File

@@ -31,4 +31,4 @@ Updated: 2026-04-02
15. Added editable System settings with shared validation, a system update API, service/port conflict protection, and UI coverage for local save flows.
16. Simplified the System tab layout by removing the redundant Runtime card and collapsing those fields into a compact settings section.
17. Moved panel auth to server-issued expiring tokens with `sessionStorage` persistence and Compose-configurable credentials/TTL.
18. Reworked Settings to store panel language/theme in `localStorage`, added RU/EN UI switching, made service deletion warn before cascading linked-user removal, and then simplified the preferences UI back into a compact inline strip with a light default theme.
18. Reworked Settings to store panel language/theme in `localStorage`, added RU/EN UI switching, and made service deletion warn before cascading linked-user removal.

View File

@@ -73,52 +73,58 @@ export default function SystemTab({
<section className="page-grid single-column system-grid">
<article className="panel-card">
<div className="card-header">
<h2>{text.settings.title}</h2>
<div className="settings-toolbar">
<label className="field-group compact-field">
<span>{text.common.language}</span>
<select
value={preferences.language}
onChange={(event) =>
onPreferencesChange({
...preferences,
language: event.target.value as PanelLanguage,
})
}
>
<option value="en">{text.common.english}</option>
<option value="ru">{text.common.russian}</option>
</select>
</label>
<label className="field-group compact-field">
<span>{text.common.theme}</span>
<select
value={preferences.theme}
onChange={(event) =>
onPreferencesChange({
...preferences,
theme: event.target.value as PanelTheme,
})
}
>
<option value="light">{getThemeLabel(preferences.language, 'light')}</option>
<option value="dark">{getThemeLabel(preferences.language, 'dark')}</option>
<option value="system">{getThemeLabel(preferences.language, 'system')}</option>
</select>
</label>
<button
type="button"
className="button-secondary"
onClick={() =>
setDraft((current) => ({
...current,
services: [...current.services, createServiceDraft(current.services)],
}))
<h2>{text.common.panelPreferences}</h2>
</div>
<div className="system-fields">
<label className="field-group">
{text.common.language}
<select
value={preferences.language}
onChange={(event) =>
onPreferencesChange({
...preferences,
language: event.target.value as PanelLanguage,
})
}
>
{text.common.addService}
</button>
</div>
<option value="en">{text.common.english}</option>
<option value="ru">{text.common.russian}</option>
</select>
</label>
<label className="field-group">
{text.common.theme}
<select
value={preferences.theme}
onChange={(event) =>
onPreferencesChange({
...preferences,
theme: event.target.value as PanelTheme,
})
}
>
<option value="light">{getThemeLabel(preferences.language, 'light')}</option>
<option value="dark">{getThemeLabel(preferences.language, 'dark')}</option>
<option value="system">{getThemeLabel(preferences.language, 'system')}</option>
</select>
</label>
</div>
</article>
<article className="panel-card">
<div className="card-header">
<h2>{text.settings.title}</h2>
<button
type="button"
className="button-secondary"
onClick={() =>
setDraft((current) => ({
...current,
services: [...current.services, createServiceDraft(current.services)],
}))
}
>
{text.common.addService}
</button>
</div>
<div className="service-editor-list">
{draft.services.map((service, index) => (

View File

@@ -450,23 +450,6 @@ button,
color: var(--muted);
}
.settings-toolbar {
display: flex;
align-items: end;
gap: 12px;
flex-wrap: wrap;
}
.compact-field {
min-width: 220px;
flex: 0 1 240px;
}
.compact-field span {
color: var(--muted);
font-size: 12px;
}
.toolbar-actions {
flex-wrap: wrap;
}
@@ -580,6 +563,10 @@ tbody tr:last-child td {
display: block;
}
.system-settings-card {
gap: 12px;
}
.system-fields,
.service-editor-grid {
display: grid;
@@ -707,8 +694,7 @@ pre {
}
.shell-header,
.table-toolbar,
.settings-toolbar {
.table-toolbar {
flex-direction: column;
align-items: flex-start;
}

View File

@@ -6,11 +6,11 @@ export interface PanelPreferences {
theme: PanelTheme;
}
const PREFERENCES_KEY = '3proxy-ui-panel-preferences-v2';
const PREFERENCES_KEY = '3proxy-ui-panel-preferences';
export const defaultPanelPreferences: PanelPreferences = {
language: 'en',
theme: 'light',
theme: 'system',
};
export function loadPanelPreferences(): PanelPreferences {