diff --git a/apps/web/src/routes/_view/about.tsx b/apps/web/src/routes/_view/about.tsx index d284a0318f..71e869f229 100644 --- a/apps/web/src/routes/_view/about.tsx +++ b/apps/web/src/routes/_view/about.tsx @@ -1,6 +1,6 @@ -import { Icon } from "@iconify-icon/react"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; -import { Mail, XIcon } from "lucide-react"; +import { Mail, Menu, X, XIcon } from "lucide-react"; +import { AnimatePresence, motion } from "motion/react"; import { useEffect, useState } from "react"; import { @@ -8,6 +8,7 @@ import { ResizablePanel, ResizablePanelGroup, } from "@hypr/ui/components/ui/resizable"; +import { useIsMobile } from "@hypr/ui/hooks/use-mobile"; import { cn } from "@hypr/utils"; import { Image } from "@/components/image"; @@ -224,13 +225,44 @@ function AboutContentSection({ selectedItem: SelectedItem | null; setSelectedItem: (item: SelectedItem | null) => void; }) { + const isMobile = useIsMobile(); + const [drawerOpen, setDrawerOpen] = useState(false); + return (
- -
+ setDrawerOpen(true)} + className="p-1 hover:bg-neutral-200 rounded transition-colors" + aria-label="Open navigation" + > + + + ) + } + > +
{!selectedItem ? ( + ) : isMobile ? ( + <> + setDrawerOpen(false)} + selectedItem={selectedItem} + setSelectedItem={setSelectedItem} + /> + + ) : ( void; + selectedItem: SelectedItem; + setSelectedItem: (item: SelectedItem) => void; +}) { + return ( + + {open && ( + <> + + +
+ + Navigation + + +
+
+ { + setSelectedItem(item); + onClose(); + }} + /> + { + setSelectedItem(item); + onClose(); + }} + /> + { + setSelectedItem(item); + onClose(); + }} + /> +
+
+ + )} +
+ ); +} + +function AboutDetailContent({ + selectedItem, + setSelectedItem, +}: { + selectedItem: SelectedItem; + setSelectedItem: (item: SelectedItem | null) => void; +}) { + return ( +
+ {selectedItem?.type === "story" && ( + setSelectedItem(null)} /> + )} + {selectedItem?.type === "founder" && ( + setSelectedItem(null)} + /> + )} + {selectedItem?.type === "photo" && ( + setSelectedItem(null)} + /> + )} +
+ ); +} + function AboutSidebar({ selectedItem, setSelectedItem, diff --git a/apps/web/src/routes/_view/brand.tsx b/apps/web/src/routes/_view/brand.tsx index d1abe21212..a22a638a4a 100644 --- a/apps/web/src/routes/_view/brand.tsx +++ b/apps/web/src/routes/_view/brand.tsx @@ -1,5 +1,6 @@ import { createFileRoute } from "@tanstack/react-router"; -import { XIcon } from "lucide-react"; +import { Menu, X, XIcon } from "lucide-react"; +import { AnimatePresence, motion } from "motion/react"; import { useState } from "react"; import { @@ -7,6 +8,7 @@ import { ResizablePanel, ResizablePanelGroup, } from "@hypr/ui/components/ui/resizable"; +import { useIsMobile } from "@hypr/ui/hooks/use-mobile"; import { cn } from "@hypr/utils"; import { MockWindow } from "@/components/mock-window"; @@ -159,13 +161,44 @@ function BrandContentSection({ selectedItem: SelectedItem | null; setSelectedItem: (item: SelectedItem | null) => void; }) { + const isMobile = useIsMobile(); + const [drawerOpen, setDrawerOpen] = useState(false); + return (
- -
+ setDrawerOpen(true)} + className="p-1 hover:bg-neutral-200 rounded transition-colors" + aria-label="Open navigation" + > + + + ) + } + > +
{!selectedItem ? ( + ) : isMobile ? ( + <> + setDrawerOpen(false)} + selectedItem={selectedItem} + setSelectedItem={setSelectedItem} + /> + + ) : ( void; + selectedItem: SelectedItem; + setSelectedItem: (item: SelectedItem) => void; +}) { + return ( + + {open && ( + <> + + +
+ + Navigation + + +
+
+ { + setSelectedItem(item); + onClose(); + }} + /> + { + setSelectedItem(item); + onClose(); + }} + /> + { + setSelectedItem(item); + onClose(); + }} + /> +
+
+ + )} +
+ ); +} + +function BrandDetailContent({ + selectedItem, + setSelectedItem, +}: { + selectedItem: SelectedItem; + setSelectedItem: (item: SelectedItem | null) => void; +}) { + return ( +
+ {selectedItem.type === "visual" && ( + setSelectedItem(null)} + /> + )} + {selectedItem.type === "typography" && ( + setSelectedItem(null)} + /> + )} + {selectedItem.type === "color" && ( + setSelectedItem(null)} + /> + )} +
+ ); +} + function BrandSidebar({ selectedItem, setSelectedItem,