کاستومایز
ردیفِ کشوییSwipe Row
ردیفی که با کشیدن به کنار، کنشهای پنهانش باز میشن؛ کشیدنِ کامل خودِ کنش رو اجرا میکنه.
وابستگیها
نوع تعامل
ردیف رو به کنار بکش تا کنشها از لبه بیرون بیان. اگه کم بکشی، با فنر برمیگرده؛ اگه از حدی بگذری، همونجا میمونه. تا انتها بکش و رها کن تا کنش مستقیم اجرا شه. با صفحهکلید هم کلیدهای جهت ردیف رو باز و بسته میکنن.
پراپها
گزینههایی که میتونی به کامپوننت بدی؛ ستارهدارها اجباریاند.
childrenReactNodeمحتوای خودِ ردیف.
actionsSwipeAction[]پیشفرض: [{ id: "delete", label: "حذف" }]کنشهایی که با کشیدن بیرون میآن.
actionColorstringپیشفرض: "#e5484d"پسزمینهی ناحیهی کنش.
drawerColorstringپیشفرض: "#3f3f46"رنگِ کشو، زیرِ ردیف.
rowColorstringپیشفرض: "#27272a"رنگِ خودِ ردیف.
textColorstringپیشفرض: "#f5f5f5"رنگِ متنِ ردیف.
نصب
۱. این آدرس رو یکبار توی components.json بذار تا shadcn مخزن فارسیفای رو بشناسه.
{
"registries": {
"@farsify": "https://farsify.ir/r/{name}.json"
}
}۲. بعد با دستورِ زیر کامپوننت رو نصب کن.
npx shadcn@latest add @farsify/swipe-rowپیشنیاز: Tailwind CSS v4 و صفحهٔ راستبهچپ dir="rtl".
نمونه
"use client";
import { useEffect, useRef, useState } from "react";
import SwipeRow, { type SwipeAction } from "@/components/farsify/swipe-row";
const actions: SwipeAction[] = [
{ id: "delete", label: "حذف" },
{ id: "archive", label: "بایگانی", dismiss: true },
];
/** چند میلیثانیه بعد ردیف برگردد. */
const RETURN_MS = 3000;
export function TaskList() {
const [items, setItems] = useState(["بازبینی طرح", "پاسخ به ایمیلها"]);
const timers = useRef<ReturnType<typeof setTimeout>[]>([]);
useEffect(() => () => timers.current.forEach(clearTimeout), []);
const remove = (title: string, index: number) => {
setItems((current) => current.filter((row) => row !== title));
timers.current.push(
setTimeout(() => {
setItems((current) => {
const next = [...current];
next.splice(Math.min(index, next.length), 0, title);
return next;
});
}, RETURN_MS),
);
};
return (
<div className="flex flex-col gap-2">
{items.map((title, index) => (
<SwipeRow
key={title}
label={title}
actions={actions}
onCommit={() => remove(title, index)}
>
<span>{title}</span>
</SwipeRow>
))}
</div>
);
}نکتهها
- کنشِ اولِ فهرست، کنشِ اصلیه — همون که کشیدنِ کامل اجراش میکنه. بقیه بعد از اون چیده میشن.
- با `dismiss` روی یه کنش، اون هم ردیف رو جمع میکنه؛ بدونِ اون، کشو فقط بسته میشه.
- توی این پورت متنها فارسی شدن و بقیهی رفتار عیناً مرجعه — از جمله پیشفرضِ `direction` که کشو رو از راست بیرون میآره.
- `onCommit` بعد از پایانِ انیمیشنِ جمعشدن صدا زده میشه — اگه فهرست رو همونجا عوض کنی، کاربر پرش نمیبینه.
مجوز
کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژهی خودت نگهش دار. برای پروژههای شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسیفای رو یه جا توی پروژه نگه دار.