improve modal styles

This commit is contained in:
marlon-erler
2026-04-08 21:14:37 +00:00
parent 9883160113
commit 3ec8335c9d
8 changed files with 69 additions and 15 deletions
+3
View File
@@ -857,6 +857,9 @@ body[showing-chat] #chat-page-wrapper {
} }
/* src/View/Components/splitModal.css */ /* src/View/Components/splitModal.css */
.modal > div:has(.split-modal[extended]) {
max-width: 64rem;
}
.split-modal { .split-modal {
width: 100%; width: 100%;
height: 100%; height: 100%;
+41 -10
View File
@@ -2751,7 +2751,8 @@
settings: { settings: {
pages: { pages: {
appearance: "Appearance", appearance: "Appearance",
regional: "Language & Region" regional: "Language+Region",
info: "About Comms"
} }
}, },
connectionModal: { connectionModal: {
@@ -2950,6 +2951,13 @@
addChatPlaceholder: "Chat hinzuf\xFCgen", addChatPlaceholder: "Chat hinzuf\xFCgen",
addChatButton: "Chat hinzuf\xFCgen" addChatButton: "Chat hinzuf\xFCgen"
}, },
settings: {
pages: {
appearance: "Erscheinungsbild",
regional: "Sprache+Region",
info: "\xDCber Comms"
}
},
connectionModal: { connectionModal: {
connectionModalHeadline: "Verbindungen verwalten", connectionModalHeadline: "Verbindungen verwalten",
connectButtonAudioLabel: "verbinden" connectButtonAudioLabel: "verbinden"
@@ -3129,6 +3137,13 @@
addChatPlaceholder: "A\xF1adir chat", addChatPlaceholder: "A\xF1adir chat",
addChatButton: "A\xF1adir chat" addChatButton: "A\xF1adir chat"
}, },
settings: {
pages: {
appearance: "Aspecto",
regional: "Idioma+Regi\xF3n",
info: "Sobre Comms"
}
},
connectionModal: { connectionModal: {
connectionModalHeadline: "Gestionar Conexiones", connectionModalHeadline: "Gestionar Conexiones",
connectButtonAudioLabel: "conectar" connectButtonAudioLabel: "conectar"
@@ -6235,8 +6250,8 @@
}; };
// src/View/Components/splitModal.tsx // src/View/Components/splitModal.tsx
function SplitModal(leftView, rightView, scrollButtonLabel) { function SplitModal(leftView, rightView, scrollButtonLabel, extendedStyle = false, navigationState) {
const view = /* @__PURE__ */ createElement("div", { class: "split-modal" }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": leftView }), /* @__PURE__ */ createElement("div", { class: "detail-button-wrapper" }, /* @__PURE__ */ createElement("button", { class: "ghost", "on:click": scrollToDetails }, /* @__PURE__ */ createElement( const view = /* @__PURE__ */ createElement("div", { class: "split-modal", "toggle:extended": extendedStyle }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": leftView }), /* @__PURE__ */ createElement("div", { class: "detail-button-wrapper", "toggle:hidden": navigationState != void 0 }, /* @__PURE__ */ createElement("button", { class: "ghost", "on:click": scrollToDetails }, /* @__PURE__ */ createElement(
"span", "span",
{ {
class: "ellipsis", class: "ellipsis",
@@ -6246,6 +6261,7 @@
function scrollToDetails() { function scrollToDetails() {
view.scrollLeft = view.scrollWidth; view.scrollLeft = view.scrollWidth;
} }
navigationState?.subscribe(scrollToDetails);
return view; return view;
} }
@@ -6281,7 +6297,7 @@
if (isSelected.value == false) return; if (isSelected.value == false) return;
loadItems(); loadItems();
}); });
return /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement( return /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement(
"button", "button",
{ {
class: "width-100 flex-1 clip", class: "width-100 flex-1 clip",
@@ -6292,7 +6308,7 @@
), /* @__PURE__ */ createElement( ), /* @__PURE__ */ createElement(
"div", "div",
{ {
class: "flex-column", class: "flex-column gap",
"children:append": [items, StringToDirectoryItemList] "children:append": [items, StringToDirectoryItemList]
} }
)); ));
@@ -6327,10 +6343,11 @@
)); ));
} }
); );
return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": storageViewModel2.isShowingStorageModal }, /* @__PURE__ */ createElement("div", { style: "max-width: 64rem" }, /* @__PURE__ */ createElement("main", { class: "padding-0" }, SplitModal( return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": storageViewModel2.isShowingStorageModal }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", { class: "padding-0" }, SplitModal(
new State(DirectoryItemList(storageViewModel2)), new State(DirectoryItemList(storageViewModel2)),
detailView, detailView,
storageViewModel2.selectedFileName storageViewModel2.selectedFileName,
true
)), /* @__PURE__ */ createElement("button", { "on:click": storageViewModel2.hideStorageModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))); )), /* @__PURE__ */ createElement("button", { "on:click": storageViewModel2.hideStorageModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close"))));
} }
@@ -6596,15 +6613,29 @@
class: "modal", class: "modal",
"toggle:open": settingsViewModel2.isShowingSettingsModal "toggle:open": settingsViewModel2.isShowingSettingsModal
}, },
/* @__PURE__ */ createElement("div", { style: "max-width: 64rem" }, /* @__PURE__ */ createElement("main", { class: "padding-0" }, SplitModal( /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", { class: "padding-0" }, SplitModal(
new State(SettingsLeftPane(settingsViewModel2)), new State(SettingsLeftPane(settingsViewModel2)),
new State(/* @__PURE__ */ createElement("span", null, "settings")), new State(/* @__PURE__ */ createElement("span", null, "settings")),
new State("") new State(""),
false,
settingsViewModel2.selectedModalPage
)), /* @__PURE__ */ createElement("button", { "on:click": settingsViewModel2.hideSettingsModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close"))) )), /* @__PURE__ */ createElement("button", { "on:click": settingsViewModel2.hideSettingsModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))
); );
} }
function SettingsLeftPane(settingsViewModel2) { function SettingsLeftPane(settingsViewModel2) {
return /* @__PURE__ */ createElement("div", { class: "flex-column" }, SettingsPaneButton(settingsViewModel2, 0 /* Appearance */, translations.settings.pages.appearance), SettingsPaneButton(settingsViewModel2, 1 /* Regional */, translations.settings.pages.regional)); return /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, SettingsPaneButton(
settingsViewModel2,
0 /* Appearance */,
translations.settings.pages.appearance
), SettingsPaneButton(
settingsViewModel2,
1 /* Regional */,
translations.settings.pages.regional
), SettingsPaneButton(
settingsViewModel2,
2 /* Info */,
translations.settings.pages.info
));
} }
function SettingsPaneButton(settingsViewModel2, page, label) { function SettingsPaneButton(settingsViewModel2, page, label) {
const isSelected = createProxyState( const isSelected = createProxyState(
+4
View File
@@ -1,3 +1,7 @@
.modal>div:has(.split-modal[extended]) {
max-width: 64rem;
}
.split-modal { .split-modal {
width: 100%; width: 100%;
height: 100%; height: 100%;
+6 -2
View File
@@ -6,12 +6,14 @@ export function SplitModal(
leftView: React.State<Element>, leftView: React.State<Element>,
rightView: React.State<Element>, rightView: React.State<Element>,
scrollButtonLabel: React.State<string>, scrollButtonLabel: React.State<string>,
extendedStyle: boolean = false,
navigationState?: React.State<any>,
) { ) {
const view = ( const view = (
<div class="split-modal"> <div class="split-modal" toggle:extended={extendedStyle}>
<div> <div>
<div class="scroll-area" children:set={leftView}></div> <div class="scroll-area" children:set={leftView}></div>
<div class="detail-button-wrapper"> <div class="detail-button-wrapper" toggle:hidden={navigationState != undefined}>
<button class="ghost" on:click={scrollToDetails}> <button class="ghost" on:click={scrollToDetails}>
<span <span
class="ellipsis" class="ellipsis"
@@ -29,5 +31,7 @@ export function SplitModal(
view.scrollLeft = view.scrollWidth; view.scrollLeft = view.scrollWidth;
} }
navigationState?.subscribe(scrollToDetails);
return view; return view;
} }
+9 -2
View File
@@ -12,12 +12,14 @@ export function SettingsModal(settingsViewModel: SettingsViewModel) {
class="modal" class="modal"
toggle:open={settingsViewModel.isShowingSettingsModal} toggle:open={settingsViewModel.isShowingSettingsModal}
> >
<div style="max-width: 64rem"> <div>
<main class="padding-0"> <main class="padding-0">
{SplitModal( {SplitModal(
new React.State(SettingsLeftPane(settingsViewModel)), new React.State(SettingsLeftPane(settingsViewModel)),
new React.State(<span>settings</span>), new React.State(<span>settings</span>),
new React.State(""), new React.State(""),
false,
settingsViewModel.selectedModalPage,
)} )}
</main> </main>
<button on:click={settingsViewModel.hideSettingsModal}> <button on:click={settingsViewModel.hideSettingsModal}>
@@ -31,7 +33,7 @@ export function SettingsModal(settingsViewModel: SettingsViewModel) {
function SettingsLeftPane(settingsViewModel: SettingsViewModel) { function SettingsLeftPane(settingsViewModel: SettingsViewModel) {
return ( return (
<div class="flex-column"> <div class="flex-column gap">
{SettingsPaneButton( {SettingsPaneButton(
settingsViewModel, settingsViewModel,
SettingsModalPages.Appearance, SettingsModalPages.Appearance,
@@ -42,6 +44,11 @@ function SettingsLeftPane(settingsViewModel: SettingsViewModel) {
SettingsModalPages.Regional, SettingsModalPages.Regional,
translations.settings.pages.regional, translations.settings.pages.regional,
)} )}
{SettingsPaneButton(
settingsViewModel,
SettingsModalPages.Info,
translations.settings.pages.info,
)}
</div> </div>
); );
} }
+2 -1
View File
@@ -64,12 +64,13 @@ export function StorageModal(storageViewModel: StorageViewModel) {
); );
return ( return (
<div class="modal" toggle:open={storageViewModel.isShowingStorageModal}> <div class="modal" toggle:open={storageViewModel.isShowingStorageModal}>
<div style="max-width: 64rem"> <div>
<main class="padding-0"> <main class="padding-0">
{SplitModal( {SplitModal(
new React.State(DirectoryItemList(storageViewModel)), new React.State(DirectoryItemList(storageViewModel)),
detailView, detailView,
storageViewModel.selectedFileName, storageViewModel.selectedFileName,
true,
)} )}
</main> </main>
<button on:click={storageViewModel.hideStorageModal}> <button on:click={storageViewModel.hideStorageModal}>
+3
View File
@@ -80,6 +80,7 @@ const englishTranslations = {
pages: { pages: {
appearance: "Appearance", appearance: "Appearance",
regional: "Language+Region", regional: "Language+Region",
info: "About Comms",
}, },
}, },
@@ -369,6 +370,7 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
pages: { pages: {
appearance: "Erscheinungsbild", appearance: "Erscheinungsbild",
regional: "Sprache+Region", regional: "Sprache+Region",
info: "Über Comms",
}, },
}, },
@@ -629,6 +631,7 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
pages: { pages: {
appearance: "Aspecto", appearance: "Aspecto",
regional: "Idioma+Región", regional: "Idioma+Región",
info: "Sobre Comms",
}, },
}, },
connectionModal: { connectionModal: {
@@ -65,4 +65,5 @@ export default class SettingsViewModel {
export enum SettingsModalPages { export enum SettingsModalPages {
Appearance, Appearance,
Regional, Regional,
Info,
} }