@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
44 lines (43 loc) • 1.5 kB
JavaScript
"use client";
const require_use_isomorphic_effect = require("../use-isomorphic-effect/use-isomorphic-effect.cjs");
let react = require("react");
//#region packages/@mantine/hooks/src/use-os/use-os.ts
function isMacOS(userAgent) {
return /(Macintosh)|(MacIntel)|(MacPPC)|(Mac68K)/i.test(userAgent);
}
function isIOS(userAgent) {
return /(iPhone)|(iPad)|(iPod)/i.test(userAgent);
}
function isWindows(userAgent) {
return /(Win32)|(Win64)|(Windows)|(WinCE)/i.test(userAgent);
}
function isAndroid(userAgent) {
return /Android/i.test(userAgent);
}
function isLinux(userAgent) {
return /Linux/i.test(userAgent);
}
function isChromeOS(userAgent) {
return /CrOS/i.test(userAgent);
}
function getOS() {
if (typeof window === "undefined") return "undetermined";
const { userAgent } = window.navigator;
if (isIOS(userAgent) || isMacOS(userAgent) && "ontouchend" in document) return "ios";
if (isMacOS(userAgent)) return "macos";
if (isWindows(userAgent)) return "windows";
if (isAndroid(userAgent)) return "android";
if (isLinux(userAgent)) return "linux";
if (isChromeOS(userAgent)) return "chromeos";
return "undetermined";
}
function useOs(options = { getValueInEffect: true }) {
const [value, setValue] = (0, react.useState)(options.getValueInEffect ? "undetermined" : getOS());
require_use_isomorphic_effect.useIsomorphicEffect(() => {
if (options.getValueInEffect) setValue(getOS);
}, []);
return value;
}
//#endregion
exports.useOs = useOs;
//# sourceMappingURL=use-os.cjs.map