UNPKG

@sv-use/core

Version:

A collection of Svelte 5 utilities.

56 lines (55 loc) 1.74 kB
import { onDestroy } from 'svelte'; import { handleEventListener } from '../handle-event-listener/index.svelte.js'; import { noop } from '../__internal__/utils.svelte.js'; /** * Retrieves information about the battery. * @see https://svelte-librarian.github.io/sv-use/docs/core/get-battery */ export function getBattery(options = {}) { const { autoCleanup = true } = options; const events = ['chargingchange', 'chargingtimechange', 'dischargingtimechange', 'levelchange']; let battery; let cleanup = noop; const _isSupported = $derived.by(() => navigator && 'getBattery' in navigator); let _charging = $state(0); let _chargingTime = $state(0); let _dischargingTime = $state(0); let _level = $state(1); if (_isSupported) { navigator.getBattery().then((_battery) => { battery = _battery; updateBatteryInfo.call(battery); cleanup = handleEventListener(battery, events, updateBatteryInfo, { autoCleanup, passive: true }); }); } if (autoCleanup) { onDestroy(() => cleanup()); } function updateBatteryInfo() { _charging = this.charging || 0; _chargingTime = this.chargingTime || 0; _dischargingTime = this.dischargingTime || 0; _level = this.level || 1; } return { get isSupported() { return _isSupported; }, get charging() { return _charging; }, get chargingTime() { return _chargingTime; }, get dischargingTime() { return _dischargingTime; }, get level() { return _level; }, cleanup }; }