کارتها را پرتاب کنی، فنری سرِ جایشان مینشینند.
نوارِ نشانگر پر میشود تا معلوم شود بعد چه میآید.
کج، لغزش، مقیاس، محو یا چرخشِ کارتها مثلِ مکعب.
فلشها، Home و End بین کارتها حرکت میکنند.
متن، عکس یا کامپوننتِ خودت را بهعنوان کارت بده.
کاستومایز
کاروسلِ فنریCarousel
کاروسلِ موتوردار با پنج افکتِ جابهجایی (tilt، slide، scale، fade و cube)، کشیدنِ شتابدار، autoplay با نوارِ پیشرفت و loop بیدرز — برای متن، عکس یا هر محتوای دیگه.
وابستگیها
نوع تعامل
کارتها رو بکش و رها کن: سرعتِ انگشتت اندازهگیری میشه و کارت با فنر روی نزدیکترین slide مینشینه. چرخِ افقیِ موس هم صفحه رو میگردونه و فلشها/dotها/نوارها پرشِ مستقیم میدن. توی RTL موتور آینه شده: «بعدی» از سمتِ چپ میآد و نوارِ کارتها دنبالِ انگشتت میره. کلیدها منطقیان: فلشِ راست همیشه «بعدی»ـه.
پراپها
گزینههایی که میتونی به کامپوننت بدی؛ ستارهدارها اجباریاند.
itemsCarouselEntry[]کارتها؛ یه رشته (آدرسِ عکس)، شیءِ CarouselItem یا هر ReactElement دلخواه.
baseWidthnumber | stringپیشفرض: 300بیشینهی عرضِ کاروسل، پیکسل.
aspectRationumberپیشفرض: 1.25نسبتِ عرض به ارتفاعِ کارت؛ ۰٫۵ تا ۴. برای story عمودی ۰٫۶۲ بده.
peeknumberپیشفرض: 0چقدر از کارتِ بغلی از لبه دیده شه، پیکسل.
gapnumberپیشفرض: 16فاصلهی بین کارتها، پیکسل.
radiusnumberپیشفرض: 12شعاعِ گوشهی کارتها.
نصب
۱. این آدرس رو یکبار توی components.json بذار تا shadcn مخزن فارسیفای رو بشناسه.
{
"registries": {
"@farsify": "https://farsify.ir/r/{name}.json"
}
}۲. بعد با دستورِ زیر کامپوننت رو نصب کن.
npx shadcn@latest add @farsify/carouselپیشنیاز: Tailwind CSS v4 و صفحهٔ راستبهچپ dir="rtl".
نمونه
"use client";
import Carousel from "@/components/farsify/carousel";
const photos = [
{ id: 1, image: "/photos/one.jpg", title: "دشتِ باز", description: "آسمانِ روشن." },
{ id: 2, image: "/photos/two.jpg", title: "برآمدنِ ماه", description: "زیرِ ماهِ کامل." },
];
export function PhotoStrip() {
return <Carousel items={photos} baseWidth={640} peek={64} frame={false} effect="scale" loop autoplay indicator="bars" />;
}
// هر محتوایی: کامپوننتِ خودت بهجای کارت
<Carousel items={[<MyCard key="a" />, <MyCard key="b" />]} />
// استوریِ عمودیِ مکعبی
<Carousel baseWidth={270} aspectRatio={0.62} effect="cube" loop autoplay />نکتهها
- موتور توی RTL آینه میشه، نه فقط ظاهر: جابهجاییها و زاویهی cube با علامتِ محورِ X برعکس میشن، کشیدن دنبالِ انگشتت میره و سرعتِ پرتاب درست advance میکنه — علامت توی `settings.sign` یهجا جمع شده.
- چرخِ موس عمداً علامتِ آینه نمیگیره: deltaX مثبت توی هر دو جهت یعنی «جلو رفتن» — همون حسِ طبیعیِ اسکرول.
- برای ردیفِ گالری با همسایهی نیمهپیدا: `frame={false}` + `peek={64}` + `effect="scale"` — ماسکِ محویِ لبه خودش ساخته میشه.
- autoplay رو با نوارِ نشانگر جفت کن (`indicator="bars"`) تا کاربر بفهمه چند ثانیه تا slide بعدی مونده — الگوی storyها.
- کارتِ گرد (`round`) عرض رو با نسبتِ تصویر گرد میکنه؛ برای متنِ کوتاهِ داخلش `compact` خودکار میشه و توضیح پنهان میشه.
مجوز
کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژهی خودت نگهش دار. برای پروژههای شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسیفای رو یه جا توی پروژه نگه دار.