-
-
@Body
diff --git a/Start/Client/Start.Client.csproj b/Start/Client/Start.Client.csproj
index ca3aa70..2e961b1 100644
--- a/Start/Client/Start.Client.csproj
+++ b/Start/Client/Start.Client.csproj
@@ -47,6 +47,7 @@
+
@@ -60,5 +61,6 @@
+
diff --git a/Start/Client/Store/Features/Sidebar/SidebarActions.cs b/Start/Client/Store/Features/Sidebar/SidebarActions.cs
new file mode 100644
index 0000000..350bcfa
--- /dev/null
+++ b/Start/Client/Store/Features/Sidebar/SidebarActions.cs
@@ -0,0 +1,5 @@
+namespace Start.Client.Store.Features.Sidebar {
+ public class ShowSidebarAction { }
+ public class HideSidebarAction { }
+ public class ToggleEditModeAction { }
+}
diff --git a/Start/Client/Store/Features/Sidebar/SidebarReducers.cs b/Start/Client/Store/Features/Sidebar/SidebarReducers.cs
new file mode 100644
index 0000000..fe028e8
--- /dev/null
+++ b/Start/Client/Store/Features/Sidebar/SidebarReducers.cs
@@ -0,0 +1,27 @@
+using Fluxor;
+using Start.Client.Store.State;
+
+namespace Start.Client.Store.Features.Sidebar {
+ public static class SidebarReducers {
+ [ReducerMethod(typeof(ShowSidebarAction))]
+ public static RootState ShowSidebar(RootState state) {
+ return state with {
+ ShowSidebar = true
+ };
+ }
+
+ [ReducerMethod(typeof(HideSidebarAction))]
+ public static RootState HideSidebar(RootState state) {
+ return state with {
+ ShowSidebar = false
+ };
+ }
+
+ [ReducerMethod(typeof(ToggleEditModeAction))]
+ public static RootState ToggleEditMode(RootState state) {
+ return state with {
+ EditMode = !state.EditMode
+ };
+ }
+ }
+}
diff --git a/Start/Client/Store/State/RootState.cs b/Start/Client/Store/State/RootState.cs
index ffce2fa..7c35d9c 100644
--- a/Start/Client/Store/State/RootState.cs
+++ b/Start/Client/Store/State/RootState.cs
@@ -8,6 +8,9 @@ namespace Start.Client.Store.State {
public ContainerListState ContainerListState { get; init; }
public CurrentContainerState CurrentContainerState { get; init; }
+ public bool ShowSidebar { get; init; }
+ public bool EditMode { get; init; }
+
public RootState() {
this.ContainerListState = new ContainerListState();
this.CurrentContainerState = new CurrentContainerState();
diff --git a/Start/Client/wwwroot/css/app.css b/Start/Client/wwwroot/css/app.css
index ef425d1..2ef044a 100644
--- a/Start/Client/wwwroot/css/app.css
+++ b/Start/Client/wwwroot/css/app.css
@@ -47,6 +47,65 @@
align-items: center;
}
+
+#sidebar {
+ display: flex;
+ flex-direction: column;
+}
+
+#sidebar #sidebarHeading {
+ padding: 0.5rem 1.5rem;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+}
+
+#sidebar #sidebarHeading h1 {
+ margin: 0;
+}
+
+#sidebar .nav {
+ padding: 0.5rem 1.5rem;
+}
+
+#sidebar #sidebarItems {
+ flex: 1; /* Fill remaining space */
+ overflow-y: auto;
+}
+
+#sidebar .accountActions {
+ border-top: solid 1px #dadee4;
+}
+
+#sidebar .accountActions .accountName {
+ font-weight: bold;
+ margin-bottom: 1em;
+}
+
+.off-canvas .off-canvas-content {
+ padding: 0;
+}
+
+#menubutton .icon {
+ transform: scale(1.5);
+}
+
+#containerTabStrip {
+ width: 100%;
+ display: flex;
+ align-items: center;
+}
+
+#containerTabStrip #menuButton {
+ flex: 0 0 auto;
+ margin-right: 1em;
+}
+
+#containerTabStrip .containerList {
+ flex: 1 0 0;
+}
+
#bookmarkGroups {
margin-top: 1em;
margin-left: auto;
@@ -71,7 +130,7 @@
}
}
-@media screen and (min-width: 1280px) {
+@media screen and (min-width: 1440) {
#bookmarkGroups {
grid-template-columns: repeat(3, 1fr);
width: 70%;
@@ -113,6 +172,5 @@ li.noBookmarksItem {
}
button.addBookmarkButton {
- float: right;
- margin-top: 0.5em;
+ width: 100%;
}
diff --git a/Start/Client/wwwroot/index.html b/Start/Client/wwwroot/index.html
index 0aedfe4..c81bd2a 100644
--- a/Start/Client/wwwroot/index.html
+++ b/Start/Client/wwwroot/index.html
@@ -10,6 +10,7 @@
+