// Copyright 2017-2026 @pezkuwi/react-hooks authors & contributors // SPDX-License-Identifier: Apache-2.0 // Adapted from https://hackernoon.com/simplifying-responsive-layouts-with-react-hooks-19db73893a7a import type { WindowSize } from './types.js'; import React, { useEffect, useState } from 'react'; interface Props { children: React.ReactNode; } function getDimensions (): WindowSize { return { height: window.innerHeight, width: window.innerWidth }; } export const WindowSizeCtx = React.createContext(getDimensions()); export function WindowSizeCtxRoot ({ children }: Props): React.ReactElement { const [dimensions, setDimensions] = useState(() => getDimensions()); useEffect((): () => void => { function handleResize (): void { setDimensions(getDimensions()); } window.addEventListener('resize', handleResize); return (): void => { window.removeEventListener('resize', handleResize); }; }, []); return ( {children} ); }