| 123456789101112131415161718192021222324252627282930313233343536373839 |
- 'use client'
- import { useState } from 'react'
- import { useIsomorphicLayoutEffect, useWindowSize } from 'react-use'
- /**
- * Map of Tailwind default breakpoint values. Allows setting a value by
- * Tailwind breakpoint, so that it syncs up with CSS changes.
- *
- * Note Tailwind uses `min-width` logic, whereas we use `max-width` logic, so
- * the values are offset by 1px.
- *
- * Source:
- * https://tailwindcss.com/docs/responsive-design
- */
- const twBreakpointMap = {
- sm: 639,
- md: 767,
- lg: 1023,
- xl: 1279,
- '2xl': 1535,
- }
- export function useBreakpoint(breakpoint: number | keyof typeof twBreakpointMap = 'lg') {
- const [isBreakpoint, setIsBreakpoint] = useState(false)
- const { width } = useWindowSize()
- const _breakpoint = typeof breakpoint === 'string' ? twBreakpointMap[breakpoint] : breakpoint
- useIsomorphicLayoutEffect(() => {
- if (width <= _breakpoint) {
- setIsBreakpoint(true)
- } else {
- setIsBreakpoint(false)
- }
- }, [width])
- return isBreakpoint
- }
|