diff --git a/src/App.module.css b/src/App.module.css index ce4b11a..d7c97be 100644 --- a/src/App.module.css +++ b/src/App.module.css @@ -1,4 +1,4 @@ -.appContainer { +.appWrapper { height: 100vh; width: 100%; overflow: hidden; @@ -20,24 +20,24 @@ display: flex; } - .alphaZone { + .firstZone { flex: 1; } - .betaZone { + .secondZone { flex: 1; } - .colorPickerContainer { + .colorPickerWrapper { } - .colorValuesContainer { + .colorValuesWrapper { } - .paletteEditorContainer { + .paletteEditorWrapper { } - .paletteLibraryContainer { + .paletteLibraryWrapper { } } @@ -61,35 +61,35 @@ .mobileRightNav { } - .mobileAlphaZone { + .mobileFirstZone { flex: 1; } - .mobileBetaZone { + .mobileSecondZone { flex: 1; } - .tabbedContainer { + .tabWrapper { max-height: 100vh; overflow-y: scroll; scroll-snap-type: y mandatory; } - .tabbedContainer .tab { + .tabWrapper .tab { height: 100vh; scroll-snap-align: start; } - .colorPickerContainer { + .colorPickerWrapper { } - .colorValuesContainer { + .colorValuesWrapper { } - .paletteEditorContainer { + .paletteEditorWrapper { } - .paletteLibraryContainer { + .paletteLibraryWrapper { } } @@ -119,32 +119,32 @@ margin-left: auto; } - .mobileAlphaZone { + .mobileFirstZone { } - .mobileBetaZone { + .mobileSecondZone { } - .tabbedContainer { + .tabWrapper { display: flex; overflow-x: scroll; scroll-snap-type: x mandatory; } - .tabbedContainer .tab { + .tabWrapper .tab { min-width: 100vw; scroll-snap-align: start; } - .colorPickerContainer { + .colorPickerWrapper { } - .colorValuesContainer { + .colorValuesWrapper { } - .paletteEditorContainer { + .paletteEditorWrapper { } - .paletteLibraryContainer { + .paletteLibraryWrapper { } } diff --git a/src/App.tsx b/src/App.tsx index f8df026..dc38dae 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,86 +5,224 @@ import ColorValues from "./components/ColorValues/ColorValues"; import { LeftMenu, RightMenu } from "./components/SideMenu"; import clsx from "clsx"; +// Menu Button Components + +interface MenuButtonProps { + onClick: () => void; + isOpen: boolean; +} + +function LeftMenuButton({ onClick, isOpen }: MenuButtonProps) { + return ( + + ); +} + +function RightMenuButton({ onClick, isOpen }: MenuButtonProps) { + return ( + + ); +} + +// Mobile Layout Components + +interface MenuStateProps { + isRightMenuOpen: boolean; + isLeftMenuOpen: boolean; + setIsRightMenuOpen: (state: boolean) => void; + setIsLeftMenuOpen: (state: boolean) => void; +} + +function MobileTopNav({ + onLeftMenuClick, + onRightMenuClick, + isRightMenuOpen, + isLeftMenuOpen, +}: { + onLeftMenuClick: () => void; + onRightMenuClick: () => void; + isRightMenuOpen: boolean; + isLeftMenuOpen: boolean; +}) { + return ( + + ); +} + +function MobileLeftNav({ onClick, isOpen }: MenuButtonProps) { + return ( + + ); +} + +function MobileRightNav({ onClick, isOpen }: MenuButtonProps) { + return ( + + ); +} + +function MobileFirstZone() { + return ( +
+
+
+ +
+
+ +
+
+
+ ); +} + +function MobileSecondZone() { + return ( +
+
+
+ ); +} + +function MobileContent({ + isLeftMenuOpen, + setIsLeftMenuOpen, + isRightMenuOpen, + setIsRightMenuOpen, +}: MenuStateProps) { + const toggleRightMenu = () => setIsRightMenuOpen(!isRightMenuOpen); + const toggleLeftMenu = () => setIsLeftMenuOpen(!isLeftMenuOpen); + + return ( +
+ + + + + + + + + + setIsLeftMenuOpen(false)} + > +
+ User Info +
+
+ + setIsRightMenuOpen(false)} + > +
+ Palette Library +
+
+
+ ); +} + +// Desktop Layout Components + +function FirstZone() { + return ( +
+
+ +
+ +
+ +
+
+ ); +} + +function SecondZone() { + return ( +
+
+
+
+ ); +} + +function DesktopContent() { + return ( +
+ + +
+ ); +} + +// Main App Component + function App() { const [isRightMenuOpen, setIsRightMenuOpen] = useState(false); const [isLeftMenuOpen, setIsLeftMenuOpen] = useState(false); - const toggleRightMenu = () => setIsRightMenuOpen(!isRightMenuOpen); - const toggleLeftMenu = () => setIsLeftMenuOpen(!isLeftMenuOpen); - - const RightMenuButton = () => ( - - ); - const LeftMenuButton = () => ( - - ); - return ( -
-
-
- - -
- -
- -
- -
-
-
- -
-
- -
-
-
- -
-
-
- -
- -
- - setIsLeftMenuOpen(false)} - > -
User Info
-
- - setIsRightMenuOpen(false)} - > -
Palette Library
-
-
- -
-
-
- -
- -
- -
-
- -
-
-
-
-
+
+ +
); } diff --git a/src/components/SideMenu/SideMenu.module.css b/src/components/SideMenu/SideMenu.module.css index bb0cb1d..952c849 100644 --- a/src/components/SideMenu/SideMenu.module.css +++ b/src/components/SideMenu/SideMenu.module.css @@ -9,6 +9,14 @@ transition: 0.3s ease-out; } +.sideMenu:not(.open) { + visibility: hidden; +} + +.sideMenu.open { + visibility: visible; +} + .sideMenuUnderlay { position: fixed; top: 0; diff --git a/src/components/SideMenu/SideMenu.tsx b/src/components/SideMenu/SideMenu.tsx index 7b0802d..d9971c4 100644 --- a/src/components/SideMenu/SideMenu.tsx +++ b/src/components/SideMenu/SideMenu.tsx @@ -14,6 +14,7 @@ interface BaseMenuProps extends SideMenuProps { function BaseMenu({ isOpen, onClose, children, position }: BaseMenuProps) { const isLeftMenu = position === "left"; + const menuId = `${position}-side-menu`; const handleUnderlayClick = (e: React.MouseEvent) => { if (e.target === e.currentTarget) { @@ -25,8 +26,13 @@ function BaseMenu({ isOpen, onClose, children, position }: BaseMenuProps) {