From 266591a17d7a25e0c4863503a1d8df6ab8d7e48e Mon Sep 17 00:00:00 2001 From: Rohit Date: Tue, 18 Mar 2025 03:58:37 +0530 Subject: [PATCH] feat: add dimension util helper --- src/helpers/dimensionUtils.ts | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/helpers/dimensionUtils.ts diff --git a/src/helpers/dimensionUtils.ts b/src/helpers/dimensionUtils.ts new file mode 100644 index 00000000..13630729 --- /dev/null +++ b/src/helpers/dimensionUtils.ts @@ -0,0 +1,80 @@ +import { useEffect, useState } from 'react'; + +export const WIDTH_BREAKPOINTS = { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920 +}; + +export const HEIGHT_BREAKPOINTS = { + xs: 0, + sm: 700, + md: 800, + lg: 900, + xl: 1080, + xxl: 1440 +}; + +export interface AppDimensions { + browserWidth: number; + browserHeight: number; + panelHeight: number; + outputPreviewHeight: number; + outputPreviewWidth: number; + canvasWidth: number; + canvasHeight: number; +} + +export const getResponsiveDimensions = (): AppDimensions => { + const windowWidth = window.innerWidth; + const windowHeight = window.innerHeight; + + const browserWidth = windowWidth * 0.7; + const outputPreviewWidth = windowWidth * 0.716; + + let heightFraction = 0.64; + + if (windowHeight >= HEIGHT_BREAKPOINTS.xxl) { + heightFraction = 0.82; + } else if (windowHeight >= HEIGHT_BREAKPOINTS.xl) { + heightFraction = 0.76; + } else if (windowHeight >= HEIGHT_BREAKPOINTS.lg) { + heightFraction = 0.71; + } else if (windowHeight >= HEIGHT_BREAKPOINTS.md) { + heightFraction = 0.64; + } else if (windowHeight >= HEIGHT_BREAKPOINTS.sm) { + heightFraction = 0.62; + } + + const browserHeight = windowHeight * heightFraction; + + return { + browserWidth, + browserHeight, + panelHeight: browserHeight + 137, + outputPreviewHeight: windowHeight * 0.7, + outputPreviewWidth, + canvasWidth: browserWidth, + canvasHeight: browserHeight + }; +}; + +// React hook to get and update dimensions on window resize +export const useDimensions = () => { + const [dimensions, setDimensions] = useState(getResponsiveDimensions()); + + useEffect(() => { + const handleResize = () => { + setDimensions(getResponsiveDimensions()); + }; + + window.addEventListener('resize', handleResize); + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + return dimensions; +}; \ No newline at end of file