@tamagui/react-native-web-lite
Version:
React Native for Web
58 lines (57 loc) • 1.89 kB
JavaScript
import { canUseDOM, invariant } from "@tamagui/react-native-web-internals";
const dimensions = {
window: {
fontScale: 1,
height: 0,
scale: 1,
width: 0
},
screen: {
fontScale: 1,
height: 0,
scale: 1,
width: 0
}
},
listeners = {};
let shouldInit = canUseDOM;
function update() {
if (!canUseDOM) return;
const win = window,
docEl = win.document.documentElement;
dimensions.window = {
fontScale: 1,
height: docEl.clientHeight,
scale: win.devicePixelRatio || 1,
width: docEl.clientWidth
}, dimensions.screen = {
fontScale: 1,
height: win.screen.height,
scale: win.devicePixelRatio || 1,
width: win.screen.width
};
}
function handleResize() {
update(), Array.isArray(listeners.change) && listeners.change.forEach(handler => handler(dimensions));
}
class Dimensions {
static get(dimension) {
return shouldInit && (shouldInit = !1, update()), invariant(dimensions[dimension], `No dimension set for key ${dimension}`), dimensions[dimension];
}
static set(initialDimensions) {
initialDimensions && (canUseDOM ? invariant(!1, "Dimensions cannot be set in the browser") : (initialDimensions.screen != null && (dimensions.screen = initialDimensions.screen), initialDimensions.window != null && (dimensions.window = initialDimensions.window)));
}
static addEventListener(type, handler) {
return listeners[type] = listeners[type] || [], listeners[type].push(handler), {
remove: () => {
this.removeEventListener(type, handler);
}
};
}
static removeEventListener(type, handler) {
Array.isArray(listeners[type]) && (listeners[type] = listeners[type].filter(_handler => _handler !== handler));
}
}
canUseDOM && window.addEventListener("resize", handleResize, !1);
export { Dimensions as default };
//# sourceMappingURL=index.mjs.map