diff --git a/src/components/utils/viewport/ViewportProvider.tsx b/src/components/utils/viewport/ViewportProvider.tsx
new file mode 100644
index 0000000..a456e3c
--- /dev/null
+++ b/src/components/utils/viewport/ViewportProvider.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+
+import viewportContext from './viewportContext'
+
+const ViewportProvider = (props: { children: React.ReactNode }) => {
+ const [width, setWidth] = React.useState(window.innerWidth)
+ const [height, setHeight] = React.useState(window.innerHeight)
+ const handleWindowResize = () => {
+ setWidth(window.innerWidth)
+ setHeight(window.innerHeight)
+ }
+
+ React.useEffect(() => {
+ window.addEventListener('resize', handleWindowResize)
+ return () => window.removeEventListener('resize', handleWindowResize)
+ }, [])
+
+ return {props.children}
+}
+
+export default ViewportProvider
diff --git a/src/components/utils/viewport/index.ts b/src/components/utils/viewport/index.ts
new file mode 100644
index 0000000..e18c80f
--- /dev/null
+++ b/src/components/utils/viewport/index.ts
@@ -0,0 +1,3 @@
+export { default as viewportContext } from './viewportContext'
+export { default as ViewportProvider } from './ViewportProvider'
+export { default as useViewport } from './useViewport'
diff --git a/src/components/utils/viewport/useViewport.ts b/src/components/utils/viewport/useViewport.ts
new file mode 100644
index 0000000..5d9a0f1
--- /dev/null
+++ b/src/components/utils/viewport/useViewport.ts
@@ -0,0 +1,10 @@
+import React from 'react'
+
+import viewportContext from './viewportContext'
+
+const useViewport = () => {
+ const { width, height } = React.useContext(viewportContext)
+ return { width, height }
+}
+
+export default useViewport
diff --git a/src/components/utils/viewport/viewportContext.tsx b/src/components/utils/viewport/viewportContext.tsx
new file mode 100644
index 0000000..b77bd6f
--- /dev/null
+++ b/src/components/utils/viewport/viewportContext.tsx
@@ -0,0 +1,6 @@
+import React from 'react'
+
+type Viewport = { width: number; height: number }
+const viewportContext = React.createContext({ width: window.innerWidth, height: window.innerHeight })
+
+export default viewportContext