@tamagui/react-native-web-lite
Version:
React Native for Web
69 lines • 2.84 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: !0
});
},
__copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__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: !0
}), mod);
var AppState_exports = {};
__export(AppState_exports, {
default: () => 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"),
EVENT_TYPES = ["change", "memoryWarning"],
VISIBILITY_CHANGE_EVENT = isPrefixed ? "webkitvisibilitychange" : "visibilitychange",
VISIBILITY_STATE_PROPERTY = isPrefixed ? "webkitVisibilityState" : "visibilityState",
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 = !1;
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), type === "change")) return hasBoundVisibilityChangeEvent || (hasBoundVisibilityChangeEvent = !0, document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {
changeEmitter && changeEmitter.emit("change", AppState.currentState);
}, !1)), changeEmitter.addListener(type, handler);
}
}