Docs
Water Tracker
Water tracker
requires interactionclick
Installation
Install dependencies
npm install lucide-react
Run the following command
It will create a new file called water-tracker.tsx
inside the components/animata/widget
directory.
mkdir -p components/animata/widget && touch components/animata/widget/water-tracker.tsx
Paste the code
Open the newly created file and paste the following code:
"use client";
import { useEffect, useState } from "react";
import { Droplet } from "lucide-react";
import { cn } from "@/lib/utils";
interface WaterTrackerProps {
dailyGoal: number;
}
export default function WaterTracker({ dailyGoal = 5000 }: WaterTrackerProps) {
const [waterIntake, setWaterIntake] = useState(0);
useEffect(() => {
setWaterIntake(1500);
}, []);
const handleAddWater = () => {
setWaterIntake((prevIntake) => {
if (prevIntake + 250 <= dailyGoal) {
return prevIntake + 250;
}
return prevIntake;
});
};
const progress = (waterIntake / dailyGoal) * 100;
return (
<div className={cn("group relative flex size-52 rounded-3xl bg-gray-800")}>
<div className="flex flex-1 flex-col p-4">
<div className="flex items-center justify-center gap-1">
<Droplet className="fill-blue-500 text-blue-500" size={22} />
<p className="text-sm font-semibold text-white">Water</p>
</div>
<div className="flex flex-1 flex-col items-center justify-center">
<h1 className="text-xl font-bold text-white">{waterIntake}ml</h1>
<p className="font-sans text-xs text-gray-400">Today</p>
</div>
<div className="mb-2 flex justify-center">
<button
onClick={handleAddWater}
disabled={waterIntake >= dailyGoal}
className={cn(
"transform rounded-full bg-gradient-to-r px-6 py-2 text-sm font-semibold text-white",
{
"cursor-not-allowed from-gray-600 to-gray-500 opacity-80": waterIntake >= dailyGoal,
"from-blue-500 to-blue-700 transition-transform hover:scale-105 hover:shadow-lg":
waterIntake < dailyGoal,
},
)}
>
+250 ml
</button>
</div>
</div>
<div className="relative flex w-10 flex-col items-end">
<div className="absolute bottom-0 right-0 h-full w-10 overflow-hidden rounded-r-3xl border-l-2 border-gray-700 bg-gray-800">
<div
className={
"absolute bottom-0 right-0 w-full bg-gradient-to-t from-blue-500 to-blue-700 transition-all duration-100 ease-out"
}
style={{
height: `${progress}%`,
"--progress-height": `${progress}%`,
}}
></div>
</div>
</div>
</div>
);
}
Credits
Built by Sumin Gurung