1import { useCallback, useEffect, useState } from "preact/hooks";2// Package-owned Preact capability hook.3import {4 type DeviceCapabilityReport,5 readDeviceCapabilityReport,6 requestPersistentStorage,7} from "../runtime/device-capabilities.ts";8export type { DeviceCapabilityReport } from "../runtime/device-capabilities.ts";910/** State returned by {@link useDeviceCapabilities}. */11export type DeviceCapabilitiesHook = {12 report: DeviceCapabilityReport | null;13 requestPersistence(): Promise<void>;14};1516/** Reads browser capabilities and exposes an explicit persistence request. */17export function useDeviceCapabilities(): DeviceCapabilitiesHook {18 const [report, setReport] = useState<DeviceCapabilityReport | null>(null);19 useEffect(() => {20 let active = true;21 void readDeviceCapabilityReport().then((next) => {22 if (active) setReport(next);23 });24 return () => {25 active = false;26 };27 }, []);28 const requestPersistence = useCallback(async () => {29 const next = await requestPersistentStorage();30 setReport(next);31 }, []);32 return { report, requestPersistence };33}