{"version":3,"file":"index.js","names":[],"sources":["esm/platform/battery/index.js"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport {\n  assertLevelListener,\n  assertLowPowerModeListener,\n  assertStateListener\n} from \"./validate\";\nfunction getBatteryFn() {\n  if (typeof navigator === \"undefined\") return void 0;\n  const getBattery = navigator.getBattery;\n  return typeof getBattery === \"function\" ? getBattery : void 0;\n}\nasync function systemBattery() {\n  const getBattery = getBatteryFn();\n  if (!getBattery) return void 0;\n  try {\n    return await getBattery();\n  } catch {\n    return void 0;\n  }\n}\nasync function getLevel() {\n  const battery = await systemBattery();\n  return battery ? battery.level : 1;\n}\nfunction stateOf(battery) {\n  if (!battery) return \"unknown\";\n  return battery.charging ? \"charging\" : \"unplugged\";\n}\nasync function getState() {\n  return stateOf(await systemBattery());\n}\nasync function getPowerState() {\n  const battery = await systemBattery();\n  return {\n    batteryLevel: battery ? battery.level : 1,\n    batteryState: stateOf(battery),\n    lowPowerMode: false\n  };\n}\nasync function isLowPowerModeEnabled() {\n  return false;\n}\nfunction isAvailable() {\n  return getBatteryFn() !== void 0;\n}\nfunction listen(event, listener) {\n  if (typeof window === \"undefined\")\n    return {\n      remove: () => {\n      }\n    };\n  let removed = false;\n  void systemBattery().then((battery) => {\n    if (removed) return;\n    battery?.addEventListener(event, listener);\n  });\n  return {\n    remove: () => {\n      removed = true;\n      void systemBattery().then((battery) => {\n        battery?.removeEventListener(event, listener);\n      });\n    }\n  };\n}\nfunction addLevelListener(listener) {\n  assertLevelListener(listener);\n  return listen(\"levelchange\", () => {\n    void getLevel().then((batteryLevel) => listener({ batteryLevel }));\n  });\n}\nfunction addStateListener(listener) {\n  assertStateListener(listener);\n  return listen(\"chargingchange\", () => {\n    void getState().then((batteryState) => listener({ batteryState }));\n  });\n}\nfunction addLowPowerModeListener(listener) {\n  assertLowPowerModeListener(listener);\n  return { remove: () => {\n  } };\n}\nfunction useBatteryLevel() {\n  const [level, setLevel] = useState(1);\n  useEffect(() => {\n    let active = true;\n    let fromEvent = false;\n    void getLevel().then((next) => {\n      if (active && !fromEvent) setLevel(next);\n    });\n    const subscription = addLevelListener((event) => {\n      if (active) {\n        fromEvent = true;\n        setLevel(event.batteryLevel);\n      }\n    });\n    return () => {\n      active = false;\n      subscription.remove();\n    };\n  }, []);\n  return level;\n}\nfunction useBatteryState() {\n  const [state, setState] = useState(\"unknown\");\n  useEffect(() => {\n    let active = true;\n    let fromEvent = false;\n    void getState().then((next) => {\n      if (active && !fromEvent) setState(next);\n    });\n    const subscription = addStateListener((event) => {\n      if (active) {\n        fromEvent = true;\n        setState(event.batteryState);\n      }\n    });\n    return () => {\n      active = false;\n      subscription.remove();\n    };\n  }, []);\n  return state;\n}\nfunction useLowPowerMode() {\n  const [enabled] = useState(false);\n  return enabled;\n}\nfunction usePowerState() {\n  const [power, setPower] = useState({\n    batteryLevel: 1,\n    batteryState: \"unknown\",\n    lowPowerMode: false\n  });\n  useEffect(() => {\n    let active = true;\n    let levelFromEvent = false;\n    let stateFromEvent = false;\n    void getPowerState().then((next) => {\n      if (!active) return;\n      setPower((current) => ({\n        batteryLevel: levelFromEvent ? current.batteryLevel : next.batteryLevel,\n        batteryState: stateFromEvent ? current.batteryState : next.batteryState,\n        lowPowerMode: next.lowPowerMode\n      }));\n    });\n    const onLevel = addLevelListener((event) => {\n      if (active) {\n        levelFromEvent = true;\n        setPower((current) => ({ ...current, batteryLevel: event.batteryLevel }));\n      }\n    });\n    const onState = addStateListener((event) => {\n      if (active) {\n        stateFromEvent = true;\n        setPower((current) => ({ ...current, batteryState: event.batteryState }));\n      }\n    });\n    return () => {\n      active = false;\n      onLevel.remove();\n      onState.remove();\n    };\n  }, []);\n  return power;\n}\nconst Battery = Object.freeze({\n  getLevel,\n  getState,\n  getPowerState,\n  isLowPowerModeEnabled,\n  isAvailable,\n  addLevelListener,\n  addStateListener,\n  addLowPowerModeListener\n});\nexport {\n  Battery,\n  useBatteryLevel,\n  useBatteryState,\n  useLowPowerMode,\n  usePowerState\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}