UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

43 lines 6.68 kB
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=