export type DeviceType = 'Mobile' | 'Tablet' | 'Desktop' | 'Other'; export type Browser = 'Chrome' | 'Edge' | 'Opera' | 'Firefox' | 'Safari' | 'Internet Explorer' | 'Other'; export type OS = 'iOS' | 'Android' | 'Windows' | 'MacOS' | 'Unknown'; export const deviceTypes = { Mobile: 'Mobile', Tablet: 'Tablet', Desktop: 'Desktop', Other: 'Other', }; export const browsers = { Chrome: 'Chrome', Edge: 'Edge', Opera: 'Opera', Firefox: 'Firefox', Safari: 'Safari', InternetExplorer: 'Internet Explorer', Other: 'Other', }; export const operatingSystems = { iOS: 'iOS', Android: 'Android', Windows: 'Windows', MacOS: 'MacOS', Unknown: 'Unknown', } function checkDeviceAndBrowser(): { deviceType: DeviceType, isStandalone: boolean, browser: Browser, os: OS } { const userAgent = navigator.userAgent; let deviceType: DeviceType; let browser: Browser; let os: OS; // Check for device type if (/iPhone|iPad|iPod/.test(userAgent)) { deviceType = /iPad/.test(userAgent) ? 'Tablet' : 'Mobile'; os = 'iOS'; } else if (/Android/.test(userAgent)) { deviceType = /Mobile/.test(userAgent) ? 'Mobile' : 'Tablet'; os = 'Android'; } else if (/Windows NT|Macintosh/.test(userAgent)) { deviceType = 'Desktop'; os = /Windows/.test(userAgent) ? 'Windows' : 'MacOS'; } else { deviceType = 'Other'; os = 'Unknown'; } // Check for standalone mode using matchMedia const isStandalone = window.matchMedia('(display-mode: standalone)').matches; // Check for browser if (/CriOS/.test(userAgent)) { browser = 'Chrome'; } else if (/EdgA|Edg/.test(userAgent)) { browser = 'Edge'; } else if (/OPR/.test(userAgent) || /Opera/.test(userAgent)) { browser = 'Opera'; } else if (/Firefox/.test(userAgent)) { browser = 'Firefox'; } else if (/Chrome/.test(userAgent)) { browser = 'Chrome'; } else if (/Safari/.test(userAgent) && !/Chrome/.test(userAgent)) { browser = 'Safari'; } else if (/MSIE|Trident/.test(userAgent)) { browser = 'Internet Explorer'; } else { browser = 'Other'; } return { deviceType: deviceType, isStandalone: isStandalone, browser: browser, os: os, }; } export const device = checkDeviceAndBrowser(); export default device