/** * External dependencies */ import { useResizeObserver } from 'wordpress-compose'; /** * Returns a resizeListener element and a class name based on its width. * Class names are based on the smaller of the breakpoints: * https://github.com/WordPress/gutenberg/tree/master/packages/viewport#usage * Values are also based on those breakpoints minus ~80px which is approximately * the left + right margin in Storefront with a font-size of 16px. * _Note: `useContainerQueries` will return an empty class name `` until after * first render_ * * @return {Array} An array of {Element} `resizeListener` and {string} `className`. * * @example * * ```js * const App = () => { * const [ resizeListener, containerClassName ] = useContainerQueries(); * * return ( *
* { resizeListener } * Your content here *
* ); * }; * ``` */ export const useContainerQueries = (): [ React.ReactElement, string ] => { const [ resizeListener, { width } ] = useResizeObserver(); let className = ''; if ( width > 700 ) { className = 'is-large'; } else if ( width > 520 ) { className = 'is-medium'; } else if ( width > 400 ) { className = 'is-small'; } else if ( width ) { className = 'is-mobile'; } return [ resizeListener, className ]; };