UNPKG

react-native-unistyles

Version:
92 lines (91 loc) 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UnistylesListener = void 0; var _NativePlatform = require("../specs/NativePlatform"); class UnistylesListener { isInitialized = false; listeners = Array.from({ length: Object.keys(_NativePlatform.UnistyleDependency).length / 2 }, () => new Set()); stylesheetListeners = Array.from({ length: Object.keys(_NativePlatform.UnistyleDependency).length / 2 }, () => new Set()); changeListeners = new Set(); constructor(services) { this.services = services; } emitChanges = dependencies => { for (const dependency of dependencies) { const stylesheetListeners = this.stylesheetListeners[dependency] ?? []; for (const listener of stylesheetListeners) { listener(dependency); } const listeners = this.listeners[dependency] ?? []; for (const listener of listeners) { listener(dependency); } } for (const listener of this.changeListeners) { listener(dependencies.slice()); } }; emitChange = dependency => { this.emitChanges([dependency]); }; addChangeListener = listener => { this.changeListeners.add(listener); return () => { this.changeListeners.delete(listener); }; }; initListeners = () => { if (this.isInitialized) { return; } this.isInitialized = true; this.services.runtime.darkMedia?.addEventListener('change', event => { if (!event.matches) { return; } if (this.services.runtime.hasAdaptiveThemes) { this.emitChanges([_NativePlatform.UnistyleDependency.ColorScheme, _NativePlatform.UnistyleDependency.Theme, _NativePlatform.UnistyleDependency.ThemeName]); return; } this.emitChange(_NativePlatform.UnistyleDependency.ColorScheme); }); this.services.runtime.lightMedia?.addEventListener('change', event => { if (!event.matches) { return; } if (this.services.runtime.hasAdaptiveThemes) { this.emitChanges([_NativePlatform.UnistyleDependency.ColorScheme, _NativePlatform.UnistyleDependency.Theme, _NativePlatform.UnistyleDependency.ThemeName]); return; } this.emitChange(_NativePlatform.UnistyleDependency.ColorScheme); }); window.addEventListener('orientationchange', () => this.emitChange(_NativePlatform.UnistyleDependency.Orientation)); window.addEventListener('resize', () => this.emitChange(_NativePlatform.UnistyleDependency.Dimensions)); new MutationObserver(() => { this.emitChange(_NativePlatform.UnistyleDependency.Rtl); }).observe(document.documentElement, { attributes: true, attributeFilter: ['dir'] }); }; addListeners = (dependencies, listener) => { dependencies.forEach(dependency => this.listeners[dependency]?.add(listener)); return () => { dependencies.forEach(dependency => this.listeners[dependency]?.delete(listener)); }; }; addStylesheetListeners = (dependencies, listener) => { dependencies.forEach(dependency => this.stylesheetListeners[dependency]?.add(listener)); return () => { dependencies.forEach(dependency => this.stylesheetListeners[dependency]?.delete(listener)); }; }; } exports.UnistylesListener = UnistylesListener; //# sourceMappingURL=listener.js.map