Skip to content

Commit 6fd5498

Browse files
committed
feat(cdk/layout): add SystemColorSchemeObserver
1 parent 7344f8e commit 6fd5498

3 files changed

Lines changed: 32 additions & 0 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { BreakpointObserver } from '@angular/cdk/layout';
2+
import { inject, Injectable } from '@angular/core';
3+
import { map, Observable } from 'rxjs';
4+
5+
import { ColorScheme } from './color-scheme';
6+
7+
/**
8+
* Service for observing the preferred color scheme
9+
* specified by the user's operating system.
10+
*/
11+
@Injectable({ providedIn: 'root' })
12+
export class SystemColorSchemeObserver {
13+
#mediaQueryObserver = inject(BreakpointObserver);
14+
15+
observe(): Observable<ColorScheme> {
16+
return this.#mediaQueryObserver
17+
.observe('(prefers-color-scheme: dark)')
18+
.pipe(map((e) => (e.matches ? ColorScheme.Dark : ColorScheme.Light)));
19+
}
20+
21+
snapshot(): ColorScheme {
22+
return this.#mediaQueryObserver.isMatched('(prefers-color-scheme: dark)')
23+
? ColorScheme.Dark
24+
: ColorScheme.Light;
25+
}
26+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum ColorScheme {
2+
Light = 'Light',
3+
Dark = 'Dark',
4+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
export * from './color-scheme';
2+
export * from './color-scheme-observer';
13
export * from './named-breakpoint-observer';

0 commit comments

Comments
 (0)