@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
43 lines • 6.68 kB
JavaScript
import { effect, inject, InjectionToken, signal, untracked, } 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);
});
untracked(() => {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS90b2tlbnMvZGFyay1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxNQUFNLEVBQ04sTUFBTSxFQUNOLGNBQWMsRUFDZCxNQUFNLEVBQ04sU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDcEM7SUFDSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMseUJBQXlCO0NBQzNDLENBQ0osQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FFN0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTlFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2FBQ3JCLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3BDLGtCQUFrQixFQUFFLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDUixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsU0FBUyxHQUFHLEtBQUssQ0FBQztpQkFDckI7cUJBQU07b0JBQ0gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2hDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDekIsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDUixPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHR5cGUgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7V0FfTE9DQUxfU1RPUkFHRSwgV0FfV0lORE9XfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7ZmlsdGVyLCBmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgVFVJX0RBUktfTU9ERV9ERUZBVUxUX0tFWSA9ICd0dWlEYXJrJztcbmV4cG9ydCBjb25zdCBUVUlfREFSS19NT0RFX0tFWSA9IG5ldyBJbmplY3Rpb25Ub2tlbihcbiAgICBuZ0Rldk1vZGUgPyAnVFVJX0RBUktfTU9ERV9LRVknIDogJycsXG4gICAge1xuICAgICAgICBmYWN0b3J5OiAoKSA9PiBUVUlfREFSS19NT0RFX0RFRkFVTFRfS0VZLFxuICAgIH0sXG4pO1xuZXhwb3J0IGNvbnN0IFRVSV9EQVJLX01PREUgPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gICAgV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gJiB7cmVzZXQoKTogdm9pZH1cbj4obmdEZXZNb2RlID8gJ1RVSV9EQVJLX01PREUnIDogJycsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGxldCBhdXRvbWF0aWMgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBpbmplY3QoV0FfTE9DQUxfU1RPUkFHRSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGluamVjdChUVUlfREFSS19NT0RFX0tFWSk7XG4gICAgICAgIGNvbnN0IHNhdmVkID0gc3RvcmFnZT8uZ2V0SXRlbShrZXkpO1xuICAgICAgICBjb25zdCBtZWRpYSA9IGluamVjdChXQV9XSU5ET1cpLm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2lnbmFsKEJvb2xlYW4oKHNhdmVkICYmIEpTT04ucGFyc2Uoc2F2ZWQpKSA/PyBtZWRpYS5tYXRjaGVzKSk7XG5cbiAgICAgICAgZnJvbUV2ZW50KG1lZGlhLCAnY2hhbmdlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhc3RvcmFnZT8uZ2V0SXRlbShrZXkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF1dG9tYXRpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChtZWRpYS5tYXRjaGVzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlc3VsdCgpKTtcblxuICAgICAgICAgICAgICAgIGlmIChhdXRvbWF0aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZT8uc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2U/LnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgICAgICAgICBhdXRvbWF0aWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQobWVkaWEubWF0Y2hlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iXX0=