mirror of
https://github.com/supabase/supabase.git
synced 2026-10-16 06:39:09 +03:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { useSyncExternalStore } from 'react'
|
|
|
|
export const detectBrowser = () => {
|
|
if (!navigator) return undefined
|
|
|
|
if (navigator.userAgent.indexOf('Chrome') !== -1) {
|
|
return 'Chrome'
|
|
} else if (navigator.userAgent.indexOf('Firefox') !== -1) {
|
|
return 'Firefox'
|
|
} else if (navigator.userAgent.indexOf('Safari') !== -1) {
|
|
return 'Safari'
|
|
}
|
|
}
|
|
|
|
export const isBrowser = typeof window !== 'undefined'
|
|
|
|
const prefersReducedMotionMediaQuery =
|
|
isBrowser && window.matchMedia('(prefers-reduced-motion: reduce)')
|
|
|
|
/**
|
|
* @returns boolean value If the user has expressed their preference for reduced motion.
|
|
*/
|
|
export const useReducedMotion = (): boolean => {
|
|
if (!prefersReducedMotionMediaQuery) return false
|
|
return useSyncExternalStore(
|
|
(callback) => {
|
|
prefersReducedMotionMediaQuery.addEventListener('change', callback)
|
|
return () => {
|
|
prefersReducedMotionMediaQuery.removeEventListener('change', callback)
|
|
}
|
|
},
|
|
() => prefersReducedMotionMediaQuery.matches,
|
|
() => false
|
|
)
|
|
}
|
|
|
|
export function ensurePlatformSuffix(apiUrl: string) {
|
|
return apiUrl.endsWith('/platform') ? apiUrl : `${apiUrl}/platform`
|
|
}
|