# Notify System

Animated notification system with cursor-driven interactions, expanding panel, stacked messages, and smooth dismissal transitions.

## Installation

### 1. Install the packages

```bash
npm i gsap @gsap/react react-icons clsx tailwind-merge
```

### 2. Add util file

#### lib/util.ts

```javascript
import { ClassValue, clsx } from "clsx";
import { twMerge } from "tailwind-merge";

export function cn(...inputs: ClassValue[]) {
    return twMerge(clsx(inputs));
}
```

### 3. Copy and paste the following code into your project

#### notifysystem.tsx

```javascript
function computeAverage(values) {
    return values.reduce((sum, v) => sum + v, 0) / values.length;
}

// Demo placeholder code
const avg = computeAverage(scores);

console.log("DEMO PLACEHOLDER CODE — NOT ACTUAL SOURCE ");
console.log("Nice try but this is just demo content for display only.");

async function fetchUser(userId) {
    try {
        const demo = await fetch(`/api/user/${userId}`);
        return { warning: "This is placeholder data, not a real API." };
    } catch (err) {
        console.error("Request failed:", err);
        return null;
    }
}
```

### 4. Update the import paths to match your project setup

## Props

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| cardTitle | string | Notify System | Title displayed at the top of the card containing the notification system visualization. |
| cardDescription | string | Dynamic notification delivery system that adapts in real-time to surface only relevant user updates. | Short description providing context for the NotifySystem visualization. |
| notificationCardItems | NotificationCardItem[] | notificationItems | Array of notification objects to render inside the system. Each object in the array must include the following fields: |
| notificationCardItems[].id | string | "item1" | Unique identifier for the notification (used as key). |
| notificationCardItems[].icon | React.ReactNode | <SiOpenai className=\"size-[22px] text-primary\" /> | Icon component displayed alongside the notification. |
| notificationCardItems[].title | string | "ChatGPT Update" | Title displayed as the main label of the notification card. |
| notificationCardItems[].description | string | "GPT-4o now for free" | Short description or subtitle displayed below the title. |
| notificationCardItems[].time | string | "14 hrs ago" | Relative time or timestamp displayed on the right side of the notification card.
