diff --git a/FrontEnd/package.json b/FrontEnd/package.json
index 35aaeef..b33a1e2 100644
--- a/FrontEnd/package.json
+++ b/FrontEnd/package.json
@@ -11,14 +11,15 @@
"private": true,
"packageManager": "pnpm@11.1.1",
"dependencies": {
- "@angular/compiler": "^21.2.14",
"@angular/common": "^21.2.14",
+ "@angular/compiler": "^21.2.14",
"@angular/core": "^21.2.0",
"@angular/forms": "^21.2.14",
"@angular/platform-browser": "^21.2.0",
"@angular/router": "^21.2.13",
"@fortawesome/fontawesome-free": "^7.2.0",
"@primeuix/themes": "^2.0.3",
+ "chart.js": "^4.5.1",
"primeng": "^21.1.7",
"rxjs": "~7.8.0",
"tslib": "^2.3.0"
diff --git a/FrontEnd/pnpm-lock.yaml b/FrontEnd/pnpm-lock.yaml
index 6c8e1e3..87fd7b0 100644
--- a/FrontEnd/pnpm-lock.yaml
+++ b/FrontEnd/pnpm-lock.yaml
@@ -32,6 +32,9 @@ importers:
'@primeuix/themes':
specifier: ^2.0.3
version: 2.0.3
+ chart.js:
+ specifier: ^4.5.1
+ version: 4.5.1
primeng:
specifier: ^21.1.7
version: 21.1.7(c887dd6943ee5fd9e904a6f33e01a80f)
@@ -759,6 +762,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@kurkle/color@0.3.4':
+ resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
+
'@listr2/prompt-adapter-inquirer@3.0.5':
resolution: {integrity: sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==}
engines: {node: '>=20.0.0'}
@@ -1631,6 +1637,10 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ chart.js@4.5.1:
+ resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==}
+ engines: {pnpm: '>=8'}
+
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
@@ -3602,6 +3612,8 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@kurkle/color@0.3.4': {}
+
'@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1)(listr2@9.0.5)':
dependencies:
'@inquirer/prompts': 7.10.1
@@ -4336,6 +4348,10 @@ snapshots:
chardet@2.1.1: {}
+ chart.js@4.5.1:
+ dependencies:
+ '@kurkle/color': 0.3.4
+
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
diff --git a/FrontEnd/src/app/app.html b/FrontEnd/src/app/app.html
index e160eee..f5cf8bd 100644
--- a/FrontEnd/src/app/app.html
+++ b/FrontEnd/src/app/app.html
@@ -8,7 +8,17 @@
diff --git a/FrontEnd/src/app/app.routes.ts b/FrontEnd/src/app/app.routes.ts
index e26f1ab..0c7900a 100644
--- a/FrontEnd/src/app/app.routes.ts
+++ b/FrontEnd/src/app/app.routes.ts
@@ -3,6 +3,7 @@ import { Home } from './pages/home/home';
import { HomeAssistantConnection } from './pages/home-assistant-connection/home-assistant-connection';
import { PowerEntitySetup } from './pages/power-entity-setup/power-entity-setup';
import { EnergyHistorySetup } from './pages/energy-history-setup/energy-history-setup';
+import { EnergyHistoryView } from './pages/energy-history-view/energy-history-view';
export const routes: Routes = [
{
@@ -20,5 +21,9 @@ export const routes: Routes = [
{
path: 'energy-history',
component: EnergyHistorySetup,
+ },
+ {
+ path: 'energy-history-view',
+ component: EnergyHistoryView,
}
];
diff --git a/FrontEnd/src/app/app.scss b/FrontEnd/src/app/app.scss
index 9dc1a3b..0e3ede1 100644
--- a/FrontEnd/src/app/app.scss
+++ b/FrontEnd/src/app/app.scss
@@ -72,9 +72,27 @@
font-weight: 600;
}
-:host ::ng-deep .left-menu {
+.menu-section {
+ margin-bottom: 1.5rem;
+ padding: 0.75rem;
border: 1px solid var(--line);
- background: rgba(255, 255, 255, 0.55);
+ border-radius: 0.5rem;
+ background: rgba(255, 255, 255, 0.3);
+}
+
+.menu-section-header {
+ font-size: 0.875rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ color: var(--sea-700);
+ margin-bottom: 0.5rem;
+ padding: 0 0.5rem;
+}
+
+:host ::ng-deep .left-menu {
+ border: 0;
+ background: transparent;
}
:host ::ng-deep .left-menu .p-menu-item-link {
diff --git a/FrontEnd/src/app/app.ts b/FrontEnd/src/app/app.ts
index 5d7e7cc..fcd541a 100644
--- a/FrontEnd/src/app/app.ts
+++ b/FrontEnd/src/app/app.ts
@@ -17,12 +17,15 @@ export class App implements OnInit {
protected readonly configStatus = inject(ConfigurationStatusService);
- protected readonly sideMenuItems = computed