This commit is contained in:
2025-11-10 12:50:28 +01:00
parent 9757fd0c10
commit bf1e5cd107
2 changed files with 128 additions and 73 deletions
+49 -49
View File
@@ -189,7 +189,6 @@ const Sidebar = ({
onSelectTenant,
onOpenSettings,
onUploadFiles,
loading = false,
}) => {
const {
setCollapsed,
@@ -318,6 +317,50 @@ const Sidebar = ({
cycleThemeMode();
}, [cycleThemeMode]);
const themeMenuSection =
typeof neutralHue === 'number' || typeof neutralHue === 'string'
? (
<div className="menu__section">
<div className="menu__heading menu__heading--with-actions">
<span>Theme</span>
<div className="menu__heading-actions">
<button
type="button"
className="icon-button"
onClick={handleThemeModeToggle}
aria-label={`Switch theme (next: ${nextThemeLabel})`}
title={`Theme: ${themeModeLabel} (next: ${nextThemeLabel})`}
>
{themeModeIcon}
</button>
<button
type="button"
className="icon-button"
onClick={handleNeutralHueReset}
aria-label="Reset neutral hue"
title="Reset neutral hue"
>
<RestoreIcon size={16} />
</button>
</div>
</div>
<label className="menu__slider" htmlFor={neutralHueInputId}>
<span className="menu__slider-label">Hue</span>
<input
id={neutralHueInputId}
type="range"
min="0"
max="360"
step="1"
value={neutralHue}
onChange={(event) => handleNeutralHueChange(event.target.value)}
/>
<span className="menu__slider-value">{neutralHue}°</span>
</label>
</div>
)
: null;
const handleSearchInputChange = useCallback(
(event) => {
onSearchChange?.(event.target.value);
@@ -348,6 +391,7 @@ const Sidebar = ({
offset: 6,
});
const showTenantList = tenants.length > 1;
const menuClassName = `menu${!showTenantList && !themeMenuSection ? ' menu--simple' : ''}`;
const toggleTenantMenu = useCallback(() => {
if (!tenantMenuOpen && tenants.length === 0 && onSelectTenant) {
@@ -426,50 +470,6 @@ const Sidebar = ({
);
const rootNode = folderNodes.get('root');
const themeControls =
typeof neutralHue === 'number' || typeof neutralHue === 'string'
? (
<div className="sidebar-section sidebar-theme">
<div className="sidebar-section__header">
<h3>Theme</h3>
<div className="sidebar-section__actions">
<button
type="button"
className="icon-button"
onClick={handleThemeModeToggle}
aria-label={`Switch theme (next: ${nextThemeLabel})`}
title={`Theme: ${themeModeLabel} (next: ${nextThemeLabel})`}
>
{themeModeIcon}
</button>
<button
type="button"
className="icon-button"
onClick={handleNeutralHueReset}
aria-label="Reset neutral hue"
title="Reset neutral hue"
>
<RestoreIcon size={16} />
</button>
</div>
</div>
<label className="sidebar-slider" htmlFor={neutralHueInputId}>
<span className="sidebar-slider__label">Hue</span>
<input
id={neutralHueInputId}
type="range"
min="0"
max="360"
step="1"
value={neutralHue}
onChange={(event) => handleNeutralHueChange(event.target.value)}
/>
<span className="sidebar-slider__value">{neutralHue}°</span>
</label>
</div>
)
: null;
return (
<aside className="sidebar">
<input
@@ -505,7 +505,7 @@ const Sidebar = ({
&& typeof document !== 'undefined'
? createPortal(
<div
className={`menu${showTenantList ? '' : ' menu--simple'}`}
className={menuClassName}
ref={tenantMenuRef}
role="menu"
aria-label="Account menu"
@@ -540,7 +540,7 @@ const Sidebar = ({
<div className="menu__footer">
<button
type="button"
className="menu__settings"
className="menu__button"
onClick={handleSettingsFromMenu}
>
<SettingsIcon size={16} />
@@ -548,13 +548,14 @@ const Sidebar = ({
</button>
<button
type="button"
className="menu__logout"
className="menu__button menu__button--danger"
onClick={handleLogoutFromMenu}
>
<LogoutIcon size={16} />
Log out
</button>
</div>
{themeMenuSection}
</div>,
document.body,
)
@@ -760,7 +761,6 @@ const Sidebar = ({
</ul>
</div>
</div>
{themeControls ? <div className="sidebar__footer">{themeControls}</div> : null}
</aside>
);
};