1 dəq oxuma

NextJS üçün Kofe.al Widgeti

Bugün sizlərlə yeni hazırladığım Kofe.al Widget-ni paylaşmaq istəyirəm. NextJS üçün hazırlanmış bu widget həmdə TypeScript ilə yazıldığına görə type-safe-dir. Bu widgeti istədiyiniz kimi istifadə edə bilərsiz. Əslində bir neçə gündür üzərində işlədiyim öz portofolio web-səhifəm üçün hazırlamışdım. Lakin istərəm ki sizlərdə bu komponent-dən istifadə edə biləsiz

Blog Poster
NextJS üçün Kofe.al Widgeti

1. Mühit

Bu component NextJS 13 və üzəri (15-də daxil) versiyalar üçün hazırlanmışdır. Əvvəlcə aşağıdaki kodu yazaraq terminaldan lazımi kitabxanaları yükləyin. Ayrıca Tailwind CSS-i konfiqurasiya etməmisizsə, edin. Artıq bizə lazım olan hər şey hazırdır.

Framer-motion-ı yükləmək
Framer-motion-ı yükləmək

2. Qaynaq kodu

İndi isə layihənizdə yeni KofeAlWidget.tsx adlı component yaradın. Aşağıdaki qaynaq kodunu kopyalayaraq həmin fayla yapışdırın. CTRL-S edərək yadda saxlayın və widget hazırdır.

KofeAlWidget.tsx
1"use client";
2import { useState } from "react";
3import { motion } from "framer-motion";
4import { clsx, type ClassValue } from "clsx";
5import { twMerge } from "tailwind-merge";
6import { Poppins } from "next/font/google";
7
8export function cn(...args: ClassValue[]) {
9  return twMerge(clsx(args));
10}
11
12const poppins = Poppins({ subsets: ["latin"], weight: "600" });
13
14export default function KofeAlWidget({
15  username,
16  isActiveOnMobile = false,
17  isHoverable = false,
18}: {
19  username: string;
20  isActiveOnMobile?: boolean;
21  isHoverable?: boolean;
22}) {
23  const [hovered, setHovered] = useState(false);
24
25  return (
26    <div
27      className={cn(
28        "sticky bottom-0 right-0  w-full flex-row justify-end pb-5 pr-5 md:pb-7 md:pr-7",
29        poppins.className,
30        { "hidden md:flex": !isActiveOnMobile, flex: isActiveOnMobile }
31      )}
32    >
33      <motion.a
34        href={`https://kofe.al/@${username}`}
35        target="_blank"
36        rel="noopener noreferrer"
37        initial={{ scale: 0.3, opacity: 0 }}
38        animate={{ scale: 1, opacity: 1 }}
39        transition={{
40          duration: 0.3,
41          delay: 0.3,
42          type: "spring",
43          stiffness: 80,
44        }}
45        className={cn(
46          "flex w-fit cursor-pointer flex-row items-center rounded-full bg-white shadow-[0px_0px_30px_0px_rgba(0,0,0,0.04),0px_30px_60px_0px_rgba(0,0,0,0.12),0px_0px_1px_0px_rgba(0,0,0,0.3)]",
47          { "p-3": !hovered }
48        )}
49        onMouseEnter={() => setHovered(true)}
50        onMouseLeave={() => setHovered(false)}
51      >
52        <div
53          className={cn("transition-all duration-200", {
54            "lg:w-auto lg:px-4 lg:py-2 lg:pl-6": hovered && isHoverable,
55          })}
56        >
57          <p
58            className={cn("hidden text-lg", {
59              "lg:flex": isHoverable && hovered,
60            })}
61          >
62            <span className="bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
63              kofe.al
64            </span>
65            /@{username}
66          </p>
67        </div>
68        <motion.div
69          animate={{
70            rotate: [0, -11, 11, -11, 11, 0],
71          }}
72          transition={{
73            y: { duration: 0.5, repeat: Infinity, repeatType: "mirror" },
74            rotate: {
75              repeatDelay: 4.5,
76              duration: 1.2,
77              repeat: Infinity,
78              repeatType: "mirror",
79            },
80          }}
81          className={cn({
82            "rounded-full p-3 shadow-[0px_0px_30px_0px_rgba(0,0,0,0.04),0px_30px_60px_0px_rgba(0,0,0,0.12),0px_0px_1px_0px_rgba(0,0,0,0.3)]":
83              hovered,
84          })}
85        >
86          <img
87            src="https://kofe.al/assets/images/fav/apple-touch-icon.png"
88            width={40}
89            height={40}
90            alt="Kofe al"
91            className="select-none rounded-full"
92          />
93        </motion.div>
94      </motion.a>
95    </div>
96  );
97}
98

3. İstifadə qaydası

Əgər widgetin bütün səhifələrdə görünməsini istəyirsizsə, layout.js faylınıza aşağıdaki kimi <KofeAlWidget /> -i əlavə edin

Bütün səhifələrə Kofe.al widgetini tətbiq etmək
Bütün səhifələrə Kofe.al widgetini tətbiq etmək

Yox əgər sadəcə bəzi səhifələrdə görünməsini istəyirsizsə bunu həmin səhifələrdə istifadə edin.

4. Proplar

username prop-unu widgetin düzgün çalışması üçün mütləq şəkildə verməlisiniz. Bu username sizin kofe.al saytında istifadə etdiyiniz istifadəçi adı olmalıdır.

isHoverable propu kursor ilə widgetin üzərinə gəldikdə sola doğru açılan kiçik popover-dir. İçərisində kofe.al/@username şəklində mətn olur.

isActiveOnMobile propu ilə bu widgetin mobil cihazlarda göstərilib-göstərilməyəcəyini seçirsiz.

Kofe al