@parto-system-design/ui 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/utils.ts","../src/lib/jalali-utils.ts","../src/icons.tsx","../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/button.tsx","../src/lib/constants.ts","../src/components/ui/autocomplete.tsx","../src/components/ui/input.tsx","../src/components/ui/spinner.tsx","../src/components/ui/user-autocomplete.tsx","../src/components/ui/avatar.tsx","../src/components/ui/aspect-ratio.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/button-group.tsx","../src/components/ui/separator.tsx","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/carousel.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/command.tsx","../src/components/ui/dialog.tsx","../src/components/ui/comment-card.tsx","../src/components/ui/context-menu.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/popover.tsx","../src/components/ui/date-range-picker.tsx","../src/components/ui/label.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/empty.tsx","../src/components/ui/field.tsx","../src/components/ui/form.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/tag-input.tsx","../src/components/ui/hashtag-input.tsx","../src/components/ui/input-group.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/instagram-post.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/kbd.tsx","../src/components/ui/menubar.tsx","../src/components/ui/metric-card.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/native-select.tsx","../src/components/ui/navigation-menu.tsx","../src/components/ui/pagination.tsx","../src/components/ui/pagination-controlled.tsx","../src/components/ui/profile-card.tsx","../src/components/ui/profile-info.tsx","../src/components/ui/engagement-rate.tsx","../src/components/ui/engagement-rate-bar.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/radio-card.tsx","../src/components/ui/resizable.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/slider.tsx","../src/components/ui/sonner.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/charts/PartoLineChart.tsx","../src/hooks/use-root-styles.ts","../src/lib/theme.ts","../src/components/charts/PartoBarChart.tsx","../src/components/charts/PartoPieChart.tsx","../src/components/charts/PartoHeatMap.tsx","../src/components/charts/PartoWordCloud.tsx"],"sourcesContent":["// Export utility functions\nexport * from './lib/utils';\nexport * from './lib/jalali-utils';\n\n// Export icons\nexport * from './icons';\n\n// Export UI components\nexport * from './components/ui/accordion';\nexport * from './components/ui/alert';\nexport * from './components/ui/alert-dialog';\nexport * from './components/ui/autocomplete';\nexport * from './components/ui/user-autocomplete';\nexport * from './components/ui/aspect-ratio';\nexport * from './components/ui/avatar';\nexport * from './components/ui/badge';\nexport * from './components/ui/breadcrumb';\nexport * from './components/ui/button';\nexport * from './components/ui/button-group';\nexport * from './components/ui/calendar';\nexport * from './components/ui/card';\nexport * from './components/ui/carousel';\nexport * from './components/ui/checkbox';\nexport * from './components/ui/collapsible';\nexport * from './components/ui/command';\nexport * from './components/ui/comment-card';\nexport * from './components/ui/context-menu';\nexport * from './components/ui/date-picker';\nexport * from './components/ui/date-range-picker';\nexport * from './components/ui/dialog';\nexport * from './components/ui/drawer';\nexport * from './components/ui/dropdown-menu';\nexport * from './components/ui/empty';\nexport * from './components/ui/field';\nexport * from './components/ui/form';\nexport * from './components/ui/hover-card';\nexport * from './components/ui/input';\nexport * from './components/ui/tag-input';\nexport * from './components/ui/hashtag-input';\nexport * from './components/ui/input-group';\nexport * from './components/ui/input-otp';\nexport * from './components/ui/instagram-post';\nexport * from './components/ui/kbd';\nexport * from './components/ui/label';\nexport * from './components/ui/menubar';\nexport * from './components/ui/metric-card';\nexport * from './components/ui/native-select';\nexport * from './components/ui/navigation-menu';\nexport * from './components/ui/pagination';\nexport * from './components/ui/pagination-controlled';\nexport * from './components/ui/popover';\nexport * from './components/ui/profile-card';\nexport * from './components/ui/profile-info';\nexport * from './components/ui/engagement-rate';\nexport * from './components/ui/engagement-rate-bar';\nexport * from './components/ui/progress';\nexport * from './components/ui/radio-group';\nexport * from './components/ui/radio-card';\nexport * from './components/ui/resizable';\nexport * from './components/ui/scroll-area';\nexport * from './components/ui/select';\nexport * from './components/ui/separator';\nexport * from './components/ui/sheet';\nexport * from './components/ui/sidebar';\nexport * from './components/ui/skeleton';\nexport * from './components/ui/slider';\nexport * from './components/ui/sonner';\nexport * from './components/ui/spinner';\nexport * from './components/ui/switch';\nexport * from './components/ui/table';\nexport * from './components/ui/tabs';\nexport * from './components/ui/textarea';\nexport * from './components/ui/toggle';\nexport * from './components/ui/toggle-group';\nexport * from './components/ui/tooltip';\n\n// Export chart components\nexport * from './components/charts/PartoLineChart';\nexport * from './components/charts/PartoBarChart';\nexport * from './components/charts/PartoPieChart';\nexport * from './components/charts/PartoHeatMap';\nexport * from './components/charts/PartoWordCloud';\n\n// Export hooks\nexport * from './hooks/use-mobile';\n\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Format number to Instagram-style short format\n * @example formatNumber(123456, 'short') => '123K'\n * @example formatNumber(123456, 'exact') => '123,456'\n */\nexport function formatNumber(\n num: number | undefined,\n format: 'exact' | 'short' = 'exact'\n): string {\n if (num === undefined || num === null) return '0';\n\n if (format === 'exact') {\n return num.toLocaleString('en-US');\n }\n\n // Short format (Instagram style)\n if (num >= 1_000_000_000) {\n return `${(num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')}B`;\n }\n if (num >= 1_000_000) {\n return `${(num / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n }\n if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1).replace(/\\.0$/, '')}K`;\n }\n return num.toString();\n}\n\n/**\n * Format date to relative time with absolute on hover (Persian)\n * @example formatRelativeTime(new Date()) => '۲ ساعت پیش'\n */\nexport function formatRelativeTime(date: Date | string | number): string {\n const now = new Date();\n const then = new Date(date);\n const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1000);\n\n const toPersianDigits = (num: number | string): string => {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n };\n\n if (diffInSeconds < 60) {\n return 'همین الان';\n }\n\n const diffInMinutes = Math.floor(diffInSeconds / 60);\n if (diffInMinutes < 60) {\n return `${toPersianDigits(diffInMinutes)} دقیقه پیش`;\n }\n\n const diffInHours = Math.floor(diffInMinutes / 60);\n if (diffInHours < 24) {\n return `${toPersianDigits(diffInHours)} ساعت پیش`;\n }\n\n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays < 7) {\n return `${toPersianDigits(diffInDays)} روز پیش`;\n }\n\n const diffInWeeks = Math.floor(diffInDays / 7);\n if (diffInWeeks < 4) {\n return `${toPersianDigits(diffInWeeks)} هفته پیش`;\n }\n\n const diffInMonths = Math.floor(diffInDays / 30);\n if (diffInMonths < 12) {\n return `${toPersianDigits(diffInMonths)} ماه پیش`;\n }\n\n const diffInYears = Math.floor(diffInDays / 365);\n return `${toPersianDigits(diffInYears)} سال پیش`;\n}\n\n/**\n * Format date to absolute format (Persian)\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date);\n \n const toPersianDigits = (num: number | string): string => {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n };\n\n const persianMonths = [\n 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',\n 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n ];\n\n // Convert to Persian calendar (simple conversion)\n const year = d.getFullYear();\n const month = d.getMonth();\n const day = d.getDate();\n const hours = d.getHours();\n const minutes = d.getMinutes();\n\n // Simple Persian date conversion (approximate)\n const persianYear = year - 621;\n const persianMonth = persianMonths[month];\n const persianDay = toPersianDigits(day);\n const persianHours = toPersianDigits(hours);\n const persianMinutes = toPersianDigits(minutes.toString().padStart(2, '0'));\n\n return `${persianDay} ${persianMonth} ${toPersianDigits(persianYear)}، ${persianHours}:${persianMinutes}`;\n}\n\n","import moment from \"moment-jalaali\"\n\n// Configure moment-jalaali to use Farsi locale\nmoment.loadPersian({ usePersianDigits: true, dialect: \"persian-modern\" })\n\n/**\n * Persian/Farsi month names\n */\nexport const PERSIAN_MONTHS = [\n \"فروردین\",\n \"اردیبهشت\",\n \"خرداد\",\n \"تیر\",\n \"مرداد\",\n \"شهریور\",\n \"مهر\",\n \"آبان\",\n \"آذر\",\n \"دی\",\n \"بهمن\",\n \"اسفند\",\n]\n\n/**\n * Persian/Farsi short month names\n */\nexport const PERSIAN_MONTHS_SHORT = [\n \"فرو\",\n \"ارد\",\n \"خرد\",\n \"تیر\",\n \"مرد\",\n \"شهر\",\n \"مهر\",\n \"آبا\",\n \"آذر\",\n \"دی\",\n \"بهم\",\n \"اسف\",\n]\n\n/**\n * Persian/Farsi weekday names\n */\nexport const PERSIAN_WEEKDAYS = [\n \"یکشنبه\",\n \"دوشنبه\",\n \"سه‌شنبه\",\n \"چهارشنبه\",\n \"پنج‌شنبه\",\n \"جمعه\",\n \"شنبه\",\n]\n\n/**\n * Persian/Farsi short weekday names\n */\nexport const PERSIAN_WEEKDAYS_SHORT = [\"ی\", \"د\", \"س\", \"چ\", \"پ\", \"ج\", \"ش\"]\n\n/**\n * Convert English digits to Persian/Farsi digits\n */\nexport function toPersianDigits(num: number | string): string {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n return String(num).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n}\n\n/**\n * Convert Persian/Farsi digits to English digits\n */\nexport function toEnglishDigits(str: string): string {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n const arabicDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"]\n\n return str\n .replace(/[۰-۹]/g, (digit) => String(persianDigits.indexOf(digit)))\n .replace(/[٠-٩]/g, (digit) => String(arabicDigits.indexOf(digit)))\n}\n\n/**\n * Format a Date object to Persian/Jalali date string\n */\nexport function formatJalaliDate(\n date: Date,\n format: string = \"jYYYY/jMM/jDD\"\n): string {\n return moment(date).format(format)\n}\n\n/**\n * Get Persian month name from a Date object\n */\nexport function getPersianMonthName(date: Date): string {\n const monthIndex = moment(date).jMonth()\n return PERSIAN_MONTHS[monthIndex]\n}\n\n/**\n * Get Persian short month name from a Date object\n */\nexport function getPersianMonthNameShort(date: Date): string {\n const monthIndex = moment(date).jMonth()\n return PERSIAN_MONTHS_SHORT[monthIndex]\n}\n\n/**\n * Get Persian weekday name from a Date object\n */\nexport function getPersianWeekdayName(date: Date, short: boolean = false): string {\n const dayIndex = moment(date).day()\n return short ? PERSIAN_WEEKDAYS_SHORT[dayIndex] : PERSIAN_WEEKDAYS[dayIndex]\n}\n\n/**\n * Get Persian year from a Date object\n */\nexport function getPersianYear(date: Date): number {\n return moment(date).jYear()\n}\n\n/**\n * Get Persian month (0-11) from a Date object\n */\nexport function getPersianMonth(date: Date): number {\n return moment(date).jMonth()\n}\n\n/**\n * Get Persian day from a Date object\n */\nexport function getPersianDay(date: Date): number {\n return moment(date).jDate()\n}\n\n/**\n * Create a Date object from Persian/Jalali date\n */\nexport function jalaliToGregorian(\n year: number,\n month: number,\n day: number\n): Date {\n return moment(`${year}/${month + 1}/${day}`, \"jYYYY/jM/jD\").toDate()\n}\n\n/**\n * Format date range in Persian\n */\nexport function formatPersianDateRange(from: Date, to: Date): string {\n const fromMoment = moment(from)\n const toMoment = moment(to)\n\n const fromYear = fromMoment.jYear()\n const toYear = toMoment.jYear()\n const fromMonth = fromMoment.jMonth()\n const toMonth = toMoment.jMonth()\n const fromDay = fromMoment.jDate()\n const toDay = toMoment.jDate()\n\n // Same day\n if (fromYear === toYear && fromMonth === toMonth && fromDay === toDay) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same month and year\n if (fromYear === toYear && fromMonth === toMonth) {\n return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same year\n if (fromYear === toYear) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Different years\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(toYear)}`\n}\n\n/**\n * Get all months for a dropdown (returns array of {value, label})\n */\nexport function getPersianMonthsForDropdown(): Array<{\n value: number\n label: string\n}> {\n return PERSIAN_MONTHS.map((month, index) => ({\n value: index,\n label: month,\n }))\n}\n\n/**\n * Get years range for a dropdown\n */\nexport function getPersianYearsForDropdown(\n fromYear: number,\n toYear: number\n): Array<{ value: number; label: string }> {\n const years: Array<{ value: number; label: string }> = []\n for (let year = fromYear; year <= toYear; year++) {\n years.push({\n value: year,\n label: toPersianDigits(year),\n })\n }\n return years\n}\n\n","import * as React from 'react';\nimport {\n AlertCircle,\n AlertTriangle,\n ArrowRight,\n ArrowLeft,\n Bold,\n Building,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Circle,\n Clock,\n Copy,\n Download,\n Eye,\n EyeOff,\n File,\n FileText,\n Heart,\n Home,\n Image,\n Images,\n Inbox,\n Info,\n Italic,\n Loader2,\n Menu,\n MessageCircle,\n Moon,\n MoreHorizontal,\n MoreVertical,\n Plus,\n Rocket,\n Search,\n Settings,\n Share2,\n Sparkles,\n Sun,\n Trash,\n Underline,\n User,\n Users,\n Video,\n X,\n type LucideIcon,\n} from 'lucide-react';\n\nexport type Icon = LucideIcon;\n\n/**\n * Icon Collection for Parto Design System\n * \n * RTL Support Guidelines:\n * ----------------------\n * Directional icons (arrows, chevrons) should be flipped in RTL contexts when they indicate navigation direction.\n * \n * Usage Examples:\n * - For navigation: <Icons.arrowRight className=\"rtl:rotate-180\" />\n * - For UI direction: <Icons.chevronRight className=\"rtl:rotate-180\" />\n * \n * Icons that should NOT be flipped:\n * - Non-directional icons (check, close, settings, etc.)\n * - Icons representing real-world objects\n */\nexport const Icons: Record<string, React.FC<React.SVGProps<SVGSVGElement>> | LucideIcon> = {\n // Lucide Icons\n logo: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n ),\n parto: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 75 75\"\n fill=\"currentColor\"\n {...props}\n >\n <polygon points=\"75,0 0,0 0,25\" />\n <polygon points=\"75,75 50,75 75,0\" />\n <polygon points=\"75,0 25,75 0,75 0,50\" />\n </svg>\n ),\n alertCircle: AlertCircle,\n alertTriangle: AlertTriangle,\n arrowRight: ArrowRight,\n arrowLeft: ArrowLeft,\n bold: Bold,\n calendar: Calendar,\n check: Check,\n chevronDown: ChevronDown,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n chevronUp: ChevronUp,\n circle: Circle,\n clock: Clock,\n copy: Copy,\n download: Download,\n eye: Eye,\n eyeOff: EyeOff,\n file: File,\n fileText: FileText,\n heart: Heart,\n home: Home,\n image: Image,\n images: Images,\n inbox: Inbox,\n info: Info,\n italic: Italic,\n loader: Loader2,\n menu: Menu,\n messageCircle: MessageCircle,\n moon: Moon,\n moreHorizontal: MoreHorizontal,\n moreVertical: MoreVertical,\n plus: Plus,\n rocket: Rocket,\n search: Search,\n settings: Settings,\n share: Share2,\n sparkles: Sparkles,\n sun: Sun,\n trash: Trash,\n underline: Underline,\n user: User,\n users: Users,\n video: Video,\n building: Building,\n close: X,\n spinner: Loader2,\n gitHub: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fab\"\n data-icon=\"github\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 496 512\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"\n ></path>\n </svg>\n ),\n twitter: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z\" />\n </svg>\n ),\n instagram: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\" />\n </svg>\n ),\n} as const;\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-start text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border ps-12 pe-4 py-3 text-sm [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-3.5 [&>svg]:w-5 [&>svg]:h-5\",\n {\n variants: {\n variant: {\n default: \"text-foreground bg-alternative border [&>svg]:text-foreground\",\n info: \"text-foreground bg-alternative border [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\n success: \"text-foreground bg-brand-200 dark:bg-brand-400 border-brand-500 dark:border-brand-600 [&>svg]:text-brand-600 dark:[&>svg]:text-brand-700\",\n warning: \"text-foreground border-warning-400 bg-warning-200 dark:bg-warning-400 [&>svg]:text-warning-600 dark:[&>svg]:text-warning-700\",\n destructive: \"text-foreground border-destructive-400 bg-destructive-200 dark:bg-destructive-400 [&>svg]:text-destructive-600 dark:[&>svg]:text-destructive-700\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed text-foreground-light font-normal\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-start\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end sm:gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"secondary\" }), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n\n","'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { VariantProps, cva } from 'class-variance-authority'\nimport { Loader2 } from 'lucide-react'\nimport { cloneElement, forwardRef, isValidElement } from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>\nconst buttonVariants = cva(\n `relative\n flex items-center justify-center\n cursor-pointer\n inline-flex\n items-center\n gap-2\n text-center\n font-regular\n ease-out\n duration-200\n rounded-md\n outline-none\n transition-all\n outline-0\n focus-visible:outline-4\n focus-visible:outline-offset-1\n border\n disabled:pointer-events-none\n disabled:opacity-50\n [&_svg]:pointer-events-none\n [&_svg]:shrink-0\n `,\n {\n variants: {\n variant: {\n primary: `\n bg-brand-400 dark:bg-brand-500\n hover:bg-brand/80 dark:hover:bg-brand/50\n text-foreground\n border-brand-500/75 dark:border-brand/30\n hover:border-brand-600 dark:hover:border-brand\n focus-visible:outline-brand-600\n data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-500/80\n data-[state=open]:outline-brand-600\n `,\n default: `\n text-foreground\n bg-alternative dark:bg-muted hover:bg-selection\n border-strong hover:border-stronger\n focus-visible:outline-brand-600\n data-[state=open]:bg-selection\n data-[state=open]:outline-brand-600\n data-[state=open]:border-button-hover\n `,\n secondary: `\n bg-foreground\n text-background hover:text-border-stronger\n focus-visible:text-border-control\n border-foreground-light hover:border-foreground-lighter\n focus-visible:outline-border-strong\n data-[state=open]:border-foreground-lighter\n data-[state=open]:outline-border-strong\n `,\n outline: `\n text-foreground\n bg-transparent\n border-strong hover:border-foreground-muted\n focus-visible:outline-border-strong\n data-[state=open]:border-stronger\n data-[state=open]:outline-border-strong\n `,\n dashed: `\n text-foreground\n border\n border-dashed\n border-strong hover:border-stronger\n bg-transparent\n focus-visible:outline-border-strong\n data-[state=open]:border-stronger\n data-[state=open]:outline-border-strong\n `,\n link: `\n text-brand-600\n border\n border-transparent\n hover:bg-brand-400\n border-opacity-0\n bg-opacity-0\n shadow-none\n focus-visible:outline-border-strong\n data-[state=open]:bg-brand-400\n data-[state=open]:outline-border-strong\n `,\n text: `\n text-foreground\n hover:bg-surface-300\n shadow-none\n focus-visible:outline-border-strong\n data-[state=open]:bg-surface-300\n data-[state=open]:outline-border-strong\n border-transparent\n `,\n danger: `\n text-foreground\n bg-destructive-300 dark:bg-destructive-400 hover:bg-destructive-400 dark:hover:bg-destructive/50\n border-destructive-500 hover:border-destructive\n hover:text-hi-contrast\n focus-visible:outline-brand-600\n data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive/50\n data-[state=open]:outline-destructive\n `,\n warning: `\n text-foreground\n bg-warning-300 dark:bg-warning-400 hover:bg-warning-400 dark:hover:bg-warning/50\n border-warning-500 hover:border-warning\n hover:text-hi-contrast\n focus-visible:outline-brand-600\n data-[state=open]:border-warning\n data-[state=open]:bg-warning-400 dark:data-[state=open]:bg-warning/50\n data-[state=open]:outline-warning\n `,\n destructive: `\n text-foreground\n bg-destructive-300 dark:bg-destructive-400 hover:bg-destructive-400 dark:hover:bg-destructive/50\n border-destructive-500 hover:border-destructive\n hover:text-hi-contrast\n focus-visible:outline-brand-600\n data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive/50\n data-[state=open]:outline-destructive\n `,\n ghost: `\n text-foreground\n hover:bg-surface-100 dark:hover:bg-surface-200\n border-transparent\n focus-visible:outline-brand-600\n `,\n },\n block: {\n true: 'w-full flex items-center justify-center',\n },\n size: {\n ...SIZE_VARIANTS,\n // Backward compatibility aliases\n default: SIZE_VARIANTS.small,\n sm: SIZE_VARIANTS.small,\n lg: SIZE_VARIANTS.large,\n icon: 'h-9 w-9',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n },\n rounded: {\n true: 'rounded-full',\n },\n defaultVariants: {\n variant: 'default',\n size: SIZE_VARIANTS_DEFAULT,\n },\n },\n }\n)\n\nconst IconContainerVariants = cva('', {\n variants: {\n size: {\n tiny: '[&_svg]:h-[14px] [&_svg]:w-[14px]',\n small: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n medium: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n large: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n xlarge: '[&_svg]:h-[24px] [&_svg]:w-[24px]',\n // Backward compatibility\n default: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n sm: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n lg: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n icon: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n },\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-lighter',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n },\n})\n\nexport type LoadingVariantProps = VariantProps<typeof loadingVariants>\nconst loadingVariants = cva('', {\n variants: {\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-muted',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n loading: {\n default: '',\n true: `animate-spin`,\n },\n },\n})\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>,\n Omit<ButtonVariantProps, 'disabled'>,\n Omit<LoadingVariantProps, 'variant'> {\n asChild?: boolean\n type?: ButtonVariantProps['variant'] | React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n htmlType?: React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n icon?: React.ReactNode\n iconLeft?: React.ReactNode\n iconRight?: React.ReactNode\n loading?: boolean\n block?: boolean\n rounded?: boolean\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n asChild = false,\n variant,\n type,\n size = SIZE_VARIANTS_DEFAULT,\n children,\n loading,\n block,\n icon,\n iconRight,\n iconLeft,\n htmlType = 'button',\n rounded,\n className,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button'\n const { tabIndex } = props\n \n // Support both 'type' (Supabase style) and 'variant' (shadcn style)\n // If type is provided and it's not a button HTML type, use it as variant\n const buttonVariant = (type && typeof type === 'string' && !['button', 'submit', 'reset'].includes(type))\n ? (type as ButtonVariantProps['variant'])\n : variant || 'default'\n \n const showIcon = loading || icon || iconLeft\n const _iconLeft: React.ReactNode = icon ?? iconLeft\n const disabled = loading === true || props.disabled\n\n // Set default tabIndex for proper Safari focus handling\n // - Explicit tabIndex prop takes precedence\n // - If disabled, default to -1 (unless explicitly set)\n // - Otherwise, default to 0 for keyboard accessibility\n const computedTabIndex = tabIndex !== undefined ? tabIndex : disabled ? -1 : 0\n\n // Normalize size for IconContainerVariants (map backward compat sizes)\n const iconSize = size === 'default' || size === 'sm' ? 'small' :\n size === 'lg' ? 'large' :\n size === 'icon' ? 'small' :\n size\n\n return (\n <Comp\n ref={ref}\n data-size={size}\n type={htmlType}\n disabled={disabled}\n tabIndex={computedTabIndex}\n className={cn(buttonVariants({ variant: buttonVariant, size, disabled, block, rounded }), className)}\n onClick={(e) => {\n // Prevents redirecting if Button is used with a link-based child element\n if (disabled) return e.preventDefault()\n else props?.onClick?.(e)\n }}\n {...props}\n >\n {asChild ? (\n isValidElement(children) ? (\n cloneElement(\n children,\n undefined,\n showIcon &&\n (loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2 className={cn(loadingVariants({ loading, variant: buttonVariant }))} />\n </div>\n ) : _iconLeft ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{_iconLeft}</div>\n ) : null),\n (children.props as { children?: React.ReactNode })?.children && (\n <span className={'truncate'}>{(children.props as { children?: React.ReactNode }).children}</span>\n ),\n iconRight && !loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{iconRight}</div>\n )\n )\n ) : null\n ) : (\n <>\n {showIcon &&\n (loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2 className={cn(loadingVariants({ loading, variant: buttonVariant }))} />\n </div>\n ) : _iconLeft ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{_iconLeft}</div>\n ) : null)}{' '}\n {children && <span className={'truncate'}>{children}</span>}{' '}\n {iconRight && !loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{iconRight}</div>\n )}\n </>\n )}\n </Comp>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","export const SIZE = {\n text: {\n tiny: 'text-xs',\n small: 'text-sm leading-4',\n medium: 'text-sm',\n large: 'text-base',\n xlarge: 'text-base',\n },\n padding: {\n tiny: 'px-2.5 py-1',\n small: 'px-3 py-2',\n medium: 'px-4 py-2',\n large: 'px-4 py-2',\n xlarge: 'px-6 py-3',\n },\n height: {\n tiny: 'h-[26px]',\n small: 'h-[34px]',\n medium: 'h-[38px]',\n large: 'h-[42px]',\n xlarge: 'h-[50px]',\n },\n}\n\n// used for internal badges/buttons\n// such as Button Group Items or Multi Select items\nexport const SIZE_INNER = {\n text: {\n tiny: 'text-xs',\n small: 'text-sm leading-4',\n medium: 'text-sm',\n large: 'text-base',\n xlarge: 'text-base',\n },\n padding: {\n tiny: 'px-2.5 py-1',\n small: 'px-3 py-2',\n medium: 'px-4 py-2',\n large: 'px-4 py-2',\n xlarge: 'px-6 py-3',\n },\n height: {\n tiny: 'h-[24px]',\n small: 'h-[28px]',\n medium: 'h-[32px]',\n large: 'h-[36px]',\n xlarge: 'h-[44px]',\n },\n}\n\nexport const SIZE_VARIANTS = {\n tiny: `${SIZE.text['tiny']} ${SIZE.padding['tiny']} ${SIZE.height['tiny']}`,\n small: `${SIZE.text['small']} ${SIZE.padding['small']} ${SIZE.height['small']}`,\n medium: `${SIZE.text['medium']} ${SIZE.padding['medium']} ${SIZE.height['medium']}`,\n large: `${SIZE.text['large']} ${SIZE.padding['large']} ${SIZE.height['large']}`,\n xlarge: `${SIZE.text['xlarge']} ${SIZE.padding['xlarge']} ${SIZE.height['xlarge']}`,\n}\n\nexport const SIZE_VARIANTS_INNER = {\n tiny: `${SIZE.text['tiny']} ${SIZE.padding['tiny']} ${SIZE_INNER.height['tiny']}`,\n small: `${SIZE.text['small']} ${SIZE.padding['small']} ${SIZE_INNER.height['small']}`,\n medium: `${SIZE.text['medium']} ${SIZE.padding['medium']} ${SIZE_INNER.height['medium']}`,\n large: `${SIZE.text['large']} ${SIZE.padding['large']} ${SIZE_INNER.height['large']}`,\n xlarge: `${SIZE.text['xlarge']} ${SIZE.padding['xlarge']} ${SIZE_INNER.height['xlarge']}`,\n}\n\nexport const SIZE_VARIANTS_DEFAULT = 'small'\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\n\nexport interface AutocompleteItem {\n value: string;\n label: string;\n [key: string]: any;\n}\n\nexport interface AutocompleteProps<T extends AutocompleteItem = AutocompleteItem>\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\" | \"onSelect\" | \"size\"> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string;\n\n /**\n * مقدار پیش‌فرض\n * Default value\n */\n defaultValue?: string;\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void;\n\n /**\n * لیست پیشنهادها\n * List of suggestions\n */\n suggestions?: T[];\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean;\n\n /**\n * تابع جستجو (برای fetch کردن suggestions)\n * Search function (for fetching suggestions)\n */\n onSearch?: (query: string) => void | Promise<void>;\n\n /**\n * تابع فراخوانی هنگام انتخاب یک مورد\n * Called when an item is selected\n */\n onSelect?: (item: T) => void;\n\n /**\n * تابع سفارشی برای رندر کردن هر suggestion\n * Custom render function for each suggestion\n */\n renderItem?: (item: T, isActive: boolean) => React.ReactNode;\n\n /**\n * تأخیر debounce (میلی‌ثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number;\n\n /**\n * حداقل تعداد کاراکتر برای نمایش suggestions\n * Minimum characters to show suggestions\n * @default 1\n */\n minChars?: number;\n\n /**\n * حداکثر ارتفاع منوی suggestions\n * Maximum height of suggestions menu\n * @default \"400px\"\n */\n maxHeight?: string;\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string;\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean;\n\n /**\n * باز کردن خودکار منو هنگام focus\n * Auto-open menu on focus\n */\n autoOpenOnFocus?: boolean;\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean;\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: \"rtl\" | \"ltr\";\n}\n\nconst Autocomplete = React.forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = \"\",\n onValueChange,\n suggestions = [],\n isLoading = false,\n onSearch,\n onSelect,\n renderItem,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = \"400px\",\n emptyMessage = \"نتیجه‌ای یافت نشد\",\n disableKeyboard = false,\n autoOpenOnFocus = false,\n clearOnSelect = false,\n dir = \"rtl\",\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [showSuggestions, setShowSuggestions] = React.useState(false);\n const [activeSuggestionIndex, setActiveSuggestionIndex] = React.useState(-1);\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const suggestionsRef = React.useRef<HTMLDivElement>(null);\n const debounceTimerRef = React.useRef<NodeJS.Timeout | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n // Debounced search\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (value.length >= minChars && onSearch) {\n debounceTimerRef.current = setTimeout(() => {\n onSearch(value);\n }, debounceDelay);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [value, minChars, onSearch, debounceDelay]);\n\n // Update position when suggestions should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showSuggestions && value.length >= minChars;\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }\n };\n\n updatePosition();\n\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n } else if (!shouldShow) {\n setPosition(null);\n }\n }, [showSuggestions, value.length, minChars]);\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n suggestionsRef.current &&\n !suggestionsRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeSuggestionIndex >= 0 && suggestionsRef.current) {\n const activeElement = suggestionsRef.current.children[\n activeSuggestionIndex\n ] as HTMLElement;\n if (activeElement) {\n activeElement.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n }\n }\n }, [activeSuggestionIndex]);\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n\n if (newValue.length >= minChars) {\n setShowSuggestions(true);\n } else {\n setShowSuggestions(false);\n }\n setActiveSuggestionIndex(-1);\n };\n\n const handleSuggestionClick = (item: AutocompleteItem) => {\n if (clearOnSelect) {\n handleValueChange(\"\");\n } else {\n handleValueChange(item.value);\n }\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n onSelect?.(item);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showSuggestions && suggestions.length > 0) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setActiveSuggestionIndex((prev) =>\n prev < suggestions.length - 1 ? prev + 1 : prev\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setActiveSuggestionIndex((prev) => (prev > 0 ? prev - 1 : -1));\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeSuggestionIndex >= 0 && activeSuggestionIndex < suggestions.length) {\n handleSuggestionClick(suggestions[activeSuggestionIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n break;\n }\n }\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (autoOpenOnFocus && value.length >= minChars && suggestions.length > 0) {\n setShowSuggestions(true);\n }\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n };\n\n const defaultRenderItem = (item: AutocompleteItem, _isActive: boolean) => (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{item.label}</span>\n </div>\n );\n\n const shouldShowSuggestions = showSuggestions && value.length >= minChars;\n\n // Calculate position for portal\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n };\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n };\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n };\n }, [position]);\n\n return (\n <>\n <div ref={containerRef} className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n {...props}\n />\n {isLoading && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2\",\n dir === \"rtl\" ? \"left-3\" : \"right-3\"\n )}\n >\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowSuggestions && typeof document !== \"undefined\" && (\n createPortal(\n <div\n ref={suggestionsRef}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {suggestions.length > 0 ? (\n suggestions.map((item, index) => (\n <button\n key={item.value}\n onClick={() => handleSuggestionClick(item)}\n className={cn(\n \"w-full text-start p-3 hover:bg-accent transition-colors\",\n index === activeSuggestionIndex && \"bg-accent\",\n index !== suggestions.length - 1 && \"border-b border-border\"\n )}\n type=\"button\"\n >\n {renderItem ? renderItem(item, index === activeSuggestionIndex) : defaultRenderItem(item, index === activeSuggestionIndex)}\n </button>\n ))\n ) : (\n !isLoading && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </div>\n )\n )}\n </div>,\n document.body\n )\n )}\n </>\n );\n }\n);\n\nAutocomplete.displayName = \"Autocomplete\";\n\nexport { Autocomplete };\n\n","import { VariantProps, cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof InputVariants> {}\n\nexport const InputVariants = cva(\n cn(\n 'flex w-full rounded-md border border-control read-only:border-button bg-foreground/[.026] text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-foreground-muted read-only:text-foreground-light',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted disabled:cursor-not-allowed disabled:text-foreground-muted',\n 'aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive'\n ),\n {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, size = 'small', ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n {...props}\n className={cn(InputVariants({ size }), className)}\n />\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from \"react\"\nimport { Loader2Icon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n )\n}\n\nexport { Spinner }\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\n\nexport interface UserItem {\n id: string;\n name: string;\n username: string;\n avatar?: string;\n followers: number;\n [key: string]: any;\n}\n\nexport interface UserAutocompleteProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\" | \"onSelect\" | \"size\"> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string;\n\n /**\n * مقدار پیش‌فرض\n * Default value\n */\n defaultValue?: string;\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void;\n\n /**\n * لیست کاربران\n * List of users\n */\n users?: UserItem[];\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean;\n\n /**\n * تابع جستجو (برای fetch کردن users)\n * Search function (for fetching users)\n */\n onSearch?: (query: string, page: number) => void | Promise<void>;\n\n /**\n * تابع فراخوانی هنگام انتخاب یک کاربر\n * Called when a user is selected\n */\n onSelect?: (user: UserItem) => void;\n\n /**\n * تأخیر debounce (میلی‌ثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number;\n\n /**\n * حداقل تعداد کاراکتر برای نمایش نتایج\n * Minimum characters to show results\n * @default 1\n */\n minChars?: number;\n\n /**\n * حداکثر ارتفاع منوی نتایج\n * Maximum height of results menu\n * @default \"400px\"\n */\n maxHeight?: string;\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string;\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean;\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean;\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: \"rtl\" | \"ltr\";\n\n /**\n * فعال‌سازی infinite scroll\n * Enable infinite scroll\n * @default true\n */\n enableInfiniteScroll?: boolean;\n\n /**\n * تابع بارگذاری صفحه بعدی\n * Load more function\n */\n onLoadMore?: () => void | Promise<void>;\n\n /**\n * وضعیت بارگذاری صفحه بعدی\n * Loading more state\n */\n isLoadingMore?: boolean;\n\n /**\n * آیا صفحات بیشتری وجود دارد\n * Has more pages\n */\n hasMore?: boolean;\n\n /**\n * صفحه فعلی\n * Current page\n */\n currentPage?: number;\n}\n\n// Format followers count (K, M, B)\nconst formatFollowers = (count: number): string => {\n if (count >= 1000000000) {\n return (count / 1000000000).toFixed(1).replace(/\\.0$/, \"\") + \"B\";\n }\n if (count >= 1000000) {\n return (count / 1000000).toFixed(1).replace(/\\.0$/, \"\") + \"M\";\n }\n if (count >= 1000) {\n return (count / 1000).toFixed(1).replace(/\\.0$/, \"\") + \"K\";\n }\n return count.toString();\n};\n\n// Convert numbers to Persian/Arabic\nconst convertToLocalNumbers = (text: string, locale: \"fa\" | \"ar\" | \"en\") => {\n if (locale === \"fa\" || locale === \"ar\") {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"];\n return text.replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n }\n return text;\n};\n\nconst UserAutocomplete = React.forwardRef<HTMLInputElement, UserAutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = \"\",\n onValueChange,\n users = [],\n isLoading = false,\n onSearch,\n onSelect,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = \"400px\",\n emptyMessage = \"کاربری یافت نشد\",\n disableKeyboard = false,\n clearOnSelect = false,\n dir = \"rtl\",\n enableInfiniteScroll = true,\n onLoadMore,\n isLoadingMore = false,\n hasMore = false,\n currentPage = 1,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [showResults, setShowResults] = React.useState(false);\n const [activeUserIndex, setActiveUserIndex] = React.useState(-1);\n const [page, setPage] = React.useState(currentPage);\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const resultsRef = React.useRef<HTMLDivElement>(null);\n const debounceTimerRef = React.useRef<NodeJS.Timeout | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const observerRef = React.useRef<IntersectionObserver | null>(null);\n const lastItemRef = React.useRef<HTMLDivElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n const locale = dir === \"rtl\" ? \"fa\" : \"en\";\n\n // Debounced search\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (value.length >= minChars && onSearch) {\n debounceTimerRef.current = setTimeout(() => {\n setPage(1);\n onSearch(value, 1);\n }, debounceDelay);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [value, minChars, onSearch, debounceDelay]);\n\n // Update position when results should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showResults && value.length >= minChars;\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }\n };\n\n updatePosition();\n\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n } else if (!shouldShow) {\n setPosition(null);\n }\n }, [showResults, value.length, minChars]);\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n resultsRef.current &&\n !resultsRef.current.contains(event.target as Node)\n ) {\n setShowResults(false);\n setActiveUserIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeUserIndex >= 0 && resultsRef.current) {\n const activeElement = resultsRef.current.children[activeUserIndex] as HTMLElement;\n if (activeElement) {\n activeElement.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n }\n }\n }, [activeUserIndex]);\n\n // Infinite scroll observer\n React.useEffect(() => {\n if (!enableInfiniteScroll || !hasMore || isLoadingMore) return;\n\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore && !isLoadingMore && onLoadMore) {\n const nextPage = page + 1;\n setPage(nextPage);\n if (onSearch) {\n onSearch(value, nextPage);\n }\n onLoadMore();\n }\n },\n { threshold: 0.5 }\n );\n\n if (lastItemRef.current) {\n observerRef.current.observe(lastItemRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [enableInfiniteScroll, hasMore, isLoadingMore, onLoadMore, page, value, onSearch]);\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n\n if (newValue.length >= minChars) {\n setShowResults(true);\n setPage(1);\n } else {\n setShowResults(false);\n }\n setActiveUserIndex(-1);\n };\n\n const handleUserClick = (user: UserItem) => {\n if (clearOnSelect) {\n handleValueChange(\"\");\n } else {\n handleValueChange(user.name);\n }\n setShowResults(false);\n setActiveUserIndex(-1);\n onSelect?.(user);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showResults && users.length > 0) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setActiveUserIndex((prev) => (prev < users.length - 1 ? prev + 1 : prev));\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setActiveUserIndex((prev) => (prev > 0 ? prev - 1 : -1));\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeUserIndex >= 0 && activeUserIndex < users.length) {\n handleUserClick(users[activeUserIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setShowResults(false);\n setActiveUserIndex(-1);\n break;\n }\n }\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (value.length >= minChars && users.length > 0) {\n setShowResults(true);\n }\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n };\n\n const shouldShowResults = showResults && value.length >= minChars;\n\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n };\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n };\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n };\n }, [position]);\n\n return (\n <>\n <div ref={containerRef} className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n {...props}\n />\n {isLoading && !isLoadingMore && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2\",\n dir === \"rtl\" ? \"left-3\" : \"right-3\"\n )}\n >\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowResults && typeof document !== \"undefined\" && (\n createPortal(\n <div\n ref={resultsRef}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {isLoading && !isLoadingMore ? (\n <div className=\"p-4 flex items-center justify-center\">\n <Spinner className=\"h-5 w-5\" />\n </div>\n ) : users.length > 0 ? (\n <>\n {users.map((user, index) => (\n <button\n key={user.id}\n onClick={() => handleUserClick(user)}\n className={cn(\n \"w-full text-start p-3 hover:bg-accent transition-colors\",\n index === activeUserIndex && \"bg-accent\",\n index !== users.length - 1 && \"border-b border-border\"\n )}\n type=\"button\"\n >\n <div className=\"flex items-center gap-3\">\n {/* Avatar */}\n <div className=\"flex-shrink-0\">\n <Avatar className=\"w-12 h-12\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback>\n {user.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </div>\n\n {/* User Info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-foreground truncate\">\n {user.name}\n </div>\n <div className=\"text-sm text-muted-foreground truncate\">\n @{user.username}\n </div>\n </div>\n\n {/* Followers Count */}\n <div\n className={cn(\n \"flex-shrink-0\",\n dir === \"rtl\" ? \"text-left\" : \"text-right\"\n )}\n >\n <div className=\"text-sm font-medium text-foreground\">\n {convertToLocalNumbers(formatFollowers(user.followers), locale)}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {locale === \"fa\" ? \"دنبال‌کننده\" : \"followers\"}\n </div>\n </div>\n </div>\n </button>\n ))}\n\n {/* Infinite scroll trigger */}\n {enableInfiniteScroll && hasMore && (\n <div\n ref={lastItemRef}\n className=\"p-3 flex items-center justify-center\"\n >\n {isLoadingMore ? (\n <Spinner className=\"h-5 w-5\" />\n ) : (\n <div className=\"h-1\" />\n )}\n </div>\n )}\n </>\n ) : (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </div>\n )}\n </div>,\n document.body\n )\n )}\n </>\n );\n }\n);\n\nUserAutocomplete.displayName = \"UserAutocomplete\";\n\nexport { UserAutocomplete };\n\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\nimport { cn } from \"@/lib/utils\"\n\nfunction AspectRatio({\n className,\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return (\n <AspectRatioPrimitive.Root\n data-slot=\"aspect-ratio\"\n className={cn(\"relative w-full\", className)}\n {...props}\n />\n )\n}\n\nexport { AspectRatio }\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full font-normal whitespace-nowrap\",\n {\n variants: {\n variant: {\n default:\n \"bg-surface-75 text-foreground-light border border-strong\",\n secondary:\n \"bg-secondary bg-opacity-10 hover:bg-secondary/80 border-transparent text-secondary-foreground\",\n success:\n \"bg-brand bg-opacity-10 text-brand-600 border border-brand-500\",\n warning:\n \"bg-warning bg-opacity-10 text-warning border border-warning-500\",\n destructive:\n \"bg-destructive bg-opacity-10 text-destructive-600 border border-destructive-500\",\n brand:\n \"bg-brand bg-opacity-10 text-brand-600 border border-brand-500\",\n outline: \"bg-transparent text border border-foreground-muted\",\n },\n size: {\n tiny: \"px-1.5 py-[3px] text-[10px] leading-none tracking-wide uppercase\",\n small: \"px-2 py-0.5 text-xs\",\n large: \"px-3 py-0.5 text-sm\",\n },\n dot: {\n true: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"small\",\n },\n }\n)\n\nconst dotVariants = cva(\n \"h-2 w-2 rounded-full\",\n {\n variants: {\n position: {\n start: \"-ms-0.5 me-1.5\",\n end: \"ms-1.5 -me-0.5\",\n },\n },\n defaultVariants: {\n position: \"start\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean\n dotPosition?: \"start\" | \"end\"\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"small\",\n dot = false,\n dotPosition = \"start\",\n children,\n ...props\n}: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && dotPosition === \"start\" && (\n <svg className={cn(dotVariants({ position: \"start\" }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n {children}\n {dot && dotPosition === \"end\" && (\n <svg className={cn(dotVariants({ position: \"end\" }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n </div>\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({\n className,\n dir,\n ...props\n}: React.ComponentProps<\"ol\">) {\n const direction = dir ?? \"rtl\"\n\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n dir={direction}\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5 list-none ps-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-foreground font-normal\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n\n","import { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-e-md has-[>[data-slot=button-group]]:gap-2\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-s-none [&>*:not(:first-child)]:border-s-0 [&>*:not(:last-child)]:rounded-e-none\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(\n \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface SeparatorProps extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {\n children?: React.ReactNode\n}\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, children, ...props },\n ref\n ) => {\n // If there's no children, render the default separator\n if (!children) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n }\n\n // If there are children (text), render separator with text\n if (orientation === \"horizontal\") {\n return (\n <div\n ref={ref}\n className={cn(\"relative flex items-center w-full\", className)}\n {...props}\n >\n <div className=\"flex-1 h-[1px] bg-border\" />\n <span className=\"px-3 text-sm text-muted-foreground whitespace-nowrap\">\n {children}\n </span>\n <div className=\"flex-1 h-[1px] bg-border\" />\n </div>\n )\n }\n\n // For vertical orientation with text (less common)\n return (\n <div\n ref={ref}\n className={cn(\"relative flex flex-col items-center h-full\", className)}\n {...props}\n >\n <div className=\"flex-1 w-[1px] bg-border\" />\n <span className=\"py-3 text-sm text-muted-foreground\">\n {children}\n </span>\n <div className=\"flex-1 w-[1px] bg-border\" />\n </div>\n )\n }\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\nimport { DayPicker as PersianDayPicker } from \"react-day-picker/persian\"\nimport { enUS } from \"date-fns/locale\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = {\n usePersianCalendar?: boolean\n className?: string\n classNames?: any\n showOutsideDays?: boolean\n} & (\n | React.ComponentProps<typeof DayPicker>\n | React.ComponentProps<typeof PersianDayPicker>\n)\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n usePersianCalendar = false,\n ...props\n}: CalendarProps) {\n const PickerComponent = usePersianCalendar ? PersianDayPicker : DayPicker\n\n // Formatters for English numbers in Gregorian calendar\n const englishFormatters = !usePersianCalendar ? {\n formatDay: (date: Date) => {\n // Force English numbers using Intl.NumberFormat with en-US locale\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n const dayNumber = date.getDate()\n return new Intl.NumberFormat('en-US', { useGrouping: false }).format(dayNumber)\n },\n formatWeekdayName: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n return new Intl.DateTimeFormat('en-US', { weekday: 'short' }).format(date)\n },\n formatMonthCaption: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n return new Intl.DateTimeFormat('en-US', { month: 'long', year: 'numeric' }).format(date)\n }\n } : undefined\n\n\n return (\n <PickerComponent\n dir={usePersianCalendar ? \"rtl\" : \"ltr\"}\n locale={usePersianCalendar ? undefined : enUS}\n formatters={englishFormatters}\n showOutsideDays={showOutsideDays}\n className={cn(\"p-6\", usePersianCalendar ? \"\" : \"font-sans\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-y-4 sm:gap-y-0\",\n month: \"gap-y-4 mx-2\",\n month_caption: \"flex justify-center pt-1 relative items-center h-7\",\n caption_label: \"text-sm font-medium truncate\",\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute start-2 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute end-2 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0\"\n ),\n month_grid: \"mt-4\",\n weekdays: \"flex flex-row\",\n weekday: \"text-muted-foreground rounded-md w-9 h-9 font-normal text-[0.8rem] flex items-center justify-center\",\n week: \"flex w-full mt-2\",\n day: cn(\n \"h-9 w-9 text-center text-sm p-0 relative\",\n \"focus-within:relative focus-within:z-20\",\n ),\n day_button: cn(\n \"w-full cursor-pointer h-full p-0 font-normal rounded-md\",\n \" aria-selected:opacity-100\",\n \"border-0 shadow-none ring-0 outline-none\",\n \"flex items-center justify-center\",\n \"text-foreground\" // رنگ روشن‌تر برای اعداد\n ),\n range_start: \"day-range-start\",\n range_end: \"day-range-end\",\n selected: \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-primary/20 aria-selected:text-foreground rounded-none\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) => {\n // برای RTL (تقویم شمسی) فلش‌ها معکوس می‌شوند\n if (usePersianCalendar) {\n if (orientation === \"left\") {\n return <ChevronRight className=\"h-4 w-4\" />\n }\n return <ChevronLeft className=\"h-4 w-4\" />\n }\n // برای LTR (تقویم میلادی) فلش‌ها طبیعی هستند\n if (orientation === \"left\") {\n return <ChevronLeft className=\"h-4 w-4\" />\n }\n return <ChevronRight className=\"h-4 w-4\" />\n },\n }}\n {...(props as any)}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden rounded-lg border bg-surface-100 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 py-4 px-6 border-b\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-xs font-mono uppercase\", className)} {...props} />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-foreground-muted\", className)} {...props} />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"py-4 px-6 border-b last:border-none\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center py-4 px-6\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype Direction = \"ltr\" | \"rtl\"\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n direction: Direction\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = React.useState<Direction>(\"rtl\")\n\n React.useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === \"undefined\") return \"rtl\"\n const htmlDir = document.documentElement.getAttribute(\"dir\")\n if (htmlDir === \"ltr\" || htmlDir === \"rtl\") {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === \"rtl\" ? \"rtl\" : \"ltr\"\n }\n\n setDirection(getDirection())\n\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"dir\"],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const documentDirection = useDocumentDirection()\n const direction = (dir as Direction) ?? documentDirection\n\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n direction: direction,\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n if (direction === \"rtl\") {\n scrollNext()\n } else {\n scrollPrev()\n }\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n if (direction === \"rtl\") {\n scrollPrev()\n } else {\n scrollNext()\n }\n }\n },\n [scrollPrev, scrollNext, direction]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n direction,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n dir={direction}\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ms-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"ps-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev, direction } = useCarousel()\n const isRTL = direction === \"rtl\"\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -translate-y-1/2\"\n : \"start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90\",\n orientation === \"horizontal\" && \"-start-12\",\n orientation === \"vertical\" && \"-top-12\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n {isRTL ? <ArrowRight /> : <ArrowLeft />}\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext, direction } = useCarousel()\n const isRTL = direction === \"rtl\"\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -translate-y-1/2\"\n : \"start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90\",\n orientation === \"horizontal\" && \"-end-12\",\n orientation === \"vertical\" && \"-bottom-12\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n {isRTL ? <ArrowLeft /> : <ArrowRight />}\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-control bg-control data-[state=checked]:bg-brand data-[state=checked]:text-foreground-contrast data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n\n","\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-default bg-dialog text-foreground p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute end-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-start\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-foreground-light\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Card, CardContent } from \"./card\"\nimport { Badge } from \"./badge\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface CommentTag {\n title: string\n probability: number\n color: string\n}\n\nexport interface CommentCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * The comment text content\n */\n text: string\n \n /**\n * Array of analysis tags with probability and color\n */\n tags: CommentTag[]\n \n /**\n * Sentiment of the comment\n */\n sentiment: \"positive\" | \"negative\" | \"neutral\"\n \n /**\n * Optional id for the comment\n */\n id?: number | string\n \n /**\n * Show probability in Persian digits\n */\n usePersianDigits?: boolean\n}\n\nconst CommentCard = React.forwardRef<HTMLDivElement, CommentCardProps>(\n ({ className, text, tags, sentiment, id, usePersianDigits = true, ...props }, ref) => {\n const getSentimentColor = (sentiment: string) => {\n switch (sentiment) {\n case \"positive\":\n return \"#22c55e\"\n case \"negative\":\n return \"#ef4444\"\n case \"neutral\":\n return \"#6b7280\"\n default:\n return \"#6b7280\"\n }\n }\n\n const getSentimentLabel = (sentiment: string) => {\n switch (sentiment) {\n case \"positive\":\n return \"مثبت\"\n case \"negative\":\n return \"منفی\"\n case \"neutral\":\n return \"خنثی\"\n default:\n return \"خنثی\"\n }\n }\n\n const formatNumber = (num: number): string => {\n if (usePersianDigits) {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n }\n return num.toString()\n }\n\n return (\n <Card ref={ref} className={cn(\"h-full relative\", className)} {...props}>\n <CardContent className=\"p-4 pb-8\">\n {/* Comment Text */}\n <div className=\"mb-4\" dir=\"rtl\">\n <span className=\"text-sm leading-relaxed text-foreground\">\n {text}\n </span>\n </div>\n\n {/* Tags */}\n <div className=\"flex flex-row-reverse flex-wrap gap-2 mb-3\">\n {tags.map((tag, index) => (\n <Badge\n key={index}\n variant=\"secondary\"\n className=\"text-xs font-medium\"\n style={{\n backgroundColor: `${tag.color}15`,\n borderColor: tag.color,\n color: tag.color,\n border: `1px solid ${tag.color}30`,\n }}\n >\n <span className=\"text-xs\" dir=\"rtl\">\n {tag.title} ({formatNumber(tag.probability)}%)\n </span>\n </Badge>\n ))}\n </div>\n\n {/* Sentiment Indicator - Fixed to bottom right */}\n <div className=\"absolute bottom-3 end-3\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: getSentimentColor(sentiment) }}\n title={getSentimentLabel(sentiment)}\n />\n </div>\n </CardContent>\n </Card>\n )\n }\n)\n\nCommentCard.displayName = \"CommentCard\"\n\nexport { CommentCard }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto rtl:rotate-180\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n\n","\"use client\"\n\nimport { format, subDays, subMonths, subYears } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\nimport { DateRange } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\"\n\nexport interface DatePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when date range changes\n */\n onChange?: (date: DateRange | undefined) => void\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Placeholder text\n */\n placeholder?: string\n /**\n * Additional className for the button\n */\n className?: string\n /**\n * Disabled state\n */\n disabled?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Show preset date range buttons\n */\n showPresets?: boolean\n /**\n * Selection mode: 'single' for single date, 'range' for date range\n */\n mode?: 'single' | 'range'\n}\n\ninterface PresetRange {\n label: string\n range: DateRange\n}\n\nfunction formatDateRange(\n range: DateRange | undefined,\n usePersianCalendar: boolean\n): string {\n if (!range) return \"\"\n\n if (usePersianCalendar) {\n // Format Persian date\n const fromDate = range.from\n ? new Intl.DateTimeFormat(\"fa-IR\").format(range.from)\n : \"\"\n const toDate = range.to\n ? new Intl.DateTimeFormat(\"fa-IR\").format(range.to)\n : \"\"\n\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && \n range.from.getTime() === range.to.getTime()\n\n if (fromDate && toDate && !isSameDate) {\n return `${fromDate} - ${toDate}`\n }\n if (fromDate) {\n return fromDate\n }\n return \"\"\n } else {\n // Format Gregorian date\n if (range.from) {\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && \n range.from.getTime() === range.to.getTime()\n\n if (range.to && !isSameDate) {\n return `${format(range.from, \"LLL dd, y\")} - ${format(\n range.to,\n \"LLL dd, y\"\n )}`\n } else {\n return format(range.from, \"LLL dd, y\")\n }\n }\n return \"\"\n }\n}\n\nexport function DatePicker({\n value,\n onChange,\n usePersianCalendar = false,\n placeholder,\n className,\n disabled = false,\n numberOfMonths = 2,\n showPresets = false,\n mode = 'range',\n}: DatePickerProps) {\n const displayText = formatDateRange(value, usePersianCalendar)\n const defaultPlaceholder = usePersianCalendar \n ? (mode === 'single' ? \"انتخاب تاریخ\" : \"انتخاب بازه تاریخ\")\n : (mode === 'single' ? \"Pick a date\" : \"Pick a date range\")\n\n // Generate preset ranges\n const getPresetRanges = (): PresetRange[] => {\n const today = new Date()\n \n if (usePersianCalendar) {\n return [\n {\n label: \"امروز\",\n range: { from: today, to: today }\n },\n {\n label: \"هفته اخیر\",\n range: { from: subDays(today, 6), to: today }\n },\n {\n label: \"ماه اخیر\",\n range: { from: subDays(today, 29), to: today }\n },\n {\n label: \"دو هفته اخیر\",\n range: { from: subDays(today, 13), to: today }\n },\n {\n label: \"شش ماه اخیر\",\n range: { from: subMonths(today, 6), to: today }\n },\n {\n label: \"سال گذشته\",\n range: { from: subYears(today, 1), to: today }\n }\n ]\n } else {\n return [\n {\n label: \"Today\",\n range: { from: today, to: today }\n },\n {\n label: \"Last week\",\n range: { from: subDays(today, 6), to: today }\n },\n {\n label: \"Last month\",\n range: { from: subDays(today, 29), to: today }\n },\n {\n label: \"Last 2 weeks\",\n range: { from: subDays(today, 13), to: today }\n },\n {\n label: \"Last 6 months\",\n range: { from: subMonths(today, 6), to: today }\n },\n {\n label: \"Last year\",\n range: { from: subYears(today, 1), to: today }\n }\n ]\n }\n }\n\n const presetRanges = showPresets ? getPresetRanges() : []\n\n const handlePresetClick = (range: DateRange) => {\n onChange?.(range)\n }\n\n return (\n <div className={cn(\"grid gap-2\", className)}>\n <Popover>\n <PopoverTrigger asChild>\n <Button\n id=\"date\"\n variant={\"outline\"}\n className={cn(\n \"w-full min-w-[220px] justify-start text-start font-normal\",\n !value && \"text-muted-foreground\"\n )}\n disabled={disabled}\n iconLeft={<CalendarIcon className=\"h-4 w-4\" />}\n >\n {displayText || placeholder || defaultPlaceholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent \n className=\"w-auto p-0\" \n align=\"start\"\n dir={usePersianCalendar ? \"rtl\" : \"ltr\"}\n >\n <div className=\"flex\">\n {mode === 'range' ? (\n <Calendar\n initialFocus\n mode=\"range\"\n defaultMonth={value?.from}\n selected={value}\n onSelect={onChange}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n ) : (\n <Calendar\n initialFocus\n mode=\"single\"\n defaultMonth={value?.from}\n selected={value?.from}\n onSelect={(date) => onChange?.(date ? { from: date, to: date } : undefined)}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n )}\n {showPresets && mode === 'range' && (\n <div className={cn(\n \"flex flex-col gap-2 border-border p-3 mt-12\",\n usePersianCalendar ? \"border-e\" : \"border-s\"\n )}>\n {presetRanges.map((preset, index) => (\n <Button\n key={index}\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"justify-start text-start font-normal h-auto py-2 px-3 whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\"\n )}\n onClick={() => handlePresetClick(preset.range)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-overlay bg-overlay p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CalendarIcon, ChevronDownIcon } from \"lucide-react\"\nimport { type DateRange } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\"\nimport { Label } from \"./label\"\nimport { formatPersianDateRange } from \"../../lib/jalali-utils\"\n\nexport interface DateRangePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when the date range changes\n */\n onChange?: (range: DateRange | undefined) => void\n /**\n * Label for the date range picker\n */\n label?: string\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Minimum date that can be selected\n */\n minDate?: Date\n /**\n * Maximum date that can be selected\n */\n maxDate?: Date\n /**\n * Additional class name for the trigger button\n */\n className?: string\n /**\n * Disable the date range picker\n */\n disabled?: boolean\n /**\n * Show dropdown for year/month selection\n */\n captionLayout?: \"label\" | \"dropdown\" | \"dropdown-months\" | \"dropdown-years\"\n /**\n * From year for dropdown (when captionLayout includes dropdown)\n */\n fromYear?: number\n /**\n * To year for dropdown (when captionLayout includes dropdown)\n */\n toYear?: number\n}\n\nexport function DateRangePicker({\n value,\n onChange,\n label,\n placeholder = \"انتخاب بازه تاریخ\",\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = \"label\",\n fromYear,\n toYear,\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString(\"fa-IR\")} - ${range.to.toLocaleDateString(\"fa-IR\")}`\n }\n\n return range.from.toLocaleDateString(\"fa-IR\")\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor=\"date-range\" className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"date-range\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"justify-between font-normal min-w-64\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n {formatDateRange(value)}\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-lg border shadow-sm\"\n />\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\n/**\n * Simplified version without label (inline usage)\n */\nexport function DateRangePickerInline({\n value,\n onChange,\n placeholder = \"انتخاب تاریخ\",\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = \"label\",\n fromYear,\n toYear,\n}: Omit<DateRangePickerProps, \"label\">) {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString(\"fa-IR\")} - ${range.to.toLocaleDateString(\"fa-IR\")}`\n }\n\n return range.from.toLocaleDateString(\"fa-IR\")\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"justify-between font-normal min-w-64\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n {formatDateRange(value)}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-lg border shadow-sm\"\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-start\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto size-4 rtl:rotate-180\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex min-h-[400px] flex-col items-center justify-center rounded-md border border-dashed p-8 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyIcon({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-icon\"\n className={cn(\n \"text-muted-foreground mx-auto flex size-12 items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return (\n <h3\n data-slot=\"empty-title\"\n className={cn(\"mt-4 text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"empty-description\"\n className={cn(\"text-muted-foreground mt-2 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport { Empty, EmptyIcon, EmptyTitle, EmptyDescription }\n\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\nimport { type VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"./badge\"\n\nconst tagInputVariants = cva(\n cn(\n \"flex min-h-[34px] w-full flex-wrap gap-1.5 rounded-md border border-control bg-foreground/[.026] px-3 py-1.5 text-sm text-foreground\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 focus-within:ring-offset-foreground-muted\",\n \"disabled:cursor-not-allowed disabled:text-foreground-muted disabled:opacity-50\"\n ),\n {\n variants: {\n variant: {\n default: \"\",\n secondary: \"bg-surface-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface TagInputProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof tagInputVariants> {\n value?: string[]\n defaultValue?: string[]\n onChange?: (value: string[]) => void\n placeholder?: string\n disabled?: boolean\n maxTags?: number\n}\n\nconst TagInput = React.forwardRef<HTMLDivElement, TagInputProps>(\n (\n {\n className,\n variant,\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder,\n disabled,\n maxTags,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = React.useState<string[]>(\n controlledValue || defaultValue || []\n )\n const [inputValue, setInputValue] = React.useState(\"\")\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue)\n }\n }, [controlledValue])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n const newTag = inputValue.trim()\n if (newTag && !value.includes(newTag)) {\n if (maxTags && value.length >= maxTags) return\n const newValue = [...value, newTag]\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n setInputValue(\"\")\n }\n } else if (e.key === \"Backspace\" && !inputValue && value.length > 0) {\n const newValue = value.slice(0, -1)\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n }\n }\n\n const removeTag = (tagToRemove: string) => {\n const newValue = value.filter((tag) => tag !== tagToRemove)\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n inputRef.current?.focus()\n }\n\n return (\n <div\n ref={ref}\n className={cn(tagInputVariants({ variant }), className)}\n onClick={() => inputRef.current?.focus()}\n {...props}\n >\n {value.map((tag) => (\n <Badge\n key={tag}\n variant=\"secondary\"\n className=\"gap-1 pe-1 ps-2 h-6 text-xs font-medium hover:!bg-primary/20 hover:!text-primary transition-colors [&:hover_svg]:!text-primary\"\n >\n {tag}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n removeTag(tag)\n }}\n className=\"rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:!bg-primary/20 transition-colors\"\n disabled={disabled}\n >\n <X className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"sr-only\">Remove {tag}</span>\n </button>\n </Badge>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-transparent outline-none placeholder:text-foreground-muted min-w-[80px] text-sm leading-4\"\n placeholder={value.length === 0 ? placeholder : undefined}\n disabled={disabled}\n />\n </div>\n )\n }\n)\nTagInput.displayName = \"TagInput\"\n\nexport { TagInput, tagInputVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\nimport { type VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"./badge\"\n\nconst hashtagInputVariants = cva(\n cn(\n \"flex min-h-[34px] w-full flex-wrap gap-1.5 rounded-md border border-control bg-foreground/[.026] px-3 py-1.5 text-sm text-foreground\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 focus-within:ring-offset-foreground-muted\",\n \"disabled:cursor-not-allowed disabled:text-foreground-muted disabled:opacity-50\"\n ),\n {\n variants: {\n variant: {\n default: \"\",\n secondary: \"bg-surface-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface HashtagInputProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof hashtagInputVariants> {\n value?: string[]\n defaultValue?: string[]\n onChange?: (value: string[]) => void\n placeholder?: string\n disabled?: boolean\n maxTags?: number\n}\n\nconst HashtagInput = React.forwardRef<HTMLDivElement, HashtagInputProps>(\n (\n {\n className,\n variant,\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder,\n disabled,\n maxTags,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = React.useState<string[]>(\n controlledValue || defaultValue || []\n )\n const [inputValue, setInputValue] = React.useState(\"\")\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue)\n }\n }, [controlledValue])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n // Remove hashtag if present for storage\n const rawTag = inputValue.trim().replace(/^#/, \"\")\n\n if (rawTag && !value.includes(rawTag)) {\n if (maxTags && value.length >= maxTags) return\n const newValue = [...value, rawTag]\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n setInputValue(\"\")\n }\n } else if (e.key === \"Backspace\" && !inputValue && value.length > 0) {\n const newValue = value.slice(0, -1)\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n }\n }\n\n const removeTag = (tagToRemove: string) => {\n const newValue = value.filter((tag) => tag !== tagToRemove)\n if (controlledValue === undefined) {\n setValue(newValue)\n }\n onChange?.(newValue)\n inputRef.current?.focus()\n }\n\n return (\n <div\n ref={ref}\n className={cn(hashtagInputVariants({ variant }), className)}\n onClick={() => inputRef.current?.focus()}\n {...props}\n >\n {value.map((tag) => (\n <Badge\n key={tag}\n variant=\"secondary\"\n className=\"gap-1 pe-1 ps-2 h-6 text-xs font-medium hover:!bg-primary/20 hover:!text-primary transition-colors [&:hover_svg]:!text-primary\"\n >\n #{tag}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n removeTag(tag)\n }}\n className=\"rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:!bg-primary/20 transition-colors\"\n disabled={disabled}\n >\n <X className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"sr-only\">Remove {tag}</span>\n </button>\n </Badge>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-transparent outline-none placeholder:text-foreground-muted min-w-[80px] text-sm leading-4\"\n placeholder={value.length === 0 ? placeholder : undefined}\n disabled={disabled}\n />\n </div>\n )\n }\n)\nHashtagInput.displayName = \"HashtagInput\"\n\nexport { HashtagInput, hashtagInputVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input, InputProps } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\ntype InputGroupContextValue = {\n dir?: \"ltr\" | \"rtl\"\n}\n\nconst InputGroupContext = React.createContext<InputGroupContextValue>({})\n\nfunction useInputGroup() {\n return React.useContext(InputGroupContext)\n}\n\ninterface InputGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Direction of the input group.\n * Use \"ltr\" for URL, email, tel, or other LTR-only content.\n * @default undefined (inherits from parent)\n */\n dir?: \"ltr\" | \"rtl\"\n}\n\nfunction InputGroup({ className, dir, ...props }: InputGroupProps) {\n const contextValue = React.useMemo(() => ({ dir }), [dir])\n \n return (\n <InputGroupContext.Provider value={contextValue}>\n <div\n data-slot=\"input-group\"\n role=\"group\"\n dir={dir}\n className={cn(\n // Base styles - aligned with Input component\n \"group/input-group relative flex w-full items-center rounded-md border border-control bg-foreground/[.026] transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:ps-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pe-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state - aligned with Input component\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-background-control has-[[data-slot=input-group-control]:focus-visible]:ring-offset-2 has-[[data-slot=input-group-control]:focus-visible]:ring-offset-foreground-muted\",\n\n // Error state - aligned with Input component\n \"has-[[data-slot][aria-invalid=true]]:bg-destructive-200 has-[[data-slot][aria-invalid=true]]:border-destructive-400\",\n\n className\n )}\n {...props}\n />\n </InputGroupContext.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first ps-3 has-[>button]:[margin-inline-start:-0.45rem] has-[>kbd]:[margin-inline-start:-0.35rem]\",\n \"inline-end\":\n \"order-last pe-3 has-[>button]:[margin-inline-end:-0.45rem] has-[>kbd]:[margin-inline-end:-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n type,\n size,\n dir: dirProp,\n ...props\n}: InputProps) {\n const { dir: contextDir } = useInputGroup()\n \n // URL, email, tel, number inputs should be LTR (unless explicitly overridden)\n const isLTRType = type === \"url\" || type === \"email\" || type === \"tel\" || type === \"number\" || props.inputMode === \"numeric\"\n \n // Priority: explicit dir prop > context dir > auto-detect based on type\n const dir = dirProp ?? contextDir ?? (isLTRType ? \"ltr\" : undefined)\n \n return (\n <Input\n data-slot=\"input-group-control\"\n type={type}\n size={size}\n dir={dir}\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n // For LTR inputs inside RTL pages, align text to left\n dir === \"ltr\" && \"text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Base styles - aligned with Input component\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-control bg-foreground/[.026] px-3 py-2 text-base text-foreground placeholder:text-foreground-muted\",\n // Focus state - aligned with Input component\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:text-foreground-muted\",\n // Error state - aligned with Input component\n \"aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive\",\n // Responsive\n \"md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n dir = \"ltr\",\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <div dir={dir ?? \"ltr\"}>\n <OTPInput\n data-slot=\"input-otp\"\n dir={dir ?? \"ltr\"}\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n dir=\"ltr\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-e border-y text-sm shadow-xs transition-all outline-none first:rounded-s-md first:border-s last:rounded-e-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-separator\"\n role=\"separator\"\n dir=\"ltr\"\n {...props}\n >\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn, formatNumber, formatRelativeTime, formatAbsoluteTime } from \"@/lib/utils\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\"\nimport { Button } from \"./button\"\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"./carousel\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\nimport { Icons } from \"@/icons\"\nimport { ImageOff } from \"lucide-react\"\n\n// Types\nexport type MediaType = \"image\" | \"video\" | \"carousel\"\nexport type AspectRatioType = \"16:9\" | \"9:16\" | \"1:1\" | \"4:5\" | \"5:4\"\n\nexport interface MediaItem {\n type: \"image\" | \"video\"\n url: string\n aspectRatio?: AspectRatioType\n}\n\nexport interface PostStats {\n likes?: number\n comments?: number\n views?: number\n shares?: number\n}\n\nexport type NumberFormat = \"exact\" | \"short\"\nexport type TimeFormat = \"absolute\" | \"relative\"\n\nexport interface InstagramProfileInfo {\n username: string\n fullName?: string\n profilePicture?: string\n avatarUrl?: string\n}\n\nexport interface InstagramPostProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof instagramPostVariants> {\n // Direction\n dir?: \"rtl\" | \"ltr\"\n\n // Media\n media?: MediaItem[]\n mediaType?: MediaType\n postType?: 0 | 1 | 2 // 0: image, 1: video, 2: carousel\n\n // Caption\n caption?: string\n showCaption?: boolean\n\n // Stats\n stats?: PostStats\n numberFormat?: NumberFormat\n showLikes?: boolean\n showComments?: boolean\n showViews?: boolean\n showShares?: boolean\n\n // Time\n publishTime?: Date | string | number\n timeFormat?: TimeFormat\n\n // Profile\n profile?: InstagramProfileInfo\n showProfile?: boolean\n avatarUrl?: string\n\n // Actions\n showActions?: boolean\n onCommentAnalyzer?: () => void\n onBooster?: () => void\n onAIAnalysis?: () => void\n onOpenInstagram?: () => void\n instagramUrl?: string\n\n // Disable individual action buttons\n disableCommentAnalyzer?: boolean\n disableBooster?: boolean\n disableAIAnalysis?: boolean\n disableOpenInstagram?: boolean\n\n // Placeholder\n placeholderText?: string\n}\n\n// Variants\nconst instagramPostVariants = cva(\n \"relative border bg-background-surface-100\",\n {\n variants: {\n variant: {\n vertical: \"w-full max-w-sm rounded-lg overflow-hidden\",\n horizontal: \"w-full flex flex-row items-stretch min-h-[200px] overflow-hidden\",\n },\n },\n defaultVariants: {\n variant: \"vertical\",\n },\n }\n)\n\n// Media Component\ninterface InstagramPostMediaProps {\n media?: MediaItem[]\n mediaType?: MediaType\n variant?: \"vertical\" | \"horizontal\"\n placeholderText?: string\n}\n\nfunction InstagramPostMedia({\n media,\n mediaType,\n variant = \"vertical\",\n placeholderText = \"No media available\",\n}: InstagramPostMediaProps) {\n const [imageError, setImageError] = React.useState<Record<string, boolean>>({})\n\n const handleImageError = (url: string) => {\n setImageError((prev) => ({ ...prev, [url]: true }))\n }\n\n const renderPlaceholder = () => (\n <div className=\"w-full h-full flex items-center justify-center bg-muted/10 dark:bg-muted/5\">\n <ImageOff className=\"size-12 text-muted-foreground/50\" />\n </div>\n )\n\n if (!media || media.length === 0) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center bg-muted/30\",\n variant === \"vertical\"\n // Instagram vertical post standard: 4:5 ratio (1080×1350px)\n ? \"w-full\"\n : \"w-[20%] shrink-0 h-full min-h-[200px] -my-[1px] -ms-[1px]\"\n )}\n style={variant === \"vertical\" ? { aspectRatio: \"4/5\" } : undefined}\n >\n <div className=\"text-center p-4\">\n <ImageOff className=\"size-12 mx-auto mb-2 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{placeholderText}</p>\n </div>\n </div>\n )\n }\n\n // Single image\n if (mediaType === \"image\" || (media.length === 1 && media[0].type === \"image\")) {\n const item = media[0]\n if (variant === \"horizontal\") {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className=\"w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Vertical: use Instagram standard aspect ratio\n // Instagram supports: 1:1 (square), 4:5 (portrait), 1.91:1 (landscape)\n // For portrait/vertical posts: always use 4:5 to match Instagram standard\n const aspectRatio = item.aspectRatio || \"4:5\"\n const isPortrait = aspectRatio === \"9:16\" || aspectRatio === \"4:5\"\n\n // Instagram portrait standard is 4:5 (not 9:16)\n const instagramRatio = isPortrait ? \"4/5\" : getAspectRatioCSS(aspectRatio)\n\n return (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: instagramRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className={cn(\n \"w-full h-full transition-transform duration-300 group-hover:scale-[1.02]\",\n // For portrait images: object-contain to show full image like Instagram\n // For square/landscape: object-cover\n isPortrait ? \"object-contain\" : \"object-cover\"\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Single video\n if (mediaType === \"video\" || (media.length === 1 && media[0].type === \"video\")) {\n const item = media[0]\n if (variant === \"horizontal\") {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className=\"w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n const aspectRatio = item.aspectRatio || \"4:5\"\n const isPortrait = aspectRatio === \"9:16\" || aspectRatio === \"4:5\"\n const instagramRatio = isPortrait ? \"4/5\" : getAspectRatioCSS(aspectRatio)\n return (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: instagramRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className={cn(\n \"w-full h-full transition-transform duration-300 group-hover:scale-[1.02]\",\n isPortrait ? \"object-contain\" : \"object-cover\"\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Carousel\n if (mediaType === \"carousel\" || media.length > 1) {\n if (variant === \"horizontal\") {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <Carousel className=\"w-full h-full\">\n <CarouselContent className=\"h-full\">\n {media.map((item, index) => (\n <CarouselItem key={index} className=\"h-full\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt={`Post media ${index + 1}`}\n className=\"w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"ms-2\" />\n <CarouselNext className=\"me-2\" />\n </Carousel>\n </div>\n )\n }\n\n\n\n return (\n <Carousel className=\"w-full\">\n <CarouselContent>\n {media.map((item, index) => {\n const itemAspect = item.aspectRatio || \"4:5\"\n const itemIsPortrait = itemAspect === \"9:16\" || itemAspect === \"4:5\"\n const itemRatio = itemIsPortrait ? \"4/5\" : getAspectRatioCSS(itemAspect)\n return (\n <CarouselItem key={index}>\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: itemRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt={`Post media ${index + 1}`}\n className={cn(\n \"w-full h-full transition-transform duration-300\",\n itemIsPortrait ? \"object-contain\" : \"object-cover\"\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n </CarouselItem>\n )\n })}\n </CarouselContent>\n <CarouselPrevious className=\"ms-2\" />\n <CarouselNext className=\"me-2\" />\n </Carousel>\n )\n }\n\n return null\n}\n\n\nfunction getAspectRatioCSS(ratio: AspectRatioType): string {\n const ratios: Record<AspectRatioType, string> = {\n \"16:9\": \"16/9\",\n \"9:16\": \"4/5\", // Instagram standard portrait\n \"1:1\": \"1/1\",\n \"4:5\": \"4/5\",\n \"5:4\": \"5/4\",\n }\n return ratios[ratio]\n}\n\n// Caption Component\ninterface InstagramPostCaptionProps {\n caption?: string\n maxLines?: number\n variant?: \"vertical\" | \"horizontal\"\n}\n\nfunction InstagramPostCaption({\n caption,\n maxLines = 3,\n variant = \"vertical\",\n}: InstagramPostCaptionProps & { variant?: \"vertical\" | \"horizontal\" }) {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const [shouldShowMore, setShouldShowMore] = React.useState(false)\n const textRef = React.useRef<HTMLParagraphElement>(null)\n\n React.useEffect(() => {\n // Only check for \"more\" button in vertical mode\n if (variant === \"vertical\" && textRef.current && !isExpanded) {\n const lineHeight = parseInt(window.getComputedStyle(textRef.current).lineHeight)\n const maxHeight = lineHeight * maxLines\n setShouldShowMore(textRef.current.scrollHeight > maxHeight)\n } else {\n setShouldShowMore(false)\n }\n }, [caption, maxLines, isExpanded, variant])\n\n if (!caption) return null\n\n const parsedCaption = parseCaption(caption)\n\n return (\n <div className={cn(\n \"px-4 py-2\",\n variant === \"horizontal\" && \"overflow-visible\"\n )}>\n <p\n ref={textRef}\n className={cn(\n \"text-sm leading-relaxed text-start\",\n !isExpanded && variant === \"vertical\" && \"line-clamp-3\",\n // No line clamp for horizontal variant - show full text\n )}\n style={!isExpanded && variant === \"vertical\" ? {\n display: '-webkit-box',\n WebkitLineClamp: maxLines,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden'\n } : undefined}\n >\n {parsedCaption.map((part, index) => {\n if (part.type === \"hashtag\") {\n return (\n <span\n key={index}\n className=\"text-brand-link hover:underline cursor-pointer\"\n >\n {part.text}\n </span>\n )\n }\n if (part.type === \"mention\") {\n return (\n <span\n key={index}\n className=\"text-brand-link hover:underline cursor-pointer font-medium\"\n >\n {part.text}\n </span>\n )\n }\n return <span key={index}>{part.text}</span>\n })}\n </p>\n {shouldShowMore && variant === \"vertical\" && (\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"text-sm text-muted-foreground hover:text-foreground mt-1\"\n >\n {isExpanded ? \"کمتر\" : \"بیشتر\"}\n </button>\n )}\n </div>\n )\n}\n\ninterface CaptionPart {\n type: \"text\" | \"hashtag\" | \"mention\"\n text: string\n}\n\nfunction parseCaption(text: string): CaptionPart[] {\n const parts: CaptionPart[] = []\n // Match hashtags (#word) and mentions (@word)\n const regex = /(#[\\w\\u0600-\\u06FF]+)|(@[\\w\\u0600-\\u06FF]+)/g\n let lastIndex = 0\n let match\n\n while ((match = regex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n parts.push({\n type: \"text\",\n text: text.slice(lastIndex, match.index),\n })\n }\n\n // Add matched hashtag or mention\n const matchedText = match[0]\n parts.push({\n type: matchedText.startsWith(\"#\") ? \"hashtag\" : \"mention\",\n text: matchedText,\n })\n\n lastIndex = regex.lastIndex\n }\n\n // Add remaining text\n if (lastIndex < text.length) {\n parts.push({\n type: \"text\",\n text: text.slice(lastIndex),\n })\n }\n\n return parts.length > 0 ? parts : [{ type: \"text\", text }]\n}\n\n// Stats Component\ninterface InstagramPostStatsProps {\n stats?: PostStats\n numberFormat?: NumberFormat\n showLikes?: boolean\n showComments?: boolean\n showViews?: boolean\n showShares?: boolean\n postType?: 0 | 1 | 2\n}\n\nfunction InstagramPostStats({\n stats,\n numberFormat = \"exact\",\n showLikes = true,\n showComments = true,\n showViews = true,\n showShares = true,\n postType,\n}: InstagramPostStatsProps) {\n if (!stats) return null\n\n const items: Array<{\n label: string\n labelEn: string\n value: string\n exactValue: string\n icon: React.ComponentType<{ className?: string }>\n isPostType?: boolean\n }> = []\n\n if (showLikes && stats.likes !== undefined) {\n items.push({\n label: \"تعداد لایک\",\n labelEn: \"likes\",\n value: formatNumber(stats.likes, numberFormat),\n exactValue: formatNumber(stats.likes, \"exact\"),\n icon: Icons.heart,\n })\n }\n\n if (showComments && stats.comments !== undefined) {\n items.push({\n label: \"تعداد کامنت\",\n labelEn: \"comments\",\n value: formatNumber(stats.comments, numberFormat),\n exactValue: formatNumber(stats.comments, \"exact\"),\n icon: Icons.messageCircle,\n })\n }\n\n if (showViews && stats.views !== undefined) {\n items.push({\n label: \"تعداد بازدید\",\n labelEn: \"views\",\n value: formatNumber(stats.views, numberFormat),\n exactValue: formatNumber(stats.views, \"exact\"),\n icon: Icons.eye,\n })\n }\n\n if (showShares && stats.shares !== undefined) {\n items.push({\n label: \"تعداد اشتراک\",\n labelEn: \"shares\",\n value: formatNumber(stats.shares, numberFormat),\n exactValue: formatNumber(stats.shares, \"exact\"),\n icon: Icons.share,\n })\n }\n\n // Get post type info\n const getPostTypeInfo = () => {\n if (postType === 0) {\n return { icon: Icons.image, label: \"عکس\", labelEn: \"photo\" }\n } else if (postType === 1) {\n return { icon: Icons.video, label: \"ویدیو\", labelEn: \"video\" }\n } else if (postType === 2) {\n return { icon: Icons.images, label: \"اسلاید\", labelEn: \"carousel\" }\n }\n return null\n }\n\n const postTypeInfo = getPostTypeInfo()\n\n // Add post type after shares\n if (postTypeInfo) {\n items.push({\n label: \"نوع پست\",\n labelEn: postTypeInfo.labelEn,\n value: postTypeInfo.label,\n exactValue: postTypeInfo.label,\n icon: postTypeInfo.icon,\n isPostType: true,\n })\n }\n\n if (items.length === 0) return null\n\n return (\n <TooltipProvider>\n <div className=\"px-4 py-2 flex items-center gap-4 text-sm text-foreground-light border-t border-border-default\" dir=\"ltr\">\n {items.map((item, index) => {\n const Icon = item.icon\n return (\n <Tooltip key={index}>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1.5 cursor-default\">\n <Icon className=\"size-4\" />\n <span className={item.isPostType ? \"text-xs\" : \"\"}>{item.value}</span>\n <span className=\"sr-only\">{item.labelEn}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p>{item.label}: {item.exactValue}</p>\n </TooltipContent>\n </Tooltip>\n )\n })}\n </div>\n </TooltipProvider>\n )\n}\n\n// Profile Component\ninterface InstagramPostProfileProps {\n profile?: InstagramProfileInfo\n variant?: \"vertical\" | \"horizontal\"\n avatarUrl?: string\n}\n\nfunction InstagramPostProfile({\n profile,\n variant = \"vertical\",\n avatarUrl,\n}: InstagramPostProfileProps) {\n if (!profile) return null\n\n const displayAvatarUrl = avatarUrl || profile.avatarUrl || profile.profilePicture\n\n return (\n <div\n className={cn(\n \"flex items-center gap-3 px-4 pt-3\",\n variant === \"vertical\" && \"pb-0\",\n variant === \"horizontal\" && \"pb-2\"\n )}\n >\n <Avatar className=\"size-10\">\n {displayAvatarUrl && (\n <AvatarImage src={displayAvatarUrl} alt={profile.username} />\n )}\n <AvatarFallback>\n {profile.username.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{profile.username}</div>\n {profile.fullName && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {profile.fullName}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// Actions Component\ninterface InstagramPostActionsProps {\n showActions?: boolean\n onCommentAnalyzer?: () => void\n onBooster?: () => void\n onAIAnalysis?: () => void\n onOpenInstagram?: () => void\n instagramUrl?: string\n // Disable individual buttons\n disableCommentAnalyzer?: boolean\n disableBooster?: boolean\n disableAIAnalysis?: boolean\n disableOpenInstagram?: boolean\n}\n\nfunction InstagramPostActions({\n showActions = true,\n onCommentAnalyzer,\n onBooster,\n onAIAnalysis,\n onOpenInstagram,\n instagramUrl,\n disableCommentAnalyzer = false,\n disableBooster = false,\n disableAIAnalysis = false,\n disableOpenInstagram = false,\n}: InstagramPostActionsProps) {\n if (!showActions) return null\n\n const handleOpenInstagram = () => {\n if (onOpenInstagram) {\n onOpenInstagram()\n } else if (instagramUrl) {\n window.open(instagramUrl, \"_blank\", \"noopener,noreferrer\")\n }\n }\n\n return (\n <TooltipProvider>\n <div className=\"absolute top-2 end-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity z-10\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\",\n disableCommentAnalyzer && \"opacity-40 cursor-not-allowed pointer-events-none\"\n )}\n onClick={disableCommentAnalyzer ? undefined : onCommentAnalyzer}\n disabled={disableCommentAnalyzer}\n aria-label=\"Comment Analyzer\"\n >\n <Icons.messageCircle className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableCommentAnalyzer ? \"تحلیل کامنت‌ها (غیرفعال)\" : \"تحلیل کامنت‌ها\"}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\",\n disableBooster && \"opacity-40 cursor-not-allowed pointer-events-none\"\n )}\n onClick={disableBooster ? undefined : onBooster}\n disabled={disableBooster}\n aria-label=\"Booster\"\n >\n <Icons.rocket className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableBooster ? \"بوستر (غیرفعال)\" : \"بوستر\"}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\",\n disableAIAnalysis && \"opacity-40 cursor-not-allowed pointer-events-none\"\n )}\n onClick={disableAIAnalysis ? undefined : onAIAnalysis}\n disabled={disableAIAnalysis}\n aria-label=\"AI Analysis\"\n >\n <Icons.sparkles className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableAIAnalysis ? \"تحلیل هوش مصنوعی (غیرفعال)\" : \"تحلیل هوش مصنوعی\"}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\",\n disableOpenInstagram && \"opacity-40 cursor-not-allowed pointer-events-none\"\n )}\n onClick={disableOpenInstagram ? undefined : handleOpenInstagram}\n disabled={disableOpenInstagram}\n aria-label=\"Open on Instagram\"\n >\n <Icons.instagram className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableOpenInstagram ? \"باز کردن در اینستاگرام (غیرفعال)\" : \"باز کردن در اینستاگرام\"}</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n )\n}\n\n// Time Component\ninterface InstagramPostTimeProps {\n publishTime?: Date | string | number\n timeFormat?: TimeFormat\n}\n\nfunction InstagramPostTime({\n publishTime,\n timeFormat = \"relative\",\n}: InstagramPostTimeProps) {\n if (!publishTime) return null\n\n const relativeTime = formatRelativeTime(publishTime)\n const absoluteTime = formatAbsoluteTime(publishTime)\n\n if (timeFormat === \"absolute\") {\n return (\n <div className=\"px-4 py-1 text-xs text-muted-foreground flex items-center gap-1.5\" dir=\"ltr\">\n <Icons.clock className=\"size-3\" />\n <span>{absoluteTime}</span>\n </div>\n )\n }\n\n return (\n <div\n className=\"px-4 py-1 text-xs text-muted-foreground cursor-default flex items-center gap-1.5\"\n title={absoluteTime}\n dir=\"ltr\"\n >\n <Icons.clock className=\"size-3\" />\n <span>{relativeTime}</span>\n </div>\n )\n}\n\n// Main Component\nconst InstagramPost = React.forwardRef<HTMLDivElement, InstagramPostProps>(\n (\n {\n className,\n variant = \"vertical\",\n media,\n mediaType,\n postType,\n caption,\n showCaption = true,\n stats,\n numberFormat = \"exact\",\n showLikes = true,\n showComments = true,\n showViews = true,\n showShares = true,\n publishTime,\n timeFormat = \"relative\",\n profile,\n showProfile = true,\n avatarUrl,\n showActions = true,\n onCommentAnalyzer,\n onBooster,\n onAIAnalysis,\n onOpenInstagram,\n instagramUrl,\n disableCommentAnalyzer = false,\n disableBooster = false,\n disableAIAnalysis = false,\n disableOpenInstagram = false,\n placeholderText,\n dir,\n ...props\n },\n ref\n ) => {\n const isVertical = variant === \"vertical\"\n\n return (\n <div\n ref={ref}\n className={cn(instagramPostVariants({ variant }), className, \"group\", isVertical && \"flex flex-col h-full\")}\n dir={dir}\n {...props}\n >\n {showActions && (\n <InstagramPostActions\n showActions={showActions}\n onCommentAnalyzer={onCommentAnalyzer}\n onBooster={onBooster}\n onAIAnalysis={onAIAnalysis}\n onOpenInstagram={onOpenInstagram}\n instagramUrl={instagramUrl}\n disableCommentAnalyzer={disableCommentAnalyzer}\n disableBooster={disableBooster}\n disableAIAnalysis={disableAIAnalysis}\n disableOpenInstagram={disableOpenInstagram}\n />\n )}\n\n {isVertical ? (\n <>\n {showProfile && <InstagramPostProfile profile={profile} variant={variant || \"vertical\"} avatarUrl={avatarUrl} />}\n <div className=\"mt-2.5\">\n <InstagramPostMedia\n media={media}\n mediaType={mediaType}\n variant={variant || \"vertical\"}\n placeholderText={placeholderText}\n />\n </div>\n <InstagramPostStats\n stats={stats}\n numberFormat={numberFormat}\n showLikes={showLikes}\n showComments={showComments}\n showViews={showViews}\n showShares={showShares}\n postType={postType}\n />\n {showCaption && <InstagramPostCaption caption={caption} variant={variant || \"vertical\"} />}\n <div className=\"mt-auto w-full\">\n <InstagramPostTime\n publishTime={publishTime}\n timeFormat={timeFormat}\n />\n </div>\n </>\n ) : (\n <>\n <InstagramPostMedia\n media={media}\n mediaType={mediaType}\n variant={variant || \"horizontal\"}\n placeholderText={placeholderText}\n />\n <div className=\"flex-1 flex flex-col min-w-0 overflow-hidden rounded-e-lg\">\n {showProfile && <InstagramPostProfile profile={profile} variant={variant || \"horizontal\"} avatarUrl={avatarUrl} />}\n <InstagramPostStats\n stats={stats}\n numberFormat={numberFormat}\n showLikes={showLikes}\n showComments={showComments}\n showViews={showViews}\n showShares={showShares}\n postType={postType}\n />\n {showCaption && <InstagramPostCaption caption={caption} variant={variant || \"horizontal\"} />}\n <div className=\"mt-auto w-full\">\n <InstagramPostTime\n publishTime={publishTime}\n timeFormat={timeFormat}\n />\n </div>\n </div>\n </>\n )}\n </div>\n )\n }\n)\n\nInstagramPost.displayName = \"InstagramPost\"\n\nexport { InstagramPost, instagramPostVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-alternative px-3 py-1.5 text-xs text-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none\",\n \"[&_svg:not([class*='size-'])]:size-3\",\n \"[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nexport { Kbd, KbdGroup }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:ps-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto h-4 w-4 rtl:rotate-180\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ExternalLink, Info } from \"lucide-react\"\nimport { format } from \"date-fns\"\nimport { Card } from \"./card\"\nimport { Skeleton } from \"./skeleton\"\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\nimport { formatJalaliDate, toPersianDigits } from \"../../lib/jalali-utils\"\n\ninterface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Show loading state\n */\n isLoading?: boolean\n}\n\ninterface MetricCardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Optional link URL\n */\n href?: string\n}\n\ninterface MetricCardLabelProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * Tooltip text to display on hover\n */\n tooltip?: string\n /**\n * Optional icon to display before the label text\n */\n icon?: React.ReactNode\n}\n\ninterface MetricCardDifferentialProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Variant determines color: positive (green) or negative (red)\n */\n variant?: \"positive\" | \"negative\"\n}\n\ninterface MetricCardSparklineProps {\n /**\n * Array of data points for the sparkline\n */\n data: Array<{ value: number; timestamp: string }>\n /**\n * Key to use for the value in data objects\n */\n dataKey: string\n /**\n * Use Persian calendar for date formatting\n */\n usePersianCalendar?: boolean\n /**\n * Additional className\n */\n className?: string\n}\n\nconst MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n ({ className, isLoading, children, ...props }, ref) => {\n if (isLoading) {\n return (\n <Card\n ref={ref}\n className={cn(\"py-4 space-y-3\", className)}\n {...props}\n >\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-8 w-16\" />\n <Skeleton className=\"h-12 w-full\" />\n </Card>\n )\n }\n\n return (\n <Card\n ref={ref}\n className={cn(\"py-4 space-y-3\", className)}\n {...props}\n >\n {children}\n </Card>\n )\n }\n)\nMetricCard.displayName = \"MetricCard\"\n\nconst MetricCardHeader = React.forwardRef<HTMLDivElement, MetricCardHeaderProps>(\n ({ className, href, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex px-4 items-center justify-between gap-2\", className)}\n {...props}\n >\n {children}\n {href && (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground-lighter hover:text-foreground transition-colors\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n )}\n </div>\n )\n }\n)\nMetricCardHeader.displayName = \"MetricCardHeader\"\n\nconst MetricCardLabel = React.forwardRef<HTMLHeadingElement, MetricCardLabelProps>(\n ({ className, tooltip, icon, children, ...props }, ref) => {\n const label = (\n <h3\n ref={ref}\n className={cn(\n \"text-xs font-normal text-foreground-light uppercase tracking-wide\",\n className\n )}\n {...props}\n >\n <span className=\"flex items-center gap-1.5\">\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <span>{children}</span>\n </span>\n </h3>\n )\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1.5 cursor-help\">\n {label}\n <Info className=\"h-3.5 w-3.5 text-foreground-lighter\" />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n }\n\n return label\n }\n)\nMetricCardLabel.displayName = \"MetricCardLabel\"\n\nconst MetricCardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex px-4 items-baseline gap-3\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMetricCardContent.displayName = \"MetricCardContent\"\n\nconst MetricCardValue = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"text-3xl font-semibold tabular-nums\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMetricCardValue.displayName = \"MetricCardValue\"\n\nconst MetricCardDifferential = React.forwardRef<HTMLDivElement, MetricCardDifferentialProps>(\n ({ className, variant = \"positive\", children, ...props }, ref) => {\n // Parse children to extract sign and move it to the left\n const childrenString = typeof children === 'string' ? children : String(children)\n \n // Match sign at the beginning or end of the string\n const signMatch = childrenString.match(/^([+\\-])|([+\\-])$/)\n let sign = ''\n let value = childrenString\n \n if (signMatch) {\n sign = signMatch[1] || signMatch[2] || ''\n // Remove sign from the value\n value = childrenString.replace(/^[+\\-]|[+\\-]$/, '').trim()\n }\n \n return (\n <div\n ref={ref}\n className={cn(\n \"text-sm font-medium tabular-nums flex items-center\",\n variant === \"positive\" ? \"text-brand-600\" : \"text-destructive-600\",\n className\n )}\n {...props}\n >\n <span>{value}</span>\n {sign && (\n <span className=\"inline-block\" dir=\"ltr\">\n {sign}\n </span>\n )}\n \n </div>\n )\n }\n)\nMetricCardDifferential.displayName = \"MetricCardDifferential\"\n\nconst MetricCardSparkline = React.forwardRef<HTMLDivElement, MetricCardSparklineProps>(\n ({ data, dataKey, usePersianCalendar = false, className }, _ref) => {\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null)\n const [tooltipPosition, setTooltipPosition] = React.useState({ x: 0, y: 0 })\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n if (!data || data.length === 0) return null\n\n // Calculate SVG path for sparkline\n const values = data.map((item) => item[dataKey as keyof typeof item] as number)\n const timestamps = data.map((item) => new Date(item.timestamp))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const range = max - min || 1\n\n const width = 400\n const height = 60\n\n // Create step chart path (horizontal then vertical)\n const points = values.map((value, index) => {\n const x = (index / (values.length - 1)) * width\n const y = height - ((value - min) / range) * height\n return { x, y, value, timestamp: timestamps[index] }\n })\n\n // For step chart, we don't need separate segments array\n // We'll use points directly and calculate segment position on hover\n\n // Build step path: move horizontally first, then vertically\n let pathData = `M ${points[0].x},${points[0].y}`\n for (let i = 1; i < points.length; i++) {\n const prevPoint = points[i - 1]\n const currentPoint = points[i]\n // Draw horizontal line to current x\n pathData += ` L ${currentPoint.x},${prevPoint.y}`\n // Draw vertical line to current y\n pathData += ` L ${currentPoint.x},${currentPoint.y}`\n }\n\n // Build area path for gradient fill\n let areaPath = pathData\n // Close the path by going to bottom right, then bottom left\n areaPath += ` L ${points[points.length - 1].x},${height}`\n areaPath += ` L ${points[0].x},${height}`\n areaPath += ` Z`\n\n // Check if trend is positive or negative\n const isPositive = values[values.length - 1] >= values[0]\n const gradientId = React.useId()\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current) return\n \n const rect = containerRef.current.getBoundingClientRect()\n const mouseX = e.clientX - rect.left\n const relativeX = (mouseX / rect.width) * width\n \n // Find which segment the mouse is over\n // In step chart, segment i is the horizontal line from points[i] to points[i+1] at height points[i].y\n let closestSegmentIndex = 0\n let minDistance = Infinity\n \n for (let i = 0; i < points.length - 1; i++) {\n const segmentCenterX = (points[i].x + points[i + 1].x) / 2\n const distance = Math.abs(segmentCenterX - relativeX)\n if (distance < minDistance) {\n minDistance = distance\n closestSegmentIndex = i\n }\n }\n \n setHoveredIndex(closestSegmentIndex)\n \n // Calculate tooltip position based on segment center\n const segmentCenterX = (points[closestSegmentIndex].x + points[closestSegmentIndex + 1].x) / 2\n const pointX = (segmentCenterX / width) * rect.width\n setTooltipPosition({ \n x: pointX, \n y: (points[closestSegmentIndex].y / height) * rect.height \n })\n }\n\n const handleMouseLeave = () => {\n setHoveredIndex(null)\n }\n\n // Format date based on calendar type (only date, no time)\n const formatDate = (date: Date): string => {\n if (usePersianCalendar) {\n // Format as Persian date: \"24 دی\" (only date, no time)\n const jalaliDate = formatJalaliDate(date, \"jD jMMMM\")\n return toPersianDigits(jalaliDate)\n } else {\n // Format as Gregorian date: \"Dec 24\" (only date, no time)\n return format(date, \"MMM d\")\n }\n }\n\n return (\n <div \n ref={containerRef}\n className={cn(\"relative w-full h-12\", className)}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className=\"overflow-visible\"\n >\n {/* Gradient definition */}\n <defs>\n <linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop \n offset=\"0%\" \n stopColor=\"currentColor\" \n stopOpacity=\"0.3\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n <stop \n offset=\"100%\" \n stopColor=\"currentColor\" \n stopOpacity=\"0\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n </linearGradient>\n </defs>\n\n {/* Area fill with gradient */}\n <path\n d={areaPath}\n fill={`url(#${gradientId})`}\n />\n \n {/* Step line */}\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"miter\"\n strokeLinecap=\"square\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n \n {/* Highlight hovered point */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <>\n {/* Vertical line indicator */}\n <line\n x1={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y1=\"0\"\n x2={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y2={height}\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeDasharray=\"2,2\"\n className=\"text-foreground-lighter opacity-50\"\n />\n {/* Circle at the point - white with colored center */}\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"5\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"3\"\n className={cn(\n \"fill-current\",\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n </>\n )}\n </svg>\n \n {/* Tooltip */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <div\n className=\"absolute z-50 pointer-events-none\"\n style={{\n left: `${tooltipPosition.x + 8}px`,\n top: `${tooltipPosition.y - 40}px`,\n }}\n >\n <div className=\"bg-background-surface-100 border border-border-default rounded-md shadow-lg px-2 py-1.5\">\n <div className=\"text-xs text-foreground-lighter\">\n {formatDate(points[hoveredIndex].timestamp)}\n </div>\n <div className=\"text-xs font-medium tabular-nums mt-0.5\">\n {points[hoveredIndex].value.toLocaleString(usePersianCalendar ? 'fa-IR' : 'en-US')}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nMetricCardSparkline.displayName = \"MetricCardSparkline\"\n\nexport {\n MetricCard,\n MetricCardHeader,\n MetricCardLabel,\n MetricCardContent,\n MetricCardValue,\n MetricCardDifferential,\n MetricCardSparkline,\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n\n","import * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NativeSelect({ className, ...props }: React.ComponentProps<\"select\">) {\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-50\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n className={cn(\n // Base styles - aligned with Input component\n \"flex h-9 w-full min-w-0 appearance-none rounded-md border border-control bg-foreground/[.026] px-3 py-2 pe-9 text-sm text-foreground\",\n // Placeholder and selection\n \"placeholder:text-foreground-muted selection:bg-primary selection:text-primary-foreground\",\n // Focus state - aligned with Input component\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted\",\n // Disabled state\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-foreground-muted\",\n // Error state - aligned with Input component\n \"aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive\",\n // Transitions\n \"transition-[color,box-shadow]\",\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"pointer-events-none absolute top-1/2 end-3 size-4 -translate-y-1/2 text-foreground-muted select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n\n","import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn(\n \"group flex flex-1 list-none items-center justify-center gap-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn(\"relative\", className)}\n {...props}\n />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 start-0 w-full p-2 pe-2.5 md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full start-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n className\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\ntype Direction = \"ltr\" | \"rtl\"\n\nconst PaginationDirectionContext =\n React.createContext<Direction>(\"rtl\")\n\nfunction usePaginationDirection() {\n return React.useContext(PaginationDirectionContext)\n}\n\nfunction Pagination({\n className,\n dir,\n children,\n ...props\n}: React.ComponentProps<\"nav\">) {\n const resolvedDir = (dir as Direction) ?? \"rtl\"\n\n return (\n <PaginationDirectionContext.Provider value={resolvedDir}>\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n dir={resolvedDir}\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n >\n {children}\n </nav>\n </PaginationDirectionContext.Provider>\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n const dir = usePaginationDirection()\n\n return (\n <ul\n data-slot=\"pagination-content\"\n dir={dir}\n className={cn(\n \"flex flex-row items-center gap-1 list-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n dir,\n ...props\n}: PaginationLinkProps) {\n const contextDir = usePaginationDirection()\n const linkDir = dir ?? (contextDir === \"rtl\" ? \"rtl\" : \"ltr\")\n\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n dir={linkDir}\n className={cn(\n buttonVariants({\n variant: \"outline\",\n size,\n }),\n // Remove underline from links\n \"no-underline\",\n // Active state styling with green color\n isActive && [\n \"border-brand-500 bg-brand-100 text-brand-600\",\n \"dark:border-brand-600 dark:bg-brand-950 dark:text-brand-400\",\n \"pointer-events-none\",\n ],\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === \"rtl\"\n const label = isRTL ? \"قبلی\" : \"Previous\"\n // In RTL, previous uses ChevronRight (→). In LTR, previous uses ChevronLeft (←)\n const Icon = isRTL ? ChevronRightIcon : ChevronLeftIcon\n\n return (\n <PaginationLink\n aria-label={isRTL ? \"رفتن به صفحه قبلی\" : \"Go to previous page\"}\n size=\"default\"\n className={cn(\n \"gap-1 ps-2.5 pe-2.5 no-underline flex items-center\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">\n {label}\n </span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === \"rtl\"\n const label = isRTL ? \"بعدی\" : \"Next\"\n // In RTL, next uses ChevronLeft (←). In LTR, next uses ChevronRight (→)\n const Icon = isRTL ? ChevronLeftIcon : ChevronRightIcon\n\n return (\n <PaginationLink\n aria-label={isRTL ? \"رفتن به صفحه بعدی\" : \"Go to next page\"}\n size=\"default\"\n className={cn(\n \"gap-1 ps-2.5 pe-2.5 no-underline flex items-center\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n {isRTL ? (\n <>\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">\n {label}\n </span>\n </>\n ) : (\n <>\n <span className=\"hidden sm:inline no-underline\">{label}</span>\n <Icon className=\"size-4\" />\n </>\n )}\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n\n","import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"./pagination\"\n\nexport interface PaginationControlledProps {\n /**\n * شماره صفحه فعلی (شروع از 1)\n */\n currentPage: number\n /**\n * تعداد کل صفحات\n */\n totalPages: number\n /**\n * تابع callback برای تغییر صفحه\n */\n onPageChange: (page: number) => void\n /**\n * تعداد صفحات نمایش داده شده در هر طرف صفحه فعلی\n * @default 1\n */\n siblingCount?: number\n /**\n * نمایش دکمه‌های اول و آخر\n * @default false\n */\n showFirstLast?: boolean\n /**\n * نمایش دکمه‌های قبلی و بعدی\n * @default true\n */\n showPrevNext?: boolean\n /**\n * نمایش ellipsis برای صفحات مخفی\n * @default true\n */\n showEllipsis?: boolean\n /**\n * کلاس‌های اضافی\n */\n className?: string\n /**\n * جهت متن (rtl/ltr)\n */\n dir?: \"rtl\" | \"ltr\"\n}\n\n/**\n * کامپوننت صفحه‌بندی با props استاندارد\n * \n * @example\n * ```tsx\n * <PaginationControlled\n * currentPage={2}\n * totalPages={10}\n * onPageChange={(page) => console.log(page)}\n * />\n * ```\n */\nexport function PaginationControlled({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n showEllipsis = true,\n className,\n dir = \"rtl\",\n}: PaginationControlledProps) {\n const handlePageChange = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const generatePageNumbers = () => {\n const pages: (number | \"ellipsis\")[] = []\n const totalNumbers = siblingCount * 2 + 5 // siblingCount on each side + current + first + last + 2 ellipsis\n const totalBlocks = totalNumbers + 2 // +2 for first and last\n\n if (totalPages <= totalBlocks) {\n // Show all pages if total pages is less than or equal to total blocks\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1\n\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n const leftRange: number[] = []\n for (let i = 1; i <= leftItemCount; i++) {\n leftRange.push(i)\n }\n pages.push(...leftRange)\n if (showEllipsis) pages.push(\"ellipsis\")\n pages.push(totalPages)\n } else if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push(\"ellipsis\")\n const rightItemCount = 3 + 2 * siblingCount\n const rightRange: number[] = []\n for (let i = totalPages - rightItemCount + 1; i <= totalPages; i++) {\n rightRange.push(i)\n }\n pages.push(...rightRange)\n } else if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push(\"ellipsis\")\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i)\n }\n if (showEllipsis) pages.push(\"ellipsis\")\n pages.push(totalPages)\n }\n }\n\n return pages\n }\n\n const pageNumbers = generatePageNumbers()\n\n // Don't show first/last if they're already in pageNumbers\n const showFirstButton = showFirstLast && !pageNumbers.includes(1) && currentPage > 1\n const showLastButton = showFirstLast && !pageNumbers.includes(totalPages) && currentPage < totalPages\n\n return (\n <Pagination className={className} dir={dir}>\n <PaginationContent>\n {showFirstButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(1)\n }}\n >\n {(1).toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage - 1)\n }}\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"\"}\n />\n </PaginationItem>\n )}\n\n {pageNumbers.map((page, index) => {\n if (page === \"ellipsis\") {\n return (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis />\n </PaginationItem>\n )\n }\n\n return (\n <PaginationItem key={page}>\n <PaginationLink\n href=\"#\"\n isActive={page === currentPage}\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(page)\n }}\n >\n {page.toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )\n })}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage + 1)\n }}\n className={currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"\"}\n />\n </PaginationItem>\n )}\n\n {showLastButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(totalPages)\n }}\n >\n {totalPages.toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )}\n </PaginationContent>\n </Pagination>\n )\n}\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\n\nexport interface ProfileCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نام کامل کاربر\n */\n name: string;\n /**\n * نام کاربری (username)\n */\n username: string;\n /**\n * آدرس تصویر پروفایل\n */\n avatarSrc?: string;\n /**\n * متن جایگزین برای تصویر\n */\n avatarAlt?: string;\n /**\n * حروف اولیه برای fallback (اختیاری)\n */\n initials?: string;\n /**\n * تعداد فالوورها\n */\n followers?: number;\n /**\n * آیکون فالوور\n */\n followersIcon?: React.ReactNode;\n /**\n * تابع کلیک روی کارت\n */\n onCardClick?: () => void;\n /**\n * استایل حاشیه آواتار\n */\n avatarBorderVariant?: \"gold\" | \"primary\" | \"none\";\n /**\n * اندازه کامپوننت\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * رنگ پس‌زمینه\n */\n variant?: \"default\" | \"dark\" | \"transparent\";\n}\n\n// تابع فرمت کردن عدد به فرمت کوتاه\nconst formatFollowers = (count: number): string => {\n if (count >= 1000000) {\n return `${(count / 1000000).toFixed(1).replace(/\\.0$/, '')}M`;\n }\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1).replace(/\\.0$/, '')}K`;\n }\n return count.toString();\n};\n\nconst ProfileCard = React.forwardRef<HTMLDivElement, ProfileCardProps>(\n (\n {\n className,\n name,\n username,\n avatarSrc,\n avatarAlt,\n initials,\n followers,\n followersIcon,\n onCardClick,\n avatarBorderVariant = \"gold\",\n size = \"md\",\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n sm: {\n container: \"p-4 gap-1.5\",\n avatar: \"size-16\",\n name: \"text-sm\",\n username: \"text-xs\",\n followers: \"text-xs\",\n iconSize: \"h-3 w-3\",\n },\n md: {\n container: \"p-6 gap-2\",\n avatar: \"size-20\",\n name: \"text-base\",\n username: \"text-sm\",\n followers: \"text-sm\",\n iconSize: \"h-3.5 w-3.5\",\n },\n lg: {\n container: \"p-8 gap-2.5\",\n avatar: \"size-24\",\n name: \"text-lg\",\n username: \"text-base\",\n followers: \"text-base\",\n iconSize: \"h-4 w-4\",\n },\n };\n\n const variantClasses = {\n default: \"bg-surface-100 border border-border\",\n dark: \"bg-surface-200 border border-border\",\n transparent: \"bg-transparent border border-border\",\n };\n\n const currentSize = sizeClasses[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center rounded-lg shadow-sm transition-colors\",\n variantClasses[variant],\n currentSize.container,\n onCardClick && \"cursor-pointer hover:bg-surface-200\",\n className\n )}\n onClick={onCardClick}\n {...props}\n >\n {/* Avatar with gradient border */}\n <div className=\"relative flex-shrink-0\">\n {avatarBorderVariant === \"gold\" ? (\n <div className=\"relative p-0.5 rounded-full bg-gradient-to-br from-brand-400 via-brand to-brand-400\">\n <Avatar className={cn(currentSize.avatar, \"ring-2 ring-background\")}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n </div>\n ) : avatarBorderVariant === \"primary\" ? (\n <Avatar className={cn(currentSize.avatar, \"ring-2 ring-offset-2 ring-offset-background ring-primary\")}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n ) : (\n <Avatar className={currentSize.avatar}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n\n {/* User info - centered */}\n <div className=\"flex flex-col items-center gap-0.5 w-full\">\n <h3 className={cn(\"font-semibold text-foreground text-center\", currentSize.name)}>{name}</h3>\n <p className={cn(\"text-muted-foreground text-center\", currentSize.username)}>{username}</p>\n\n {followers !== undefined && (\n <div className={cn(\"flex items-center gap-1.5 text-muted-foreground mt-0.5\", currentSize.followers)}>\n {followersIcon && (\n <span className={cn(\"flex-shrink-0\", currentSize.iconSize)}>\n {followersIcon}\n </span>\n )}\n <span className=\"font-medium\">{formatFollowers(followers)}</span>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nProfileCard.displayName = \"ProfileCard\";\n\nexport { ProfileCard };\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\nimport { Button } from \"./button\";\n\nexport interface ProfileInfoProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نام کامل کاربر\n */\n name: string;\n /**\n * نام کاربری (username)\n */\n username: string;\n /**\n * آدرس تصویر پروفایل\n */\n avatarSrc?: string;\n /**\n * متن جایگزین برای تصویر\n */\n avatarAlt?: string;\n /**\n * حروف اولیه برای fallback (اختیاری)\n */\n initials?: string;\n /**\n * متن نمایشی برای اطلاعات اضافی (مثل زمان)\n */\n infoText?: string;\n /**\n * آیکون برای نمایش در کنار infoText\n */\n infoIcon?: React.ReactNode;\n /**\n * آیکون دکمه اکشن\n */\n actionIcon?: React.ReactNode;\n /**\n * تابع کلیک دکمه اکشن\n */\n onActionClick?: () => void;\n /**\n * تابع کلیک روی کارت پروفایل\n */\n onProfileClick?: () => void;\n /**\n * استایل حاشیه آواتار\n */\n avatarBorderVariant?: \"gold\" | \"primary\" | \"none\";\n /**\n * اندازه کامپوننت\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * رنگ پس‌زمینه\n */\n variant?: \"default\" | \"dark\" | \"transparent\";\n}\n\nconst ProfileInfo = React.forwardRef<HTMLDivElement, ProfileInfoProps>(\n (\n {\n className,\n name,\n username,\n avatarSrc,\n avatarAlt,\n initials,\n infoText,\n infoIcon,\n actionIcon,\n onActionClick,\n onProfileClick,\n avatarBorderVariant = \"gold\",\n size = \"md\",\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n sm: {\n container: \"py-3 px-4 gap-3\",\n avatar: \"size-12\",\n name: \"text-sm\",\n username: \"text-xs\",\n info: \"text-xs\",\n button: \"size-7\",\n },\n md: {\n container: \"py-4 px-5 gap-4\",\n avatar: \"size-16\",\n name: \"text-base\",\n username: \"text-sm\",\n info: \"text-sm\",\n button: \"size-8\",\n },\n lg: {\n container: \"py-5 px-6 gap-5\",\n avatar: \"size-20\",\n name: \"text-lg\",\n username: \"text-base\",\n info: \"text-base\",\n button: \"size-9\",\n },\n };\n\n const variantClasses = {\n default: \"bg-surface-100 border border-border\",\n dark: \"bg-surface-200 border border-border\",\n transparent: \"bg-transparent\",\n };\n\n const borderClasses = {\n gold: \"ring-2 ring-offset-2 ring-offset-background [--tw-ring-color:conic-gradient(from_180deg,#22c55e,#4ade80,#22c55e)]\",\n primary: \"ring-2 ring-offset-2 ring-offset-background ring-primary\",\n none: \"\",\n };\n\n const currentSize = sizeClasses[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between rounded-lg shadow-sm transition-colors\",\n variantClasses[variant],\n currentSize.container,\n onProfileClick && \"cursor-pointer hover:bg-surface-200\",\n className\n )}\n onClick={onProfileClick}\n {...props}\n >\n <div className=\"flex items-center gap-4\">\n {/* Avatar with gradient border */}\n <div className=\"relative\">\n {avatarBorderVariant === \"gold\" ? (\n <div className=\"relative p-0.5 rounded-full bg-gradient-to-br from-brand-400 via-brand to-brand-400\">\n <Avatar className={cn(currentSize.avatar, \"ring-2 ring-background\")}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n </div>\n ) : (\n <Avatar className={cn(currentSize.avatar, borderClasses[avatarBorderVariant])}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n\n {/* User info */}\n <div className=\"flex flex-col gap-1\">\n <h3 className={cn(\"font-semibold text-foreground\", currentSize.name)}>{name}</h3>\n <p className={cn(\"text-muted-foreground\", currentSize.username)}>{username}</p>\n {infoText && (\n <div className={cn(\"flex items-center gap-1.5 text-muted-foreground\", currentSize.info)}>\n {infoIcon && <span className=\"flex-shrink-0\">{infoIcon}</span>}\n <span className=\"font-medium\">{infoText}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Action button */}\n {(actionIcon || onActionClick) && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(currentSize.button, \"flex-shrink-0\")}\n onClick={(e) => {\n e.stopPropagation();\n onActionClick?.();\n }}\n aria-label=\"عملیات\"\n >\n {actionIcon || (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n )}\n </Button>\n )}\n </div>\n );\n }\n);\n\nProfileInfo.displayName = \"ProfileInfo\";\n\nexport { ProfileInfo };\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { TrendingUp, Users, UserCheck, Award, Crown } from \"lucide-react\";\nimport { Badge } from \"./badge\";\n\nexport interface EngagementRateProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)\n * Current engagement rate (as decimal, e.g., 0.05710 for 5.710%)\n */\n currentRate: number;\n\n /**\n * تعداد فالوورها\n * Number of followers\n */\n followers: number;\n\n /**\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * Display in Persian/Arabic or English\n * @default \"fa\"\n */\n locale?: \"fa\" | \"ar\" | \"en\";\n\n /**\n * نمایش کارت اطلاعات دسته‌بندی\n * Show category information card\n * @default true\n */\n showCategoryCard?: boolean;\n}\n\n// تبدیل اعداد به فارسی یا عربی\nconst convertToLocalNumbers = (text: string | number, locale: \"fa\" | \"ar\" | \"en\") => {\n if (locale === \"fa\" || locale === \"ar\") {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"];\n return String(text).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n }\n return String(text);\n};\n\n// گروه‌های فالوور و بازه‌های نرخ تعامل\nconst ranges = {\n nano: {\n followers: [1000, 10000],\n excellent: 6,\n veryGood: [5, 6],\n good: [4, 5],\n average: [3, 4],\n couldBeImproved: [1, 3],\n low: 1,\n },\n micro: {\n followers: [10000, 100000],\n excellent: 4,\n veryGood: [3, 4],\n good: [2, 3],\n average: [1, 2],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n mid: {\n followers: [100000, 500000],\n excellent: 3,\n veryGood: [2.5, 3],\n good: [1.5, 2.5],\n average: [1, 1.5],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n macro: {\n followers: [500000, 1000000],\n excellent: 2,\n veryGood: [1.5, 2],\n good: [1, 1.5],\n average: [0.5, 1],\n couldBeImproved: [0.2, 0.5],\n low: 0.2,\n },\n mega: {\n followers: [1000000, Infinity],\n excellent: 1,\n veryGood: [0.8, 1],\n good: [0.5, 0.8],\n average: [0.3, 0.5],\n couldBeImproved: [0.1, 0.3],\n low: 0.1,\n },\n};\n\n// آیکون بر اساس گروه\nconst getGroupIcon = (group: string) => {\n const iconClass = \"w-12 h-12 text-primary\";\n switch (group) {\n case \"nano\":\n return <Users className={iconClass} />;\n case \"micro\":\n return <UserCheck className={iconClass} />;\n case \"mid\":\n return <TrendingUp className={iconClass} />;\n case \"macro\":\n return <Award className={iconClass} />;\n case \"mega\":\n return <Crown className={iconClass} />;\n default:\n return <Users className={iconClass} />;\n }\n};\n\n// ترجمه‌ها\nconst translations = {\n fa: {\n excellent: \"عالی\",\n veryGood: \"خیلی خوب\",\n good: \"خوب\",\n average: \"متوسط\",\n couldBeImproved: \"قابل بهبود\",\n low: \"ضعیف\",\n yourCategory: \"دسته شما:\",\n influencer: \"اینفلوئنسر\",\n followers: \"فالوور\",\n over: \"بیش از\",\n to: \"تا\",\n and: \"و بالاتر\",\n lessThan: \"کمتر از\",\n you: \"شما\",\n criteria: \"معیارهای دسته\",\n nano: \"نانو\",\n micro: \"میکرو\",\n mid: \"متوسط\",\n macro: \"ماکرو\",\n mega: \"مگا\",\n },\n ar: {\n excellent: \"ممتاز\",\n veryGood: \"جيد جداً\",\n good: \"جيد\",\n average: \"متوسط\",\n couldBeImproved: \"قابل للتحسين\",\n low: \"ضعيف\",\n yourCategory: \"فئتك:\",\n influencer: \"مؤثر\",\n followers: \"متابع\",\n over: \"أكثر من\",\n to: \"إلى\",\n and: \"وأعلى\",\n lessThan: \"أقل من\",\n you: \"أنت\",\n criteria: \"معايير فئة المؤثر\",\n nano: \"نانو\",\n micro: \"ميكرو\",\n mid: \"متوسط\",\n macro: \"ماكرو\",\n mega: \"ميجا\",\n },\n en: {\n excellent: \"Excellent\",\n veryGood: \"Very Good\",\n good: \"Good\",\n average: \"Average\",\n couldBeImproved: \"Could Be Improved\",\n low: \"Low\",\n yourCategory: \"Your Category:\",\n influencer: \"Influencer\",\n followers: \"followers\",\n over: \"Over\",\n to: \"to\",\n and: \"and above\",\n lessThan: \"Less than\",\n you: \"You\",\n criteria: \"Category Criteria\",\n nano: \"Nano\",\n micro: \"Micro\",\n mid: \"Mid\",\n macro: \"Macro\",\n mega: \"Mega\",\n },\n};\n\nconst EngagementRate = React.forwardRef<HTMLDivElement, EngagementRateProps>(\n ({ className, currentRate, followers, locale = \"fa\", showCategoryCard = true, ...props }, ref) => {\n const isRTL = locale === \"fa\" || locale === \"ar\";\n const t = translations[locale];\n\n // تابع برای گرفتن بازه‌های نرخ تعامل\n const getEngagementRanges = () => {\n let group = \"\";\n for (const [key, value] of Object.entries(ranges)) {\n if (followers >= value.followers[0] && followers < value.followers[1]) {\n group = key;\n break;\n }\n }\n\n if (!group) {\n group = followers < 1000 ? \"nano\" : \"mega\";\n }\n\n const r = ranges[group as keyof typeof ranges];\n\n return {\n group: t[group as keyof typeof translations.fa] as string,\n groupKey: group,\n ranges: [\n {\n label: t.excellent,\n min: r.excellent,\n max: Infinity,\n display: `>${r.excellent}%`,\n color: \"#166534\", // green-800\n hoverColor: \"#14532d\", // green-900\n },\n {\n label: t.veryGood,\n min: r.veryGood[0],\n max: r.veryGood[1],\n display: `${r.veryGood[0]}% - ${r.veryGood[1]}%`,\n color: \"#16a34a\", // green-600\n hoverColor: \"#15803d\", // green-700\n },\n {\n label: t.good,\n min: r.good[0],\n max: r.good[1],\n display: `${r.good[0]}% - ${r.good[1]}%`,\n color: \"#84cc16\", // lime-500\n hoverColor: \"#65a30d\", // lime-600\n },\n {\n label: t.average,\n min: r.average[0],\n max: r.average[1],\n display: `${r.average[0]}% - ${r.average[1]}%`,\n color: \"#22c55e\", // brand green (green-500)\n hoverColor: \"#16a34a\", // brand green hover (green-600)\n },\n {\n label: t.couldBeImproved,\n min: r.couldBeImproved[0],\n max: r.couldBeImproved[1],\n display: `${r.couldBeImproved[0]}% - ${r.couldBeImproved[1]}%`,\n color: \"#f97316\", // orange-500\n hoverColor: \"#ea580c\", // orange-600\n },\n {\n label: t.low,\n min: 0,\n max: r.low,\n display: `<${r.low}%`,\n color: \"#ef4444\", // red-500\n hoverColor: \"#dc2626\", // red-600\n },\n ],\n };\n };\n\n const engagementData = getEngagementRanges();\n const engagementRanges = engagementData.ranges;\n\n // Find which range the current rate falls into\n const getCurrentRangeIndex = () => {\n const currentRatePercent = currentRate * 100;\n return engagementRanges.findIndex(\n (range) =>\n currentRatePercent >= range.min &&\n (range.max === Infinity ? true : currentRatePercent <= range.max)\n );\n };\n\n const currentRangeIndex = getCurrentRangeIndex();\n\n // Calculate position within the current range for triangle placement\n const getTrianglePosition = () => {\n if (currentRangeIndex === -1) return 0;\n\n const currentRange = engagementRanges[currentRangeIndex];\n const rangeWidth = 100 / engagementRanges.length;\n const currentRatePercent = currentRate * 100;\n\n const maxValue =\n currentRange.max === Infinity\n ? Math.max(currentRatePercent, currentRange.min + 2)\n : currentRange.max;\n\n const positionInRange = Math.min(\n Math.max((currentRatePercent - currentRange.min) / (maxValue - currentRange.min), 0),\n 1\n );\n\n return currentRangeIndex * rangeWidth + positionInRange * rangeWidth;\n };\n\n const trianglePosition = getTrianglePosition();\n const adjustedTrianglePosition = isRTL ? 100 - trianglePosition : trianglePosition;\n\n // Helper for follower ranges\n const formatNumber = (num: number) => {\n return convertToLocalNumbers(num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"), locale);\n };\n\n const getFollowerRange = () => {\n if (followers >= 1000000) {\n return `${t.over} ${formatNumber(1000000)} ${t.followers}`;\n } else if (followers >= 500000) {\n return `${formatNumber(500000)} ${t.to} ${formatNumber(1000000)} ${t.followers}`;\n } else if (followers >= 100000) {\n return `${formatNumber(100000)} ${t.to} ${formatNumber(500000)} ${t.followers}`;\n } else if (followers >= 10000) {\n return `${formatNumber(10000)} ${t.to} ${formatNumber(100000)} ${t.followers}`;\n } else {\n return `${formatNumber(1000)} ${t.to} ${formatNumber(10000)} ${t.followers}`;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"space-y-4\", className)} dir={isRTL ? \"rtl\" : \"ltr\"} {...props}>\n {/* Main Engagement Rate Display */}\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold text-primary mb-2\">\n {convertToLocalNumbers((currentRate * 100).toFixed(3), locale)}%\n </div>\n {currentRangeIndex !== -1 && (\n <Badge\n className=\"text-sm font-medium text-white border-0\"\n style={{ backgroundColor: engagementRanges[currentRangeIndex].hoverColor }}\n >\n {engagementRanges[currentRangeIndex].label}\n </Badge>\n )}\n </div>\n\n {/* Engagement Rate Chart */}\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{isRTL ? t.excellent : t.low}</span>\n <span>{isRTL ? t.low : t.excellent}</span>\n </div>\n\n {/* Segmented Progress Bar */}\n <div className=\"relative\">\n <div className=\"flex gap-1 h-6 rounded overflow-hidden\">\n {engagementRanges.map((range, index) => (\n <div\n key={index}\n className=\"flex-1 transition-all duration-300 cursor-pointer group relative\"\n style={{\n backgroundColor: index === currentRangeIndex ? range.color : \"#d1d5db\",\n }}\n title={`${range.label}: ${convertToLocalNumbers(range.display, locale)}`}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = range.hoverColor;\n }}\n onMouseLeave={(e) => {\n if (index === currentRangeIndex) {\n e.currentTarget.style.backgroundColor = range.color;\n } else {\n e.currentTarget.style.backgroundColor = \"#d1d5db\";\n }\n }}\n />\n ))}\n </div>\n\n {/* Triangle Indicator */}\n <div\n className=\"absolute -top-1 transform -translate-x-1/2 transition-all duration-500 z-10\"\n style={{ left: `${adjustedTrianglePosition}%` }}\n >\n <svg\n width=\"20\"\n height=\"14\"\n viewBox=\"0 0 20 14\"\n className=\"fill-white dark:fill-white drop-shadow-md transition-transform duration-300\"\n >\n <path d=\"M10 14L0 0H20L10 14Z\" />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Engagement Rate Categories Information Card */}\n {showCategoryCard && (\n <div className=\"mt-6 bg-surface-100 rounded-lg border border-border p-5\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Left Column - Category Info */}\n <div className=\"flex items-center justify-center order-1 lg:order-1\">\n <div className=\"w-full h-full flex flex-col justify-center items-center text-center space-y-4\">\n <div className=\"mb-2\">{getGroupIcon(engagementData.groupKey)}</div>\n\n <div className=\"space-y-2\">\n <p className=\"text-lg font-semibold\">{t.yourCategory}</p>\n <p className=\"text-3xl font-black text-primary\">\n {locale === \"en\"\n ? `${engagementData.group} ${t.influencer}`\n : `${engagementData.group} ${t.influencer}`}\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <p className=\"text-base font-medium text-muted-foreground\">{getFollowerRange()}</p>\n <p className=\"text-xl font-bold\">\n ({formatNumber(followers)} {t.followers})\n </p>\n </div>\n </div>\n </div>\n\n {/* Right Column - Categories */}\n <div className=\"space-y-3 order-2 lg:order-2\">\n <h3 className=\"text-base font-semibold mb-3\">\n {locale === \"en\"\n ? `${engagementData.group} ${t.influencer} ${t.criteria}`\n : `${t.criteria} ${engagementData.group} ${t.influencer}`}\n </h3>\n\n <div className=\"space-y-2.5\">\n {engagementRanges.map((range, index) => {\n const isCurrentRange = index === currentRangeIndex;\n\n const hexToRgb = (hex: string) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n };\n\n const rgb = hexToRgb(range.color);\n const bgColor =\n isCurrentRange && rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 0.1)` : \"transparent\";\n\n const displayText =\n index === 0\n ? convertToLocalNumbers(`${range.min}% ${t.and}`, locale)\n : index === engagementRanges.length - 1\n ? convertToLocalNumbers(`${t.lessThan} ${range.max}%`, locale)\n : convertToLocalNumbers(`${range.min}% ${t.to} ${range.max}%`, locale);\n\n return (\n <div\n key={index}\n className={cn(\n \"flex items-center justify-between px-3 py-2.5 rounded-md border transition-all\",\n !isCurrentRange && \"border-border\"\n )}\n style={{\n backgroundColor: bgColor,\n borderColor: isCurrentRange ? range.color : undefined,\n }}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2.5 h-2.5 rounded-full\" style={{ backgroundColor: range.color }} />\n <span\n className={cn(\n \"text-sm\",\n isCurrentRange ? \"font-semibold\" : \"font-medium text-muted-foreground\"\n )}\n >\n {range.label}\n {isCurrentRange && (\n <span className={cn(\"text-xs font-normal text-muted-foreground\", isRTL ? \"mr-1\" : \"ml-1\")}>\n ({t.you})\n </span>\n )}\n </span>\n </div>\n <span\n className={cn(\"text-sm font-semibold\", !isCurrentRange && \"text-muted-foreground\")}\n style={isCurrentRange ? { color: range.color } : {}}\n >\n {displayText}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nEngagementRate.displayName = \"EngagementRate\";\n\nexport { EngagementRate };\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Badge } from \"./badge\";\n\nexport interface EngagementRateBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)\n * Current engagement rate (as decimal, e.g., 0.05710 for 5.710%)\n */\n currentRate: number;\n\n /**\n * تعداد فالوورها\n * Number of followers\n */\n followers: number;\n\n /**\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * Display in Persian/Arabic or English\n * @default \"fa\"\n */\n locale?: \"fa\" | \"ar\" | \"en\";\n\n /**\n * نمایش متن راهنمای \"عالی\" و \"پایین\"\n * Show helper text \"Excellent\" and \"Low\"\n * @default true\n */\n showHelperText?: boolean;\n}\n\n// تبدیل اعداد به فارسی یا عربی\nconst convertToLocalNumbers = (text: string | number, locale: \"fa\" | \"ar\" | \"en\") => {\n if (locale === \"fa\" || locale === \"ar\") {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"];\n return String(text).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n }\n return String(text);\n};\n\n// گروه‌های فالوور و بازه‌های نرخ تعامل\nconst ranges = {\n nano: {\n followers: [1000, 10000],\n excellent: 6,\n veryGood: [5, 6],\n good: [4, 5],\n average: [3, 4],\n couldBeImproved: [1, 3],\n low: 1,\n },\n micro: {\n followers: [10000, 100000],\n excellent: 4,\n veryGood: [3, 4],\n good: [2, 3],\n average: [1, 2],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n mid: {\n followers: [100000, 500000],\n excellent: 3,\n veryGood: [2.5, 3],\n good: [1.5, 2.5],\n average: [1, 1.5],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n macro: {\n followers: [500000, 1000000],\n excellent: 2,\n veryGood: [1.5, 2],\n good: [1, 1.5],\n average: [0.5, 1],\n couldBeImproved: [0.2, 0.5],\n low: 0.2,\n },\n mega: {\n followers: [1000000, Infinity],\n excellent: 1,\n veryGood: [0.8, 1],\n good: [0.5, 0.8],\n average: [0.3, 0.5],\n couldBeImproved: [0.1, 0.3],\n low: 0.1,\n },\n};\n\n// ترجمه‌ها\nconst translations = {\n fa: {\n excellent: \"عالی\",\n veryGood: \"خیلی خوب\",\n good: \"خوب\",\n average: \"متوسط\",\n couldBeImproved: \"قابل بهبود\",\n low: \"ضعیف\",\n },\n ar: {\n excellent: \"ممتاز\",\n veryGood: \"جيد جداً\",\n good: \"جيد\",\n average: \"متوسط\",\n couldBeImproved: \"قابل للتحسين\",\n low: \"ضعيف\",\n },\n en: {\n excellent: \"Excellent\",\n veryGood: \"Very Good\",\n good: \"Good\",\n average: \"Average\",\n couldBeImproved: \"Could Be Improved\",\n low: \"Low\",\n },\n};\n\nconst EngagementRateBar = React.forwardRef<HTMLDivElement, EngagementRateBarProps>(\n (\n { className, currentRate, followers, locale = \"fa\", showHelperText = true, ...props },\n ref\n ) => {\n const isRTL = locale === \"fa\" || locale === \"ar\";\n const t = translations[locale];\n\n // تابع برای گرفتن بازه‌های نرخ تعامل\n const getEngagementRanges = () => {\n let group = \"\";\n for (const [key, value] of Object.entries(ranges)) {\n if (followers >= value.followers[0] && followers < value.followers[1]) {\n group = key;\n break;\n }\n }\n\n if (!group) {\n group = followers < 1000 ? \"nano\" : \"mega\";\n }\n\n const r = ranges[group as keyof typeof ranges];\n\n return [\n {\n label: t.excellent,\n min: r.excellent,\n max: Infinity,\n color: \"#166534\", // green-800\n hoverColor: \"#14532d\", // green-900\n },\n {\n label: t.veryGood,\n min: r.veryGood[0],\n max: r.veryGood[1],\n color: \"#16a34a\", // green-600\n hoverColor: \"#15803d\", // green-700\n },\n {\n label: t.good,\n min: r.good[0],\n max: r.good[1],\n color: \"#84cc16\", // lime-500\n hoverColor: \"#65a30d\", // lime-600\n },\n {\n label: t.average,\n min: r.average[0],\n max: r.average[1],\n color: \"#22c55e\", // brand green (green-500)\n hoverColor: \"#16a34a\", // brand green hover (green-600)\n },\n {\n label: t.couldBeImproved,\n min: r.couldBeImproved[0],\n max: r.couldBeImproved[1],\n color: \"#f97316\", // orange-500\n hoverColor: \"#ea580c\", // orange-600\n },\n {\n label: t.low,\n min: 0,\n max: r.low,\n color: \"#ef4444\", // red-500\n hoverColor: \"#dc2626\", // red-600\n },\n ];\n };\n\n const engagementRanges = getEngagementRanges();\n\n // Find which range the current rate falls into\n const getCurrentRangeIndex = () => {\n const currentRatePercent = currentRate * 100;\n return engagementRanges.findIndex(\n (range) =>\n currentRatePercent >= range.min &&\n (range.max === Infinity ? true : currentRatePercent <= range.max)\n );\n };\n\n const currentRangeIndex = getCurrentRangeIndex();\n\n // Calculate position within the current range for triangle placement\n const getTrianglePosition = () => {\n if (currentRangeIndex === -1) return 0;\n\n const currentRange = engagementRanges[currentRangeIndex];\n const rangeWidth = 100 / engagementRanges.length;\n const currentRatePercent = currentRate * 100;\n\n const maxValue =\n currentRange.max === Infinity\n ? Math.max(currentRatePercent, currentRange.min + 2)\n : currentRange.max;\n\n const positionInRange = Math.min(\n Math.max((currentRatePercent - currentRange.min) / (maxValue - currentRange.min), 0),\n 1\n );\n\n return currentRangeIndex * rangeWidth + positionInRange * rangeWidth;\n };\n\n const trianglePosition = getTrianglePosition();\n const adjustedTrianglePosition = isRTL ? 100 - trianglePosition : trianglePosition;\n\n return (\n <div\n ref={ref}\n className={cn(\"space-y-4\", className)}\n dir={isRTL ? \"rtl\" : \"ltr\"}\n {...props}\n >\n {/* Main Engagement Rate Display */}\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold text-primary mb-2\">\n {convertToLocalNumbers((currentRate * 100).toFixed(3), locale)}%\n </div>\n {currentRangeIndex !== -1 && (\n <Badge\n className=\"text-sm font-medium text-white border-0\"\n style={{ backgroundColor: engagementRanges[currentRangeIndex].hoverColor }}\n >\n {engagementRanges[currentRangeIndex].label}\n </Badge>\n )}\n </div>\n\n {/* Engagement Rate Chart */}\n <div className=\"space-y-3\">\n {showHelperText && (\n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{isRTL ? t.excellent : t.low}</span>\n <span>{isRTL ? t.low : t.excellent}</span>\n </div>\n )}\n\n {/* Segmented Progress Bar */}\n <div className=\"relative\">\n <div className=\"flex gap-1 h-6 rounded overflow-hidden\">\n {engagementRanges.map((range, index) => (\n <div\n key={index}\n className=\"flex-1 transition-all duration-300 cursor-pointer group relative\"\n style={{\n backgroundColor: index === currentRangeIndex ? range.color : \"#d1d5db\",\n }}\n title={`${range.label}`}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = range.hoverColor;\n }}\n onMouseLeave={(e) => {\n if (index === currentRangeIndex) {\n e.currentTarget.style.backgroundColor = range.color;\n } else {\n e.currentTarget.style.backgroundColor = \"#d1d5db\";\n }\n }}\n />\n ))}\n </div>\n\n {/* Triangle Indicator */}\n <div\n className=\"absolute -top-2 transform -translate-x-1/2 transition-all duration-500 z-10\"\n style={{ left: `${adjustedTrianglePosition}%` }}\n >\n <div className=\"relative\">\n {/* Border Triangle */}\n <div className=\"w-0 h-0 border-l-[20px] rotate-180 border-r-[20px] border-b-[24px] border-l-transparent border-r-transparent border-b-background transition-transform duration-300\" />\n {/* Fill Triangle */}\n <div className=\"w-0 h-0 border-l-[12px] rotate-180 border-r-[12px] border-b-[16px] border-l-transparent border-r-transparent border-b-foreground transition-transform duration-300 absolute top-[4px] left-1/2 transform -translate-x-1/2\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n);\n\nEngagementRateBar.displayName = \"EngagementRateBar\";\n\nexport { EngagementRateBar };\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst progressVariants = cva(\n \"relative w-full overflow-hidden rounded-full bg-surface-300\",\n {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nconst progressIndicatorVariants = cva(\n \"h-full w-full flex-1 transition-all origin-left rtl:origin-right\",\n {\n variants: {\n variant: {\n primary: \"bg-brand-500\",\n secondary: \"bg-foreground\",\n success: \"bg-green-500\",\n warning: \"bg-warning-500\",\n destructive: \"bg-destructive-500\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n }\n)\n\nexport interface ProgressProps\n extends React.ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants>,\n VariantProps<typeof progressIndicatorVariants> {\n label?: string\n showValue?: boolean\n}\n\nfunction Progress({\n className,\n value,\n size,\n variant,\n label,\n showValue = false,\n ...props\n}: ProgressProps) {\n const clampedValue = Math.max(0, Math.min(100, value ?? 0))\n const displayValue = `${Math.round(clampedValue)}%`\n\n return (\n <div className=\"w-full space-y-2\">\n {(label || showValue) && (\n <div className=\"flex items-center justify-between text-sm\">\n {label && <span className=\"text-foreground\">{label}</span>}\n {showValue && (\n <span className=\"text-foreground-light font-medium\">\n {displayValue}\n </span>\n )}\n </div>\n )}\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(progressVariants({ size }), className)}\n value={value}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `scaleX(${clampedValue / 100})` }}\n />\n </ProgressPrimitive.Root>\n </div>\n )\n}\n\nexport { Progress }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-control bg-control data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-brand absolute top-1/2 start-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rtl:translate-x-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst RadioCards = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n columns?: number | Record<string, number>\n dir?: \"rtl\" | \"ltr\"\n }\n>(({ className, columns = 1, dir = \"rtl\", children, ...props }, ref) => {\n // Handle responsive columns\n const gridCols = typeof columns === 'number' \n ? `grid-cols-${columns}` \n : Object.entries(columns).map(([key, val]) => \n key === 'initial' ? `grid-cols-${val}` : `${key}:grid-cols-${val}`\n ).join(' ')\n\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n data-slot=\"radio-cards\"\n dir={dir}\n className={cn(\"grid gap-3\", gridCols, className)}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Root>\n )\n})\nRadioCards.displayName = \"RadioCards\"\n\nconst RadioCardItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-card-item\"\n className={cn(\n \"relative flex cursor-pointer rounded-lg border border-control bg-surface-100 px-4 py-3 transition-all\",\n \"hover:border-brand-muted hover:bg-surface-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n \"data-[state=checked]:border-brand data-[state=checked]:bg-brand/5\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Item>\n )\n})\nRadioCardItem.displayName = \"RadioCardItem\"\n\nconst RadioCardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"text-sm font-semibold leading-none\", className)}\n {...props}\n />\n))\nRadioCardTitle.displayName = \"RadioCardTitle\"\n\nconst RadioCardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-foreground-muted\", className)}\n {...props}\n />\n))\nRadioCardDescription.displayName = \"RadioCardDescription\"\n\nexport { RadioCards, RadioCardItem, RadioCardTitle, RadioCardDescription }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:start-1/2 after:w-1 after:-translate-x-1/2 rtl:after:translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:start-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from \"@/lib/constants\"\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectTriggerVariants = cva('', {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n})\n\n// If placeholder is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value> &\n VariantProps<typeof SelectTriggerVariants>\n>(({ placeholder, ...props }, ref) => (\n <SelectPrimitive.Value\n placeholder={typeof placeholder === 'string' ? <span>{placeholder}</span> : placeholder}\n {...props}\n ref={ref}\n />\n))\nSelectValue.displayName = SelectPrimitive.Value.displayName\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> &\n VariantProps<typeof SelectTriggerVariants>\n>(({ className, children, size, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection text-xs ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\n \"data-[state=open]:bg-selection data-[state=open]:border-stronger\",\n \"gap-2\",\n \"[&>span]:truncate text-start\",\n SelectTriggerVariants({ size }),\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 text-foreground-lighter flex-shrink-0\" strokeWidth={1.5} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-foreground-muted\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-foreground-muted\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider font-mono\",\n className\n )}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\n// If children is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"group\",\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute start-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator className=\"h-3.5 w-3.5 bg-foreground rounded-full flex justify-center items-center\">\n <Check className=\"h-2 w-2 text-background-overlay\" strokeWidth={6} />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>\n {typeof children === 'string' ? <span>{children}</span> : children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border-overlay\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute top-4 end-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 end-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pe-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 end-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute end-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px rtl:-translate-x-px flex-col gap-1 border-s px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../lib/utils\"\n\ntype Direction = \"ltr\" | \"rtl\"\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = React.useState<Direction>(\"rtl\")\n\n React.useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === \"undefined\") return \"rtl\"\n const htmlDir = document.documentElement.getAttribute(\"dir\")\n if (htmlDir === \"ltr\" || htmlDir === \"rtl\") {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === \"rtl\" ? \"rtl\" : \"ltr\"\n }\n\n setDirection(getDirection())\n\n // Watch for changes in direction\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"dir\"],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n dir,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n const documentDir = useDocumentDirection()\n const resolvedDir = (dir as Direction) ?? documentDir\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n dir={resolvedDir}\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-background-surface-75 shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n\n","\"use client\"\n\nimport {\n CheckIcon,\n InfoIcon,\n Loader2Icon,\n TriangleAlertIcon,\n XCircleIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport const SONNER_DEFAULT_DURATION = 4000\n\n// Status icons with proper contrast against toast backgrounds\nconst StatusIconSuccess = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-brand-600 dark:bg-brand-500 p-0.5\">\n <CheckIcon className=\"size-3 text-white\" strokeWidth={3} />\n </div>\n)\n\nconst StatusIconInfo = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-foreground-lighter p-0.5\">\n <InfoIcon className=\"size-3 text-background-surface-200\" />\n </div>\n)\n\nconst StatusIconWarning = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-warning-600 dark:bg-warning-500 p-0.5\">\n <TriangleAlertIcon className=\"size-3 text-white\" />\n </div>\n)\n\nconst StatusIconError = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-destructive-600 dark:bg-destructive-500 p-0.5\">\n <XCircleIcon className=\"size-3 text-white\" />\n </div>\n)\n\nconst Toaster = ({\n dir = \"rtl\",\n position = \"bottom-left\",\n closeButton = false,\n toastOptions,\n ...props\n}: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n icons={{\n success: <StatusIconSuccess />,\n info: <StatusIconInfo />,\n warning: <StatusIconWarning />,\n error: <StatusIconError />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group pointer-events-auto\"\n dir={dir}\n position={position}\n closeButton={closeButton}\n style={{ fontFamily: \"inherit\" }}\n toastOptions={{\n unstyled: true,\n classNames: {\n toast: cn(\n \"group toast w-full rounded-md py-3 px-4 flex gap-3 items-start font-normal text-sm relative\",\n \"bg-overlay text-foreground border border-overlay shadow-lg\"\n ),\n icon: \"mt-0.5 shrink-0\",\n title: \"font-normal pe-6\",\n description: cn(\n \"text-xs text-foreground-lighter\",\n \"transition-opacity group-data-[expanded=false]:opacity-0 group-data-[front=true]:!opacity-100\"\n ),\n actionButton: cn(\n \"!inline-flex !items-center !justify-center text-xs font-medium px-3 py-1.5 rounded !ms-auto\",\n \"!bg-brand !text-foreground-contrast hover:!bg-brand-600 transition-colors\"\n ),\n cancelButton: cn(\n \"!inline-flex !items-center !justify-center text-xs font-medium px-3 py-1.5 rounded\",\n \"!border !border-default !bg-transparent !text-foreground hover:!bg-selection transition-colors\"\n ),\n success: \"!bg-brand-200 !border-brand-500 !text-brand-600 dark:!text-brand-400\",\n warning: \"!bg-warning-200 !border-warning-500 !text-warning-600 dark:!text-warning-400\",\n error: \"!bg-destructive-200 !border-destructive-500 !text-destructive-600 dark:!text-destructive-400\",\n info: \"\",\n closeButton: cn(\n \"!absolute !top-1 !end-1 !start-auto !transform-none !p-1\",\n \"!size-6 !rounded-md !text-foreground/50\",\n \"hover:!text-foreground hover:!bg-foreground/10 focus:!outline-none\",\n \"!bg-transparent !border-0 !opacity-100\"\n ),\n content: \"grow min-w-0\",\n },\n duration: SONNER_DEFAULT_DURATION,\n ...toastOptions,\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n\n// Re-export toast from sonner for convenience\nexport { toast } from \"sonner\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst switchRootVariants = cva(\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:hover:bg-brand-600/90 data-[state=unchecked]:bg-control data-[state=unchecked]:hover:bg-border\",\n {\n variants: {\n size: {\n small: 'h-[16px] w-[28px]',\n medium: 'h-[20px] w-[34px]',\n large: 'h-[24px] w-[44px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n }\n)\n\nconst switchThumbVariants = cva(\n \"pointer-events-none block rounded-full bg-foreground-lighter data-[state=checked]:bg-white shadow-lg ring-0 transition-transform\",\n {\n variants: {\n size: {\n small: 'h-[12px] w-[12px]',\n medium: 'h-[16px] w-[16px]',\n large: 'h-[18px] w-[18px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n }\n)\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchRootVariants> {}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(switchRootVariants({ size }), className)}\n {...props}\n ref={ref}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(switchThumbVariants({ size }))}\n />\n </SwitchPrimitive.Root>\n))\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-start align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 transition-[color,box-shadow] whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-control bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\nimport type { VariantProps } from \"class-variance-authority\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n\n","'use client';\n\nimport { ResponsiveLine, type LineSvgProps } from '@nivo/line';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoLineChartProps\n extends Omit<LineSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n background: 'hsl(0 0% 98%)',\n foregroundMuted: 'hsl(0 0% 55%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoLineChart({ className, ...props }: PartoLineChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n // Helper to add opacity to a color string\n const addOpacity = (color: string, opacity: number) => {\n // If color is already in hsl format, add opacity\n if (color.startsWith('hsl(')) {\n return color.replace(')', ` / ${opacity})`);\n }\n // If color is in rgb format, convert to rgba\n if (color.startsWith('rgb(')) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${opacity})`);\n }\n // Fallback: return as is\n return color;\n };\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground-muted', FALLBACKS.foregroundMuted),\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n strokeOpacity: 0.5,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--background', FALLBACKS.background),\n color: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 12,\n borderRadius: '8px',\n border: `1px solid ${addOpacity(getColor('--border', FALLBACKS.border), 0.5)}`,\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n padding: '10px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsiveLine theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","import { useEffect, useMemo, useState } from 'react';\n\n/**\n * Returns a snapshot of the current document root computed styles and\n * re-renders when the theme class or OS color scheme changes.\n */\nexport function useRootStyles() {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return;\n }\n\n const target = document.documentElement;\n const observer = new MutationObserver(() => {\n setVersion((prev) => prev + 1);\n });\n\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const mediaHandler = () => setVersion((prev) => prev + 1);\n media.addEventListener('change', mediaHandler);\n\n return () => {\n observer.disconnect();\n media.removeEventListener('change', mediaHandler);\n };\n }, []);\n\n return useMemo(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return null;\n }\n\n return getComputedStyle(document.documentElement);\n }, [version]);\n}\n\n","const COLOR_VALUE_REGEX = /^(#|rgb|hsl|oklch)/i;\n\nexport function resolveCssColor(\n styles: CSSStyleDeclaration | null,\n variable: string,\n fallback: string,\n) {\n if (!styles) return fallback;\n const raw = styles.getPropertyValue(variable).trim();\n if (!raw) return fallback;\n if (COLOR_VALUE_REGEX.test(raw)) return raw;\n if (raw.includes('%')) return `hsl(${raw})`;\n return raw;\n}\n\n","'use client';\n\nimport { ResponsiveBar, type BarSvgProps } from '@nivo/bar';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoBarChartProps\n extends Omit<BarSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoBarChart({ className, ...props }: PartoBarChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--muted-foreground', FALLBACKS.mutedForeground),\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n strokeOpacity: 0.4,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 12px rgba(0,0,0,0.15)',\n padding: '8px 12px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsiveBar theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","'use client';\n\nimport { ResponsivePie, type PieSvgProps } from '@nivo/pie';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoPieChartProps\n extends Omit<PieSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoPieChart({ className, ...props }: PartoPieChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 12px rgba(0,0,0,0.15)',\n padding: '8px 12px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsivePie theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","'use client';\n\nimport { ResponsiveHeatMap, type HeatMapSvgProps } from '@nivo/heatmap';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\nimport { toPersianDigits, PERSIAN_WEEKDAYS } from '@/lib/jalali-utils';\n\nexport interface PartoHeatMapProps\n extends Omit<HeatMapSvgProps<any, any>, 'theme' | 'width' | 'height'> {\n className?: string;\n locale?: 'fa' | 'en';\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n card: 'hsl(0 0% 9%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nconst ENGLISH_WEEKDAYS = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n];\n\nexport function PartoHeatMap({ \n className, \n locale = 'fa',\n data,\n axisTop,\n axisBottom,\n axisLeft,\n axisRight,\n valueFormat,\n tooltip,\n margin,\n ...props \n}: PartoHeatMapProps) {\n const styles = useRootStyles();\n const isPersian = locale === 'fa';\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n // Helper to convert Persian digits to English\n const toEnglishDigits = (value: string | number): string => {\n const str = String(value);\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n const englishDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n \n let result = str;\n persianDigits.forEach((persian, index) => {\n result = result.replace(new RegExp(persian, 'g'), englishDigits[index]);\n });\n \n return result;\n };\n\n // Helper to convert numbers based on locale\n const formatNumber = (value: number | string): string => {\n if (isPersian) {\n return toPersianDigits(value);\n }\n // Convert any Persian digits to English for English locale\n return toEnglishDigits(value);\n };\n\n // Helper to format weekday names\n const formatWeekday = (day: string): string => {\n if (isPersian) {\n // Try to map English weekdays to Persian\n const dayIndex = ENGLISH_WEEKDAYS.findIndex(\n d => d.toLowerCase() === day.toLowerCase()\n );\n return dayIndex !== -1 ? PERSIAN_WEEKDAYS[dayIndex] : day;\n }\n return day;\n };\n\n // Default margins - always LTR\n const defaultMargin = { top: 60, right: 50, bottom: 60, left: 150 };\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 11,\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 13,\n fontWeight: 600,\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 13,\n fontWeight: 700,\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--card', FALLBACKS.card),\n strokeWidth: 3,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n padding: '8px 12px',\n border: `1px solid ${getColor('--border', FALLBACKS.border)}`,\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 11,\n },\n },\n };\n\n // Default value formatter\n const defaultValueFormat = (value: number) => formatNumber(value);\n\n // Default tooltip\n const defaultTooltip = ({ cell }: any) => (\n <div className=\"bg-popover text-popover-foreground rounded-md shadow-lg px-3 py-2 border border-border min-w-[140px] text-center\">\n <div className=\"font-semibold text-sm mb-1.5 whitespace-nowrap\">\n {formatWeekday(String(cell.serieId))} - {formatNumber(cell.data.x as string)}\n </div>\n <div className=\"text-xs whitespace-nowrap\">\n {isPersian ? 'شدت فعالیت' : 'Activity'}: <span className=\"font-bold text-primary\">{formatNumber(cell.value ?? 0)}</span>\n </div>\n </div>\n );\n\n // Process axis configurations with number formatting\n const processAxisConfig = (axisConfig: any) => {\n if (!axisConfig) return axisConfig;\n \n const processed = { ...axisConfig };\n \n // Wrap format function to apply number formatting based on locale\n if (processed.format) {\n const originalFormat = processed.format;\n processed.format = (value: any) => {\n const formatted = originalFormat(value);\n // Convert based on locale\n return formatNumber(formatted);\n };\n } else {\n // If no format provided, apply locale-based formatting\n processed.format = (value: any) => formatNumber(value);\n }\n \n return processed;\n };\n\n // Process left axis with weekday formatting\n const processedAxisLeft = axisLeft ? {\n ...axisLeft,\n tickPadding: axisLeft.tickPadding !== undefined ? axisLeft.tickPadding : 12,\n legendOffset: axisLeft.legendOffset !== undefined ? axisLeft.legendOffset : -120,\n format: (value: any) => {\n let formatted = value;\n if (axisLeft.format && typeof axisLeft.format === 'function') {\n formatted = axisLeft.format(value);\n }\n return formatWeekday(String(formatted));\n },\n } : null;\n\n return (\n <div \n className={className} \n dir=\"ltr\"\n style={{ position: 'relative', width: '100%', height: '100%' }}\n >\n <ResponsiveHeatMap\n data={data}\n margin={margin || defaultMargin}\n theme={nivoTheme}\n valueFormat={valueFormat || defaultValueFormat}\n tooltip={tooltip || defaultTooltip}\n axisTop={processAxisConfig(axisTop)}\n axisBottom={processAxisConfig(axisBottom)}\n axisLeft={processedAxisLeft}\n axisRight={axisRight}\n colors={{\n type: 'sequential',\n scheme: 'blues',\n }}\n emptyColor={getColor('--muted', 'hsl(0 0% 20%)')}\n borderRadius={2}\n borderWidth={3}\n borderColor={getColor('--card', FALLBACKS.card)}\n enableLabels={false}\n animate={true}\n motionConfig=\"gentle\"\n forceSquare={true}\n {...props}\n />\n </div>\n );\n}\n\n","'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { Wordcloud } from '@visx/wordcloud';\nimport { scaleLog } from '@visx/scale';\nimport { Text } from '@visx/text';\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface WordData {\n text: string;\n value: number;\n}\n\nexport interface PartoWordCloudProps {\n words: WordData[];\n width?: number;\n height?: number;\n className?: string;\n minFontSize?: number;\n maxFontSize?: number;\n padding?: number;\n spiral?: 'archimedean' | 'rectangular';\n rotate?: number;\n random?: () => number;\n fontWeight?: number;\n}\n\nconst FALLBACKS = {\n primary: 'hsl(12 76% 61%)',\n};\n\n// Stable random function for consistent layout\nconst stableRandom = () => 0.5;\n\n// Detect if text contains Persian or Arabic characters\nconst isPersianOrArabic = (text: string): boolean => {\n const persianArabicRegex = /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\n return persianArabicRegex.test(text);\n};\n\n// Format hashtag direction based on language\nconst formatHashtagDirection = (text: string): string => {\n if (!text.includes('#')) return text;\n \n // Remove all hashtags first\n const cleanText = text.replace(/#/g, '');\n \n // Check if the text (without hashtag) is Persian/Arabic\n if (isPersianOrArabic(cleanText)) {\n // For Persian/Arabic: hashtag should appear on the RIGHT side\n // Use RLM (Right-to-Left Mark) to ensure proper direction\n return `\\u200F#${cleanText}`;\n } else {\n // For English: hashtag should appear on the LEFT side\n // Use LRM (Left-to-Right Mark) to ensure hashtag stays on left\n return `\\u200E#${cleanText}`;\n }\n};\n\ninterface TooltipData {\n text: string;\n value: number;\n x: number;\n y: number;\n color: string;\n}\n\nexport function PartoWordCloud({\n words,\n width = 900,\n height = 400,\n className,\n minFontSize = 14,\n maxFontSize = 55,\n padding = 4,\n spiral = 'rectangular',\n rotate = 0,\n random = stableRandom,\n fontWeight = 600,\n}: PartoWordCloudProps) {\n const styles = useRootStyles();\n const [hovered, setHovered] = React.useState<TooltipData | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const primaryColor = getColor('--primary', FALLBACKS.primary);\n\n // Font size setter using logarithmic scale\n // Format words with proper hashtag direction\n const formattedWords = React.useMemo(() => {\n return words.map((word) => ({\n ...word,\n text: formatHashtagDirection(word.text),\n }));\n }, [words]);\n\n const fontSizeSetter = (datum: WordData) => {\n const values = formattedWords.map((w) => w.value);\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n\n const fontScale = scaleLog({\n domain: [minValue, maxValue],\n range: [minFontSize, maxFontSize],\n });\n\n return fontScale(datum.value);\n };\n\n const handleMouseMove = (event: React.MouseEvent, text: string, value: number) => {\n // Use fixed positioning based on viewport coordinates\n const x = event.clientX;\n const y = event.clientY;\n \n setHovered({\n text,\n value,\n x,\n y,\n color: primaryColor,\n });\n };\n\n return (\n <div \n ref={containerRef} \n className={className} \n style={{ position: 'relative', width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n dir=\"rtl\"\n >\n <div style={{ position: 'relative', width, height, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Wordcloud\n words={formattedWords}\n width={width}\n height={height}\n fontSize={fontSizeSetter}\n font={'YekanBakh, system-ui, -apple-system, sans-serif'}\n padding={padding}\n spiral={spiral}\n rotate={rotate}\n random={random}\n >\n {(cloudWords: any[]) =>\n cloudWords.map((w) => {\n // Find the original data to get the value\n const originalData = formattedWords.find((item) => item.text === w.text);\n const value = originalData?.value || 0;\n\n // Ensure w.x, w.y, and w.text are defined\n if (!w.x || !w.y || !w.text) return null;\n\n return (\n <g key={w.text}>\n <Text\n fill={primaryColor}\n textAnchor={'middle'}\n transform={`translate(${w.x}, ${w.y}) rotate(${w.rotate || 0})`}\n fontSize={w.size}\n fontFamily={w.font || 'YekanBakh, system-ui, -apple-system, sans-serif'}\n fontWeight={fontWeight}\n cursor=\"pointer\"\n onMouseEnter={(e: any) => handleMouseMove(e, w.text || '', value)}\n onMouseMove={(e: any) => handleMouseMove(e, w.text || '', value)}\n onMouseLeave={() => setHovered(null)}\n style={{\n userSelect: 'none',\n pointerEvents: 'all',\n }}\n >\n {w.text}\n </Text>\n </g>\n );\n })\n }\n </Wordcloud>\n </div>\n {hovered && typeof document !== 'undefined' && createPortal(\n <div\n className=\"pointer-events-none fixed z-[9999]\"\n dir=\"ltr\"\n style={{\n left: `${hovered.x}px`,\n top: `${hovered.y - 10}px`,\n transform: 'translate(-50%, -100%)',\n }}\n >\n <div className=\"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\" dir=\"rtl\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-2.5 w-2.5 rounded-[2px]\" style={{ backgroundColor: hovered.color }} />\n <span className=\"font-medium\">{hovered.text}</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground\">تعداد</span>\n <span className=\"font-mono font-medium tabular-nums\">\n {hovered.value.toLocaleString('fa-IR')}\n </span>\n </div>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAC;A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","names":["Calendar","CollapsibleContent","CollapsibleTrigger","Label","RadioGroup","format","toPersianDigits","moment","format","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_react_slot","import_lucide_react","import_jsx_runtime","import_react_slot","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Calendar","PersianDayPicker","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","useEmblaCarousel","api","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_lucide_react","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CommandPrimitive","React","import_jsx_runtime","sentiment","formatNumber","import_lucide_react","import_jsx_runtime","import_lucide_react","React","import_jsx_runtime","import_jsx_runtime","CalendarIcon","Calendar","React","import_lucide_react","import_jsx_runtime","Label","import_jsx_runtime","formatDateRange","Label","Calendar","import_jsx_runtime","DrawerPrimitive","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_class_variance_authority","import_jsx_runtime","Label","React","import_react_slot","import_jsx_runtime","Label","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_date_fns","import_jsx_runtime","import_jsx_runtime","segmentCenterX","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","Icon","import_jsx_runtime","React","import_jsx_runtime","formatFollowers","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","convertToLocalNumbers","formatNumber","React","import_jsx_runtime","convertToLocalNumbers","ranges","translations","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","RadioGroup","React","RadioGroupPrimitive","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_lucide_react","React","import_jsx_runtime","open","React","import_jsx_runtime","useDocumentDirection","import_lucide_react","import_sonner","import_jsx_runtime","Sonner","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","FALLBACKS","import_jsx_runtime","FALLBACKS","import_jsx_runtime","FALLBACKS","toEnglishDigits","formatNumber","React","import_react_dom","import_jsx_runtime","FALLBACKS"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/utils.ts","../src/lib/jalali-utils.ts","../src/lib/engagement-utils.ts","../src/lib/i18n.ts","../src/lib/constants.ts","../src/icons.tsx","../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/button.tsx","../src/components/ui/autocomplete.tsx","../src/components/ui/input.tsx","../src/components/ui/spinner.tsx","../src/components/ui/user-autocomplete.tsx","../src/components/ui/avatar.tsx","../src/components/ui/app-bar.tsx","../src/components/ui/aspect-ratio.tsx","../src/components/ui/avatar-group.tsx","../src/components/ui/badge.tsx","../src/components/ui/banner.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/button-group.tsx","../src/components/ui/separator.tsx","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/carousel.tsx","../src/hooks/use-document-direction.ts","../src/components/ui/checkbox.tsx","../src/components/ui/circular-progress.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/command.tsx","../src/components/ui/dialog.tsx","../src/components/ui/comment-card.tsx","../src/components/ui/confirm-dialog.tsx","../src/components/ui/context-menu.tsx","../src/components/ui/copy-button.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/popover.tsx","../src/components/ui/date-range-picker.tsx","../src/components/ui/label.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/empty.tsx","../src/components/ui/error-state.tsx","../src/components/ui/field.tsx","../src/components/ui/filter-bar.tsx","../src/components/ui/form.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/input-with-icon.tsx","../src/components/ui/tag-input.tsx","../src/components/ui/hashtag-input.tsx","../src/components/ui/input-group.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/instagram-post.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/kbd.tsx","../src/components/ui/menubar.tsx","../src/components/ui/metric-card.tsx","../src/components/ui/native-select.tsx","../src/components/ui/navigation-menu.tsx","../src/components/ui/page-header.tsx","../src/components/ui/pagination.tsx","../src/components/ui/pagination-controlled.tsx","../src/components/ui/profile-card.tsx","../src/components/ui/profile-info.tsx","../src/components/ui/engagement-rate.tsx","../src/components/ui/engagement-rate-bar.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/radio-card.tsx","../src/components/ui/resizable.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/nav-rail.tsx","../src/components/ui/slider.tsx","../src/components/ui/sonner.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/view-toggle.tsx","../src/components/ui/trend-indicator.tsx","../src/components/ui/filter-chip.tsx","../src/components/ui/stat-display.tsx","../src/components/ui/stepper.tsx","../src/components/ui/sentiment-badge.tsx","../src/components/ui/multi-select.tsx","../src/components/ui/period-selector.tsx","../src/components/ui/social-platform-badge.tsx","../src/components/ui/search-input.tsx","../src/components/ui/sentiment-distribution.tsx","../src/components/ui/comparison-card.tsx","../src/components/ui/data-table.tsx","../src/components/ui/directional-box.tsx","../src/components/ui/page-loader.tsx","../src/components/ui/error-boundary.tsx","../src/components/ui/safe-image.tsx","../src/components/ui/callout.tsx","../src/components/ui/animated-number.tsx","../src/components/ui/section-navigator.tsx","../src/components/charts/PartoLineChart.tsx","../src/hooks/use-chart-theme.ts","../src/hooks/use-root-styles.ts","../src/lib/theme.ts","../src/components/charts/chart-utils.tsx","../src/components/charts/PartoBarChart.tsx","../src/components/charts/PartoPieChart.tsx","../src/components/charts/PartoHeatMap.tsx","../src/components/charts/PartoWordCloud.tsx","../src/components/charts/PartoAreaChart.tsx","../src/components/charts/PartoRadarChart.tsx","../src/hooks/use-infinite-scroll.ts","../src/hooks/use-debounce.ts","../src/hooks/use-local-storage.ts","../src/hooks/use-scroll-lock.ts"],"sourcesContent":["// Export utility functions\nexport * from './lib/utils'\nexport * from './lib/jalali-utils'\nexport * from './lib/engagement-utils'\nexport * from './lib/i18n'\nexport type { StandardSize, LegacySize, SizeWithLegacy } from './lib/constants'\nexport { normalizeSize } from './lib/constants'\n\n// Export icons\nexport * from './icons'\n\n// Export UI components\nexport * from './components/ui/accordion'\nexport * from './components/ui/alert'\nexport * from './components/ui/alert-dialog'\nexport * from './components/ui/autocomplete'\nexport * from './components/ui/user-autocomplete'\nexport * from './components/ui/app-bar'\nexport * from './components/ui/aspect-ratio'\nexport * from './components/ui/avatar'\nexport * from './components/ui/avatar-group'\nexport * from './components/ui/badge'\nexport * from './components/ui/banner'\nexport * from './components/ui/breadcrumb'\nexport * from './components/ui/button'\nexport * from './components/ui/button-group'\nexport * from './components/ui/calendar'\nexport * from './components/ui/card'\nexport * from './components/ui/carousel'\nexport * from './components/ui/checkbox'\nexport * from './components/ui/circular-progress'\nexport * from './components/ui/collapsible'\nexport * from './components/ui/command'\nexport * from './components/ui/comment-card'\nexport * from './components/ui/confirm-dialog'\nexport * from './components/ui/context-menu'\nexport * from './components/ui/copy-button'\nexport * from './components/ui/date-picker'\nexport * from './components/ui/date-range-picker'\nexport * from './components/ui/dialog'\nexport * from './components/ui/drawer'\nexport * from './components/ui/dropdown-menu'\nexport * from './components/ui/empty'\nexport * from './components/ui/error-state'\nexport * from './components/ui/field'\nexport * from './components/ui/filter-bar'\nexport * from './components/ui/form'\nexport * from './components/ui/hover-card'\nexport * from './components/ui/input'\nexport * from './components/ui/input-with-icon'\nexport * from './components/ui/tag-input'\nexport * from './components/ui/hashtag-input'\nexport * from './components/ui/input-group'\nexport * from './components/ui/input-otp'\nexport * from './components/ui/instagram-post'\nexport * from './components/ui/kbd'\nexport * from './components/ui/label'\nexport * from './components/ui/menubar'\nexport * from './components/ui/metric-card'\nexport * from './components/ui/native-select'\nexport * from './components/ui/navigation-menu'\nexport * from './components/ui/page-header'\nexport * from './components/ui/pagination'\nexport * from './components/ui/pagination-controlled'\nexport * from './components/ui/popover'\nexport * from './components/ui/profile-card'\nexport * from './components/ui/profile-info'\nexport * from './components/ui/engagement-rate'\nexport * from './components/ui/engagement-rate-bar'\nexport * from './components/ui/progress'\nexport * from './components/ui/radio-group'\nexport * from './components/ui/radio-card'\nexport * from './components/ui/resizable'\nexport * from './components/ui/scroll-area'\nexport * from './components/ui/select'\nexport * from './components/ui/separator'\nexport * from './components/ui/sheet'\nexport * from './components/ui/sidebar'\nexport * from './components/ui/nav-rail'\nexport * from './components/ui/skeleton'\nexport * from './components/ui/slider'\nexport * from './components/ui/sonner'\nexport * from './components/ui/spinner'\nexport * from './components/ui/switch'\nexport * from './components/ui/table'\nexport * from './components/ui/tabs'\nexport * from './components/ui/textarea'\nexport * from './components/ui/toggle'\nexport * from './components/ui/toggle-group'\nexport * from './components/ui/tooltip'\nexport * from './components/ui/view-toggle'\nexport * from './components/ui/trend-indicator'\nexport * from './components/ui/filter-chip'\nexport * from './components/ui/stat-display'\nexport * from './components/ui/stepper'\nexport * from './components/ui/sentiment-badge'\nexport * from './components/ui/multi-select'\nexport * from './components/ui/period-selector'\nexport * from './components/ui/social-platform-badge'\nexport * from './components/ui/search-input'\nexport * from './components/ui/sentiment-distribution'\nexport * from './components/ui/comparison-card'\nexport * from './components/ui/data-table'\nexport * from './components/ui/directional-box'\nexport * from './components/ui/page-loader'\nexport * from './components/ui/error-boundary'\nexport * from './components/ui/safe-image'\nexport * from './components/ui/callout'\nexport * from './components/ui/animated-number'\nexport * from './components/ui/section-navigator'\n\n// Export chart components\nexport * from './components/charts/PartoLineChart'\nexport * from './components/charts/PartoBarChart'\nexport * from './components/charts/PartoPieChart'\nexport * from './components/charts/PartoHeatMap'\nexport * from './components/charts/PartoWordCloud'\nexport * from './components/charts/PartoAreaChart'\nexport * from './components/charts/PartoRadarChart'\n\n// Export hooks\nexport * from './hooks/use-document-direction'\nexport * from './hooks/use-mobile'\nexport * from './hooks/use-infinite-scroll'\nexport * from './hooks/use-debounce'\nexport * from './hooks/use-local-storage'\nexport * from './hooks/use-root-styles'\nexport * from './hooks/use-chart-theme'\nexport * from './components/charts/chart-utils'\n// toast is exported via ./components/ui/sonner (not duplicated here)\nexport * from './hooks/use-scroll-lock'\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { formatJalaliDate } from '@/lib/jalali-utils'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport type SupportedLocale = 'fa' | 'ar' | 'en'\n\n/**\n * Convert digits in a string to Persian/Arabic numerals based on locale.\n * @example convertToLocalNumbers('123', 'fa') => '۱۲۳'\n * @example convertToLocalNumbers('123', 'en') => '123'\n */\nexport function convertToLocalNumbers(text: string | number, locale: SupportedLocale): string {\n if (locale === 'fa' || locale === 'ar') {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n return String(text).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n }\n return String(text)\n}\n\n/**\n * Format large numbers with locale-aware suffixes (K/M/B).\n * @example formatLargeNumber(1500, 'fa') => '۱.۵ هزار'\n * @example formatLargeNumber(1500, 'en') => '1.5K'\n */\nexport function formatLargeNumber(num: number, locale: SupportedLocale): string {\n if (num >= 1_000_000_000) {\n const formatted = (num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'B' : ' میلیارد')\n }\n if (num >= 1_000_000) {\n const formatted = (num / 1_000_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'M' : ' میلیون')\n }\n if (num >= 1_000) {\n const formatted = (num / 1_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'K' : ' هزار')\n }\n return convertToLocalNumbers(num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), locale)\n}\n\n/**\n * Format number to Instagram-style short format (English only).\n * @example formatNumber(123456, 'short') => '123K'\n * @example formatNumber(123456, 'exact') => '123,456'\n */\nexport function formatNumber(num: number | undefined, format: 'exact' | 'short' = 'exact'): string {\n if (num === undefined || num === null) return '0'\n\n if (format === 'exact') {\n return num.toLocaleString('en-US')\n }\n\n // Short format (Instagram style)\n if (num >= 1_000_000_000) {\n return `${(num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')}B`\n }\n if (num >= 1_000_000) {\n return `${(num / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`\n }\n if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1).replace(/\\.0$/, '')}K`\n }\n return num.toString()\n}\n\n/**\n * Format date to relative time with absolute on hover (Persian)\n * @example formatRelativeTime(new Date()) => '۲ ساعت پیش'\n */\nexport function formatRelativeTime(date: Date | string | number): string {\n const now = new Date()\n const then = new Date(date)\n const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1000)\n\n if (diffInSeconds < 60) {\n return 'همین الان'\n }\n\n const diffInMinutes = Math.floor(diffInSeconds / 60)\n if (diffInMinutes < 60) {\n return `${convertToLocalNumbers(diffInMinutes, 'fa')} دقیقه پیش`\n }\n\n const diffInHours = Math.floor(diffInMinutes / 60)\n if (diffInHours < 24) {\n return `${convertToLocalNumbers(diffInHours, 'fa')} ساعت پیش`\n }\n\n const diffInDays = Math.floor(diffInHours / 24)\n if (diffInDays < 7) {\n return `${convertToLocalNumbers(diffInDays, 'fa')} روز پیش`\n }\n\n const diffInWeeks = Math.floor(diffInDays / 7)\n if (diffInWeeks < 4) {\n return `${convertToLocalNumbers(diffInWeeks, 'fa')} هفته پیش`\n }\n\n const diffInMonths = Math.floor(diffInDays / 30)\n if (diffInMonths < 12) {\n return `${convertToLocalNumbers(diffInMonths, 'fa')} ماه پیش`\n }\n\n const diffInYears = Math.floor(diffInDays / 365)\n return `${convertToLocalNumbers(diffInYears, 'fa')} سال پیش`\n}\n\n/**\n * Format date to absolute format (Persian / Jalali)\n * Uses date-fns-jalali for accurate Jalali conversion.\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date)\n return formatJalaliDate(d, 'd MMMM yyyy، HH:mm')\n}\n","/**\n * Persian (Jalali / Solar Hijri) calendar utilities.\n *\n * Backed by **date-fns-jalali** — a Jalali-native fork of date-fns v4.\n * Chosen over moment-jalaali (unmaintained since 2019) because:\n * • Tree-shakeable, zero dependencies\n * • Built-in TypeScript types\n * • Tracks upstream date-fns releases\n * • Built-in fa-IR locale with month/weekday names\n * • ~5-10KB gzipped for typical usage\n *\n * DO NOT replace this library again. This decision was made after\n * evaluating date-fns-jalali, jalaali-js, jalaliday (dayjs), moment-jalaali,\n * and persian-date in April 2026. date-fns-jalali is the clear winner\n * for a design system that needs formatting, parsing, and locale support.\n */\n\nimport { format, getMonth, getDate, getYear, parse } from 'date-fns-jalali'\nimport { faIR } from 'date-fns-jalali/locale'\n\n/**\n * Persian/Farsi month names\n */\nexport const PERSIAN_MONTHS = [\n 'فروردین',\n 'اردیبهشت',\n 'خرداد',\n 'تیر',\n 'مرداد',\n 'شهریور',\n 'مهر',\n 'آبان',\n 'آذر',\n 'دی',\n 'بهمن',\n 'اسفند',\n]\n\n/**\n * Persian/Farsi short month names\n */\nexport const PERSIAN_MONTHS_SHORT = ['فرو', 'ارد', 'خرد', 'تیر', 'مرد', 'شهر', 'مهر', 'آبا', 'آذر', 'دی', 'بهم', 'اسف']\n\n/**\n * Persian/Farsi weekday names\n */\nexport const PERSIAN_WEEKDAYS = ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنج‌شنبه', 'جمعه', 'شنبه']\n\n/**\n * Persian/Farsi short weekday names\n */\nexport const PERSIAN_WEEKDAYS_SHORT = ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش']\n\n/**\n * Convert English digits to Persian/Farsi digits\n */\nexport function toPersianDigits(num: number | string): string {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n return String(num).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n}\n\n/**\n * Convert Persian/Farsi digits to English digits\n */\nexport function toEnglishDigits(str: string): string {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n const arabicDigits = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']\n\n return str\n .replace(/[۰-۹]/g, (digit) => String(persianDigits.indexOf(digit)))\n .replace(/[٠-٩]/g, (digit) => String(arabicDigits.indexOf(digit)))\n}\n\n/**\n * Format a Date object to Persian/Jalali date string.\n *\n * Uses date-fns-jalali format tokens:\n * yyyy = Jalali year, MM = month (01-12), dd = day (01-31)\n * MMMM = full month name, EEEE = full weekday name\n * HH:mm = 24h time, hh:mm a = 12h time\n */\nexport function formatJalaliDate(date: Date, formatStr: string = 'yyyy/MM/dd'): string {\n return format(date, formatStr, { locale: faIR })\n}\n\n/**\n * Get Persian month name from a Date object\n */\nexport function getPersianMonthName(date: Date): string {\n const monthIndex = getMonth(date)\n return PERSIAN_MONTHS[monthIndex]\n}\n\n/**\n * Get Persian short month name from a Date object\n */\nexport function getPersianMonthNameShort(date: Date): string {\n const monthIndex = getMonth(date)\n return PERSIAN_MONTHS_SHORT[monthIndex]\n}\n\n/**\n * Get Persian weekday name from a Date object\n */\nexport function getPersianWeekdayName(date: Date, short: boolean = false): string {\n if (short) return format(date, 'EEEEE', { locale: faIR })\n return format(date, 'EEEE', { locale: faIR })\n}\n\n/**\n * Get Persian year from a Date object\n */\nexport function getPersianYear(date: Date): number {\n return getYear(date)\n}\n\n/**\n * Get Persian month (0-11) from a Date object\n */\nexport function getPersianMonth(date: Date): number {\n return getMonth(date)\n}\n\n/**\n * Get Persian day from a Date object\n */\nexport function getPersianDay(date: Date): number {\n return getDate(date)\n}\n\n/**\n * Create a Date object from Persian/Jalali date\n */\nexport function jalaliToGregorian(year: number, month: number, day: number): Date {\n const dateStr = `${year}/${month + 1}/${day}`\n return parse(dateStr, 'yyyy/M/d', new Date(), { locale: faIR })\n}\n\n/**\n * Format date range in Persian\n */\nexport function formatPersianDateRange(from: Date, to: Date): string {\n const fromYear = getYear(from)\n const toYear = getYear(to)\n const fromMonth = getMonth(from)\n const toMonth = getMonth(to)\n const fromDay = getDate(from)\n const toDay = getDate(to)\n\n // Same day\n if (fromYear === toYear && fromMonth === toMonth && fromDay === toDay) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same month and year\n if (fromYear === toYear && fromMonth === toMonth) {\n return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same year\n if (fromYear === toYear) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Different years\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(toYear)}`\n}\n\n/**\n * Get all months for a dropdown (returns array of {value, label})\n */\nexport function getPersianMonthsForDropdown(): Array<{\n value: number\n label: string\n}> {\n return PERSIAN_MONTHS.map((month, index) => ({\n value: index,\n label: month,\n }))\n}\n\n/**\n * Get years range for a dropdown\n */\nexport function getPersianYearsForDropdown(fromYear: number, toYear: number): Array<{ value: number; label: string }> {\n const years: Array<{ value: number; label: string }> = []\n for (let year = fromYear; year <= toYear; year++) {\n years.push({\n value: year,\n label: toPersianDigits(year),\n })\n }\n return years\n}\n","import type { SupportedLocale } from './utils'\n\n/* -------------------------------------------------------------------------- */\n/* Shared types */\n/* -------------------------------------------------------------------------- */\n\nexport type EngagementTier = 'excellent' | 'veryGood' | 'good' | 'average' | 'couldBeImproved' | 'low'\n\nexport type FollowerGroup = 'nano' | 'micro' | 'mid' | 'macro' | 'mega'\n\nexport interface EngagementRange {\n label: string\n min: number\n max: number\n color: string\n colorFaded: string\n hoverColor: string\n /** Accessible text color for use on hoverColor background */\n contrastText: string\n}\n\nexport interface EngagementRangeWithDisplay extends EngagementRange {\n display: string\n}\n\n/* -------------------------------------------------------------------------- */\n/* Follower group thresholds */\n/* -------------------------------------------------------------------------- */\n\ninterface GroupThresholds {\n followers: [number, number]\n excellent: number\n veryGood: [number, number]\n good: [number, number]\n average: [number, number]\n couldBeImproved: [number, number]\n low: number\n}\n\nexport const ENGAGEMENT_RANGES: Record<FollowerGroup, GroupThresholds> = {\n nano: {\n followers: [1000, 10000],\n excellent: 6,\n veryGood: [5, 6],\n good: [4, 5],\n average: [3, 4],\n couldBeImproved: [1, 3],\n low: 1,\n },\n micro: {\n followers: [10000, 100000],\n excellent: 4,\n veryGood: [3, 4],\n good: [2, 3],\n average: [1, 2],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n mid: {\n followers: [100000, 500000],\n excellent: 3,\n veryGood: [2.5, 3],\n good: [1.5, 2.5],\n average: [1, 1.5],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n macro: {\n followers: [500000, 1000000],\n excellent: 2,\n veryGood: [1.5, 2],\n good: [1, 1.5],\n average: [0.5, 1],\n couldBeImproved: [0.2, 0.5],\n low: 0.2,\n },\n mega: {\n followers: [1000000, Infinity],\n excellent: 1,\n veryGood: [0.8, 1],\n good: [0.5, 0.8],\n average: [0.3, 0.5],\n couldBeImproved: [0.1, 0.3],\n low: 0.1,\n },\n}\n\n/* -------------------------------------------------------------------------- */\n/* Tier label translations */\n/* -------------------------------------------------------------------------- */\n\nexport const TIER_LABELS: Record<SupportedLocale, Record<EngagementTier, string>> = {\n fa: {\n excellent: 'عالی',\n veryGood: 'خیلی خوب',\n good: 'خوب',\n average: 'متوسط',\n couldBeImproved: 'قابل بهبود',\n low: 'ضعیف',\n },\n ar: {\n excellent: 'ممتاز',\n veryGood: 'جيد جداً',\n good: 'جيد',\n average: 'متوسط',\n couldBeImproved: 'قابل للتحسين',\n low: 'ضعيف',\n },\n en: {\n excellent: 'Excellent',\n veryGood: 'Very Good',\n good: 'Good',\n average: 'Average',\n couldBeImproved: 'Could Be Improved',\n low: 'Low',\n },\n}\n\nexport const GROUP_LABELS: Record<SupportedLocale, Record<FollowerGroup, string>> = {\n fa: { nano: 'نانو', micro: 'میکرو', mid: 'متوسط', macro: 'ماکرو', mega: 'مگا' },\n ar: { nano: 'نانو', micro: 'ميكرو', mid: 'متوسط', macro: 'ماكرو', mega: 'ميجا' },\n en: { nano: 'Nano', micro: 'Micro', mid: 'Mid', macro: 'Macro', mega: 'Mega' },\n}\n\n/* -------------------------------------------------------------------------- */\n/* Color mappings */\n/* -------------------------------------------------------------------------- */\n\nconst TIER_COLORS: Record<\n EngagementTier,\n { color: string; colorFaded: string; hoverColor: string; contrastText: string }\n> = {\n excellent: {\n color: 'hsl(var(--engagement-excellent))',\n colorFaded: 'hsl(var(--engagement-excellent) / 0.1)',\n hoverColor: 'hsl(var(--engagement-excellent-hover))',\n contrastText: '#fff', // hover bg lightness 14-19% — white OK\n },\n veryGood: {\n color: 'hsl(var(--engagement-very-good))',\n colorFaded: 'hsl(var(--engagement-very-good) / 0.1)',\n hoverColor: 'hsl(var(--engagement-very-good-hover))',\n contrastText: '#fff', // hover bg lightness 35% — white OK\n },\n good: {\n color: 'hsl(var(--engagement-good))',\n colorFaded: 'hsl(var(--engagement-good) / 0.1)',\n hoverColor: 'hsl(var(--engagement-good-hover))',\n contrastText: '#fff', // hover bg lightness 35% — white OK\n },\n average: {\n color: 'hsl(var(--engagement-average))',\n colorFaded: 'hsl(var(--engagement-average) / 0.1)',\n hoverColor: 'hsl(var(--engagement-average-hover))',\n contrastText: '#000', // hover bg lightness 42% amber — dark text for contrast\n },\n couldBeImproved: {\n color: 'hsl(var(--engagement-low))',\n colorFaded: 'hsl(var(--engagement-low) / 0.1)',\n hoverColor: 'hsl(var(--engagement-low-hover))',\n contrastText: '#000', // hover bg lightness 45% orange — dark text for contrast\n },\n low: {\n color: 'hsl(var(--engagement-poor))',\n colorFaded: 'hsl(var(--engagement-poor) / 0.1)',\n hoverColor: 'hsl(var(--engagement-poor-hover))',\n contrastText: '#fff', // hover bg lightness 51% red — white OK (high saturation red)\n },\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helper functions */\n/* -------------------------------------------------------------------------- */\n\nexport function getFollowerGroup(followers: number): FollowerGroup {\n for (const [key, value] of Object.entries(ENGAGEMENT_RANGES)) {\n if (followers >= value.followers[0] && followers < value.followers[1]) {\n return key as FollowerGroup\n }\n }\n return followers < 1000 ? 'nano' : 'mega'\n}\n\nexport function getEngagementRanges(followers: number, locale: SupportedLocale): EngagementRangeWithDisplay[] {\n const group = getFollowerGroup(followers)\n const r = ENGAGEMENT_RANGES[group]\n const t = TIER_LABELS[locale]\n\n const tiers: Array<{ tier: EngagementTier; min: number; max: number; display: string }> = [\n { tier: 'excellent', min: r.excellent, max: Infinity, display: `>${r.excellent}%` },\n { tier: 'veryGood', min: r.veryGood[0], max: r.veryGood[1], display: `${r.veryGood[0]}% - ${r.veryGood[1]}%` },\n { tier: 'good', min: r.good[0], max: r.good[1], display: `${r.good[0]}% - ${r.good[1]}%` },\n { tier: 'average', min: r.average[0], max: r.average[1], display: `${r.average[0]}% - ${r.average[1]}%` },\n {\n tier: 'couldBeImproved',\n min: r.couldBeImproved[0],\n max: r.couldBeImproved[1],\n display: `${r.couldBeImproved[0]}% - ${r.couldBeImproved[1]}%`,\n },\n { tier: 'low', min: 0, max: r.low, display: `<${r.low}%` },\n ]\n\n return tiers.map(({ tier, min, max, display }) => ({\n label: t[tier],\n min,\n max,\n display,\n ...TIER_COLORS[tier],\n }))\n}\n\nexport function getCurrentRangeIndex(currentRate: number, ranges: EngagementRange[]): number {\n const currentRatePercent = currentRate * 100\n return ranges.findIndex(\n (range) => currentRatePercent >= range.min && (range.max === Infinity ? true : currentRatePercent <= range.max)\n )\n}\n","import type { SupportedLocale } from './utils'\n\n// Re-export SupportedLocale as Locale for public API convenience.\n// SupportedLocale is the canonical type; Locale is an alias.\nexport type Locale = SupportedLocale\n\n/**\n * Returns true for RTL locales (fa, ar).\n */\nexport function isRTL(locale: SupportedLocale): boolean {\n return locale === 'fa' || locale === 'ar'\n}\n\n// NOTE: TIER_LABELS and GROUP_LABELS already live in engagement-utils.ts.\n// This file only houses UI-layer translations that are not part of the domain model.\n\n/**\n * UI string translations used by the EngagementRate component.\n * Centralised here to avoid duplication between components.\n */\nexport const engagementUiTranslations: Record<\n SupportedLocale,\n {\n yourCategory: string\n influencer: string\n followers: string\n over: string\n to: string\n and: string\n lessThan: string\n you: string\n criteria: string\n }\n> = {\n fa: {\n yourCategory: 'دسته شما:',\n influencer: 'اینفلوئنسر',\n followers: 'فالوور',\n over: 'بیش از',\n to: 'تا',\n and: 'و بالاتر',\n lessThan: 'کمتر از',\n you: 'شما',\n criteria: 'معیارهای دسته',\n },\n ar: {\n yourCategory: 'فئتك:',\n influencer: 'مؤثر',\n followers: 'متابع',\n over: 'أكثر من',\n to: 'إلى',\n and: 'وأعلى',\n lessThan: 'أقل من',\n you: 'أنت',\n criteria: 'معايير فئة المؤثر',\n },\n en: {\n yourCategory: 'Your Category:',\n influencer: 'Influencer',\n followers: 'followers',\n over: 'Over',\n to: 'to',\n and: 'and above',\n lessThan: 'Less than',\n you: 'You',\n criteria: 'Category Criteria',\n },\n}\n\n/**\n * Sentiment label translations used by the SentimentBadge component.\n */\nexport const sentimentLabels: Record<\n SupportedLocale,\n {\n positive: string\n negative: string\n neutral: string\n mixed: string\n }\n> = {\n fa: { positive: 'مثبت', negative: 'منفی', neutral: 'خنثی', mixed: 'ترکیبی' },\n ar: { positive: 'إيجابي', negative: 'سلبي', neutral: 'محايد', mixed: 'مختلط' },\n en: { positive: 'Positive', negative: 'Negative', neutral: 'Neutral', mixed: 'Mixed' },\n}\n\n/**\n * Default UI strings for components that need localized text.\n * Persian (fa) is the default locale for backward compatibility.\n */\nexport const UI_STRINGS = {\n fa: {\n // Autocomplete\n noResults: 'نتیجه‌ای یافت نشد',\n suggestions: 'پیشنهادها',\n\n // MultiSelect\n select: 'انتخاب کنید',\n noOptionsFound: 'موردی یافت نشد',\n search: 'جستجو...',\n clearAll: 'پاک کردن همه',\n\n // DatePicker / DateRangePicker\n selectDate: 'انتخاب تاریخ',\n selectDateRange: 'انتخاب بازه تاریخ',\n\n // ErrorState\n errorLoadingData: 'خطا در بارگذاری داده‌ها',\n retry: 'تلاش مجدد',\n\n // FilterChip\n remove: 'حذف',\n\n // UserAutocomplete\n noUsersFound: 'کاربری یافت نشد',\n\n // Pagination\n goToPreviousPage: 'رفتن به صفحه قبلی',\n goToNextPage: 'رفتن به صفحه بعدی',\n previous: 'قبلی',\n next: 'بعدی',\n\n // ProfileInfo\n actions: 'عملیات',\n\n // CopyButton\n copy: 'کپی',\n copied: 'کپی شد',\n\n // ConfirmDialog\n confirm: 'تایید',\n cancel: 'انصراف',\n areYouSure: 'آیا مطمئن هستید؟',\n\n // Stepper\n stepperLabel: 'مراحل',\n stepCompleted: 'تکمیل شده',\n stepCurrent: 'مرحله فعلی',\n stepPending: 'در انتظار',\n\n // FilterBar\n clearFilters: 'پاک کردن فیلترها',\n activeFilters: 'فیلترهای فعال',\n\n // PageHeader\n goBack: 'بازگشت',\n\n // ViewToggle\n gridView: 'نمای شبکه‌ای',\n listView: 'نمای لیستی',\n\n // PageLoader\n loading: 'در حال بارگذاری...',\n\n // ErrorBoundary\n unexpectedError: 'خطای غیرمنتظره‌ای رخ داد',\n\n // DataTable\n selectAll: 'انتخاب همه',\n selectRow: 'انتخاب ردیف',\n noDataToDisplay: 'داده‌ای برای نمایش وجود ندارد',\n\n // InstagramPost\n likesCount: 'تعداد لایک',\n commentsCount: 'تعداد کامنت',\n viewsCount: 'تعداد بازدید',\n sharesCount: 'تعداد اشتراک',\n postTypeLabel: 'نوع پست',\n postTypePhoto: 'عکس',\n postTypeVideo: 'ویدیو',\n postTypeCarousel: 'اسلاید',\n showMore: 'بیشتر',\n showLess: 'کمتر',\n noMediaAvailable: 'رسانه‌ای موجود نیست',\n commentAnalysis: 'تحلیل کامنت‌ها',\n commentAnalysisDisabled: 'تحلیل کامنت‌ها (غیرفعال)',\n booster: 'بوستر',\n boosterDisabled: 'بوستر (غیرفعال)',\n aiAnalysis: 'تحلیل هوش مصنوعی',\n aiAnalysisDisabled: 'تحلیل هوش مصنوعی (غیرفعال)',\n openOnInstagram: 'باز کردن در اینستاگرام',\n openOnInstagramDisabled: 'باز کردن در اینستاگرام (غیرفعال)',\n },\n ar: {\n noResults: 'لم يتم العثور على نتائج',\n suggestions: 'اقتراحات',\n select: 'اختر',\n noOptionsFound: 'لم يتم العثور على خيارات',\n search: 'بحث...',\n clearAll: 'مسح الكل',\n selectDate: 'اختر تاريخ',\n selectDateRange: 'اختر نطاق التاريخ',\n errorLoadingData: 'خطأ في تحميل البيانات',\n retry: 'إعادة المحاولة',\n remove: 'حذف',\n noUsersFound: 'لم يتم العثور على مستخدمين',\n goToPreviousPage: 'الانتقال إلى الصفحة السابقة',\n goToNextPage: 'الانتقال إلى الصفحة التالية',\n previous: 'السابق',\n next: 'التالي',\n actions: 'إجراءات',\n\n // CopyButton\n copy: 'نسخ',\n copied: 'تم النسخ',\n\n // ConfirmDialog\n confirm: 'تأكيد',\n cancel: 'إلغاء',\n areYouSure: 'هل أنت متأكد؟',\n\n // Stepper\n stepperLabel: 'الخطوات',\n stepCompleted: 'مكتمل',\n stepCurrent: 'الخطوة الحالية',\n stepPending: 'قيد الانتظار',\n\n // FilterBar\n clearFilters: 'مسح الفلاتر',\n activeFilters: 'الفلاتر النشطة',\n\n // PageHeader\n goBack: 'رجوع',\n\n // ViewToggle\n gridView: 'عرض شبكي',\n listView: 'عرض قائمة',\n\n // PageLoader\n loading: 'جارٍ التحميل...',\n\n // ErrorBoundary\n unexpectedError: 'حدث خطأ غير متوقع',\n\n // DataTable\n selectAll: 'تحديد الكل',\n selectRow: 'تحديد الصف',\n noDataToDisplay: 'لا توجد بيانات للعرض',\n\n // InstagramPost\n likesCount: 'عدد الإعجابات',\n commentsCount: 'عدد التعليقات',\n viewsCount: 'عدد المشاهدات',\n sharesCount: 'عدد المشاركات',\n postTypeLabel: 'نوع المنشور',\n postTypePhoto: 'صورة',\n postTypeVideo: 'فيديو',\n postTypeCarousel: 'شرائح',\n showMore: 'المزيد',\n showLess: 'أقل',\n noMediaAvailable: 'لا توجد وسائط',\n commentAnalysis: 'تحليل التعليقات',\n commentAnalysisDisabled: 'تحليل التعليقات (معطل)',\n booster: 'تعزيز',\n boosterDisabled: 'تعزيز (معطل)',\n aiAnalysis: 'تحليل الذكاء الاصطناعي',\n aiAnalysisDisabled: 'تحليل الذكاء الاصطناعي (معطل)',\n openOnInstagram: 'فتح في إنستاجرام',\n openOnInstagramDisabled: 'فتح في إنستاجرام (معطل)',\n },\n en: {\n noResults: 'No results found',\n suggestions: 'Suggestions',\n select: 'Select',\n noOptionsFound: 'No options found',\n search: 'Search...',\n clearAll: 'Clear all',\n selectDate: 'Select date',\n selectDateRange: 'Select date range',\n errorLoadingData: 'Error loading data',\n retry: 'Retry',\n remove: 'Remove',\n noUsersFound: 'No users found',\n goToPreviousPage: 'Go to previous page',\n goToNextPage: 'Go to next page',\n previous: 'Previous',\n next: 'Next',\n actions: 'Actions',\n\n // CopyButton\n copy: 'Copy',\n copied: 'Copied',\n\n // ConfirmDialog\n confirm: 'Confirm',\n cancel: 'Cancel',\n areYouSure: 'Are you sure?',\n\n // Stepper\n stepperLabel: 'Steps',\n stepCompleted: 'Completed',\n stepCurrent: 'Current step',\n stepPending: 'Pending',\n\n // FilterBar\n clearFilters: 'Clear filters',\n activeFilters: 'Active filters',\n\n // PageHeader\n goBack: 'Go back',\n\n // ViewToggle\n gridView: 'Grid view',\n listView: 'List view',\n\n // PageLoader\n loading: 'Loading...',\n\n // ErrorBoundary\n unexpectedError: 'An unexpected error occurred',\n\n // DataTable\n selectAll: 'Select all',\n selectRow: 'Select row',\n noDataToDisplay: 'No data to display',\n\n // InstagramPost\n likesCount: 'Likes',\n commentsCount: 'Comments',\n viewsCount: 'Views',\n sharesCount: 'Shares',\n postTypeLabel: 'Post type',\n postTypePhoto: 'Photo',\n postTypeVideo: 'Video',\n postTypeCarousel: 'Carousel',\n showMore: 'More',\n showLess: 'Less',\n noMediaAvailable: 'No media available',\n commentAnalysis: 'Comment Analysis',\n commentAnalysisDisabled: 'Comment Analysis (disabled)',\n booster: 'Booster',\n boosterDisabled: 'Booster (disabled)',\n aiAnalysis: 'AI Analysis',\n aiAnalysisDisabled: 'AI Analysis (disabled)',\n openOnInstagram: 'Open on Instagram',\n openOnInstagramDisabled: 'Open on Instagram (disabled)',\n },\n} as const\n\nexport type UIStringKeys = keyof (typeof UI_STRINGS)['fa']\nexport type UIStrings = Record<UIStringKeys, string>\n\n/**\n * Get UI strings for a given locale.\n * Falls back to 'fa' for unknown locales.\n */\nexport function getUIStrings(locale: SupportedLocale = 'fa'): UIStrings {\n return (UI_STRINGS[locale] ?? UI_STRINGS.fa) as UIStrings\n}\n","/**\n * Standard size scale used across the design system.\n * Components should accept these values for their `size` prop.\n */\nexport type StandardSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** @deprecated Use `StandardSize` instead — legacy names have been removed */\nexport type LegacySize = StandardSize\n\n/** @deprecated Use `StandardSize` instead */\nexport type SizeWithLegacy = StandardSize\n\n/**\n * Normalizes a size value to standard names.\n * @deprecated All sizes are standard now — this function is a no-op passthrough.\n */\nexport function normalizeSize(size: StandardSize): StandardSize {\n return size\n}\n\nexport const SIZE = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[26px]',\n sm: 'h-[34px]',\n md: 'h-[38px]',\n lg: 'h-[42px]',\n xl: 'h-[50px]',\n },\n}\n\n/** Inner sizes for nested elements (badges inside buttons, multi-select items, etc.) */\nexport const SIZE_INNER = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[24px]',\n sm: 'h-[28px]',\n md: 'h-[32px]',\n lg: 'h-[36px]',\n xl: 'h-[44px]',\n },\n}\n\nexport const SIZE_VARIANTS = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE.height['xl']}`,\n}\n\nexport const SIZE_VARIANTS_INNER = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE_INNER.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE_INNER.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE_INNER.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE_INNER.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE_INNER.height['xl']}`,\n}\n\n/** @deprecated Use 'sm' instead */\nexport const SIZE_VARIANTS_DEFAULT = 'sm'\n","import * as React from 'react';\nimport {\n AlertCircle,\n AlertTriangle,\n ArrowRight,\n ArrowLeft,\n Bold,\n Building,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Circle,\n Clock,\n Copy,\n Download,\n Eye,\n EyeOff,\n File,\n FileText,\n Heart,\n Home,\n Image,\n Images,\n Inbox,\n Info,\n Italic,\n Loader2,\n Menu,\n MessageCircle,\n Moon,\n MoreHorizontal,\n MoreVertical,\n Plus,\n Rocket,\n Search,\n Settings,\n Share2,\n Sparkles,\n Sun,\n Trash,\n Underline,\n User,\n Users,\n Video,\n X,\n type LucideIcon,\n} from 'lucide-react';\n\nexport type Icon = LucideIcon;\n\n/**\n * Icon Collection for Parto Design System\n * \n * RTL Support Guidelines:\n * ----------------------\n * Directional icons (arrows, chevrons) should be flipped in RTL contexts when they indicate navigation direction.\n * \n * Usage Examples:\n * - For navigation: <Icons.arrowRight className=\"rtl:rotate-180\" />\n * - For UI direction: <Icons.chevronRight className=\"rtl:rotate-180\" />\n * \n * Icons that should NOT be flipped:\n * - Non-directional icons (check, close, settings, etc.)\n * - Icons representing real-world objects\n */\nexport const Icons: Record<string, React.FC<React.SVGProps<SVGSVGElement>> | LucideIcon> = {\n // Lucide Icons\n logo: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n ),\n parto: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 75 75\"\n fill=\"currentColor\"\n {...props}\n >\n <polygon points=\"75,0 0,0 0,25\" />\n <polygon points=\"75,75 50,75 75,0\" />\n <polygon points=\"75,0 25,75 0,75 0,50\" />\n </svg>\n ),\n alertCircle: AlertCircle,\n alertTriangle: AlertTriangle,\n arrowRight: ArrowRight,\n arrowLeft: ArrowLeft,\n bold: Bold,\n calendar: Calendar,\n check: Check,\n chevronDown: ChevronDown,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n chevronUp: ChevronUp,\n circle: Circle,\n clock: Clock,\n copy: Copy,\n download: Download,\n eye: Eye,\n eyeOff: EyeOff,\n file: File,\n fileText: FileText,\n heart: Heart,\n home: Home,\n image: Image,\n images: Images,\n inbox: Inbox,\n info: Info,\n italic: Italic,\n loader: Loader2,\n menu: Menu,\n messageCircle: MessageCircle,\n moon: Moon,\n moreHorizontal: MoreHorizontal,\n moreVertical: MoreVertical,\n plus: Plus,\n rocket: Rocket,\n search: Search,\n settings: Settings,\n share: Share2,\n sparkles: Sparkles,\n sun: Sun,\n trash: Trash,\n underline: Underline,\n user: User,\n users: Users,\n video: Video,\n building: Building,\n close: X,\n spinner: Loader2,\n gitHub: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fab\"\n data-icon=\"github\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 496 512\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"\n ></path>\n </svg>\n ),\n twitter: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z\" />\n </svg>\n ),\n instagram: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\" />\n </svg>\n ),\n} as const;\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-start text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nAccordion.displayName = \"Accordion\"\nAccordionItem.displayName = \"AccordionItem\"\nAccordionTrigger.displayName = \"AccordionTrigger\"\nAccordionContent.displayName = \"AccordionContent\"\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst alertVariants = cva(\n 'relative w-full rounded-lg border ps-12 pe-4 py-3 text-sm transition-colors duration-150 [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-3.5 [&>svg]:w-5 [&>svg]:h-5',\n {\n variants: {\n variant: {\n default: 'text-foreground bg-alternative border [&>svg]:text-foreground',\n info: 'text-foreground bg-alternative border [&>svg]:text-foreground-light',\n success:\n 'text-foreground bg-brand-200 dark:bg-brand-400 border-brand-500 dark:border-brand-600 [&>svg]:text-brand-600 dark:[&>svg]:text-brand-700',\n warning:\n 'text-foreground border-warning-400 bg-warning-200 dark:bg-warning-400 [&>svg]:text-warning-600 dark:[&>svg]:text-warning-700',\n destructive:\n 'text-foreground border-destructive-400 bg-destructive-200 dark:bg-destructive-400 [&>svg]:text-destructive-600 dark:[&>svg]:text-destructive-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div ref={ref} role=\"alert\" data-slot=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n))\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('mb-1 font-medium leading-none tracking-tight', className)}\n {...props}\n />\n )\n)\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-sm [&_p]:leading-relaxed text-foreground-light font-normal', className)}\n {...props}\n />\n )\n)\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-start\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end sm:gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"secondary\" }), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n\n","'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { VariantProps, cva } from 'class-variance-authority'\nimport { Loader2 } from 'lucide-react'\nimport { cloneElement, forwardRef, isValidElement } from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT, type SizeWithLegacy } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>\n\nconst DESTRUCTIVE_VARIANT = `\n text-foreground\n bg-destructive-300 dark:bg-destructive-400 hover:bg-destructive-400 dark:hover:bg-destructive-600\n border-destructive-500 hover:border-destructive\n hover:text-hi-contrast\n data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive-600/80\n`\n\nconst buttonVariants = cva(\n `inline-flex items-center justify-center\n relative\n cursor-pointer\n gap-2\n text-center\n font-normal\n ease-out\n duration-200\n rounded-md\n outline-none\n transition-all\n active:scale-[0.98]\n focus-visible:ring-2\n focus-visible:ring-ring\n focus-visible:ring-offset-2\n border\n disabled:pointer-events-none\n disabled:opacity-50\n [&_svg]:pointer-events-none\n [&_svg]:shrink-0\n `,\n {\n variants: {\n variant: {\n primary: `\n bg-brand-400 dark:bg-brand-500\n hover:bg-brand-300 dark:hover:bg-brand-600\n text-foreground\n border-brand-500/75 dark:border-brand/30\n hover:border-brand-600 dark:hover:border-brand-500\n data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-600/80\n `,\n default: `\n text-foreground\n bg-alternative dark:bg-muted hover:bg-selection\n border-strong hover:border-stronger\n data-[state=open]:bg-selection\n data-[state=open]:border-button-hover\n `,\n secondary: `\n bg-foreground\n text-background hover:text-border-stronger\n focus-visible:text-border-control\n border-foreground-light hover:border-foreground-lighter\n data-[state=open]:border-foreground-lighter\n `,\n outline: `\n text-foreground\n bg-transparent\n border-strong hover:border-foreground-muted\n data-[state=open]:border-stronger\n `,\n dashed: `\n text-foreground\n border\n border-dashed\n border-strong hover:border-stronger\n bg-transparent\n data-[state=open]:border-stronger\n `,\n link: `\n text-brand-600\n border\n border-transparent\n hover:bg-brand-400\n border-opacity-0\n bg-opacity-0\n shadow-none\n data-[state=open]:bg-brand-400\n `,\n text: `\n text-foreground\n hover:bg-surface-300\n shadow-none\n data-[state=open]:bg-surface-300\n border-transparent\n `,\n danger: DESTRUCTIVE_VARIANT,\n warning: `\n text-foreground\n bg-warning-300 dark:bg-warning-400 hover:bg-warning-400 dark:hover:bg-warning-600\n border-warning-500 hover:border-warning\n hover:text-hi-contrast\n data-[state=open]:border-warning\n data-[state=open]:bg-warning-400 dark:data-[state=open]:bg-warning-600/80\n `,\n destructive: DESTRUCTIVE_VARIANT,\n ghost: `\n text-foreground\n hover:bg-surface-100 dark:hover:bg-surface-200\n border-transparent\n `,\n },\n block: {\n true: 'w-full flex items-center justify-center',\n },\n size: {\n ...SIZE_VARIANTS,\n default: SIZE_VARIANTS.sm,\n icon: 'size-9',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n },\n rounded: {\n true: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\nconst IconContainerVariants = cva('', {\n variants: {\n size: {\n xs: '[&_svg]:size-[14px]',\n sm: '[&_svg]:size-[18px]',\n md: '[&_svg]:size-[20px]',\n lg: '[&_svg]:size-[20px]',\n xl: '[&_svg]:size-[24px]',\n /** @deprecated */ tiny: '[&_svg]:size-[14px]',\n /** @deprecated */ small: '[&_svg]:size-[18px]',\n /** @deprecated */ medium: '[&_svg]:size-[20px]',\n /** @deprecated */ large: '[&_svg]:size-[20px]',\n /** @deprecated */ xlarge: '[&_svg]:size-[24px]',\n default: '[&_svg]:size-[18px]',\n icon: '[&_svg]:size-[18px]',\n },\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-lighter',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n },\n})\n\nexport type LoadingVariantProps = VariantProps<typeof loadingVariants>\nconst loadingVariants = cva('', {\n variants: {\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-muted',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n loading: {\n default: '',\n true: `animate-spin`,\n },\n },\n})\n\nexport interface ButtonProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>,\n Omit<ButtonVariantProps, 'disabled'>,\n Omit<LoadingVariantProps, 'variant'> {\n asChild?: boolean\n type?: ButtonVariantProps['variant'] | React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n htmlType?: React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n icon?: React.ReactNode\n iconStart?: React.ReactNode\n iconEnd?: React.ReactNode\n /** @deprecated Use iconStart instead */\n iconLeft?: React.ReactNode\n /** @deprecated Use iconEnd instead */\n iconRight?: React.ReactNode\n isLoading?: boolean\n /** @deprecated Use `isLoading` instead */\n loading?: boolean\n block?: boolean\n rounded?: boolean\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n asChild = false,\n variant,\n type,\n size = SIZE_VARIANTS_DEFAULT,\n children,\n isLoading,\n loading,\n block,\n icon,\n iconEnd,\n iconStart,\n iconRight,\n iconLeft,\n htmlType = 'button',\n rounded,\n className,\n ...props\n },\n ref\n ) => {\n if (process.env.NODE_ENV !== 'production') {\n const deprecatedSizes = ['tiny', 'small', 'medium', 'large', 'xlarge']\n if (size && deprecatedSizes.includes(size as string)) {\n console.warn(`[Parto UI] Button: size=\"${size}\" is deprecated. Use xs|sm|md|lg|xl instead.`)\n }\n }\n\n const Comp = asChild ? Slot : 'button'\n const { tabIndex } = props\n\n // Support both 'type' (Supabase style) and 'variant' (shadcn style)\n // If type is provided and it's not a button HTML type, use it as variant\n const buttonVariant =\n type && typeof type === 'string' && !['button', 'submit', 'reset'].includes(type)\n ? (type as ButtonVariantProps['variant'])\n : variant || 'default'\n\n const _loading = isLoading ?? loading\n // Support deprecated iconLeft/iconRight alongside new iconStart/iconEnd\n const resolvedIconStart = icon ?? iconStart ?? iconLeft\n const resolvedIconEnd = iconEnd ?? iconRight\n const showIcon = _loading || resolvedIconStart\n const disabled = _loading === true || props.disabled\n\n // Set default tabIndex for proper Safari focus handling\n // - Explicit tabIndex prop takes precedence\n // - If disabled, default to -1 (unless explicitly set)\n // - Otherwise, default to 0 for keyboard accessibility\n const computedTabIndex = tabIndex !== undefined ? tabIndex : disabled ? -1 : 0\n\n // Normalize size for IconContainerVariants\n const iconSize: SizeWithLegacy | 'default' | 'icon' =\n size === 'default' ? 'sm' : size === 'icon' ? 'sm' : (size ?? 'sm')\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-size={size}\n type={htmlType}\n disabled={disabled}\n aria-busy={_loading || undefined}\n tabIndex={computedTabIndex}\n className={cn(buttonVariants({ variant: buttonVariant, size, disabled, block, rounded }), className)}\n onClick={(e) => {\n // Prevents redirecting if Button is used with a link-based child element\n if (disabled) return e.preventDefault()\n else props?.onClick?.(e)\n }}\n {...props}\n >\n {asChild ? (\n isValidElement(children) ? (\n cloneElement(\n children,\n undefined,\n showIcon &&\n (_loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2 className={cn(loadingVariants({ loading: _loading, variant: buttonVariant }))} />\n </div>\n ) : resolvedIconStart ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconStart}\n </div>\n ) : null),\n (children.props as { children?: React.ReactNode })?.children && (\n <span className={'truncate'}>{(children.props as { children?: React.ReactNode }).children}</span>\n ),\n resolvedIconEnd && !_loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconEnd}\n </div>\n )\n )\n ) : null\n ) : (\n <>\n {showIcon &&\n (_loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2\n aria-hidden=\"true\"\n className={cn(loadingVariants({ loading: _loading, variant: buttonVariant }))}\n />\n <span className=\"sr-only\">در حال بارگذاری...</span>\n </div>\n ) : resolvedIconStart ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconStart}\n </div>\n ) : null)}{' '}\n {children && <span className={'truncate'}>{children}</span>}{' '}\n {resolvedIconEnd && !_loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconEnd}\n </div>\n )}\n </>\n )}\n </Comp>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Input } from './input'\nimport { Spinner } from './spinner'\n\nexport interface AutocompleteItem {\n value: string\n label: string\n [key: string]: unknown\n}\n\nexport interface AutocompleteProps<T extends AutocompleteItem = AutocompleteItem> extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'onChange' | 'onSelect' | 'size'\n> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string\n\n /**\n * مقدار پیش‌فرض\n * Default value\n */\n defaultValue?: string\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void\n\n /**\n * لیست پیشنهادها\n * List of suggestions\n */\n suggestions?: T[]\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean\n\n /**\n * تابع جستجو (برای fetch کردن suggestions)\n * Search function (for fetching suggestions)\n */\n onSearch?: (query: string) => void | Promise<void>\n\n /**\n * تابع فراخوانی هنگام انتخاب یک مورد\n * Called when an item is selected\n */\n onSelect?: (item: T) => void\n\n /**\n * تابع سفارشی برای رندر کردن هر suggestion\n * Custom render function for each suggestion\n */\n renderItem?: (item: T, isActive: boolean) => React.ReactNode\n\n /**\n * تأخیر debounce (میلی‌ثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number\n\n /**\n * حداقل تعداد کاراکتر برای نمایش suggestions\n * Minimum characters to show suggestions\n * @default 1\n */\n minChars?: number\n\n /**\n * حداکثر ارتفاع منوی suggestions\n * Maximum height of suggestions menu\n * @default \"400px\"\n */\n maxHeight?: string\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean\n\n /**\n * باز کردن خودکار منو هنگام focus\n * Auto-open menu on focus\n */\n autoOpenOnFocus?: boolean\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: 'rtl' | 'ltr'\n\n /**\n * Locale for default strings\n * @default \"fa\"\n */\n locale?: SupportedLocale\n}\n\nconst Autocomplete = React.forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n suggestions = [],\n isLoading = false,\n onSearch,\n onSelect,\n renderItem,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = '400px',\n emptyMessage,\n disableKeyboard = false,\n autoOpenOnFocus = false,\n clearOnSelect = false,\n dir = 'rtl',\n locale = 'fa',\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const listboxId = React.useId()\n const strings = getUIStrings(locale)\n const resolvedEmptyMessage = emptyMessage ?? strings.noResults\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const [showSuggestions, setShowSuggestions] = React.useState(false)\n const [activeSuggestionIndex, setActiveSuggestionIndex] = React.useState(-1)\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null)\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n const suggestionsRef = React.useRef<HTMLDivElement>(null)\n const debounceTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n // Stable ref for onSearch — avoids infinite re-render when caller passes an inline function\n const onSearchRef = React.useRef(onSearch)\n React.useLayoutEffect(() => {\n onSearchRef.current = onSearch\n })\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!)\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n // Debounced search — onSearch accessed via ref to avoid stale closure / infinite re-render\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n if (value.length >= minChars && onSearchRef.current) {\n debounceTimerRef.current = setTimeout(() => {\n onSearchRef.current?.(value)\n }, debounceDelay)\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [value, minChars, debounceDelay])\n\n // Update position when suggestions should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showSuggestions && value.length >= minChars\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n })\n }\n }\n\n updatePosition()\n\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n } else if (!shouldShow) {\n setPosition(null)\n }\n }, [showSuggestions, value.length, minChars])\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n suggestionsRef.current &&\n !suggestionsRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false)\n setActiveSuggestionIndex(-1)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeSuggestionIndex >= 0 && suggestionsRef.current) {\n const activeElement = suggestionsRef.current.children[activeSuggestionIndex] as HTMLElement\n if (activeElement) {\n activeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n }\n }, [activeSuggestionIndex])\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onValueChange?.(newValue)\n\n if (newValue.length >= minChars) {\n setShowSuggestions(true)\n } else {\n setShowSuggestions(false)\n }\n setActiveSuggestionIndex(-1)\n }\n\n const handleSuggestionClick = (item: AutocompleteItem) => {\n if (clearOnSelect) {\n handleValueChange('')\n } else {\n handleValueChange(item.value)\n }\n setShowSuggestions(false)\n setActiveSuggestionIndex(-1)\n onSelect?.(item)\n inputRef.current?.focus()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showSuggestions && suggestions.length > 0) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveSuggestionIndex((prev) => (prev < suggestions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveSuggestionIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (activeSuggestionIndex >= 0 && activeSuggestionIndex < suggestions.length) {\n handleSuggestionClick(suggestions[activeSuggestionIndex])\n }\n break\n case 'Escape':\n e.preventDefault()\n setShowSuggestions(false)\n setActiveSuggestionIndex(-1)\n break\n }\n }\n onKeyDown?.(e)\n }\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (autoOpenOnFocus && value.length >= minChars && suggestions.length > 0) {\n setShowSuggestions(true)\n }\n onFocus?.(e)\n }\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e)\n }\n\n const defaultRenderItem = (item: AutocompleteItem, _isActive: boolean) => (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{item.label}</span>\n </div>\n )\n\n const shouldShowSuggestions = showSuggestions && value.length >= minChars\n\n // Calculate position for portal\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n }\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n }\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n }\n }, [position])\n\n return (\n <>\n <div ref={containerRef} data-slot=\"autocomplete\" className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n data-slot=\"autocomplete-input\"\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n role=\"combobox\"\n aria-expanded={shouldShowSuggestions}\n aria-autocomplete=\"list\"\n aria-controls={shouldShowSuggestions ? listboxId : undefined}\n aria-activedescendant={\n activeSuggestionIndex >= 0 ? `${listboxId}-option-${activeSuggestionIndex}` : undefined\n }\n {...props}\n />\n {isLoading && (\n <div className={cn('absolute top-1/2 -translate-y-1/2 end-3')}>\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowSuggestions &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={suggestionsRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={strings.suggestions}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {suggestions.length > 0\n ? suggestions.map((item, index) => (\n <div\n key={item.value}\n id={`${listboxId}-option-${index}`}\n role=\"option\"\n aria-selected={index === activeSuggestionIndex}\n onClick={() => handleSuggestionClick(item)}\n className={cn(\n 'w-full text-start p-3 hover:bg-accent transition-colors cursor-pointer',\n index === activeSuggestionIndex && 'bg-accent',\n index !== suggestions.length - 1 && 'border-b border-border'\n )}\n >\n {renderItem\n ? renderItem(item, index === activeSuggestionIndex)\n : defaultRenderItem(item, index === activeSuggestionIndex)}\n </div>\n ))\n : !isLoading && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">{resolvedEmptyMessage}</div>\n )}\n </div>,\n document.body\n )}\n </>\n )\n }\n)\n\nAutocomplete.displayName = 'Autocomplete'\n\nexport { Autocomplete }\n","'use client'\n\nimport { VariantProps, cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport const inputVariants = cva(\n cn(\n 'flex w-full rounded-md border border-control read-only:border-button bg-foreground/[.026] text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-foreground-muted read-only:text-foreground-light',\n 'transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-[invalid=true]:bg-destructive-200 dark:aria-[invalid=true]:bg-destructive/5 aria-[invalid=true]:border-destructive-400 dark:aria-[invalid=true]:border-destructive-default aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive'\n ),\n {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\n/** @deprecated Use inputVariants instead */\nexport const InputVariants = inputVariants\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {}\n\nconst LTR_INPUT_TYPES = new Set(['email', 'url', 'tel', 'number', 'password'])\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type, size = 'sm', dir, ...props }, ref) => {\n // LTR content types: auto-set dir=\"ltr\" unless caller explicitly overrides\n const resolvedDir = dir ?? (type && LTR_INPUT_TYPES.has(type) ? 'ltr' : undefined)\n return (\n <input\n type={type}\n ref={ref}\n data-slot=\"input\"\n dir={resolvedDir}\n {...props}\n className={cn(inputVariants({ size }), className)}\n />\n )\n})\n\nInput.displayName = 'Input'\n\nexport { Input }\n","'use client'\n\nimport * as React from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst spinnerVariants = cva('animate-spin text-muted-foreground', {\n variants: {\n size: {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n xl: 'size-8',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof spinnerVariants> {}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(({ className, size, ...props }, ref) => (\n <span\n ref={ref}\n data-slot=\"spinner\"\n role=\"status\"\n aria-label=\"در حال بارگذاری...\"\n className={cn('inline-flex items-center justify-center', className)}\n {...props}\n >\n <Loader2 className={spinnerVariants({ size })} aria-hidden=\"true\" />\n </span>\n))\nSpinner.displayName = 'Spinner'\n\nexport { Spinner, spinnerVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn, convertToLocalNumbers, formatNumber, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Input } from './input'\nimport { Spinner } from './spinner'\nimport { Avatar, AvatarFallback, AvatarImage } from './avatar'\n\nexport interface UserItem {\n id: string\n name: string\n username: string\n avatar?: string\n followers: number\n [key: string]: unknown\n}\n\nexport interface UserAutocompleteProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'onChange' | 'onSelect' | 'size'\n> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string\n\n /**\n * مقدار پیش‌فرض\n * Default value\n */\n defaultValue?: string\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void\n\n /**\n * لیست کاربران\n * List of users\n */\n users?: UserItem[]\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean\n\n /**\n * تابع جستجو (برای fetch کردن users)\n * Search function (for fetching users)\n */\n onSearch?: (query: string, page: number) => void | Promise<void>\n\n /**\n * تابع فراخوانی هنگام انتخاب یک کاربر\n * Called when a user is selected\n */\n onSelect?: (user: UserItem) => void\n\n /**\n * تأخیر debounce (میلی‌ثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number\n\n /**\n * حداقل تعداد کاراکتر برای نمایش نتایج\n * Minimum characters to show results\n * @default 1\n */\n minChars?: number\n\n /**\n * حداکثر ارتفاع منوی نتایج\n * Maximum height of results menu\n * @default \"400px\"\n */\n maxHeight?: string\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: 'rtl' | 'ltr'\n\n /**\n * Locale for default strings\n * @default \"fa\"\n */\n locale?: SupportedLocale\n\n /**\n * فعال‌سازی infinite scroll\n * Enable infinite scroll\n * @default true\n */\n enableInfiniteScroll?: boolean\n\n /**\n * تابع بارگذاری صفحه بعدی\n * Load more function\n */\n onLoadMore?: () => void | Promise<void>\n\n /**\n * وضعیت بارگذاری صفحه بعدی\n * Loading more state\n */\n isLoadingMore?: boolean\n\n /**\n * آیا صفحات بیشتری وجود دارد\n * Has more pages\n */\n hasMore?: boolean\n\n /**\n * صفحه فعلی\n * Current page\n */\n currentPage?: number\n}\n\nconst UserAutocomplete = React.forwardRef<HTMLInputElement, UserAutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n users = [],\n isLoading = false,\n onSearch,\n onSelect,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = '400px',\n emptyMessage,\n disableKeyboard = false,\n clearOnSelect = false,\n dir = 'rtl',\n locale: localeProp,\n enableInfiniteScroll = true,\n onLoadMore,\n isLoadingMore = false,\n hasMore = false,\n currentPage = 1,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const [showResults, setShowResults] = React.useState(false)\n const [activeUserIndex, setActiveUserIndex] = React.useState(-1)\n const [page, setPage] = React.useState(currentPage)\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null)\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n const resultsRef = React.useRef<HTMLDivElement>(null)\n const debounceTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const observerRef = React.useRef<IntersectionObserver | null>(null)\n const lastItemRef = React.useRef<HTMLDivElement>(null)\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!)\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n const locale = localeProp ?? (dir === 'rtl' ? 'fa' : 'en')\n const strings = getUIStrings(locale)\n const resolvedEmptyMessage = emptyMessage ?? strings.noUsersFound\n\n // Debounced search\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n if (value.length >= minChars && onSearch) {\n debounceTimerRef.current = setTimeout(() => {\n setPage(1)\n onSearch(value, 1)\n }, debounceDelay)\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [value, minChars, onSearch, debounceDelay])\n\n // Update position when results should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showResults && value.length >= minChars\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n })\n }\n }\n\n updatePosition()\n\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n } else if (!shouldShow) {\n setPosition(null)\n }\n }, [showResults, value.length, minChars])\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n resultsRef.current &&\n !resultsRef.current.contains(event.target as Node)\n ) {\n setShowResults(false)\n setActiveUserIndex(-1)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeUserIndex >= 0 && resultsRef.current) {\n const activeElement = resultsRef.current.children[activeUserIndex] as HTMLElement\n if (activeElement) {\n activeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n }\n }\n }, [activeUserIndex])\n\n // Infinite scroll observer\n React.useEffect(() => {\n if (!enableInfiniteScroll || !hasMore || isLoadingMore) return\n\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore && !isLoadingMore && onLoadMore) {\n const nextPage = page + 1\n setPage(nextPage)\n if (onSearch) {\n onSearch(value, nextPage)\n }\n onLoadMore()\n }\n },\n { threshold: 0.5 }\n )\n\n if (lastItemRef.current) {\n observerRef.current.observe(lastItemRef.current)\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n }\n }, [enableInfiniteScroll, hasMore, isLoadingMore, onLoadMore, page, value, onSearch])\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onValueChange?.(newValue)\n\n if (newValue.length >= minChars) {\n setShowResults(true)\n setPage(1)\n } else {\n setShowResults(false)\n }\n setActiveUserIndex(-1)\n }\n\n const handleUserClick = (user: UserItem) => {\n if (clearOnSelect) {\n handleValueChange('')\n } else {\n handleValueChange(user.name)\n }\n setShowResults(false)\n setActiveUserIndex(-1)\n onSelect?.(user)\n inputRef.current?.focus()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showResults && users.length > 0) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveUserIndex((prev) => (prev < users.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveUserIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (activeUserIndex >= 0 && activeUserIndex < users.length) {\n handleUserClick(users[activeUserIndex])\n }\n break\n case 'Escape':\n e.preventDefault()\n setShowResults(false)\n setActiveUserIndex(-1)\n break\n }\n }\n onKeyDown?.(e)\n }\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (value.length >= minChars && users.length > 0) {\n setShowResults(true)\n }\n onFocus?.(e)\n }\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e)\n }\n\n const shouldShowResults = showResults && value.length >= minChars\n\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n }\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n }\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n }\n }, [position])\n\n return (\n <>\n <div ref={containerRef} data-slot=\"user-autocomplete\" className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n data-slot=\"user-autocomplete-input\"\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n {...props}\n />\n {isLoading && !isLoadingMore && (\n <div className={cn('absolute top-1/2 -translate-y-1/2 end-3')}>\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowResults &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={resultsRef}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {isLoading && !isLoadingMore ? (\n <div className=\"p-4 flex items-center justify-center\">\n <Spinner className=\"h-5 w-5\" />\n </div>\n ) : users.length > 0 ? (\n <>\n {users.map((user, index) => (\n <button\n key={user.id}\n onClick={() => handleUserClick(user)}\n className={cn(\n 'w-full text-start p-3 hover:bg-accent transition-colors',\n index === activeUserIndex && 'bg-accent',\n index !== users.length - 1 && 'border-b border-border'\n )}\n type=\"button\"\n >\n <div className=\"flex items-center gap-3\">\n {/* Avatar */}\n <div className=\"flex-shrink-0\">\n <Avatar className=\"w-12 h-12\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback>{user.name.charAt(0).toUpperCase()}</AvatarFallback>\n </Avatar>\n </div>\n\n {/* User Info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-foreground truncate\">{user.name}</div>\n <div className=\"text-sm text-muted-foreground truncate\">@{user.username}</div>\n </div>\n\n {/* Followers Count */}\n <div className={cn('flex-shrink-0', 'text-end')}>\n <div className=\"text-sm font-medium text-foreground\">\n {convertToLocalNumbers(formatNumber(user.followers, 'short'), locale)}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {locale === 'fa' ? 'دنبال‌کننده' : locale === 'ar' ? 'متابع' : 'followers'}\n </div>\n </div>\n </div>\n </button>\n ))}\n\n {/* Infinite scroll trigger */}\n {enableInfiniteScroll && hasMore && (\n <div ref={lastItemRef} className=\"p-3 flex items-center justify-center\">\n {isLoadingMore ? <Spinner className=\"h-5 w-5\" /> : <div className=\"h-1\" />}\n </div>\n )}\n </>\n ) : (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">{resolvedEmptyMessage}</div>\n )}\n </div>,\n document.body\n )}\n </>\n )\n }\n)\n\nUserAutocomplete.displayName = 'UserAutocomplete'\n\nexport { UserAutocomplete }\n","'use client'\n\nimport * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '@/lib/utils'\n\nfunction Avatar({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn('relative flex size-8 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('absolute inset-0 w-full h-full object-cover object-center', className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn('bg-muted flex size-full items-center justify-center rounded-full', className)}\n {...props}\n />\n )\n}\n\nAvatar.displayName = 'Avatar'\nAvatarImage.displayName = 'AvatarImage'\nAvatarFallback.displayName = 'AvatarFallback'\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Variants */\n/* -------------------------------------------------------------------------- */\n\nconst appBarVariants = cva('sticky top-0 z-sticky w-full border-b bg-background', {\n variants: {\n size: {\n sm: 'h-12',\n md: 'h-14',\n lg: 'h-16',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\nexport interface AppBarProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof appBarVariants> {\n /** Logo or brand mark — rendered at the inline-start */\n logo?: React.ReactNode\n /** Primary navigation links — rendered after logo */\n nav?: React.ReactNode\n /** Search input or trigger — rendered in the center area */\n search?: React.ReactNode\n /** Action buttons (notifications, help, etc.) — rendered before user slot */\n actions?: React.ReactNode\n /** User avatar / menu — rendered at the inline-end */\n user?: React.ReactNode\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nconst AppBar = React.forwardRef<HTMLElement, AppBarProps>(\n ({ className, size, logo, nav, search, actions, user, children, ...props }, ref) => {\n return (\n <header ref={ref} data-slot=\"app-bar\" className={cn(appBarVariants({ size }), className)} {...props}>\n <div className=\"flex h-full items-center gap-3 px-4\">\n {/* Inline-start: logo + primary nav */}\n {(logo || nav) && (\n <div data-slot=\"app-bar-start\" className=\"flex items-center gap-3 shrink-0\">\n {logo && (\n <div data-slot=\"app-bar-logo\" className=\"shrink-0\">\n {logo}\n </div>\n )}\n {nav && (\n <nav data-slot=\"app-bar-nav\" aria-label=\"ناوبری اصلی\">\n {nav}\n </nav>\n )}\n </div>\n )}\n\n {/* Center: search — grows to fill available space */}\n {search && (\n <div data-slot=\"app-bar-search\" className=\"flex-1 max-w-md mx-auto\">\n {search}\n </div>\n )}\n\n {/* Spacer when no search */}\n {!search && <div className=\"flex-1\" aria-hidden />}\n\n {/* Inline-end: actions + user */}\n {(actions || user) && (\n <div data-slot=\"app-bar-end\" className=\"flex items-center gap-2 shrink-0\">\n {actions && (\n <div data-slot=\"app-bar-actions\" className=\"flex items-center gap-1\">\n {actions}\n </div>\n )}\n {user && <div data-slot=\"app-bar-user\">{user}</div>}\n </div>\n )}\n\n {/* Arbitrary children for full custom layouts */}\n {children}\n </div>\n </header>\n )\n }\n)\nAppBar.displayName = 'AppBar'\n\nexport { AppBar, appBarVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\nimport { cn } from \"@/lib/utils\"\n\nfunction AspectRatio({\n className,\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return (\n <AspectRatioPrimitive.Root\n data-slot=\"aspect-ratio\"\n className={cn(\"relative w-full\", className)}\n {...props}\n />\n )\n}\n\nAspectRatio.displayName = \"AspectRatio\"\n\nexport { AspectRatio }\n\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from './avatar'\n\nconst avatarGroupVariants = cva('flex -space-x-2 rtl:space-x-reverse', {\n variants: {\n size: {\n sm: '[&_[data-slot=avatar]]:size-6 [&_[data-slot=avatar]]:text-xs',\n md: '[&_[data-slot=avatar]]:size-8 [&_[data-slot=avatar]]:text-sm',\n lg: '[&_[data-slot=avatar]]:size-10 [&_[data-slot=avatar]]:text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport interface AvatarGroupItem {\n src?: string\n alt?: string\n fallback?: string\n}\n\nexport interface AvatarGroupProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof avatarGroupVariants> {\n /** Array of avatar data to display */\n items: AvatarGroupItem[]\n /** Maximum number of avatars to show before the \"+N\" overflow */\n max?: number\n}\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, items, max = 5, size, ...props }, ref) => {\n const visible = items.slice(0, max)\n const overflow = items.length - max\n\n return (\n <div\n ref={ref}\n data-slot=\"avatar-group\"\n data-size={size}\n className={cn(avatarGroupVariants({ size }), className)}\n {...props}\n >\n {visible.map((item, index) => (\n <Avatar key={index} className=\"border-2 border-background ring-0\">\n {item.src && <AvatarImage src={item.src} alt={item.alt} />}\n <AvatarFallback>{item.fallback ?? item.alt?.charAt(0) ?? '?'}</AvatarFallback>\n </Avatar>\n ))}\n {overflow > 0 && (\n <Avatar className=\"border-2 border-background ring-0\">\n <AvatarFallback className=\"bg-muted text-muted-foreground text-xs font-medium\">+{overflow}</AvatarFallback>\n </Avatar>\n )}\n </div>\n )\n }\n)\n\nAvatarGroup.displayName = 'AvatarGroup'\n\nexport { AvatarGroup, avatarGroupVariants }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full font-normal whitespace-nowrap transition-colors duration-150',\n {\n variants: {\n variant: {\n default: 'bg-surface-75 text-foreground-light border border-strong',\n secondary:\n 'bg-[hsl(var(--secondary-default)/0.1)] border border-[hsl(var(--secondary-default)/0.4)] text-[hsl(var(--secondary-default))]',\n success: 'bg-brand bg-opacity-10 text-brand-600 border border-brand-500',\n warning: 'bg-warning bg-opacity-10 text-warning border border-warning-500',\n destructive: 'bg-destructive bg-opacity-10 text-destructive-600 border border-destructive-500',\n brand: 'bg-brand bg-opacity-10 text-brand-600 border border-brand-500',\n outline: 'bg-transparent text-foreground border border-foreground-muted',\n },\n size: {\n xs: 'px-1.5 py-[3px] text-2xs leading-none tracking-wide uppercase',\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2 py-0.5 text-xs',\n lg: 'px-3 py-0.5 text-sm',\n /** @deprecated Use xs */ tiny: 'px-1.5 py-[3px] text-2xs leading-none tracking-wide uppercase',\n /** @deprecated Use sm */ small: 'px-2 py-0.5 text-xs',\n /** @deprecated Use lg */ large: 'px-3 py-0.5 text-sm',\n },\n dot: {\n true: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'sm',\n },\n }\n)\n\nconst dotVariants = cva('size-2 rounded-full', {\n variants: {\n position: {\n start: '-ms-0.5 me-1.5',\n end: 'ms-1.5 -me-0.5',\n },\n },\n defaultVariants: {\n position: 'start',\n },\n})\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {\n dot?: boolean\n dotPosition?: 'start' | 'end'\n}\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, dot, dotPosition = 'end', children, ...props }, ref) => {\n if (process.env.NODE_ENV !== 'production') {\n const deprecatedSizes = ['tiny', 'small', 'large']\n if (size && deprecatedSizes.includes(size as string)) {\n console.warn(`[Parto UI] Badge: size=\"${size}\" is deprecated. Use xs|sm|md|lg instead.`)\n }\n }\n\n return (\n <span ref={ref} data-slot=\"badge\" className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && dotPosition === 'start' && (\n <svg className={cn(dotVariants({ position: 'start' }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n {children}\n {dot && dotPosition === 'end' && (\n <svg className={cn(dotVariants({ position: 'end' }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n </span>\n )\n }\n)\n\nBadge.displayName = 'Badge'\n\nexport { Badge, badgeVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst bannerVariants = cva('relative flex items-center justify-center gap-2 px-4 py-2 text-sm font-medium', {\n variants: {\n variant: {\n info: 'bg-brand-500 text-white',\n warning: 'bg-warning-500 text-white',\n destructive: 'bg-destructive-500 text-white',\n success: 'bg-brand-500 text-white',\n neutral: 'bg-surface-200 text-foreground border-b border-border',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n})\n\nexport interface BannerProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerVariants> {\n /** Whether the banner can be dismissed */\n dismissible?: boolean\n /** Callback when the banner is dismissed */\n onDismiss?: () => void\n /** Icon to show before the message */\n icon?: React.ReactNode\n /** Action element (e.g., a button or link) */\n action?: React.ReactNode\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n ({ className, variant, dismissible = false, onDismiss, icon, action, children, ...props }, ref) => {\n const [dismissed, setDismissed] = React.useState(false)\n\n if (dismissed) return null\n\n const handleDismiss = () => {\n setDismissed(true)\n onDismiss?.()\n }\n\n return (\n <div ref={ref} role=\"banner\" data-slot=\"banner\" className={cn(bannerVariants({ variant }), className)} {...props}>\n {icon && (\n <span data-slot=\"banner-icon\" className=\"shrink-0\">\n {icon}\n </span>\n )}\n <span data-slot=\"banner-content\">{children}</span>\n {action && (\n <span data-slot=\"banner-action\" className=\"shrink-0\">\n {action}\n </span>\n )}\n {dismissible && (\n <button\n type=\"button\"\n data-slot=\"banner-dismiss\"\n className=\"absolute end-2 top-1/2 -translate-y-1/2 rounded-sm p-1 opacity-70 hover:opacity-100 transition-opacity\"\n onClick={handleDismiss}\n aria-label=\"بستن\"\n >\n <XIcon className=\"size-4\" />\n </button>\n )}\n </div>\n )\n }\n)\n\nBanner.displayName = 'Banner'\n\nexport { Banner, bannerVariants }\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, dir, ...props }: React.ComponentProps<'ol'>) {\n const direction = dir ?? 'rtl'\n\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n dir={direction}\n className={cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5 list-none ps-0',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"breadcrumb-item\" className={cn('inline-flex items-center gap-1.5', className)} {...props} />\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp data-slot=\"breadcrumb-link\" className={cn('hover:text-foreground transition-colors', className)} {...props} />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground font-normal', className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({ children, className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex size-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nBreadcrumb.displayName = 'Breadcrumb'\nBreadcrumbList.displayName = 'BreadcrumbList'\nBreadcrumbItem.displayName = 'BreadcrumbItem'\nBreadcrumbLink.displayName = 'BreadcrumbLink'\nBreadcrumbPage.displayName = 'BreadcrumbPage'\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { Separator } from './separator'\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-e-md has-[>[data-slot=button-group]]:gap-2\",\n {\n variants: {\n orientation: {\n horizontal:\n '[&>*:not(:first-child)]:rounded-s-none [&>*:not(:first-child)]:border-s-0 [&>*:not(:last-child)]:rounded-e-none',\n vertical:\n 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n data-slot=\"button-group-text\"\n className={cn(\n \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn('bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto', className)}\n {...props}\n />\n )\n}\n\nButtonGroup.displayName = 'ButtonGroup'\nButtonGroupText.displayName = 'ButtonGroupText'\nButtonGroupSeparator.displayName = 'ButtonGroupSeparator'\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants }\n","'use client'\n\nimport * as React from 'react'\nimport * as SeparatorPrimitive from '@radix-ui/react-separator'\n\nimport { cn } from '@/lib/utils'\n\ninterface SeparatorProps extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {\n children?: React.ReactNode\n}\n\nconst Separator = React.forwardRef<React.ElementRef<typeof SeparatorPrimitive.Root>, SeparatorProps>(\n ({ className, orientation = 'horizontal', decorative = true, children, ...props }, ref) => {\n // If there's no children, render the default separator\n if (!children) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n )\n }\n\n // If there are children (text), render separator with text\n if (orientation === 'horizontal') {\n return (\n <div ref={ref} data-slot=\"separator\" className={cn('relative flex items-center w-full', className)} {...props}>\n <SeparatorPrimitive.Root\n data-slot=\"separator-line\"\n decorative={decorative}\n orientation=\"horizontal\"\n className=\"flex-1 h-[1px] bg-border\"\n />\n <span data-slot=\"separator-content\" className=\"px-3 text-sm text-muted-foreground whitespace-nowrap\">\n {children}\n </span>\n <SeparatorPrimitive.Root\n data-slot=\"separator-line\"\n decorative={decorative}\n orientation=\"horizontal\"\n className=\"flex-1 h-[1px] bg-border\"\n />\n </div>\n )\n }\n\n // For vertical orientation with text (less common)\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n className={cn('relative flex flex-col items-center h-full', className)}\n {...props}\n >\n <SeparatorPrimitive.Root\n data-slot=\"separator-line\"\n decorative={decorative}\n orientation=\"vertical\"\n className=\"flex-1 w-[1px] bg-border\"\n />\n <span data-slot=\"separator-content\" className=\"py-3 text-sm text-muted-foreground\">\n {children}\n </span>\n <SeparatorPrimitive.Root\n data-slot=\"separator-line\"\n decorative={decorative}\n orientation=\"vertical\"\n className=\"flex-1 w-[1px] bg-border\"\n />\n </div>\n )\n }\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { DayPicker } from 'react-day-picker'\nimport { DayPicker as PersianDayPicker } from 'react-day-picker/persian'\nimport { enUS } from 'date-fns/locale'\n\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from './button'\n\nexport type CalendarProps = {\n usePersianCalendar?: boolean\n className?: string\n classNames?: Partial<Record<string, string>>\n showOutsideDays?: boolean\n} & (React.ComponentProps<typeof DayPicker> | React.ComponentProps<typeof PersianDayPicker>)\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n usePersianCalendar = false,\n ...props\n}: CalendarProps) {\n const PickerComponent = usePersianCalendar ? PersianDayPicker : DayPicker\n\n // Formatters for English numbers in Gregorian calendar\n const englishFormatters = !usePersianCalendar\n ? {\n formatDay: (date: Date) => {\n // Force English numbers using Intl.NumberFormat with en-US locale\n if (!date || !(date instanceof Date)) {\n return ''\n }\n const dayNumber = date.getDate()\n return new Intl.NumberFormat('en-US', { useGrouping: false }).format(dayNumber)\n },\n formatWeekdayName: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return ''\n }\n return new Intl.DateTimeFormat('en-US', { weekday: 'short' }).format(date)\n },\n formatMonthCaption: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return ''\n }\n return new Intl.DateTimeFormat('en-US', { month: 'long', year: 'numeric' }).format(date)\n },\n }\n : undefined\n\n return (\n <div data-slot=\"calendar\">\n <PickerComponent\n dir={usePersianCalendar ? 'rtl' : 'ltr'}\n locale={usePersianCalendar ? undefined : enUS}\n formatters={englishFormatters}\n showOutsideDays={showOutsideDays}\n className={cn('p-6', usePersianCalendar ? '' : 'font-sans', className)}\n classNames={{\n months: 'flex flex-col sm:flex-row gap-y-4 sm:gap-y-0',\n month: 'gap-y-4 mx-2',\n month_caption: 'flex justify-center pt-1 relative items-center h-7',\n caption_label: 'text-sm font-medium truncate',\n button_previous: cn(\n buttonVariants({ variant: 'outline' }),\n 'absolute start-2 size-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0'\n ),\n button_next: cn(\n buttonVariants({ variant: 'outline' }),\n 'absolute end-2 size-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0'\n ),\n month_grid: 'mt-4',\n weekdays: 'flex flex-row',\n weekday: 'text-muted-foreground rounded-md size-9 font-normal text-xs flex items-center justify-center',\n week: 'flex w-full mt-2',\n day: cn('size-9 text-center text-sm p-0 relative', 'focus-within:relative focus-within:z-20'),\n day_button: cn(\n 'w-full cursor-pointer h-full p-0 font-normal rounded-md',\n 'aria-selected:opacity-100',\n 'border-0 shadow-none outline-none',\n 'transition-colors duration-150',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',\n 'flex items-center justify-center',\n 'text-foreground'\n ),\n range_start: 'day-range-start',\n range_end: 'day-range-end',\n selected:\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md',\n today: 'bg-accent text-accent-foreground',\n outside: 'day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground',\n disabled: 'text-muted-foreground opacity-50',\n range_middle: 'aria-selected:bg-primary/20 aria-selected:text-foreground rounded-none',\n hidden: 'invisible',\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) => {\n // برای RTL (تقویم شمسی) فلش‌ها معکوس می‌شوند\n if (usePersianCalendar) {\n if (orientation === 'left') {\n return <ChevronRight className=\"size-4\" />\n }\n return <ChevronLeft className=\"size-4\" />\n }\n // برای LTR (تقویم میلادی) فلش‌ها طبیعی هستند\n if (orientation === 'left') {\n return <ChevronLeft className=\"size-4\" />\n }\n return <ChevronRight className=\"size-4\" />\n },\n }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(props as any)}\n />\n </div>\n )\n}\nCalendar.displayName = 'Calendar'\n\nexport { Calendar }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Card */\n/* -------------------------------------------------------------------------- */\n\nconst cardVariants = cva(\n 'overflow-hidden rounded-lg text-card-foreground transition-all duration-200 focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n {\n variants: {\n variant: {\n default: 'border bg-surface-100 shadow-sm',\n outlined: 'border-2 border-border bg-transparent',\n elevated: 'bg-surface-100 shadow-card hover:shadow-lg',\n interactive:\n 'border bg-surface-100 shadow-sm hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0 active:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n glass: 'border border-border/50 bg-background/80 backdrop-blur-sm shadow-sm',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, variant, size = 'md', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n data-size={size}\n className={cn(cardVariants({ variant, size }), className)}\n {...props}\n />\n))\nCard.displayName = 'Card'\n\n/* -------------------------------------------------------------------------- */\n/* CardHeader */\n/* -------------------------------------------------------------------------- */\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\n 'flex flex-col space-y-1.5 border-b',\n // Size variants inherited from Card\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\n/* -------------------------------------------------------------------------- */\n/* CardTitle */\n/* -------------------------------------------------------------------------- */\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'font-semibold leading-tight tracking-tight',\n '[[data-size=sm]_&]:text-sm',\n '[[data-size=md]_&]:text-base',\n '[[data-size=lg]_&]:text-lg',\n className\n )}\n {...props}\n />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\n/* -------------------------------------------------------------------------- */\n/* CardDescription */\n/* -------------------------------------------------------------------------- */\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} data-slot=\"card-description\" className={cn('text-sm text-foreground-muted', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\n/* -------------------------------------------------------------------------- */\n/* CardContent */\n/* -------------------------------------------------------------------------- */\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn(\n 'border-b last:border-none',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardContent.displayName = 'CardContent'\n\n/* -------------------------------------------------------------------------- */\n/* CardFooter */\n/* -------------------------------------------------------------------------- */\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\n 'flex items-center',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, cardVariants, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\nexport type { CardProps }\n","'use client'\n\nimport * as React from 'react'\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react'\nimport { ArrowLeft, ArrowRight } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\nimport { useDocumentDirection, type Direction } from '@/hooks/use-document-direction'\nimport { Button } from './button'\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: 'horizontal' | 'vertical'\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n direction: Direction\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />')\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<'div'> & CarouselProps) {\n const documentDirection = useDocumentDirection()\n const direction = (dir as Direction) ?? documentDirection\n\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n direction: direction,\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n if (direction === 'rtl') {\n scrollNext()\n } else {\n scrollPrev()\n }\n } else if (event.key === 'ArrowRight') {\n event.preventDefault()\n if (direction === 'rtl') {\n scrollPrev()\n } else {\n scrollNext()\n }\n }\n },\n [scrollPrev, scrollNext, direction]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on('reInit', onSelect)\n api.on('select', onSelect)\n\n return () => {\n api?.off('select', onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n direction,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n dir={direction}\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<'div'>) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div className={cn('flex', orientation === 'horizontal' ? '-ms-4' : '-mt-4 flex-col', className)} {...props} />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<'div'>) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'ps-4' : 'pt-4', className)}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon',\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev, direction } = useCarousel()\n const isRTL = direction === 'rtl'\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute size-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -translate-y-1/2'\n : 'start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90',\n orientation === 'horizontal' && '-start-12',\n orientation === 'vertical' && '-top-12',\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n {isRTL ? <ArrowRight /> : <ArrowLeft />}\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon',\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext, direction } = useCarousel()\n const isRTL = direction === 'rtl'\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute size-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -translate-y-1/2'\n : 'start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90',\n orientation === 'horizontal' && '-end-12',\n orientation === 'vertical' && '-bottom-12',\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n {isRTL ? <ArrowLeft /> : <ArrowRight />}\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nCarousel.displayName = 'Carousel'\nCarouselContent.displayName = 'CarouselContent'\nCarouselItem.displayName = 'CarouselItem'\nCarouselPrevious.displayName = 'CarouselPrevious'\nCarouselNext.displayName = 'CarouselNext'\n\nexport { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext }\n","'use client'\n\nimport { useState, useEffect } from 'react'\n\ntype Direction = 'ltr' | 'rtl'\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = useState<Direction>('rtl')\n\n useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === 'undefined') return 'rtl'\n const htmlDir = document.documentElement.getAttribute('dir')\n if (htmlDir === 'ltr' || htmlDir === 'rtl') {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === 'rtl' ? 'rtl' : 'ltr'\n }\n\n setDirection(getDirection())\n\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nexport { useDocumentDirection }\nexport type { Direction }\n","'use client'\n\nimport * as React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { CheckIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-control bg-control data-[state=checked]:bg-brand data-[state=checked]:text-foreground-contrast data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-all duration-150 outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\n\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { Skeleton } from './skeleton'\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Progress value 0-100 */\n value: number\n /** Diameter of the circle in px @default 120 */\n diameter?: number\n /** Stroke width in px @default 8 */\n strokeWidth?: number\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'destructive'\n /** Show the numeric value in center @default true */\n showValue?: boolean\n /** Label text below the value (inside circle) */\n label?: string\n /** Locale for number formatting @default \"fa\" */\n locale?: SupportedLocale\n /** Show loading skeleton */\n isLoading?: boolean\n}\n\nconst VARIANT_COLORS: Record<string, string> = {\n primary: 'hsl(var(--brand-default))',\n success: 'hsl(var(--sentiment-positive))',\n warning: 'hsl(var(--warning-default))',\n destructive: 'hsl(var(--destructive-default))',\n}\n\nconst TRACK_COLOR = 'hsl(var(--border-muted))'\n\nconst CircularProgress = React.forwardRef<HTMLDivElement, CircularProgressProps>(\n (\n {\n className,\n value,\n diameter = 120,\n strokeWidth = 8,\n variant = 'primary',\n showValue = true,\n label,\n locale = 'fa',\n isLoading,\n ...props\n },\n ref\n ) => {\n const clampedValue = Math.max(0, Math.min(100, value))\n const radius = (diameter - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const offset = circumference - (clampedValue / 100) * circumference\n\n if (isLoading) {\n return (\n <div ref={ref} className={cn('flex items-center justify-center', className)} {...props}>\n <Skeleton shape=\"circle\" style={{ width: diameter, height: diameter }} />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: diameter, height: diameter }}\n {...props}\n >\n <svg width={diameter} height={diameter} className=\"-rotate-90 rtl:[transform:rotate(-90deg)_scaleX(-1)]\">\n {/* Track */}\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n stroke={TRACK_COLOR}\n strokeWidth={strokeWidth}\n />\n {/* Indicator */}\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n stroke={VARIANT_COLORS[variant]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className=\"transition-[stroke-dashoffset] duration-500 ease-out\"\n />\n </svg>\n {/* Center content */}\n {(showValue || label) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n {showValue && (\n <span\n className={cn(\n 'font-bold text-foreground tabular-nums',\n diameter >= 160 ? 'text-3xl' : diameter >= 100 ? 'text-xl' : 'text-sm'\n )}\n >\n {convertToLocalNumbers(Math.round(clampedValue), locale)}\n <span className=\"text-foreground-lighter text-[0.6em]\">٪</span>\n </span>\n )}\n {label && (\n <span\n className={cn('text-foreground-lighter font-medium mt-0.5', diameter >= 160 ? 'text-sm' : 'text-xs')}\n >\n {label}\n </span>\n )}\n </div>\n )}\n </div>\n )\n }\n)\nCircularProgress.displayName = 'CircularProgress'\n\nexport { CircularProgress }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst skeletonVariants = cva('bg-accent animate-pulse', {\n variants: {\n shape: {\n rect: 'rounded-md',\n line: 'rounded-full h-4 w-full',\n circle: 'rounded-full',\n text: 'rounded h-4',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n { shape: 'circle', size: 'sm', class: 'size-8' },\n { shape: 'circle', size: 'md', class: 'size-10' },\n { shape: 'circle', size: 'lg', class: 'size-14' },\n ],\n defaultVariants: {\n shape: 'rect',\n size: 'md',\n },\n})\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {\n /**\n * تعداد عناصر skeleton برای نمایش (برای shape های line و text)\n * Number of skeleton elements to repeat (for line/text shapes)\n */\n count?: number\n}\n\nfunction Skeleton({ className, shape, size, count, ...props }: SkeletonProps) {\n if (count && count > 1) {\n return (\n <div role=\"status\" aria-busy=\"true\" aria-label=\"Loading\" className=\"space-y-2\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n data-slot=\"skeleton\"\n aria-hidden=\"true\"\n className={cn(skeletonVariants({ shape, size }), className)}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n data-slot=\"skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading\"\n {...props}\n className={cn(skeletonVariants({ shape, size }), className)}\n />\n )\n}\n\nSkeleton.displayName = 'Skeleton'\n\n/* -------------------------------------------------------------------------- */\n/* Named Skeleton Presets */\n/* -------------------------------------------------------------------------- */\n\nexport interface MetricCardSkeletonProps {\n className?: string\n}\n\nfunction MetricCardSkeleton({ className }: MetricCardSkeletonProps) {\n return (\n <div\n data-slot=\"metric-card-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading metric\"\n className={cn('rounded-lg border border-border bg-card p-4 space-y-3', className)}\n >\n <Skeleton shape=\"line\" className=\"h-3 w-1/3\" aria-hidden=\"true\" />\n <Skeleton shape=\"rect\" className=\"h-8 w-1/2\" aria-hidden=\"true\" />\n <Skeleton shape=\"line\" className=\"h-3 w-1/4\" aria-hidden=\"true\" />\n </div>\n )\n}\nMetricCardSkeleton.displayName = 'MetricCardSkeleton'\n\nexport interface ChartSkeletonProps {\n className?: string\n}\n\nfunction ChartSkeleton({ className }: ChartSkeletonProps) {\n return (\n <div\n data-slot=\"chart-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading chart\"\n className={cn('w-full rounded-md overflow-hidden', className)}\n >\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" aria-hidden=\"true\" />\n </div>\n )\n}\nChartSkeleton.displayName = 'ChartSkeleton'\n\nexport interface TableSkeletonProps {\n rows?: number\n className?: string\n}\n\nfunction TableSkeleton({ rows = 5, className }: TableSkeletonProps) {\n return (\n <div\n data-slot=\"table-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading table\"\n className={cn('w-full rounded-md border border-border overflow-hidden', className)}\n >\n <div className=\"flex gap-4 bg-muted/50 px-4 py-3 border-b border-border\" aria-hidden=\"true\">\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 w-16\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n aria-hidden=\"true\"\n className={cn('flex gap-4 px-4 py-3', i !== rows - 1 && 'border-b border-border')}\n >\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n )\n}\nTableSkeleton.displayName = 'TableSkeleton'\n\nexport { Skeleton, MetricCardSkeleton, ChartSkeleton, TableSkeleton }\n","\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n )\n}\n\nCollapsible.displayName = \"Collapsible\"\nCollapsibleTrigger.displayName = \"CollapsibleTrigger\"\nCollapsibleContent.displayName = \"CollapsibleContent\"\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n\n","'use client'\n\nimport * as React from 'react'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { SearchIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog'\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)}>\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"flex h-9 items-center gap-2 border-b px-3\">\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />\n}\n\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none transition-colors duration-100 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('text-muted-foreground ms-auto text-xs tracking-widest', className)}\n {...props}\n />\n )\n}\n\nCommand.displayName = 'Command'\nCommandDialog.displayName = 'CommandDialog'\nCommandInput.displayName = 'CommandInput'\nCommandList.displayName = 'CommandList'\nCommandEmpty.displayName = 'CommandEmpty'\nCommandGroup.displayName = 'CommandGroup'\nCommandSeparator.displayName = 'CommandSeparator'\nCommandItem.displayName = 'CommandItem'\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Close>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>\n>(({ ...props }, ref) => <DialogPrimitive.Close ref={ref} data-slot=\"dialog-close\" {...props} />)\nDialogClose.displayName = DialogPrimitive.Close.displayName\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-default bg-dialog text-foreground p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute end-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col space-y-1.5 text-center sm:text-start', className)}\n {...props}\n />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-2', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn('text-lg font-semibold leading-none tracking-tight text-foreground', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn('text-sm text-foreground-light', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Card, CardContent } from './card'\nimport { Badge } from './badge'\nimport { Skeleton } from './skeleton'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\n\nexport interface CommentTag {\n title: string\n probability: number\n /** CSS var name (e.g. '--chart-1') or hex color. Auto-computed from title if omitted. */\n color?: string\n}\n\n/** Palette of chart CSS var names — deterministic color assignment by tag title */\nconst TAG_COLOR_PALETTE = [\n '--chart-1',\n '--chart-2',\n '--chart-3',\n '--chart-4',\n '--chart-5',\n '--chart-6',\n '--chart-7',\n '--chart-8',\n]\n\nfunction getTagColor(title: string): string {\n let hash = 5381\n for (let i = 0; i < title.length; i++) {\n hash = (hash * 31 + title.charCodeAt(i)) >>> 0\n }\n return TAG_COLOR_PALETTE[hash % TAG_COLOR_PALETTE.length]\n}\n\nconst SENTIMENT_LABELS: Record<SupportedLocale, Record<'positive' | 'negative' | 'neutral', string>> = {\n fa: { positive: 'مثبت', negative: 'منفی', neutral: 'خنثی' },\n ar: { positive: 'إيجابي', negative: 'سلبي', neutral: 'محايد' },\n en: { positive: 'Positive', negative: 'Negative', neutral: 'Neutral' },\n}\n\nconst SENTIMENT_COLORS: Record<'positive' | 'negative' | 'neutral', string> = {\n positive: 'hsl(var(--sentiment-positive))',\n negative: 'hsl(var(--sentiment-negative))',\n neutral: 'hsl(var(--sentiment-neutral))',\n}\n\nexport interface CommentCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The comment text */\n text: string\n /** Analysis tags with probability and color */\n tags: CommentTag[]\n /** Sentiment of the comment */\n sentiment: 'positive' | 'negative' | 'neutral'\n /** Locale for number formatting and labels @default \"fa\" */\n locale?: SupportedLocale\n /** Show loading skeleton state @default false */\n isLoading?: boolean\n /** @deprecated Use `locale` instead */\n usePersianDigits?: boolean\n}\n\nconst CommentCard = React.forwardRef<HTMLDivElement, CommentCardProps>(\n ({ className, text, tags, sentiment, locale = 'fa', isLoading = false, usePersianDigits, ...props }, ref) => {\n // Deprecated prop support\n const resolvedLocale: SupportedLocale = usePersianDigits !== undefined ? (usePersianDigits ? 'fa' : 'en') : locale\n\n if (isLoading) {\n return (\n <Card ref={ref} data-slot=\"comment-card\" className={cn('h-full relative', className)} {...props}>\n <CardContent className=\"p-4 pb-8 space-y-3\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <div className=\"flex gap-2 mt-2\">\n <Skeleton className=\"h-6 w-20 rounded-full\" />\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n </div>\n </CardContent>\n </Card>\n )\n }\n\n const sentimentColor = SENTIMENT_COLORS[sentiment]\n const sentimentLabel = SENTIMENT_LABELS[resolvedLocale]?.[sentiment] ?? sentiment\n\n return (\n <Card ref={ref} data-slot=\"comment-card\" className={cn('h-full relative', className)} {...props}>\n <CardContent className=\"p-4 pb-8\">\n {/* Comment text — follows parent direction */}\n <div className=\"mb-4\">\n <span className=\"text-sm leading-relaxed text-foreground\">{text}</span>\n </div>\n\n {/* Tags — natural flex-wrap, RTL-aware */}\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {tags.map((tag, index) => {\n const colorVar = tag.color ?? getTagColor(tag.title)\n const isVar = colorVar.startsWith('--')\n const badgeStyle: React.CSSProperties = isVar\n ? {\n backgroundColor: `hsl(var(${colorVar}) / 0.12)`,\n borderColor: `hsl(var(${colorVar}) / 0.3)`,\n color: `hsl(var(${colorVar}))`,\n border: `1px solid hsl(var(${colorVar}) / 0.3)`,\n }\n : {\n backgroundColor: `${colorVar}15`,\n borderColor: `${colorVar}30`,\n color: colorVar,\n border: `1px solid ${colorVar}30`,\n }\n return (\n <Badge key={index} variant=\"secondary\" className=\"text-xs font-medium\" style={badgeStyle}>\n {tag.title} ({convertToLocalNumbers(tag.probability, resolvedLocale)}%)\n </Badge>\n )\n })}\n </div>\n\n {/* Sentiment dot — bottom end corner */}\n <div className=\"absolute bottom-3 end-3\">\n <div\n className=\"size-3 rounded-full\"\n style={{ backgroundColor: sentimentColor }}\n title={sentimentLabel}\n aria-label={sentimentLabel}\n />\n </div>\n </CardContent>\n </Card>\n )\n }\n)\nCommentCard.displayName = 'CommentCard'\n\nexport { CommentCard }\n","'use client'\n\nimport * as React from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from './alert-dialog'\n\nexport interface ConfirmDialogProps {\n /** The trigger element (button, etc.) */\n trigger?: React.ReactNode\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Dialog title */\n title?: string\n /** Dialog description */\n description: string\n /** Confirm button text */\n confirmLabel?: string\n /** Cancel button text */\n cancelLabel?: string\n /** Called when confirmed */\n onConfirm: () => void\n /** Visual variant @default \"default\" */\n variant?: 'default' | 'destructive'\n /** Optional icon. Defaults to AlertTriangle for destructive. */\n icon?: React.ReactNode\n /** Show icon @default true for destructive, false for default */\n showIcon?: boolean\n /** Locale @default \"fa\" */\n locale?: SupportedLocale\n /** Additional className for the content */\n className?: string\n}\n\nconst ConfirmDialog = React.forwardRef<React.ElementRef<typeof AlertDialogContent>, ConfirmDialogProps>(\n function ConfirmDialog(\n {\n trigger,\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n onConfirm,\n variant = 'default',\n icon,\n showIcon,\n locale = 'fa',\n className,\n },\n ref\n ) {\n const strings = getUIStrings(locale)\n const resolvedTitle = title ?? strings.areYouSure\n const resolvedConfirm = confirmLabel ?? strings.confirm\n const resolvedCancel = cancelLabel ?? strings.cancel\n const shouldShowIcon = showIcon ?? variant === 'destructive'\n\n const defaultIcon = <AlertTriangle className=\"size-5\" />\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n {trigger && <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>}\n <AlertDialogContent ref={ref} data-slot=\"confirm-dialog\" className={className}>\n <AlertDialogHeader>\n <div className=\"flex items-start gap-3\">\n {shouldShowIcon && (\n <div\n data-slot=\"confirm-dialog-icon\"\n className={cn(\n 'flex items-center justify-center shrink-0 rounded-full size-10',\n variant === 'destructive'\n ? 'bg-destructive-200 text-destructive-600'\n : 'bg-warning-200 text-warning-600'\n )}\n >\n {icon ?? defaultIcon}\n </div>\n )}\n <div>\n <AlertDialogTitle>{resolvedTitle}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </div>\n </div>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{resolvedCancel}</AlertDialogCancel>\n <AlertDialogAction\n onClick={onConfirm}\n className={cn(\n variant === 'destructive' && 'bg-destructive hover:bg-destructive-600 text-foreground-contrast'\n )}\n >\n {resolvedConfirm}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n }\n)\nConfirmDialog.displayName = 'ConfirmDialog'\n\nexport { ConfirmDialog }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto rtl:rotate-180\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nContextMenu.displayName = \"ContextMenu\"\nContextMenuTrigger.displayName = \"ContextMenuTrigger\"\nContextMenuGroup.displayName = \"ContextMenuGroup\"\nContextMenuPortal.displayName = \"ContextMenuPortal\"\nContextMenuSub.displayName = \"ContextMenuSub\"\nContextMenuRadioGroup.displayName = \"ContextMenuRadioGroup\"\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\"\nContextMenuSubContent.displayName = \"ContextMenuSubContent\"\nContextMenuContent.displayName = \"ContextMenuContent\"\nContextMenuItem.displayName = \"ContextMenuItem\"\nContextMenuCheckboxItem.displayName = \"ContextMenuCheckboxItem\"\nContextMenuRadioItem.displayName = \"ContextMenuRadioItem\"\nContextMenuLabel.displayName = \"ContextMenuLabel\"\nContextMenuSeparator.displayName = \"ContextMenuSeparator\"\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n\n","'use client'\n\nimport * as React from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Button, type ButtonProps } from './button'\n\nexport interface CopyButtonProps extends Omit<ButtonProps, 'onClick'> {\n /** The text value to copy to clipboard */\n value: string\n /** Duration in ms to show the \"copied\" state @default 2000 */\n feedbackDuration?: number\n /** Locale for aria-label and tooltip text @default \"fa\" */\n locale?: SupportedLocale\n /** Called after successful copy */\n onCopy?: () => void\n}\n\nconst CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n className,\n value,\n feedbackDuration = 2000,\n locale = 'fa',\n variant = 'ghost',\n size = 'sm',\n onCopy,\n children,\n ...props\n },\n ref\n ) => {\n const [copied, setCopied] = React.useState(false)\n const strings = getUIStrings(locale)\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Cancel pending timer on unmount\n React.useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n },\n []\n )\n\n const startFeedback = () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n setCopied(true)\n onCopy?.()\n timerRef.current = setTimeout(() => setCopied(false), feedbackDuration)\n }\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(value)\n startFeedback()\n } catch {\n // Fallback for older browsers / insecure contexts\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n const success = document.execCommand('copy')\n document.body.removeChild(textarea)\n if (success) startFeedback()\n }\n }\n\n return (\n <Button\n ref={ref}\n data-slot=\"copy-button\"\n variant={variant}\n size={size}\n className={cn('gap-1.5', className)}\n onClick={handleCopy}\n aria-label={copied ? strings.copied : strings.copy}\n {...props}\n >\n {copied ? <Check className=\"size-4 text-sentiment-positive\" /> : <Copy className=\"size-4\" />}\n {children}\n </Button>\n )\n }\n)\nCopyButton.displayName = 'CopyButton'\n\nexport { CopyButton }\n","'use client'\n\nimport * as React from 'react'\nimport { format, subDays, subMonths, subYears } from 'date-fns'\nimport { Calendar as CalendarIcon } from 'lucide-react'\nimport { DateRange } from 'react-day-picker'\n\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\n\nexport interface DatePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when date range changes\n */\n onChange?: (date: DateRange | undefined) => void\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Placeholder text\n */\n placeholder?: string\n /**\n * Additional className for the button\n */\n className?: string\n /**\n * Disabled state\n */\n disabled?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Show preset date range buttons\n */\n showPresets?: boolean\n /**\n * Selection mode: 'single' for single date, 'range' for date range\n */\n mode?: 'single' | 'range'\n /**\n * Locale for default strings\n * @default derived from usePersianCalendar\n */\n locale?: SupportedLocale\n}\n\ninterface PresetRange {\n label: string\n range: DateRange\n}\n\nfunction formatDateRange(range: DateRange | undefined, usePersianCalendar: boolean): string {\n if (!range) return ''\n\n if (usePersianCalendar) {\n // Format Persian date\n const fromDate = range.from ? new Intl.DateTimeFormat('fa-IR').format(range.from) : ''\n const toDate = range.to ? new Intl.DateTimeFormat('fa-IR').format(range.to) : ''\n\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && range.from.getTime() === range.to.getTime()\n\n if (fromDate && toDate && !isSameDate) {\n return `${fromDate} - ${toDate}`\n }\n if (fromDate) {\n return fromDate\n }\n return ''\n } else {\n // Format Gregorian date\n if (range.from) {\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && range.from.getTime() === range.to.getTime()\n\n if (range.to && !isSameDate) {\n return `${format(range.from, 'LLL dd, y')} - ${format(range.to, 'LLL dd, y')}`\n } else {\n return format(range.from, 'LLL dd, y')\n }\n }\n return ''\n }\n}\n\nconst DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n value,\n onChange,\n usePersianCalendar = false,\n placeholder,\n className,\n disabled = false,\n numberOfMonths = 2,\n showPresets = false,\n mode = 'range',\n locale,\n },\n ref\n ) => {\n const resolvedLocale = locale ?? (usePersianCalendar ? 'fa' : 'en')\n const strings = getUIStrings(resolvedLocale)\n const displayText = formatDateRange(value, usePersianCalendar)\n const defaultPlaceholder = mode === 'single' ? strings.selectDate : strings.selectDateRange\n\n // Generate preset ranges\n const getPresetRanges = (): PresetRange[] => {\n const today = new Date()\n\n if (usePersianCalendar) {\n return [\n {\n label: 'امروز',\n range: { from: today, to: today },\n },\n {\n label: 'هفته اخیر',\n range: { from: subDays(today, 6), to: today },\n },\n {\n label: 'ماه اخیر',\n range: { from: subDays(today, 29), to: today },\n },\n {\n label: 'دو هفته اخیر',\n range: { from: subDays(today, 13), to: today },\n },\n {\n label: 'شش ماه اخیر',\n range: { from: subMonths(today, 6), to: today },\n },\n {\n label: 'سال گذشته',\n range: { from: subYears(today, 1), to: today },\n },\n ]\n } else {\n return [\n {\n label: 'Today',\n range: { from: today, to: today },\n },\n {\n label: 'Last week',\n range: { from: subDays(today, 6), to: today },\n },\n {\n label: 'Last month',\n range: { from: subDays(today, 29), to: today },\n },\n {\n label: 'Last 2 weeks',\n range: { from: subDays(today, 13), to: today },\n },\n {\n label: 'Last 6 months',\n range: { from: subMonths(today, 6), to: today },\n },\n {\n label: 'Last year',\n range: { from: subYears(today, 1), to: today },\n },\n ]\n }\n }\n\n const presetRanges = showPresets ? getPresetRanges() : []\n\n const handlePresetClick = (range: DateRange) => {\n onChange?.(range)\n }\n\n return (\n <div ref={ref} data-slot=\"date-picker\" className={cn('grid gap-2', className)}>\n <Popover>\n <PopoverTrigger asChild>\n <Button\n id=\"date\"\n variant={'outline'}\n className={cn(\n 'w-full min-w-[220px] justify-start text-start font-normal',\n !value && 'text-muted-foreground'\n )}\n disabled={disabled}\n iconStart={<CalendarIcon className=\"size-4\" />}\n >\n {displayText || placeholder || defaultPlaceholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\" dir={usePersianCalendar ? 'rtl' : 'ltr'}>\n <div className=\"flex\">\n {mode === 'range' ? (\n <Calendar\n initialFocus\n mode=\"range\"\n defaultMonth={value?.from}\n selected={value}\n onSelect={onChange}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n ) : (\n <Calendar\n initialFocus\n mode=\"single\"\n defaultMonth={value?.from}\n selected={value?.from}\n onSelect={(date) => onChange?.(date ? { from: date, to: date } : undefined)}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n )}\n {showPresets && mode === 'range' && (\n <div\n className={cn(\n 'flex flex-col gap-2 border-border p-3 mt-12',\n usePersianCalendar ? 'border-e' : 'border-s'\n )}\n >\n {presetRanges.map((preset, index) => (\n <Button\n key={index}\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'justify-start text-start font-normal h-auto py-2 px-3 whitespace-nowrap',\n 'hover:bg-accent hover:text-accent-foreground'\n )}\n onClick={() => handlePresetClick(preset.range)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n }\n)\n\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\n","'use client'\n\nimport * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cn } from '@/lib/utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 rounded-md border border-overlay bg-overlay p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client'\n\nimport * as React from 'react'\nimport { CalendarIcon, ChevronDownIcon } from 'lucide-react'\nimport { type DateRange } from 'react-day-picker'\n\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Label } from './label'\nimport { formatPersianDateRange } from '@/lib/jalali-utils'\n\nexport interface DateRangePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when the date range changes\n */\n onChange?: (range: DateRange | undefined) => void\n /**\n * Label for the date range picker\n */\n label?: string\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Minimum date that can be selected\n */\n minDate?: Date\n /**\n * Maximum date that can be selected\n */\n maxDate?: Date\n /**\n * Additional class name for the trigger button\n */\n className?: string\n /**\n * Disable the date range picker\n */\n disabled?: boolean\n /**\n * Show dropdown for year/month selection\n */\n captionLayout?: 'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'\n /**\n * From year for dropdown (when captionLayout includes dropdown)\n */\n fromYear?: number\n /**\n * To year for dropdown (when captionLayout includes dropdown)\n */\n toYear?: number\n}\n\nconst DateRangePicker = React.forwardRef<HTMLDivElement, DateRangePickerProps>(\n (\n {\n value,\n onChange,\n label,\n placeholder = 'انتخاب بازه تاریخ',\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = 'label',\n fromYear,\n toYear,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString('fa-IR')} - ${range.to.toLocaleDateString('fa-IR')}`\n }\n\n return range.from.toLocaleDateString('fa-IR')\n }\n\n return (\n <div ref={ref} data-slot=\"date-range-picker\" className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor=\"date-range\" className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"date-range\"\n variant=\"outline\"\n disabled={disabled}\n iconEnd={<ChevronDownIcon className=\"size-4 opacity-50\" />}\n className={cn('justify-between font-normal min-w-64', !value && 'text-muted-foreground', className)}\n >\n {formatDateRange(value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-md\"\n />\n </PopoverContent>\n </Popover>\n </div>\n )\n }\n)\n\nDateRangePicker.displayName = 'DateRangePicker'\n\nexport { DateRangePicker }\n\n/**\n * Simplified version without label (inline usage)\n */\nexport function DateRangePickerInline({\n value,\n onChange,\n placeholder = 'انتخاب تاریخ',\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = 'label',\n fromYear,\n toYear,\n}: Omit<DateRangePickerProps, 'label'>) {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString('fa-IR')} - ${range.to.toLocaleDateString('fa-IR')}`\n }\n\n return range.from.toLocaleDateString('fa-IR')\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n iconEnd={<CalendarIcon className=\"size-4 opacity-50\" />}\n className={cn('justify-between font-normal min-w-64', !value && 'text-muted-foreground', className)}\n >\n {formatDateRange(value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-md\"\n />\n </PopoverContent>\n </Popover>\n )\n}\n\nDateRangePickerInline.displayName = 'DateRangePickerInline'\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nLabel.displayName = \"Label\"\n\nexport { Label }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-start\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nDrawer.displayName = \"Drawer\"\nDrawerTrigger.displayName = \"DrawerTrigger\"\nDrawerPortal.displayName = \"DrawerPortal\"\nDrawerClose.displayName = \"DrawerClose\"\nDrawerOverlay.displayName = \"DrawerOverlay\"\nDrawerContent.displayName = \"DrawerContent\"\nDrawerHeader.displayName = \"DrawerHeader\"\nDrawerFooter.displayName = \"DrawerFooter\"\nDrawerTitle.displayName = \"DrawerTitle\"\nDrawerDescription.displayName = \"DrawerDescription\"\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto size-4 rtl:rotate-180\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nDropdownMenu.displayName = \"DropdownMenu\"\nDropdownMenuPortal.displayName = \"DropdownMenuPortal\"\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\"\nDropdownMenuContent.displayName = \"DropdownMenuContent\"\nDropdownMenuGroup.displayName = \"DropdownMenuGroup\"\nDropdownMenuItem.displayName = \"DropdownMenuItem\"\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\"\nDropdownMenuRadioGroup.displayName = \"DropdownMenuRadioGroup\"\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\"\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\"\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\"\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\nDropdownMenuSub.displayName = \"DropdownMenuSub\"\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\"\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\"\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\ninterface EmptyProps extends React.ComponentProps<'div'> {\n /** Minimum height of the empty state container. @default \"400px\" */\n minHeight?: string\n}\n\nconst Empty = React.forwardRef<HTMLDivElement, EmptyProps>(\n ({ className, minHeight = '400px', style, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"empty\"\n className={cn(\n 'flex flex-col items-center justify-center rounded-lg border border-dashed border-border/50 bg-surface-75 dark:bg-surface-100/50 p-8 text-center',\n className\n )}\n style={{ minHeight, ...style }}\n {...props}\n />\n )\n)\n\nconst EmptyIcon = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"empty-icon\"\n className={cn(\n 'text-foreground-muted mx-auto flex size-16 items-center justify-center rounded-full bg-muted/60 [&_svg]:size-7',\n className\n )}\n {...props}\n />\n))\n\nconst EmptyTitle = React.forwardRef<HTMLHeadingElement, React.ComponentProps<'h3'>>(({ className, ...props }, ref) => (\n <h3 ref={ref} data-slot=\"empty-title\" className={cn('mt-4 text-lg font-semibold', className)} {...props} />\n))\n\nconst EmptyDescription = React.forwardRef<HTMLParagraphElement, React.ComponentProps<'p'>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"empty-description\"\n className={cn('text-muted-foreground mt-2 text-sm', className)}\n {...props}\n />\n )\n)\n\nconst EmptyAction = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"empty-action\" className={cn('mt-6', className)} {...props} />\n))\n\nEmpty.displayName = 'Empty'\nEmptyIcon.displayName = 'EmptyIcon'\nEmptyTitle.displayName = 'EmptyTitle'\nEmptyDescription.displayName = 'EmptyDescription'\nEmptyAction.displayName = 'EmptyAction'\n\nexport { Empty, EmptyIcon, EmptyTitle, EmptyDescription, EmptyAction }\n","'use client'\n\nimport * as React from 'react'\nimport { AlertCircleIcon, RefreshCwIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport type { SupportedLocale } from '@/lib/utils'\nimport { Button } from './button'\n\n/* -------------------------------------------------------------------------- */\n/* ErrorState — inline error state for data components */\n/* -------------------------------------------------------------------------- */\n\ninterface ErrorStateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Error message displayed below the icon */\n message?: string\n /** Callback to trigger a retry — when provided, shows a retry button */\n onRetry?: () => void\n /** Retry button label */\n retryLabel?: string\n /** Size variant controlling padding and icon/text scale */\n size?: 'sm' | 'md' | 'lg'\n /** Locale for default strings @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst sizeClasses = {\n sm: { icon: 'size-7', message: 'text-xs', wrapper: 'gap-1.5 py-4' },\n md: { icon: 'size-9', message: 'text-sm', wrapper: 'gap-2 py-6' },\n lg: { icon: 'size-11', message: 'text-base', wrapper: 'gap-3 py-8' },\n} as const\n\nconst ErrorState = React.forwardRef<HTMLDivElement, ErrorStateProps>(\n ({ className, message, onRetry, retryLabel, size = 'md', locale = 'fa', ...props }, ref) => {\n const strings = getUIStrings(locale)\n const resolvedMessage = message ?? strings.errorLoadingData\n const resolvedRetryLabel = retryLabel ?? strings.retry\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-slot=\"error-state\"\n className={cn(\n 'flex flex-col items-center justify-center text-center rounded-lg',\n 'bg-destructive/5 dark:bg-destructive/10',\n sizeClasses[size].wrapper,\n className\n )}\n {...props}\n >\n <div className=\"rounded-full bg-destructive/10 p-2.5\">\n <AlertCircleIcon\n aria-hidden=\"true\"\n className={cn('text-destructive-400 animate-pulse', sizeClasses[size].icon)}\n />\n </div>\n <p className={cn('text-foreground-muted max-w-xs', sizeClasses[size].message)}>{resolvedMessage}</p>\n {onRetry && (\n <Button type=\"danger\" size={size === 'lg' ? 'md' : 'sm'} onClick={onRetry} className=\"mt-2\">\n <RefreshCwIcon className=\"size-3.5 me-1.5\" aria-hidden=\"true\" />\n {resolvedRetryLabel}\n </Button>\n )}\n </div>\n )\n }\n)\nErrorState.displayName = 'ErrorState'\n\nexport { ErrorState }\nexport type { ErrorStateProps }\n","'use client'\n\nimport * as React from 'react'\nimport { useMemo } from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { Label } from './label'\nimport { Separator } from './separator'\n\nconst FieldSet = React.forwardRef<HTMLFieldSetElement, React.ComponentProps<'fieldset'>>(\n ({ className, ...props }, ref) => (\n <fieldset\n ref={ref}\n data-slot=\"field-set\"\n className={cn(\n 'flex flex-col gap-6',\n 'has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3',\n className\n )}\n {...props}\n />\n )\n)\n\nconst FieldLegend = React.forwardRef<\n HTMLLegendElement,\n React.ComponentProps<'legend'> & { variant?: 'legend' | 'label' }\n>(({ className, variant = 'legend', ...props }, ref) => (\n <legend\n ref={ref}\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-3 font-medium', 'data-[variant=legend]:text-base', 'data-[variant=label]:text-sm', className)}\n {...props}\n />\n))\n\nconst FieldGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4',\n className\n )}\n {...props}\n />\n))\n\nconst fieldVariants = cva('group/field flex w-full gap-3 data-[invalid=true]:text-destructive', {\n variants: {\n orientation: {\n vertical: ['flex-col [&>*]:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n '[&>[data-slot=field-label]]:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto',\n '@md/field-group:[&>[data-slot=field-label]]:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n})\n\nfunction Field({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn('group/field-content flex flex-1 flex-col gap-1.5 leading-snug', className)}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',\n 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4',\n 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',\n className\n )}\n {...props}\n />\n )\n}\n\nconst FieldTitle = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"field-title\"\n className={cn(\n 'flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n))\nFieldTitle.displayName = 'FieldTitle'\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance',\n 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5',\n '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'div'> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<'div'> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ms-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map((error, index) => error?.message && <li key={index}>{error.message}</li>)}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn('text-destructive text-sm font-normal', className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nFieldSet.displayName = 'FieldSet'\nFieldLegend.displayName = 'FieldLegend'\nFieldGroup.displayName = 'FieldGroup'\n// Note: displayName also set on forwardRef wrappers for DevTools clarity\nField.displayName = 'Field'\nFieldContent.displayName = 'FieldContent'\nFieldLabel.displayName = 'FieldLabel'\nFieldDescription.displayName = 'FieldDescription'\nFieldSeparator.displayName = 'FieldSeparator'\nFieldError.displayName = 'FieldError'\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport type { SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Button } from './button'\n\n/* ------------------------------ Context ---------------------------------- */\n\ninterface FilterBarContextValue {\n locale: SupportedLocale\n}\n\nconst FilterBarContext = React.createContext<FilterBarContextValue>({\n locale: 'fa',\n})\n\n/* -------------------------------- FilterBar ------------------------------- */\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Locale @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst FilterBar = React.forwardRef<HTMLDivElement, FilterBarProps>(\n ({ className, locale = 'fa', children, ...props }, ref) => {\n return (\n <FilterBarContext.Provider value={{ locale }}>\n <div ref={ref} data-slot=\"filter-bar\" className={cn('flex flex-col gap-3', className)} {...props}>\n {children}\n </div>\n </FilterBarContext.Provider>\n )\n }\n)\nFilterBar.displayName = 'FilterBar'\n\n/* ------------------------------ FilterBarRow ----------------------------- */\n\nexport interface FilterBarRowProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarRow = React.forwardRef<HTMLDivElement, FilterBarRowProps>(({ className, children, ...props }, ref) => (\n <div ref={ref} data-slot=\"filter-bar-row\" className={cn('flex flex-wrap items-center gap-2', className)} {...props}>\n {children}\n </div>\n))\nFilterBarRow.displayName = 'FilterBarRow'\n\n/* ----------------------------- FilterBarActions -------------------------- */\n\nexport interface FilterBarActionsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarActions = React.forwardRef<HTMLDivElement, FilterBarActionsProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"filter-bar-actions\"\n className={cn('flex items-center gap-2 ms-auto', className)}\n {...props}\n >\n {children}\n </div>\n )\n)\nFilterBarActions.displayName = 'FilterBarActions'\n\n/* ----------------------------- FilterBarClear ---------------------------- */\n\nexport interface FilterBarClearProps {\n /** Callback when clear is clicked */\n onClear: () => void\n className?: string\n children?: React.ReactNode\n}\n\nconst FilterBarClear = React.forwardRef<HTMLButtonElement, FilterBarClearProps>(\n ({ className, onClear, children }, ref) => {\n const { locale } = React.useContext(FilterBarContext)\n const strings = getUIStrings(locale)\n\n return (\n <Button\n ref={ref}\n data-slot=\"filter-bar-clear\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClear}\n iconStart={<X className=\"size-3.5\" />}\n className={cn('gap-1.5 text-foreground-lighter hover:text-foreground', className)}\n >\n {children ?? strings.clearFilters}\n </Button>\n )\n }\n)\nFilterBarClear.displayName = 'FilterBarClear'\n\n/* ----------------------------- FilterBarActiveFilters --------------------- */\n\nexport interface FilterBarActiveFiltersProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FilterBarActiveFilters = React.forwardRef<HTMLDivElement, FilterBarActiveFiltersProps>(\n ({ className, children, ...props }, ref) => {\n const { locale } = React.useContext(FilterBarContext)\n const strings = getUIStrings(locale)\n const hasChildren = React.Children.count(children) > 0\n\n if (!hasChildren) return null\n\n return (\n <div\n ref={ref}\n data-slot=\"filter-bar-active-filters\"\n className={cn('flex flex-wrap items-center gap-2', className)}\n aria-label={strings.activeFilters}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nFilterBarActiveFilters.displayName = 'FilterBarActiveFilters'\n\nexport { FilterBar, FilterBarRow, FilterBarActions, FilterBarClear, FilterBarActiveFilters }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nFormField.displayName = \"FormField\"\nFormItem.displayName = \"FormItem\"\nFormLabel.displayName = \"FormLabel\"\nFormControl.displayName = \"FormControl\"\nFormDescription.displayName = \"FormDescription\"\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nHoverCard.displayName = \"HoverCard\"\nHoverCardTrigger.displayName = \"HoverCardTrigger\"\nHoverCardContent.displayName = \"HoverCardContent\"\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport { Input, type InputProps } from './input'\n\nexport interface InputWithIconProps extends InputProps {\n /** Icon rendered at the start (inline-start, respects RTL) */\n startIcon?: React.ReactNode\n /** Icon rendered at the end (inline-end) */\n endIcon?: React.ReactNode\n /** className for the outer wrapper div (for layout/sizing) */\n wrapperClassName?: string\n}\n\nconst InputWithIcon = React.forwardRef<HTMLInputElement, InputWithIconProps>(\n ({ className, wrapperClassName, startIcon, endIcon, type, ...props }, ref) => {\n const isLtrType = type === 'email' || type === 'url' || type === 'tel' || type === 'number' || type === 'password'\n return (\n <div\n data-slot=\"input-with-icon\"\n dir={isLtrType ? 'ltr' : undefined}\n className={cn('relative flex items-center', wrapperClassName)}\n >\n {startIcon && (\n <div\n data-slot=\"input-start-icon\"\n className=\"pointer-events-none absolute start-3 flex items-center text-foreground-lighter\"\n >\n {startIcon}\n </div>\n )}\n <Input ref={ref} type={type} className={cn(startIcon && 'ps-9', endIcon && 'pe-9', className)} {...props} />\n {endIcon && (\n <div\n data-slot=\"input-end-icon\"\n className=\"pointer-events-none absolute end-3 flex items-center text-foreground-lighter\"\n >\n {endIcon}\n </div>\n )}\n </div>\n )\n }\n)\nInputWithIcon.displayName = 'InputWithIcon'\n\nexport { InputWithIcon }\n","'use client'\n\nimport * as React from 'react'\nimport { X } from 'lucide-react'\nimport { type VariantProps, cva } from 'class-variance-authority'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Badge } from './badge'\n\nconst tagInputVariants = cva(\n cn(\n 'flex min-h-[34px] w-full flex-wrap gap-1.5 rounded-md border border-control bg-foreground/[.026] px-3 py-1.5 text-sm text-foreground',\n 'transition-colors duration-150',\n 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:text-foreground-muted disabled:opacity-50'\n ),\n {\n variants: {\n variant: {\n default: '',\n secondary: 'bg-surface-200',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface TagInputProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n VariantProps<typeof tagInputVariants> {\n value?: string[]\n defaultValue?: string[]\n onChange?: (value: string[]) => void\n placeholder?: string\n disabled?: boolean\n maxTags?: number\n /** Optional prefix shown on each tag badge (e.g. \"#\" for hashtags). Value is stored WITHOUT the prefix. */\n prefix?: string\n /** Locale for sr-only remove label @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst TagInput = React.forwardRef<HTMLDivElement, TagInputProps>(\n (\n {\n className,\n variant,\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder,\n disabled,\n maxTags,\n prefix = '',\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const strings = getUIStrings(locale)\n const [value, setValue] = React.useState<string[]>(controlledValue ?? defaultValue ?? [])\n const [inputValue, setInputValue] = React.useState('')\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (controlledValue !== undefined) setValue(controlledValue)\n }, [controlledValue])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n // Strip leading prefix if user typed it (e.g. typed \"#tag\" in a hashtag input)\n const raw = prefix ? inputValue.trim().replace(new RegExp(`^${escapeRegex(prefix)}`), '') : inputValue.trim()\n if (raw && !value.includes(raw)) {\n if (maxTags && value.length >= maxTags) return\n const next = [...value, raw]\n if (controlledValue === undefined) setValue(next)\n onChange?.(next)\n setInputValue('')\n }\n } else if (e.key === 'Backspace' && !inputValue && value.length > 0) {\n const next = value.slice(0, -1)\n if (controlledValue === undefined) setValue(next)\n onChange?.(next)\n }\n }\n\n const removeTag = (tag: string) => {\n const next = value.filter((t) => t !== tag)\n if (controlledValue === undefined) setValue(next)\n onChange?.(next)\n inputRef.current?.focus()\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"tag-input\"\n className={cn(tagInputVariants({ variant }), className)}\n onClick={() => inputRef.current?.focus()}\n {...props}\n >\n {value.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"gap-1 pe-1 ps-2 h-6 text-xs font-medium\">\n {prefix}\n {tag}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n removeTag(tag)\n }}\n className=\"rounded-full outline-none ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-colors\"\n disabled={disabled}\n >\n <X className=\"size-3 text-muted-foreground\" />\n <span className=\"sr-only\">\n {strings.remove} {tag}\n </span>\n </button>\n </Badge>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-transparent outline-none placeholder:text-foreground-muted min-w-[80px] text-sm leading-4\"\n placeholder={value.length === 0 ? placeholder : undefined}\n disabled={disabled}\n />\n </div>\n )\n }\n)\nTagInput.displayName = 'TagInput'\n\nfunction escapeRegex(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nexport { TagInput, tagInputVariants }\n","'use client'\n\n// HashtagInput is TagInput with prefix=\"#\"\n// Stored values do NOT include the \"#\" — it is added only for display.\nexport { tagInputVariants as hashtagInputVariants } from './tag-input'\nexport type { TagInputProps as HashtagInputProps } from './tag-input'\n\nimport * as React from 'react'\nimport { TagInput, type TagInputProps } from './tag-input'\n\nconst HashtagInput = React.forwardRef<HTMLDivElement, TagInputProps>((props, ref) => (\n <TagInput ref={ref} prefix=\"#\" data-slot=\"hashtag-input\" {...props} />\n))\nHashtagInput.displayName = 'HashtagInput'\n\nexport { HashtagInput }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Input, InputProps } from './input'\nimport { Textarea } from './textarea'\n\ntype InputGroupContextValue = {\n dir?: 'ltr' | 'rtl'\n}\n\nconst InputGroupContext = React.createContext<InputGroupContextValue>({})\n\nfunction useInputGroup() {\n return React.useContext(InputGroupContext)\n}\n\ninterface InputGroupProps extends React.ComponentProps<'div'> {\n /**\n * Direction of the input group.\n * Use \"ltr\" for URL, email, tel, or other LTR-only content.\n * @default undefined (inherits from parent)\n */\n dir?: 'ltr' | 'rtl'\n}\n\nfunction InputGroup({ className, dir, ...props }: InputGroupProps) {\n const contextValue = React.useMemo(() => ({ dir }), [dir])\n\n return (\n <InputGroupContext.Provider value={contextValue}>\n <div\n data-slot=\"input-group\"\n role=\"group\"\n dir={dir}\n className={cn(\n // Base styles - aligned with Input component\n 'group/input-group relative flex w-full items-center rounded-md border border-control bg-foreground/[.026] transition-colors duration-150 outline-none',\n 'h-9 min-w-0 has-[>textarea]:h-auto',\n\n // Variants based on alignment.\n 'has-[>[data-align=inline-start]]:[&>input]:ps-2',\n 'has-[>[data-align=inline-end]]:[&>input]:pe-2',\n 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3',\n 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3',\n\n // Focus state - aligned with Input component\n 'has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-offset-2 has-[[data-slot=input-group-control]:focus-visible]:ring-offset-background',\n\n // Error state - aligned with Input component\n 'has-[[data-slot][aria-invalid=true]]:bg-destructive-200 has-[[data-slot][aria-invalid=true]]:border-destructive-400',\n\n className\n )}\n {...props}\n />\n </InputGroupContext.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n 'inline-start':\n 'order-first ps-3 has-[>button]:[margin-inline-start:-0.45rem] has-[>kbd]:[margin-inline-start:-0.35rem]',\n 'inline-end':\n 'order-last pe-3 has-[>button]:[margin-inline-end:-0.45rem] has-[>kbd]:[margin-inline-end:-0.35rem]',\n 'block-start':\n 'order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5',\n 'block-end': 'order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return\n }\n e.currentTarget.parentElement?.querySelector('input')?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva('text-sm shadow-none flex gap-2 items-center', {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: 'h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n})\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({ className, type, size, dir: dirProp, ...props }: InputProps) {\n const { dir: contextDir } = useInputGroup()\n\n // URL, email, tel, number inputs should be LTR (unless explicitly overridden)\n const isLTRType =\n type === 'url' ||\n type === 'email' ||\n type === 'tel' ||\n type === 'number' ||\n type === 'password' ||\n props.inputMode === 'numeric'\n\n // Priority: explicit dir prop > context dir > auto-detect based on type\n const dir = dirProp ?? contextDir ?? (isLTRType ? 'ltr' : undefined)\n\n return (\n <Input\n data-slot=\"input-group-control\"\n type={type}\n size={size}\n dir={dir}\n className={cn(\n 'flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent',\n // For LTR inputs inside RTL pages, align text to left\n dir === 'ltr' && 'text-start',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent',\n className\n )}\n {...props}\n />\n )\n}\n\nInputGroup.displayName = 'InputGroup'\nInputGroupAddon.displayName = 'InputGroupAddon'\nInputGroupButton.displayName = 'InputGroupButton'\nInputGroupText.displayName = 'InputGroupText'\nInputGroupInput.displayName = 'InputGroupInput'\nInputGroupTextarea.displayName = 'InputGroupTextarea'\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(\n 'flex field-sizing-content min-h-16 w-full rounded-md border border-control bg-foreground/[.026] px-3 py-2 text-sm text-foreground placeholder:text-foreground-muted',\n 'transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-[invalid=true]:bg-destructive-200 dark:aria-[invalid=true]:bg-destructive/5 aria-[invalid=true]:border-destructive-400 dark:aria-[invalid=true]:border-destructive-default aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive',\n className\n )}\n {...props}\n />\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","'use client'\n\nimport * as React from 'react'\nimport { OTPInput, OTPInputContext } from 'input-otp'\nimport { MinusIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction InputOTP({\n className,\n containerClassName,\n dir = 'ltr',\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <div dir={dir ?? 'ltr'}>\n <OTPInput\n data-slot=\"input-otp\"\n dir={dir ?? 'ltr'}\n containerClassName={cn('flex items-center gap-2 has-disabled:opacity-50', containerClassName)}\n className={cn('disabled:cursor-not-allowed', className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"input-otp-group\" dir=\"ltr\" className={cn('flex items-center', className)} {...props} />\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<'div'> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n 'data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive bg-surface-75 dark:bg-surface-200 border-border relative flex size-9 items-center justify-center border-e border-y text-sm transition-all outline-none first:rounded-s-md first:border-s last:rounded-e-md data-[active=true]:z-10 data-[active=true]:ring-[3px]',\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" dir=\"ltr\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nInputOTP.displayName = 'InputOTP'\nInputOTPGroup.displayName = 'InputOTPGroup'\nInputOTPSlot.displayName = 'InputOTPSlot'\nInputOTPSeparator.displayName = 'InputOTPSeparator'\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn, formatNumber, formatRelativeTime, formatAbsoluteTime, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Avatar, AvatarImage, AvatarFallback } from './avatar'\nimport { Button } from './button'\nimport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from './carousel'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\nimport { Icons } from '@/icons'\nimport { ImageOff } from 'lucide-react'\nimport { Skeleton } from './skeleton'\n\n// Types\nexport type MediaType = 'image' | 'video' | 'carousel'\nexport type AspectRatioType = '16:9' | '9:16' | '1:1' | '4:5' | '5:4'\n\nexport interface MediaItem {\n type: 'image' | 'video'\n url: string\n aspectRatio?: AspectRatioType\n}\n\nexport interface PostStats {\n likes?: number\n comments?: number\n views?: number\n shares?: number\n}\n\nexport type NumberFormat = 'exact' | 'short'\nexport type TimeFormat = 'absolute' | 'relative'\n\nexport interface InstagramProfileInfo {\n username: string\n fullName?: string\n profilePicture?: string\n avatarUrl?: string\n}\n\nexport interface InstagramPostProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof instagramPostVariants> {\n // Direction\n dir?: 'rtl' | 'ltr'\n\n // Media\n media?: MediaItem[]\n mediaType?: MediaType\n postType?: 'image' | 'video' | 'carousel'\n\n // Caption\n caption?: string\n showCaption?: boolean\n\n // Stats\n stats?: PostStats\n numberFormat?: NumberFormat\n showLikes?: boolean\n showComments?: boolean\n showViews?: boolean\n showShares?: boolean\n\n // Time\n publishTime?: Date | string | number\n timeFormat?: TimeFormat\n\n // Profile\n profile?: InstagramProfileInfo\n showProfile?: boolean\n avatarUrl?: string\n\n // Actions\n showActions?: boolean\n /** Show loading skeleton state */\n isLoading?: boolean\n onCommentAnalyzer?: () => void\n onBooster?: () => void\n onAIAnalysis?: () => void\n onOpenInstagram?: () => void\n instagramUrl?: string\n\n // Disable individual action buttons\n disableCommentAnalyzer?: boolean\n disableBooster?: boolean\n disableAIAnalysis?: boolean\n disableOpenInstagram?: boolean\n\n // Placeholder\n placeholderText?: string\n\n // Localization\n /** Locale for UI strings @default 'fa' */\n locale?: SupportedLocale\n /** Text for \"show more\" button @default \"بیشتر\" */\n showMoreText?: string\n /** Text for \"show less\" button @default \"کمتر\" */\n showLessText?: string\n}\n\n// Variants\nconst instagramPostVariants = cva('relative border bg-background-surface-100', {\n variants: {\n variant: {\n vertical: 'w-full max-w-sm rounded-lg overflow-hidden',\n horizontal: 'w-full flex flex-row items-stretch min-h-[200px] overflow-hidden',\n },\n },\n defaultVariants: {\n variant: 'vertical',\n },\n})\n\n// Media Component\ninterface InstagramPostMediaProps {\n media?: MediaItem[]\n mediaType?: MediaType\n variant?: 'vertical' | 'horizontal'\n placeholderText?: string\n locale?: SupportedLocale\n}\n\nfunction InstagramPostMedia({\n media,\n mediaType,\n variant = 'vertical',\n placeholderText,\n locale = 'fa',\n}: InstagramPostMediaProps) {\n const t = getUIStrings(locale)\n const resolvedPlaceholder = placeholderText ?? t.noMediaAvailable\n const [imageError, setImageError] = React.useState<Record<string, boolean>>({})\n\n const handleImageError = (url: string) => {\n setImageError((prev) => ({ ...prev, [url]: true }))\n }\n\n const renderPlaceholder = () => (\n <div className=\"w-full h-full flex items-center justify-center bg-muted/10 dark:bg-muted/5\">\n <ImageOff className=\"size-12 text-muted-foreground/50\" />\n </div>\n )\n\n if (!media || media.length === 0) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center bg-muted/30',\n variant === 'vertical'\n ? // Instagram vertical post standard: 4:5 ratio (1080×1350px)\n 'w-full'\n : 'w-[20%] shrink-0 h-full min-h-[200px] -my-[1px] -ms-[1px]'\n )}\n style={variant === 'vertical' ? { aspectRatio: '4/5' } : undefined}\n >\n <div className=\"text-center p-4\">\n <ImageOff className=\"size-12 mx-auto mb-2 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{resolvedPlaceholder}</p>\n </div>\n </div>\n )\n }\n\n // Single image\n if (mediaType === 'image' || (media.length === 1 && media[0].type === 'image')) {\n const item = media[0]\n if (variant === 'horizontal') {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className=\"block w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Vertical: use Instagram standard aspect ratio\n // Instagram supports: 1:1 (square), 4:5 (portrait), 1.91:1 (landscape)\n // For portrait/vertical posts: always use 4:5 to match Instagram standard\n const aspectRatio = item.aspectRatio || '4:5'\n const isPortrait = aspectRatio === '9:16' || aspectRatio === '4:5'\n\n // Instagram portrait standard is 4:5 (not 9:16)\n const instagramRatio = isPortrait ? '4/5' : getAspectRatioCSS(aspectRatio)\n\n return (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: instagramRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className={cn(\n 'block w-full h-full transition-transform duration-300 group-hover:scale-[1.02]',\n // For portrait images: object-contain to show full image like Instagram\n // For square/landscape: object-cover\n isPortrait ? 'object-contain' : 'object-cover'\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Single video\n if (mediaType === 'video' || (media.length === 1 && media[0].type === 'video')) {\n const item = media[0]\n if (variant === 'horizontal') {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className=\"block w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n const aspectRatio = item.aspectRatio || '4:5'\n const isPortrait = aspectRatio === '9:16' || aspectRatio === '4:5'\n const instagramRatio = isPortrait ? '4/5' : getAspectRatioCSS(aspectRatio)\n return (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: instagramRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt=\"Post media\"\n className={cn(\n 'block w-full h-full transition-transform duration-300 group-hover:scale-[1.02]',\n isPortrait ? 'object-contain' : 'object-cover'\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n )\n }\n\n // Carousel\n if (mediaType === 'carousel' || media.length > 1) {\n if (variant === 'horizontal') {\n return (\n <div className=\"w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30\">\n <Carousel className=\"w-full h-full\">\n <CarouselContent className=\"h-full\">\n {media.map((item, index) => (\n <CarouselItem key={index} className=\"h-full\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt={`Post media ${index + 1}`}\n className=\"block w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"ms-2\" />\n <CarouselNext className=\"me-2\" />\n </Carousel>\n </div>\n )\n }\n\n return (\n <Carousel className=\"w-full\">\n <CarouselContent>\n {media.map((item, index) => {\n const itemAspect = item.aspectRatio || '4:5'\n const itemIsPortrait = itemAspect === '9:16' || itemAspect === '4:5'\n const itemRatio = itemIsPortrait ? '4/5' : getAspectRatioCSS(itemAspect)\n return (\n <CarouselItem key={index}>\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-black\"\n style={{ aspectRatio: itemRatio }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\n {imageError[item.url] ? (\n renderPlaceholder()\n ) : (\n <img\n src={item.url}\n alt={`Post media ${index + 1}`}\n className={cn(\n 'block w-full h-full transition-transform duration-300',\n itemIsPortrait ? 'object-contain' : 'object-cover'\n )}\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n </CarouselItem>\n )\n })}\n </CarouselContent>\n <CarouselPrevious className=\"ms-2\" />\n <CarouselNext className=\"me-2\" />\n </Carousel>\n )\n }\n\n return null\n}\n\nfunction getAspectRatioCSS(ratio: AspectRatioType): string {\n const ratios: Record<AspectRatioType, string> = {\n '16:9': '16/9',\n '9:16': '4/5', // Instagram standard portrait\n '1:1': '1/1',\n '4:5': '4/5',\n '5:4': '5/4',\n }\n return ratios[ratio]\n}\n\n// Caption Component\ninterface InstagramPostCaptionProps {\n caption?: string\n maxLines?: number\n variant?: 'vertical' | 'horizontal'\n showMoreText?: string\n showLessText?: string\n locale?: SupportedLocale\n}\n\nfunction InstagramPostCaption({\n caption,\n maxLines = 3,\n variant = 'vertical',\n showMoreText,\n showLessText,\n locale = 'fa',\n}: InstagramPostCaptionProps) {\n const t = getUIStrings(locale)\n const resolvedShowMore = showMoreText ?? t.showMore\n const resolvedShowLess = showLessText ?? t.showLess\n const [isExpanded, setIsExpanded] = React.useState(false)\n const [shouldShowMore, setShouldShowMore] = React.useState(false)\n const textRef = React.useRef<HTMLParagraphElement>(null)\n const captionId = React.useId()\n\n React.useEffect(() => {\n if (variant === 'vertical' && textRef.current && !isExpanded) {\n setShouldShowMore(textRef.current.scrollHeight > textRef.current.clientHeight)\n } else {\n setShouldShowMore(false)\n }\n }, [caption, isExpanded, variant])\n\n if (!caption) return null\n\n const parsedCaption = parseCaption(caption)\n\n return (\n <div className={cn('px-4 py-2', variant === 'horizontal' && 'overflow-visible')}>\n <p\n ref={textRef}\n id={captionId}\n className={cn(\n 'text-sm leading-relaxed text-start',\n !isExpanded && variant === 'vertical' && 'line-clamp-3'\n // No line clamp for horizontal variant - show full text\n )}\n style={\n !isExpanded && variant === 'vertical'\n ? {\n display: '-webkit-box',\n WebkitLineClamp: maxLines,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }\n : undefined\n }\n >\n {parsedCaption.map((part, index) => {\n if (part.type === 'hashtag') {\n return (\n <span key={index} className=\"text-brand-link hover:underline cursor-pointer\">\n {part.text}\n </span>\n )\n }\n if (part.type === 'mention') {\n return (\n <span key={index} className=\"text-brand-link hover:underline cursor-pointer font-medium\">\n {part.text}\n </span>\n )\n }\n return <span key={index}>{part.text}</span>\n })}\n </p>\n {shouldShowMore && variant === 'vertical' && (\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-controls={captionId}\n className=\"text-sm text-muted-foreground hover:text-foreground mt-1\"\n >\n {isExpanded ? resolvedShowLess : resolvedShowMore}\n </button>\n )}\n </div>\n )\n}\n\ninterface CaptionPart {\n type: 'text' | 'hashtag' | 'mention'\n text: string\n}\n\nfunction parseCaption(text: string): CaptionPart[] {\n const parts: CaptionPart[] = []\n // Match hashtags (#word) and mentions (@word)\n const regex = /(#[\\w\\u0600-\\u06FF]+)|(@[\\w\\u0600-\\u06FF]+)/g\n let lastIndex = 0\n let match\n\n while ((match = regex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n parts.push({\n type: 'text',\n text: text.slice(lastIndex, match.index),\n })\n }\n\n // Add matched hashtag or mention\n const matchedText = match[0]\n parts.push({\n type: matchedText.startsWith('#') ? 'hashtag' : 'mention',\n text: matchedText,\n })\n\n lastIndex = regex.lastIndex\n }\n\n // Add remaining text\n if (lastIndex < text.length) {\n parts.push({\n type: 'text',\n text: text.slice(lastIndex),\n })\n }\n\n return parts.length > 0 ? parts : [{ type: 'text', text }]\n}\n\n// Stats Component\ninterface InstagramPostStatsProps {\n stats?: PostStats\n numberFormat?: NumberFormat\n showLikes?: boolean\n showComments?: boolean\n showViews?: boolean\n showShares?: boolean\n postType?: 'image' | 'video' | 'carousel'\n locale?: SupportedLocale\n}\n\nfunction InstagramPostStats({\n stats,\n numberFormat = 'exact',\n showLikes = true,\n showComments = true,\n showViews = true,\n showShares = true,\n postType,\n locale = 'fa',\n}: InstagramPostStatsProps) {\n const t = getUIStrings(locale)\n\n if (!stats) return null\n\n const items: Array<{\n label: string\n labelEn: string\n value: string\n exactValue: string\n icon: React.ComponentType<{ className?: string }>\n isPostType?: boolean\n }> = []\n\n if (showLikes && stats.likes !== undefined) {\n items.push({\n label: t.likesCount,\n labelEn: 'likes',\n value: formatNumber(stats.likes, numberFormat),\n exactValue: formatNumber(stats.likes, 'exact'),\n icon: Icons.heart,\n })\n }\n\n if (showComments && stats.comments !== undefined) {\n items.push({\n label: t.commentsCount,\n labelEn: 'comments',\n value: formatNumber(stats.comments, numberFormat),\n exactValue: formatNumber(stats.comments, 'exact'),\n icon: Icons.messageCircle,\n })\n }\n\n if (showViews && stats.views !== undefined) {\n items.push({\n label: t.viewsCount,\n labelEn: 'views',\n value: formatNumber(stats.views, numberFormat),\n exactValue: formatNumber(stats.views, 'exact'),\n icon: Icons.eye,\n })\n }\n\n if (showShares && stats.shares !== undefined) {\n items.push({\n label: t.sharesCount,\n labelEn: 'shares',\n value: formatNumber(stats.shares, numberFormat),\n exactValue: formatNumber(stats.shares, 'exact'),\n icon: Icons.share,\n })\n }\n\n // Get post type info\n const getPostTypeInfo = () => {\n if (postType === 'image') {\n return { icon: Icons.image, label: t.postTypePhoto, labelEn: 'photo' }\n } else if (postType === 'video') {\n return { icon: Icons.video, label: t.postTypeVideo, labelEn: 'video' }\n } else if (postType === 'carousel') {\n return { icon: Icons.images, label: t.postTypeCarousel, labelEn: 'carousel' }\n }\n return null\n }\n\n const postTypeInfo = getPostTypeInfo()\n\n // Add post type after shares\n if (postTypeInfo) {\n items.push({\n label: t.postTypeLabel,\n labelEn: postTypeInfo.labelEn,\n value: postTypeInfo.label,\n exactValue: postTypeInfo.label,\n icon: postTypeInfo.icon,\n isPostType: true,\n })\n }\n\n if (items.length === 0) return null\n\n return (\n <TooltipProvider>\n <div\n className=\"px-4 py-2 flex items-center gap-4 text-sm text-foreground-light border-t border-border-default\"\n dir=\"ltr\"\n >\n {items.map((item, index) => {\n const Icon = item.icon\n return (\n <Tooltip key={index}>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1.5 cursor-default\">\n <Icon className=\"size-4\" />\n <span className={item.isPostType ? 'text-xs' : ''}>{item.value}</span>\n <span className=\"sr-only\">{item.labelEn}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p>\n {item.label}: {item.exactValue}\n </p>\n </TooltipContent>\n </Tooltip>\n )\n })}\n </div>\n </TooltipProvider>\n )\n}\n\n// Profile Component\ninterface InstagramPostProfileProps {\n profile?: InstagramProfileInfo\n variant?: 'vertical' | 'horizontal'\n avatarUrl?: string\n}\n\nfunction InstagramPostProfile({ profile, variant = 'vertical', avatarUrl }: InstagramPostProfileProps) {\n if (!profile) return null\n\n const displayAvatarUrl = avatarUrl || profile.avatarUrl || profile.profilePicture\n\n return (\n <div\n className={cn(\n 'flex items-center gap-3 px-4 pt-3',\n variant === 'vertical' && 'pb-0',\n variant === 'horizontal' && 'pb-2'\n )}\n >\n <Avatar className=\"size-10\">\n {displayAvatarUrl && <AvatarImage src={displayAvatarUrl} alt={profile.username} />}\n <AvatarFallback>{profile.username.charAt(0).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{profile.username}</div>\n {profile.fullName && <div className=\"text-xs text-muted-foreground truncate\">{profile.fullName}</div>}\n </div>\n </div>\n )\n}\n\n// Actions Component\ninterface InstagramPostActionsProps {\n showActions?: boolean\n onCommentAnalyzer?: () => void\n onBooster?: () => void\n onAIAnalysis?: () => void\n onOpenInstagram?: () => void\n instagramUrl?: string\n // Disable individual buttons\n disableCommentAnalyzer?: boolean\n disableBooster?: boolean\n disableAIAnalysis?: boolean\n disableOpenInstagram?: boolean\n locale?: SupportedLocale\n}\n\nfunction InstagramPostActions({\n showActions = true,\n onCommentAnalyzer,\n onBooster,\n onAIAnalysis,\n onOpenInstagram,\n instagramUrl,\n disableCommentAnalyzer = false,\n disableBooster = false,\n disableAIAnalysis = false,\n disableOpenInstagram = false,\n locale = 'fa',\n}: InstagramPostActionsProps) {\n const t = getUIStrings(locale)\n\n if (!showActions) return null\n\n const handleOpenInstagram = () => {\n if (onOpenInstagram) {\n onOpenInstagram()\n } else if (instagramUrl) {\n window.open(instagramUrl, '_blank', 'noopener,noreferrer')\n }\n }\n\n return (\n <TooltipProvider>\n <div className=\"absolute top-2 end-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity z-10\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'size-8 bg-background/80 backdrop-blur-sm hover:bg-background',\n disableCommentAnalyzer && 'opacity-40 cursor-not-allowed pointer-events-none'\n )}\n onClick={disableCommentAnalyzer ? undefined : onCommentAnalyzer}\n disabled={disableCommentAnalyzer}\n aria-label=\"Comment Analyzer\"\n >\n <Icons.messageCircle className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableCommentAnalyzer ? t.commentAnalysisDisabled : t.commentAnalysis}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'size-8 bg-background/80 backdrop-blur-sm hover:bg-background',\n disableBooster && 'opacity-40 cursor-not-allowed pointer-events-none'\n )}\n onClick={disableBooster ? undefined : onBooster}\n disabled={disableBooster}\n aria-label=\"Booster\"\n >\n <Icons.rocket className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableBooster ? t.boosterDisabled : t.booster}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'size-8 bg-background/80 backdrop-blur-sm hover:bg-background',\n disableAIAnalysis && 'opacity-40 cursor-not-allowed pointer-events-none'\n )}\n onClick={disableAIAnalysis ? undefined : onAIAnalysis}\n disabled={disableAIAnalysis}\n aria-label=\"AI Analysis\"\n >\n <Icons.sparkles className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableAIAnalysis ? t.aiAnalysisDisabled : t.aiAnalysis}</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'size-8 bg-background/80 backdrop-blur-sm hover:bg-background',\n disableOpenInstagram && 'opacity-40 cursor-not-allowed pointer-events-none'\n )}\n onClick={disableOpenInstagram ? undefined : handleOpenInstagram}\n disabled={disableOpenInstagram}\n aria-label=\"Open on Instagram\"\n >\n <Icons.instagram className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{disableOpenInstagram ? t.openOnInstagramDisabled : t.openOnInstagram}</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n )\n}\n\n// Time Component\ninterface InstagramPostTimeProps {\n publishTime?: Date | string | number\n timeFormat?: TimeFormat\n}\n\nfunction InstagramPostTime({ publishTime, timeFormat = 'relative' }: InstagramPostTimeProps) {\n if (!publishTime) return null\n\n const relativeTime = formatRelativeTime(publishTime)\n const absoluteTime = formatAbsoluteTime(publishTime)\n\n if (timeFormat === 'absolute') {\n return (\n <div className=\"px-4 py-1 text-xs text-muted-foreground flex items-center gap-1.5\" dir=\"ltr\">\n <Icons.clock className=\"size-3\" />\n <span>{absoluteTime}</span>\n </div>\n )\n }\n\n return (\n <div\n className=\"px-4 py-1 text-xs text-muted-foreground cursor-default flex items-center gap-1.5\"\n title={absoluteTime}\n dir=\"ltr\"\n >\n <Icons.clock className=\"size-3\" />\n <span>{relativeTime}</span>\n </div>\n )\n}\n\n// Main Component\nconst InstagramPost = React.forwardRef<HTMLDivElement, InstagramPostProps>(\n (\n {\n className,\n variant = 'vertical',\n media,\n mediaType,\n postType,\n caption,\n showCaption = true,\n stats,\n numberFormat = 'exact',\n showLikes = true,\n showComments = true,\n showViews = true,\n showShares = true,\n publishTime,\n timeFormat = 'relative',\n profile,\n showProfile = true,\n avatarUrl,\n showActions = true,\n isLoading,\n onCommentAnalyzer,\n onBooster,\n onAIAnalysis,\n onOpenInstagram,\n instagramUrl,\n disableCommentAnalyzer = false,\n disableBooster = false,\n disableAIAnalysis = false,\n disableOpenInstagram = false,\n placeholderText,\n locale = 'fa',\n showMoreText,\n showLessText,\n dir,\n ...props\n },\n ref\n ) => {\n if (isLoading) {\n return (\n <div ref={ref} className={cn(instagramPostVariants({ variant }), className)} {...props}>\n <div className={cn('flex gap-3 p-3', variant === 'horizontal' ? 'flex-row' : 'flex-col')}>\n {variant === 'horizontal' ? (\n <Skeleton className=\"w-[20%] shrink-0 rounded-md\" style={{ aspectRatio: '4/5' }} />\n ) : (\n <Skeleton className=\"w-full rounded-md\" style={{ aspectRatio: '4/5' }} />\n )}\n <div className=\"flex flex-col gap-2 flex-1\">\n <div className=\"flex items-center gap-2\">\n <Skeleton shape=\"circle\" className=\"size-10\" />\n <div className=\"flex flex-col gap-1\">\n <Skeleton shape=\"line\" className=\"w-24\" />\n <Skeleton shape=\"line\" className=\"w-16\" />\n </div>\n </div>\n <Skeleton shape=\"line\" className=\"w-full\" />\n <Skeleton shape=\"line\" className=\"w-3/4\" />\n </div>\n </div>\n </div>\n )\n }\n\n const isVertical = variant === 'vertical'\n\n return (\n <div\n ref={ref}\n data-slot=\"instagram-post\"\n role=\"article\"\n aria-label={caption ? `Instagram post: ${caption.substring(0, 80)}` : 'Instagram post'}\n className={cn(instagramPostVariants({ variant }), className, 'group', isVertical && 'flex flex-col h-full')}\n dir={dir}\n {...props}\n >\n {showActions && (\n <InstagramPostActions\n showActions={showActions}\n onCommentAnalyzer={onCommentAnalyzer}\n onBooster={onBooster}\n onAIAnalysis={onAIAnalysis}\n onOpenInstagram={onOpenInstagram}\n instagramUrl={instagramUrl}\n disableCommentAnalyzer={disableCommentAnalyzer}\n disableBooster={disableBooster}\n disableAIAnalysis={disableAIAnalysis}\n disableOpenInstagram={disableOpenInstagram}\n locale={locale}\n />\n )}\n\n {isVertical ? (\n <>\n {showProfile && (\n <InstagramPostProfile profile={profile} variant={variant || 'vertical'} avatarUrl={avatarUrl} />\n )}\n <div className=\"mt-2.5\">\n <InstagramPostMedia\n media={media}\n mediaType={mediaType}\n variant={variant || 'vertical'}\n placeholderText={placeholderText}\n locale={locale}\n />\n </div>\n <InstagramPostStats\n stats={stats}\n numberFormat={numberFormat}\n showLikes={showLikes}\n showComments={showComments}\n showViews={showViews}\n showShares={showShares}\n postType={postType}\n locale={locale}\n />\n {showCaption && (\n <InstagramPostCaption\n caption={caption}\n variant={variant || 'vertical'}\n showMoreText={showMoreText}\n showLessText={showLessText}\n locale={locale}\n />\n )}\n <div className=\"mt-auto w-full\">\n <InstagramPostTime publishTime={publishTime} timeFormat={timeFormat} />\n </div>\n </>\n ) : (\n <>\n <InstagramPostMedia\n media={media}\n mediaType={mediaType}\n variant={variant || 'horizontal'}\n placeholderText={placeholderText}\n locale={locale}\n />\n <div className=\"flex-1 flex flex-col min-w-0 overflow-hidden rounded-e-lg\">\n {showProfile && (\n <InstagramPostProfile profile={profile} variant={variant || 'horizontal'} avatarUrl={avatarUrl} />\n )}\n <InstagramPostStats\n stats={stats}\n numberFormat={numberFormat}\n showLikes={showLikes}\n showComments={showComments}\n showViews={showViews}\n showShares={showShares}\n postType={postType}\n />\n {showCaption && (\n <InstagramPostCaption\n caption={caption}\n variant={variant || 'horizontal'}\n showMoreText={showMoreText}\n showLessText={showLessText}\n locale={locale}\n />\n )}\n <div className=\"mt-auto w-full\">\n <InstagramPostTime publishTime={publishTime} timeFormat={timeFormat} />\n </div>\n </div>\n </>\n )}\n </div>\n )\n }\n)\n\nInstagramPost.displayName = 'InstagramPost'\n\nexport { InstagramPost, instagramPostVariants }\n","'use client'\n\nimport * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\n/* -------------------------------------------------------------------------- */\n/* TooltipContent */\n/* -------------------------------------------------------------------------- */\n\ninterface TooltipContentProps extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> {\n /** Visual variant */\n variant?: 'default' | 'light' | 'error'\n /** Size */\n size?: 'sm' | 'md'\n /** Show arrow/caret pointing to trigger */\n showArrow?: boolean\n}\n\nconst TooltipContent = React.forwardRef<React.ElementRef<typeof TooltipPrimitive.Content>, TooltipContentProps>(\n ({ className, variant = 'default', size = 'sm', showArrow = false, sideOffset = 4, children, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md shadow-dropdown',\n 'animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n // Variant styles\n variant === 'default' && 'border bg-alternative text-foreground',\n variant === 'light' && 'border bg-surface-100 text-foreground shadow-dropdown',\n variant === 'error' && 'border border-destructive-500 bg-destructive-200 text-destructive-600',\n // Size\n size === 'sm' && 'px-3 py-1.5 text-xs',\n size === 'md' && 'px-4 py-2 text-sm',\n className\n )}\n {...props}\n >\n {children}\n {showArrow && (\n <TooltipPrimitive.Arrow\n className={cn(\n 'fill-current',\n variant === 'default' && 'text-alternative',\n variant === 'light' && 'text-surface-100',\n variant === 'error' && 'text-destructive-200'\n )}\n width={8}\n height={4}\n />\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n)\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nfunction Kbd({ className, ...props }: React.ComponentProps<'kbd'>) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n 'bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none',\n \"[&_svg:not([class*='size-'])]:size-3\",\n '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction KbdGroup({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"kbd-group\" className={cn('inline-flex items-center gap-1', className)} {...props} />\n}\n\nKbd.displayName = 'Kbd'\nKbdGroup.displayName = 'KbdGroup'\n\nexport { Kbd, KbdGroup }\n","'use client'\n\nimport * as React from 'react'\nimport * as MenubarPrimitive from '@radix-ui/react-menubar'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Menubar({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn('bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs', className)}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({ ...props }: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n}\n\nfunction MenubarTrigger({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = 'start',\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md',\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({ className, children, ...props }: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 text-sm font-medium data-[inset]:ps-8', className)}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn('text-muted-foreground ms-auto text-xs tracking-widest', className)}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:ps-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto size-4 rtl:rotate-180\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\n className\n )}\n {...props}\n />\n )\n}\n\nMenubar.displayName = 'Menubar'\nMenubarMenu.displayName = 'MenubarMenu'\nMenubarGroup.displayName = 'MenubarGroup'\nMenubarPortal.displayName = 'MenubarPortal'\nMenubarRadioGroup.displayName = 'MenubarRadioGroup'\nMenubarTrigger.displayName = 'MenubarTrigger'\nMenubarContent.displayName = 'MenubarContent'\nMenubarItem.displayName = 'MenubarItem'\nMenubarCheckboxItem.displayName = 'MenubarCheckboxItem'\nMenubarRadioItem.displayName = 'MenubarRadioItem'\nMenubarLabel.displayName = 'MenubarLabel'\nMenubarSeparator.displayName = 'MenubarSeparator'\nMenubarShortcut.displayName = 'MenubarShortcut'\nMenubarSub.displayName = 'MenubarSub'\nMenubarSubTrigger.displayName = 'MenubarSubTrigger'\nMenubarSubContent.displayName = 'MenubarSubContent'\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ExternalLink, Info } from 'lucide-react'\nimport { format } from 'date-fns'\nimport { Card } from './card'\nimport { Skeleton } from './skeleton'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { formatJalaliDate, toPersianDigits } from '@/lib/jalali-utils'\n\ninterface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Show loading state\n */\n isLoading?: boolean\n}\n\ninterface MetricCardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Optional link URL\n */\n href?: string\n}\n\ninterface MetricCardLabelProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * Tooltip text to display on hover\n */\n tooltip?: string\n /**\n * Optional icon to display before the label text\n */\n icon?: React.ReactNode\n}\n\ninterface MetricCardDifferentialProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'positive' | 'negative'\n /** Optional sign to display (\"+\", \"-\"). Rendered after the value, dir=ltr. */\n sign?: '+' | '-'\n}\n\ninterface MetricCardSparklineProps {\n /**\n * Array of data points for the sparkline\n */\n data: Array<{ value: number; timestamp: string }>\n /**\n * Key to use for the value in data objects\n */\n dataKey: string\n /**\n * Locale for number and date formatting\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * @default \"fa\"\n */\n locale?: SupportedLocale\n /**\n * @deprecated Use `locale=\"fa\"` instead\n */\n usePersianCalendar?: boolean\n /**\n * Additional className\n */\n className?: string\n}\n\nconst MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n ({ className, isLoading, children, ...props }, ref) => {\n if (isLoading) {\n return (\n <Card ref={ref} className={cn('py-4 space-y-3', className)} {...props}>\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-8 w-16\" />\n <Skeleton className=\"h-12 w-full\" />\n </Card>\n )\n }\n\n return (\n <Card ref={ref} data-slot=\"metric-card\" className={cn('py-4 space-y-3', className)} {...props}>\n {children}\n </Card>\n )\n }\n)\nMetricCard.displayName = 'MetricCard'\n\nconst MetricCardHeader = React.forwardRef<HTMLDivElement, MetricCardHeaderProps>(\n ({ className, href, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('flex px-4 items-center justify-between gap-2', className)} {...props}>\n {children}\n {href && (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground-lighter hover:text-foreground transition-colors\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n <span className=\"sr-only\">باز کردن لینک</span>\n </a>\n )}\n </div>\n )\n }\n)\nMetricCardHeader.displayName = 'MetricCardHeader'\n\nconst MetricCardLabel = React.forwardRef<HTMLHeadingElement, MetricCardLabelProps>(\n ({ className, tooltip, icon, children, ...props }, ref) => {\n const label = (\n <h3\n ref={ref}\n className={cn('text-xs font-normal text-foreground-light uppercase tracking-wide', className)}\n {...props}\n >\n <span className=\"flex items-center gap-1.5\">\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <span>{children}</span>\n </span>\n </h3>\n )\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1.5 cursor-help\">\n {label}\n <Info className=\"h-3.5 w-3.5 text-foreground-lighter\" />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n }\n\n return label\n }\n)\nMetricCardLabel.displayName = 'MetricCardLabel'\n\nconst MetricCardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('flex px-4 items-baseline gap-3', className)} {...props}>\n {children}\n </div>\n )\n }\n)\nMetricCardContent.displayName = 'MetricCardContent'\n\nconst MetricCardValue = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('text-3xl font-semibold tabular-nums', className)} {...props}>\n {children}\n </div>\n )\n }\n)\nMetricCardValue.displayName = 'MetricCardValue'\n\nconst MetricCardDifferential = React.forwardRef<HTMLDivElement, MetricCardDifferentialProps>(\n ({ className, variant = 'positive', sign, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'text-sm font-medium tabular-nums flex items-center gap-0.5',\n variant === 'positive' ? 'text-brand-600' : 'text-destructive-600',\n className\n )}\n {...props}\n >\n <span>{children}</span>\n {sign && (\n <span className=\"inline-block\" dir=\"ltr\">\n {sign}\n </span>\n )}\n </div>\n )\n }\n)\nMetricCardDifferential.displayName = 'MetricCardDifferential'\n\nconst MetricCardSparkline = React.forwardRef<HTMLDivElement, MetricCardSparklineProps>(\n ({ data, dataKey, locale = 'fa', usePersianCalendar, className }, ref) => {\n const isPersian = locale === 'fa' || (usePersianCalendar ?? false)\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null)\n const [tooltipPosition, setTooltipPosition] = React.useState({ x: 0, y: 0 })\n const containerRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => containerRef.current!)\n\n const gradientId = React.useId()\n\n if (!data || data.length === 0) return null\n\n // Calculate SVG path for sparkline\n const values = data.map((item) => item[dataKey as keyof typeof item] as number)\n const timestamps = data.map((item) => new Date(item.timestamp))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const range = max - min || 1\n\n const width = 400\n const height = 60\n\n // Create step chart path (horizontal then vertical)\n const points = values.map((value, index) => {\n const x = (index / (values.length - 1)) * width\n const y = height - ((value - min) / range) * height\n return { x, y, value, timestamp: timestamps[index] }\n })\n\n // For step chart, we don't need separate segments array\n // We'll use points directly and calculate segment position on hover\n\n // Build step path: move horizontally first, then vertically\n let pathData = `M ${points[0].x},${points[0].y}`\n for (let i = 1; i < points.length; i++) {\n const prevPoint = points[i - 1]\n const currentPoint = points[i]\n // Draw horizontal line to current x\n pathData += ` L ${currentPoint.x},${prevPoint.y}`\n // Draw vertical line to current y\n pathData += ` L ${currentPoint.x},${currentPoint.y}`\n }\n\n // Build area path for gradient fill\n let areaPath = pathData\n // Close the path by going to bottom right, then bottom left\n areaPath += ` L ${points[points.length - 1].x},${height}`\n areaPath += ` L ${points[0].x},${height}`\n areaPath += ` Z`\n\n // Check if trend is positive or negative\n const isPositive = values[values.length - 1] >= values[0]\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current) return\n\n const rect = containerRef.current.getBoundingClientRect()\n const mouseX = e.clientX - rect.left\n const relativeX = (mouseX / rect.width) * width\n\n // Find which segment the mouse is over\n // In step chart, segment i is the horizontal line from points[i] to points[i+1] at height points[i].y\n let closestSegmentIndex = 0\n let minDistance = Infinity\n\n for (let i = 0; i < points.length - 1; i++) {\n const segmentCenterX = (points[i].x + points[i + 1].x) / 2\n const distance = Math.abs(segmentCenterX - relativeX)\n if (distance < minDistance) {\n minDistance = distance\n closestSegmentIndex = i\n }\n }\n\n setHoveredIndex(closestSegmentIndex)\n\n // Calculate tooltip position based on segment center\n const segmentCenterX = (points[closestSegmentIndex].x + points[closestSegmentIndex + 1].x) / 2\n const pointX = (segmentCenterX / width) * rect.width\n setTooltipPosition({\n x: pointX,\n y: (points[closestSegmentIndex].y / height) * rect.height,\n })\n }\n\n const handleMouseLeave = () => {\n setHoveredIndex(null)\n }\n\n // Format date based on locale\n const formatDate = (date: Date): string => {\n if (isPersian) {\n // Format as Persian date: \"24 دی\" (only date, no time)\n const jalaliDate = formatJalaliDate(date, 'd MMMM')\n return toPersianDigits(jalaliDate)\n } else {\n // Format as Gregorian date: \"Dec 24\" (only date, no time)\n return format(date, 'MMM d')\n }\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('relative w-full h-12', className)}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <svg\n role=\"img\"\n aria-label=\"نمودار روند\"\n width=\"100%\"\n height=\"100%\"\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className=\"overflow-visible\"\n >\n {/* Gradient definition */}\n <defs>\n <linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop\n offset=\"0%\"\n stopColor=\"currentColor\"\n stopOpacity=\"0.3\"\n className={cn(isPositive ? 'text-brand-600' : 'text-destructive-600')}\n />\n <stop\n offset=\"100%\"\n stopColor=\"currentColor\"\n stopOpacity=\"0\"\n className={cn(isPositive ? 'text-brand-600' : 'text-destructive-600')}\n />\n </linearGradient>\n </defs>\n\n {/* Area fill with gradient */}\n <path d={areaPath} fill={`url(#${gradientId})`} />\n\n {/* Step line */}\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"miter\"\n strokeLinecap=\"square\"\n className={cn(isPositive ? 'text-brand-600' : 'text-destructive-600')}\n />\n\n {/* Highlight hovered point */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <>\n {/* Vertical line indicator */}\n <line\n x1={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y1=\"0\"\n x2={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y2={height}\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeDasharray=\"2,2\"\n className=\"text-foreground-lighter opacity-50\"\n />\n {/* Circle at the point - white with colored center */}\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"5\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(isPositive ? 'text-brand-600' : 'text-destructive-600')}\n />\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"3\"\n className={cn('fill-current', isPositive ? 'text-brand-600' : 'text-destructive-600')}\n />\n </>\n )}\n </svg>\n\n {/* Tooltip */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <div\n className=\"absolute z-50 pointer-events-none\"\n style={{\n left: `${tooltipPosition.x + 8}px`,\n top: `${tooltipPosition.y - 40}px`,\n }}\n >\n <div className=\"bg-background-surface-100 border border-border-default rounded-md shadow-lg px-2 py-1.5\">\n <div className=\"text-xs text-foreground-lighter\">{formatDate(points[hoveredIndex].timestamp)}</div>\n <div className=\"text-xs font-medium tabular-nums mt-0.5\">\n {points[hoveredIndex].value.toLocaleString(isPersian ? 'fa-IR' : 'en-US')}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nMetricCardSparkline.displayName = 'MetricCardSparkline'\n\nexport {\n MetricCard,\n MetricCardHeader,\n MetricCardLabel,\n MetricCardContent,\n MetricCardValue,\n MetricCardDifferential,\n MetricCardSparkline,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst NativeSelect = React.forwardRef<HTMLSelectElement, React.ComponentProps<'select'>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-50\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n ref={ref}\n data-slot=\"native-select\"\n className={cn(\n // Base styles - aligned with Input component\n 'flex h-9 w-full min-w-0 appearance-none rounded-md border border-control bg-foreground/[.026] px-3 py-2 pe-9 text-sm text-foreground',\n // Placeholder and selection\n 'placeholder:text-foreground-muted selection:bg-primary selection:text-primary-foreground',\n // Focus state - aligned with Input component\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n // Disabled state\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-foreground-muted',\n // Error state - aligned with Input component\n 'aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive',\n // Transitions\n 'transition-colors duration-150',\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"pointer-events-none absolute top-1/2 end-3 size-4 -translate-y-1/2 text-foreground-muted select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n }\n)\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<'option'>) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({ className, ...props }: React.ComponentProps<'optgroup'>) {\n return <optgroup data-slot=\"native-select-optgroup\" className={cn(className)} {...props} />\n}\n\nNativeSelect.displayName = 'NativeSelect'\nNativeSelectOption.displayName = 'NativeSelectOption'\nNativeSelectOptGroup.displayName = 'NativeSelectOptGroup'\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","'use client'\n\nimport * as React from 'react'\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'\nimport { cva } from 'class-variance-authority'\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1'\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}\n >\n {children}{' '}\n <ChevronDownIcon\n className=\"relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-end]:rtl:slide-in-from-left-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=from-start]:rtl:slide-in-from-right-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-end]:rtl:slide-out-to-left-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion=to-start]:rtl:slide-out-to-right-52 top-0 start-0 w-full p-2 pe-2.5 md:absolute md:w-auto',\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full start-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n className\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nNavigationMenu.displayName = 'NavigationMenu'\nNavigationMenuList.displayName = 'NavigationMenuList'\nNavigationMenuItem.displayName = 'NavigationMenuItem'\nNavigationMenuTrigger.displayName = 'NavigationMenuTrigger'\nNavigationMenuContent.displayName = 'NavigationMenuContent'\nNavigationMenuViewport.displayName = 'NavigationMenuViewport'\nNavigationMenuLink.displayName = 'NavigationMenuLink'\nNavigationMenuIndicator.displayName = 'NavigationMenuIndicator'\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ArrowRight } from 'lucide-react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\n\nexport interface PageHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Page title */\n title: string\n /** Optional description below title */\n description?: string\n /** Back button callback. When provided, shows a back arrow. */\n onBack?: () => void\n /** Actions slot (buttons, etc.) rendered at inline-end */\n actions?: React.ReactNode\n /** Breadcrumb slot rendered above the title */\n breadcrumbs?: React.ReactNode\n /** Locale @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(\n ({ className, title, description, onBack, actions, breadcrumbs, locale = 'fa', ...props }, ref) => {\n const strings = getUIStrings(locale)\n\n return (\n <div ref={ref} data-slot=\"page-header\" className={cn('flex flex-col gap-1', className)} {...props}>\n {breadcrumbs && (\n <div data-slot=\"page-header-breadcrumbs\" className=\"mb-2\">\n {breadcrumbs}\n </div>\n )}\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n aria-label={strings.goBack}\n className={cn(\n 'flex items-center justify-center shrink-0 rounded-md',\n 'size-8 text-foreground-lighter hover:text-foreground hover:bg-surface-200',\n 'transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <ArrowRight className=\"size-5 ltr:rotate-180\" />\n </button>\n )}\n <div className=\"min-w-0\">\n <h1 data-slot=\"page-header-title\" className=\"text-xl font-bold text-foreground truncate sm:text-2xl\">\n {title}\n </h1>\n {description && (\n <p data-slot=\"page-header-description\" className=\"text-sm text-foreground-lighter mt-1 line-clamp-2\">\n {description}\n </p>\n )}\n </div>\n </div>\n {actions && (\n <div data-slot=\"page-header-actions\" className=\"flex items-center gap-2 shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\nPageHeader.displayName = 'PageHeader'\n\nexport { PageHeader }\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Button, buttonVariants } from './button'\n\ntype Direction = 'ltr' | 'rtl'\n\nconst PaginationDirectionContext = React.createContext<Direction>('rtl')\n\nfunction usePaginationDirection() {\n return React.useContext(PaginationDirectionContext)\n}\n\nfunction Pagination({ className, dir, children, ...props }: React.ComponentProps<'nav'>) {\n const resolvedDir = (dir as Direction) ?? 'rtl'\n\n return (\n <PaginationDirectionContext.Provider value={resolvedDir}>\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n dir={resolvedDir}\n className={cn('mx-auto flex w-full justify-center not-prose', className)}\n {...props}\n >\n {children}\n </nav>\n </PaginationDirectionContext.Provider>\n )\n}\n\nfunction PaginationContent({ className, ...props }: React.ComponentProps<'ul'>) {\n const dir = usePaginationDirection()\n\n return (\n <ul\n data-slot=\"pagination-content\"\n dir={dir}\n className={cn('flex flex-row items-center gap-1 list-none', className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, 'size'> &\n React.ComponentProps<'a'>\n\nfunction PaginationLink({ className, isActive, size = 'icon', dir, ...props }: PaginationLinkProps) {\n const contextDir = usePaginationDirection()\n const linkDir = dir ?? (contextDir === 'rtl' ? 'rtl' : 'ltr')\n\n return (\n <a\n aria-current={isActive ? 'page' : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n dir={linkDir}\n className={cn(\n buttonVariants({\n variant: 'outline',\n size,\n }),\n // Remove underline from links\n 'no-underline',\n // Active state styling with green color\n isActive && [\n 'border-brand-500 bg-brand/10 text-brand-600',\n 'dark:border-brand-600 dark:bg-brand/10 dark:text-brand-400',\n 'pointer-events-none',\n ],\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({ className, ...props }: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === 'rtl'\n const strings = getUIStrings(isRTL ? 'fa' : 'en')\n // In RTL, previous uses ChevronRight (→). In LTR, previous uses ChevronLeft (←)\n const Icon = isRTL ? ChevronRightIcon : ChevronLeftIcon\n\n return (\n <PaginationLink\n aria-label={strings.goToPreviousPage}\n size=\"default\"\n className={cn('gap-1 ps-2.5 pe-2.5 no-underline flex items-center', className)}\n dir=\"ltr\"\n {...props}\n >\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">{strings.previous}</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({ className, ...props }: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === 'rtl'\n const strings = getUIStrings(isRTL ? 'fa' : 'en')\n // In RTL, next uses ChevronLeft (←). In LTR, next uses ChevronRight (→)\n const Icon = isRTL ? ChevronLeftIcon : ChevronRightIcon\n\n return (\n <PaginationLink\n aria-label={strings.goToNextPage}\n size=\"default\"\n className={cn('gap-1 ps-2.5 pe-2.5 no-underline flex items-center', className)}\n dir=\"ltr\"\n {...props}\n >\n {isRTL ? (\n <>\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">{strings.next}</span>\n </>\n ) : (\n <>\n <span className=\"hidden sm:inline no-underline\">{strings.next}</span>\n <Icon className=\"size-4\" />\n </>\n )}\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn('flex size-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nPagination.displayName = 'Pagination'\nPaginationContent.displayName = 'PaginationContent'\nPaginationItem.displayName = 'PaginationItem'\nPaginationLink.displayName = 'PaginationLink'\nPaginationPrevious.displayName = 'PaginationPrevious'\nPaginationNext.displayName = 'PaginationNext'\nPaginationEllipsis.displayName = 'PaginationEllipsis'\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from './pagination'\n\nexport interface PaginationControlledProps {\n /**\n * شماره صفحه فعلی (شروع از 1)\n */\n currentPage: number\n /**\n * تعداد کل صفحات\n */\n totalPages: number\n /**\n * تابع callback برای تغییر صفحه\n */\n onPageChange: (page: number) => void\n /**\n * تعداد صفحات نمایش داده شده در هر طرف صفحه فعلی\n * @default 1\n */\n siblingCount?: number\n /**\n * نمایش دکمه‌های اول و آخر\n * @default false\n */\n showFirstLast?: boolean\n /**\n * نمایش دکمه‌های قبلی و بعدی\n * @default true\n */\n showPrevNext?: boolean\n /**\n * نمایش ellipsis برای صفحات مخفی\n * @default true\n */\n showEllipsis?: boolean\n /**\n * کلاس‌های اضافی\n */\n className?: string\n /**\n * زبان برای تبدیل اعداد و جهت متن\n * @default \"fa\"\n */\n locale?: SupportedLocale\n}\n\n/**\n * کامپوننت صفحه‌بندی با props استاندارد\n *\n * @example\n * ```tsx\n * <PaginationControlled\n * currentPage={2}\n * totalPages={10}\n * onPageChange={(page) => console.log(page)}\n * />\n * ```\n */\nconst PaginationControlled = React.forwardRef<HTMLElement, PaginationControlledProps>(\n (\n {\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n showEllipsis = true,\n className,\n locale = 'fa',\n },\n ref\n ) => {\n const isRTL = locale === 'fa' || locale === 'ar'\n const localizeNumber = (n: number) => convertToLocalNumbers(String(n), locale)\n\n const handlePageChange = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const generatePageNumbers = () => {\n const pages: (number | 'ellipsis')[] = []\n const totalNumbers = siblingCount * 2 + 5 // siblingCount on each side + current + first + last + 2 ellipsis\n const totalBlocks = totalNumbers + 2 // +2 for first and last\n\n if (totalPages <= totalBlocks) {\n // Show all pages if total pages is less than or equal to total blocks\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1\n\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n const leftRange: number[] = []\n for (let i = 1; i <= leftItemCount; i++) {\n leftRange.push(i)\n }\n pages.push(...leftRange)\n if (showEllipsis) pages.push('ellipsis')\n pages.push(totalPages)\n } else if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push('ellipsis')\n const rightItemCount = 3 + 2 * siblingCount\n const rightRange: number[] = []\n for (let i = totalPages - rightItemCount + 1; i <= totalPages; i++) {\n rightRange.push(i)\n }\n pages.push(...rightRange)\n } else if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push('ellipsis')\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i)\n }\n if (showEllipsis) pages.push('ellipsis')\n pages.push(totalPages)\n }\n }\n\n return pages\n }\n\n const pageNumbers = generatePageNumbers()\n\n // Don't show first/last if they're already in pageNumbers\n const showFirstButton = showFirstLast && !pageNumbers.includes(1) && currentPage > 1\n const showLastButton = showFirstLast && !pageNumbers.includes(totalPages) && currentPage < totalPages\n\n return (\n <Pagination ref={ref} data-slot=\"pagination-controlled\" className={cn(className)} dir={isRTL ? 'rtl' : 'ltr'}>\n <PaginationContent>\n {showFirstButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(1)\n }}\n >\n {localizeNumber(1)}\n </PaginationLink>\n </PaginationItem>\n )}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage - 1)\n }}\n className={currentPage === 1 ? 'pointer-events-none opacity-50' : ''}\n />\n </PaginationItem>\n )}\n\n {pageNumbers.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis />\n </PaginationItem>\n )\n }\n\n return (\n <PaginationItem key={page}>\n <PaginationLink\n href=\"#\"\n isActive={page === currentPage}\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(page)\n }}\n >\n {localizeNumber(page)}\n </PaginationLink>\n </PaginationItem>\n )\n })}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage + 1)\n }}\n className={currentPage === totalPages ? 'pointer-events-none opacity-50' : ''}\n />\n </PaginationItem>\n )}\n\n {showLastButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(totalPages)\n }}\n >\n {localizeNumber(totalPages)}\n </PaginationLink>\n </PaginationItem>\n )}\n </PaginationContent>\n </Pagination>\n )\n }\n)\n\nPaginationControlled.displayName = 'PaginationControlled'\n\nexport { PaginationControlled }\n","'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { cn, formatNumber } from '@/lib/utils'\nimport { Skeleton } from './skeleton'\nimport { Avatar, AvatarImage, AvatarFallback } from './avatar'\n\nconst profileCardVariants = cva('flex flex-col items-center rounded-lg shadow-sm transition-colors', {\n variants: {\n variant: {\n default: 'bg-surface-100 border border-border',\n dark: 'bg-surface-200 border border-border',\n transparent: 'bg-transparent border border-border',\n },\n size: {\n sm: 'p-4 gap-1.5',\n md: 'p-6 gap-2',\n lg: 'p-8 gap-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n})\n\nexport interface ProfileCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نام کامل کاربر\n */\n name: string\n /**\n * نام کاربری (username)\n */\n username: string\n /**\n * آدرس تصویر پروفایل\n */\n avatarSrc?: string\n /**\n * متن جایگزین برای تصویر\n */\n avatarAlt?: string\n /**\n * حروف اولیه برای fallback (اختیاری)\n */\n initials?: string\n /**\n * تعداد فالوورها\n */\n followers?: number\n /**\n * آیکون فالوور\n */\n followersIcon?: React.ReactNode\n /**\n * تابع کلیک روی کارت\n */\n onCardClick?: () => void\n /**\n * استایل حاشیه آواتار\n */\n avatarBorderVariant?: 'gold' | 'primary' | 'none'\n /**\n * اندازه کامپوننت\n */\n size?: 'sm' | 'md' | 'lg'\n /**\n * رنگ پس‌زمینه\n */\n variant?: 'default' | 'dark' | 'transparent'\n /**\n * نمایش حالت بارگذاری\n * Show loading skeleton state\n */\n isLoading?: boolean\n}\n\nconst ProfileCard = React.forwardRef<HTMLDivElement, ProfileCardProps>(\n (\n {\n className,\n name,\n username,\n avatarSrc,\n avatarAlt,\n initials,\n followers,\n followersIcon,\n onCardClick,\n avatarBorderVariant = 'gold',\n size = 'md',\n variant = 'default',\n isLoading,\n ...props\n },\n ref\n ) => {\n if (isLoading) {\n return (\n <div ref={ref} className={cn('flex flex-col items-center gap-3 p-4', className)} {...props}>\n <Skeleton shape=\"circle\" size={size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'md'} />\n <div className=\"space-y-1.5 w-full flex flex-col items-center\">\n <Skeleton shape=\"line\" className=\"w-28\" />\n <Skeleton shape=\"line\" className=\"w-20\" />\n </div>\n </div>\n )\n }\n\n const sizeClasses = {\n sm: {\n avatar: 'size-16',\n name: 'text-sm',\n username: 'text-xs',\n followers: 'text-xs',\n iconSize: 'size-3',\n },\n md: {\n avatar: 'size-20',\n name: 'text-base',\n username: 'text-sm',\n followers: 'text-sm',\n iconSize: 'size-3.5',\n },\n lg: {\n avatar: 'size-24',\n name: 'text-lg',\n username: 'text-base',\n followers: 'text-base',\n iconSize: 'size-4',\n },\n }\n\n const currentSize = sizeClasses[size]\n\n return (\n <div\n ref={ref}\n data-slot=\"profile-card\"\n className={cn(\n profileCardVariants({ variant, size }),\n onCardClick && 'cursor-pointer hover:bg-surface-200',\n className\n )}\n onClick={onCardClick}\n role={onCardClick ? 'button' : undefined}\n aria-label={onCardClick ? `${name} (${username})` : undefined}\n tabIndex={onCardClick ? 0 : undefined}\n onKeyDown={\n onCardClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onCardClick()\n }\n }\n : undefined\n }\n {...props}\n >\n {/* Avatar with gradient border */}\n <div className=\"relative shrink-0\">\n {avatarBorderVariant === 'gold' ? (\n <div className=\"relative p-0.5 rounded-full bg-gradient-to-br from-brand-400 via-brand to-brand-400\">\n <Avatar className={cn(currentSize.avatar, 'ring-2 ring-background')}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n </div>\n ) : avatarBorderVariant === 'primary' ? (\n <Avatar className={cn(currentSize.avatar, 'ring-2 ring-offset-2 ring-offset-background ring-primary')}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n ) : (\n <Avatar className={currentSize.avatar}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n\n {/* User info - centered */}\n <div className=\"flex flex-col items-center gap-0.5 w-full\">\n <h3 className={cn('font-semibold text-foreground text-center', currentSize.name)}>{name}</h3>\n <p className={cn('text-muted-foreground text-center', currentSize.username)}>{username}</p>\n\n {followers !== undefined && (\n <div className={cn('flex items-center gap-1.5 text-muted-foreground mt-0.5', currentSize.followers)}>\n {followersIcon && <span className={cn('shrink-0', currentSize.iconSize)}>{followersIcon}</span>}\n <span className=\"font-medium\">{formatNumber(followers, 'short')}</span>\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nProfileCard.displayName = 'ProfileCard'\n\nexport { ProfileCard, profileCardVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Avatar, AvatarImage, AvatarFallback } from './avatar'\nimport { Button } from './button'\nimport { MoreVertical } from 'lucide-react'\n\nexport interface ProfileInfoProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نام کامل کاربر\n */\n name: string\n /**\n * نام کاربری (username)\n */\n username: string\n /**\n * آدرس تصویر پروفایل\n */\n avatarSrc?: string\n /**\n * متن جایگزین برای تصویر\n */\n avatarAlt?: string\n /**\n * حروف اولیه برای fallback (اختیاری)\n */\n initials?: string\n /**\n * متن نمایشی برای اطلاعات اضافی (مثل زمان)\n */\n infoText?: string\n /**\n * آیکون برای نمایش در کنار infoText\n */\n infoIcon?: React.ReactNode\n /**\n * آیکون دکمه اکشن\n */\n actionIcon?: React.ReactNode\n /**\n * تابع کلیک دکمه اکشن\n */\n onActionClick?: () => void\n /**\n * تابع کلیک روی کارت پروفایل\n */\n onProfileClick?: () => void\n /**\n * استایل حاشیه آواتار\n */\n avatarBorderVariant?: 'gold' | 'primary' | 'none'\n /**\n * اندازه کامپوننت\n */\n size?: 'sm' | 'md' | 'lg'\n /**\n * رنگ پس‌زمینه\n */\n variant?: 'default' | 'dark' | 'transparent'\n /**\n * Locale for default strings\n * @default \"fa\"\n */\n locale?: SupportedLocale\n}\n\nconst ProfileInfo = React.forwardRef<HTMLDivElement, ProfileInfoProps>(\n (\n {\n className,\n name,\n username,\n avatarSrc,\n avatarAlt,\n initials,\n infoText,\n infoIcon,\n actionIcon,\n onActionClick,\n onProfileClick,\n avatarBorderVariant = 'gold',\n size = 'md',\n variant = 'default',\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const strings = getUIStrings(locale)\n const sizeClasses = {\n sm: {\n container: 'py-3 px-4 gap-3',\n avatar: 'size-12',\n name: 'text-sm',\n username: 'text-xs',\n info: 'text-xs',\n button: 'size-7',\n },\n md: {\n container: 'py-4 px-5 gap-4',\n avatar: 'size-16',\n name: 'text-base',\n username: 'text-sm',\n info: 'text-sm',\n button: 'size-8',\n },\n lg: {\n container: 'py-5 px-6 gap-5',\n avatar: 'size-20',\n name: 'text-lg',\n username: 'text-base',\n info: 'text-base',\n button: 'size-9',\n },\n }\n\n const variantClasses = {\n default: 'bg-surface-100 border border-border',\n dark: 'bg-surface-200 border border-border',\n transparent: 'bg-transparent',\n }\n\n const borderClasses = {\n gold: 'ring-2 ring-offset-2 ring-offset-background [--tw-ring-color:conic-gradient(from_180deg,hsl(var(--brand-default)),hsl(var(--brand-400)),hsl(var(--brand-default)))]',\n primary: 'ring-2 ring-offset-2 ring-offset-background ring-primary',\n none: '',\n }\n\n const currentSize = sizeClasses[size]\n\n return (\n <div\n ref={ref}\n data-slot=\"profile-info\"\n className={cn(\n 'flex items-center justify-between rounded-lg shadow-sm transition-colors',\n variantClasses[variant],\n currentSize.container,\n onProfileClick && 'cursor-pointer hover:bg-surface-200',\n className\n )}\n onClick={onProfileClick}\n role={onProfileClick ? 'button' : undefined}\n tabIndex={onProfileClick ? 0 : undefined}\n onKeyDown={\n onProfileClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onProfileClick()\n }\n }\n : undefined\n }\n {...props}\n >\n <div className=\"flex items-center gap-4\">\n {/* Avatar with gradient border */}\n <div className=\"relative\">\n {avatarBorderVariant === 'gold' ? (\n <div className=\"relative p-0.5 rounded-full bg-gradient-to-br from-brand-400 via-brand to-brand-400\">\n <Avatar className={cn(currentSize.avatar, 'ring-2 ring-background')}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n </div>\n ) : (\n <Avatar className={cn(currentSize.avatar, borderClasses[avatarBorderVariant])}>\n <AvatarImage src={avatarSrc} alt={avatarAlt || name} />\n <AvatarFallback className=\"bg-surface-300 text-foreground font-medium\">\n {initials || name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n )}\n </div>\n\n {/* User info */}\n <div className=\"flex flex-col gap-1\">\n <h3 className={cn('font-semibold text-foreground', currentSize.name)}>{name}</h3>\n <p className={cn('text-muted-foreground', currentSize.username)}>{username}</p>\n {infoText && (\n <div className={cn('flex items-center gap-1.5 text-muted-foreground', currentSize.info)}>\n {infoIcon && <span className=\"shrink-0\">{infoIcon}</span>}\n <span className=\"font-medium\">{infoText}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Action button */}\n {(actionIcon || onActionClick) && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(currentSize.button, 'shrink-0')}\n onClick={(e) => {\n e.stopPropagation()\n onActionClick?.()\n }}\n aria-label={strings.actions}\n >\n {actionIcon ?? <MoreVertical className=\"size-4\" />}\n </Button>\n )}\n </div>\n )\n }\n)\n\nProfileInfo.displayName = 'ProfileInfo'\n\nexport { ProfileInfo }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { isRTL, engagementUiTranslations } from '@/lib/i18n'\nimport { Skeleton } from './skeleton'\nimport {\n getEngagementRanges,\n getFollowerGroup,\n getCurrentRangeIndex,\n GROUP_LABELS,\n TIER_LABELS,\n} from '@/lib/engagement-utils'\nimport { TrendingUp, Users, UserCheck, Award, Crown } from 'lucide-react'\nimport { Badge } from './badge'\n\nexport interface EngagementRateProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)\n * Current engagement rate (as decimal, e.g., 0.05710 for 5.710%)\n */\n currentRate: number\n\n /**\n * تعداد فالوورها\n * Number of followers\n */\n followers: number\n\n /**\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * Display in Persian/Arabic or English\n * @default \"fa\"\n */\n locale?: SupportedLocale\n\n /**\n * نمایش کارت اطلاعات دسته‌بندی\n * Show category information card\n * @default true\n */\n showCategoryCard?: boolean\n\n /**\n * نمایش حالت بارگذاری\n * Show loading skeleton state\n */\n isLoading?: boolean\n}\n\n// آیکون بر اساس گروه\nconst getGroupIcon = (group: string) => {\n const iconClass = 'size-12 text-primary'\n switch (group) {\n case 'nano':\n return <Users className={iconClass} />\n case 'micro':\n return <UserCheck className={iconClass} />\n case 'mid':\n return <TrendingUp className={iconClass} />\n case 'macro':\n return <Award className={iconClass} />\n case 'mega':\n return <Crown className={iconClass} />\n default:\n return <Users className={iconClass} />\n }\n}\n\n// UI translations are centralised in @/lib/i18n (engagementUiTranslations).\n\nconst EngagementRate = React.forwardRef<HTMLDivElement, EngagementRateProps>(\n ({ className, currentRate, followers, locale = 'fa', showCategoryCard = true, isLoading, ...props }, ref) => {\n const rtl = isRTL(locale)\n const [hoveredRangeIndex, setHoveredRangeIndex] = React.useState<number | null>(null)\n\n if (isLoading) {\n return (\n <div ref={ref} className={cn('space-y-4', className)} dir={rtl ? 'rtl' : 'ltr'} {...props}>\n <div className=\"text-center space-y-2\">\n <Skeleton className=\"h-10 w-24 mx-auto\" />\n <Skeleton className=\"h-6 w-16 mx-auto rounded-full\" />\n </div>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <Skeleton shape=\"line\" className=\"w-12\" />\n <Skeleton shape=\"line\" className=\"w-12\" />\n </div>\n <Skeleton className=\"h-6 w-full rounded\" />\n </div>\n </div>\n )\n }\n\n const t = engagementUiTranslations[locale]\n const tierLabels = TIER_LABELS[locale]\n\n const groupKey = getFollowerGroup(followers)\n const groupLabel = GROUP_LABELS[locale][groupKey]\n const engagementRanges = getEngagementRanges(followers, locale)\n const currentRangeIndex = getCurrentRangeIndex(currentRate, engagementRanges)\n\n // Calculate position within the current range for triangle placement\n const getTrianglePosition = () => {\n if (currentRangeIndex === -1) return 0\n\n const currentRange = engagementRanges[currentRangeIndex]\n const rangeWidth = 100 / engagementRanges.length\n const currentRatePercent = currentRate * 100\n\n const maxValue =\n currentRange.max === Infinity ? Math.max(currentRatePercent, currentRange.min + 2) : currentRange.max\n\n const positionInRange = Math.min(\n Math.max((currentRatePercent - currentRange.min) / (maxValue - currentRange.min), 0),\n 1\n )\n\n return currentRangeIndex * rangeWidth + positionInRange * rangeWidth\n }\n\n const trianglePosition = getTrianglePosition()\n const adjustedTrianglePosition = rtl ? 100 - trianglePosition : trianglePosition\n\n // Helper for follower ranges\n const formatNumber = (num: number) => {\n return convertToLocalNumbers(num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), locale)\n }\n\n const getFollowerRange = () => {\n if (followers >= 1000000) {\n return `${t.over} ${formatNumber(1000000)} ${t.followers}`\n } else if (followers >= 500000) {\n return `${formatNumber(500000)} ${t.to} ${formatNumber(1000000)} ${t.followers}`\n } else if (followers >= 100000) {\n return `${formatNumber(100000)} ${t.to} ${formatNumber(500000)} ${t.followers}`\n } else if (followers >= 10000) {\n return `${formatNumber(10000)} ${t.to} ${formatNumber(100000)} ${t.followers}`\n } else {\n return `${formatNumber(1000)} ${t.to} ${formatNumber(10000)} ${t.followers}`\n }\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"engagement-rate\"\n className={cn('space-y-4', className)}\n dir={rtl ? 'rtl' : 'ltr'}\n {...props}\n >\n {/* Main Engagement Rate Display */}\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold text-primary mb-2\">\n {convertToLocalNumbers((currentRate * 100).toFixed(3), locale)}%\n </div>\n {currentRangeIndex !== -1 && (\n <Badge\n className=\"text-sm font-medium border-0\"\n style={{\n backgroundColor: engagementRanges[currentRangeIndex].hoverColor,\n color: engagementRanges[currentRangeIndex].contrastText,\n }}\n >\n {engagementRanges[currentRangeIndex].label}\n </Badge>\n )}\n </div>\n\n {/* Engagement Rate Chart */}\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{rtl ? tierLabels.excellent : tierLabels.low}</span>\n <span>{rtl ? tierLabels.low : tierLabels.excellent}</span>\n </div>\n\n {/* Segmented Progress Bar */}\n <div\n className=\"relative\"\n role=\"progressbar\"\n aria-valuenow={parseFloat((currentRate * 100).toFixed(3))}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={\n locale === 'en'\n ? `Engagement rate: ${(currentRate * 100).toFixed(3)}%`\n : `نرخ تعامل: ${(currentRate * 100).toFixed(3)}٪`\n }\n >\n <div className=\"flex gap-1 h-6 rounded overflow-hidden\">\n {engagementRanges.map((range, index) => (\n <div\n key={index}\n className=\"flex-1 transition-all duration-300 cursor-pointer group relative\"\n style={{\n backgroundColor:\n hoveredRangeIndex === index\n ? range.hoverColor\n : index === currentRangeIndex\n ? range.color\n : 'hsl(var(--engagement-inactive))',\n }}\n title={`${range.label}: ${convertToLocalNumbers(range.display, locale)}`}\n onMouseEnter={() => setHoveredRangeIndex(index)}\n onMouseLeave={() => setHoveredRangeIndex(null)}\n />\n ))}\n </div>\n\n {/* Triangle Indicator */}\n <div\n className=\"absolute -top-1 transform -translate-x-1/2 transition-all duration-500 z-10\"\n style={{ left: `${adjustedTrianglePosition}%` }}\n >\n <svg\n width=\"20\"\n height=\"14\"\n viewBox=\"0 0 20 14\"\n className=\"fill-white dark:fill-white drop-shadow-md transition-transform duration-300\"\n >\n <path d=\"M10 14L0 0H20L10 14Z\" />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Engagement Rate Categories Information Card */}\n {showCategoryCard && (\n <div className=\"mt-6 bg-surface-100 rounded-lg border border-border p-5\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Left Column - Category Info */}\n <div className=\"flex items-center justify-center\">\n <div className=\"w-full h-full flex flex-col justify-center items-center text-center space-y-4\">\n <div className=\"mb-2\">{getGroupIcon(groupKey)}</div>\n\n <div className=\"space-y-2\">\n <p className=\"text-lg font-semibold\">{t.yourCategory}</p>\n <p className=\"text-3xl font-black text-primary\">\n {locale === 'en' ? `${groupLabel} ${t.influencer}` : `${groupLabel} ${t.influencer}`}\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <p className=\"text-base font-medium text-muted-foreground\">{getFollowerRange()}</p>\n <p className=\"text-xl font-bold\">\n ({formatNumber(followers)} {t.followers})\n </p>\n </div>\n </div>\n </div>\n\n {/* Right Column - Categories */}\n <div className=\"space-y-3\">\n <h3 className=\"text-base font-semibold mb-3\">\n {locale === 'en'\n ? `${groupLabel} ${t.influencer} ${t.criteria}`\n : `${t.criteria} ${groupLabel} ${t.influencer}`}\n </h3>\n\n <div className=\"space-y-2.5\">\n {engagementRanges.map((range, index) => {\n const isCurrentRange = index === currentRangeIndex\n\n const displayText =\n index === 0\n ? convertToLocalNumbers(`${range.min}% ${t.and}`, locale)\n : index === engagementRanges.length - 1\n ? convertToLocalNumbers(`${t.lessThan} ${range.max}%`, locale)\n : convertToLocalNumbers(`${range.min}% ${t.to} ${range.max}%`, locale)\n\n return (\n <div\n key={index}\n className={cn(\n 'flex items-center justify-between px-3 py-2.5 rounded-md border transition-all',\n !isCurrentRange && 'border-border'\n )}\n style={{\n backgroundColor: isCurrentRange ? range.colorFaded : 'transparent',\n borderColor: isCurrentRange ? range.color : undefined,\n }}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"size-2.5 rounded-full\" style={{ backgroundColor: range.color }} />\n <span\n className={cn(\n 'text-sm',\n isCurrentRange ? 'font-semibold' : 'font-medium text-muted-foreground'\n )}\n >\n {range.label}\n {isCurrentRange && (\n <span className={cn('text-xs font-normal text-muted-foreground ms-1')}>({t.you})</span>\n )}\n </span>\n </div>\n <span\n className={cn('text-sm font-semibold', !isCurrentRange && 'text-muted-foreground')}\n style={isCurrentRange ? { color: range.color } : {}}\n >\n {displayText}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\n\nEngagementRate.displayName = 'EngagementRate'\n\nexport { EngagementRate }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { getEngagementRanges, getCurrentRangeIndex, TIER_LABELS } from '@/lib/engagement-utils'\nimport { Badge } from './badge'\nimport { Skeleton } from './skeleton'\n\nexport interface EngagementRateBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)\n * Current engagement rate (as decimal, e.g., 0.05710 for 5.710%)\n */\n currentRate: number\n\n /**\n * تعداد فالوورها\n * Number of followers\n */\n followers: number\n\n /**\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * Display in Persian/Arabic or English\n * @default \"fa\"\n */\n locale?: SupportedLocale\n\n /**\n * نمایش متن راهنمای \"عالی\" و \"پایین\"\n * Show helper text \"Excellent\" and \"Low\"\n * @default true\n */\n showHelperText?: boolean\n\n /**\n * نمایش حالت بارگذاری\n * Show loading skeleton state\n * @default false\n */\n isLoading?: boolean\n}\n\nconst EngagementRateBar = React.forwardRef<HTMLDivElement, EngagementRateBarProps>(\n ({ className, currentRate, followers, locale = 'fa', showHelperText = true, isLoading = false, ...props }, ref) => {\n const isRTL = locale === 'fa' || locale === 'ar'\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null)\n\n if (isLoading) {\n return (\n <div ref={ref} className={cn('space-y-4', className)} {...props}>\n <div className=\"text-center space-y-2\">\n <Skeleton className=\"h-10 w-24 mx-auto\" />\n <Skeleton className=\"h-6 w-16 mx-auto rounded-full\" />\n </div>\n <div className=\"space-y-3\">\n {showHelperText && (\n <div className=\"flex justify-between\">\n <Skeleton className=\"h-4 w-10\" />\n <Skeleton className=\"h-4 w-10\" />\n </div>\n )}\n <Skeleton className=\"h-6 w-full rounded\" />\n </div>\n </div>\n )\n }\n const t = TIER_LABELS[locale]\n\n const engagementRanges = getEngagementRanges(followers, locale)\n const currentRangeIndex = getCurrentRangeIndex(currentRate, engagementRanges)\n\n // Calculate position within the current range for triangle placement\n const getTrianglePosition = () => {\n if (currentRangeIndex === -1) return 0\n\n const currentRange = engagementRanges[currentRangeIndex]\n const rangeWidth = 100 / engagementRanges.length\n const currentRatePercent = currentRate * 100\n\n const maxValue =\n currentRange.max === Infinity ? Math.max(currentRatePercent, currentRange.min + 2) : currentRange.max\n\n const positionInRange = Math.min(\n Math.max((currentRatePercent - currentRange.min) / (maxValue - currentRange.min), 0),\n 1\n )\n\n return currentRangeIndex * rangeWidth + positionInRange * rangeWidth\n }\n\n const trianglePosition = getTrianglePosition()\n const adjustedTrianglePosition = isRTL ? 100 - trianglePosition : trianglePosition\n\n return (\n <div\n ref={ref}\n data-slot=\"engagement-rate-bar\"\n className={cn('space-y-4', className)}\n dir={isRTL ? 'rtl' : 'ltr'}\n {...props}\n >\n {/* Main Engagement Rate Display */}\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold text-primary mb-2\">\n {convertToLocalNumbers((currentRate * 100).toFixed(3), locale)}%\n </div>\n {currentRangeIndex !== -1 && (\n <Badge\n className=\"text-sm font-medium text-white border-0\"\n style={{ backgroundColor: engagementRanges[currentRangeIndex].hoverColor }}\n >\n {engagementRanges[currentRangeIndex].label}\n </Badge>\n )}\n </div>\n\n {/* Engagement Rate Chart */}\n <div className=\"space-y-3\">\n {showHelperText && (\n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{isRTL ? t.excellent : t.low}</span>\n <span>{isRTL ? t.low : t.excellent}</span>\n </div>\n )}\n\n {/* Segmented Progress Bar */}\n <div className=\"relative\">\n <div className=\"flex gap-0.5 h-3 rounded overflow-hidden\">\n {engagementRanges.map((range, index) => (\n <div\n key={index}\n role=\"meter\"\n aria-label={range.label}\n aria-valuenow={index === currentRangeIndex ? currentRate * 100 : undefined}\n className=\"flex-1 transition-all duration-300 cursor-pointer\"\n style={{\n backgroundColor:\n hoveredIndex === index\n ? range.hoverColor\n : index === currentRangeIndex\n ? range.color\n : 'hsl(var(--engagement-inactive))',\n }}\n title={range.label}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n />\n ))}\n </div>\n\n {/* Triangle Indicator */}\n <div\n className=\"absolute -top-1.5 transform -translate-x-1/2 transition-all duration-500 z-10\"\n style={{ left: `${adjustedTrianglePosition}%` }}\n >\n <div className=\"relative\">\n {/* Border Triangle */}\n <div className=\"w-0 h-0 border-l-[10px] rotate-180 border-r-[10px] border-b-[12px] border-l-transparent border-r-transparent border-b-background transition-transform duration-300\" />\n {/* Fill Triangle */}\n <div className=\"w-0 h-0 border-l-[6px] rotate-180 border-r-[6px] border-b-[8px] border-l-transparent border-r-transparent border-b-foreground transition-transform duration-300 absolute top-[2px] left-1/2 transform -translate-x-1/2\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n)\n\nEngagementRateBar.displayName = 'EngagementRateBar'\n\nexport { EngagementRateBar }\n","'use client'\n\nimport * as React from 'react'\nimport * as ProgressPrimitive from '@radix-ui/react-progress'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst progressVariants = cva('relative w-full overflow-hidden rounded-full bg-surface-300', {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst progressIndicatorVariants = cva('h-full w-full flex-1 transition-all origin-left rtl:origin-right', {\n variants: {\n variant: {\n primary: 'bg-[hsl(var(--brand-default))]',\n secondary: 'bg-foreground',\n success: 'bg-sentiment-positive',\n warning: 'bg-warning-500',\n destructive: 'bg-destructive-500',\n },\n },\n defaultVariants: {\n variant: 'primary',\n },\n})\n\nexport interface ProgressProps\n extends\n React.ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants>,\n VariantProps<typeof progressIndicatorVariants> {\n label?: string\n showValue?: boolean\n}\n\nconst Progress = React.forwardRef<React.ElementRef<typeof ProgressPrimitive.Root>, ProgressProps>(\n ({ className, value, size, variant, label, showValue = false, ...props }, ref) => {\n const clampedValue = Math.max(0, Math.min(100, value ?? 0))\n const displayValue = `${Math.round(clampedValue)}%`\n\n return (\n <div className=\"w-full space-y-2\">\n {(label || showValue) && (\n <div className=\"flex items-center justify-between text-sm\">\n {label && <span className=\"text-foreground\">{label}</span>}\n {showValue && <span className=\"text-foreground-light font-medium\">{displayValue}</span>}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n data-slot=\"progress\"\n className={cn(progressVariants({ size }), className)}\n value={value}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `scaleX(${clampedValue / 100})` }}\n />\n </ProgressPrimitive.Root>\n </div>\n )\n }\n)\n\nProgress.displayName = 'Progress'\n\nexport { Progress }\n","'use client'\n\nimport * as React from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\nimport { CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root ref={ref} data-slot=\"radio-group\" className={cn('grid gap-3', className)} {...props} />\n))\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-control bg-control data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-all duration-150 outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-brand absolute top-1/2 start-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rtl:translate-x-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n))\n\nRadioGroup.displayName = 'RadioGroup'\nRadioGroupItem.displayName = 'RadioGroupItem'\n\nexport { RadioGroup, RadioGroupItem }\n","'use client'\n\nimport * as React from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\n\nimport { cn } from '@/lib/utils'\n\nconst RadioCards = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n columns?: number\n dir?: 'rtl' | 'ltr'\n }\n>(({ className, columns = 1, dir = 'rtl', style, children, ...props }, ref) => {\n // Build grid-template-columns via inline style — Tailwind JIT can't handle\n // dynamic class names like `grid-cols-${n}` (they are purged at build time)\n const gridStyle: React.CSSProperties =\n typeof columns === 'number' ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : {}\n\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n data-slot=\"radio-cards\"\n dir={dir}\n className={cn('grid gap-3', className)}\n style={{ ...gridStyle, ...style }}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Root>\n )\n})\nRadioCards.displayName = 'RadioCards'\n\nconst RadioCardItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-card-item\"\n className={cn(\n 'relative flex cursor-pointer rounded-lg border border-control bg-surface-100 px-4 py-3 transition-all',\n 'hover:border-brand-muted hover:bg-surface-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2',\n 'data-[state=checked]:border-brand data-[state=checked]:bg-brand/5',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Item>\n )\n})\nRadioCardItem.displayName = 'RadioCardItem'\n\nconst RadioCardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h4 ref={ref} className={cn('text-sm font-semibold leading-none', className)} {...props} />\n )\n)\nRadioCardTitle.displayName = 'RadioCardTitle'\n\nconst RadioCardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-foreground-muted', className)} {...props} />\n )\n)\nRadioCardDescription.displayName = 'RadioCardDescription'\n\nexport { RadioCards, RadioCardItem, RadioCardTitle, RadioCardDescription }\n","'use client'\n\nimport * as React from 'react'\nimport { GripVerticalIcon } from 'lucide-react'\nimport * as ResizablePrimitive from 'react-resizable-panels'\n\nimport { cn } from '@/lib/utils'\n\nfunction ResizablePanelGroup({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn('flex h-full w-full data-[panel-group-direction=vertical]:flex-col', className)}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({ ...props }: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n 'bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:start-1/2 after:w-1 after:-translate-x-1/2 rtl:after:translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:start-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90',\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border transition-colors duration-150 hover:bg-foreground-muted\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nResizablePanelGroup.displayName = 'ResizablePanelGroup'\nResizablePanel.displayName = 'ResizablePanel'\nResizableHandle.displayName = 'ResizableHandle'\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","'use client'\n\nimport * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '@/lib/utils'\n\nfunction ScrollArea({ className, children, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root data-slot=\"scroll-area\" className={cn('relative', className)} {...props}>\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none p-px transition-colors select-none',\n orientation === 'vertical' && 'h-full w-2.5 border-s border-s-transparent',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nScrollArea.displayName = 'ScrollArea'\nScrollBar.displayName = 'ScrollBar'\n\nexport { ScrollArea, ScrollBar }\n","'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { VariantProps, cva } from 'class-variance-authority'\n\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst selectTriggerVariants = cva('', {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n})\n\n// If placeholder is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value> & VariantProps<typeof selectTriggerVariants>\n>(({ placeholder, ...props }, ref) => (\n <SelectPrimitive.Value\n placeholder={typeof placeholder === 'string' ? <span>{placeholder}</span> : placeholder}\n {...props}\n ref={ref}\n />\n))\nSelectValue.displayName = SelectPrimitive.Value.displayName\n\n/** @deprecated Use selectTriggerVariants instead */\nexport const SelectTriggerVariants = selectTriggerVariants\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & VariantProps<typeof selectTriggerVariants>\n>(({ className, children, size, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n className={cn(\n 'flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200',\n 'data-[state=open]:bg-selection data-[state=open]:border-stronger',\n 'gap-2',\n '[&>span]:truncate text-start',\n selectTriggerVariants({ size }),\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 text-foreground-lighter shrink-0\" strokeWidth={1.5} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1 text-foreground-muted', className)}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1 text-foreground-muted', className)}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n data-slot=\"select-content\"\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-dropdown data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n data-slot=\"select-label\"\n className={cn('py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\n// If children is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n data-slot=\"select-item\"\n className={cn(\n 'group',\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute start-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator className=\"size-3.5 bg-foreground rounded-full flex justify-center items-center\">\n <Check className=\"size-2 text-background-overlay\" strokeWidth={6} />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>\n {typeof children === 'string' ? <span>{children}</span> : children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n data-slot=\"select-separator\"\n className={cn('-mx-1 my-1 h-px bg-border-overlay', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as SheetPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-300',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=closed]:rtl:slide-out-to-left data-[state=open]:slide-in-from-right data-[state=open]:rtl:slide-in-from-left inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=closed]:rtl:slide-out-to-right data-[state=open]:slide-in-from-left data-[state=open]:rtl:slide-in-from-right inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute top-4 end-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">بستن</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n}\n\nfunction SheetBody({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-body\" className={cn('flex-1 overflow-y-auto px-4 pb-4', className)} {...props} />\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-footer\" className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nSheet.displayName = 'Sheet'\nSheetTrigger.displayName = 'SheetTrigger'\nSheetClose.displayName = 'SheetClose'\nSheetPortal.displayName = 'SheetPortal'\nSheetOverlay.displayName = 'SheetOverlay'\nSheetContent.displayName = 'SheetContent'\nSheetHeader.displayName = 'SheetHeader'\nSheetBody.displayName = 'SheetBody'\nSheetFooter.displayName = 'SheetFooter'\nSheetTitle.displayName = 'SheetTitle'\nSheetDescription.displayName = 'SheetDescription'\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { PanelLeftIcon } from 'lucide-react'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Input } from './input'\nimport { Separator } from './separator'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet'\nimport { Skeleton } from './skeleton'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state'\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = '16rem'\nconst SIDEBAR_WIDTH_MOBILE = '18rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn('bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar, state } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n aria-expanded={state === 'expanded'}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2 md:peer-data-[variant=inset]:peer-data-[state=collapsed]:me-2',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('bg-background h-8 w-full shadow-none', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 end-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col gap-1 list-none ps-0', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pe-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button'\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? 'page' : undefined}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 end-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute end-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px rtl:-translate-x-px flex-col gap-1 border-s px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n size?: 'sm' | 'md'\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n\n","'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { MenuIcon, PanelLeftCloseIcon } from 'lucide-react'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\n\n/* -------------------------------------------------------------------------- */\n/* Constants */\n/* -------------------------------------------------------------------------- */\n\nconst NAV_RAIL_COOKIE_NAME = 'nav_panel_state'\nconst NAV_RAIL_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst NAV_RAIL_WIDTH = '3.5rem'\nconst NAV_PANEL_WIDTH = '16rem'\nconst NAV_PANEL_WIDTH_MOBILE = '18rem'\nconst NAV_RAIL_KEYBOARD_SHORTCUT = '\\\\'\n\n/* -------------------------------------------------------------------------- */\n/* Context */\n/* -------------------------------------------------------------------------- */\n\ntype NavRailContextProps = {\n activeItem: string | null\n setActiveItem: (id: string | null) => void\n panelOpen: boolean\n setPanelOpen: (open: boolean) => void\n togglePanel: (itemId: string) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n}\n\nconst NavRailContext = React.createContext<NavRailContextProps | null>(null)\n\nfunction useNavRail() {\n const context = React.useContext(NavRailContext)\n if (!context) {\n throw new Error('useNavRail must be used within a NavRailProvider.')\n }\n return context\n}\n\n/* -------------------------------------------------------------------------- */\n/* NavRailProvider */\n/* -------------------------------------------------------------------------- */\n\nfunction NavRailProvider({\n defaultActiveItem = null,\n activeItem: activeItemProp,\n onActiveItemChange,\n defaultPanelOpen = false,\n panelOpen: panelOpenProp,\n onPanelOpenChange,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultActiveItem?: string | null\n activeItem?: string | null\n onActiveItemChange?: (id: string | null) => void\n defaultPanelOpen?: boolean\n panelOpen?: boolean\n onPanelOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // Internal state for active item\n const [_activeItem, _setActiveItem] = React.useState<string | null>(defaultActiveItem)\n const activeItem = activeItemProp ?? _activeItem\n const setActiveItem = React.useCallback(\n (id: string | null) => {\n if (onActiveItemChange) {\n onActiveItemChange(id)\n } else {\n _setActiveItem(id)\n }\n },\n [onActiveItemChange]\n )\n\n // Internal state for panel open/close\n const [_panelOpen, _setPanelOpen] = React.useState(defaultPanelOpen)\n const panelOpen = panelOpenProp ?? _panelOpen\n const setPanelOpen = React.useCallback(\n (open: boolean) => {\n if (onPanelOpenChange) {\n onPanelOpenChange(open)\n } else {\n _setPanelOpen(open)\n }\n document.cookie = `${NAV_RAIL_COOKIE_NAME}=${open}; path=/; max-age=${NAV_RAIL_COOKIE_MAX_AGE}`\n },\n [onPanelOpenChange]\n )\n\n // Toggle logic: same item = close, different item = switch & open\n const togglePanel = React.useCallback(\n (itemId: string) => {\n if (activeItem === itemId && panelOpen) {\n setPanelOpen(false)\n setActiveItem(null)\n } else {\n setActiveItem(itemId)\n setPanelOpen(true)\n }\n },\n [activeItem, panelOpen, setActiveItem, setPanelOpen]\n )\n\n // Keyboard shortcut: Ctrl/Cmd + \\\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === NAV_RAIL_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n setPanelOpen(!panelOpen)\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [panelOpen, setPanelOpen])\n\n const contextValue = React.useMemo<NavRailContextProps>(\n () => ({\n activeItem,\n setActiveItem,\n panelOpen,\n setPanelOpen,\n togglePanel,\n openMobile,\n setOpenMobile,\n isMobile,\n }),\n [activeItem, setActiveItem, panelOpen, setPanelOpen, togglePanel, openMobile, setOpenMobile, isMobile]\n )\n\n return (\n <NavRailContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"nav-rail-wrapper\"\n style={\n {\n '--nav-rail-width': NAV_RAIL_WIDTH,\n '--nav-panel-width': NAV_PANEL_WIDTH,\n ...style,\n } as React.CSSProperties\n }\n className={cn('flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </NavRailContext.Provider>\n )\n}\nNavRailProvider.displayName = 'NavRailProvider'\n\n/* -------------------------------------------------------------------------- */\n/* NavRail */\n/* -------------------------------------------------------------------------- */\n\nconst NavRail = React.forwardRef<\n HTMLElement,\n React.ComponentProps<'nav'> & {\n side?: 'start' | 'end'\n }\n>(({ side = 'start', className, children, ...props }, ref) => {\n const { isMobile, openMobile, setOpenMobile, activeItem, panelOpen } = useNavRail()\n\n // Mobile: render as Sheet\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile}>\n <SheetContent\n data-slot=\"nav-rail\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--nav-panel-width-mobile) p-0 [&>button]:hidden\"\n style={\n {\n '--nav-panel-width-mobile': NAV_PANEL_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side=\"right\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>ناوبری</SheetTitle>\n <SheetDescription>منوی ناوبری اصلی</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <nav\n ref={ref}\n data-slot=\"nav-rail\"\n data-side={side}\n data-panel-open={panelOpen}\n data-active-item={activeItem}\n role=\"navigation\"\n aria-label=\"ناوبری اصلی\"\n className={cn(\n 'bg-sidebar text-sidebar-foreground fixed inset-y-0 z-20 hidden w-(--nav-rail-width) flex-col items-center border-e py-2 md:flex',\n side === 'start' && 'start-0',\n side === 'end' && 'end-0',\n className\n )}\n {...props}\n >\n {children}\n </nav>\n )\n})\nNavRail.displayName = 'NavRail'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailHeader */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"nav-rail-header\"\n className={cn('flex w-full flex-col items-center gap-1 px-1.5 py-2', className)}\n {...props}\n />\n))\nNavRailHeader.displayName = 'NavRailHeader'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailFooter */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"nav-rail-footer\"\n className={cn('mt-auto flex w-full flex-col items-center gap-1 px-1.5 py-2', className)}\n {...props}\n />\n))\nNavRailFooter.displayName = 'NavRailFooter'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailItem */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailItem = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & {\n itemId: string\n icon: React.ReactNode\n label: string\n isActive?: boolean\n asChild?: boolean\n }\n>(({ itemId, icon, label, isActive: isActiveProp, asChild = false, className, onClick, ...props }, ref) => {\n const { activeItem, togglePanel, isMobile, setOpenMobile } = useNavRail()\n const isActive = isActiveProp ?? activeItem === itemId\n const Comp = asChild ? Slot : 'button'\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n if (isMobile) {\n // In mobile sheet, items act as navigation\n setOpenMobile(false)\n } else {\n togglePanel(itemId)\n }\n }\n },\n [onClick, itemId, togglePanel, isMobile, setOpenMobile]\n )\n\n // Mobile: render full button with label\n if (isMobile) {\n return (\n <Comp\n ref={ref}\n data-slot=\"nav-rail-item\"\n data-active={isActive}\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n 'flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-sm outline-hidden transition-colors',\n 'text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-sidebar-ring',\n isActive && 'bg-sidebar-accent font-medium text-sidebar-accent-foreground',\n className\n )}\n onClick={handleClick}\n {...props}\n >\n <span className=\"flex size-5 items-center justify-center [&>svg]:size-5\">{icon}</span>\n <span>{label}</span>\n </Comp>\n )\n }\n\n // Desktop: icon-only with tooltip\n const button = (\n <Comp\n ref={ref}\n data-slot=\"nav-rail-item\"\n data-active={isActive}\n aria-label={label}\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n 'flex size-10 items-center justify-center rounded-md outline-hidden transition-colors',\n 'text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-sidebar-ring',\n isActive && 'bg-sidebar-accent text-sidebar-accent-foreground',\n '[&>svg]:size-5',\n className\n )}\n onClick={handleClick}\n {...props}\n >\n {icon}\n </Comp>\n )\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"left\" align=\"center\">\n {label}\n </TooltipContent>\n </Tooltip>\n )\n})\nNavRailItem.displayName = 'NavRailItem'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailContent (scrollable area between header and footer) */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"nav-rail-content\"\n className={cn('flex flex-1 flex-col items-center gap-1 overflow-y-auto px-1.5', className)}\n {...props}\n />\n))\nNavRailContent.displayName = 'NavRailContent'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailSeparator */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailSeparator = React.forwardRef<HTMLHRElement, React.ComponentProps<'hr'>>(({ className, ...props }, ref) => (\n <hr\n ref={ref}\n data-slot=\"nav-rail-separator\"\n className={cn('bg-sidebar-border mx-auto my-1.5 h-px w-8 border-0', className)}\n {...props}\n />\n))\nNavRailSeparator.displayName = 'NavRailSeparator'\n\n/* -------------------------------------------------------------------------- */\n/* NavPanel */\n/* -------------------------------------------------------------------------- */\n\nconst NavPanel = React.forwardRef<\n HTMLElement,\n React.ComponentProps<'aside'> & {\n forItem: string\n }\n>(({ forItem, className, children, ...props }, ref) => {\n const { activeItem, panelOpen, isMobile } = useNavRail()\n const isOpen = activeItem === forItem && panelOpen\n\n // Don't render panels on mobile (content is handled differently)\n if (isMobile) return null\n\n return (\n <aside\n ref={ref}\n data-slot=\"nav-panel\"\n data-state={isOpen ? 'open' : 'closed'}\n data-for-item={forItem}\n role=\"complementary\"\n aria-hidden={!isOpen}\n className={cn(\n 'bg-sidebar text-sidebar-foreground fixed inset-y-0 z-10 hidden w-(--nav-panel-width) flex-col border-e md:flex',\n 'inset-inline-start-(--nav-rail-width)',\n 'transition-[transform,visibility] duration-200 ease-linear',\n isOpen ? 'visible translate-x-0' : 'invisible -translate-x-full rtl:translate-x-full',\n className\n )}\n {...props}\n >\n {children}\n </aside>\n )\n})\nNavPanel.displayName = 'NavPanel'\n\n/* -------------------------------------------------------------------------- */\n/* NavPanelHeader */\n/* -------------------------------------------------------------------------- */\n\nconst NavPanelHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n title?: string\n showClose?: boolean\n }\n>(({ title, showClose = true, className, children, ...props }, ref) => {\n const { setPanelOpen, setActiveItem } = useNavRail()\n\n return (\n <div\n ref={ref}\n data-slot=\"nav-panel-header\"\n className={cn('flex h-12 items-center justify-between border-b px-4', className)}\n {...props}\n >\n {title && <h2 className=\"text-sm font-semibold\">{title}</h2>}\n {children}\n {showClose && (\n <button\n onClick={() => {\n setPanelOpen(false)\n setActiveItem(null)\n }}\n className=\"text-sidebar-foreground hover:text-sidebar-accent-foreground flex size-6 items-center justify-center rounded-sm transition-colors\"\n aria-label=\"بستن پنل\"\n >\n <PanelLeftCloseIcon className=\"size-4 rtl:rotate-180\" />\n </button>\n )}\n </div>\n )\n})\nNavPanelHeader.displayName = 'NavPanelHeader'\n\n/* -------------------------------------------------------------------------- */\n/* NavPanelContent */\n/* -------------------------------------------------------------------------- */\n\nconst NavPanelContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"nav-panel-content\" className={cn('flex-1 overflow-y-auto p-2', className)} {...props} />\n )\n)\nNavPanelContent.displayName = 'NavPanelContent'\n\n/* -------------------------------------------------------------------------- */\n/* NavPanelFooter */\n/* -------------------------------------------------------------------------- */\n\nconst NavPanelFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"nav-panel-footer\" className={cn('border-t p-2', className)} {...props} />\n))\nNavPanelFooter.displayName = 'NavPanelFooter'\n\n/* -------------------------------------------------------------------------- */\n/* AppLayout */\n/* -------------------------------------------------------------------------- */\n\nconst AppLayout = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"app-layout\" className={cn('relative flex min-h-svh w-full', className)} {...props} />\n))\nAppLayout.displayName = 'AppLayout'\n\n/* -------------------------------------------------------------------------- */\n/* AppLayoutContent */\n/* -------------------------------------------------------------------------- */\n\nconst AppLayoutContent = React.forwardRef<HTMLElement, React.ComponentProps<'main'>>(\n ({ className, style, ...props }, ref) => {\n const { panelOpen, isMobile } = useNavRail()\n\n return (\n <main\n ref={ref}\n data-slot=\"app-layout-content\"\n data-panel-open={panelOpen}\n className={cn(\n 'relative flex w-full flex-1 flex-col transition-[padding] duration-200 ease-linear',\n !isMobile && 'ps-(--nav-rail-width)',\n !isMobile && panelOpen && 'ps-[calc(var(--nav-rail-width)+var(--nav-panel-width))]',\n className\n )}\n style={style}\n {...props}\n />\n )\n }\n)\nAppLayoutContent.displayName = 'AppLayoutContent'\n\n/* -------------------------------------------------------------------------- */\n/* NavRailTrigger (mobile hamburger) */\n/* -------------------------------------------------------------------------- */\n\nconst NavRailTrigger = React.forwardRef<React.ComponentRef<typeof Button>, React.ComponentProps<typeof Button>>(\n ({ className, onClick, ...props }, ref) => {\n const { setOpenMobile } = useNavRail()\n\n return (\n <Button\n ref={ref}\n data-slot=\"nav-rail-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7 md:hidden', className)}\n onClick={(event) => {\n onClick?.(event)\n setOpenMobile(true)\n }}\n {...props}\n >\n <MenuIcon />\n <span className=\"sr-only\">منوی ناوبری</span>\n </Button>\n )\n }\n)\nNavRailTrigger.displayName = 'NavRailTrigger'\n\n/* -------------------------------------------------------------------------- */\n/* Exports */\n/* -------------------------------------------------------------------------- */\n\nexport {\n NavRailProvider,\n NavRail,\n NavRailHeader,\n NavRailFooter,\n NavRailItem,\n NavRailContent,\n NavRailSeparator,\n NavPanel,\n NavPanelHeader,\n NavPanelContent,\n NavPanelFooter,\n AppLayout,\n AppLayoutContent,\n NavRailTrigger,\n useNavRail,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as SliderPrimitive from '@radix-ui/react-slider'\n\nimport { cn } from '@/lib/utils'\nimport { useDocumentDirection, type Direction } from '@/hooks/use-document-direction'\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n dir,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]),\n [value, defaultValue, min, max]\n )\n const documentDir = useDocumentDirection()\n const resolvedDir = (dir as Direction) ?? documentDir\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n dir={resolvedDir}\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col',\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n 'bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5'\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn('bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full')}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-background-surface-75 shadow-sm transition-all duration-150 hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nSlider.displayName = 'Slider'\n\nexport { Slider }\n","'use client'\n\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\nimport { cn } from '@/lib/utils'\n\nexport type PartoToasterProps = ToasterProps\n\nconst Toaster = ({ className, ...props }: PartoToasterProps) => {\n return (\n <Sonner\n data-slot=\"toaster\"\n className={cn('toaster group', className)}\n dir=\"rtl\"\n position=\"top-center\"\n closeButton\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg font-[var(--font-sans)]',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n success:\n 'group-[.toaster]:border-[hsl(var(--brand-default)/0.4)] group-[.toaster]:bg-[hsl(var(--brand-default)/0.06)] group-[.toaster]:text-[hsl(var(--brand-600))]',\n error:\n 'group-[.toaster]:border-[hsl(var(--destructive-500)/0.4)] group-[.toaster]:bg-[hsl(var(--destructive-500)/0.06)] group-[.toaster]:text-[hsl(var(--destructive-600))]',\n warning:\n 'group-[.toaster]:border-[hsl(var(--warning-500)/0.4)] group-[.toaster]:bg-[hsl(var(--warning-500)/0.06)] group-[.toaster]:text-[hsl(var(--warning))]',\n info: 'group-[.toaster]:border-[hsl(var(--secondary-default)/0.4)] group-[.toaster]:bg-[hsl(var(--secondary-default)/0.06)] group-[.toaster]:text-[hsl(var(--secondary-default))]',\n },\n }}\n {...props}\n />\n )\n}\nToaster.displayName = 'Toaster'\n\nexport { Toaster }\nexport { toast } from 'sonner'\nexport const SONNER_DEFAULT_DURATION = 4000\n","'use client'\n\nimport * as React from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\nimport { VariantProps, cva } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst switchRootVariants = cva(\n 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:hover:bg-brand-600/90 data-[state=unchecked]:bg-control data-[state=unchecked]:hover:bg-border',\n {\n variants: {\n size: {\n sm: 'h-[16px] w-[28px]',\n md: 'h-[20px] w-[34px]',\n lg: 'h-[24px] w-[44px]',\n /** @deprecated Use sm */ small: 'h-[16px] w-[28px]',\n /** @deprecated Use md */ medium: 'h-[20px] w-[34px]',\n /** @deprecated Use lg */ large: 'h-[24px] w-[44px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n }\n)\n\n// data-[state=checked]:bg-white intentional: --foreground-contrast is near-black in .dark theme,\n// which would produce a near-black thumb on the colored track — bad. White thumb on brand-colored track is the design intent.\nconst switchThumbVariants = cva(\n 'pointer-events-none block rounded-full bg-foreground-lighter data-[state=checked]:bg-white shadow-lg ring-0 transition-transform',\n {\n variants: {\n size: {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-[18px]',\n /** @deprecated Use sm */ small: 'size-3',\n /** @deprecated Use md */ medium: 'size-4',\n /** @deprecated Use lg */ large: 'size-[18px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n }\n)\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, VariantProps<typeof switchRootVariants> {}\n\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n ({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(switchRootVariants({ size }), className)}\n {...props}\n ref={ref}\n >\n <SwitchPrimitive.Thumb data-slot=\"switch-thumb\" className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitive.Root>\n )\n)\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Table */\n/* -------------------------------------------------------------------------- */\n\ninterface TableProps extends React.ComponentProps<'table'> {\n /** Size variant affecting cell padding and font size */\n size?: 'sm' | 'md' | 'lg'\n /** Zebra-striped rows */\n striped?: boolean\n /** Bordered cells */\n bordered?: boolean\n /** Sticky header that stays visible when scrolling */\n stickyHeader?: boolean\n}\n\nfunction Table({\n className,\n size = 'md',\n striped = false,\n bordered = false,\n stickyHeader = false,\n ...props\n}: TableProps) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table\n data-slot=\"table\"\n data-size={size}\n data-striped={striped || undefined}\n data-bordered={bordered || undefined}\n data-sticky-header={stickyHeader || undefined}\n className={cn('w-full caption-bottom', className)}\n {...props}\n />\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableHeader */\n/* -------------------------------------------------------------------------- */\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\n '[&_tr]:border-b bg-surface-75',\n '[[data-sticky-header]_&]:sticky [[data-sticky-header]_&]:top-0 [[data-sticky-header]_&]:z-[9] [[data-sticky-header]_&]:bg-surface-75',\n className\n )}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableBody */\n/* -------------------------------------------------------------------------- */\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\n '[&_tr:last-child]:border-0',\n '[[data-striped]_&_tr:nth-child(even)]:bg-surface-75 [[data-striped]_&_tr:nth-child(even):hover]:bg-surface-200',\n className\n )}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableFooter */\n/* -------------------------------------------------------------------------- */\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableRow */\n/* -------------------------------------------------------------------------- */\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn('hover:bg-surface-200 data-[state=selected]:bg-selection border-b transition-colors', className)}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableHead */\n/* -------------------------------------------------------------------------- */\n\ninterface TableHeadProps extends React.ComponentProps<'th'> {\n /** Sort direction — sets aria-sort on the <th> element */\n sortDirection?: 'asc' | 'desc' | 'none'\n}\n\nfunction TableHead({ className, sortDirection, ...props }: TableHeadProps) {\n const ariaSort =\n sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : sortDirection === 'none'\n ? 'none'\n : undefined\n\n return (\n <th\n data-slot=\"table-head\"\n aria-sort={ariaSort}\n className={cn(\n 'text-foreground-lighter text-start align-middle font-semibold whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]',\n // Size variants (inherited from parent table)\n '[[data-size=sm]_&]:h-8 [[data-size=sm]_&]:px-2 [[data-size=sm]_&]:text-xs',\n '[[data-size=md]_&]:h-10 [[data-size=md]_&]:px-3 [[data-size=md]_&]:text-sm',\n '[[data-size=lg]_&]:h-12 [[data-size=lg]_&]:px-4 [[data-size=lg]_&]:text-base',\n // Bordered variant\n '[[data-bordered]_&]:border [[data-bordered]_&]:border-border',\n className\n )}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableCell */\n/* -------------------------------------------------------------------------- */\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]',\n // Size variants (inherited from parent table)\n '[[data-size=sm]_&]:px-2 [[data-size=sm]_&]:py-1.5 [[data-size=sm]_&]:text-xs',\n '[[data-size=md]_&]:px-3 [[data-size=md]_&]:py-2 [[data-size=md]_&]:text-sm',\n '[[data-size=lg]_&]:px-4 [[data-size=lg]_&]:py-3 [[data-size=lg]_&]:text-base',\n // Bordered variant\n '[[data-bordered]_&]:border [[data-bordered]_&]:border-border',\n className\n )}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableCaption */\n/* -------------------------------------------------------------------------- */\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption data-slot=\"table-caption\" className={cn('text-foreground-muted mt-4 text-sm', className)} {...props} />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableSortHeader — clickable sort indicator for table headers */\n/* -------------------------------------------------------------------------- */\n\ninterface TableSortHeaderProps extends React.ComponentProps<'button'> {\n /** Current sort direction */\n sorted?: 'asc' | 'desc' | false\n}\n\nfunction TableSortHeader({ className, children, sorted, ...props }: TableSortHeaderProps) {\n return (\n <button\n data-slot=\"table-sort-header\"\n className={cn(\n 'inline-flex items-center gap-1.5 cursor-pointer select-none hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 rounded-sm',\n sorted && 'text-foreground',\n className\n )}\n {...props}\n >\n {children}\n <span className=\"inline-flex flex-col -space-y-0.5\">\n <svg\n width=\"8\"\n height=\"5\"\n viewBox=\"0 0 8 5\"\n className={cn('transition-colors', sorted === 'asc' ? 'text-foreground' : 'text-foreground-muted')}\n >\n <path d=\"M4 0L8 5H0L4 0Z\" fill=\"currentColor\" />\n </svg>\n <svg\n width=\"8\"\n height=\"5\"\n viewBox=\"0 0 8 5\"\n className={cn('transition-colors', sorted === 'desc' ? 'text-foreground' : 'text-foreground-muted')}\n >\n <path d=\"M4 5L0 0H8L4 5Z\" fill=\"currentColor\" />\n </svg>\n </span>\n </button>\n )\n}\n\nTable.displayName = 'Table'\nTableHeader.displayName = 'TableHeader'\nTableBody.displayName = 'TableBody'\nTableFooter.displayName = 'TableFooter'\nTableHead.displayName = 'TableHead'\nTableRow.displayName = 'TableRow'\nTableCell.displayName = 'TableCell'\nTableCaption.displayName = 'TableCaption'\nTableSortHeader.displayName = 'TableSortHeader'\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, TableSortHeader }\n","'use client'\n\nimport * as React from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Tabs Root */\n/* -------------------------------------------------------------------------- */\n\nconst Tabs = TabsPrimitive.Root\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n /** Visual variant */\n variant?: 'default' | 'underline' | 'outline'\n /** Size */\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst TabsList = React.forwardRef<React.ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n ({ className, variant = 'default', size = 'md', ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n className={cn(\n 'inline-flex items-center text-foreground-lighter',\n // Default (pill) variant\n variant === 'default' && 'rounded-lg bg-surface-200 p-1 gap-1',\n // Underline variant\n variant === 'underline' && 'border-b border-border gap-0',\n // Outline variant\n variant === 'outline' && 'rounded-lg border border-border gap-0',\n // Sizes — height\n size === 'sm' && 'h-8',\n size === 'md' && 'h-9',\n size === 'lg' && 'h-10',\n className\n )}\n {...props}\n />\n )\n)\nTabsList.displayName = TabsPrimitive.List.displayName\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsTriggerProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n /** Icon rendered before the label */\n icon?: React.ReactNode\n /** Badge/count rendered after the label */\n badge?: React.ReactNode\n}\n\nconst TabsTrigger = React.forwardRef<React.ElementRef<typeof TabsPrimitive.Trigger>, TabsTriggerProps>(\n ({ className, children, icon, badge, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex items-center justify-center gap-1.5 whitespace-nowrap font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n // Default (pill) variant\n '[[data-variant=default]_&]:rounded-md [[data-variant=default]_&]:px-3 [[data-variant=default]_&]:data-[state=active]:bg-background [[data-variant=default]_&]:data-[state=active]:text-foreground [[data-variant=default]_&]:data-[state=active]:shadow-sm',\n // Underline variant\n '[[data-variant=underline]_&]:px-4 [[data-variant=underline]_&]:border-b-2 [[data-variant=underline]_&]:border-transparent [[data-variant=underline]_&]:rounded-none [[data-variant=underline]_&]:data-[state=active]:border-brand [[data-variant=underline]_&]:data-[state=active]:text-foreground',\n // Outline variant\n '[[data-variant=outline]_&]:px-4 [[data-variant=outline]_&]:border-e [[data-variant=outline]_&]:border-border [[data-variant=outline]_&]:last:border-e-0 [[data-variant=outline]_&]:first:rounded-s-lg [[data-variant=outline]_&]:last:rounded-e-lg [[data-variant=outline]_&]:data-[state=active]:bg-surface-200 [[data-variant=outline]_&]:data-[state=active]:text-foreground',\n // Sizes\n '[[data-size=sm]_&]:text-xs [[data-size=sm]_&]:h-full',\n '[[data-size=md]_&]:text-sm [[data-size=md]_&]:h-full',\n '[[data-size=lg]_&]:text-base [[data-size=lg]_&]:h-full',\n className\n )}\n {...props}\n >\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n {children}\n {badge && (\n <span className=\"inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1 rounded-full bg-surface-300 text-2xs font-semibold\">\n {badge}\n </span>\n )}\n </TabsPrimitive.Trigger>\n )\n)\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\n/* -------------------------------------------------------------------------- */\n/* TabsContent */\n/* -------------------------------------------------------------------------- */\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n data-slot=\"tabs-content\"\n className={cn(\n 'mt-2 p-4 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","'use client'\n\nimport * as React from 'react'\nimport * as TogglePrimitive from '@radix-ui/react-toggle'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 transition-all duration-150 active:scale-[0.97] whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-control bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'sm',\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />\n )\n}\n\nToggle.displayName = 'Toggle'\n\nexport { Toggle, toggleVariants }\n","'use client'\n\nimport * as React from 'react'\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group'\n\nimport { cn } from '@/lib/utils'\nimport { toggleVariants } from './toggle'\nimport type { VariantProps } from 'class-variance-authority'\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: 'sm',\n variant: 'default',\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n className={cn('flex items-center justify-center gap-1', className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nToggleGroup.displayName = 'ToggleGroup'\nToggleGroupItem.displayName = 'ToggleGroupItem'\n\nexport { ToggleGroup, ToggleGroupItem }\n","'use client'\n\nimport * as React from 'react'\nimport { LayoutGrid, List } from 'lucide-react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { ToggleGroup, ToggleGroupItem } from './toggle-group'\n\nexport type ViewMode = 'grid' | 'list'\n\nexport interface ViewToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Current view mode */\n value: ViewMode\n /** Callback when view changes */\n onValueChange: (value: ViewMode) => void\n /** Size @default \"sm\" */\n size?: 'sm' | 'default'\n /** Locale @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst ViewToggle = React.forwardRef<HTMLDivElement, ViewToggleProps>(\n ({ className, value, onValueChange, size = 'sm', locale = 'fa', ...props }, ref) => {\n const strings = getUIStrings(locale)\n\n return (\n <div ref={ref} data-slot=\"view-toggle\" className={cn(className)} {...props}>\n <ToggleGroup\n type=\"single\"\n value={value}\n onValueChange={(v) => {\n if (v) onValueChange(v as ViewMode)\n }}\n variant=\"outline\"\n size={size}\n >\n <ToggleGroupItem value=\"grid\" aria-label={strings.gridView}>\n <LayoutGrid className=\"size-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem value=\"list\" aria-label={strings.listView}>\n <List className=\"size-4\" />\n </ToggleGroupItem>\n </ToggleGroup>\n </div>\n )\n }\n)\nViewToggle.displayName = 'ViewToggle'\n\nexport { ViewToggle }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react'\n\nexport interface TrendIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The percentage change value */\n value: number\n /** Direction of the trend — auto-detected from value sign if not provided */\n direction?: 'up' | 'down' | 'neutral'\n /** Size of the indicator */\n size?: 'sm' | 'md' | 'lg'\n /** Locale for number formatting */\n locale?: SupportedLocale\n /** Show the percentage sign */\n showPercent?: boolean\n}\n\nconst TrendIndicator = React.forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n ({ className, value, direction: directionProp, size = 'md', locale = 'fa', showPercent = true, ...props }, ref) => {\n const direction = directionProp ?? (value > 0 ? 'up' : value < 0 ? 'down' : 'neutral')\n\n const sizeClasses = {\n sm: { text: 'text-xs', icon: 'size-3', gap: 'gap-0.5' },\n md: { text: 'text-sm', icon: 'size-4', gap: 'gap-1' },\n lg: { text: 'text-base', icon: 'size-5', gap: 'gap-1.5' },\n }\n\n const colorClasses = {\n up: 'text-[hsl(var(--sentiment-positive))]',\n down: 'text-[hsl(var(--sentiment-negative))]',\n neutral: 'text-foreground-muted',\n }\n\n const Icon = direction === 'up' ? TrendingUp : direction === 'down' ? TrendingDown : Minus\n\n const displayValue = Math.abs(value)\n const formattedValue = convertToLocalNumbers(\n displayValue % 1 === 0 ? displayValue.toString() : displayValue.toFixed(1),\n locale\n )\n\n return (\n <span\n ref={ref}\n data-slot=\"trend-indicator\"\n className={cn(\n 'inline-flex items-center font-medium transition-colors duration-150',\n sizeClasses[size].text,\n sizeClasses[size].gap,\n colorClasses[direction],\n className\n )}\n {...props}\n >\n <Icon className={sizeClasses[size].icon} />\n <span dir=\"ltr\">\n {direction === 'up' && '+'}\n {direction === 'down' && '-'}\n {formattedValue}\n {showPercent && (locale === 'fa' || locale === 'ar' ? '٪' : '%')}\n </span>\n </span>\n )\n }\n)\n\nTrendIndicator.displayName = 'TrendIndicator'\n\nexport { TrendIndicator }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { X } from 'lucide-react'\n\nexport interface FilterChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Label text */\n label: string\n /** Callback when the chip is removed */\n onRemove?: () => void\n /** Visual variant */\n variant?: 'default' | 'brand' | 'warning' | 'destructive'\n /** Size */\n size?: 'sm' | 'md'\n /** Override the remove button's aria-label. Default: \"حذف {label}\" */\n removeAriaLabel?: string\n /** Disables the chip and hides the remove button */\n disabled?: boolean\n /** Locale for default strings @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst FilterChip = React.forwardRef<HTMLSpanElement, FilterChipProps>(\n (\n {\n className,\n label,\n onRemove,\n variant = 'default',\n size = 'sm',\n removeAriaLabel,\n disabled = false,\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const strings = getUIStrings(locale)\n const variantClasses = {\n default: 'bg-surface-200 text-foreground border-border hover:bg-surface-300',\n brand: 'bg-brand-200 text-brand-600 border-brand-500 hover:bg-brand-300',\n warning: 'bg-warning-200 text-warning-600 border-warning-500 hover:bg-warning-300',\n destructive: 'bg-destructive-200 text-destructive-600 border-destructive-500 hover:bg-destructive-300',\n }\n\n const sizeClasses = {\n sm: 'h-6 text-xs px-2 gap-1',\n md: 'h-7 text-sm px-2.5 gap-1.5',\n }\n\n return (\n <span\n ref={ref}\n data-slot=\"filter-chip\"\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n className={cn(\n 'inline-flex items-center rounded-full border font-medium transition-colors select-none cursor-default',\n variantClasses[variant],\n sizeClasses[size],\n disabled && 'opacity-50 pointer-events-none',\n className\n )}\n {...props}\n >\n {label}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n className=\"flex-shrink-0 rounded-full p-0.5 hover:bg-foreground/10 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-1\"\n aria-label={removeAriaLabel ?? `${strings.remove} ${label}`}\n >\n <X className={size === 'sm' ? 'size-3' : 'size-3.5'} />\n </button>\n )}\n </span>\n )\n }\n)\nFilterChip.displayName = 'FilterChip'\n\n/* -------------------------------------------------------------------------- */\n/* FilterChipGroup — wraps multiple chips with overflow handling */\n/* -------------------------------------------------------------------------- */\n\ninterface FilterChipGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Maximum visible chips before showing overflow count */\n maxVisible?: number\n /** Locale for overflow counter digits */\n locale?: SupportedLocale\n}\n\nconst FilterChipGroup = React.forwardRef<HTMLDivElement, FilterChipGroupProps>(\n ({ className, children, maxVisible, locale, ...props }, ref) => {\n const childArray = React.Children.toArray(children)\n const visibleChildren = maxVisible ? childArray.slice(0, maxVisible) : childArray\n const overflowCount = maxVisible ? Math.max(0, childArray.length - maxVisible) : 0\n\n return (\n <div\n ref={ref}\n data-slot=\"filter-chip-group\"\n className={cn('flex flex-wrap gap-2 items-center', className)}\n {...props}\n >\n {visibleChildren}\n {overflowCount > 0 && (\n <span className=\"inline-flex items-center h-7 px-2.5 rounded-full bg-surface-300 text-foreground-lighter text-sm font-medium\">\n +{convertToLocalNumbers(overflowCount, locale ?? 'fa')}\n </span>\n )}\n </div>\n )\n }\n)\nFilterChipGroup.displayName = 'FilterChipGroup'\n\nexport { FilterChip, FilterChipGroup }\n","'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { cn, convertToLocalNumbers, formatLargeNumber, type SupportedLocale } from '@/lib/utils'\nimport { Skeleton } from './skeleton'\n\nconst statDisplayVariants = cva('flex flex-col gap-1', {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: { size: 'md' },\n})\n\n/** Size-specific classes for child elements (value, label, icon) */\nconst SIZE_CHILD_CLASSES = {\n sm: { value: 'text-2xl', label: 'text-xs', icon: 'size-5' },\n md: { value: 'text-3xl', label: 'text-sm', icon: 'size-6' },\n lg: { value: 'text-4xl', label: 'text-base', icon: 'size-8' },\n}\n\nexport interface StatDisplayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main numeric value */\n value: number | string\n /** Label describing the stat */\n label: string\n /** Unit suffix (e.g., \"K\", \"%\", \"نفر\") */\n unit?: string\n /** Trend indicator element (use TrendIndicator component) */\n trend?: React.ReactNode\n /** Size of the display */\n size?: 'sm' | 'md' | 'lg'\n /** Locale for number formatting */\n locale?: SupportedLocale\n /** Optional icon displayed before the value */\n icon?: React.ReactNode\n /** Show loading skeleton state */\n isLoading?: boolean\n}\n\nconst StatDisplay = React.forwardRef<HTMLDivElement, StatDisplayProps>(\n ({ className, value, label, unit, trend, size = 'md', locale = 'fa', icon, isLoading, ...props }, ref) => {\n const sizeClasses = SIZE_CHILD_CLASSES[size]\n\n if (isLoading) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)} {...props}>\n <Skeleton shape=\"line\" className={cn('w-16', sizeClasses.label)} />\n <Skeleton shape=\"line\" className={cn('w-28', sizeClasses.value)} />\n </div>\n )\n }\n\n const formattedValue =\n typeof value === 'number' ? formatLargeNumber(value, locale) : convertToLocalNumbers(String(value), locale)\n\n return (\n <div ref={ref} data-slot=\"stat-display\" className={cn(statDisplayVariants({ size }), className)} {...props}>\n <span className={cn('text-foreground-lighter font-medium', sizeClasses.label)}>{label}</span>\n <div className=\"flex items-baseline gap-2\" dir=\"ltr\">\n {icon && <span className={cn('text-foreground-lighter shrink-0', sizeClasses.icon)}>{icon}</span>}\n <span className={cn('font-bold text-foreground tracking-tight', sizeClasses.value)}>\n {formattedValue}\n {unit && <span className=\"text-foreground-lighter font-medium text-[0.6em] ms-1\">{unit}</span>}\n </span>\n {trend && <span className=\"shrink-0\">{trend}</span>}\n </div>\n </div>\n )\n }\n)\n\nStatDisplay.displayName = 'StatDisplay'\n\nexport { StatDisplay, statDisplayVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { Check } from 'lucide-react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\n\n/* ---------------------------------- Types --------------------------------- */\n\ntype StepStatus = 'completed' | 'active' | 'pending'\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Index of the currently active step (0-based) */\n activeStep: number\n /** Layout direction @default \"horizontal\" */\n orientation?: 'horizontal' | 'vertical'\n /** Size @default \"md\" */\n size?: 'sm' | 'md' | 'lg'\n /** Locale @default \"fa\" */\n locale?: SupportedLocale\n}\n\nexport interface StepProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Step label text */\n label: string\n /** Optional description below label */\n description?: string\n /** Optional icon to replace the step number */\n icon?: React.ReactNode\n}\n\n/* -------------------------------- Context --------------------------------- */\n\ninterface StepperContextValue {\n activeStep: number\n orientation: 'horizontal' | 'vertical'\n size: 'sm' | 'md' | 'lg'\n locale: SupportedLocale\n totalSteps: number\n}\n\nconst StepperContext = React.createContext<StepperContextValue>({\n activeStep: 0,\n orientation: 'horizontal',\n size: 'md',\n locale: 'fa',\n totalSteps: 0,\n})\n\n/* ------------------------------- Stepper ---------------------------------- */\n\nconst Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n ({ className, activeStep, orientation = 'horizontal', size = 'md', locale = 'fa', children, ...props }, ref) => {\n const totalSteps = React.Children.count(children)\n const strings = getUIStrings(locale)\n\n return (\n <StepperContext.Provider value={{ activeStep, orientation, size, locale, totalSteps }}>\n <div\n ref={ref}\n data-slot=\"stepper\"\n data-orientation={orientation}\n role=\"list\"\n aria-label={strings.stepperLabel}\n className={cn(orientation === 'horizontal' ? 'flex items-start w-full' : 'flex flex-col gap-0', className)}\n {...props}\n >\n {React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return null\n return React.cloneElement(child as React.ReactElement<StepInternalProps>, {\n _index: index,\n })\n })}\n </div>\n </StepperContext.Provider>\n )\n }\n)\nStepper.displayName = 'Stepper'\n\n/* --------------------------------- Step ----------------------------------- */\n\ninterface StepInternalProps extends StepProps {\n _index?: number\n}\n\nconst Step = React.forwardRef<HTMLDivElement, StepProps>(({ className, label, description, icon, ...props }, ref) => {\n const { activeStep, orientation, size, locale, totalSteps } = React.useContext(StepperContext)\n const index = (props as StepInternalProps)._index ?? 0\n const isLast = index === totalSteps - 1\n\n const status: StepStatus = index < activeStep ? 'completed' : index === activeStep ? 'active' : 'pending'\n\n const strings = getUIStrings(locale)\n\n const circleSize = {\n sm: 'size-6 text-xs',\n md: 'size-8 text-sm',\n lg: 'size-10 text-base',\n }\n\n const ariaLabel =\n status === 'completed' ? strings.stepCompleted : status === 'active' ? strings.stepCurrent : strings.stepPending\n\n const circleContent =\n status === 'completed' ? (\n <Check className={size === 'sm' ? 'size-3' : size === 'lg' ? 'size-5' : 'size-4'} />\n ) : (\n (icon ?? convertToLocalNumbers(index + 1, locale))\n )\n\n if (orientation === 'vertical') {\n return (\n <div\n ref={ref}\n data-slot=\"step\"\n data-status={status}\n role=\"listitem\"\n aria-label={`${label} — ${ariaLabel}`}\n className={cn('flex gap-3', className)}\n {...(props as Omit<StepInternalProps, '_index'>)}\n >\n {/* Circle + connector column */}\n <div className=\"flex flex-col items-center\">\n <div\n className={cn(\n 'flex items-center justify-center rounded-full font-medium shrink-0 transition-colors',\n circleSize[size],\n status === 'completed' && 'bg-brand text-foreground-contrast',\n status === 'active' && 'bg-brand text-foreground-contrast ring-4 ring-brand-200',\n status === 'pending' && 'bg-surface-200 text-foreground-lighter border border-border'\n )}\n >\n {circleContent}\n </div>\n {!isLast && (\n <div className={cn('w-0.5 grow min-h-8 my-1', status === 'completed' ? 'bg-brand' : 'bg-border-muted')} />\n )}\n </div>\n {/* Label area */}\n <div className={cn('pb-8', isLast && 'pb-0')}>\n <p\n className={cn(\n 'font-medium',\n size === 'sm' ? 'text-sm' : size === 'lg' ? 'text-base' : 'text-sm',\n status === 'pending' ? 'text-foreground-lighter' : 'text-foreground'\n )}\n >\n {label}\n </p>\n {description && (\n <p className={cn('mt-0.5 text-foreground-lighter', size === 'sm' ? 'text-xs' : 'text-sm')}>{description}</p>\n )}\n </div>\n </div>\n )\n }\n\n // Horizontal layout\n return (\n <div\n ref={ref}\n data-slot=\"step\"\n data-status={status}\n role=\"listitem\"\n aria-label={`${label} — ${ariaLabel}`}\n className={cn('flex items-center', !isLast && 'flex-1', className)}\n {...(props as Omit<StepInternalProps, '_index'>)}\n >\n <div className=\"flex flex-col items-center gap-1.5\">\n <div\n className={cn(\n 'flex items-center justify-center rounded-full font-medium shrink-0 transition-colors',\n circleSize[size],\n status === 'completed' && 'bg-brand text-foreground-contrast',\n status === 'active' && 'bg-brand text-foreground-contrast ring-4 ring-brand-200',\n status === 'pending' && 'bg-surface-200 text-foreground-lighter border border-border'\n )}\n >\n {circleContent}\n </div>\n <p\n className={cn(\n 'font-medium text-center whitespace-nowrap',\n size === 'sm' ? 'text-xs' : 'text-sm',\n status === 'pending' ? 'text-foreground-lighter' : 'text-foreground'\n )}\n >\n {label}\n </p>\n {description && <p className={cn('text-foreground-lighter text-center', 'text-xs')}>{description}</p>}\n </div>\n {/* Connector line */}\n {!isLast && (\n <div\n className={cn('h-0.5 flex-1 mx-2 mt-[-1.5rem]', status === 'completed' ? 'bg-brand' : 'bg-border-muted')}\n />\n )}\n </div>\n )\n})\nStep.displayName = 'Step'\n\nexport { Stepper, Step }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { sentimentLabels } from '@/lib/i18n'\nimport { ThumbsUp, ThumbsDown, Minus, Shuffle } from 'lucide-react'\n\nexport interface SentimentBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Sentiment type */\n sentiment: 'positive' | 'negative' | 'neutral' | 'mixed'\n /** Optional count to display */\n count?: number\n /** Size */\n size?: 'sm' | 'md'\n /** Show text label alongside the icon */\n showLabel?: boolean\n /** Locale for number/label formatting */\n locale?: SupportedLocale\n}\n\n// Sentiment label translations are centralised in @/lib/i18n (sentimentLabels).\n\nconst SentimentBadge = React.forwardRef<HTMLSpanElement, SentimentBadgeProps>(\n ({ className, sentiment, count, size = 'md', showLabel = true, locale = 'fa', ...props }, ref) => {\n const sentimentConfig = {\n positive: {\n icon: ThumbsUp,\n bgClass: 'bg-[hsl(var(--sentiment-positive)/0.1)]',\n textClass: 'text-[hsl(var(--sentiment-positive))]',\n borderClass: 'border-[hsl(var(--sentiment-positive)/0.3)]',\n },\n negative: {\n icon: ThumbsDown,\n bgClass: 'bg-[hsl(var(--sentiment-negative)/0.1)]',\n textClass: 'text-[hsl(var(--sentiment-negative))]',\n borderClass: 'border-[hsl(var(--sentiment-negative)/0.3)]',\n },\n neutral: {\n icon: Minus,\n bgClass: 'bg-[hsl(var(--sentiment-neutral)/0.1)]',\n textClass: 'text-[hsl(var(--sentiment-neutral))]',\n borderClass: 'border-[hsl(var(--sentiment-neutral)/0.3)]',\n },\n mixed: {\n icon: Shuffle,\n bgClass: 'bg-[hsl(var(--sentiment-mixed)/0.1)]',\n textClass: 'text-[hsl(var(--sentiment-mixed))]',\n borderClass: 'border-[hsl(var(--sentiment-mixed)/0.3)]',\n },\n }\n\n const config = sentimentConfig[sentiment]\n const Icon = config.icon\n\n const sizeClasses = {\n sm: { badge: 'h-6 text-xs px-2 gap-1', icon: 'size-3' },\n md: { badge: 'h-7 text-sm px-2.5 gap-1.5', icon: 'size-3.5' },\n }\n\n return (\n <span\n ref={ref}\n data-slot=\"sentiment-badge\"\n className={cn(\n 'inline-flex items-center rounded-full border font-medium transition-colors duration-150',\n config.bgClass,\n config.textClass,\n config.borderClass,\n sizeClasses[size].badge,\n className\n )}\n {...props}\n >\n <Icon className={sizeClasses[size].icon} />\n {showLabel && <span>{sentimentLabels[locale][sentiment]}</span>}\n {count !== undefined && (\n <span className=\"font-bold\">{convertToLocalNumbers(count.toLocaleString(), locale)}</span>\n )}\n </span>\n )\n }\n)\n\nSentimentBadge.displayName = 'SentimentBadge'\n\nexport { SentimentBadge }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronDown, X } from \"lucide-react\"\nimport { cn, type SupportedLocale } from \"@/lib/utils\"\nimport { getUIStrings } from \"@/lib/i18n\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"./command\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\"\nimport { FilterChip } from \"./filter-chip\"\nimport { Badge } from \"./badge\"\nimport { Skeleton } from \"./skeleton\"\n\nexport interface MultiSelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface MultiSelectProps {\n /** All available options */\n options: MultiSelectOption[]\n /** Currently selected values */\n value?: string[]\n /** Callback fired when selection changes */\n onValueChange?: (value: string[]) => void\n /** Placeholder text when nothing is selected */\n placeholder?: string\n /** Disables the entire control */\n disabled?: boolean\n /** Shows loading skeleton in dropdown */\n isLoading?: boolean\n /** Maximum number of items that can be selected */\n maxSelected?: number\n /** How many selected chips to display before collapsing into a count badge */\n maxDisplayed?: number\n /** Locale for display and default strings */\n locale?: SupportedLocale\n /** Additional className on the trigger */\n className?: string\n /** Empty state message */\n emptyMessage?: string\n /** Search placeholder */\n searchPlaceholder?: string\n}\n\nconst MultiSelect = React.forwardRef<HTMLDivElement, MultiSelectProps>(\n (\n {\n options,\n value = [],\n onValueChange,\n placeholder,\n disabled = false,\n isLoading = false,\n maxSelected,\n maxDisplayed = 3,\n locale = \"fa\",\n className,\n emptyMessage,\n searchPlaceholder,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false)\n const listboxId = React.useId()\n const strings = getUIStrings(locale)\n const resolvedPlaceholder = placeholder ?? strings.select\n const resolvedEmptyMessage = emptyMessage ?? strings.noOptionsFound\n const resolvedSearchPlaceholder = searchPlaceholder ?? strings.search\n\n const handleToggle = (optionValue: string) => {\n if (value.includes(optionValue)) {\n onValueChange?.(value.filter((v) => v !== optionValue))\n } else {\n if (maxSelected !== undefined && value.length >= maxSelected) return\n onValueChange?.([...value, optionValue])\n }\n }\n\n const handleRemove = (optionValue: string) => {\n onValueChange?.(value.filter((v) => v !== optionValue))\n }\n\n const displayedValues = value.slice(0, maxDisplayed)\n const overflowCount = value.length - maxDisplayed\n const isMaxReached = maxSelected !== undefined && value.length >= maxSelected\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div\n ref={ref}\n data-slot=\"multi-select\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-haspopup=\"listbox\"\n tabIndex={disabled ? -1 : 0}\n className={cn(\n \"flex min-h-9 w-full flex-wrap items-center gap-1.5 rounded-md border border-input bg-background px-3 py-1.5 text-sm\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\",\n \"hover:border-foreground/30 transition-colors\",\n open && \"ring-2 ring-ring ring-offset-2\",\n disabled && \"pointer-events-none opacity-50\",\n className\n )}\n onKeyDown={(e) => {\n if (disabled) return\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n setOpen((prev) => !prev)\n }\n }}\n >\n {value.length === 0 ? (\n <span className=\"text-muted-foreground\">{resolvedPlaceholder}</span>\n ) : (\n <>\n {displayedValues.map((v) => {\n const option = options.find((o) => o.value === v)\n return option ? (\n <FilterChip\n key={v}\n label={option.label}\n size=\"sm\"\n onRemove={() => handleRemove(v)}\n removeAriaLabel={`${strings.remove} ${option.label}`}\n />\n ) : null\n })}\n {overflowCount > 0 && (\n <Badge variant=\"secondary\" className=\"h-5 rounded-full px-2 text-xs\">\n +{overflowCount}\n </Badge>\n )}\n </>\n )}\n <ChevronDown\n className={cn(\n \"ms-auto size-4 shrink-0 text-muted-foreground transition-transform duration-200\",\n open && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[--radix-popover-trigger-width] p-0\"\n align=\"start\"\n sideOffset={4}\n >\n <Command>\n <CommandInput placeholder={resolvedSearchPlaceholder} />\n <CommandList id={listboxId}>\n {isLoading ? (\n <div className=\"p-2 space-y-1\">\n <Skeleton shape=\"line\" className=\"h-8\" aria-hidden=\"true\" />\n <Skeleton shape=\"line\" className=\"h-8\" aria-hidden=\"true\" />\n <Skeleton shape=\"line\" className=\"h-8\" aria-hidden=\"true\" />\n </div>\n ) : (\n <>\n <CommandEmpty>{resolvedEmptyMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => {\n const isSelected = value.includes(option.value)\n const isDisabled =\n option.disabled || (isMaxReached && !isSelected)\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n disabled={isDisabled}\n onSelect={() => handleToggle(option.value)}\n className=\"flex items-center gap-2\"\n >\n <div\n className={cn(\n \"flex size-4 shrink-0 items-center justify-center rounded border border-primary\",\n isSelected\n ? \"bg-primary text-primary-foreground\"\n : \"opacity-50\"\n )}\n aria-hidden=\"true\"\n >\n {isSelected && <Check className=\"size-3\" />}\n </div>\n <span>{option.label}</span>\n </CommandItem>\n )\n })}\n </CommandGroup>\n </>\n )}\n </CommandList>\n </Command>\n {value.length > 0 && (\n <div className=\"border-t p-2 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => onValueChange?.([])}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded\"\n >\n <X className=\"size-3\" aria-hidden=\"true\" />\n {strings.clearAll}\n </button>\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n }\n)\nMultiSelect.displayName = \"MultiSelect\"\n\nexport { MultiSelect }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { ToggleGroup, ToggleGroupItem } from './toggle-group'\n\nexport interface PeriodOption {\n value: string\n label: Record<SupportedLocale, string>\n}\n\nexport const DEFAULT_PERIODS: PeriodOption[] = [\n { value: '1d', label: { fa: '۱ روز', ar: 'يوم ١', en: '1D' } },\n { value: '7d', label: { fa: '۷ روز', ar: '٧ أيام', en: '7D' } },\n { value: '30d', label: { fa: '۳۰ روز', ar: '٣٠ يوم', en: '30D' } },\n { value: '90d', label: { fa: '۹۰ روز', ar: '٩٠ يوم', en: '90D' } },\n { value: '1y', label: { fa: '۱ سال', ar: 'سنة ١', en: '1Y' } },\n { value: 'all', label: { fa: 'همه', ar: 'الكل', en: 'All' } },\n]\n\nexport interface PeriodSelectorProps {\n /** Currently active period value */\n value: string\n /** Callback when a period is selected */\n onValueChange: (value: string) => void\n /** Custom period options — defaults to the 6 standard periods */\n periods?: PeriodOption[]\n /** Display locale — affects label language */\n locale?: SupportedLocale\n /** Size variant */\n size?: 'sm' | 'md'\n /** Disables all periods */\n disabled?: boolean\n /** Additional className */\n className?: string\n}\n\nconst PeriodSelector = React.forwardRef<React.ElementRef<typeof ToggleGroup>, PeriodSelectorProps>(\n (\n { value, onValueChange, periods = DEFAULT_PERIODS, locale = 'fa', size = 'sm', disabled = false, className },\n ref\n ) => {\n return (\n <ToggleGroup\n ref={ref}\n data-slot=\"period-selector\"\n type=\"single\"\n value={value}\n onValueChange={(newValue) => {\n // Prevent deselection — a period must always be selected\n if (newValue) {\n onValueChange(newValue)\n }\n }}\n disabled={disabled}\n dir=\"rtl\"\n className={cn('inline-flex rounded-md border border-border bg-background p-0.5 gap-0.5', className)}\n >\n {periods.map((period) => (\n <ToggleGroupItem\n key={period.value}\n value={period.value}\n data-slot=\"period-selector-item\"\n aria-label={period.label[locale]}\n className={cn(\n 'rounded-sm font-medium transition-all',\n 'data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:shadow-sm',\n 'data-[state=off]:text-muted-foreground data-[state=off]:hover:text-foreground',\n size === 'sm' ? 'px-2 py-0.5 text-xs' : 'px-3 py-1 text-sm'\n )}\n >\n {period.label[locale]}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )\n }\n)\nPeriodSelector.displayName = 'PeriodSelector'\n\nexport { PeriodSelector }\n","'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nexport type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads'\n\nexport interface SocialPlatformBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The social media platform to display */\n platform: SocialPlatform\n /** Size of the badge */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Show the platform name label */\n showLabel?: boolean\n /** Visual style of the badge */\n variant?: 'flat' | 'badge'\n}\n\nconst PLATFORM_META: Record<\n SocialPlatform,\n { label: string; icon: React.FC<{ className?: string; style?: React.CSSProperties }> }\n> = {\n instagram: {\n label: 'Instagram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\" />\n </svg>\n ),\n },\n twitter: {\n label: 'X',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.737-8.835L1.254 2.25H8.08l4.259 5.63 5.905-5.63zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n ),\n },\n tiktok: {\n label: 'TikTok',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.16 8.16 0 004.77 1.52V6.75a4.85 4.85 0 01-1-.06z\" />\n </svg>\n ),\n },\n youtube: {\n label: 'YouTube',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n ),\n },\n linkedin: {\n label: 'LinkedIn',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n ),\n },\n telegram: {\n label: 'Telegram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M11.944 0A12 12 0 000 12a12 12 0 0012 12 12 12 0 0012-12A12 12 0 0012 0a12 12 0 00-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 01.171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\" />\n </svg>\n ),\n },\n threads: {\n label: 'Threads',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.868 1.205 8.617.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.749-1.752-2.98-.065-1.19.388-2.285 1.277-3.086.84-.754 2.02-1.164 3.43-1.19.954-.018 1.858.09 2.695.322-.082-.858-.372-1.502-.861-1.903-.529-.434-1.32-.658-2.332-.67-.884.01-1.63.23-2.22.65l-1.11-1.75c.97-.625 2.18-.95 3.6-.97h.022c1.63.02 2.976.497 3.898 1.385.955.92 1.444 2.25 1.51 3.95.23.073.46.149.682.232 1.69.64 2.847 1.635 3.406 2.946.859 2.002.86 5.139-1.773 7.674-1.797 1.742-3.993 2.525-6.935 2.545zm.098-10.02c-.745.01-1.377.186-1.882.523-.443.298-.706.733-.67 1.215.03.564.342 1.017.876 1.275.516.25 1.087.299 1.58.127.684-.24 1.34-.93 1.614-2.366a9.68 9.68 0 00-1.518-.774z\" />\n </svg>\n ),\n },\n}\n\nconst socialPlatformBadgeVariants = cva('inline-flex items-center font-medium transition-colors duration-150', {\n variants: {\n size: {\n xs: 'gap-1',\n sm: 'gap-1.5',\n md: 'gap-1.5',\n lg: 'gap-2',\n },\n variant: {\n flat: '',\n badge: 'border border-border bg-surface-100',\n },\n },\n compoundVariants: [\n { variant: 'badge', size: 'xs', className: 'px-1.5 py-0.5 rounded' },\n { variant: 'badge', size: 'sm', className: 'px-2 py-1 rounded' },\n { variant: 'badge', size: 'md', className: 'px-2.5 py-1 rounded-md' },\n { variant: 'badge', size: 'lg', className: 'px-3 py-1.5 rounded-md' },\n ],\n defaultVariants: { size: 'sm', variant: 'flat' },\n})\n\n/** Size-specific classes for child elements (icon, text) */\nconst SIZE_CHILD_CLASSES = {\n xs: { icon: 'size-3', text: 'text-xs' },\n sm: { icon: 'size-4', text: 'text-xs' },\n md: { icon: 'size-5', text: 'text-sm' },\n lg: { icon: 'size-6', text: 'text-base' },\n}\n\nconst SocialPlatformBadge = React.forwardRef<HTMLSpanElement, SocialPlatformBadgeProps>(\n ({ className, platform, size = 'sm', showLabel = false, variant = 'flat', style, ...props }, ref) => {\n const meta = PLATFORM_META[platform]\n const Icon = meta.icon\n const sizeClasses = SIZE_CHILD_CLASSES[size]\n\n return (\n <span\n ref={ref}\n data-slot=\"social-platform-badge\"\n className={cn(socialPlatformBadgeVariants({ size, variant }), className)}\n style={style}\n {...props}\n >\n <Icon className={cn(sizeClasses.icon, 'shrink-0')} style={{ color: `var(--social-platform-${platform})` }} />\n {showLabel && <span className={cn(sizeClasses.text, 'text-foreground-light')}>{meta.label}</span>}\n </span>\n )\n }\n)\n\nSocialPlatformBadge.displayName = 'SocialPlatformBadge'\n\nexport { SocialPlatformBadge, socialPlatformBadgeVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { Search, X, Loader2, SlidersHorizontal } from 'lucide-react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { InputVariants } from './input'\nimport type { VariantProps } from 'class-variance-authority'\n\nconst STRINGS = {\n fa: {\n placeholder: 'جستجو...',\n clear: 'پاک کردن',\n filter: 'فیلتر',\n },\n ar: {\n placeholder: 'بحث...',\n clear: 'مسح',\n filter: 'تصفية',\n },\n en: {\n placeholder: 'Search...',\n clear: 'Clear',\n filter: 'Filter',\n },\n}\n\nexport interface SearchInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof InputVariants> {\n /** Locale for placeholder and aria labels */\n locale?: SupportedLocale\n /** Show a loading spinner instead of the clear button */\n isLoading?: boolean\n /** Called when the clear (×) button is clicked */\n onClear?: () => void\n /** Show a filter button at the end */\n showFilterButton?: boolean\n /** Called when the filter button is clicked */\n onFilterClick?: () => void\n /** Whether the filter button shows an active state */\n filterActive?: boolean\n /** Container className */\n wrapperClassName?: string\n}\n\nconst SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n wrapperClassName,\n size = 'sm',\n locale = 'fa',\n isLoading = false,\n onClear,\n showFilterButton = false,\n onFilterClick,\n filterActive = false,\n value,\n defaultValue,\n onChange,\n placeholder,\n ...props\n },\n ref\n ) => {\n const strings = STRINGS[locale] ?? STRINGS.fa\n\n // Track value for uncontrolled mode to show/hide clear button\n const [internalValue, setInternalValue] = React.useState<string>(\n typeof defaultValue === 'string' ? defaultValue : ''\n )\n\n const isControlled = value !== undefined\n const currentValue = isControlled ? String(value ?? '') : internalValue\n const hasValue = currentValue.length > 0\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue('')\n }\n onClear?.()\n }\n\n // Icon sizes based on input size\n const iconSize = size === 'xs' ? 'size-3' : size === 'lg' || size === 'xl' ? 'size-5' : 'size-4'\n\n // Padding offsets to account for icons\n const paddingStart = size === 'xs' ? 'ps-7' : size === 'lg' || size === 'xl' ? 'ps-10' : 'ps-9'\n const paddingEnd =\n (hasValue || isLoading) && showFilterButton\n ? size === 'xs'\n ? 'pe-14'\n : 'pe-16'\n : hasValue || isLoading\n ? size === 'xs'\n ? 'pe-7'\n : 'pe-9'\n : showFilterButton\n ? size === 'xs'\n ? 'pe-7'\n : 'pe-9'\n : ''\n\n return (\n <div data-slot=\"search-input\" className={cn('relative flex items-center', wrapperClassName)}>\n {/* Search icon — inline-start */}\n <span className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center ps-2.5\" aria-hidden=\"true\">\n <Search className={cn(iconSize, 'text-foreground-muted')} />\n </span>\n\n <input\n ref={ref}\n type=\"search\"\n role=\"searchbox\"\n placeholder={placeholder ?? strings.placeholder}\n value={isControlled ? value : internalValue}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n className={cn(\n InputVariants({ size }),\n paddingStart,\n paddingEnd,\n // hide browser's default clear button\n '[&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden',\n className\n )}\n {...props}\n />\n\n {/* Trailing area: spinner | clear button | filter button */}\n <span className=\"absolute inset-y-0 end-0 flex items-center gap-0.5 pe-2\">\n {isLoading ? (\n <Loader2 className={cn(iconSize, 'animate-spin text-foreground-muted')} />\n ) : hasValue && onClear ? (\n <button\n type=\"button\"\n onClick={handleClear}\n aria-label={strings.clear}\n className={cn(\n 'flex items-center justify-center rounded text-foreground-muted',\n 'hover:text-foreground hover:bg-surface-200',\n 'transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n size === 'xs' ? 'size-4' : 'size-5'\n )}\n >\n <X className={cn(size === 'xs' ? 'size-2.5' : 'size-3.5')} />\n </button>\n ) : null}\n\n {showFilterButton && (\n <button\n type=\"button\"\n onClick={onFilterClick}\n aria-label={strings.filter}\n aria-pressed={filterActive}\n className={cn(\n 'flex items-center justify-center rounded text-foreground-muted',\n 'hover:text-foreground hover:bg-surface-200',\n 'transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n size === 'xs' ? 'size-4' : 'size-5',\n filterActive && 'text-brand'\n )}\n >\n <SlidersHorizontal className={cn(size === 'xs' ? 'size-2.5' : 'size-3.5')} />\n </button>\n )}\n </span>\n </div>\n )\n }\n)\n\nSearchInput.displayName = 'SearchInput'\n\nexport { SearchInput }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\n\nexport interface SentimentData {\n positive: number\n negative: number\n neutral: number\n mixed?: number\n}\n\nexport interface SentimentDistributionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Sentiment counts (will be auto-normalized to 100%) */\n data: SentimentData\n /** Display mode */\n variant?: 'bars' | 'stacked' | 'compact'\n /** Show numeric count labels */\n showCounts?: boolean\n /** Show percentage labels */\n showPercent?: boolean\n /** Locale for number/label formatting */\n locale?: SupportedLocale\n /** Show loading skeleton */\n isLoading?: boolean\n}\n\nconst LABELS: Record<SupportedLocale, Record<keyof SentimentData, string>> = {\n fa: { positive: 'مثبت', negative: 'منفی', neutral: 'خنثی', mixed: 'ترکیبی' },\n ar: { positive: 'إيجابي', negative: 'سلبي', neutral: 'محايد', mixed: 'مختلط' },\n en: { positive: 'Positive', negative: 'Negative', neutral: 'Neutral', mixed: 'Mixed' },\n}\n\nconst SENTIMENT_STYLES: Record<keyof SentimentData, { bar: string; text: string; bg: string }> = {\n positive: {\n bar: 'bg-[hsl(var(--sentiment-positive))]',\n text: 'text-[hsl(var(--sentiment-positive))]',\n bg: 'bg-[hsl(var(--sentiment-positive)/0.12)]',\n },\n negative: {\n bar: 'bg-[hsl(var(--sentiment-negative))]',\n text: 'text-[hsl(var(--sentiment-negative))]',\n bg: 'bg-[hsl(var(--sentiment-negative)/0.12)]',\n },\n neutral: {\n bar: 'bg-[hsl(var(--sentiment-neutral))]',\n text: 'text-[hsl(var(--sentiment-neutral))]',\n bg: 'bg-[hsl(var(--sentiment-neutral)/0.12)]',\n },\n mixed: {\n bar: 'bg-[hsl(var(--sentiment-mixed))]',\n text: 'text-[hsl(var(--sentiment-mixed))]',\n bg: 'bg-[hsl(var(--sentiment-mixed)/0.12)]',\n },\n}\n\nfunction calcPercents(data: SentimentData): Record<keyof SentimentData, number> {\n const keys = (['positive', 'negative', 'neutral', 'mixed'] as const).filter((k) => (data[k] ?? 0) > 0)\n const total = (['positive', 'negative', 'neutral', 'mixed'] as const).reduce((sum, k) => sum + (data[k] ?? 0), 0)\n if (total === 0) return { positive: 0, negative: 0, neutral: 0, mixed: 0 }\n\n // Largest remainder method — guarantees percentages sum to exactly 100\n const floats = keys.map((k) => ({ k, v: ((data[k] ?? 0) / total) * 100 }))\n const floors = floats.map(({ k, v }) => ({ k, floor: Math.floor(v), rem: v - Math.floor(v) }))\n const remaining = 100 - floors.reduce((s, f) => s + f.floor, 0)\n const sorted = [...floors].sort((a, b) => b.rem - a.rem)\n sorted.slice(0, remaining).forEach((f) => f.floor++)\n\n const result: Record<string, number> = { positive: 0, negative: 0, neutral: 0, mixed: 0 }\n sorted.forEach(({ k, floor }) => (result[k] = floor))\n return result as Record<keyof SentimentData, number>\n}\n\nconst SENTIMENT_ORDER: Array<keyof SentimentData> = ['positive', 'neutral', 'mixed', 'negative']\n\nconst SentimentDistribution = React.forwardRef<HTMLDivElement, SentimentDistributionProps>(\n (\n {\n className,\n data,\n variant = 'bars',\n showCounts = false,\n showPercent = true,\n locale = 'fa',\n isLoading = false,\n ...props\n },\n ref\n ) => {\n const labels = LABELS[locale] ?? LABELS.fa\n const percents = calcPercents(data)\n const activeOrder = SENTIMENT_ORDER.filter((key) => (data[key] ?? 0) > 0)\n\n if (isLoading) {\n return (\n <div ref={ref} data-slot=\"sentiment-distribution\" className={cn('space-y-2', className)} {...props}>\n {variant === 'stacked' ? (\n <div className=\"h-3 w-full rounded-full bg-muted animate-pulse\" />\n ) : variant === 'compact' ? (\n <div className=\"flex gap-2\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n ))}\n </div>\n ) : (\n <div className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-3 w-12 rounded bg-muted animate-pulse\" />\n <div className=\"h-2 flex-1 rounded-full bg-muted animate-pulse\" />\n <div className=\"h-3 w-8 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Stacked bar variant — a single horizontal bar split by sentiment\n if (variant === 'stacked') {\n return (\n <div ref={ref} data-slot=\"sentiment-distribution\" className={cn('space-y-2', className)} {...props}>\n {/* Stacked bar */}\n <div\n className=\"flex h-3 w-full overflow-hidden rounded-full bg-muted\"\n role=\"img\"\n aria-label={`${labels.positive} ${percents.positive}٪، ${labels.negative} ${percents.negative}٪، ${labels.neutral} ${percents.neutral}٪`}\n >\n {activeOrder.map((key) => (\n <div\n key={key}\n className={cn('transition-all duration-500', SENTIMENT_STYLES[key].bar)}\n style={{ width: `${percents[key]}%` }}\n />\n ))}\n </div>\n\n {/* Legend */}\n <div className=\"flex flex-wrap gap-x-3 gap-y-1\">\n {activeOrder.map((key) => (\n <span key={key} className=\"inline-flex items-center gap-1\">\n <span className={cn('inline-block h-2 w-2 rounded-full', SENTIMENT_STYLES[key].bar)} />\n <span className=\"text-xs text-foreground-light\">{labels[key]}</span>\n {showPercent && (\n <span className={cn('text-xs font-medium', SENTIMENT_STYLES[key].text)}>\n {convertToLocalNumbers(percents[key], locale)}\n {locale === 'en' ? '%' : '٪'}\n </span>\n )}\n {showCounts && (\n <span className=\"text-xs text-foreground-muted\">\n ({convertToLocalNumbers(data[key] ?? 0, locale)})\n </span>\n )}\n </span>\n ))}\n </div>\n </div>\n )\n }\n\n // Compact variant — inline chips with percentage\n if (variant === 'compact') {\n return (\n <div\n ref={ref}\n data-slot=\"sentiment-distribution\"\n className={cn('inline-flex flex-wrap gap-2', className)}\n {...props}\n >\n {activeOrder.map((key) => (\n <span\n key={key}\n className={cn('inline-flex items-center gap-1 rounded-full px-2 py-0.5', SENTIMENT_STYLES[key].bg)}\n >\n <span className={cn('text-xs font-medium', SENTIMENT_STYLES[key].text)}>{labels[key]}</span>\n {showPercent && (\n <span className={cn('text-xs font-bold tabular-nums', SENTIMENT_STYLES[key].text)}>\n {convertToLocalNumbers(percents[key], locale)}\n {locale === 'en' ? '%' : '٪'}\n </span>\n )}\n {showCounts && (\n <span className=\"text-xs text-foreground-muted tabular-nums\">\n ({convertToLocalNumbers((data[key] ?? 0).toLocaleString(), locale)})\n </span>\n )}\n </span>\n ))}\n </div>\n )\n }\n\n // Default — \"bars\" variant: individual rows per sentiment\n return (\n <div ref={ref} data-slot=\"sentiment-distribution\" className={cn('space-y-1.5', className)} {...props}>\n {activeOrder.map((key) => (\n <div key={key} className=\"flex items-center gap-2\">\n {/* Label */}\n <span className=\"w-10 shrink-0 text-xs text-foreground-light text-end\">{labels[key]}</span>\n\n {/* Progress bar */}\n <div className=\"relative flex-1 h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className={cn(\n 'absolute inset-y-0 start-0 rounded-full transition-all duration-500',\n SENTIMENT_STYLES[key].bar\n )}\n style={{ width: `${percents[key]}%` }}\n role=\"progressbar\"\n aria-valuenow={percents[key]}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${labels[key]}: ${percents[key]}%`}\n />\n </div>\n\n {/* Value */}\n <span\n className={cn('w-10 shrink-0 text-xs font-medium tabular-nums text-start', SENTIMENT_STYLES[key].text)}\n >\n {showCounts\n ? convertToLocalNumbers((data[key] ?? 0).toLocaleString(), locale)\n : `${convertToLocalNumbers(percents[key], locale)}${locale === 'en' ? '%' : '٪'}`}\n </span>\n </div>\n ))}\n </div>\n )\n }\n)\n\nSentimentDistribution.displayName = 'SentimentDistribution'\n\nexport { SentimentDistribution }\n","'use client'\n\nimport * as React from 'react'\nimport { Info } from 'lucide-react'\nimport { Card } from './card'\nimport { Skeleton } from './skeleton'\nimport { TrendIndicator } from './trend-indicator'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\nimport { cn, type SupportedLocale } from '@/lib/utils'\n\nconst STRINGS = {\n fa: { currentPeriod: 'دوره جاری', previousPeriod: 'دوره قبل', change: 'تغییر' },\n ar: { currentPeriod: 'الفترة الحالية', previousPeriod: 'الفترة السابقة', change: 'التغيير' },\n en: { currentPeriod: 'Current period', previousPeriod: 'Previous period', change: 'Change' },\n}\n\nexport interface ComparisonCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Card title */\n title: string\n /** Optional tooltip explaining the metric */\n tooltip?: string\n /** Optional icon shown before the title */\n icon?: React.ReactNode\n /** Label for the current period (e.g. \"این ماه\") */\n currentLabel?: string\n /** Label for the previous period (e.g. \"ماه قبل\") */\n previousLabel?: string\n /** Current period value — formatted string or number */\n currentValue: React.ReactNode\n /** Previous period value — formatted string or number */\n previousValue: React.ReactNode\n /**\n * Percentage change from previous to current.\n * If omitted, the change indicator row is hidden.\n */\n changePercent?: number\n /**\n * Whether a higher value is considered better (green).\n * @default true\n */\n higherIsBetter?: boolean\n /** Show loading skeleton */\n isLoading?: boolean\n /** Locale for number formatting and default labels */\n locale?: SupportedLocale\n}\n\nconst ComparisonCard = React.forwardRef<HTMLDivElement, ComparisonCardProps>(\n (\n {\n className,\n title,\n tooltip,\n icon,\n currentLabel,\n previousLabel,\n currentValue,\n previousValue,\n changePercent,\n higherIsBetter = true,\n isLoading = false,\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const strings = STRINGS[locale] ?? STRINGS.fa\n const resolvedCurrentLabel = currentLabel ?? strings.currentPeriod\n const resolvedPreviousLabel = previousLabel ?? strings.previousPeriod\n\n if (isLoading) {\n return (\n <Card ref={ref} data-slot=\"comparison-card\" className={cn('p-4 space-y-3', className)} {...props}>\n <Skeleton className=\"h-4 w-28\" />\n <div className=\"grid grid-cols-2 gap-3 pt-1\">\n <div className=\"space-y-1\">\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-7 w-20\" />\n </div>\n <div className=\"space-y-1\">\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-7 w-20\" />\n </div>\n </div>\n <Skeleton className=\"h-4 w-24\" />\n </Card>\n )\n }\n\n // Determine trend direction taking higherIsBetter into account\n const trendDirection =\n changePercent === undefined\n ? undefined\n : changePercent === 0\n ? 'neutral'\n : higherIsBetter\n ? changePercent > 0\n ? 'up'\n : 'down'\n : changePercent < 0\n ? 'up'\n : 'down'\n\n const titleContent = (\n <span className=\"flex items-center gap-1.5\">\n {icon && <span className=\"text-foreground-light\">{icon}</span>}\n <h3 className=\"text-xs font-normal text-foreground-light uppercase tracking-wide\">{title}</h3>\n {tooltip && <Info className=\"h-3.5 w-3.5 text-foreground-lighter shrink-0\" />}\n </span>\n )\n\n return (\n <Card ref={ref} data-slot=\"comparison-card\" className={cn('p-4 space-y-3', className)} {...props}>\n {/* Header */}\n {tooltip ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"cursor-help w-fit\">{titleContent}</div>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : (\n <div>{titleContent}</div>\n )}\n\n {/* Two-column values */}\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Current period */}\n <div className=\"space-y-0.5 pe-3 border-e border-border\">\n <span className=\"block text-xs text-foreground-muted\">{resolvedCurrentLabel}</span>\n <div className=\"text-2xl font-semibold tabular-nums text-foreground\">{currentValue}</div>\n </div>\n\n {/* Previous period */}\n <div className=\"space-y-0.5 ps-3\">\n <span className=\"block text-xs text-foreground-muted\">{resolvedPreviousLabel}</span>\n <div className=\"text-2xl font-semibold tabular-nums text-foreground-light\">{previousValue}</div>\n </div>\n </div>\n\n {/* Change row */}\n {changePercent !== undefined && trendDirection !== undefined && (\n <div className=\"flex items-center gap-1.5 pt-2 border-t border-border\">\n <span className=\"text-xs text-foreground-muted\">{strings.change}:</span>\n <TrendIndicator\n value={Math.abs(changePercent)}\n direction={trendDirection}\n size=\"sm\"\n locale={locale}\n showPercent\n />\n {changePercent !== 0 && (\n <span className=\"text-xs text-foreground-muted\">{changePercent > 0 ? '↑' : '↓'}</span>\n )}\n </div>\n )}\n </Card>\n )\n }\n)\n\nComparisonCard.displayName = 'ComparisonCard'\n\nexport { ComparisonCard }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { getUIStrings } from '@/lib/i18n'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableSortHeader } from '@/components/ui/table'\nimport { PaginationControlled } from '@/components/ui/pagination-controlled'\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface DataTableColumn<TData> {\n /** Unique key identifying the column — used for sort callbacks */\n id: string\n /** Column header label */\n header: React.ReactNode\n /** Render function for cell content */\n cell: (row: TData, rowIndex: number) => React.ReactNode\n /** Whether this column is sortable */\n sortable?: boolean\n /** Additional className for both <th> and <td> */\n className?: string\n /** Column alignment */\n align?: 'start' | 'center' | 'end'\n}\n\nexport interface DataTablePagination {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n}\n\nexport interface DataTableSort {\n column: string | null\n direction: SortDirection | null\n onSort: (column: string, direction: SortDirection) => void\n}\n\nexport interface DataTableSelection<TData> {\n selectedRows: Set<number>\n onSelectionChange: (selectedRows: Set<number>) => void\n /** Function to get a unique key for each row (defaults to index) */\n getRowKey?: (row: TData, index: number) => number\n}\n\nexport interface DataTableProps<TData> {\n /** Column definitions */\n columns: DataTableColumn<TData>[]\n /** Data rows */\n data: TData[]\n /** Table size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Show loading skeleton */\n isLoading?: boolean\n /** Number of skeleton rows to show when loading */\n loadingRows?: number\n /** Content to show when data is empty (not loading) */\n emptyState?: React.ReactNode\n /** Pagination configuration */\n pagination?: DataTablePagination\n /** Sort configuration */\n sort?: DataTableSort\n /** Row selection configuration */\n selection?: DataTableSelection<TData>\n /** Zebra-striped rows */\n striped?: boolean\n /** Bordered cells */\n bordered?: boolean\n /** Sticky header */\n stickyHeader?: boolean\n /** Additional className for the root wrapper */\n className?: string\n /** Caption text below the table */\n caption?: string\n /** Total result count shown above table (e.g. \"۲۴ نتیجه\") */\n resultCount?: React.ReactNode\n /** Locale for UI strings @default 'fa' */\n locale?: SupportedLocale\n}\n\n/* -------------------------------------------------------------------------- */\n/* DataTable */\n/* -------------------------------------------------------------------------- */\n\nfunction DataTableInner<TData>(\n {\n columns,\n data,\n size = 'md',\n isLoading = false,\n loadingRows = 5,\n emptyState,\n pagination,\n sort,\n selection,\n striped = false,\n bordered = false,\n stickyHeader = false,\n className,\n caption,\n resultCount,\n locale = 'fa',\n }: DataTableProps<TData>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const t = getUIStrings(locale)\n const hasSelection = !!selection\n const allColumnCount = columns.length + (hasSelection ? 1 : 0)\n\n const getRowKey = selection?.getRowKey ?? ((_: TData, index: number) => index)\n\n const allRowKeys = React.useMemo(() => data.map((row, i) => getRowKey(row, i)), [data, getRowKey])\n\n const allSelected = hasSelection && data.length > 0 && allRowKeys.every((key) => selection.selectedRows.has(key))\n\n const someSelected = hasSelection && !allSelected && allRowKeys.some((key) => selection.selectedRows.has(key))\n\n const handleSelectAll = () => {\n if (!selection) return\n if (allSelected) {\n selection.onSelectionChange(new Set())\n } else {\n selection.onSelectionChange(new Set(allRowKeys))\n }\n }\n\n const handleSelectRow = (key: number) => {\n if (!selection) return\n const next = new Set(selection.selectedRows)\n if (next.has(key)) {\n next.delete(key)\n } else {\n next.add(key)\n }\n selection.onSelectionChange(next)\n }\n\n const handleSort = (columnId: string) => {\n if (!sort) return\n const nextDirection: SortDirection = sort.column === columnId && sort.direction === 'asc' ? 'desc' : 'asc'\n sort.onSort(columnId, nextDirection)\n }\n\n const getSortDir = (columnId: string): 'asc' | 'desc' | 'none' => {\n if (!sort || sort.column !== columnId || !sort.direction) return 'none'\n return sort.direction\n }\n\n const alignClass = (align?: 'start' | 'center' | 'end') => {\n if (align === 'center') return 'text-center'\n if (align === 'end') return 'text-end'\n return 'text-start'\n }\n\n return (\n <div ref={ref} data-slot=\"data-table\" className={cn('flex flex-col gap-4', className)}>\n {resultCount && (\n <div data-slot=\"data-table-result-count\" className=\"text-sm text-foreground-muted\">\n {resultCount}\n </div>\n )}\n\n <Table size={size} striped={striped} bordered={bordered} stickyHeader={stickyHeader}>\n {caption && <caption className=\"text-foreground-muted mt-4 text-sm\">{caption}</caption>}\n\n <TableHeader>\n <TableRow>\n {hasSelection && (\n <TableHead className=\"w-[40px]\">\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={handleSelectAll}\n aria-label={t.selectAll}\n />\n </TableHead>\n )}\n {columns.map((col) => (\n <TableHead\n key={col.id}\n sortDirection={sort && col.sortable ? getSortDir(col.id) : undefined}\n className={cn(alignClass(col.align), col.className)}\n >\n {col.sortable && sort ? (\n <TableSortHeader\n sorted={sort.column === col.id ? (sort.direction ?? false) : false}\n onClick={() => handleSort(col.id)}\n >\n {col.header}\n </TableSortHeader>\n ) : (\n col.header\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n\n <TableBody>\n {isLoading ? (\n Array.from({ length: loadingRows }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {hasSelection && (\n <TableCell>\n <Skeleton className=\"h-4 w-4\" />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell key={col.id} className={cn(alignClass(col.align), col.className)}>\n <Skeleton className=\"h-4 w-full max-w-[120px]\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={allColumnCount}>\n {emptyState || (\n <div className=\"flex items-center justify-center py-10 text-foreground-muted text-sm\">\n {t.noDataToDisplay}\n </div>\n )}\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIdx) => {\n const rowKey = getRowKey(row, rowIdx)\n const isSelected = hasSelection && selection.selectedRows.has(rowKey)\n return (\n <TableRow key={rowKey} data-state={isSelected ? 'selected' : undefined}>\n {hasSelection && (\n <TableCell>\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => handleSelectRow(rowKey)}\n aria-label={`${t.selectRow} ${(rowIdx + 1).toLocaleString(locale === 'fa' ? 'fa-IR' : locale === 'ar' ? 'ar-SA' : 'en-US')}`}\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell key={col.id} className={cn(alignClass(col.align), col.className)}>\n {col.cell(row, rowIdx)}\n </TableCell>\n ))}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n\n {pagination && pagination.totalPages > 1 && (\n <div data-slot=\"data-table-pagination\" className=\"flex justify-center\">\n <PaginationControlled\n currentPage={pagination.currentPage}\n totalPages={pagination.totalPages}\n onPageChange={pagination.onPageChange}\n />\n </div>\n )}\n </div>\n )\n}\n\nconst DataTable = React.forwardRef(DataTableInner) as <TData>(\n props: DataTableProps<TData> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(DataTable as { displayName?: string }).displayName = 'DataTable'\n\nexport { DataTable }\n","'use client'\n\nimport * as React from 'react'\nimport { useDocumentDirection } from '@/hooks/use-document-direction'\n\nexport interface DirectionalBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Override the detected document direction.\n * When not provided, reads from `useDocumentDirection`.\n */\n dir?: 'rtl' | 'ltr'\n /**\n * Content rendered when direction is RTL.\n * If not provided, renders `children` in both directions.\n */\n rtl?: React.ReactNode\n /**\n * Content rendered when direction is LTR.\n * If not provided, renders `children` in both directions.\n */\n ltr?: React.ReactNode\n}\n\nconst DirectionalBox = React.forwardRef<HTMLDivElement, DirectionalBoxProps>(\n ({ className, dir, rtl, ltr, children, ...props }, ref) => {\n const docDir = useDocumentDirection()\n const resolvedDir = dir ?? docDir\n\n const content = resolvedDir === 'rtl' ? (rtl ?? children) : (ltr ?? children)\n\n return (\n <div ref={ref} data-slot=\"directional-box\" dir={resolvedDir} className={className} {...props}>\n {content}\n </div>\n )\n }\n)\nDirectionalBox.displayName = 'DirectionalBox'\n\nexport { DirectionalBox }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { Spinner } from './spinner'\n\n/* -------------------------------------------------------------------------- */\n/* PageLoader — full-page centered loading indicator */\n/* -------------------------------------------------------------------------- */\n\nconst pageLoaderVariants = cva('flex flex-col items-center justify-center gap-3 text-center', {\n variants: {\n /** Controls the minimum height of the loader container */\n fullScreen: {\n true: 'fixed inset-0 z-overlay bg-background/80 backdrop-blur-sm',\n false: 'min-h-[400px] w-full',\n },\n },\n defaultVariants: {\n fullScreen: false,\n },\n})\n\nexport interface PageLoaderProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof pageLoaderVariants> {\n /** Optional message displayed below the spinner */\n message?: string\n /** Spinner size @default \"lg\" */\n spinnerSize?: 'sm' | 'md' | 'lg' | 'xl'\n}\n\nconst PageLoader = React.forwardRef<HTMLDivElement, PageLoaderProps>(\n ({ className, fullScreen, message, spinnerSize = 'lg', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-loader\"\n role=\"status\"\n aria-label={message ?? 'در حال بارگذاری...'}\n className={cn(pageLoaderVariants({ fullScreen }), className)}\n {...props}\n >\n <Spinner size={spinnerSize} />\n {message && <p className=\"text-sm text-foreground-muted animate-pulse-subtle\">{message}</p>}\n </div>\n )\n)\nPageLoader.displayName = 'PageLoader'\n\nexport { PageLoader, pageLoaderVariants }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { ErrorState } from './error-state'\n\n/* -------------------------------------------------------------------------- */\n/* ErrorBoundary — React error boundary with fallback UI */\n/* -------------------------------------------------------------------------- */\n\nexport interface ErrorBoundaryProps {\n children: React.ReactNode\n /** Custom fallback UI. Receives the error and a reset function. */\n fallback?: React.ReactNode | ((props: { error: Error; reset: () => void }) => React.ReactNode)\n /** Callback when an error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n /** Optional className for the wrapper when error is shown */\n className?: string\n}\n\ninterface ErrorBoundaryState {\n error: Error | null\n}\n\nclass ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n static displayName = 'ErrorBoundary'\n\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { error: null }\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n this.props.onError?.(error, errorInfo)\n }\n\n reset = (): void => {\n this.setState({ error: null })\n }\n\n render(): React.ReactNode {\n const { error } = this.state\n const { children, fallback, className } = this.props\n\n if (error) {\n if (typeof fallback === 'function') {\n return fallback({ error, reset: this.reset })\n }\n\n if (fallback) {\n return fallback\n }\n\n return (\n <div data-slot=\"error-boundary\" className={cn('w-full', className)}>\n <ErrorState message={error.message} onRetry={this.reset} size=\"lg\" />\n </div>\n )\n }\n\n return children\n }\n}\n\nexport { ErrorBoundary }\n","'use client'\n\nimport * as React from 'react'\nimport { useState, useCallback } from 'react'\nimport { ImageIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* SafeImage — image component with fallback on error and loading state */\n/* -------------------------------------------------------------------------- */\n\nexport interface SafeImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Fallback content rendered when the image fails to load.\n * Defaults to a placeholder icon. */\n fallback?: React.ReactNode\n /** Additional className for the wrapper div (applied when fallback is shown) */\n wrapperClassName?: string\n}\n\nconst SafeImage = React.forwardRef<HTMLImageElement, SafeImageProps>(\n ({ className, fallback, wrapperClassName, src, alt = '', onError, onLoad, ...props }, ref) => {\n const [status, setStatus] = useState<'loading' | 'loaded' | 'error'>(src ? 'loading' : 'error')\n\n const handleError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setStatus('error')\n onError?.(e)\n },\n [onError]\n )\n\n const handleLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setStatus('loaded')\n onLoad?.(e)\n },\n [onLoad]\n )\n\n if (status === 'error' || !src) {\n if (fallback) {\n return <>{fallback}</>\n }\n\n return (\n <div\n data-slot=\"safe-image-fallback\"\n className={cn(\n 'flex items-center justify-center bg-background-muted text-foreground-muted',\n wrapperClassName,\n className\n )}\n role=\"img\"\n aria-label={alt}\n >\n <ImageIcon className=\"size-6 opacity-40\" aria-hidden=\"true\" />\n </div>\n )\n }\n\n return (\n <img\n ref={ref}\n data-slot=\"safe-image\"\n src={src}\n alt={alt}\n loading=\"lazy\"\n onError={handleError}\n onLoad={handleLoad}\n className={cn(status === 'loading' && 'animate-pulse-subtle', className)}\n {...props}\n />\n )\n }\n)\nSafeImage.displayName = 'SafeImage'\n\nexport { SafeImage }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { InfoIcon, AlertTriangleIcon, AlertCircleIcon, CheckCircle2Icon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Callout — contextual information/warning/success block */\n/* -------------------------------------------------------------------------- */\n\nconst calloutVariants = cva('flex gap-3 rounded-lg border p-4 text-sm leading-relaxed transition-colors duration-150', {\n variants: {\n variant: {\n info: 'border-brand-300 bg-brand-200 text-foreground-default [&>[data-slot=callout-icon]]:text-brand-default',\n warning:\n 'border-warning-300 bg-warning-200 text-foreground-default [&>[data-slot=callout-icon]]:text-warning-default',\n destructive:\n 'border-destructive-300 bg-destructive-200 text-foreground-default [&>[data-slot=callout-icon]]:text-destructive-default',\n success:\n 'border-[hsl(var(--score-excellent)/0.25)] bg-[hsl(var(--score-excellent-bg))] text-foreground-default [&>[data-slot=callout-icon]]:text-[hsl(var(--score-excellent))]',\n neutral:\n 'border-border-muted bg-background-surface-100 text-foreground-default [&>[data-slot=callout-icon]]:text-foreground-lighter',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n})\n\nconst defaultIcons: Record<NonNullable<VariantProps<typeof calloutVariants>['variant']>, React.ReactNode> = {\n info: <InfoIcon className=\"size-5 shrink-0\" />,\n warning: <AlertTriangleIcon className=\"size-5 shrink-0\" />,\n destructive: <AlertCircleIcon className=\"size-5 shrink-0\" />,\n success: <CheckCircle2Icon className=\"size-5 shrink-0\" />,\n neutral: <InfoIcon className=\"size-5 shrink-0\" />,\n}\n\nexport interface CalloutProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {\n /** Custom icon. Set to `null` to hide the icon. */\n icon?: React.ReactNode | null\n}\n\nconst Callout = React.forwardRef<HTMLDivElement, CalloutProps>(\n ({ className, variant = 'info', icon, children, ...props }, ref) => {\n const resolvedIcon = icon === null ? null : (icon ?? defaultIcons[variant ?? 'info'])\n\n return (\n <div\n ref={ref}\n data-slot=\"callout\"\n role={variant === 'destructive' || variant === 'warning' ? 'alert' : 'note'}\n className={cn(calloutVariants({ variant }), className)}\n {...props}\n >\n {resolvedIcon && (\n <span data-slot=\"callout-icon\" className=\"mt-0.5\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n )}\n <div data-slot=\"callout-content\" className=\"flex-1 min-w-0\">\n {children}\n </div>\n </div>\n )\n }\n)\nCallout.displayName = 'Callout'\n\nconst CalloutTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} data-slot=\"callout-title\" className={cn('font-semibold leading-snug', className)} {...props} />\n )\n)\nCalloutTitle.displayName = 'CalloutTitle'\n\nconst CalloutDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} data-slot=\"callout-description\" className={cn('text-foreground-light mt-1', className)} {...props} />\n )\n)\nCalloutDescription.displayName = 'CalloutDescription'\n\nexport { Callout, CalloutTitle, CalloutDescription, calloutVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { useEffect, useRef, useState, useCallback } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* AnimatedNumber — count-up animation for KPI values */\n/* Pure CSS/JS implementation — no framer-motion dependency required */\n/* -------------------------------------------------------------------------- */\n\nexport interface AnimatedNumberProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** The target value to animate to */\n value: number\n /** Animation duration in milliseconds @default 600 */\n duration?: number\n /** Number of decimal places @default 0 */\n decimals?: number\n /** Format function applied to the final displayed number.\n * Receives the current animated value. */\n formatFn?: (value: number) => string\n /** Whether to animate on value change or only on mount @default true */\n animateOnChange?: boolean\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nconst AnimatedNumber = React.forwardRef<HTMLSpanElement, AnimatedNumberProps>(\n ({ className, value, duration = 600, decimals = 0, formatFn, animateOnChange = true, ...props }, ref) => {\n const [displayed, setDisplayed] = useState(0)\n const prevValue = useRef(0)\n const rafRef = useRef<number>(0)\n\n const animate = useCallback(\n (from: number, to: number) => {\n // Respect reduced motion preference\n const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches\n if (prefersReducedMotion) {\n setDisplayed(to)\n return\n }\n\n const startTime = performance.now()\n const delta = to - from\n\n function tick(now: number) {\n const elapsed = now - startTime\n const progress = Math.min(elapsed / duration, 1)\n const easedProgress = easeOutCubic(progress)\n setDisplayed(from + delta * easedProgress)\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick)\n }\n }\n\n cancelAnimationFrame(rafRef.current)\n rafRef.current = requestAnimationFrame(tick)\n },\n [duration]\n )\n\n useEffect(() => {\n if (animateOnChange || prevValue.current === 0) {\n animate(prevValue.current, value)\n } else {\n setDisplayed(value)\n }\n prevValue.current = value\n\n return () => cancelAnimationFrame(rafRef.current)\n }, [value, animate, animateOnChange])\n\n const formattedValue = formatFn ? formatFn(displayed) : displayed.toFixed(decimals)\n\n return (\n <span ref={ref} data-slot=\"animated-number\" className={cn('tabular-nums', className)} {...props}>\n {formattedValue}\n </span>\n )\n }\n)\nAnimatedNumber.displayName = 'AnimatedNumber'\n\nexport { AnimatedNumber }\n","'use client'\n\nimport * as React from 'react'\nimport { useEffect, useState, useCallback, useRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* SectionNavigator — sticky in-page navigation for long scrolling pages */\n/* Highlights the currently visible section based on scroll position. */\n/* -------------------------------------------------------------------------- */\n\nexport interface SectionItem {\n /** Unique identifier matching the target element's `id` attribute */\n id: string\n /** Display label for the navigation link */\n label: string\n /** Optional icon rendered before the label */\n icon?: React.ReactNode\n}\n\nexport interface SectionNavigatorProps extends React.HTMLAttributes<HTMLElement> {\n /** List of sections to navigate between */\n sections: SectionItem[]\n /** Offset from top when calculating active section (e.g. sticky header height) @default 80 */\n offset?: number\n /** Callback when a section link is clicked */\n onSectionClick?: (sectionId: string) => void\n}\n\nconst SectionNavigator = React.forwardRef<HTMLElement, SectionNavigatorProps>(\n ({ className, sections, offset = 80, onSectionClick, ...props }, ref) => {\n const [activeId, setActiveId] = useState<string>(sections[0]?.id ?? '')\n const isClickScrolling = useRef(false)\n\n const handleScroll = useCallback(() => {\n if (isClickScrolling.current) return\n\n let currentId = sections[0]?.id ?? ''\n for (const section of sections) {\n const el = document.getElementById(section.id)\n if (el) {\n const rect = el.getBoundingClientRect()\n if (rect.top <= offset + 10) {\n currentId = section.id\n }\n }\n }\n setActiveId(currentId)\n }, [sections, offset])\n\n useEffect(() => {\n window.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll()\n return () => window.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n const scrollToSection = useCallback(\n (sectionId: string) => {\n const el = document.getElementById(sectionId)\n if (!el) return\n\n isClickScrolling.current = true\n setActiveId(sectionId)\n\n const y = el.getBoundingClientRect().top + window.scrollY - offset\n window.scrollTo({ top: y, behavior: 'smooth' })\n\n // Re-enable scroll tracking after animation completes\n setTimeout(() => {\n isClickScrolling.current = false\n }, 600)\n\n onSectionClick?.(sectionId)\n },\n [offset, onSectionClick]\n )\n\n if (sections.length === 0) return null\n\n return (\n <nav\n ref={ref}\n data-slot=\"section-navigator\"\n aria-label=\"ناوبری بخش‌ها\"\n className={cn('flex flex-col gap-0.5 text-sm', className)}\n {...props}\n >\n {sections.map((section) => {\n const isActive = activeId === section.id\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => scrollToSection(section.id)}\n className={cn(\n 'flex items-center gap-2 rounded-md px-3 py-1.5 text-start transition-colors duration-fast',\n 'hover:bg-background-surface-200 hover:text-foreground-default',\n isActive\n ? 'bg-background-surface-200 text-foreground-default font-medium border-s-2 border-brand'\n : 'text-foreground-lighter'\n )}\n aria-current={isActive ? 'true' : undefined}\n >\n {section.icon && (\n <span className=\"shrink-0\" aria-hidden=\"true\">\n {section.icon}\n </span>\n )}\n <span className=\"truncate\">{section.label}</span>\n </button>\n )\n })}\n </nav>\n )\n }\n)\nSectionNavigator.displayName = 'SectionNavigator'\n\nexport { SectionNavigator }\n","'use client'\n\nimport * as React from 'react'\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoLineChartProps {\n /** Row-oriented data: [{ name: \"فروردین\", series1: 50, series2: 30 }] */\n data: Array<Record<string, any>>\n /** Keys for each line series (e.g. ['فروش', 'سود']) */\n dataKeys: string[]\n /** Field name for X axis (default: 'name') */\n xAxisKey?: string\n /** Curve type */\n curve?: 'monotone' | 'linear' | 'natural' | 'step'\n /** Line width */\n strokeWidth?: number\n /** Show dots on data points */\n showDots?: boolean\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom X axis config */\n axisBottom?: Record<string, any> | null\n /** Custom Y axis config */\n axisLeft?: Record<string, any> | null\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n /** Additional Recharts LineChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoLineChart = React.forwardRef<HTMLDivElement, PartoLineChartProps>(function PartoLineChart(\n {\n data,\n dataKeys,\n xAxisKey = 'name',\n curve = 'monotone',\n strokeWidth = 2.5,\n showDots = false,\n enableGridY = true,\n enableGridX = false,\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n axisBottom,\n axisLeft,\n tooltipFormatter,\n className,\n isLoading = false,\n ariaLabel,\n chartProps,\n },\n ref\n) {\n const { chartColors, axisTickStyle, gridStyle, tooltipStyle, crosshairStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"line-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={margin} {...chartProps}>\n {(enableGridX || enableGridY) && (\n <CartesianGrid\n horizontal={enableGridY}\n vertical={enableGridX}\n stroke={gridStyle.stroke}\n strokeDasharray={gridStyle.strokeDasharray}\n strokeOpacity={gridStyle.strokeOpacity}\n />\n )}\n\n {axisBottom !== null && (\n <XAxis\n dataKey={xAxisKey}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n {...axisBottom}\n />\n )}\n\n {axisLeft !== null && (\n <YAxis tick={axisTickStyle} tickLine={false} axisLine={false} tickMargin={12} {...axisLeft} />\n )}\n\n <Tooltip\n cursor={crosshairStyle}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} />}\n />\n\n {dataKeys.map((key, i) => (\n <Line\n key={key}\n type={curve}\n dataKey={key}\n stroke={chartColors[i % chartColors.length]}\n strokeWidth={strokeWidth}\n dot={showDots}\n activeDot={{ r: 4, strokeWidth: 2 }}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoLineChart.displayName = 'PartoLineChart'\n","'use client'\n\nimport * as React from 'react'\nimport { useRootStyles } from './use-root-styles'\nimport { resolveCssColor } from '@/lib/theme'\n\n/**\n * Chart theme hook — reads CSS design tokens at runtime and produces\n * resolved colors and styles for Recharts + Visx chart components.\n * Inspired by Linear, Vercel, and Stripe data visualizations.\n */\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n foregroundMuted: 'hsl(0 0% 50%)',\n border: 'hsl(0 0% 22%)',\n popover: 'hsl(0 0% 10%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(153 55% 42%)',\n chart2: 'hsl(198 50% 48%)',\n chart3: 'hsl(240 40% 54%)',\n chart4: 'hsl(310 38% 52%)',\n chart5: 'hsl(355 45% 52%)',\n chart6: 'hsl(35 52% 48%)',\n chart7: 'hsl(75 38% 46%)',\n chart8: 'hsl(118 35% 46%)',\n}\n\nexport const CHART_FONT_FAMILY = 'Yekan Bakh, system-ui, -apple-system, sans-serif'\n\nexport function useChartTheme() {\n const styles = useRootStyles()\n\n return React.useMemo(() => {\n const getColor = (variable: string, fallback: string) => resolveCssColor(styles, variable, fallback)\n\n const chartColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n getColor('--chart-6', FALLBACKS.chart6),\n getColor('--chart-7', FALLBACKS.chart7),\n getColor('--chart-8', FALLBACKS.chart8),\n ]\n\n const axisTickStyle = {\n fontFamily: CHART_FONT_FAMILY,\n fill: getColor('--foreground-lighter', FALLBACKS.foregroundMuted),\n fontSize: 11,\n fontWeight: 400 as const,\n }\n\n const gridStyle = {\n stroke: getColor('--border', FALLBACKS.border),\n strokeDasharray: '3 3',\n strokeOpacity: 0.15,\n }\n\n const tooltipStyle: React.CSSProperties = {\n fontFamily: CHART_FONT_FAMILY,\n background: getColor('--background-overlay-default', FALLBACKS.popover),\n color: getColor('--foreground-default', FALLBACKS.popoverForeground),\n fontSize: 12,\n lineHeight: '1.5',\n borderRadius: '10px',\n border: `1px solid ${getColor('--border-muted', FALLBACKS.border)}`,\n boxShadow: '0 4px 24px -4px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.06)',\n padding: '10px 14px',\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }\n\n const crosshairStyle = {\n stroke: getColor('--foreground-muted', FALLBACKS.foregroundMuted),\n strokeWidth: 1,\n strokeDasharray: '4 4',\n strokeOpacity: 0.5,\n }\n\n return {\n chartColors,\n getColor,\n fontFamily: CHART_FONT_FAMILY,\n axisTickStyle,\n gridStyle,\n tooltipStyle,\n crosshairStyle,\n }\n }, [styles])\n}\n","'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\n\n/**\n * Returns a snapshot of the current document root computed styles and\n * re-renders when the theme class or OS color scheme changes.\n */\nexport function useRootStyles() {\n const [version, setVersion] = useState(0)\n\n useEffect(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return\n }\n\n const target = document.documentElement\n const observer = new MutationObserver(() => {\n setVersion((prev) => prev + 1)\n })\n\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n })\n\n const media = window.matchMedia('(prefers-color-scheme: dark)')\n const mediaHandler = () => setVersion((prev) => prev + 1)\n media.addEventListener('change', mediaHandler)\n\n return () => {\n observer.disconnect()\n media.removeEventListener('change', mediaHandler)\n }\n }, [])\n\n return useMemo(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return null\n }\n\n return getComputedStyle(document.documentElement)\n }, [version])\n}\n","const COLOR_VALUE_REGEX = /^(#|rgb|hsl|oklch)/i;\n\nexport function resolveCssColor(\n styles: CSSStyleDeclaration | null,\n variable: string,\n fallback: string,\n) {\n if (!styles) return fallback;\n const raw = styles.getPropertyValue(variable).trim();\n if (!raw) return fallback;\n if (COLOR_VALUE_REGEX.test(raw)) return raw;\n if (raw.includes('%')) return `hsl(${raw})`;\n return raw;\n}\n\n","'use client'\n\nimport * as React from 'react'\nimport { Skeleton } from '@/components/ui/skeleton'\n\n// ─── Chart Container ─────────────────────────────────────────────────────────\n\ninterface ChartContainerProps {\n className?: string\n dataSlot: string\n ariaLabel?: string\n children: React.ReactNode\n}\n\nexport const ChartContainer = React.forwardRef<HTMLDivElement, ChartContainerProps>(\n ({ className, dataSlot, ariaLabel, children }, ref) => (\n <div\n ref={ref}\n className={className}\n dir=\"ltr\"\n data-slot={dataSlot}\n role=\"img\"\n aria-label={ariaLabel ?? 'نمودار'}\n style={{ position: 'relative', width: '100%', height: '100%' }}\n >\n {children}\n </div>\n )\n)\nChartContainer.displayName = 'ChartContainer'\n\n// ─── Chart Skeleton ──────────────────────────────────────────────────────────\n\ninterface ChartSkeletonProps {\n className?: string\n shape?: 'rect' | 'circle'\n}\n\nexport function ChartLoadingSkeleton({ className, shape = 'rect' }: ChartSkeletonProps) {\n return (\n <div\n className={className}\n dir=\"ltr\"\n style={{ position: 'relative', width: '100%', height: '100%' }}\n role=\"status\"\n aria-label=\"Loading chart\"\n >\n <Skeleton\n shape={shape}\n className={\n shape === 'circle' ? 'w-full h-full min-h-[200px] aspect-square mx-auto' : 'w-full h-full min-h-[200px]'\n }\n />\n </div>\n )\n}\n\n// ─── Chart Tooltip ───────────────────────────────────────────────────────────\n\ninterface ChartTooltipProps {\n active?: boolean\n payload?: Array<{ name: string; value: number; color: string; dataKey?: string }>\n label?: string\n tooltipStyle: React.CSSProperties\n formatter?: (name: string, value: number) => React.ReactNode\n}\n\nexport function ChartTooltip({ active, payload, label, tooltipStyle, formatter }: ChartTooltipProps) {\n if (!active || !payload?.length) return null\n\n return (\n <div style={tooltipStyle}>\n {label && <div style={{ fontWeight: 500, fontSize: 13, marginBottom: 6 }}>{label}</div>}\n {payload.map((entry, i) => (\n <div key={i} style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: i > 0 ? 4 : 0 }}>\n <div\n style={{\n width: 10,\n height: 10,\n borderRadius: 2,\n backgroundColor: entry.color,\n flexShrink: 0,\n }}\n />\n {formatter ? (\n formatter(entry.name, entry.value)\n ) : (\n <span style={{ display: 'flex', justifyContent: 'space-between', width: '100%', gap: 16 }}>\n <span style={{ opacity: 0.7 }}>{entry.name}</span>\n <span style={{ fontWeight: 600, fontVariantNumeric: 'tabular-nums' }}>\n {typeof entry.value === 'number' ? entry.value.toLocaleString('fa-IR') : entry.value}\n </span>\n </span>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n// ─── Data Transform Utility ──────────────────────────────────────────────────\n\n/**\n * Transforms Nivo line/area data format to Recharts row-oriented format.\n * Useful for consumers migrating from Nivo data shape.\n *\n * @example\n * // Nivo: [{ id: \"فروش\", data: [{ x: \"فروردین\", y: 50 }] }]\n * // Recharts: [{ name: \"فروردین\", فروش: 50 }]\n */\nexport function transformNivoLineData(\n nivoData: Array<{ id: string; data: Array<{ x: string | number; y: number }> }>\n): { data: Array<Record<string, string | number>>; dataKeys: string[] } {\n const dataKeys = nivoData.map((s) => s.id)\n const xValues = nivoData[0]?.data.map((d) => d.x) ?? []\n\n const data = xValues.map((x, xi) => {\n const row: Record<string, string | number> = { name: x }\n for (const series of nivoData) {\n row[series.id] = series.data[xi]?.y ?? 0\n }\n return row\n })\n\n return { data, dataKeys }\n}\n","'use client'\n\nimport * as React from 'react'\nimport { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoBarChartProps {\n /** Chart data — row-oriented array of objects */\n data: Array<Record<string, any>>\n /** Data keys to render as bars (e.g. ['فروش', 'هزینه']) */\n keys: string[]\n /** Field name used for X axis categories (e.g. 'ماه') */\n indexBy: string\n /** Stacked or grouped layout */\n groupMode?: 'grouped' | 'stacked'\n /** Bar layout direction */\n layout?: 'vertical' | 'horizontal'\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Gap between category groups as percentage */\n barCategoryGap?: string | number\n /** Gap between bars within a group */\n barGap?: number\n /** Border radius for bar tops [topLeft, topRight, bottomRight, bottomLeft] */\n radius?: [number, number, number, number]\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Show labels inside bars */\n enableLabel?: boolean\n /** Custom X axis config */\n axisBottom?: Record<string, any> | null\n /** Custom Y axis config */\n axisLeft?: Record<string, any> | null\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n /** Additional Recharts BarChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoBarChart = React.forwardRef<HTMLDivElement, PartoBarChartProps>(function PartoBarChart(\n {\n data,\n keys,\n indexBy,\n groupMode = 'grouped',\n layout = 'vertical',\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n barCategoryGap = '35%',\n barGap = 2,\n radius = [6, 6, 0, 0],\n enableGridY = true,\n enableGridX = false,\n enableLabel = false,\n axisBottom,\n axisLeft,\n tooltipFormatter,\n className,\n isLoading = false,\n ariaLabel,\n chartProps,\n },\n ref\n) {\n const { chartColors, axisTickStyle, gridStyle, tooltipStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n // Recharts uses \"horizontal\" for standard vertical bars and \"vertical\" for horizontal bars\n const rechartsLayout = layout === 'horizontal' ? 'vertical' : 'horizontal'\n const stackId = groupMode === 'stacked' ? 'stack' : undefined\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"bar-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n data={data}\n layout={rechartsLayout}\n margin={margin}\n barCategoryGap={barCategoryGap}\n barGap={barGap}\n {...chartProps}\n >\n {(enableGridX || enableGridY) && (\n <CartesianGrid\n horizontal={enableGridY}\n vertical={enableGridX}\n stroke={gridStyle.stroke}\n strokeDasharray={gridStyle.strokeDasharray}\n strokeOpacity={gridStyle.strokeOpacity}\n />\n )}\n\n {rechartsLayout === 'horizontal' ? (\n <>\n {axisBottom !== null && (\n <XAxis\n dataKey={indexBy}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n {...axisBottom}\n />\n )}\n {axisLeft !== null && (\n <YAxis tick={axisTickStyle} tickLine={false} axisLine={false} tickMargin={12} {...axisLeft} />\n )}\n </>\n ) : (\n <>\n {axisLeft !== null && (\n <YAxis\n dataKey={indexBy}\n type=\"category\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n {...axisLeft}\n />\n )}\n {axisBottom !== null && (\n <XAxis\n type=\"number\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n {...axisBottom}\n />\n )}\n </>\n )}\n\n <Tooltip\n cursor={{ fill: 'hsl(0 0% 50% / 0.05)' }}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} />}\n />\n\n {keys.map((key, i) => (\n <Bar\n key={key}\n dataKey={key}\n fill={chartColors[i % chartColors.length]}\n radius={radius}\n stackId={stackId}\n label={enableLabel ? { position: 'top', style: axisTickStyle } : false}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoBarChart.displayName = 'PartoBarChart'\n","'use client'\n\nimport * as React from 'react'\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer, Sector } from 'recharts'\n\nimport { useChartTheme, CHART_FONT_FAMILY } from '@/hooks/use-chart-theme'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoPieChartProps {\n /** Data: [{ name: \"محصول A\", value: 40 }] */\n data: Array<{ name: string; value: number; [key: string]: any }>\n /** Inner radius — 0 for full pie, \"60%\" for donut */\n innerRadius?: number | string\n /** Outer radius */\n outerRadius?: number | string\n /** Angle between slices in degrees */\n paddingAngle?: number\n /** Corner radius of arc segments */\n cornerRadius?: number\n /** Show arc link labels (lines from slices to text) */\n showLabels?: boolean\n /** Skip labels for slices smaller than this angle */\n labelSkipAngle?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n}\n\n// Active shape with expanded radius for hover effect\nfunction renderActiveShape(props: any) {\n const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, fill, cornerRadius } = props\n\n return (\n <Sector\n cx={cx}\n cy={cy}\n innerRadius={innerRadius - 3}\n outerRadius={outerRadius + 5}\n startAngle={startAngle}\n endAngle={endAngle}\n fill={fill}\n cornerRadius={cornerRadius}\n forceCornerRadius\n />\n )\n}\n\n// Custom label renderer with arc link lines\nfunction renderArcLinkLabel(props: any, labelSkipAngle: number, textColor: string) {\n const { cx, cy, midAngle, outerRadius, name, percent } = props\n\n // Skip labels for small slices\n const angle = percent * 360\n if (angle < labelSkipAngle) return null\n\n const RADIAN = Math.PI / 180\n const sin = Math.sin(-RADIAN * midAngle)\n const cos = Math.cos(-RADIAN * midAngle)\n\n // Point on arc edge\n const arcX = cx + (outerRadius + 4) * cos\n const arcY = cy + (outerRadius + 4) * sin\n\n // Diagonal endpoint\n const diagLen = 10\n const diagX = arcX + diagLen * cos\n const diagY = arcY + diagLen * sin\n\n // Horizontal endpoint\n const straightLen = 14\n const endX = diagX + (cos >= 0 ? straightLen : -straightLen)\n const endY = diagY\n\n const textAnchor = cos >= 0 ? 'start' : 'end'\n const textX = endX + (cos >= 0 ? 4 : -4)\n\n return (\n <g>\n <path\n d={`M ${arcX},${arcY} L ${diagX},${diagY} L ${endX},${endY}`}\n fill=\"none\"\n stroke={textColor}\n strokeWidth={1}\n strokeOpacity={0.4}\n />\n <text\n x={textX}\n y={endY}\n textAnchor={textAnchor}\n dominantBaseline=\"central\"\n fill={textColor}\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n >\n {name}\n </text>\n </g>\n )\n}\n\nexport const PartoPieChart = React.forwardRef<HTMLDivElement, PartoPieChartProps>(function PartoPieChart(\n {\n data,\n innerRadius = '60%',\n outerRadius = '80%',\n paddingAngle = 1.2,\n cornerRadius = 4,\n showLabels = true,\n labelSkipAngle = 14,\n margin = { top: 20, right: 20, bottom: 20, left: 20 },\n tooltipFormatter,\n className,\n isLoading = false,\n ariaLabel,\n },\n ref\n) {\n const { chartColors, tooltipStyle, axisTickStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} shape=\"circle\" />\n }\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"pie-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart margin={margin}>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={paddingAngle}\n cornerRadius={cornerRadius}\n activeShape={renderActiveShape as any}\n label={showLabels ? (props: any) => renderArcLinkLabel(props, labelSkipAngle, axisTickStyle.fill) : false}\n labelLine={false}\n animationDuration={800}\n animationEasing=\"ease-out\"\n >\n {data.map((_, i) => (\n <Cell key={i} fill={chartColors[i % chartColors.length]} stroke=\"none\" />\n ))}\n </Pie>\n\n <Tooltip content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} />} />\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoPieChart.displayName = 'PartoPieChart'\n","'use client'\n\nimport * as React from 'react'\nimport { scaleBand } from '@visx/scale'\nimport { ParentSize } from '@visx/responsive'\n\nimport { useChartTheme, CHART_FONT_FAMILY } from '@/hooks/use-chart-theme'\nimport { toPersianDigits, PERSIAN_WEEKDAYS } from '@/lib/jalali-utils'\nimport { ChartLoadingSkeleton } from './chart-utils'\n\n/**\n * PartoHeatMap — brand-tinted heatmap with rounded cells, clean axis,\n * glassmorphic tooltip, and locale-aware formatting.\n * Built with Visx scales + raw SVG for full control.\n */\n\nexport interface HeatMapDatum {\n x: string | number\n y: number\n}\n\nexport interface HeatMapRow {\n id: string\n data: HeatMapDatum[]\n}\n\nexport interface PartoHeatMapProps {\n data: HeatMapRow[]\n locale?: 'fa' | 'en'\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n margin?: { top: number; right: number; bottom: number; left: number }\n /** Custom color function: receives value and max → returns CSS color */\n colorScale?: (value: number, max: number) => string\n /** Cell border radius */\n cellRadius?: number\n /** Gap between cells */\n cellGap?: number\n /** Custom tooltip content */\n renderTooltip?: (cell: { rowId: string; x: string | number; value: number; color: string }) => React.ReactNode\n /** X axis label */\n xAxisLabel?: string\n /** Y axis label */\n yAxisLabel?: string\n /** Filter which x-axis ticks to show */\n xTickFilter?: (value: string | number, index: number) => boolean\n}\n\nconst ENGLISH_WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n\nexport const PartoHeatMap = React.forwardRef<HTMLDivElement, PartoHeatMapProps>(function PartoHeatMap(\n {\n data,\n locale = 'fa',\n className,\n isLoading = false,\n ariaLabel,\n margin = { top: 60, right: 20, bottom: 20, left: 120 },\n colorScale,\n cellRadius = 6,\n cellGap = 3,\n renderTooltip,\n xAxisLabel,\n yAxisLabel,\n xTickFilter,\n },\n ref\n) {\n const { getColor, tooltipStyle, axisTickStyle } = useChartTheme()\n const isPersian = locale === 'fa'\n const [activeCell, setActiveCell] = React.useState<{ rowIdx: number; colIdx: number } | null>(null)\n const [tooltipPos, setTooltipPos] = React.useState<{ x: number; y: number } | null>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n // Compute global max for color interpolation\n let maxVal = 1\n for (const row of data) {\n for (const d of row.data) {\n const v = typeof d.y === 'number' ? d.y : 0\n if (v > maxVal) maxVal = v\n }\n }\n\n const formatNumber = (value: number | string): string => (isPersian ? toPersianDigits(value) : String(value))\n\n const formatWeekday = (day: string): string => {\n if (isPersian) {\n const idx = ENGLISH_WEEKDAYS.findIndex((d) => d.toLowerCase() === day.toLowerCase())\n return idx !== -1 ? PERSIAN_WEEKDAYS[idx] : day\n }\n return day\n }\n\n const defaultColorScale = (value: number, max: number): string => {\n if (value === 0) return getColor('--background-muted', 'hsl(0 0% 95%)')\n const t = Math.min(value / max, 1)\n // Resolve brand color and interpolate lightness\n const brandColor = getColor('--brand-default', 'hsl(153 55% 42%)')\n // Extract hue and saturation from brand color\n const hslMatch = brandColor.match(/hsl\\(([0-9.]+)[,\\s]+([0-9.]+%?)/)\n const hue = hslMatch?.[1] ?? '153'\n const sat = hslMatch?.[2] ?? '55%'\n const satVal = sat.endsWith('%') ? sat : `${sat}%`\n const lightness = 95 - t * 60\n return `hsl(${hue}, ${satVal}, ${lightness}%)`\n }\n\n const getColorFn = colorScale ?? defaultColorScale\n\n const handleMouseMove = (e: React.MouseEvent, rowIdx: number, colIdx: number) => {\n if (!containerRef.current) return\n const rect = containerRef.current.getBoundingClientRect()\n setTooltipPos({ x: e.clientX - rect.left, y: e.clientY - rect.top })\n setActiveCell({ rowIdx, colIdx })\n }\n\n const handleMouseLeave = () => {\n setActiveCell(null)\n setTooltipPos(null)\n }\n\n const activeCellData = activeCell\n ? {\n rowId: data[activeCell.rowIdx].id,\n x: data[activeCell.rowIdx].data[activeCell.colIdx].x,\n value: data[activeCell.rowIdx].data[activeCell.colIdx].y,\n color: getColorFn(data[activeCell.rowIdx].data[activeCell.colIdx].y, maxVal),\n }\n : null\n\n const rowIds = data.map((r) => r.id)\n const colIds = data[0]?.data.map((d) => String(d.x)) ?? []\n\n return (\n <div\n className={className}\n dir=\"ltr\"\n data-slot=\"heat-map\"\n role=\"img\"\n aria-label={ariaLabel}\n ref={(node) => {\n // Assign to both the internal ref and the forwarded ref\n ;(containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n style={{ position: 'relative', width: '100%', height: '100%' }}\n onMouseLeave={handleMouseLeave}\n >\n <ParentSize>\n {({ width, height }) => {\n if (width < 10 || height < 10) return null\n\n const innerWidth = width - margin.left - margin.right\n const innerHeight = height - margin.top - margin.bottom\n\n const xScale = scaleBand<string>({\n domain: colIds,\n range: [0, innerWidth],\n padding: Math.min(cellGap / (innerWidth / colIds.length), 0.5),\n })\n\n const yScale = scaleBand<string>({\n domain: rowIds,\n range: [0, innerHeight],\n padding: Math.min(cellGap / (innerHeight / rowIds.length), 0.5),\n })\n\n const cellWidth = xScale.bandwidth()\n const cellHeight = yScale.bandwidth()\n\n return (\n <svg width={width} height={height}>\n {/* Y axis labels */}\n {rowIds.map((rowId) => {\n const y = (yScale(rowId) ?? 0) + cellHeight / 2\n return (\n <text\n key={`y-${rowId}`}\n x={margin.left - 12}\n y={margin.top + y}\n textAnchor=\"end\"\n dominantBaseline=\"central\"\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n fontWeight={500}\n fill={axisTickStyle.fill}\n >\n {formatWeekday(rowId)}\n </text>\n )\n })}\n\n {/* X axis labels (top) */}\n {colIds.map((colId, ci) => {\n if (xTickFilter && !xTickFilter(colId, ci)) return null\n const x = (xScale(colId) ?? 0) + cellWidth / 2\n return (\n <text\n key={`x-${colId}`}\n x={margin.left + x}\n y={margin.top - 12}\n textAnchor=\"middle\"\n dominantBaseline=\"auto\"\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n fill={axisTickStyle.fill}\n >\n {formatNumber(colId)}\n </text>\n )\n })}\n\n {/* Y axis legend */}\n {yAxisLabel && (\n <text\n x={20}\n y={margin.top + innerHeight / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"auto\"\n transform={`rotate(-90, 20, ${margin.top + innerHeight / 2})`}\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n fontWeight={500}\n fill={axisTickStyle.fill}\n >\n {yAxisLabel}\n </text>\n )}\n\n {/* X axis legend (bottom) */}\n {xAxisLabel && (\n <text\n x={margin.left + innerWidth / 2}\n y={height - 8}\n textAnchor=\"middle\"\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n fontWeight={500}\n fill={axisTickStyle.fill}\n >\n {xAxisLabel}\n </text>\n )}\n\n {/* Cells */}\n <g transform={`translate(${margin.left}, ${margin.top})`}>\n {data.map((row, rowIdx) =>\n row.data.map((cell, colIdx) => {\n const x = xScale(String(cell.x)) ?? 0\n const y = yScale(row.id) ?? 0\n const color = getColorFn(cell.y, maxVal)\n const isActive = activeCell?.rowIdx === rowIdx && activeCell?.colIdx === colIdx\n const hasActive = activeCell !== null\n const opacity = hasActive ? (isActive ? 1 : 0.5) : 0.85\n\n return (\n <rect\n key={`${rowIdx}-${colIdx}`}\n x={x}\n y={y}\n width={cellWidth}\n height={cellHeight}\n rx={cellRadius}\n ry={cellRadius}\n fill={color}\n opacity={opacity}\n style={{ transition: 'opacity 150ms ease, fill 150ms ease' }}\n onMouseMove={(e) => handleMouseMove(e, rowIdx, colIdx)}\n />\n )\n })\n )}\n </g>\n </svg>\n )\n }}\n </ParentSize>\n\n {/* Glassmorphic tooltip */}\n {activeCell && activeCellData && tooltipPos && (\n <div\n style={{\n ...tooltipStyle,\n position: 'absolute',\n left: Math.min(tooltipPos.x + 12, (containerRef.current?.clientWidth ?? 0) - 200),\n top: Math.max(tooltipPos.y - 12, 0),\n pointerEvents: 'none',\n zIndex: 10,\n whiteSpace: 'nowrap',\n }}\n >\n {renderTooltip ? (\n renderTooltip(activeCellData)\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 6 }}>\n <div\n style={{\n width: 12,\n height: 12,\n borderRadius: 3,\n backgroundColor: activeCellData.color,\n flexShrink: 0,\n }}\n />\n <span style={{ fontWeight: 500, fontSize: 13 }}>\n {formatWeekday(String(activeCellData.rowId))} — {formatNumber(activeCellData.x)}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between', gap: 24, fontSize: 12 }}>\n <span style={{ opacity: 0.7 }}>{isPersian ? 'شدت فعالیت' : 'Activity'}</span>\n <span style={{ fontWeight: 600, fontVariantNumeric: 'tabular-nums' }}>\n {formatNumber(activeCellData.value)}\n </span>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n})\nPartoHeatMap.displayName = 'PartoHeatMap'\n","'use client'\n\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { Wordcloud } from '@visx/wordcloud'\nimport { scaleLog } from '@visx/scale'\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { Skeleton } from '@/components/ui/skeleton'\n\n/**\n * PartoWordCloud — modern word cloud with smooth hover transitions,\n * glassmorphic tooltip, and brand-harmonious coloring.\n */\n\nexport interface WordData {\n text: string\n value: number\n}\n\nexport interface PartoWordCloudProps {\n words: WordData[]\n /** Default aspect-ratio reference width; actual rendering is responsive */\n width?: number\n /** Default aspect-ratio reference height; actual rendering is responsive */\n height?: number\n className?: string\n minFontSize?: number\n maxFontSize?: number\n padding?: number\n spiral?: 'archimedean' | 'rectangular'\n rotate?: number\n random?: () => number\n fontWeight?: number\n /** Called when a word is clicked — useful for click-to-filter behavior */\n onWordClick?: (word: WordData) => void\n /** Show loading skeleton instead of word cloud */\n isLoading?: boolean\n /** Accessible label describing the chart content */\n ariaLabel?: string\n}\n\nconst FONT_FAMILY = \"'Yekan Bakh', Arial, sans-serif\"\n\nconst stableRandom = () => 0.5\n\nconst isPersianOrArabic = (text: string): boolean => {\n const persianArabicRegex = /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/\n return persianArabicRegex.test(text)\n}\n\nconst formatHashtagDirection = (text: string): string => {\n if (!text.includes('#')) return text\n const cleanText = text.replace(/#/g, '')\n if (isPersianOrArabic(cleanText)) {\n return `\\u200F#${cleanText}`\n } else {\n return `\\u200E#${cleanText}`\n }\n}\n\ninterface TooltipData {\n text: string\n value: number\n x: number\n y: number\n color: string\n}\n\nexport function PartoWordCloud({\n words,\n width: widthProp = 900,\n height: heightProp = 400,\n className,\n minFontSize = 16,\n maxFontSize = 64,\n padding = 4,\n spiral = 'archimedean',\n rotate = 0,\n random = stableRandom,\n fontWeight = 600,\n onWordClick,\n isLoading = false,\n ariaLabel,\n}: PartoWordCloudProps) {\n const { chartColors } = useChartTheme()\n const [hovered, setHovered] = React.useState<TooltipData | null>(null)\n const [hoveredText, setHoveredText] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const [containerWidth, setContainerWidth] = React.useState(0)\n\n React.useEffect(() => {\n if (!containerRef.current || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver((entries) => {\n const w = Math.floor(entries[0]?.contentRect.width ?? 0)\n if (w > 0) setContainerWidth(w)\n })\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n const width = containerWidth > 0 ? containerWidth : widthProp\n const height = containerWidth > 0 ? Math.round(containerWidth * (heightProp / widthProp)) : heightProp\n\n const formattedWords = React.useMemo(\n () => words.map((word) => ({ ...word, text: formatHashtagDirection(word.text) })),\n [words]\n )\n\n const totalWordCount = React.useMemo(() => words.reduce((acc, w) => acc + w.value, 0), [words])\n\n const fontSizeSetter = React.useCallback(\n (datum: WordData) => {\n const values = formattedWords.map((w) => w.value)\n const minValue = Math.min(...values)\n const maxValue = Math.max(...values)\n if (minValue === maxValue) return (minFontSize + maxFontSize) / 2\n return scaleLog({ domain: [minValue, maxValue], range: [minFontSize, maxFontSize] })(datum.value)\n },\n [formattedWords, minFontSize, maxFontSize]\n )\n\n const handleMouseMove = (event: React.MouseEvent, text: string, value: number, color: string) => {\n setHovered({ text, value, x: event.clientX, y: event.clientY, color })\n setHoveredText(text)\n }\n\n if (isLoading) {\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', minHeight: 200 }}\n role=\"status\"\n aria-label=\"Loading chart\"\n >\n <div className=\"w-full h-full flex items-center justify-center p-8\">\n <div className=\"flex flex-wrap justify-center gap-3 w-full\">\n {Array.from({ length: 15 }, (_, i) => (\n <Skeleton\n key={i}\n shape=\"rect\"\n className=\"h-7 rounded-full\"\n style={{\n width: `${50 + ((i * 37) % 70)}px`,\n opacity: 0.2 + ((i * 17) % 30) / 100,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={className}\n data-slot=\"word-cloud\"\n role=\"img\"\n aria-label={ariaLabel}\n style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n dir=\"rtl\"\n >\n {containerWidth > 0 && (\n <Wordcloud\n words={formattedWords}\n width={width}\n height={height}\n fontSize={fontSizeSetter}\n font={FONT_FAMILY}\n padding={padding}\n spiral={spiral}\n rotate={rotate}\n random={random}\n >\n {(cloudWords) =>\n cloudWords.map((w, i) => {\n const originalData = formattedWords.find((item) => item.text === w.text)\n const value = originalData?.value ?? 0\n const color = chartColors[i % chartColors.length]\n const isHovered = hoveredText === w.text\n const isOtherHovered = hoveredText !== null && !isHovered\n\n if (w.x == null || w.y == null || !w.text) return null\n\n return (\n <g key={w.text}>\n <text\n fill={color}\n textAnchor=\"middle\"\n transform={`translate(${w.x}, ${w.y}) rotate(${w.rotate ?? 0})`}\n fontSize={w.size}\n fontFamily={w.font ?? FONT_FAMILY}\n fontWeight={fontWeight}\n cursor=\"pointer\"\n style={{\n userSelect: 'none',\n pointerEvents: 'all',\n opacity: isOtherHovered ? 0.3 : 1,\n transition: 'opacity 0.2s ease, transform 0.2s ease',\n }}\n onMouseEnter={(e) => handleMouseMove(e, w.text!, value, color)}\n onMouseMove={(e) => handleMouseMove(e, w.text!, value, color)}\n onMouseLeave={() => {\n setHovered(null)\n setHoveredText(null)\n }}\n onClick={() => onWordClick?.({ text: originalData?.text ?? w.text!, value })}\n >\n {w.text}\n </text>\n </g>\n )\n })\n }\n </Wordcloud>\n )}\n\n {hovered &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n className=\"pointer-events-none fixed z-[9999]\"\n dir=\"ltr\"\n style={{\n left: `${hovered.x}px`,\n top: `${hovered.y - 12}px`,\n transform: 'translate(-50%, -100%)',\n transition: 'left 0.08s ease-out, top 0.08s ease-out',\n }}\n >\n <div\n style={{ backdropFilter: 'blur(12px)', WebkitBackdropFilter: 'blur(12px)' }}\n className=\"grid min-w-[9rem] items-start gap-1 rounded-[10px] border border-border-muted bg-background-overlay-default/90 px-3.5 py-2.5 text-xs shadow-lg\"\n dir=\"rtl\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"size-2.5 rounded-sm shrink-0\" style={{ backgroundColor: hovered.color }} />\n <span className=\"font-semibold text-sm text-foreground-default\">{hovered.text}</span>\n </div>\n <div className=\"flex items-center justify-between gap-6 mt-0.5\">\n <span className=\"text-foreground-lighter\">تعداد</span>\n <span className=\"font-semibold tabular-nums text-foreground-default\">\n {hovered.value.toLocaleString('fa-IR')}\n </span>\n </div>\n {totalWordCount > 0 && (\n <div className=\"flex items-center justify-between gap-6\">\n <span className=\"text-foreground-lighter\">درصد</span>\n <span className=\"font-semibold tabular-nums text-foreground-default\">\n {((hovered.value / totalWordCount) * 100).toFixed(1)}٪\n </span>\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n )\n}\nPartoWordCloud.displayName = 'PartoWordCloud'\n","'use client'\n\nimport * as React from 'react'\nimport { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoAreaChartProps {\n /** Row-oriented data: [{ name: \"فروردین\", series1: 50, series2: 30 }] */\n data: Array<Record<string, any>>\n /** Keys for each area series (e.g. ['فروش', 'سود']) */\n dataKeys: string[]\n /** Field name for X axis (default: 'name') */\n xAxisKey?: string\n /** Curve type */\n curve?: 'monotone' | 'linear' | 'natural' | 'step'\n /** Line width */\n strokeWidth?: number\n /** Area fill opacity */\n fillOpacity?: number\n /** Show dots on data points */\n showDots?: boolean\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom X axis config */\n axisBottom?: Record<string, any> | null\n /** Custom Y axis config */\n axisLeft?: Record<string, any> | null\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n /** Additional Recharts AreaChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoAreaChart = React.forwardRef<HTMLDivElement, PartoAreaChartProps>(function PartoAreaChart(\n {\n data,\n dataKeys,\n xAxisKey = 'name',\n curve = 'monotone',\n strokeWidth = 2,\n fillOpacity = 0.08,\n showDots = false,\n enableGridY = true,\n enableGridX = false,\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n axisBottom,\n axisLeft,\n tooltipFormatter,\n className,\n isLoading = false,\n ariaLabel,\n chartProps,\n },\n ref\n) {\n const { chartColors, axisTickStyle, gridStyle, tooltipStyle, crosshairStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"area-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={margin} {...chartProps}>\n <defs>\n {dataKeys.map((key, i) => (\n <linearGradient key={key} id={`area-gradient-${key}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={chartColors[i % chartColors.length]} stopOpacity={fillOpacity} />\n <stop offset=\"100%\" stopColor={chartColors[i % chartColors.length]} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n\n {(enableGridX || enableGridY) && (\n <CartesianGrid\n horizontal={enableGridY}\n vertical={enableGridX}\n stroke={gridStyle.stroke}\n strokeDasharray={gridStyle.strokeDasharray}\n strokeOpacity={gridStyle.strokeOpacity}\n />\n )}\n\n {axisBottom !== null && (\n <XAxis\n dataKey={xAxisKey}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n {...axisBottom}\n />\n )}\n\n {axisLeft !== null && (\n <YAxis tick={axisTickStyle} tickLine={false} axisLine={false} tickMargin={12} {...axisLeft} />\n )}\n\n <Tooltip\n cursor={crosshairStyle}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} />}\n />\n\n {dataKeys.map((key, i) => (\n <Area\n key={key}\n type={curve}\n dataKey={key}\n stroke={chartColors[i % chartColors.length]}\n strokeWidth={strokeWidth}\n fill={`url(#area-gradient-${key})`}\n dot={showDots}\n activeDot={{ r: 4, strokeWidth: 2 }}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoAreaChart.displayName = 'PartoAreaChart'\n","'use client'\n\nimport * as React from 'react'\nimport { RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoRadarChartProps {\n /** Data: [{ subject: \"سرعت\", series1: 80, series2: 60 }] */\n data: Array<Record<string, any>>\n /** Keys for each radar series */\n dataKeys: string[]\n /** Field name used for angle axis labels (default: 'subject') */\n indexBy?: string\n /** Radar fill opacity */\n fillOpacity?: number\n /** Radar stroke width */\n strokeWidth?: number\n /** Show dots on vertices */\n showDots?: boolean\n /** Dot radius */\n dotRadius?: number\n /** Grid shape */\n gridType?: 'polygon' | 'circle'\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n}\n\nexport const PartoRadarChart = React.forwardRef<HTMLDivElement, PartoRadarChartProps>(function PartoRadarChart(\n {\n data,\n dataKeys,\n indexBy = 'subject',\n fillOpacity = 0.08,\n strokeWidth = 2,\n showDots = true,\n dotRadius = 2.5,\n gridType = 'circle',\n margin = { top: 20, right: 40, bottom: 20, left: 40 },\n tooltipFormatter,\n className,\n isLoading = false,\n ariaLabel,\n },\n ref\n) {\n const { chartColors, axisTickStyle, tooltipStyle, getColor } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n const radarGridColor = getColor('--border', 'hsl(0 0% 30%)')\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"radar-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RadarChart data={data} margin={margin} cx=\"50%\" cy=\"50%\" outerRadius=\"75%\">\n <PolarGrid gridType={gridType} stroke={radarGridColor} strokeDasharray=\"3 3\" strokeOpacity={0.5} />\n\n <PolarAngleAxis\n dataKey={indexBy}\n tick={{\n ...axisTickStyle,\n fontSize: 11,\n fontWeight: 500,\n }}\n tickLine={false}\n />\n\n <PolarRadiusAxis tick={false} axisLine={false} />\n\n <Tooltip content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} />} />\n\n {dataKeys.map((key, i) => (\n <Radar\n key={key}\n name={key}\n dataKey={key}\n stroke={chartColors[i % chartColors.length]}\n strokeWidth={strokeWidth}\n fill={chartColors[i % chartColors.length]}\n fillOpacity={fillOpacity}\n dot={\n showDots\n ? {\n r: dotRadius,\n fill: getColor('--background-default', 'hsl(0 0% 100%)'),\n stroke: chartColors[i % chartColors.length],\n strokeWidth: 2,\n }\n : false\n }\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </RadarChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoRadarChart.displayName = 'PartoRadarChart'\n","'use client'\n\nimport * as React from 'react'\n\nexport interface UseInfiniteScrollOptions {\n /** Called when the sentinel enters the viewport */\n onLoadMore: () => void\n /** Whether there are more items to load */\n hasMore: boolean\n /** Whether a load is currently in progress (prevents double-firing) */\n isLoading?: boolean\n /** IntersectionObserver rootMargin @default \"200px\" */\n rootMargin?: string\n /** IntersectionObserver threshold @default 0 */\n threshold?: number\n}\n\nexport interface UseInfiniteScrollReturn {\n /** Ref to attach to the sentinel element at the bottom of the list */\n sentinelRef: React.RefCallback<HTMLElement>\n}\n\n/**\n * Hook for infinite scroll using IntersectionObserver.\n *\n * Attach `sentinelRef` to an empty element at the bottom of your list.\n * When it enters the viewport, `onLoadMore` is called (unless `isLoading` or `!hasMore`).\n *\n * @example\n * ```tsx\n * const { sentinelRef } = useInfiniteScroll({\n * onLoadMore: () => fetchNextPage(),\n * hasMore: data.hasNextPage,\n * isLoading: isFetchingNextPage,\n * })\n *\n * return (\n * <div>\n * {items.map(item => <Card key={item.id} {...item} />)}\n * <div ref={sentinelRef} />\n * </div>\n * )\n * ```\n */\nexport function useInfiniteScroll({\n onLoadMore,\n hasMore,\n isLoading = false,\n rootMargin = '200px',\n threshold = 0,\n}: UseInfiniteScrollOptions): UseInfiniteScrollReturn {\n const observerRef = React.useRef<IntersectionObserver | null>(null)\n\n // Keep callbacks fresh without re-creating observer\n const callbackRef = React.useRef(onLoadMore)\n React.useEffect(() => {\n callbackRef.current = onLoadMore\n }, [onLoadMore])\n\n const hasMoreRef = React.useRef(hasMore)\n React.useEffect(() => {\n hasMoreRef.current = hasMore\n }, [hasMore])\n\n const isLoadingRef = React.useRef(isLoading)\n React.useEffect(() => {\n isLoadingRef.current = isLoading\n }, [isLoading])\n\n const sentinelRef = React.useCallback(\n (node: HTMLElement | null) => {\n // Disconnect previous observer\n if (observerRef.current) {\n observerRef.current.disconnect()\n observerRef.current = null\n }\n\n if (!node) return\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry?.isIntersecting && hasMoreRef.current && !isLoadingRef.current) {\n callbackRef.current()\n }\n },\n { rootMargin, threshold }\n )\n\n observerRef.current.observe(node)\n },\n [rootMargin, threshold]\n )\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n observerRef.current?.disconnect()\n }\n }, [])\n\n return { sentinelRef }\n}\n","'use client'\n\nimport * as React from 'react'\n\n/**\n * Returns a debounced version of `value` that only updates after\n * `delay` ms of inactivity.\n *\n * @example\n * const debouncedSearch = useDebounce(searchQuery, 300)\n */\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState<T>(value)\n\n React.useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debouncedValue\n}\n","'use client'\n\nimport * as React from 'react'\n\n/**\n * Sync state to localStorage with JSON serialization.\n * SSR-safe: returns initialValue on server (window is undefined).\n *\n * @example\n * const [theme, setTheme] = useLocalStorage('theme', 'light')\n */\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void] {\n const [storedValue, setStoredValue] = React.useState<T>(() => {\n if (typeof window === 'undefined') return initialValue\n try {\n const item = window.localStorage.getItem(key)\n return item !== null ? (JSON.parse(item) as T) : initialValue\n } catch {\n return initialValue\n }\n })\n\n const setValue = React.useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue((prev) => {\n const next = value instanceof Function ? value(prev) : value\n try {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(next))\n }\n } catch {\n // localStorage can throw in private browsing or when full\n }\n return next\n })\n },\n [key]\n )\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return\n try {\n const item = window.localStorage.getItem(key)\n setStoredValue(item !== null ? (JSON.parse(item) as T) : initialValue)\n } catch {\n setStoredValue(initialValue)\n }\n }, [key, initialValue])\n\n return [storedValue, setValue]\n}\n","'use client'\n\nimport * as React from 'react'\n\n/**\n * Locks document body scroll when `locked` is true.\n * Restores original overflow on cleanup.\n *\n * @example\n * useScrollLock(isModalOpen)\n */\nexport function useScrollLock(locked: boolean): void {\n React.useEffect(() => {\n if (!locked) return\n const original = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = original\n }\n }, [locked])\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","names":["Calendar","CollapsibleContent","CollapsibleTrigger","Label","RadioGroup","format","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_react_dom","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_react_slot","import_lucide_react","import_jsx_runtime","import_react_slot","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_locale","import_jsx_runtime","Calendar","PersianDayPicker","React","import_class_variance_authority","import_jsx_runtime","React","import_lucide_react","import_react","import_jsx_runtime","useEmblaCarousel","api","isRTL","React","import_lucide_react","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_lucide_react","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CommandPrimitive","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","ConfirmDialog","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","React","import_jsx_runtime","import_jsx_runtime","CalendarIcon","Calendar","React","import_lucide_react","import_jsx_runtime","Label","import_jsx_runtime","formatDateRange","Label","Calendar","formatDateRange","Calendar","import_jsx_runtime","DrawerPrimitive","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_react","import_class_variance_authority","import_jsx_runtime","Label","React","import_lucide_react","import_jsx_runtime","React","import_react_slot","import_jsx_runtime","Label","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_date_fns","import_jsx_runtime","segmentCenterX","React","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","isRTL","Icon","React","import_jsx_runtime","isRTL","React","import_class_variance_authority","import_jsx_runtime","sizeClasses","React","import_lucide_react","import_jsx_runtime","sizeClasses","React","import_lucide_react","import_jsx_runtime","formatNumber","React","import_jsx_runtime","isRTL","React","import_class_variance_authority","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","RadioGroup","React","RadioGroupPrimitive","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_lucide_react","React","import_jsx_runtime","open","React","import_react_slot","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","import_sonner","import_jsx_runtime","Sonner","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","sizeClasses","Icon","React","import_lucide_react","import_jsx_runtime","sizeClasses","React","import_class_variance_authority","import_jsx_runtime","sizeClasses","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","Icon","sizeClasses","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","SIZE_CHILD_CLASSES","Icon","sizeClasses","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","STRINGS","React","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","React","import_react","React","import_jsx_runtime","import_jsx_runtime","PartoLineChart","React","import_recharts","import_jsx_runtime","PartoBarChart","React","import_recharts","import_jsx_runtime","PartoPieChart","React","import_jsx_runtime","PartoHeatMap","formatNumber","React","import_react_dom","import_scale","import_jsx_runtime","React","import_recharts","import_jsx_runtime","PartoAreaChart","React","import_recharts","import_jsx_runtime","PartoRadarChart","React","React","React","React"]}