@@ -77,21 +77,21 @@ const navItems = [
77
77
} ,
78
78
{
79
79
title : 'Community Stories' ,
80
- image : 'https://keploy.io/_next/static/media/community.d62a63d8 .svg' ,
80
+ image : 'https://keploy.io/images/heart .svg' ,
81
81
href : 'https://www.g2.com/products/keploy/reviews' ,
82
82
height : '160px' ,
83
83
width : '200px' ,
84
84
} ,
85
85
{
86
86
title : 'Tutorials' ,
87
- image : 'https://keploy.io/_next/static/media/tutorials.7666a675 .svg' ,
87
+ image : 'https://keploy.io/images/book .svg' ,
88
88
href : 'https://www.youtube.com/playlist?list=PLuImHQnqnB_b3MbF1_873XeMhXkaZPpwV' ,
89
89
height : '160px' ,
90
90
width : '200px' ,
91
91
} ,
92
92
{
93
93
title : 'Migration Guide' ,
94
- image : 'https://keploy.io/_next/static/media/migration.8de1314d .svg' ,
94
+ image : 'https://keploy.io/images/user-manual .svg' ,
95
95
href : 'https://keploy.io/blog/technology/migration-guide-from-restassured-to-keploy' ,
96
96
height : '160px' ,
97
97
width : '200px' ,
@@ -125,14 +125,14 @@ const navItems = [
125
125
} ,
126
126
{
127
127
title : 'Contact Us' ,
128
- image : 'https://keploy.io/_next/static/media/contact.8d4fbcb2 .svg' ,
128
+ image : 'https://keploy.io/_next/static/media/resource-1.500a7b0a .svg' ,
129
129
href : 'https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2l-psdTCNCLYAJ-Jt5ESyGP7gi1_U70ySTjtFNr0Kmx5UagNJnyzg7lNjA3NKnaP6qFfpAgcdZ' ,
130
130
height : '140px' ,
131
131
width : '180px' ,
132
132
} ,
133
133
{
134
134
title : 'Community Forum' ,
135
- image : 'https://keploy.io/_next/static/media/community-forum.f92d4c5e .svg' ,
135
+ image : 'https://keploy.io/_next/static/media/resource-2.b09d3d88 .svg' ,
136
136
href : 'https://github.com/keploy' ,
137
137
height : '140px' ,
138
138
width : '180px' ,
@@ -305,37 +305,262 @@ export default function Navbar() {
305
305
) }
306
306
</ div >
307
307
) ) }
308
-
309
- { /* Mega menu dropdown - with hover handling */ }
308
+
309
+ { /* Mega menu dropdown - custom layout for each menu */ }
310
310
{ openMenu && navItems . find ( item => item . label === openMenu ) ?. megaMenu && (
311
- < div
312
- className = "absolute left-0 top-14 min-w-max backdrop-blur-md bg-white/3 rounded-2xl shadow-2xl p-6 flex gap-6 animate-fade-in z-50"
313
- onMouseEnter = { ( ) => {
314
- if ( timeoutRef . current ) {
315
- clearTimeout ( timeoutRef . current ) ;
316
- }
317
- } }
311
+ < div
312
+ className = { `absolute left-0 top-14 w-full max-w-[1400px] min-h-[440px] flex rounded-2xl shadow-2xl p-6 animate-fade-in z-50 backdrop-blur-md ${ isDarkTheme ? 'bg-[#18181b]/60' : 'bg-white/60' } ` }
313
+ onMouseEnter = { ( ) => { if ( timeoutRef . current ) clearTimeout ( timeoutRef . current ) ; } }
318
314
onMouseLeave = { handleMouseLeave }
315
+ style = { { justifyContent : 'center' } }
319
316
>
320
- < div className = "grid grid-cols-3 gap-6" >
321
- { navItems . find ( item => item . label === openMenu ) . megaMenu . map ( ( card ) => (
322
- < Link
323
- to = { card . href }
324
- key = { card . title }
325
- className = "relative group w-[340px] h-[280px] overflow-hidden rounded-2xl shadow-md border border-orange-200 dark:border-orange-700 transition-transform duration-200 hover:scale-[1.02]"
326
- >
327
- < img
328
- src = { card . image }
329
- alt = { card . title }
330
- className = "absolute inset-0 w-full h-full object-cover opacity-90 group-hover:opacity-100 transition-opacity duration-300"
331
- />
332
- < div className = "absolute inset-0 p-4 flex flex-col justify-end" >
333
- < div className = "text-gray-800 font-semibold text-lg" > { card . title } </ div >
334
- < div className = "text-sm text-gray-700 mt-1" > { card . description } </ div >
335
- </ div >
336
- </ Link >
337
- ) ) }
338
- </ div >
317
+ { /* PRODUCTS: 2x2 grid, large left card, two stacked right cards */ }
318
+ { openMenu === 'Products' && (
319
+ < div className = "flex w-full gap-6" >
320
+ { /* Left Half */ }
321
+ < div className = "flex flex-col gap-6 w-1/2" >
322
+ < Link
323
+ to = { navItems [ 0 ] . megaMenu [ 0 ] . href }
324
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white shadow-md overflow-hidden hover:scale-[1.02] transition-transform"
325
+ style = { { height : navItems [ 0 ] . megaMenu [ 0 ] . height } }
326
+ >
327
+ < img
328
+ src = { navItems [ 0 ] . megaMenu [ 0 ] . image }
329
+ alt = { navItems [ 0 ] . megaMenu [ 0 ] . title }
330
+ className = "absolute inset-0 w-full h-full object-contain"
331
+ />
332
+ < div className = "absolute inset-0 bg-gradient-to-b from-transparent to-orange-50 p-6 flex flex-col justify-start text-left" >
333
+ < div className = "text-gray-900 font-semibold text-xl" >
334
+ { navItems [ 0 ] . megaMenu [ 0 ] . title }
335
+ </ div >
336
+ < div className = "text-xs text-gray-600 mt-1" >
337
+ { navItems [ 0 ] . megaMenu [ 0 ] . description }
338
+ </ div >
339
+ </ div >
340
+ </ Link >
341
+ </ div >
342
+
343
+ { /* Right Half */ }
344
+ < div className = "flex flex-col gap-6 w-1/2" >
345
+ { [ 1 , 2 ] . map ( ( idx ) => (
346
+ < Link
347
+ key = { navItems [ 0 ] . megaMenu [ idx ] . title }
348
+ to = { navItems [ 0 ] . megaMenu [ idx ] . href }
349
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white shadow-md overflow-hidden hover:scale-[1.02] transition-transform"
350
+ style = { { height : navItems [ 0 ] . megaMenu [ idx ] . height } }
351
+ >
352
+ < img
353
+ src = { navItems [ 0 ] . megaMenu [ idx ] . image }
354
+ alt = { navItems [ 0 ] . megaMenu [ idx ] . title }
355
+ className = "absolute inset-0 w-full h-full object-contain"
356
+ />
357
+ < div className = "absolute inset-0 bg-gradient-to-b from-transparent to-orange-50 p-6 flex flex-col justify-start text-left" >
358
+ < div className = "text-gray-900 font-semibold text-lg" >
359
+ { navItems [ 0 ] . megaMenu [ idx ] . title }
360
+ </ div >
361
+ < div className = "text-xs text-gray-600 mt-1" >
362
+ { navItems [ 0 ] . megaMenu [ idx ] . description }
363
+ </ div >
364
+ </ div >
365
+ </ Link >
366
+ ) ) }
367
+ </ div >
368
+ </ div >
369
+ ) }
370
+
371
+ { /* SOLUTIONS: 3 cards in a row, each with a white background, orange border, rounded corners, shadow, and proper spacing */ }
372
+ { openMenu === 'Solutions' && (
373
+ < div className = "flex w-full gap-1 justify-center" >
374
+ < div className = "grid grid-cols-3 gap-4 w-auto" >
375
+ { navItems [ 1 ] . megaMenu . map ( ( card ) => (
376
+ < Link
377
+ key = { card . title }
378
+ to = { card . href }
379
+ className = "relative group rounded-2xl border-2 border-orange-200 bg-gradient-to-b from-white to-orange-50 overflow-hidden hover:scale-[1.03] transition-transform"
380
+ style = { { height : '360px' , width : '200px' } }
381
+ >
382
+ { /* Image as background layer */ }
383
+ < img
384
+ src = { card . image }
385
+ alt = { card . title }
386
+ className = "w-full h-full object-contain"
387
+ />
388
+
389
+ { /* Overlay text container */ }
390
+ < div className = "absolute inset-0 p-4 flex flex-col justify-start items-start text-left" >
391
+ < div className = "text-gray-900 font-semibold text-lg" > { card . title } </ div >
392
+ { card . description && (
393
+ < div className = "text-gray-700 text-sm mt-1" > { card . description } </ div >
394
+ ) }
395
+ </ div >
396
+ </ Link >
397
+ ) ) }
398
+ </ div >
399
+ </ div >
400
+
401
+ ) }
402
+ { /* DEVELOPERS: 2 large cards left, 3 stacked right cards */ }
403
+ { openMenu === 'Developers' && (
404
+ < div className = "flex w-full gap-6" >
405
+ { /* Left Column (Large Cards) */ }
406
+ < div className = "flex gap-6 w-2/3" >
407
+ { [ 0 , 1 ] . map ( ( idx ) => (
408
+ < Link
409
+ key = { navItems [ 2 ] . megaMenu [ idx ] . title }
410
+ to = { navItems [ 2 ] . megaMenu [ idx ] . href }
411
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white overflow-hidden hover:scale-[1.02] transition-transform"
412
+ >
413
+ < img
414
+ src = { navItems [ 2 ] . megaMenu [ idx ] . image }
415
+ alt = { navItems [ 2 ] . megaMenu [ idx ] . title }
416
+ className = "absolute inset-0 w-full h-full object-contain"
417
+ />
418
+ < div className = "absolute inset-0 bg-gradient-to-b from-transparent to-orange-50 p-6 flex flex-col justify-start text-left" >
419
+ < div className = "text-gray-900 font-semibold text-lg" >
420
+ { navItems [ 2 ] . megaMenu [ idx ] . title }
421
+ </ div >
422
+ { navItems [ 2 ] . megaMenu [ idx ] . description && (
423
+ < div className = "text-xs text-gray-600 mt-1" >
424
+ { navItems [ 2 ] . megaMenu [ idx ] . description }
425
+ </ div >
426
+ ) }
427
+ </ div >
428
+ </ Link >
429
+ ) ) }
430
+ </ div >
431
+
432
+ { /* Right Column (Horizontal Row Cards) */ }
433
+ < div className = "flex flex-col gap-4 w-1/3" >
434
+ { [ 2 , 3 , 4 ] . map ( idx => (
435
+ < Link key = { navItems [ 2 ] . megaMenu [ idx ] . title } to = { navItems [ 2 ] . megaMenu [ idx ] . href } className = "relative group flex-1 rounded-2xl border-2 border-orange-200 bg-gradient-to-b from-white to-orange-50 overflow-hidden hover:scale-[1.02] transition-transform flex flex-row items-center" style = { { height : navItems [ 2 ] . megaMenu [ idx ] . height } } >
436
+ < img src = { navItems [ 2 ] . megaMenu [ idx ] . image } alt = { navItems [ 2 ] . megaMenu [ idx ] . title } className = "w-8 h-8 ml-4" />
437
+ < div className = "ml-4" >
438
+ < div className = "text-gray-700 font-semibold text-md" > { navItems [ 2 ] . megaMenu [ idx ] . title } </ div >
439
+ < div className = "text-xs text-gray-600" > { navItems [ 2 ] . megaMenu [ idx ] . description || '' } </ div >
440
+ </ div >
441
+ </ Link >
442
+ ) ) }
443
+ </ div >
444
+ </ div >
445
+ ) }
446
+
447
+ { /* RESOURCES: 2x2 grid left, 2 stacked right cards */ }
448
+ { openMenu === 'Resources' && (
449
+ < div className = "flex w-full gap-6" >
450
+ { /* Left: 2x2 grid of image cards */ }
451
+ { /* Left Column (cards 0 and 1) */ }
452
+ < div className = "flex flex-col gap-6 w-1/3" >
453
+ { [ 0 , 1 ] . map ( ( idx ) => {
454
+ const card = navItems [ 4 ] . megaMenu [ idx ] ;
455
+ if ( ! card ) return null ;
456
+ return (
457
+ < Link
458
+ key = { card . title }
459
+ to = { card . href }
460
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white shadow-md overflow-hidden hover:scale-[1.02] transition-transform"
461
+ style = { { height : card . height , minHeight : '80px' } }
462
+ >
463
+ < img
464
+ src = { card . image }
465
+ alt = { card . title }
466
+ className = "absolute inset-0 w-full h-full object-cover"
467
+ />
468
+ < div className = "absolute inset-0 bg-gradient-to-b from-transparent to-orange-50 p-4 flex flex-col justify-end text-left" >
469
+ < div className = "text-gray-700 font-semibold text-lg drop-shadow-md" > { card . title } </ div >
470
+ { card . description && (
471
+ < div className = "text-sm text-gray-600 mt-1" > { card . description } </ div >
472
+ ) }
473
+ </ div >
474
+ </ Link >
475
+ ) ;
476
+ } ) }
477
+ </ div >
478
+
479
+ { /* Center Column (card 2) */ }
480
+ < div className = "flex flex-col gap-6 w-1/3" >
481
+ { [ 2 ] . map ( ( idx ) => {
482
+ const card = navItems [ 4 ] . megaMenu [ idx ] ;
483
+ if ( ! card ) return null ;
484
+ return (
485
+ < Link
486
+ key = { card . title }
487
+ to = { card . href }
488
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white shadow-md overflow-hidden hover:scale-[1.02] transition-transform"
489
+ style = { { height : card . height , minHeight : '170px' } }
490
+ >
491
+ < img
492
+ src = { card . image }
493
+ alt = { card . title }
494
+ className = "absolute inset-0 w-full h-full object-cover"
495
+ />
496
+ < div className = "absolute inset-0 bg-gradient-to-b from-transparent to-orange-50 p-4 flex flex-col justify-end text-left" >
497
+ < div className = "text-gray-700 font-semibold text-lg drop-shadow-md" > { card . title } </ div >
498
+ { card . description && (
499
+ < div className = "text-sm text-gray-600 mt-1" > { card . description } </ div >
500
+ ) }
501
+ </ div >
502
+ </ Link >
503
+ ) ;
504
+ } ) }
505
+ </ div >
506
+
507
+ { /* Right Column (cards 3 and 4, horizontal layout) */ }
508
+ < div className = "flex flex-col gap-6 w-1/3" >
509
+ { [ 3 , 4 ] . map ( ( idx ) => {
510
+ const card = navItems [ 4 ] . megaMenu [ idx ] ;
511
+ if ( ! card ) return null ;
512
+
513
+ return (
514
+ < Link
515
+ key = { card . title }
516
+ to = { card . href }
517
+ className = "relative group flex-1 rounded-2xl border border-orange-200 bg-white shadow-md overflow-hidden hover:scale-[1.02] transition-transform"
518
+ style = { { height : card . height , minHeight : '100px' } }
519
+ >
520
+ { /* Background Image */ }
521
+ < img
522
+ src = { card . image }
523
+ alt = { card . title }
524
+ className = "absolute inset-0 w-full h-full object-cover"
525
+ />
526
+
527
+ { /* Overlay */ }
528
+ < div className = "absolute inset-0 p-4 flex items-center gap-4 z-10" >
529
+ { /* Optional: Icon version of image — if not needed, remove this */ }
530
+ { /* <img src={card.icon} alt="" className="w-10 h-10" /> */ }
531
+
532
+ < div className = "flex-1" >
533
+ < div className = "text-gray-700 font-semibold text-lg drop-shadow" >
534
+ { card . title }
535
+ </ div >
536
+ { card . description && (
537
+ < div className = "text-gray-700 text-xs opacity-90 mt-1 drop-shadow-sm" >
538
+ { card . description }
539
+ </ div >
540
+ ) }
541
+ </ div >
542
+
543
+ { /* Arrow icon */ }
544
+ < svg
545
+ className = "min-w-[22px] min-h-[22px]"
546
+ width = "22"
547
+ height = "22"
548
+ fill = "none"
549
+ stroke = "#FF914D"
550
+ strokeWidth = "2.5"
551
+ viewBox = "0 0 24 24"
552
+ >
553
+ < path strokeLinecap = "round" strokeLinejoin = "round" d = "M7 17L17 7M7 7h10v10" />
554
+ </ svg >
555
+ </ div >
556
+ </ Link >
557
+ ) ;
558
+ } ) }
559
+ </ div >
560
+
561
+
562
+ </ div >
563
+ ) }
339
564
</ div >
340
565
) }
341
566
</ div >
0 commit comments