2026-04-08 20:39:12 +00:00
|
|
|
import * as React from "bloatless-react";
|
|
|
|
|
|
|
|
|
|
import { translations } from "../translations";
|
2026-04-08 21:03:36 +00:00
|
|
|
import SettingsViewModel, {
|
|
|
|
|
SettingsModalPages,
|
|
|
|
|
} from "../../ViewModel/Global/settingsViewModel";
|
|
|
|
|
import { SplitModal } from "../Components/splitModal";
|
2026-04-08 20:39:12 +00:00
|
|
|
|
|
|
|
|
export function SettingsModal(settingsViewModel: SettingsViewModel) {
|
|
|
|
|
return (
|
2026-04-08 21:03:36 +00:00
|
|
|
<div
|
|
|
|
|
class="modal"
|
|
|
|
|
toggle:open={settingsViewModel.isShowingSettingsModal}
|
|
|
|
|
>
|
2026-04-08 20:39:12 +00:00
|
|
|
<div style="max-width: 64rem">
|
2026-04-08 21:03:36 +00:00
|
|
|
<main class="padding-0">
|
|
|
|
|
{SplitModal(
|
|
|
|
|
new React.State(SettingsLeftPane(settingsViewModel)),
|
|
|
|
|
new React.State(<span>settings</span>),
|
|
|
|
|
new React.State(""),
|
|
|
|
|
)}
|
|
|
|
|
</main>
|
2026-04-08 20:39:12 +00:00
|
|
|
<button on:click={settingsViewModel.hideSettingsModal}>
|
|
|
|
|
{translations.general.closeButton}
|
|
|
|
|
<span class="icon">close</span>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
2026-04-08 21:03:36 +00:00
|
|
|
|
|
|
|
|
function SettingsLeftPane(settingsViewModel: SettingsViewModel) {
|
|
|
|
|
return (
|
|
|
|
|
<div class="flex-column">
|
|
|
|
|
{SettingsPaneButton(
|
|
|
|
|
settingsViewModel,
|
|
|
|
|
SettingsModalPages.Appearance,
|
|
|
|
|
translations.settings.pages.appearance,
|
|
|
|
|
)}
|
|
|
|
|
{SettingsPaneButton(
|
|
|
|
|
settingsViewModel,
|
|
|
|
|
SettingsModalPages.Regional,
|
|
|
|
|
translations.settings.pages.regional,
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function SettingsPaneButton(
|
|
|
|
|
settingsViewModel: SettingsViewModel,
|
|
|
|
|
page: SettingsModalPages,
|
|
|
|
|
label: string,
|
|
|
|
|
) {
|
|
|
|
|
const isSelected = React.createProxyState(
|
|
|
|
|
[settingsViewModel.selectedModalPage],
|
|
|
|
|
() => settingsViewModel.selectedModalPage.value == page,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<button
|
|
|
|
|
toggle:selected={isSelected}
|
|
|
|
|
on:click={() => settingsViewModel.showModalPage(page)}
|
|
|
|
|
>
|
|
|
|
|
{label}
|
|
|
|
|
</button>
|
|
|
|
|
);
|
|
|
|
|
}
|