NextJS üçün Kofe.al Widgeti

Yusif Aliyev
3 min read Azerbaijani

This post is synced from my website using webhooks.

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 motion kitabxanasını yükləyin. Ayrıca Tailwind CSS-i konfiqurasiya edin. Artıq bizə lazım olan hər şey hazırdır.

Shell
pnpm add motion@latest
npm i motion@latest
bun add motion@latest

2. Qaynaq kodu

İndi isə layihənizdə yeni kofeal-widget.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.

@/components/kofeal-widget.tsx
import { Poppins } from "next/font/google";
import Image from "next/image";
import * as motion from "motion/react-client";

const poppins = Poppins({ subsets: ["latin"], weight: "600" });
type TKofeAlWidget = { username: string; isActiveOnMobile?: boolean; isHoverable?: boolean };

export default function KofeAlWidget({ username, isActiveOnMobile = false, isHoverable = false }: TKofeAlWidget) {
  return (
    <div
      className={`group ${poppins.className} ${isActiveOnMobile ? "flex" : "hidden md:flex"} pointer-events-none sticky bottom-0 right-0 z-0 w-full cursor-auto flex-row justify-end pb-5 pr-5 md:pb-7 md:pr-7`}
    >
      <motion.a
        href={`https://kofe.al/@${username}`}
        target="_blank"
        rel="noopener noreferrer"
        initial={{ scale: 0.3, opacity: 0 }}
        animate={{ scale: 1, opacity: 1 }}
        transition={{ duration: 0.3, delay: 0.3, type: "spring", stiffness: 80 }}
        className="pointer-events-auto flex w-fit cursor-pointer flex-row items-center rounded-full bg-white 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)] group-hover:p-0"
      >
        <div
          className={`transition-all duration-200 ${isHoverable && "group-hover:lg:w-auto group-hover:lg:px-4 group-hover:lg:py-2 group-hover:lg:pl-6"}`}
        >
          <p className={`hidden text-lg dark:text-black ${isHoverable && "group-hover:lg:flex"}`}>
            <span className="bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">kofe.al</span>
            /@{username}
          </p>
        </div>
        <motion.div
          animate={{ rotate: [0, -11, 11, -11, 11, 0] }}
          transition={{
            y: { duration: 0.5, repeat: Infinity, repeatType: "mirror" },
            rotate: { repeatDelay: 4.5, duration: 1.2, repeat: Infinity, repeatType: "mirror" },
          }}
          className={
            "group-hover:rounded-full group-hover:p-3 group-hover: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)]"
          }
        >
          <Image
            // src="/kofeal.webp"
            src="https://kofe.al/assets/images/fav/apple-touch-icon.png"
            width={40}
            height={40}
            alt="Kofe al"
            unoptimized
            className="select-none rounded-full"
          />
        </motion.div>
      </motion.a>
    </div>
  );
}

3. İstifadə qaydası

Əgər widgetin bütün səhifələrdə görünməsini istəyirsizsə, layout.tsx 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

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.

0

Responses (0)

Sign in to leave a response.

No responses yet. Be the first.

FilmIsBest Təcrübəm

Bu gün sizə ilk layihəm – FilmIsBest haqqında danışmaq istəyirəm. Mən web sahəsini tam sıfırdan 1 il ərzində bu layihənin üzərində işləyərək öyrəndim. Bu müddətdə bir çox çətinliklərlə qarşılaşdım, amma hər biri mənim üçün yeni bir dərs oldu. Bu bloq yazısında sizə həmin problemlərdən, onların həlli yollarından və bu layihənin mənə qazandırdığı təcrübələrdən bəhs edəcəyəm.

3 min read 1 like 0 responses