{"version":3,"file":"use-os.mjs","names":[],"sources":["../../src/use-os/use-os.ts"],"sourcesContent":["import { useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport type UseOSReturnValue =\n  | 'undetermined'\n  | 'macos'\n  | 'ios'\n  | 'windows'\n  | 'android'\n  | 'linux'\n  | 'chromeos';\n\nfunction isMacOS(userAgent: string): boolean {\n  const macosPattern = /(Macintosh)|(MacIntel)|(MacPPC)|(Mac68K)/i;\n\n  return macosPattern.test(userAgent);\n}\n\nfunction isIOS(userAgent: string): boolean {\n  const iosPattern = /(iPhone)|(iPad)|(iPod)/i;\n\n  return iosPattern.test(userAgent);\n}\n\nfunction isWindows(userAgent: string): boolean {\n  const windowsPattern = /(Win32)|(Win64)|(Windows)|(WinCE)/i;\n\n  return windowsPattern.test(userAgent);\n}\n\nfunction isAndroid(userAgent: string): boolean {\n  const androidPattern = /Android/i;\n\n  return androidPattern.test(userAgent);\n}\n\nfunction isLinux(userAgent: string): boolean {\n  const linuxPattern = /Linux/i;\n\n  return linuxPattern.test(userAgent);\n}\n\nfunction isChromeOS(userAgent: string): boolean {\n  const chromePattern = /CrOS/i;\n  return chromePattern.test(userAgent);\n}\n\nfunction getOS(): UseOSReturnValue {\n  if (typeof window === 'undefined') {\n    return 'undetermined';\n  }\n\n  const { userAgent } = window.navigator;\n\n  if (isIOS(userAgent) || (isMacOS(userAgent) && 'ontouchend' in document)) {\n    return 'ios';\n  }\n  if (isMacOS(userAgent)) {\n    return 'macos';\n  }\n  if (isWindows(userAgent)) {\n    return 'windows';\n  }\n  if (isAndroid(userAgent)) {\n    return 'android';\n  }\n  if (isLinux(userAgent)) {\n    return 'linux';\n  }\n  if (isChromeOS(userAgent)) {\n    return 'chromeos';\n  }\n\n  return 'undetermined';\n}\n\nexport interface UseOsOptions {\n  getValueInEffect: boolean;\n}\n\nexport function useOs(options: UseOsOptions = { getValueInEffect: true }): UseOSReturnValue {\n  const [value, setValue] = useState<UseOSReturnValue>(\n    options.getValueInEffect ? 'undetermined' : getOS()\n  );\n\n  useIsomorphicEffect(() => {\n    if (options.getValueInEffect) {\n      setValue(getOS);\n    }\n  }, []);\n\n  return value;\n}\n\nexport namespace useOs {\n  export type Options = UseOsOptions;\n  export type ReturnValue = UseOSReturnValue;\n}\n"],"mappings":";;;;AAYA,SAAS,QAAQ,WAA4B;AAG3C,QAFqB,4CAED,KAAK,UAAU;;AAGrC,SAAS,MAAM,WAA4B;AAGzC,QAFmB,0BAED,KAAK,UAAU;;AAGnC,SAAS,UAAU,WAA4B;AAG7C,QAFuB,qCAED,KAAK,UAAU;;AAGvC,SAAS,UAAU,WAA4B;AAG7C,QAFuB,WAED,KAAK,UAAU;;AAGvC,SAAS,QAAQ,WAA4B;AAG3C,QAFqB,SAED,KAAK,UAAU;;AAGrC,SAAS,WAAW,WAA4B;AAE9C,QADsB,QACD,KAAK,UAAU;;AAGtC,SAAS,QAA0B;AACjC,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,EAAE,cAAc,OAAO;AAE7B,KAAI,MAAM,UAAU,IAAK,QAAQ,UAAU,IAAI,gBAAgB,SAC7D,QAAO;AAET,KAAI,QAAQ,UAAU,CACpB,QAAO;AAET,KAAI,UAAU,UAAU,CACtB,QAAO;AAET,KAAI,UAAU,UAAU,CACtB,QAAO;AAET,KAAI,QAAQ,UAAU,CACpB,QAAO;AAET,KAAI,WAAW,UAAU,CACvB,QAAO;AAGT,QAAO;;AAOT,SAAgB,MAAM,UAAwB,EAAE,kBAAkB,MAAM,EAAoB;CAC1F,MAAM,CAAC,OAAO,YAAY,SACxB,QAAQ,mBAAmB,iBAAiB,OAAO,CACpD;AAED,2BAA0B;AACxB,MAAI,QAAQ,iBACV,UAAS,MAAM;IAEhB,EAAE,CAAC;AAEN,QAAO"}