UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

86 lines (85 loc) • 3.12 kB
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 keep_awake_exports = {}; __export(keep_awake_exports, { KeepAwake: () => KeepAwake, useKeepAwake: () => useKeepAwake }); module.exports = __toCommonJS(keep_awake_exports); var import_react = require("react"); var import_unavailable = require("./unavailable.cjs"); var import_validate = require("./validate.cjs"); const active = /* @__PURE__ */ new Set(); let lock; let operation = Promise.resolve(); function live() { return !!lock && !lock.released; } function apply(owner) { const next = operation.catch(() => {}).then(async () => { if (active.size === 0) { await lock?.release(); lock = void 0; return; } if (live()) return; if (!navigator.wakeLock) throw new Error(`KeepAwake.${owner}: Screen Wake Lock is unavailable`); lock = await navigator.wakeLock.request("screen"); }); operation = next; return next; } const KeepAwake = Object.freeze({ isEnabled: async () => typeof window !== "undefined" && active.size > 0 && live(), setEnabled: (enabled) => { (0, import_validate.assertKeepAwakeEnabled)(enabled); if (typeof window === "undefined") return import_unavailable.KeepAwake.setEnabled(enabled); if (enabled) active.add((0, import_validate.normalizeKeepAwakeTag)(void 0)); else active.delete((0, import_validate.normalizeKeepAwakeTag)(void 0)); return apply("setEnabled"); }, activate: (tag) => { (0, import_validate.assertKeepAwakeTag)(tag, "activate"); if (typeof window === "undefined") return import_unavailable.KeepAwake.activate(tag); active.add((0, import_validate.normalizeKeepAwakeTag)(tag)); return apply("activate"); }, deactivate: (tag) => { (0, import_validate.assertKeepAwakeTag)(tag, "deactivate"); if (typeof window === "undefined") return import_unavailable.KeepAwake.deactivate(tag); active.delete((0, import_validate.normalizeKeepAwakeTag)(tag)); return apply("deactivate"); } }); function useKeepAwake(tag) { const fallback = (0, import_react.useId)(); (0, import_validate.assertKeepAwakeTag)(tag, "useKeepAwake"); const effective = tag ?? fallback; (0, import_react.useEffect)(() => { if (typeof window === "undefined") return; KeepAwake.activate(effective).catch((error) => { console.error(`Failed to keep the screen awake: ${String(error)}`); }); return () => { KeepAwake.deactivate(effective).catch(() => {}); }; }, [effective]); }