UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

41 lines 6.36 kB
import { effect, inject, InjectionToken, signal } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { WA_LOCAL_STORAGE, WA_WINDOW } from '@ng-web-apis/common'; import { filter, fromEvent } from 'rxjs'; export const TUI_DARK_MODE_DEFAULT_KEY = 'tuiDark'; export const TUI_DARK_MODE_KEY = new InjectionToken(ngDevMode ? 'TUI_DARK_MODE_KEY' : '', { factory: () => TUI_DARK_MODE_DEFAULT_KEY, }); export const TUI_DARK_MODE = new InjectionToken(ngDevMode ? 'TUI_DARK_MODE' : '', { factory: () => { let automatic = true; const storage = inject(WA_LOCAL_STORAGE); const key = inject(TUI_DARK_MODE_KEY); const saved = storage?.getItem(key); const media = inject(WA_WINDOW).matchMedia('(prefers-color-scheme: dark)'); const result = signal(Boolean((saved && JSON.parse(saved)) ?? media.matches)); fromEvent(media, 'change') .pipe(filter(() => !storage?.getItem(key)), takeUntilDestroyed()) .subscribe(() => { automatic = true; result.set(media.matches); }); effect(() => { const value = String(result()); if (automatic) { automatic = false; } else { storage?.setItem(key, value); } }); return Object.assign(result, { reset: () => { storage?.removeItem(key); automatic = true; result.set(media.matches); }, }); }, }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS90b2tlbnMvZGFyay1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDcEM7SUFDSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMseUJBQXlCO0NBQzNDLENBQ0osQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FFN0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTlFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2FBQ3JCLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3BDLGtCQUFrQixFQUFFLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFUCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFL0IsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN6QixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtlZmZlY3QsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIHNpZ25hbCwgdHlwZSBXcml0YWJsZVNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXQV9MT0NBTF9TVE9SQUdFLCBXQV9XSU5ET1d9IGZyb20gJ0BuZy13ZWItYXBpcy9jb21tb24nO1xuaW1wb3J0IHtmaWx0ZXIsIGZyb21FdmVudH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBUVUlfREFSS19NT0RFX0RFRkFVTFRfS0VZID0gJ3R1aURhcmsnO1xuZXhwb3J0IGNvbnN0IFRVSV9EQVJLX01PREVfS0VZID0gbmV3IEluamVjdGlvblRva2VuKFxuICAgIG5nRGV2TW9kZSA/ICdUVUlfREFSS19NT0RFX0tFWScgOiAnJyxcbiAgICB7XG4gICAgICAgIGZhY3Rvcnk6ICgpID0+IFRVSV9EQVJLX01PREVfREVGQVVMVF9LRVksXG4gICAgfSxcbik7XG5leHBvcnQgY29uc3QgVFVJX0RBUktfTU9ERSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgICBXcml0YWJsZVNpZ25hbDxib29sZWFuPiAmIHtyZXNldCgpOiB2b2lkfVxuPihuZ0Rldk1vZGUgPyAnVFVJX0RBUktfTU9ERScgOiAnJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgbGV0IGF1dG9tYXRpYyA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGluamVjdChXQV9MT0NBTF9TVE9SQUdFKTtcbiAgICAgICAgY29uc3Qga2V5ID0gaW5qZWN0KFRVSV9EQVJLX01PREVfS0VZKTtcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBzdG9yYWdlPy5nZXRJdGVtKGtleSk7XG4gICAgICAgIGNvbnN0IG1lZGlhID0gaW5qZWN0KFdBX1dJTkRPVykubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzaWduYWwoQm9vbGVhbigoc2F2ZWQgJiYgSlNPTi5wYXJzZShzYXZlZCkpID8/IG1lZGlhLm1hdGNoZXMpKTtcblxuICAgICAgICBmcm9tRXZlbnQobWVkaWEsICdjaGFuZ2UnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICFzdG9yYWdlPy5nZXRJdGVtKGtleSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXV0b21hdGljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KG1lZGlhLm1hdGNoZXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlc3VsdCgpKTtcblxuICAgICAgICAgICAgaWYgKGF1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGF1dG9tYXRpYyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdG9yYWdlPy5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZT8ucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIGF1dG9tYXRpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChtZWRpYS5tYXRjaGVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiJdfQ==