aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Blazor/Shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/DevHive.Blazor/Shared')
-rw-r--r--src/DevHive.Blazor/Shared/MainLayout.razor17
-rw-r--r--src/DevHive.Blazor/Shared/MainLayout.razor.css70
-rw-r--r--src/DevHive.Blazor/Shared/NavMenu.razor37
-rw-r--r--src/DevHive.Blazor/Shared/NavMenu.razor.css62
-rw-r--r--src/DevHive.Blazor/Shared/SurveyPrompt.razor16
5 files changed, 202 insertions, 0 deletions
diff --git a/src/DevHive.Blazor/Shared/MainLayout.razor b/src/DevHive.Blazor/Shared/MainLayout.razor
new file mode 100644
index 0000000..9415af7
--- /dev/null
+++ b/src/DevHive.Blazor/Shared/MainLayout.razor
@@ -0,0 +1,17 @@
+@inherits LayoutComponentBase
+
+<div class="page">
+ <div class="sidebar">
+ <NavMenu />
+ </div>
+
+ <div class="main">
+ <div class="top-row px-4">
+ <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
+ </div>
+
+ <div class="content px-4">
+ @Body
+ </div>
+ </div>
+</div>
diff --git a/src/DevHive.Blazor/Shared/MainLayout.razor.css b/src/DevHive.Blazor/Shared/MainLayout.razor.css
new file mode 100644
index 0000000..5c663e0
--- /dev/null
+++ b/src/DevHive.Blazor/Shared/MainLayout.razor.css
@@ -0,0 +1,70 @@
+.page {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+}
+
+.main {
+ flex: 1;
+}
+
+.sidebar {
+ background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
+}
+
+.top-row {
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #d6d5d5;
+ justify-content: flex-end;
+ height: 3.5rem;
+ display: flex;
+ align-items: center;
+}
+
+ .top-row ::deep a, .top-row .btn-link {
+ white-space: nowrap;
+ margin-left: 1.5rem;
+ }
+
+ .top-row a:first-child {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+@media (max-width: 640.98px) {
+ .top-row:not(.auth) {
+ display: none;
+ }
+
+ .top-row.auth {
+ justify-content: space-between;
+ }
+
+ .top-row a, .top-row .btn-link {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 641px) {
+ .page {
+ flex-direction: row;
+ }
+
+ .sidebar {
+ width: 250px;
+ height: 100vh;
+ position: sticky;
+ top: 0;
+ }
+
+ .top-row {
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+
+ .main > div {
+ padding-left: 2rem !important;
+ padding-right: 1.5rem !important;
+ }
+}
diff --git a/src/DevHive.Blazor/Shared/NavMenu.razor b/src/DevHive.Blazor/Shared/NavMenu.razor
new file mode 100644
index 0000000..0c6b091
--- /dev/null
+++ b/src/DevHive.Blazor/Shared/NavMenu.razor
@@ -0,0 +1,37 @@
+<div class="top-row pl-4 navbar navbar-dark">
+ <a class="navbar-brand" href="">DevHive.Blazor</a>
+ <button class="navbar-toggler" @onclick="ToggleNavMenu">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+</div>
+
+<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
+ <ul class="nav flex-column">
+ <li class="nav-item px-3">
+ <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
+ <span class="oi oi-home" aria-hidden="true"></span> Home
+ </NavLink>
+ </li>
+ <li class="nav-item px-3">
+ <NavLink class="nav-link" href="counter">
+ <span class="oi oi-plus" aria-hidden="true"></span> Counter
+ </NavLink>
+ </li>
+ <li class="nav-item px-3">
+ <NavLink class="nav-link" href="fetchdata">
+ <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
+ </NavLink>
+ </li>
+ </ul>
+</div>
+
+@code {
+ private bool collapseNavMenu = true;
+
+ private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
+
+ private void ToggleNavMenu()
+ {
+ collapseNavMenu = !collapseNavMenu;
+ }
+}
diff --git a/src/DevHive.Blazor/Shared/NavMenu.razor.css b/src/DevHive.Blazor/Shared/NavMenu.razor.css
new file mode 100644
index 0000000..e681f23
--- /dev/null
+++ b/src/DevHive.Blazor/Shared/NavMenu.razor.css
@@ -0,0 +1,62 @@
+.navbar-toggler {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.top-row {
+ height: 3.5rem;
+ background-color: rgba(0,0,0,0.4);
+}
+
+.navbar-brand {
+ font-size: 1.1rem;
+}
+
+.oi {
+ width: 2rem;
+ font-size: 1.1rem;
+ vertical-align: text-top;
+ top: -2px;
+}
+
+.nav-item {
+ font-size: 0.9rem;
+ padding-bottom: 0.5rem;
+}
+
+ .nav-item:first-of-type {
+ padding-top: 1rem;
+ }
+
+ .nav-item:last-of-type {
+ padding-bottom: 1rem;
+ }
+
+ .nav-item ::deep a {
+ color: #d7d7d7;
+ border-radius: 4px;
+ height: 3rem;
+ display: flex;
+ align-items: center;
+ line-height: 3rem;
+ }
+
+.nav-item ::deep a.active {
+ background-color: rgba(255,255,255,0.25);
+ color: white;
+}
+
+.nav-item ::deep a:hover {
+ background-color: rgba(255,255,255,0.1);
+ color: white;
+}
+
+@media (min-width: 641px) {
+ .navbar-toggler {
+ display: none;
+ }
+
+ .collapse {
+ /* Never collapse the sidebar for wide screens */
+ display: block;
+ }
+}
diff --git a/src/DevHive.Blazor/Shared/SurveyPrompt.razor b/src/DevHive.Blazor/Shared/SurveyPrompt.razor
new file mode 100644
index 0000000..d78f8cf
--- /dev/null
+++ b/src/DevHive.Blazor/Shared/SurveyPrompt.razor
@@ -0,0 +1,16 @@
+<div class="alert alert-secondary mt-4" role="alert">
+ <span class="oi oi-pencil mr-2" aria-hidden="true"></span>
+ <strong>@Title</strong>
+
+ <span class="text-nowrap">
+ Please take our
+ <a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2137813">brief survey</a>
+ </span>
+ and tell us what you think.
+</div>
+
+@code {
+ // Demonstrates how a parent component can supply parameters
+ [Parameter]
+ public string Title { get; set; }
+}