سرفصل دوره
course-outlineکامپوننتسرفصلهای دوره با فصلهای بازشو، حلقهی پیشرفت هر فصل، نوع درس (ویدئو، درسنامه، آزمونک، تمرین)، مدت، قفل و پیشنمایش رایگان.
۳ فصل۹ درس۲ ساعت و ۱ دقیقه۴ از ۹ درس دیدهشده
نصب
با CLI
اگر هنوز init نکردید، اول از راهنمای نصب پروژه را آماده کنید. بعد این دستور کامپوننت و وابستگیهاش را مینویسه.
$ npx vibefarsi add course-outlineنصب دستی
محتوای تب «کد» را در
components/ui/course-outline.tsxبگذارید.$ npm i lucide-reactکپی کل فایلregistry json
استفاده
usage.tsx
1import { CourseOutline } from "@/components/ui/course-outline"23<CourseOutline4 currentId="l3"5 onSelect={(lesson) => router.push(`/learn/${lesson.id}`)}6 sections={[7 {8 id: "s1", title: "شروع کار",9 lessons: [10 { id: "l1", title: "معرفی دوره", kind: "video", minutes: 6, done: true, preview: true },11 { id: "l2", title: "نصب ابزارها", kind: "reading", minutes: 10, done: true },12 { id: "l3", title: "اولین پروژه", kind: "video", minutes: 18 },13 { id: "l4", title: "آزمونک فصل اول", kind: "quiz", minutes: 5 },14 ],15 },16 { id: "s2", title: "مسیرها", lessons: [{ id: "l5", title: "صفحهی داینامیک", minutes: 22, locked: true }] },17 ]}18/>پراپها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| sections | { id; title; lessons: OutlineLesson[] }[] | - | فصلها و درسها. |
| OutlineLesson | { id; title; kind?; minutes?; done?; locked?; preview? } | - | kind یکی از video | reading | quiz | assignment است. |
| currentId | string | - | درس در حال پخش؛ با نوار brand در ابتدای ردیف مشخص میشه و فصلش باز میمونه. |
| onSelect | (lesson) => void | - | کلیک روی درس. درس قفل (بدون preview) غیرفعال است. |
| defaultOpen | string[] | - | فصلهای باز در شروع؛ پیشفرض فصل درس جاری. |
| showSummary | boolean | true | ردیف «۴ فصل · ۱۲ درس · ۳ ساعت و ۱۵ دقیقه». |
نکتههای راستچین
- مدت کل با formatMinutes به «۳ ساعت و ۱۵ دقیقه» تبدیل میشه؛ همین تابع export شده.
- پنل بسته inert است تا Tab روی درسهای پنهان نره.