browser-device-orientation

Wraps DeviceOrientationEvent as global atoms, exposing the raw tilt snapshot plus alpha / beta / gamma and a compass-heading selector.

Permission
iOS requires a user gesture: call requestOrientationPermission() from a click handler before subscribing. Other browsers grant on subscribe.

Install

bun add @valdres/browser-device-orientation

Live example

Loading demo…

Usage

import { createValue } from "valdres-solid"
import { compassHeadingSelector } from "@valdres/browser-device-orientation"

function Compass() {
    const heading = createValue(compassHeadingSelector) // () => number | null
    return <span>{heading() == null ? "—" : `${Math.round(heading()!)}°`}</span>
}

Exports

ExportKindType
orientationAtomatom (read-only)OrientationSnapshot | null
permissionAtomatom (settable)PermissionValue
orientationStatusAtomatom (read-only)OrientationStatus
alphaSelectorselectornumber | null
betaSelectorselectornumber | null
gammaSelectorselectornumber | null
absoluteSelectorselectorboolean | null
compassHeadingSelectorselectornumber | null
requestOrientationPermissionutil fn() => Promise<PermissionValue>
OrientationSnapshottype{ alpha, beta, gamma: number | null; absolute: boolean; webkitCompassHeading, webkitCompassAccuracy: number | null; timeStamp: number }
OrientationStatustype"unsupported" | "idle" | "active"
PermissionValuetype"granted" | "denied" | "prompt" | "unsupported"

Cross-framework

Global atoms/selectors — works in every framework, only the read primitive differs. The deviceorientation listener starts on the first subscriber and stops on the last.