diff --git a/web/angular/src/app/app.component.html b/web/angular/src/app/app.component.html
index 4a05887..a3777ea 100644
--- a/web/angular/src/app/app.component.html
+++ b/web/angular/src/app/app.component.html
@@ -10,6 +10,10 @@
Docs
Configure
+
+
{{ api.status$ | async }}
diff --git a/web/angular/src/app/app.component.ts b/web/angular/src/app/app.component.ts
index dad35c7..bf704b5 100644
--- a/web/angular/src/app/app.component.ts
+++ b/web/angular/src/app/app.component.ts
@@ -3,18 +3,33 @@ import { RouterOutlet, RouterLink, RouterLinkActive } from '@angular/router';
import { AsyncPipe, NgClass } from '@angular/common';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
import { ApiService } from './api.service';
@Component({
selector: 'app-root',
standalone: true,
- imports: [RouterOutlet, RouterLink, RouterLinkActive, AsyncPipe, NgClass, MatToolbarModule, MatButtonModule],
+ imports: [RouterOutlet, RouterLink, RouterLinkActive, AsyncPipe, NgClass, MatToolbarModule, MatButtonModule, MatIconModule],
templateUrl: './app.component.html',
})
export class AppComponent implements OnInit {
+ darkMode = false;
+
constructor(public api: ApiService) {}
ngOnInit(): void {
this.api.refreshStatus();
+ this.darkMode = localStorage.getItem('darkMode') === 'true';
+ this.applyTheme();
+ }
+
+ toggleDarkMode(): void {
+ this.darkMode = !this.darkMode;
+ localStorage.setItem('darkMode', String(this.darkMode));
+ this.applyTheme();
+ }
+
+ private applyTheme(): void {
+ document.body.style.colorScheme = this.darkMode ? 'dark' : 'light';
}
}
diff --git a/web/angular/src/material-theme.scss b/web/angular/src/material-theme.scss
index 6b9f35c..133f75c 100644
--- a/web/angular/src/material-theme.scss
+++ b/web/angular/src/material-theme.scss
@@ -7,6 +7,7 @@
@use '@angular/material' as mat;
html {
+ color-scheme: light dark;
height: 100%;
@include mat.theme((
color: (
@@ -91,7 +92,7 @@ body {
background: var(--mat-sys-surface-variant);
color: var(--mat-sys-on-surface-variant);
- &.feedback-success { background: color-mix(in srgb, #4caf50 15%, transparent); color: #1b5e20; }
+ &.feedback-success { background: color-mix(in srgb, #4caf50 15%, transparent); color: color-mix(in srgb, #4caf50 80%, var(--mat-sys-on-surface)); }
&.feedback-error { background: color-mix(in srgb, var(--mat-sys-error) 12%, transparent); color: var(--mat-sys-error); }
}