Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
0b20964
Gallery Component and update to IKS cell page
yashika1221 Jan 3, 2026
d5aacb6
UI Additions to Director's page
kartik-vats Jan 4, 2026
b459d12
Dev/mou (#424)
ArnavSharma005 Jan 9, 2026
96c819f
fix: Fixed the link of alumni cell
Aryawart-kathpal Jan 12, 2026
08593a6
Merge branch 'staged' of https://github.com/nitkkr-dev/nitkkr into st…
Aryawart-kathpal Jan 12, 2026
d62c048
Refactor/faculty (#419)
Debatreya Jan 12, 2026
a0a7990
fix: Error fixes to Administration and Image Header (#431)
Aryawart-kathpal Jan 12, 2026
eb10858
Fixed Pagination Component
yashika1221 Jan 14, 2026
f66622b
Gallery Carousel Fix
Abhay145 Jan 14, 2026
24454ab
Fix: Fixed broken link in the search cards
Debatreya Jan 14, 2026
47317b6
fix: External Scopus link
Debatreya Jan 14, 2026
7f60884
Feat/faculty (#460) Image Uploading
Debatreya Jan 14, 2026
4242292
Reusable Table Component
Soumil221 Jan 15, 2026
4f829bc
Reusable Notifications component
ArnavSharma005 Jan 15, 2026
1a9f126
Notifications page and Modal
Aryawart-kathpal Jan 16, 2026
1dec6ad
fix: Notifications categories to enum array
Aryawart-kathpal Jan 16, 2026
a4155d0
Events and News Page and Modal
Aryawart-kathpal Jan 16, 2026
cf24730
fix: Added junction tables for Notifications
Aryawart-kathpal Jan 17, 2026
35949c7
Fix/pagination generictable
yashika1221 Jan 17, 2026
6311731
Administration page Populated
Soumil221 Jan 18, 2026
82723d4
fix: update sorting logic for meeting tables (#481)
NavvneetK Jan 19, 2026
ae5147e
adding scoe page (#479)
Rahul5g3d-official Jan 19, 2026
d042f45
Fix excessive spacing in Events section on landing page (#484)
Jayant-Gautam Jan 20, 2026
9b085a1
feat/RACS (#465)
Rogan308Rylie Jan 20, 2026
a4e2b52
Feat/animate (#492): Added home page animations
Debatreya Jan 22, 2026
8c1543b
feat: Image url logic changed (#493)
Debatreya Jan 23, 2026
75ccf7b
feat: Add junction tables for events (#495)
Aryawart-kathpal Jan 24, 2026
79409ea
Notifications fixes and SCoE population
Aryawart-kathpal Jan 24, 2026
9077d69
fix: Pagination params to SCOE
Aryawart-kathpal Jan 24, 2026
295630e
Buttons Refactoring and Cleanup
Aryawart-kathpal Jan 24, 2026
4284f05
Feat/iicpage (#485)
kartik-vats Jan 24, 2026
8235017
added notification panel and fixed minor bug (#506)
Soumil221 Jan 27, 2026
a660582
fix: Doctoral Student count and Faculty list sorted with HODs on top(…
Debatreya Jan 27, 2026
ac02cc5
fix: tnp placement stants redirection fixed (#508)
Debatreya Jan 27, 2026
94b9a2f
feat: Thought Lab Added
Debatreya Jan 28, 2026
53d352d
chore: Director message updated
Debatreya Jan 28, 2026
60b227a
feat: Website contributors
Debatreya Jan 28, 2026
7762876
fix: Schema update contributors
Debatreya Jan 28, 2026
aa76a5a
feat: CCN Login and Notifications CRUD (#512)
Debatreya Jan 29, 2026
f196323
Fix/thoughtlab (#513): Few fixes on Thought lab Page like Translation…
Rogan308Rylie Jan 29, 2026
85d61b3
Feat/button overlay (#515): Button overlay, new prop (optional) to be…
Debatreya Jan 31, 2026
008e1fb
CHPD Page
Abhay145 Feb 1, 2026
7d1dff0
fix - clubs page modal with aligned image and text (#491)
Saksham1143me Feb 2, 2026
a1f5532
chore: decomposed the i18n folder (#518)
Debatreya Feb 2, 2026
6c2ec8c
feat: Added some important External Links (#520)
Debatreya Feb 3, 2026
b3d9568
implement dynamic data of fic and hod (#517)
Soumil221 Feb 3, 2026
c9fded1
feat: Buttons states improved (#527)
Debatreya Feb 3, 2026
10ec88d
Feat/deans (#529) Deans Page added, Schema Update and What ever detai…
yashika1221 Feb 5, 2026
9f0db7c
Fixed the design of thought lab page (#530)
Rogan308Rylie Feb 5, 2026
e3ba39e
Chore/faculty (#531)
Debatreya Feb 5, 2026
340d230
Chore/faculty (#532)
Debatreya Feb 6, 2026
4caf3d7
fix: Fixed button states and 2-column layout added (#533)
Aryawart-kathpal Feb 6, 2026
47a6cb1
NSS page on Student-activities
Rahul5g3d-official Feb 8, 2026
028d2f8
Feat/text justify for text alignment for p tag (#536)
Rahul5g3d-official Feb 8, 2026
5061acf
feat: add NCC page and route /student-activities/ncc (#534)
Saksham1143me Feb 9, 2026
db72b2c
Squashed commit of the following:
Debatreya Feb 9, 2026
e1b32fb
Feat/curiculla changes (#540)
SurAyush Feb 10, 2026
6c86d2d
feat: Tenders chnages for tenders, schema, new page, edit window etc.
Debatreya Feb 10, 2026
59549e6
Pulled required schema from different branches before db push
Debatreya Feb 10, 2026
2841bb6
feat: Tenders added, Need to fix its routing from home screen
Debatreya Feb 10, 2026
f7eee80
feat: Implement MultiCheckbox component for filtering options in even…
NavvneetK Feb 9, 2026
1ede5ef
fix: Resolving Reviews, and removing unwanted files and some unwanted…
Debatreya Feb 14, 2026
9b18ecd
feat: date-range filter unified
Debatreya Feb 14, 2026
e95b2e2
feat: unified SearchInput component
Debatreya Feb 14, 2026
131d45d
fix: The horizontal overflow of Notifications in Mobile screen fixed
Debatreya Feb 15, 2026
4c2273c
student council page
Soumil221 Feb 15, 2026
1479803
minor changes
Soumil221 Feb 24, 2026
20c52c2
minor fix
Soumil221 Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions app/[locale]/(animations)/animate-button-group.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
'use client';

import { motion, type Variants } from 'framer-motion';
import Link from 'next/link';
import { type IconType } from 'react-icons';

import { Button } from '~/components/buttons';
import { cn } from '~/lib/utils';

import { viewportSettings } from './animation-variants';

// Custom container variants with enhanced stagger
const buttonContainerVariants: Variants = {
hidden: {
opacity: 0,
},
visible: {
opacity: 1,
transition: {
staggerChildren: 0.15,
delayChildren: 0.1,
},
},
};

// Enhanced button item variants with scale and rotation
const buttonItemVariants: Variants = {
hidden: {
opacity: 0,
y: 60,
scale: 0.8,
rotateX: 15,
},
visible: {
opacity: 1,
y: 0,
scale: 1,
rotateX: 0,
transition: {
type: 'spring',
stiffness: 100,
damping: 12,
mass: 0.8,
},
},
};

// Icon animation variants
const iconVariants: Variants = {
hidden: {
scale: 0,
rotate: -180,
},
visible: {
scale: 1,
rotate: 0,
transition: {
type: 'spring',
stiffness: 200,
damping: 15,
delay: 0.2,
},
},
};

// Text animation variants
const textVariants: Variants = {
hidden: {
opacity: 0,
y: 10,
},
visible: {
opacity: 1,
y: 0,
transition: {
duration: 0.4,
delay: 0.3,
},
},
};

interface AnimateButtonGroupProps {
buttonArray: {
label: string;
href: string;
icon: IconType;
}[];
}

export default function AnimateButtonGroup({
buttonArray,
}: AnimateButtonGroupProps) {
return (
<motion.nav
className={cn(
'container',
'my-10',
'flex flex-col gap-5 lg:flex-row lg:justify-around'
)}
initial="hidden"
whileInView="visible"
viewport={viewportSettings}
variants={buttonContainerVariants}
>
{buttonArray.map(({ label, href, icon: Icon }, index) => (
<motion.div
key={index}
className={cn('mx-auto w-full lg:w-72 xl:w-80 2xl:w-96')}
variants={buttonItemVariants}
whileHover={{
scale: 1.02,
y: -3,
transition: { type: 'spring', stiffness: 400, damping: 17 },
}}
whileTap={{ scale: 0.98 }}
style={{ perspective: 1000 }}
>
<Button
asChild
className={cn(
'flex flex-col',
'gap-2 md:gap-3 lg:gap-4 xl:gap-5',
'h-44 w-full md:h-48 lg:h-60',
'overflow-hidden'
)}
variant="secondary"
>
<Link href={href}>
<motion.div variants={iconVariants}>
<Icon className="size-12" />
</motion.div>
<motion.p
className="whitespace-normal font-serif font-semibold"
variants={textVariants}
>
{label}
</motion.p>
</Link>
</Button>
</motion.div>
))}
</motion.nav>
);
}
101 changes: 101 additions & 0 deletions app/[locale]/(animations)/animate-events-grid.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
'use client';

import { motion } from 'framer-motion';
import Image from 'next/image';
import { useState } from 'react';

import { Card, CardContent, CardDescription, CardTitle } from '~/components/ui';
import { cn } from '~/lib/utils';

import { EventModal } from '../events/EventModal';
import type { EventItem } from '../events/EventsList';
import {
staggerContainerVariants,
staggerItemVariants,
viewportSettings,
} from './animation-variants';

interface AnimateEventsGridProps {
events: EventItem[];
locale: string;
s3Url: string;
}

export default function AnimateEventsGrid({
events,
locale,
s3Url,
}: AnimateEventsGridProps) {
const [selectedEvent, setSelectedEvent] = useState<EventItem | null>(null);

return (
<>
<motion.ol
className="z-elevated grid grid-cols-1 grid-rows-6 gap-6 lg:grid-cols-5 lg:grid-rows-3"
initial="hidden"
whileInView="visible"
viewport={viewportSettings}
variants={staggerContainerVariants}
>
{events.map((event, index) => (
<motion.li
key={event.id}
className={cn(
index % 3 === 0 || index === 4
? 'lg:col-span-3'
: 'lg:col-span-2',
'h-[448px] cursor-pointer list-none'
)}
onClick={() => setSelectedEvent(event)}
variants={staggerItemVariants}
>
<Card
className={cn(
'flex h-full flex-col border-0 bg-shade-light transition-shadow hover:shadow-lg'
)}
>
<Image
alt={event.title}
className="h-64 w-full rounded-t-md object-cover"
height={0}
src={
event.images.length > 0
? event.images[0]
: `${s3Url}/events/${event.startDate.slice(0, 4)}/${event.startDate.slice(5, 7)}/${event.title}/image01.jpg`
}
width={0}
/>
<CardContent className="relative pt-3">
<time className="absolute -top-10 right-8 flex h-20 w-16 flex-col items-center justify-center bg-primary-500 bg-opacity-90 text-shade-light">
<span className="font-serif text-2xl">
{new Intl.DateTimeFormat('en-GB', {
day: '2-digit',
}).format(new Date(event.startDate))}
</span>
<span className="font-serif text-xl">
{new Intl.DateTimeFormat('en-GB', { month: 'short' })
.format(new Date(event.startDate))
.substring(0, 3)
.toUpperCase()}
</span>
</time>
<CardTitle className="mr-20 lg:text-2xl">
{event.title}
</CardTitle>
<CardDescription className="line-clamp-3">
{event.description}
</CardDescription>
</CardContent>
</Card>
</motion.li>
))}
</motion.ol>

<EventModal
event={selectedEvent}
onClose={() => setSelectedEvent(null)}
locale={locale}
/>
</>
);
}
Loading