one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 7.62 kB
Source Map (JSON)
{"version":3,"file":"index.js","names":[],"sources":["esm/platform/motion/index.js"],"sourcesContent":["import { validateListener } from \"./validate\";\nconst emptyAvailability = {\n accelerometer: false,\n gyroscope: false,\n magnetometer: false,\n deviceMotion: false\n};\nconst availability = { ...emptyAvailability };\nconst listeners = /* @__PURE__ */ new Set();\nlet observing = false;\nlet attitude;\nfunction vector(x, y, z, scale = 1) {\n return [x, y, z].every((value) => typeof value === \"number\" && Number.isFinite(value)) ? { x: x * scale, y: y * scale, z: z * scale } : void 0;\n}\nfunction receive(event) {\n const total = event.accelerationIncludingGravity, linear = event.acceleration, rate = event.rotationRate;\n const acceleration = vector(total?.x, total?.y, total?.z, -1 / 9.80665);\n const user = vector(linear?.x, linear?.y, linear?.z, -1 / 9.80665);\n const rotation = vector(rate?.beta, rate?.gamma, rate?.alpha, Math.PI / 180);\n availability.accelerometer = !!acceleration;\n availability.gyroscope = !!rotation;\n availability.deviceMotion = !!user;\n const gravity = acceleration && user ? {\n x: acceleration.x - user.x,\n y: acceleration.y - user.y,\n z: acceleration.z - user.z\n } : void 0;\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue;\n const value = listener.sensor === \"accelerometer\" ? acceleration : listener.sensor === \"gyroscope\" ? rotation : listener.sensor === \"deviceMotion\" ? user : void 0;\n if (!value || event.timeStamp - listener.last < listener.intervalMs) continue;\n listener.last = event.timeStamp;\n const reading = {\n sensor: listener.sensor,\n timestampMs: performance.timeOrigin + event.timeStamp,\n value\n };\n if (listener.sensor === \"deviceMotion\")\n Object.assign(reading, {\n gravity,\n userAcceleration: user,\n rotationRate: rotation,\n attitude\n });\n listener.onReading(reading);\n }\n if (!listeners.size) stopObserving();\n}\nfunction orient(event) {\n const a = event.alpha, b = event.beta, c = event.gamma;\n if (!vector(a, b, c)) {\n attitude = void 0;\n return;\n }\n const z = a * Math.PI / 180, x = b * Math.PI / 180, y = c * Math.PI / 180;\n attitude = {\n x: Math.atan2(Math.sin(x), Math.cos(x) * Math.cos(y)),\n y: Math.asin(Math.max(-1, Math.min(1, Math.cos(x) * Math.sin(y)))),\n z: Math.atan2(\n Math.sin(z) * Math.cos(y) + Math.cos(z) * Math.sin(x) * Math.sin(y),\n Math.cos(z) * Math.cos(y) - Math.sin(z) * Math.sin(x) * Math.sin(y)\n )\n };\n}\nfunction stopObserving() {\n if (!observing) return;\n window.removeEventListener(\"devicemotion\", receive);\n window.removeEventListener(\"deviceorientation\", orient);\n observing = false;\n attitude = void 0;\n}\nfunction observe() {\n if (observing || typeof window === \"undefined\") return;\n observing = true;\n window.addEventListener(\"devicemotion\", receive);\n window.addEventListener(\"deviceorientation\", orient);\n}\nconst Motion = Object.freeze({\n getAvailability: () => {\n if (typeof window === \"undefined\" || !window.DeviceMotionEvent)\n return { ...emptyAvailability };\n observe();\n return { ...availability };\n },\n addListener: (sensor, intervalMs, onReading, onError) => {\n validateListener(sensor, intervalMs, onReading, onError);\n if (typeof window === \"undefined\") return () => {\n };\n if (sensor === \"magnetometer\" || !window.DeviceMotionEvent) {\n onError(\"E_MOTION_UNAVAILABLE\", \"Motion.addListener: sensor is unavailable\");\n return () => {\n };\n }\n observe();\n const listener = { sensor, intervalMs, last: -Infinity, onReading, onError };\n listeners.add(listener);\n const constructor = window.DeviceMotionEvent;\n if (constructor.requestPermission) {\n const fail = (message) => {\n if (!listeners.delete(listener)) return;\n if (!listeners.size) stopObserving();\n onError(\"E_MOTION_PERMISSION\", message);\n };\n try {\n constructor.requestPermission().then((permission) => {\n if (permission !== \"granted\")\n fail(\"Motion.addListener: motion permission is required\");\n }).catch((error) => fail(String(error)));\n } catch (error) {\n fail(String(error));\n }\n }\n return () => {\n listeners.delete(listener);\n if (!listeners.size) stopObserving();\n };\n }\n});\nexport {\n Motion\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}