🏠
Random UUID:
1"use client";
2
3import React, { useEffect, useState } from "react";
4
5export default function Page() {
6  const [uuid, setUuid] = useState("");
7  const [showToast, setShowToast] = useState(false);
8
9  useEffect(() => {
10    setUuid(crypto.randomUUID());
11  }, []);
12
13  const copyToClipboard = (id: string) => {
14    navigator.clipboard.writeText(id);
15    setShowToast(true);
16    setTimeout(() => setShowToast(false), 2000);
17  };
18
19  return (
20    <div className="flex justify-center items-center h-screen">
21      {showToast && (
22        <div className="absolute top-4 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white px-4 py-2 rounded-md shadow-lg transition-opacity duration-500">
23          Copied to clipboard!
24        </div>
25      )}
26      <div className="flex flex-col items-center justify-center h-screen">
27        <span className="text-sm text-gray-500 inline-block mb-2"></span>
28        <div className="text-2xl font-bold">
29          Random UUID:{" "}
30          <span className="relative group">
31            <span
32              className="text-indigo-500 font-bold cursor-pointer hover:opacity-80"
33              onClick={() => copyToClipboard(uuid)}
34            >
35              {uuid}
36            </span>
37            <div className="absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 hidden group-hover:block">
38              <div className="bg-gray-800 text-white text-xs rounded py-1 px-2 whitespace-nowrap">
39                Click to copy
40              </div>
41              <div className="absolute top-full left-1/2 transform -translate-x-1/2 -mt-1">
42                <div className="border-4 border-transparent border-t-gray-800"></div>
43              </div>
44            </div>
45          </span>
46        </div>
47        <button
48          className="bg-indigo-500 font-bold text-white p-2 rounded-md mt-4"
49          onClick={() => setUuid(crypto.randomUUID())}
50        >
51          Generate new UUID
52        </button>
53      </div>
54    </div>
55  );
56}
57