react-native-unistyles
Version:
Level up your React Native StyleSheet
92 lines (91 loc) • 3.33 kB
JavaScript
;
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