diff --git a/src/components/ResponsiveToolBar.tsx b/src/components/ResponsiveToolBar.tsx
new file mode 100644
index 0000000000..846db2e551
--- /dev/null
+++ b/src/components/ResponsiveToolBar.tsx
@@ -0,0 +1,62 @@
+import React from 'react'
+import { Flex, IconButton, useTheme } from '@chakra-ui/react'
+import { HiOutlineDesktopComputer } from 'react-icons/hi'
+import { MdOutlineTabletMac } from 'react-icons/md'
+import { ImMobile } from 'react-icons/im'
+import useDispatch from '~hooks/useDispatch'
+import { getEditorWidth } from '~core/selectors/app'
+import { useSelector } from 'react-redux'
+
+const ResponsiveToolBar = () => {
+ const dispatch = useDispatch()
+ const theme = useTheme()
+ const editorWidth = useSelector(getEditorWidth)
+
+ return (
+
+ }
+ size="lg"
+ fontSize="30px"
+ color={editorWidth === '100%' ? 'teal.500' : 'black.500'}
+ aria-label="Desktop version"
+ onClick={() => dispatch.app.updateEditorWidth({ width: '100%' })}
+ />
+
+ }
+ size="lg"
+ color={editorWidth === theme.breakpoints.md ? 'teal.500' : 'black.500'}
+ fontSize="30px"
+ aria-label="Tablet version"
+ mx={12}
+ onClick={() =>
+ dispatch.app.updateEditorWidth({ width: theme.breakpoints.md })
+ }
+ />
+
+ }
+ size="lg"
+ color={editorWidth === theme.breakpoints.sm ? 'teal.500' : 'black.500'}
+ fontSize="30px"
+ aria-label="Mobile version"
+ onClick={() =>
+ dispatch.app.updateEditorWidth({ width: theme.breakpoints.sm })
+ }
+ />
+
+ )
+}
+
+export default ResponsiveToolBar
diff --git a/src/core/models/app.ts b/src/core/models/app.ts
index 9f6fa98590..0476bf5b3b 100644
--- a/src/core/models/app.ts
+++ b/src/core/models/app.ts
@@ -6,6 +6,7 @@ export type AppState = {
showLayout: boolean
showCode: boolean
inputTextFocused: boolean
+ editorWidth: string
overlay: undefined | Overlay
}
@@ -14,6 +15,7 @@ const app = createModel({
showLayout: true,
showCode: false,
inputTextFocused: false,
+ editorWidth: '100%',
overlay: undefined,
} as AppState,
reducers: {
@@ -41,6 +43,12 @@ const app = createModel({
overlay,
}
},
+ updateEditorWidth(state: AppState, payload: { width: string }): AppState {
+ return {
+ ...state,
+ editorWidth: payload.width,
+ }
+ },
'components/deleteComponent': (state: AppState): AppState => {
return {
...state,
diff --git a/src/core/selectors/app.ts b/src/core/selectors/app.ts
index a00078d01b..26050e0ea2 100644
--- a/src/core/selectors/app.ts
+++ b/src/core/selectors/app.ts
@@ -10,3 +10,5 @@ export const getFocusedComponent = (id: IComponent['id']) => (
export const getInputTextFocused = (state: RootState) =>
state.app.inputTextFocused
+
+export const getEditorWidth = (state: RootState) => state.app.editorWidth
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 69f586f913..6b5c06ba09 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -11,8 +11,13 @@ import EditorErrorBoundary from '~components/errorBoundaries/EditorErrorBoundary
import Editor from '~components/editor/Editor'
import { InspectorProvider } from '~contexts/inspector-context'
import Inspector from '~components/inspector/Inspector'
+import ResponsiveToolBar from '~components/ResponsiveToolBar'
+import { useSelector } from 'react-redux'
+import { getEditorWidth } from '~core/selectors/app'
const App = () => {
+ const editorWidth = useSelector(getEditorWidth)
+
useShortcuts()
return (
@@ -28,8 +33,20 @@ const App = () => {
-
-
+
+
+
+
+