@tamagui/react-native-web-lite
Version:
React Native for Web
85 lines • 3 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
value: true
}), mod);
var AppState_exports = {};
__export(AppState_exports, {
AppState: () => AppState
});
module.exports = __toCommonJS(AppState_exports);
var import_react_native_web_internals = require("@tamagui/react-native-web-internals");
const isPrefixed =
// eslint-disable-next-line no-prototype-builtins
import_react_native_web_internals.canUseDOM && !document.hasOwnProperty("hidden") && document.hasOwnProperty("webkitHidden");
const EVENT_TYPES = ["change", "memoryWarning"];
const VISIBILITY_CHANGE_EVENT = isPrefixed ? "webkitvisibilitychange" : "visibilitychange";
const VISIBILITY_STATE_PROPERTY = isPrefixed ? "webkitVisibilityState" : "visibilityState";
const AppStates = {
BACKGROUND: "background",
ACTIVE: "active"
};
class EventEmitter {
listeners = {};
addListener(type, handler) {
this.listeners[type] ??= /* @__PURE__ */new Set();
this.listeners[type].add(handler);
}
emit(type, state) {
this.listeners[type]?.forEach(cb => cb(state));
}
removeListener(type, handler) {
this.listeners[type]?.delete(handler);
}
}
let hasBoundVisibilityChangeEvent = false;
const changeEmitter = new EventEmitter();
class AppState {
static isAvailable = import_react_native_web_internals.canUseDOM && document[VISIBILITY_STATE_PROPERTY];
static get currentState() {
if (!AppState.isAvailable) {
return AppStates.ACTIVE;
}
switch (document[VISIBILITY_STATE_PROPERTY]) {
case "hidden":
case "prerender":
case "unloaded":
return AppStates.BACKGROUND;
default:
return AppStates.ACTIVE;
}
}
static addEventListener(type, handler) {
if (AppState.isAvailable) {
(0, import_react_native_web_internals.invariant)(EVENT_TYPES.indexOf(type) !== -1, 'Trying to subscribe to unknown event: "%s"', type);
if (type === "change") {
if (!hasBoundVisibilityChangeEvent) {
hasBoundVisibilityChangeEvent = true;
document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {
if (changeEmitter) {
changeEmitter.emit("change", AppState.currentState);
}
}, false);
}
return changeEmitter.addListener(type, handler);
}
}
}
}