@tamagui/react-native-web-lite
Version:
React Native for Web
72 lines (71 loc) • 2.91 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);
}
}
//# sourceMappingURL=index.js.map