From 42d93a9e69edea2834b354b006621ff1f4013434 Mon Sep 17 00:00:00 2001
From: Ruslan Rabadanov <ruslanrabadanov2101@gmail.com>
Date: Fri, 14 Feb 2025 23:33:17 +0100
Subject: [PATCH 1/5] FE-2 Generate general components; Define css variables;
 Add routing

---
 public/favicon.ico                            | Bin 15086 -> 125726 bytes
 src/app/api/.gitkeep                          |   0
 src/app/app.component.html                    | 339 +-----------------
 src/app/app.component.ts                      |  10 +-
 src/app/app.config.ts                         |   8 +-
 src/app/app.routes.ts                         |  29 +-
 .../configuration.component.html              |   1 +
 .../configuration.component.scss              |   0
 .../configuration.component.spec.ts           |  23 ++
 .../configuration/configuration.component.ts  |  11 +
 .../dashboard/dashboard.component.html        |   1 +
 .../dashboard/dashboard.component.scss        |   0
 .../dashboard/dashboard.component.spec.ts     |  23 ++
 .../dashboard/dashboard.component.ts          |  11 +
 .../components/header/header.component.html   |   1 +
 .../components/header/header.component.scss   |   0
 .../header/header.component.spec.ts           |  23 ++
 src/app/components/header/header.component.ts |  11 +
 .../not-found/not-found.component.html        |   1 +
 .../not-found/not-found.component.scss        |   0
 .../not-found/not-found.component.spec.ts     |  23 ++
 .../not-found/not-found.component.ts          |  11 +
 .../components/sidenav/sidenav.component.html |   1 +
 .../components/sidenav/sidenav.component.scss |   0
 .../sidenav/sidenav.component.spec.ts         |  23 ++
 .../components/sidenav/sidenav.component.ts   |  11 +
 src/app/service/.gitkeep                      |   0
 src/index.html                                |  20 +-
 src/styles.scss                               |   1 -
 src/vars.scss                                 |  38 ++
 tsconfig.app.json                             |   4 +-
 tsconfig.spec.json                            |   4 +-
 32 files changed, 265 insertions(+), 363 deletions(-)
 create mode 100644 src/app/api/.gitkeep
 create mode 100644 src/app/components/configuration/configuration.component.html
 create mode 100644 src/app/components/configuration/configuration.component.scss
 create mode 100644 src/app/components/configuration/configuration.component.spec.ts
 create mode 100644 src/app/components/configuration/configuration.component.ts
 create mode 100644 src/app/components/dashboard/dashboard.component.html
 create mode 100644 src/app/components/dashboard/dashboard.component.scss
 create mode 100644 src/app/components/dashboard/dashboard.component.spec.ts
 create mode 100644 src/app/components/dashboard/dashboard.component.ts
 create mode 100644 src/app/components/header/header.component.html
 create mode 100644 src/app/components/header/header.component.scss
 create mode 100644 src/app/components/header/header.component.spec.ts
 create mode 100644 src/app/components/header/header.component.ts
 create mode 100644 src/app/components/not-found/not-found.component.html
 create mode 100644 src/app/components/not-found/not-found.component.scss
 create mode 100644 src/app/components/not-found/not-found.component.spec.ts
 create mode 100644 src/app/components/not-found/not-found.component.ts
 create mode 100644 src/app/components/sidenav/sidenav.component.html
 create mode 100644 src/app/components/sidenav/sidenav.component.scss
 create mode 100644 src/app/components/sidenav/sidenav.component.spec.ts
 create mode 100644 src/app/components/sidenav/sidenav.component.ts
 create mode 100644 src/app/service/.gitkeep
 create mode 100644 src/vars.scss

diff --git a/public/favicon.ico b/public/favicon.ico
index 57614f9c967596fad0a3989bec2b1deff33034f6..d38132da18bf60cabe76b7fc33d2bcbc51c78e17 100644
GIT binary patch
literal 125726
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%0AZj6(r9WeqKfKRaIeD5O*
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

literal 15086
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
Nr__JTFzvMr^FKp4S3v*(

diff --git a/src/app/api/.gitkeep b/src/app/api/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 36093e1..4cf3a0b 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,336 +1,3 @@
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-<!-- * * * * * * * * * * * The content below * * * * * * * * * * * -->
-<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * -->
-<!-- * * * * * * * * * * and can be replaced.  * * * * * * * * * * -->
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-<!-- * * * * * * * * * Delete the template below * * * * * * * * * -->
-<!-- * * * * * * * to get started with your project! * * * * * * * -->
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-
-<style>
-  :host {
-    --bright-blue: oklch(51.01% 0.274 263.83);
-    --electric-violet: oklch(53.18% 0.28 296.97);
-    --french-violet: oklch(47.66% 0.246 305.88);
-    --vivid-pink: oklch(69.02% 0.277 332.77);
-    --hot-red: oklch(61.42% 0.238 15.34);
-    --orange-red: oklch(63.32% 0.24 31.68);
-
-    --gray-900: oklch(19.37% 0.006 300.98);
-    --gray-700: oklch(36.98% 0.014 302.71);
-    --gray-400: oklch(70.9% 0.015 304.04);
-
-    --red-to-pink-to-purple-vertical-gradient: linear-gradient(
-      180deg,
-      var(--orange-red) 0%,
-      var(--vivid-pink) 50%,
-      var(--electric-violet) 100%
-    );
-
-    --red-to-pink-to-purple-horizontal-gradient: linear-gradient(
-      90deg,
-      var(--orange-red) 0%,
-      var(--vivid-pink) 50%,
-      var(--electric-violet) 100%
-    );
-
-    --pill-accent: var(--bright-blue);
-
-    font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
-      Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
-      "Segoe UI Symbol";
-    box-sizing: border-box;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-  }
-
-  h1 {
-    font-size: 3.125rem;
-    color: var(--gray-900);
-    font-weight: 500;
-    line-height: 100%;
-    letter-spacing: -0.125rem;
-    margin: 0;
-    font-family: "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
-      Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
-      "Segoe UI Symbol";
-  }
-
-  p {
-    margin: 0;
-    color: var(--gray-700);
-  }
-
-  main {
-    width: 100%;
-    min-height: 100%;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    padding: 1rem;
-    box-sizing: inherit;
-    position: relative;
-  }
-
-  .angular-logo {
-    max-width: 9.2rem;
-  }
-
-  .content {
-    display: flex;
-    justify-content: space-around;
-    width: 100%;
-    max-width: 700px;
-    margin-bottom: 3rem;
-  }
-
-  .content h1 {
-    margin-top: 1.75rem;
-  }
-
-  .content p {
-    margin-top: 1.5rem;
-  }
-
-  .divider {
-    width: 1px;
-    background: var(--red-to-pink-to-purple-vertical-gradient);
-    margin-inline: 0.5rem;
-  }
-
-  .pill-group {
-    display: flex;
-    flex-direction: column;
-    align-items: start;
-    flex-wrap: wrap;
-    gap: 1.25rem;
-  }
-
-  .pill {
-    display: flex;
-    align-items: center;
-    --pill-accent: var(--bright-blue);
-    background: color-mix(in srgb, var(--pill-accent) 5%, transparent);
-    color: var(--pill-accent);
-    padding-inline: 0.75rem;
-    padding-block: 0.375rem;
-    border-radius: 2.75rem;
-    border: 0;
-    transition: background 0.3s ease;
-    font-family: var(--inter-font);
-    font-size: 0.875rem;
-    font-style: normal;
-    font-weight: 500;
-    line-height: 1.4rem;
-    letter-spacing: -0.00875rem;
-    text-decoration: none;
-  }
-
-  .pill:hover {
-    background: color-mix(in srgb, var(--pill-accent) 15%, transparent);
-  }
-
-  .pill-group .pill:nth-child(6n + 1) {
-    --pill-accent: var(--bright-blue);
-  }
-  .pill-group .pill:nth-child(6n + 2) {
-    --pill-accent: var(--french-violet);
-  }
-  .pill-group .pill:nth-child(6n + 3),
-  .pill-group .pill:nth-child(6n + 4),
-  .pill-group .pill:nth-child(6n + 5) {
-    --pill-accent: var(--hot-red);
-  }
-
-  .pill-group svg {
-    margin-inline-start: 0.25rem;
-  }
-
-  .social-links {
-    display: flex;
-    align-items: center;
-    gap: 0.73rem;
-    margin-top: 1.5rem;
-  }
-
-  .social-links path {
-    transition: fill 0.3s ease;
-    fill: var(--gray-400);
-  }
-
-  .social-links a:hover svg path {
-    fill: var(--gray-900);
-  }
-
-  @media screen and (max-width: 650px) {
-    .content {
-      flex-direction: column;
-      width: max-content;
-    }
-
-    .divider {
-      height: 1px;
-      width: 100%;
-      background: var(--red-to-pink-to-purple-horizontal-gradient);
-      margin-block: 1.5rem;
-    }
-  }
-</style>
-
-<main class="main">
-  <div class="content">
-    <div class="left-side">
-      <svg
-        xmlns="http://www.w3.org/2000/svg"
-        viewBox="0 0 982 239"
-        fill="none"
-        class="angular-logo"
-      >
-        <g clip-path="url(#a)">
-          <path
-            fill="url(#b)"
-            d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z"
-          />
-          <path
-            fill="url(#c)"
-            d="M388.676 191.625h30.849L363.31 31.828h-35.758l-56.215 159.797h30.848l13.174-39.356h60.061l13.256 39.356Zm-65.461-62.675 21.602-64.311h1.227l21.602 64.311h-44.431Zm126.831-7.527v70.202h-28.23V71.839h27.002v20.374h1.392c2.782-6.71 7.2-12.028 13.255-15.956 6.056-3.927 13.584-5.89 22.503-5.89 8.264 0 15.465 1.8 21.684 5.318 6.137 3.518 10.964 8.673 14.319 15.382 3.437 6.71 5.074 14.81 4.992 24.383v76.175h-28.23v-71.92c0-8.019-2.046-14.237-6.219-18.819-4.173-4.5-9.819-6.791-17.102-6.791-4.91 0-9.328 1.063-13.174 3.272-3.846 2.128-6.792 5.237-9.001 9.328-2.046 4.009-3.191 8.918-3.191 14.728ZM589.233 239c-10.147 0-18.82-1.391-26.103-4.091-7.282-2.7-13.092-6.382-17.511-10.964-4.418-4.582-7.528-9.655-9.164-15.219l25.448-6.136c1.145 2.372 2.782 4.663 4.991 6.954 2.209 2.291 5.155 4.255 8.837 5.81 3.683 1.554 8.428 2.291 14.074 2.291 8.019 0 14.647-1.964 19.884-5.81 5.237-3.845 7.856-10.227 7.856-19.064v-22.665h-1.391c-1.473 2.946-3.601 5.892-6.383 9.001-2.782 3.109-6.464 5.645-10.965 7.691-4.582 2.046-10.228 3.109-17.101 3.109-9.165 0-17.511-2.209-25.039-6.545-7.446-4.337-13.42-10.883-17.757-19.474-4.418-8.673-6.628-19.473-6.628-32.565 0-13.091 2.21-24.301 6.628-33.383 4.419-9.082 10.311-15.955 17.839-20.7 7.528-4.746 15.874-7.037 25.039-7.037 7.037 0 12.846 1.145 17.347 3.518 4.582 2.373 8.182 5.236 10.883 8.51 2.7 3.272 4.746 6.382 6.137 9.327h1.554v-19.8h27.821v121.749c0 10.228-2.454 18.737-7.364 25.447-4.91 6.709-11.538 11.7-20.048 15.055-8.509 3.355-18.165 4.991-28.884 4.991Zm.245-71.266c5.974 0 11.047-1.473 15.302-4.337 4.173-2.945 7.446-7.118 9.573-12.519 2.21-5.482 3.274-12.027 3.274-19.637 0-7.609-1.064-14.155-3.274-19.8-2.127-5.646-5.318-10.064-9.491-13.255-4.174-3.11-9.329-4.746-15.384-4.746s-11.537 1.636-15.792 4.91c-4.173 3.272-7.365 7.772-9.492 13.418-2.128 5.727-3.191 12.191-3.191 19.392 0 7.2 1.063 13.745 3.273 19.228 2.127 5.482 5.318 9.736 9.573 12.764 4.174 3.027 9.41 4.582 15.629 4.582Zm141.56-26.51V71.839h28.23v119.786h-27.412v-21.273h-1.227c-2.7 6.709-7.119 12.191-13.338 16.446-6.137 4.255-13.747 6.382-22.748 6.382-7.855 0-14.81-1.718-20.783-5.237-5.974-3.518-10.72-8.591-14.075-15.382-3.355-6.709-5.073-14.891-5.073-24.464V71.839h28.312v71.921c0 7.609 2.046 13.664 6.219 18.083 4.173 4.5 9.655 6.709 16.365 6.709 4.173 0 8.183-.982 12.111-3.028 3.927-2.045 7.118-5.072 9.655-9.082 2.537-4.091 3.764-9.164 3.764-15.218Zm65.707-109.395v159.796h-28.23V31.828h28.23Zm44.841 162.169c-7.61 0-14.402-1.391-20.457-4.091-6.055-2.7-10.883-6.791-14.32-12.109-3.518-5.319-5.237-11.946-5.237-19.801 0-6.791 1.228-12.355 3.765-16.773 2.536-4.419 5.891-7.937 10.228-10.637 4.337-2.618 9.164-4.664 14.647-6.055 5.4-1.391 11.046-2.373 16.856-3.027 7.037-.737 12.683-1.391 17.102-1.964 4.337-.573 7.528-1.555 9.574-2.782 1.963-1.309 3.027-3.273 3.027-5.973v-.491c0-5.891-1.718-10.391-5.237-13.664-3.518-3.191-8.51-4.828-15.056-4.828-6.955 0-12.356 1.473-16.447 4.5-4.009 3.028-6.71 6.546-8.183 10.719l-26.348-3.764c2.046-7.282 5.483-13.336 10.31-18.328 4.746-4.909 10.638-8.59 17.511-11.045 6.955-2.455 14.565-3.682 22.912-3.682 5.809 0 11.537.654 17.265 2.045s10.965 3.6 15.711 6.71c4.746 3.109 8.51 7.282 11.455 12.6 2.864 5.318 4.337 11.946 4.337 19.883v80.184h-27.166v-16.446h-.9c-1.719 3.355-4.092 6.464-7.201 9.328-3.109 2.864-6.955 5.237-11.619 6.955-4.828 1.718-10.229 2.536-16.529 2.536Zm7.364-20.701c5.646 0 10.556-1.145 14.729-3.354 4.173-2.291 7.364-5.237 9.655-9.001 2.292-3.763 3.355-7.854 3.355-12.273v-14.155c-.9.737-2.373 1.391-4.5 2.046-2.128.654-4.419 1.145-7.037 1.636-2.619.491-5.155.9-7.692 1.227-2.537.328-4.746.655-6.628.901-4.173.572-8.019 1.472-11.292 2.781-3.355 1.31-5.973 3.11-7.855 5.401-1.964 2.291-2.864 5.318-2.864 8.918 0 5.237 1.882 9.164 5.728 11.782 3.682 2.782 8.51 4.091 14.401 4.091Zm64.643 18.328V71.839h27.412v19.965h1.227c2.21-6.955 5.974-12.274 11.292-16.038 5.319-3.763 11.456-5.645 18.329-5.645 1.555 0 3.355.082 5.237.163 1.964.164 3.601.328 4.91.573v25.938c-1.227-.41-3.109-.819-5.646-1.146a58.814 58.814 0 0 0-7.446-.49c-5.155 0-9.738 1.145-13.829 3.354-4.091 2.209-7.282 5.236-9.655 9.164-2.373 3.927-3.519 8.427-3.519 13.5v70.448h-28.312ZM222.077 39.192l-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z"
-          />
-        </g>
-        <defs>
-          <radialGradient
-            id="c"
-            cx="0"
-            cy="0"
-            r="1"
-            gradientTransform="rotate(118.122 171.182 60.81) scale(205.794)"
-            gradientUnits="userSpaceOnUse"
-          >
-            <stop stop-color="#FF41F8" />
-            <stop offset=".707" stop-color="#FF41F8" stop-opacity=".5" />
-            <stop offset="1" stop-color="#FF41F8" stop-opacity="0" />
-          </radialGradient>
-          <linearGradient
-            id="b"
-            x1="0"
-            x2="982"
-            y1="192"
-            y2="192"
-            gradientUnits="userSpaceOnUse"
-          >
-            <stop stop-color="#F0060B" />
-            <stop offset="0" stop-color="#F0070C" />
-            <stop offset=".526" stop-color="#CC26D5" />
-            <stop offset="1" stop-color="#7702FF" />
-          </linearGradient>
-          <clipPath id="a"><path fill="#fff" d="M0 0h982v239H0z" /></clipPath>
-        </defs>
-      </svg>
-      <h1>Hello, {{ title }}</h1>
-      <p>Congratulations! Your app is running. 🎉</p>
-    </div>
-    <div class="divider" role="separator" aria-label="Divider"></div>
-    <div class="right-side">
-      <div class="pill-group">
-        @for (item of [
-          { title: 'Explore the Docs', link: 'https://angular.dev' },
-          { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' },
-          { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' },
-          { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' },
-          { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' },
-        ]; track item.title) {
-          <a
-            class="pill"
-            [href]="item.link"
-            target="_blank"
-            rel="noopener"
-          >
-            <span>{{ item.title }}</span>
-            <svg
-              xmlns="http://www.w3.org/2000/svg"
-              height="14"
-              viewBox="0 -960 960 960"
-              width="14"
-              fill="currentColor"
-            >
-              <path
-                d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z"
-              />
-            </svg>
-          </a>
-        }
-      </div>
-      <div class="social-links">
-        <a
-          href="https://github.com/angular/angular"
-          aria-label="Github"
-          target="_blank"
-          rel="noopener"
-        >
-          <svg
-            width="25"
-            height="24"
-            viewBox="0 0 25 24"
-            fill="none"
-            xmlns="http://www.w3.org/2000/svg"
-            alt="Github"
-          >
-            <path
-              d="M12.3047 0C5.50634 0 0 5.50942 0 12.3047C0 17.7423 3.52529 22.3535 8.41332 23.9787C9.02856 24.0946 9.25414 23.7142 9.25414 23.3871C9.25414 23.0949 9.24389 22.3207 9.23876 21.2953C5.81601 22.0377 5.09414 19.6444 5.09414 19.6444C4.53427 18.2243 3.72524 17.8449 3.72524 17.8449C2.61064 17.082 3.81137 17.0973 3.81137 17.0973C5.04697 17.1835 5.69604 18.3647 5.69604 18.3647C6.79321 20.2463 8.57636 19.7029 9.27978 19.3881C9.39052 18.5924 9.70736 18.0499 10.0591 17.7423C7.32641 17.4347 4.45429 16.3765 4.45429 11.6618C4.45429 10.3185 4.9311 9.22133 5.72065 8.36C5.58222 8.04931 5.16694 6.79833 5.82831 5.10337C5.82831 5.10337 6.85883 4.77319 9.2121 6.36459C10.1965 6.09082 11.2424 5.95546 12.2883 5.94931C13.3342 5.95546 14.3801 6.09082 15.3644 6.36459C17.7023 4.77319 18.7328 5.10337 18.7328 5.10337C19.3942 6.79833 18.9789 8.04931 18.8559 8.36C19.6403 9.22133 20.1171 10.3185 20.1171 11.6618C20.1171 16.3888 17.2409 17.4296 14.5031 17.7321C14.9338 18.1012 15.3337 18.8559 15.3337 20.0084C15.3337 21.6552 15.3183 22.978 15.3183 23.3779C15.3183 23.7009 15.5336 24.0854 16.1642 23.9623C21.0871 22.3484 24.6094 17.7341 24.6094 12.3047C24.6094 5.50942 19.0999 0 12.3047 0Z"
-            />
-          </svg>
-        </a>
-        <a
-          href="https://twitter.com/angular"
-          aria-label="Twitter"
-          target="_blank"
-          rel="noopener"
-        >
-          <svg
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-            fill="none"
-            xmlns="http://www.w3.org/2000/svg"
-            alt="Twitter"
-          >
-            <path
-              d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"
-            />
-          </svg>
-        </a>
-        <a
-          href="https://www.youtube.com/channel/UCbn1OgGei-DV7aSRo_HaAiw"
-          aria-label="Youtube"
-          target="_blank"
-          rel="noopener"
-        >
-          <svg
-            width="29"
-            height="20"
-            viewBox="0 0 29 20"
-            fill="none"
-            xmlns="http://www.w3.org/2000/svg"
-            alt="Youtube"
-          >
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              d="M27.4896 1.52422C27.9301 1.96749 28.2463 2.51866 28.4068 3.12258C29.0004 5.35161 29.0004 10 29.0004 10C29.0004 10 29.0004 14.6484 28.4068 16.8774C28.2463 17.4813 27.9301 18.0325 27.4896 18.4758C27.0492 18.9191 26.5 19.2389 25.8972 19.4032C23.6778 20 14.8068 20 14.8068 20C14.8068 20 5.93586 20 3.71651 19.4032C3.11363 19.2389 2.56449 18.9191 2.12405 18.4758C1.68361 18.0325 1.36732 17.4813 1.20683 16.8774C0.613281 14.6484 0.613281 10 0.613281 10C0.613281 10 0.613281 5.35161 1.20683 3.12258C1.36732 2.51866 1.68361 1.96749 2.12405 1.52422C2.56449 1.08095 3.11363 0.76113 3.71651 0.596774C5.93586 0 14.8068 0 14.8068 0C14.8068 0 23.6778 0 25.8972 0.596774C26.5 0.76113 27.0492 1.08095 27.4896 1.52422ZM19.3229 10L11.9036 5.77905V14.221L19.3229 10Z"
-            />
-          </svg>
-        </a>
-      </div>
-    </div>
-  </div>
-</main>
-
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-<!-- * * * * * * * * * * * The content above * * * * * * * * * * * * -->
-<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * * -->
-<!-- * * * * * * * * * * and can be replaced.  * * * * * * * * * * * -->
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-<!-- * * * * * * * * * * End of Placeholder  * * * * * * * * * * * * -->
-<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
-
-
-<router-outlet />
+<app-header></app-header>
+<app-sidenav></app-sidenav>
+<router-outlet></router-outlet>
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index ddff0b9..2ea582b 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,12 +1,12 @@
 import { Component } from '@angular/core';
 import { RouterOutlet } from '@angular/router';
+import { SidenavComponent } from './components/sidenav/sidenav.component';
+import { HeaderComponent } from './components/header/header.component';
 
 @Component({
   selector: 'app-root',
-  imports: [RouterOutlet],
+  imports: [RouterOutlet, SidenavComponent, HeaderComponent],
   templateUrl: './app.component.html',
-  styleUrl: './app.component.scss'
+  styleUrl: './app.component.scss',
 })
-export class AppComponent {
-  title = 'miars-frontend';
-}
+export class AppComponent {}
diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index 79532e6..39e62a6 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -11,10 +11,6 @@ export const appConfig: ApplicationConfig = {
     provideZoneChangeDetection({ eventCoalescing: true }),
     provideRouter(routes),
     provideAnimationsAsync(),
-    providePrimeNG({
-      theme: {
-        preset: Aura
-      }
-    })
-  ]
+    providePrimeNG(),
+  ],
 };
diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index dc39edb..e39c815 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -1,3 +1,30 @@
 import { Routes } from '@angular/router';
 
-export const routes: Routes = [];
+export const routes: Routes = [
+  {
+    path: '',
+    redirectTo: 'configuration',
+    pathMatch: 'full',
+  },
+  {
+    path: 'configuration',
+    loadComponent: () =>
+      import('./components/configuration/configuration.component').then(
+        c => c.ConfigurationComponent
+      ),
+  },
+  {
+    path: 'dashboard',
+    loadComponent: () =>
+      import('./components/dashboard/dashboard.component').then(
+        c => c.DashboardComponent
+      ),
+  },
+  {
+    path: '**',
+    loadComponent: () =>
+      import('./components/not-found/not-found.component').then(
+        c => c.NotFoundComponent
+      ),
+  },
+];
diff --git a/src/app/components/configuration/configuration.component.html b/src/app/components/configuration/configuration.component.html
new file mode 100644
index 0000000..0f57cf4
--- /dev/null
+++ b/src/app/components/configuration/configuration.component.html
@@ -0,0 +1 @@
+<p>configuration works!</p>
diff --git a/src/app/components/configuration/configuration.component.scss b/src/app/components/configuration/configuration.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/configuration/configuration.component.spec.ts b/src/app/components/configuration/configuration.component.spec.ts
new file mode 100644
index 0000000..a719df8
--- /dev/null
+++ b/src/app/components/configuration/configuration.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfigurationComponent } from './configuration.component';
+
+describe('ConfigurationComponent', () => {
+  let component: ConfigurationComponent;
+  let fixture: ComponentFixture<ConfigurationComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [ConfigurationComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(ConfigurationComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/configuration/configuration.component.ts b/src/app/components/configuration/configuration.component.ts
new file mode 100644
index 0000000..9ba0382
--- /dev/null
+++ b/src/app/components/configuration/configuration.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-configuration',
+  imports: [],
+  templateUrl: './configuration.component.html',
+  styleUrl: './configuration.component.scss'
+})
+export class ConfigurationComponent {
+
+}
diff --git a/src/app/components/dashboard/dashboard.component.html b/src/app/components/dashboard/dashboard.component.html
new file mode 100644
index 0000000..9c5fce9
--- /dev/null
+++ b/src/app/components/dashboard/dashboard.component.html
@@ -0,0 +1 @@
+<p>dashboard works!</p>
diff --git a/src/app/components/dashboard/dashboard.component.scss b/src/app/components/dashboard/dashboard.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/dashboard/dashboard.component.spec.ts b/src/app/components/dashboard/dashboard.component.spec.ts
new file mode 100644
index 0000000..30e39a2
--- /dev/null
+++ b/src/app/components/dashboard/dashboard.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { DashboardComponent } from './dashboard.component';
+
+describe('DashboardComponent', () => {
+  let component: DashboardComponent;
+  let fixture: ComponentFixture<DashboardComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [DashboardComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(DashboardComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/dashboard/dashboard.component.ts b/src/app/components/dashboard/dashboard.component.ts
new file mode 100644
index 0000000..14ba3ed
--- /dev/null
+++ b/src/app/components/dashboard/dashboard.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-dashboard',
+  imports: [],
+  templateUrl: './dashboard.component.html',
+  styleUrl: './dashboard.component.scss'
+})
+export class DashboardComponent {
+
+}
diff --git a/src/app/components/header/header.component.html b/src/app/components/header/header.component.html
new file mode 100644
index 0000000..4f5a95d
--- /dev/null
+++ b/src/app/components/header/header.component.html
@@ -0,0 +1 @@
+<p>header works!</p>
diff --git a/src/app/components/header/header.component.scss b/src/app/components/header/header.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/header/header.component.spec.ts b/src/app/components/header/header.component.spec.ts
new file mode 100644
index 0000000..204ed6e
--- /dev/null
+++ b/src/app/components/header/header.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { HeaderComponent } from './header.component';
+
+describe('HeaderComponent', () => {
+  let component: HeaderComponent;
+  let fixture: ComponentFixture<HeaderComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [HeaderComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(HeaderComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/header/header.component.ts b/src/app/components/header/header.component.ts
new file mode 100644
index 0000000..bf69288
--- /dev/null
+++ b/src/app/components/header/header.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-header',
+  imports: [],
+  templateUrl: './header.component.html',
+  styleUrl: './header.component.scss'
+})
+export class HeaderComponent {
+
+}
diff --git a/src/app/components/not-found/not-found.component.html b/src/app/components/not-found/not-found.component.html
new file mode 100644
index 0000000..8071020
--- /dev/null
+++ b/src/app/components/not-found/not-found.component.html
@@ -0,0 +1 @@
+<p>not-found works!</p>
diff --git a/src/app/components/not-found/not-found.component.scss b/src/app/components/not-found/not-found.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/not-found/not-found.component.spec.ts b/src/app/components/not-found/not-found.component.spec.ts
new file mode 100644
index 0000000..5b65d9e
--- /dev/null
+++ b/src/app/components/not-found/not-found.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { NotFoundComponent } from './not-found.component';
+
+describe('NotFoundComponent', () => {
+  let component: NotFoundComponent;
+  let fixture: ComponentFixture<NotFoundComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [NotFoundComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(NotFoundComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/not-found/not-found.component.ts b/src/app/components/not-found/not-found.component.ts
new file mode 100644
index 0000000..ca66fc5
--- /dev/null
+++ b/src/app/components/not-found/not-found.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-not-found',
+  imports: [],
+  templateUrl: './not-found.component.html',
+  styleUrl: './not-found.component.scss'
+})
+export class NotFoundComponent {
+
+}
diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html
new file mode 100644
index 0000000..7c65bd7
--- /dev/null
+++ b/src/app/components/sidenav/sidenav.component.html
@@ -0,0 +1 @@
+<p>sidenav works!</p>
diff --git a/src/app/components/sidenav/sidenav.component.scss b/src/app/components/sidenav/sidenav.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/sidenav/sidenav.component.spec.ts b/src/app/components/sidenav/sidenav.component.spec.ts
new file mode 100644
index 0000000..25f799c
--- /dev/null
+++ b/src/app/components/sidenav/sidenav.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SidenavComponent } from './sidenav.component';
+
+describe('SidenavComponent', () => {
+  let component: SidenavComponent;
+  let fixture: ComponentFixture<SidenavComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [SidenavComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(SidenavComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/sidenav/sidenav.component.ts b/src/app/components/sidenav/sidenav.component.ts
new file mode 100644
index 0000000..f27e7b7
--- /dev/null
+++ b/src/app/components/sidenav/sidenav.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-sidenav',
+  imports: [],
+  templateUrl: './sidenav.component.html',
+  styleUrl: './sidenav.component.scss'
+})
+export class SidenavComponent {
+
+}
diff --git a/src/app/service/.gitkeep b/src/app/service/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/index.html b/src/index.html
index e4220e4..32c997e 100644
--- a/src/index.html
+++ b/src/index.html
@@ -1,13 +1,13 @@
 <!doctype html>
 <html lang="en">
-<head>
-  <meta charset="utf-8">
-  <title>MiarsTemp</title>
-  <base href="/">
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link rel="icon" type="image/x-icon" href="favicon.ico">
-</head>
-<body>
-  <app-root></app-root>
-</body>
+  <head>
+    <meta charset="utf-8" />
+    <title>MiARS</title>
+    <base href="/" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <link rel="icon" type="image/x-icon" href="favicon.ico" />
+  </head>
+  <body>
+    <app-root></app-root>
+  </body>
 </html>
diff --git a/src/styles.scss b/src/styles.scss
index 90d4ee0..e69de29 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -1 +0,0 @@
-/* You can add global styles to this file, and also import other style files */
diff --git a/src/vars.scss b/src/vars.scss
new file mode 100644
index 0000000..c56075d
--- /dev/null
+++ b/src/vars.scss
@@ -0,0 +1,38 @@
+$textPrimary: #520000;
+$error: #ff2525;
+
+$grey {
+  0: #ffffff;
+  10: #f5f6f6;
+  20: #f3eaea;
+  30: #dddddd;
+  50: #c5c5c5;
+  200: #181818;
+  500: #000000;
+}
+
+$text {
+  "none":0;
+  "xxxs":0.1rem;
+  "xxs":0.25rem;
+  "xs":0.5rem;
+  "sm":0.75rem;
+  "md":1rem;
+  "lg":1.25rem;
+  "xl":1.5rem;
+  "xxl":2rem;
+  "xxxl":4rem;
+}
+
+$spacing {
+  "none":0;
+  "xxxs":0.1rem;
+  "xxs":0.25rem;
+  "xs":0.5rem;
+  "sm":0.75rem;
+  "md":1rem;
+  "lg":1.25rem;
+  "xl":1.5rem;
+  "xxl":2rem;
+  "xxxl":4rem;
+}
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 08abcaa..3775b37 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -7,9 +7,9 @@
     "types": []
   },
   "files": [
-    "./src/main.ts"
+    "src/main.ts"
   ],
   "include": [
-    "../miars-frontend/src/**/*.d.ts"
+    "src/**/*.d.ts"
   ]
 }
diff --git a/tsconfig.spec.json b/tsconfig.spec.json
index 8766a20..5fb748d 100644
--- a/tsconfig.spec.json
+++ b/tsconfig.spec.json
@@ -9,7 +9,7 @@
     ]
   },
   "include": [
-    "../miars-frontend/src/**/*.spec.ts",
-    "../miars-frontend/src/**/*.d.ts"
+    "src/**/*.spec.ts",
+    "src/**/*.d.ts"
   ]
 }
-- 
GitLab


From 9532f4a18bd5c648b395ae77cfca6b04d7e7bf42 Mon Sep 17 00:00:00 2001
From: Ruslan Rabadanov <ruslanrabadanov2101@gmail.com>
Date: Sat, 15 Feb 2025 13:37:00 +0100
Subject: [PATCH 2/5] FE-2 Add header with sidenav

---
 angular.json                                  |  2 +
 package-lock.json                             | 26 +++++-
 package.json                                  |  3 +
 src/app/api/configuration.api.ts              |  8 ++
 src/app/api/dashboard.api.ts                  |  8 ++
 src/app/app.component.html                    |  6 +-
 src/app/app.component.scss                    |  9 +++
 src/app/app.config.ts                         |  3 +-
 .../components/header/header.component.html   | 22 ++++-
 .../components/header/header.component.scss   | 52 ++++++++++++
 .../components/sidenav/sidenav.component.html | 23 +++++-
 .../components/sidenav/sidenav.component.scss | 40 +++++++++
 .../components/sidenav/sidenav.component.ts   | 13 +--
 src/app/{api => models}/.gitkeep              |  0
 src/index.html                                |  6 +-
 src/styles.scss                               |  8 ++
 src/vars.scss                                 | 81 +++++++++++--------
 17 files changed, 263 insertions(+), 47 deletions(-)
 create mode 100644 src/app/api/configuration.api.ts
 create mode 100644 src/app/api/dashboard.api.ts
 rename src/app/{api => models}/.gitkeep (100%)

diff --git a/angular.json b/angular.json
index 9c8e09f..db183f8 100644
--- a/angular.json
+++ b/angular.json
@@ -32,6 +32,7 @@
               }
             ],
             "styles": [
+              "@angular/material/prebuilt-themes/rose-red.css",
               "src/styles.scss"
             ],
             "scripts": []
@@ -91,6 +92,7 @@
               }
             ],
             "styles": [
+              "@angular/material/prebuilt-themes/rose-red.css",
               "src/styles.scss"
             ],
             "scripts": []
diff --git a/package-lock.json b/package-lock.json
index a810b37..347cf05 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,14 +9,17 @@
       "version": "0.0.0",
       "dependencies": {
         "@angular/animations": "^19.0.0",
+        "@angular/cdk": "^19.1.4",
         "@angular/common": "^19.0.0",
         "@angular/compiler": "^19.0.0",
         "@angular/core": "^19.0.0",
         "@angular/forms": "^19.0.0",
+        "@angular/material": "^19.1.4",
         "@angular/platform-browser": "^19.0.0",
         "@angular/platform-browser-dynamic": "^19.0.0",
         "@angular/router": "^19.0.0",
         "@primeng/themes": "^19.0.6",
+        "primeicons": "^7.0.0",
         "primeng": "^19.0.6",
         "rxjs": "~7.8.0",
         "tslib": "^2.3.0",
@@ -424,7 +427,6 @@
       "version": "19.1.4",
       "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.1.4.tgz",
       "integrity": "sha512-PyvJ1VbYjW8tVnVHvcasiqI9eNWf8EJnr0in1QWnhpSbpVpVpc4yjbgnu2pTrW9mPo/YjV4pF+qs6E97y9mdYQ==",
-      "peer": true,
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -564,6 +566,23 @@
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
+    "node_modules/@angular/material": {
+      "version": "19.1.4",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-19.1.4.tgz",
+      "integrity": "sha512-bqliTnUnMiTG6Quvk16epiQPZQB0zV/L2ctPinFcP6NhahcQFfahjabUlgMlfBk5qObolJArJr5HCMiOmpOGIQ==",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "@angular/animations": "^19.0.0 || ^20.0.0",
+        "@angular/cdk": "19.1.4",
+        "@angular/common": "^19.0.0 || ^20.0.0",
+        "@angular/core": "^19.0.0 || ^20.0.0",
+        "@angular/forms": "^19.0.0 || ^20.0.0",
+        "@angular/platform-browser": "^19.0.0 || ^20.0.0",
+        "rxjs": "^6.5.3 || ^7.4.0"
+      }
+    },
     "node_modules/@angular/platform-browser": {
       "version": "19.1.6",
       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.1.6.tgz",
@@ -10721,6 +10740,11 @@
         "url": "https://github.com/prettier/prettier?sponsor=1"
       }
     },
+    "node_modules/primeicons": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz",
+      "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw=="
+    },
     "node_modules/primeng": {
       "version": "19.0.6",
       "resolved": "https://registry.npmjs.org/primeng/-/primeng-19.0.6.tgz",
diff --git a/package.json b/package.json
index 36cb02e..19bc81a 100644
--- a/package.json
+++ b/package.json
@@ -11,14 +11,17 @@
   "private": true,
   "dependencies": {
     "@angular/animations": "^19.0.0",
+    "@angular/cdk": "^19.1.4",
     "@angular/common": "^19.0.0",
     "@angular/compiler": "^19.0.0",
     "@angular/core": "^19.0.0",
     "@angular/forms": "^19.0.0",
+    "@angular/material": "^19.1.4",
     "@angular/platform-browser": "^19.0.0",
     "@angular/platform-browser-dynamic": "^19.0.0",
     "@angular/router": "^19.0.0",
     "@primeng/themes": "^19.0.6",
+    "primeicons": "^7.0.0",
     "primeng": "^19.0.6",
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
diff --git a/src/app/api/configuration.api.ts b/src/app/api/configuration.api.ts
new file mode 100644
index 0000000..691912a
--- /dev/null
+++ b/src/app/api/configuration.api.ts
@@ -0,0 +1,8 @@
+import { Injectable } from '@angular/core';
+
+export const CONFIGURATION_API_URL = '/api/v1/configuration';
+
+@Injectable({
+  providedIn: 'root',
+})
+export class ConfigurationApi {}
diff --git a/src/app/api/dashboard.api.ts b/src/app/api/dashboard.api.ts
new file mode 100644
index 0000000..3f08285
--- /dev/null
+++ b/src/app/api/dashboard.api.ts
@@ -0,0 +1,8 @@
+import { Injectable } from '@angular/core';
+
+export const DASHBOARD_API_URL = '/api/v1/dashboard';
+
+@Injectable({
+  providedIn: 'root',
+})
+export class DashboardApi {}
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 4cf3a0b..e6c50cb 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,3 +1,5 @@
 <app-header></app-header>
-<app-sidenav></app-sidenav>
-<router-outlet></router-outlet>
+<section class="content">
+  <app-sidenav></app-sidenav>
+  <router-outlet></router-outlet>
+</section>
diff --git a/src/app/app.component.scss b/src/app/app.component.scss
index e69de29..c0b0c96 100644
--- a/src/app/app.component.scss
+++ b/src/app/app.component.scss
@@ -0,0 +1,9 @@
+@use '../vars';
+@use 'sass:map';
+
+.content {
+  display: flex;
+  height: calc(100vh - vars.$headerHeight);
+  background-color: map.get(vars.$grey, 30);
+  margin-top: vars.$headerHeight;
+}
diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index 39e62a6..35ca21e 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -2,7 +2,6 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
 import { provideRouter } from '@angular/router';
 import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
 import { providePrimeNG } from 'primeng/config';
-import Aura from '@primeng/themes/aura';
 
 import { routes } from './app.routes';
 
@@ -11,6 +10,6 @@ export const appConfig: ApplicationConfig = {
     provideZoneChangeDetection({ eventCoalescing: true }),
     provideRouter(routes),
     provideAnimationsAsync(),
-    providePrimeNG(),
+    providePrimeNG(), provideAnimationsAsync(),
   ],
 };
diff --git a/src/app/components/header/header.component.html b/src/app/components/header/header.component.html
index 4f5a95d..156bfd9 100644
--- a/src/app/components/header/header.component.html
+++ b/src/app/components/header/header.component.html
@@ -1 +1,21 @@
-<p>header works!</p>
+<div class="header-logo">
+  <img src="favicon.ico" alt="logo" height="55px" />
+  <mat-divider [vertical]="true"></mat-divider>
+  <span> MiARS </span>
+</div>
+
+<div class="header-menu">
+  <div class="button-container">
+    <button mat-button>
+      <mat-icon>help</mat-icon>
+      Help
+    </button>
+  </div>
+  <mat-divider [vertical]="true"></mat-divider>
+  <div class="button-container">
+    <button mat-button>
+      <mat-icon>account_circle</mat-icon>
+      Profile
+    </button>
+  </div>
+</div>
diff --git a/src/app/components/header/header.component.scss b/src/app/components/header/header.component.scss
index e69de29..c5a236d 100644
--- a/src/app/components/header/header.component.scss
+++ b/src/app/components/header/header.component.scss
@@ -0,0 +1,52 @@
+@use '../../../vars';
+@use 'sass:map';
+
+:host {
+  height: vars.$headerHeight;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  background-color: map.get(vars.$grey, 0);
+  width: 100%;
+  position: fixed;
+  top: 0;
+  z-index: 10;
+  padding: map.get(vars.$spacing, 'none') map.get(vars.$spacing, 'md');
+
+  .header {
+    &-logo {
+      display: flex;
+      gap: map.get(vars.$spacing, 'md');
+
+      & > span {
+        display: flex;
+        align-items: center;
+        font-family: Kodchasan, sans-serif;
+        font-size: map.get(vars.$text, 'xxl');
+        font-weight: bold;
+        color: vars.$textPrimary;
+      }
+    }
+
+    &-menu {
+      display: flex;
+      gap: map.get(vars.$spacing, 'xs');
+    }
+  }
+
+  .button-container {
+    button {
+      font-size: map.get(vars.$text, 'md');
+
+      & mat-icon {
+        font-size: 30px;
+        width: 30px;
+        height: 30px;
+      }
+    }
+
+    & > * {
+      color: vars.$textPrimary;
+    }
+  }
+}
diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html
index 7c65bd7..12e5c6b 100644
--- a/src/app/components/sidenav/sidenav.component.html
+++ b/src/app/components/sidenav/sidenav.component.html
@@ -1 +1,22 @@
-<p>sidenav works!</p>
+<mat-drawer-container class="sidenav-container" autosize>
+  <mat-drawer #drawer class="sidenav-container__sidenav" mode="side">
+    <div class="sidenav-container__sidenav-content">
+      <p routerLink="configuration">Configuration</p>
+      <p routerLink="dashboard">Dashboard</p>
+    </div>
+  </mat-drawer>
+
+  <div
+    class="sidenav-container__toggle"
+    [ngClass]="
+      drawer.opened
+        ? 'sidenav-container__toggle-close'
+        : 'sidenav-container__toggle-open'
+    ">
+    @if (drawer.opened) {
+      <p-button icon="pi pi-chevron-left" (click)="drawer.toggle()" />
+    } @else {
+      <p-button icon="pi pi-chevron-right" (click)="drawer.toggle()" />
+    }
+  </div>
+</mat-drawer-container>
diff --git a/src/app/components/sidenav/sidenav.component.scss b/src/app/components/sidenav/sidenav.component.scss
index e69de29..48680b3 100644
--- a/src/app/components/sidenav/sidenav.component.scss
+++ b/src/app/components/sidenav/sidenav.component.scss
@@ -0,0 +1,40 @@
+@use '../../../vars';
+@use 'sass:map';
+
+:host {
+  .sidenav-container {
+    height: 100%;
+    background: none;
+
+    &__sidenav {
+      width: vars.$sidenavWidth;
+      background-color: map.get(vars.$grey, 10);
+      border-radius: map.get(vars.$radius, 'none');
+      z-index: 1;
+
+      &-content {
+        position: fixed;
+      }
+    }
+
+    &__toggle {
+      position: fixed;
+      margin-left: -10px;
+
+      margin-top: map.get(vars.$spacing, 'lg');
+      background-color: map.get(vars.$grey, 0);
+      border-radius: map.get(vars.$radius, 'xs');
+      box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+      padding: map.get(vars.$spacing, 'xxs');
+
+      &-open {
+        border-bottom-left-radius: map.get(vars.$radius, 'none');
+        border-top-left-radius: map.get(vars.$radius, 'none');
+        padding-left: map.get(vars.$spacing, 'md');
+      }
+
+      &-close {
+      }
+    }
+  }
+}
diff --git a/src/app/components/sidenav/sidenav.component.ts b/src/app/components/sidenav/sidenav.component.ts
index f27e7b7..71c5194 100644
--- a/src/app/components/sidenav/sidenav.component.ts
+++ b/src/app/components/sidenav/sidenav.component.ts
@@ -1,11 +1,14 @@
 import { Component } from '@angular/core';
+import { MatSidenavModule } from '@angular/material/sidenav';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterLink } from '@angular/router';
+import { Button } from 'primeng/button';
+import { NgClass } from '@angular/common';
 
 @Component({
   selector: 'app-sidenav',
-  imports: [],
+  imports: [MatSidenavModule, MatButtonModule, RouterLink, Button, NgClass],
   templateUrl: './sidenav.component.html',
-  styleUrl: './sidenav.component.scss'
+  styleUrl: './sidenav.component.scss',
 })
-export class SidenavComponent {
-
-}
+export class SidenavComponent {}
diff --git a/src/app/api/.gitkeep b/src/app/models/.gitkeep
similarity index 100%
rename from src/app/api/.gitkeep
rename to src/app/models/.gitkeep
diff --git a/src/index.html b/src/index.html
index 32c997e..48a08cc 100644
--- a/src/index.html
+++ b/src/index.html
@@ -6,8 +6,10 @@
     <base href="/" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <link rel="icon" type="image/x-icon" href="favicon.ico" />
-  </head>
-  <body>
+      <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
+    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
+</head>
+  <body class="mat-typography">
     <app-root></app-root>
   </body>
 </html>
diff --git a/src/styles.scss b/src/styles.scss
index e69de29..a7d0ea7 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -0,0 +1,8 @@
+@import 'primeicons/primeicons.css';
+@import url('https://fonts.googleapis.com/css2?family=Kodchasan:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Kodchasan:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&family=Monoton&display=swap');
+
+body {
+  margin: 0;
+  font-family: Roboto, 'Helvetica Neue', sans-serif;
+}
diff --git a/src/vars.scss b/src/vars.scss
index c56075d..4cdf01f 100644
--- a/src/vars.scss
+++ b/src/vars.scss
@@ -1,38 +1,53 @@
 $textPrimary: #520000;
 $error: #ff2525;
+$sidenavWidth: 256px;
+$headerHeight: 68px;
 
-$grey {
-  0: #ffffff;
-  10: #f5f6f6;
-  20: #f3eaea;
-  30: #dddddd;
-  50: #c5c5c5;
-  200: #181818;
-  500: #000000;
-}
+$grey: (
+  0: #ffffff,
+  10: #f5f6f6,
+  20: #f3eaea,
+  30: #dddddd,
+  50: #c5c5c5,
+  200: #181818,
+  500: #000000,
+);
 
-$text {
-  "none":0;
-  "xxxs":0.1rem;
-  "xxs":0.25rem;
-  "xs":0.5rem;
-  "sm":0.75rem;
-  "md":1rem;
-  "lg":1.25rem;
-  "xl":1.5rem;
-  "xxl":2rem;
-  "xxxl":4rem;
-}
+$text: (
+  'none': 0,
+  'xxxs': 0.1rem,
+  'xxs': 0.25rem,
+  'xs': 0.5rem,
+  'sm': 0.75rem,
+  'md': 1rem,
+  'lg': 1.25rem,
+  'xl': 1.5rem,
+  'xxl': 2rem,
+  'xxxl': 4rem,
+);
 
-$spacing {
-  "none":0;
-  "xxxs":0.1rem;
-  "xxs":0.25rem;
-  "xs":0.5rem;
-  "sm":0.75rem;
-  "md":1rem;
-  "lg":1.25rem;
-  "xl":1.5rem;
-  "xxl":2rem;
-  "xxxl":4rem;
-}
+$spacing: (
+  'none': 0,
+  'xxxs': 0.1rem,
+  'xxs': 0.25rem,
+  'xs': 0.5rem,
+  'sm': 0.75rem,
+  'md': 1rem,
+  'lg': 1.25rem,
+  'xl': 1.5rem,
+  'xxl': 2rem,
+  'xxxl': 4rem,
+);
+
+$radius: (
+  'none': 0,
+  'xxxs': 0.1rem,
+  'xxs': 0.25rem,
+  'xs': 0.5rem,
+  'sm': 0.75rem,
+  'md': 1rem,
+  'lg': 1.25rem,
+  'xl': 1.5rem,
+  'xxl': 2rem,
+  'xxxl': 4rem,
+);
-- 
GitLab


From 7ab65381f96f3ac03ff9727d6bb5f53213dd5f6c Mon Sep 17 00:00:00 2001
From: Ruslan Rabadanov <ruslanrabadanov2101@gmail.com>
Date: Sat, 15 Feb 2025 13:37:15 +0100
Subject: [PATCH 3/5] FE-2 Add template for pages

---
 .../configuration.component.html              |  5 +++-
 .../configuration.component.scss              |  4 +++
 .../configuration/configuration.component.ts  | 10 ++++----
 .../dashboard/dashboard.component.html        |  5 +++-
 .../dashboard/dashboard.component.scss        |  4 +++
 .../dashboard/dashboard.component.ts          | 10 ++++----
 src/app/components/header/header.component.ts | 12 +++++----
 .../page-wrapper/page-wrapper.component.html  |  7 ++++++
 .../page-wrapper/page-wrapper.component.scss  | 25 +++++++++++++++++++
 .../page-wrapper.component.spec.ts            | 23 +++++++++++++++++
 .../page-wrapper/page-wrapper.component.ts    | 10 ++++++++
 11 files changed, 98 insertions(+), 17 deletions(-)
 create mode 100644 src/app/components/page-wrapper/page-wrapper.component.html
 create mode 100644 src/app/components/page-wrapper/page-wrapper.component.scss
 create mode 100644 src/app/components/page-wrapper/page-wrapper.component.spec.ts
 create mode 100644 src/app/components/page-wrapper/page-wrapper.component.ts

diff --git a/src/app/components/configuration/configuration.component.html b/src/app/components/configuration/configuration.component.html
index 0f57cf4..f21079d 100644
--- a/src/app/components/configuration/configuration.component.html
+++ b/src/app/components/configuration/configuration.component.html
@@ -1 +1,4 @@
-<p>configuration works!</p>
+<app-page-wrapper>
+  <div header>Analyzer configuration</div>
+  <p-skeleton height="10rem" width="100%" />
+</app-page-wrapper>
diff --git a/src/app/components/configuration/configuration.component.scss b/src/app/components/configuration/configuration.component.scss
index e69de29..2995308 100644
--- a/src/app/components/configuration/configuration.component.scss
+++ b/src/app/components/configuration/configuration.component.scss
@@ -0,0 +1,4 @@
+:host {
+  height: 100%;
+  width: 100%;
+}
diff --git a/src/app/components/configuration/configuration.component.ts b/src/app/components/configuration/configuration.component.ts
index 9ba0382..6cde6f1 100644
--- a/src/app/components/configuration/configuration.component.ts
+++ b/src/app/components/configuration/configuration.component.ts
@@ -1,11 +1,11 @@
 import { Component } from '@angular/core';
+import { PageWrapperComponent } from '../page-wrapper/page-wrapper.component';
+import { Skeleton } from 'primeng/skeleton';
 
 @Component({
   selector: 'app-configuration',
-  imports: [],
+  imports: [PageWrapperComponent, Skeleton],
   templateUrl: './configuration.component.html',
-  styleUrl: './configuration.component.scss'
+  styleUrl: './configuration.component.scss',
 })
-export class ConfigurationComponent {
-
-}
+export class ConfigurationComponent {}
diff --git a/src/app/components/dashboard/dashboard.component.html b/src/app/components/dashboard/dashboard.component.html
index 9c5fce9..58b882f 100644
--- a/src/app/components/dashboard/dashboard.component.html
+++ b/src/app/components/dashboard/dashboard.component.html
@@ -1 +1,4 @@
-<p>dashboard works!</p>
+<app-page-wrapper>
+  <div header>Monitoring and Analysis</div>
+  <p-skeleton height="10rem" width="100%" />
+</app-page-wrapper>
diff --git a/src/app/components/dashboard/dashboard.component.scss b/src/app/components/dashboard/dashboard.component.scss
index e69de29..2995308 100644
--- a/src/app/components/dashboard/dashboard.component.scss
+++ b/src/app/components/dashboard/dashboard.component.scss
@@ -0,0 +1,4 @@
+:host {
+  height: 100%;
+  width: 100%;
+}
diff --git a/src/app/components/dashboard/dashboard.component.ts b/src/app/components/dashboard/dashboard.component.ts
index 14ba3ed..ad068b9 100644
--- a/src/app/components/dashboard/dashboard.component.ts
+++ b/src/app/components/dashboard/dashboard.component.ts
@@ -1,11 +1,11 @@
 import { Component } from '@angular/core';
+import { PageWrapperComponent } from '../page-wrapper/page-wrapper.component';
+import { Skeleton } from 'primeng/skeleton';
 
 @Component({
   selector: 'app-dashboard',
-  imports: [],
+  imports: [PageWrapperComponent, Skeleton],
   templateUrl: './dashboard.component.html',
-  styleUrl: './dashboard.component.scss'
+  styleUrl: './dashboard.component.scss',
 })
-export class DashboardComponent {
-
-}
+export class DashboardComponent {}
diff --git a/src/app/components/header/header.component.ts b/src/app/components/header/header.component.ts
index bf69288..267d2a7 100644
--- a/src/app/components/header/header.component.ts
+++ b/src/app/components/header/header.component.ts
@@ -1,11 +1,13 @@
 import { Component } from '@angular/core';
+import { DividerModule } from 'primeng/divider';
+import { MatDivider } from '@angular/material/divider';
+import { MatIcon } from '@angular/material/icon';
+import { MatButton } from '@angular/material/button';
 
 @Component({
   selector: 'app-header',
-  imports: [],
+  imports: [DividerModule, MatDivider, MatIcon, MatButton],
   templateUrl: './header.component.html',
-  styleUrl: './header.component.scss'
+  styleUrl: './header.component.scss',
 })
-export class HeaderComponent {
-
-}
+export class HeaderComponent {}
diff --git a/src/app/components/page-wrapper/page-wrapper.component.html b/src/app/components/page-wrapper/page-wrapper.component.html
new file mode 100644
index 0000000..60cb6e2
--- /dev/null
+++ b/src/app/components/page-wrapper/page-wrapper.component.html
@@ -0,0 +1,7 @@
+<div class="page-header">
+  <ng-content select="[header]"></ng-content>
+</div>
+<mat-divider />
+<div class="page-body">
+  <ng-content />
+</div>
diff --git a/src/app/components/page-wrapper/page-wrapper.component.scss b/src/app/components/page-wrapper/page-wrapper.component.scss
new file mode 100644
index 0000000..1a83647
--- /dev/null
+++ b/src/app/components/page-wrapper/page-wrapper.component.scss
@@ -0,0 +1,25 @@
+@use '../../../vars';
+@use 'sass:map';
+
+:host {
+  display: block;
+  min-height: calc(100% - 2 * map.get(vars.$spacing, 'lg'));
+
+  margin: map.get(vars.$spacing, 'lg');
+  background-color: map.get(vars.$grey, 0);
+  border-radius: map.get(vars.$radius, 'xs');
+
+  .page {
+    &-header {
+      padding: map.get(vars.$spacing, 'lg') map.get(vars.$spacing, 'lg')
+        map.get(vars.$spacing, 'xs');
+      font-family: Monoton, cursive;
+      font-size: map.get(vars.$text, 'xxl');
+    }
+
+    &-body {
+      padding: map.get(vars.$spacing, 'xl') map.get(vars.$spacing, 'lg')
+        map.get(vars.$spacing, 'lg');
+    }
+  }
+}
diff --git a/src/app/components/page-wrapper/page-wrapper.component.spec.ts b/src/app/components/page-wrapper/page-wrapper.component.spec.ts
new file mode 100644
index 0000000..73525cc
--- /dev/null
+++ b/src/app/components/page-wrapper/page-wrapper.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PageWrapperComponent } from './page-wrapper.component';
+
+describe('PageWrapperComponent', () => {
+  let component: PageWrapperComponent;
+  let fixture: ComponentFixture<PageWrapperComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [PageWrapperComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(PageWrapperComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/page-wrapper/page-wrapper.component.ts b/src/app/components/page-wrapper/page-wrapper.component.ts
new file mode 100644
index 0000000..3046fbc
--- /dev/null
+++ b/src/app/components/page-wrapper/page-wrapper.component.ts
@@ -0,0 +1,10 @@
+import { Component } from '@angular/core';
+import { MatDivider } from '@angular/material/divider';
+
+@Component({
+  selector: 'app-page-wrapper',
+  imports: [MatDivider],
+  templateUrl: './page-wrapper.component.html',
+  styleUrl: './page-wrapper.component.scss',
+})
+export class PageWrapperComponent {}
-- 
GitLab


From ada986737845c3389d145c0901e4ff55f8b66cc9 Mon Sep 17 00:00:00 2001
From: Ruslan Rabadanov <ruslanrabadanov2101@gmail.com>
Date: Sat, 15 Feb 2025 14:22:46 +0100
Subject: [PATCH 4/5] FE-2 Add styles for sidenav

---
 .../configuration.component.html              |  2 +
 .../dashboard/dashboard.component.html        |  2 +
 .../not-found/not-found.component.ts          |  6 +--
 .../components/sidenav/sidenav.component.html | 22 +++++++-
 .../components/sidenav/sidenav.component.scss | 50 ++++++++++++++++++-
 .../components/sidenav/sidenav.component.ts   | 29 +++++++++--
 src/styles.scss                               |  6 +++
 7 files changed, 106 insertions(+), 11 deletions(-)

diff --git a/src/app/components/configuration/configuration.component.html b/src/app/components/configuration/configuration.component.html
index f21079d..8434b8c 100644
--- a/src/app/components/configuration/configuration.component.html
+++ b/src/app/components/configuration/configuration.component.html
@@ -1,4 +1,6 @@
 <app-page-wrapper>
   <div header>Analyzer configuration</div>
+
+  Configuration content goes here
   <p-skeleton height="10rem" width="100%" />
 </app-page-wrapper>
diff --git a/src/app/components/dashboard/dashboard.component.html b/src/app/components/dashboard/dashboard.component.html
index 58b882f..cb0f201 100644
--- a/src/app/components/dashboard/dashboard.component.html
+++ b/src/app/components/dashboard/dashboard.component.html
@@ -1,4 +1,6 @@
 <app-page-wrapper>
   <div header>Monitoring and Analysis</div>
+
+  Dashboard content goes here
   <p-skeleton height="10rem" width="100%" />
 </app-page-wrapper>
diff --git a/src/app/components/not-found/not-found.component.ts b/src/app/components/not-found/not-found.component.ts
index ca66fc5..03ff4dc 100644
--- a/src/app/components/not-found/not-found.component.ts
+++ b/src/app/components/not-found/not-found.component.ts
@@ -4,8 +4,6 @@ import { Component } from '@angular/core';
   selector: 'app-not-found',
   imports: [],
   templateUrl: './not-found.component.html',
-  styleUrl: './not-found.component.scss'
+  styleUrl: './not-found.component.scss',
 })
-export class NotFoundComponent {
-
-}
+export class NotFoundComponent {}
diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html
index 12e5c6b..51e84fa 100644
--- a/src/app/components/sidenav/sidenav.component.html
+++ b/src/app/components/sidenav/sidenav.component.html
@@ -1,8 +1,26 @@
 <mat-drawer-container class="sidenav-container" autosize>
   <mat-drawer #drawer class="sidenav-container__sidenav" mode="side">
     <div class="sidenav-container__sidenav-content">
-      <p routerLink="configuration">Configuration</p>
-      <p routerLink="dashboard">Dashboard</p>
+      <div class="pages">
+        <div
+          class="button-container"
+          [ngClass]="{
+            'button-container__active': router.url === '/configuration',
+          }"
+          routerLink="/configuration">
+          <mat-icon>help</mat-icon>
+          Configuration
+        </div>
+        <div
+          class="button-container"
+          [ngClass]="{
+            'button-container__active': router.url === '/dashboard',
+          }"
+          routerLink="/dashboard">
+          <mat-icon>account_circle</mat-icon>
+          Dashboard
+        </div>
+      </div>
     </div>
   </mat-drawer>
 
diff --git a/src/app/components/sidenav/sidenav.component.scss b/src/app/components/sidenav/sidenav.component.scss
index 48680b3..b9c493d 100644
--- a/src/app/components/sidenav/sidenav.component.scss
+++ b/src/app/components/sidenav/sidenav.component.scss
@@ -1,6 +1,12 @@
 @use '../../../vars';
 @use 'sass:map';
 
+@mixin sidenavActivePage {
+  background-color: map.get(vars.$grey, 0);
+  border-radius: map.get(vars.$radius, 'lg');
+  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+}
+
 :host {
   .sidenav-container {
     height: 100%;
@@ -14,6 +20,40 @@
 
       &-content {
         position: fixed;
+        width: vars.$sidenavWidth;
+        padding: map.get(vars.$spacing, 'md');
+        height: 100%;
+
+        .footer {
+          margin-top: auto;
+          a {
+            font-size: map.get(vars.$text, 'sm');
+            text-decoration: none;
+          }
+        }
+
+        .pages {
+          display: flex;
+          flex-direction: column;
+          gap: map.get(vars.$spacing, 'xs');
+
+          .button-container {
+            display: flex;
+            align-items: center;
+            font-size: map.get(vars.$text, 'md');
+            color: vars.$textPrimary;
+            text-transform: uppercase;
+            font-weight: 500;
+            gap: map.get(vars.$spacing, 'xs');
+            padding: map.get(vars.$spacing, 'xs');
+
+            mat-icon {
+              font-size: 30px;
+              width: 30px;
+              height: 30px;
+            }
+          }
+        }
       }
     }
 
@@ -30,11 +70,19 @@
       &-open {
         border-bottom-left-radius: map.get(vars.$radius, 'none');
         border-top-left-radius: map.get(vars.$radius, 'none');
-        padding-left: map.get(vars.$spacing, 'md');
+        padding-left: map.get(vars.$spacing, 'xl');
       }
 
       &-close {
       }
     }
   }
+
+  .button-container:hover {
+    @include sidenavActivePage;
+  }
+
+  .button-container__active {
+    @include sidenavActivePage;
+  }
 }
diff --git a/src/app/components/sidenav/sidenav.component.ts b/src/app/components/sidenav/sidenav.component.ts
index 71c5194..2fd9c08 100644
--- a/src/app/components/sidenav/sidenav.component.ts
+++ b/src/app/components/sidenav/sidenav.component.ts
@@ -1,14 +1,35 @@
-import { Component } from '@angular/core';
+import { afterNextRender, Component, inject, signal } from '@angular/core';
 import { MatSidenavModule } from '@angular/material/sidenav';
 import { MatButtonModule } from '@angular/material/button';
-import { RouterLink } from '@angular/router';
+import { NavigationEnd, Router, RouterLink } from '@angular/router';
 import { Button } from 'primeng/button';
 import { NgClass } from '@angular/common';
+import { MatIcon } from '@angular/material/icon';
 
 @Component({
   selector: 'app-sidenav',
-  imports: [MatSidenavModule, MatButtonModule, RouterLink, Button, NgClass],
+  imports: [
+    MatSidenavModule,
+    MatButtonModule,
+    RouterLink,
+    Button,
+    NgClass,
+    MatIcon,
+  ],
   templateUrl: './sidenav.component.html',
   styleUrl: './sidenav.component.scss',
 })
-export class SidenavComponent {}
+export class SidenavComponent {
+  router = inject(Router);
+  currentPage = signal<string>('');
+
+  constructor() {
+    afterNextRender(() => {
+      this.router.events.subscribe(event => {
+        if (event instanceof NavigationEnd) {
+          this.currentPage.set(event.url);
+        }
+      });
+    });
+  }
+}
diff --git a/src/styles.scss b/src/styles.scss
index a7d0ea7..e81a446 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -1,3 +1,5 @@
+@use 'sass:map';
+@use 'vars';
 @import 'primeicons/primeicons.css';
 @import url('https://fonts.googleapis.com/css2?family=Kodchasan:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&display=swap');
 @import url('https://fonts.googleapis.com/css2?family=Kodchasan:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&family=Monoton&display=swap');
@@ -6,3 +8,7 @@ body {
   margin: 0;
   font-family: Roboto, 'Helvetica Neue', sans-serif;
 }
+
+mat-divider {
+  border-color: map.get(vars.$grey, 30) !important;
+}
-- 
GitLab


From 4451bf8fab83d6503d73082e2621a569d019b876 Mon Sep 17 00:00:00 2001
From: Ruslan Rabadanov <ruslanrabadanov2101@gmail.com>
Date: Sat, 15 Feb 2025 14:31:29 +0100
Subject: [PATCH 5/5] FE-2 Update sidenav icons

---
 src/app/components/sidenav/sidenav.component.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html
index 51e84fa..a5b543e 100644
--- a/src/app/components/sidenav/sidenav.component.html
+++ b/src/app/components/sidenav/sidenav.component.html
@@ -8,7 +8,7 @@
             'button-container__active': router.url === '/configuration',
           }"
           routerLink="/configuration">
-          <mat-icon>help</mat-icon>
+          <mat-icon>settings</mat-icon>
           Configuration
         </div>
         <div
@@ -17,7 +17,7 @@
             'button-container__active': router.url === '/dashboard',
           }"
           routerLink="/dashboard">
-          <mat-icon>account_circle</mat-icon>
+          <mat-icon>trending_up</mat-icon>
           Dashboard
         </div>
       </div>
-- 
GitLab