@tamagui/react-native-web-lite
Version:
React Native for Web
87 lines (86 loc) • 2.13 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
}
};
const listeners = {};
let shouldInit = canUseDOM;
function update() {
if (!canUseDOM) {
return;
}
const win = window;
const 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();
if (Array.isArray(listeners["change"])) {
listeners["change"].forEach(handler => handler(dimensions));
}
}
class Dimensions {
static get(dimension) {
if (shouldInit) {
shouldInit = false;
update();
}
invariant(dimensions[dimension], `No dimension set for key ${dimension}`);
return dimensions[dimension];
}
static set(initialDimensions) {
if (initialDimensions) {
if (canUseDOM) {
invariant(false, "Dimensions cannot be set in the browser");
} else {
if (initialDimensions.screen != null) {
dimensions.screen = initialDimensions.screen;
}
if (initialDimensions.window != null) {
dimensions.window = initialDimensions.window;
}
}
}
}
static addEventListener(type, handler) {
listeners[type] = listeners[type] || [];
listeners[type].push(handler);
return {
remove: () => {
this.removeEventListener(type, handler);
}
};
}
static removeEventListener(type, handler) {
if (Array.isArray(listeners[type])) {
listeners[type] = listeners[type].filter(_handler => _handler !== handler);
}
}
}
if (canUseDOM) {
window.addEventListener("resize", handleResize, false);
}
var Dimensions_default = Dimensions;
export { Dimensions, Dimensions_default as default };
//# sourceMappingURL=index.mjs.map