Docs
Storage Widget
A widget to display storage
Installation
Install dependencies
npm install lucide-react
Run the following command
It will create a new file called storage-widget.tsx
inside the components/animata/widget
directory.
mkdir -p components/animata/widget && touch components/animata/widget/storage-widget.tsx
Paste the code
Open the newly created file and paste the following code:
import { Ban, Loader, Minus } from "lucide-react";
const getColor = (count: number) => {
const colors: { [key: number]: string } = {
0: "bg-purple-400",
1: "bg-pink-400",
2: "bg-blue-400",
3: "bg-gray-600",
};
return colors[count];
};
export default function StorageWidget() {
const columns = 7;
const rows = 15;
const storageData = Array.from({ length: rows }, (_, i) =>
Array.from({ length: columns }, (_, j) => {
if (i * columns + j + 1 <= 42) return 0;
if (i * columns + j + 1 <= 54) return 1;
if (i * columns + j + 1 <= 73) return 2;
return 3;
}),
);
return (
<div className="size-52 rounded-3xl bg-zinc-800 p-4 text-gray-400">
<div className="flex justify-between">
<div>
<div className="flex items-end gap-1">
<div className="text-3xl font-semibold text-white">5.31</div>
<div className="font-semibold">/16 GB</div>
</div>
<div className="mt-1 flex items-center">
<Ban className="mr-1 rotate-45" size={16} /> 28%
</div>
</div>
<div className="relative">
<Minus
size={44}
color="white"
className="rotate-45 rounded-full border-4 border-black pl-2"
/>
<Loader className="absolute left-2 top-2" color="white" size={22} />
</div>
</div>
<div className="flex gap-1">
{storageData.map((week, i) => (
<div key={`week-${i}`} className="flex flex-col gap-1">
{week.map((storageCount, j) => (
<div
key={`week-${i}-day-${j}`}
className={`h-2 w-2 rounded-[2px] ${getColor(storageCount)}`}
/>
))}
</div>
))}
</div>
<div className="flex justify-between font-bold text-gray-600">
<div className="flex gap-1">
<p className="text-purple-400">5.90</p>|<p className="text-pink-400">2.15</p>|
<p className="text-blue-400">2.59</p>
</div>
<div className="text-gray-300">GB</div>
</div>
</div>
);
}
Credits
Built by Aashish Katila yevhenyurchuk.com