Path: blob/master/src/packages/frontend/editors/slate/slate-react/utils/environment.ts
1698 views
import React from "react";12export const IS_REACT_VERSION_17_OR_ABOVE =3parseInt(React.version.split(".")[0], 10) >= 17;45export const IS_IOS =6typeof navigator !== "undefined" &&7typeof window !== "undefined" &&8/iPad|iPhone|iPod/.test(navigator.userAgent) &&9!window["MSStream"];1011export const IS_APPLE =12typeof navigator !== "undefined" && /Mac OS X/.test(navigator.userAgent);1314export const IS_ANDROID =15typeof navigator !== "undefined" && /Android/.test(navigator.userAgent);1617export const IS_FIREFOX =18typeof navigator !== "undefined" &&19/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);2021export const IS_SAFARI =22typeof navigator !== "undefined" &&23/Version\/[\d\.]+.*Safari/.test(navigator.userAgent);2425// "modern" Edge was released at 79.x26export const IS_EDGE_LEGACY =27typeof navigator !== "undefined" &&28/Edge?\/(?:[0-6][0-9]|[0-7][0-8])(?:\.)/i.test(navigator.userAgent);2930export const IS_CHROME =31typeof navigator !== "undefined" && /Chrome/i.test(navigator.userAgent);3233// Native `beforeInput` events don't work well with react on Chrome 7534// and older, Chrome 76+ can use `beforeInput` though.35export const IS_CHROME_LEGACY =36typeof navigator !== "undefined" &&37/Chrome?\/(?:[0-7][0-5]|[0-6][0-9])(?:\.)/i.test(navigator.userAgent);3839// Firefox did not support `beforeInput` until `v87`.40export const IS_FIREFOX_LEGACY =41typeof navigator !== "undefined" &&42/^(?!.*Seamonkey)(?=.*Firefox\/(?:[0-7][0-9]|[0-8][0-6])(?:\.)).*/i.test(43navigator.userAgent44);4546// qq browser47export const IS_QQBROWSER =48typeof navigator !== "undefined" && /.*QQBrowser/.test(navigator.userAgent);4950// UC mobile browser51export const IS_UC_MOBILE =52typeof navigator !== "undefined" && /.*UCBrowser/.test(navigator.userAgent);5354// Wechat browser55export const IS_WECHATBROWSER =56typeof navigator !== "undefined" && /.*Wechat/.test(navigator.userAgent);5758// Check if DOM is available as React does internally.59// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js60export const CAN_USE_DOM = !!(61typeof window !== "undefined" &&62typeof window.document !== "undefined" &&63typeof window.document.createElement !== "undefined"64);6566// COMPAT: Firefox/Edge Legacy don't support the `beforeinput` event67// Chrome Legacy doesn't support `beforeinput` correctly68export const HAS_BEFORE_INPUT_SUPPORT =69!IS_CHROME_LEGACY &&70!IS_EDGE_LEGACY &&71// globalThis is undefined in older browsers72typeof globalThis !== "undefined" &&73globalThis.InputEvent &&74// @ts-ignore The `getTargetRanges` property isn't recognized.75typeof globalThis.InputEvent.prototype.getTargetRanges === "function";767778