@@ -3,7 +3,7 @@ import { useMode } from "@/context/ModeContext";
33import { Button } from "@/components/ui/button" ;
44import { Sheet , SheetContent , SheetTrigger } from "@/components/ui/sheet" ;
55import { Menu , Download , ChevronDown , Terminal } from "lucide-react" ;
6-
6+ import { useToast } from "@/hooks/use-toast" ;
77
88const navItems = [
99 { href : "#home" , label : "Home" } ,
@@ -15,10 +15,37 @@ const navItems = [
1515] ;
1616
1717export function Navigation ( ) {
18- const { toggleMode } = useMode ( ) ;
18+ const { mode , toggleMode, setMode } = useMode ( ) ;
1919 const [ activeSection , setActiveSection ] = useState ( "home" ) ;
2020 const [ isScrolled , setIsScrolled ] = useState ( false ) ;
21+ const { toast } = useToast ( ) ;
22+
23+ // Check for mobile and disable dev mode
24+ useEffect ( ( ) => {
25+ const checkMobile = ( ) => {
26+ if ( window . innerWidth < 768 ) { // md breakpoint
27+ if ( mode === 'developer' ) {
28+ setMode ( 'normal' ) ;
29+ }
30+
31+ // Show toast only once per session or on load if checking for mobile
32+ // To avoid spamming, we might want to check a session ref, but for now simple is fine check
33+ const hasNotified = sessionStorage . getItem ( 'mobile-dev-mode-notified' ) ;
34+ if ( ! hasNotified ) {
35+ toast ( {
36+ title : "Developer Mode Unavailable" ,
37+ description : "This portfolio has a Developer Mode. If you want to try it, please visit on a laptop/PC. It's not available on mobile for better DX." ,
38+ duration : 5000 ,
39+ } ) ;
40+ sessionStorage . setItem ( 'mobile-dev-mode-notified' , 'true' ) ;
41+ }
42+ }
43+ } ;
2144
45+ checkMobile ( ) ;
46+ window . addEventListener ( 'resize' , checkMobile ) ;
47+ return ( ) => window . removeEventListener ( 'resize' , checkMobile ) ;
48+ } , [ mode , setMode , toast ] ) ;
2249
2350 useEffect ( ( ) => {
2451 const handleScroll = ( ) => {
@@ -51,6 +78,18 @@ export function Navigation() {
5178 }
5279 } ;
5380
81+ const handleModeToggle = ( ) => {
82+ if ( window . innerWidth < 768 ) {
83+ toast ( {
84+ title : "Desktop Only Feature" ,
85+ description : "Developer Mode is only available on larger screens for the best experience." ,
86+ variant : "destructive" ,
87+ } ) ;
88+ return ;
89+ }
90+ toggleMode ( ) ;
91+ } ;
92+
5493 // Normal Mode Navigation
5594 return (
5695 < nav className = { `fixed top-0 w-full z-50 transition-all duration-300 ${ isScrolled
@@ -84,7 +123,7 @@ export function Navigation() {
84123 < div className = "flex items-center space-x-3 md:space-x-4" >
85124 { /* Dev Mode Toggle */ }
86125 < button
87- onClick = { ( ) => toggleMode ( ) }
126+ onClick = { handleModeToggle }
88127 className = "p-2 text-neutral-400 hover:text-white hover:bg-neutral-800 rounded-md transition-all duration-300"
89128 title = "Switch to Developer Mode"
90129 >
0 commit comments