@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
41 lines • 6.36 kB
JavaScript
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==