@parto-system-design/ui 1.1.0 → 1.1.2
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.
- package/dist/index.cjs +3695 -1750
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1101 -95
- package/dist/index.d.cts +1120 -67
- package/dist/index.d.ts +1120 -67
- package/dist/index.js +3631 -1714
- package/dist/index.js.map +1 -1
- package/package.json +25 -17
- package/tailwind.config.ts +386 -12
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nimport {\n toPersianDigits,\n getPersianYear,\n getPersianMonth,\n getPersianDay,\n PERSIAN_MONTHS,\n} from '@/lib/jalali-utils';\n\n// Re-export for convenience so consumers only need one import\nexport { toPersianDigits } from '@/lib/jalali-utils';\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 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 Jalali (Persian calendar) date string.\n * Uses moment-jalaali for accurate Gregorian → Jalali conversion.\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date);\n\n const year = getPersianYear(d);\n const month = getPersianMonth(d); // 0-based\n const day = getPersianDay(d);\n const hours = d.getHours();\n const minutes = d.getMinutes();\n\n return `${toPersianDigits(day)} ${PERSIAN_MONTHS[month]} ${toPersianDigits(year)}، ${toPersianDigits(hours)}:${toPersianDigits(String(minutes).padStart(2, '0'))}`;\n}\n","import { format, getYear, getMonth, getDate, parse, isSameDay, isSameMonth, isSameYear } from \"date-fns-jalali\"\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 formatStr: string = \"yyyy/MM/dd\"\n): string {\n // Map legacy format to date-fns format if needed\n let finalFormatStr = formatStr;\n if (finalFormatStr.includes(\"jYYYY\")) finalFormatStr = finalFormatStr.replace(/jYYYY/g, \"yyyy\");\n if (finalFormatStr.includes(\"jMMMM\")) finalFormatStr = finalFormatStr.replace(/jMMMM/g, \"MMMM\");\n if (finalFormatStr.includes(\"jMM\")) finalFormatStr = finalFormatStr.replace(/jMM/g, \"MM\");\n if (finalFormatStr.includes(\"jM\")) finalFormatStr = finalFormatStr.replace(/jM/g, \"M\");\n if (finalFormatStr.includes(\"jDD\")) finalFormatStr = finalFormatStr.replace(/jDD/g, \"dd\");\n if (finalFormatStr.includes(\"jD\")) finalFormatStr = finalFormatStr.replace(/jD/g, \"d\");\n\n return format(date, finalFormatStr)\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 const dayIndex = date.getDay()\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 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(\n year: number,\n month: number,\n day: number\n): Date {\n // month is 0-indexed in moment, so in date-fns-jalali parse string: \n const yyyy = year.toString().padStart(4, \"0\")\n const MM = (month + 1).toString().padStart(2, \"0\")\n const dd = day.toString().padStart(2, \"0\")\n\n // Create a default date at noon to avoid timezone edge cases\n const referenceDate = new Date()\n referenceDate.setHours(12, 0, 0, 0)\n\n return parse(`${yyyy}/${MM}/${dd}`, \"yyyy/MM/dd\", referenceDate)\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 (isSameDay(from, to)) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same month and year\n if (isSameYear(from, to) && isSameMonth(from, to)) {\n return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same year\n if (isSameYear(from, to)) {\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 UserCheck,\n TrendingUp,\n Award,\n Crown,\n Minus,\n ImageOff,\n ExternalLink,\n GripVertical,\n PanelLeft,\n XCircle,\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\n * indicate navigation direction. Use Tailwind's built-in `rtl:` variant:\n *\n * - <Icons.arrowRight className=\"rtl:rotate-180\" /> ← navigation/directional\n * - <Icons.chevronRight className=\"rtl:rotate-180\" /> ← submenu indicators\n *\n * Icons that should NOT be flipped:\n * - Non-directional icons (check, close, settings, etc.)\n * - Icons representing real-world objects\n */\n\n/** Strongly-typed list of all icon names in the Parto Design System */\nexport type IconName =\n | 'logo'\n | 'parto'\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 | 'close'\n | 'copy'\n | 'download'\n | 'eye'\n | 'eyeOff'\n | 'file'\n | 'fileText'\n | 'gitHub'\n | 'heart'\n | 'home'\n | 'image'\n | 'images'\n | 'inbox'\n | 'info'\n | 'instagram'\n | 'italic'\n | 'loader'\n | 'menu'\n | 'messageCircle'\n | 'moon'\n | 'moreHorizontal'\n | 'moreVertical'\n | 'plus'\n | 'rocket'\n | 'search'\n | 'settings'\n | 'share'\n | 'sparkles'\n | 'sun'\n | 'trash'\n | 'twitter'\n | 'underline'\n | 'user'\n | 'users'\n | 'video'\n | 'userCheck'\n | 'trendingUp'\n | 'award'\n | 'crown'\n | 'minus'\n | 'imageOff'\n | 'externalLink'\n | 'gripVertical'\n | 'panelLeft'\n | 'xCircle';\n\nexport const Icons: Record<IconName, React.FC<React.SVGProps<SVGSVGElement>> | LucideIcon> = {\n /** Parto layered logo mark (generic) */\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 /** Official Parto brand mark (triangle composition) */\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 building: Building,\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 /** Use for close/dismiss actions (X mark) */\n close: X,\n copy: Copy,\n download: Download,\n eye: Eye,\n eyeOff: EyeOff,\n file: File,\n fileText: FileText,\n gitHub: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\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 heart: Heart,\n home: Home,\n image: Image,\n images: Images,\n inbox: Inbox,\n info: Info,\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 italic: Italic,\n /** Animated loading spinner — prefer this over a custom spinner */\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 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 underline: Underline,\n user: User,\n users: Users,\n video: Video,\n userCheck: UserCheck,\n trendingUp: TrendingUp,\n award: Award,\n crown: Crown,\n minus: Minus,\n imageOff: ImageOff,\n externalLink: ExternalLink,\n gripVertical: GripVertical,\n panelLeft: PanelLeft,\n xCircle: XCircle,\n} as const;\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { Icons } from \"@/icons\"\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 <Icons.chevronDown 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 { Icons } from \"@/icons\"\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-amber-700\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-amber-700\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-amber-700\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 <Icons.loader 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 <Icons.loader 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 { Icons } from \"@/icons\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Icons.loader\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 { Icons } from \"@/icons\"\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 ?? <Icons.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 <Icons.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 { Icons } from \"@/icons\"\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 <Icons.chevronRight className=\"h-4 w-4\" />\n }\n return <Icons.chevronLeft className=\"h-4 w-4\" />\n }\n // برای LTR (تقویم میلادی) فلشها طبیعی هستند\n if (orientation === \"left\") {\n return <Icons.chevronLeft className=\"h-4 w-4\" />\n }\n return <Icons.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 { Icons } from \"@/icons\"\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 ? <Icons.arrowRight /> : <Icons.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 ? <Icons.arrowLeft /> : <Icons.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 { Icons } from \"@/icons\"\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 <Icons.check 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 { Icons } from \"@/icons\"\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 <Icons.search 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 { Icons } from \"@/icons\"\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 <Icons.close 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 { Icons } from \"@/icons\"\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 <Icons.chevronRight 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 <Icons.check 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 <Icons.circle 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 { Icons } from \"@/icons\"\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={<Icons.calendar 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 { Icons } from \"@/icons\"\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 <Icons.chevronDown 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 <Icons.calendar 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 { Icons } from \"@/icons\"\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 <Icons.check 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 <Icons.circle 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 <Icons.chevronRight 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 { Icons } from \"@/icons\"\nimport { type VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"./badge\"\n\nconst tagInputVariants = cva(\n \"flex min-h-[38px] w-full flex-wrap gap-2 rounded-md border border-control bg-background px-3 py-2 text-sm ring-offset-background focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-background\",\n secondary: \"bg-secondary\",\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-7 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 <Icons.close 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-muted-foreground min-w-[120px] text-sm h-7\"\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 { Icons } from \"@/icons\"\nimport { type VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"./badge\"\n\nconst hashtagInputVariants = cva(\n \"flex min-h-[38px] w-full flex-wrap gap-2 rounded-md border border-control bg-background px-3 py-2 text-sm ring-offset-background focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-background\",\n secondary: \"bg-secondary\",\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-7 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 <Icons.close 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-muted-foreground min-w-[120px] text-sm h-7\"\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 { Icons } from \"@/icons\"\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 <Icons.minus />\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\"\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 // 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 <Icons.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 ? \"aspect-square\"\n : \"w-[20%] shrink-0 h-full min-h-[200px] -my-[1px] -ms-[1px]\"\n )}\n >\n <div className=\"text-center p-4\">\n <Icons.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 const ratio = getAspectRatio(item.aspectRatio || \"1:1\")\n return (\n <div className=\"w-full relative overflow-hidden group cursor-pointer bg-muted/30\" style={{ aspectRatio: ratio }}>\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 // 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 ratio = getAspectRatio(item.aspectRatio || \"16:9\")\n return (\n <div className=\"w-full relative overflow-hidden group cursor-pointer bg-muted/30\" style={{ aspectRatio: ratio }}>\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 // 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 return (\n <Carousel className=\"w-full\">\n <CarouselContent>\n {media.map((item, index) => (\n <CarouselItem key={index}>\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer bg-muted/30\"\n style={{ aspectRatio: getAspectRatio(item.aspectRatio || (item.type === \"video\" ? \"16:9\" : \"1:1\")) }}\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=\"w-full h-full object-cover group-hover:scale-110 transition-transform duration-300\"\n onError={() => handleImageError(item.url)}\n />\n )}\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious className=\"ms-2\" />\n <CarouselNext className=\"me-2\" />\n </Carousel>\n )\n }\n\n return null\n}\n\nfunction getAspectRatio(ratio: AspectRatioType): number {\n const ratios: Record<AspectRatioType, number> = {\n \"16:9\": 16 / 9,\n \"9:16\": 9 / 16,\n \"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}\n\nfunction InstagramPostActions({\n showActions = true,\n onCommentAnalyzer,\n onBooster,\n onAIAnalysis,\n onOpenInstagram,\n instagramUrl,\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 const handleCommentAnalyzer = () => {\n if (onCommentAnalyzer) {\n onCommentAnalyzer()\n }\n }\n\n const handleBooster = () => {\n if (onBooster) {\n onBooster()\n }\n }\n\n const handleAIAnalysis = () => {\n if (onAIAnalysis) {\n onAIAnalysis()\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=\"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\"\n onClick={handleCommentAnalyzer}\n aria-label=\"Comment Analyzer\"\n >\n <Icons.messageCircle className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>تحلیل کامنتها</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\"\n onClick={handleBooster}\n aria-label=\"Booster\"\n >\n <Icons.rocket className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>بوستر</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\"\n onClick={handleAIAnalysis}\n aria-label=\"AI Analysis\"\n >\n <Icons.sparkles className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>تحلیل هوش مصنوعی</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 bg-background/80 backdrop-blur-sm hover:bg-background\"\n onClick={handleOpenInstagram}\n aria-label=\"Open on Instagram\"\n >\n <Icons.instagram className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>باز کردن در اینستاگرام</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 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 />\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\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 { Icons } from \"@/icons\"\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 <Icons.check 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 <Icons.circle 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 <Icons.chevronRight 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 { Icons } from \"@/icons\"\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 @container\", 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 <Icons.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 <Icons.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 { Icons } from \"@/icons\"\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 <Icons.chevronDown\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 { Icons } from \"@/icons\"\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 <Icons.chevronDown\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 { Icons } from \"@/icons\"\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 ? Icons.chevronRight : Icons.chevronLeft\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 ? Icons.chevronLeft : Icons.chevronRight\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 <Icons.moreHorizontal 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 @container\",\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-amber-500 via-yellow-400 to-amber-500\">\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,#f59e0b,#fbbf24,#f59e0b)]\",\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-amber-500 via-yellow-400 to-amber-500\">\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 { Icons } from \"@/icons\";\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 <Icons.users className={iconClass} />;\n case \"micro\":\n return <Icons.userCheck className={iconClass} />;\n case \"mid\":\n return <Icons.trendingUp className={iconClass} />;\n case \"macro\":\n return <Icons.award className={iconClass} />;\n case \"mega\":\n return <Icons.crown className={iconClass} />;\n default:\n return <Icons.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: \"#eab308\", // yellow-500\n hoverColor: \"#ca8a04\", // yellow-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: \"#eab308\", // yellow-500\n hoverColor: \"#ca8a04\", // yellow-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-yellow-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 { Icons } from \"@/icons\"\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 <Icons.circle 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 { Icons } from \"@/icons\"\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 <Icons.gripVertical 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 { Icons } from \"@/icons\"\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 <Icons.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 <Icons.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 <Icons.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 <Icons.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 { Icons } from \"@/icons\"\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 <Icons.close 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 { Icons } from \"@/icons\"\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 <Icons.panelLeft />\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 { Icons } from \"@/icons\"\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 <Icons.check 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 <Icons.info 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 <Icons.alertTriangle 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 <Icons.xCircle 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: <Icons.loader 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 { createNivoTheme, resolveChartColors } from '@/lib/theme';\n\nexport interface PartoLineChartProps\n extends Omit<LineSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nexport function PartoLineChart({ className, ...props }: PartoLineChartProps) {\n const styles = useRootStyles();\n const nivoTheme = createNivoTheme(styles);\n const defaultColors = resolveChartColors(styles);\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","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\n/**\n * Resolve a CSS custom property value to a color string.\n * Handles both raw HSL tuples (e.g. \"0deg 0% 50%\") and\n * fully-qualified color values (e.g. \"hsl(0, 0%, 50%)\").\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/**\n * Helper to add opacity to a resolved color string.\n * Supports hsl() and rgb() formats.\n */\nexport function addOpacityToColor(color: string, opacity: number): string {\n if (color.startsWith('hsl(')) {\n return color.replace(')', ` / ${opacity})`);\n }\n if (color.startsWith('rgb(')) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${opacity})`);\n }\n return color;\n}\n\n/** Parto brand font stack, used consistently across all Nivo charts */\nexport const CHART_FONT_FAMILY =\n 'Yekan Bakh, system-ui, -apple-system, sans-serif';\n\n/**\n * Create a Nivo-compatible theme object from the current CSS custom properties.\n * All chart components should use this factory instead of defining their own theme.\n *\n * @param styles — result of `getComputedStyle(document.documentElement)`\n * @param fallbacks — optional override fallbacks (useful for SSR or testing)\n */\nexport function createNivoTheme(\n styles: CSSStyleDeclaration | null,\n fallbacks?: Partial<typeof DEFAULT_FALLBACKS>,\n) {\n const fb = { ...DEFAULT_FALLBACKS, ...fallbacks };\n const get = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const foreground = get('--foreground', fb.foreground);\n const foregroundMuted = get('--foreground-muted', fb.foregroundMuted);\n const border = get('--border', fb.border);\n const background = get('--background', fb.background);\n\n return {\n background: 'transparent',\n text: {\n fontFamily: CHART_FONT_FAMILY,\n fill: foreground,\n },\n axis: {\n domain: {\n line: {\n stroke: border,\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: border,\n strokeWidth: 1,\n },\n text: {\n fontFamily: CHART_FONT_FAMILY,\n fill: foregroundMuted,\n },\n },\n legend: {\n text: {\n fontFamily: CHART_FONT_FAMILY,\n fill: foreground,\n },\n },\n },\n grid: {\n line: {\n stroke: border,\n strokeWidth: 1,\n strokeOpacity: 0.5,\n },\n },\n tooltip: {\n container: {\n fontFamily: CHART_FONT_FAMILY,\n background,\n color: foreground,\n fontSize: 12,\n borderRadius: '8px',\n border: `1px solid ${addOpacityToColor(border, 0.5)}`,\n boxShadow:\n '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: CHART_FONT_FAMILY,\n fill: foreground,\n },\n },\n } as const;\n}\n\n/**\n * Default color fallbacks used when CSS variables cannot be resolved (e.g. SSR).\n * These match the light theme values from globals.css.\n */\nexport const DEFAULT_FALLBACKS = {\n foreground: 'hsl(0 0% 9%)',\n foregroundMuted: 'hsl(0 0% 44%)',\n border: 'hsl(0 0% 88%)',\n background: 'hsl(0 0% 99%)',\n chart1: 'hsl(152.9deg 60% 52.9%)',\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} as const;\n\n/**\n * Resolve all 5 chart colors from CSS variables.\n */\nexport function resolveChartColors(\n styles: CSSStyleDeclaration | null,\n fallbacks?: Partial<typeof DEFAULT_FALLBACKS>,\n): string[] {\n const fb = { ...DEFAULT_FALLBACKS, ...fallbacks };\n const get = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n return [\n get('--chart-1', fb.chart1),\n get('--chart-2', fb.chart2),\n get('--chart-3', fb.chart3),\n get('--chart-4', fb.chart4),\n get('--chart-5', fb.chart5),\n ];\n}\n","'use client';\n\nimport { ResponsiveBar, type BarSvgProps } from '@nivo/bar';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { createNivoTheme, resolveChartColors } from '@/lib/theme';\n\nexport interface PartoBarChartProps\n extends Omit<BarSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nexport function PartoBarChart({ className, ...props }: PartoBarChartProps) {\n const styles = useRootStyles();\n const nivoTheme = createNivoTheme(styles);\n const defaultColors = resolveChartColors(styles);\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","'use client';\n\nimport { ResponsivePie, type PieSvgProps } from '@nivo/pie';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { createNivoTheme, resolveChartColors } from '@/lib/theme';\n\nexport interface PartoPieChartProps\n extends Omit<PieSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nexport function PartoPieChart({ className, ...props }: PartoPieChartProps) {\n const styles = useRootStyles();\n const nivoTheme = createNivoTheme(styles);\n const defaultColors = resolveChartColors(styles);\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","'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":"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","names":["format","jsx","jsxs","jsx","React","cva","forwardRef","jsx","jsxs","cva","forwardRef","jsx","jsxs","React","cva","React","jsx","cva","jsx","Fragment","jsx","jsxs","React","createPortal","jsx","Fragment","jsx","jsxs","createPortal","jsx","cva","jsx","jsxs","cva","Slot","jsx","jsxs","Slot","Slot","cva","React","jsx","jsxs","jsx","cva","Slot","jsx","Calendar","React","jsx","React","jsx","jsxs","api","jsx","jsx","CollapsibleTrigger","CollapsibleContent","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","sentiment","formatNumber","jsx","jsxs","format","React","jsx","jsx","jsxs","format","Calendar","React","jsx","Label","jsx","jsxs","formatDateRange","Label","Calendar","jsx","jsxs","jsx","jsxs","jsx","useMemo","cva","jsx","jsxs","cva","Label","useMemo","React","Slot","jsx","Label","Slot","jsx","React","cva","jsx","jsxs","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","jsx","cva","React","jsx","jsxs","React","cva","React","jsx","Fragment","jsx","jsxs","cva","Icon","jsx","jsx","jsxs","React","format","jsx","Fragment","jsx","jsxs","segmentCenterX","format","jsx","jsxs","cva","jsx","jsxs","cva","React","Fragment","jsx","jsxs","Icon","jsx","jsxs","React","jsx","jsxs","formatFollowers","React","jsx","jsxs","React","jsx","jsxs","convertToLocalNumbers","formatNumber","React","jsx","jsxs","convertToLocalNumbers","ranges","translations","cva","jsx","jsxs","cva","jsx","RadioGroup","React","RadioGroupPrimitive","jsx","jsx","jsx","jsxs","React","cva","jsx","jsxs","cva","jsx","jsxs","React","Slot","cva","React","jsx","jsxs","open","Slot","cva","React","jsx","jsxs","useDocumentDirection","jsx","React","cva","jsx","cva","jsx","React","jsx","cva","jsx","cva","React","jsx","useEffect","useMemo","useState","jsx","jsx","jsx","jsx","jsxs","toEnglishDigits","formatNumber","React","createPortal","jsx","jsxs","FALLBACKS","createPortal"]}
|
|
1
|
+
{"version":3,"sources":["../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/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/error-state.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/item.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/ui/trend-indicator.tsx","../src/components/ui/filter-chip.tsx","../src/components/ui/stat-display.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/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":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\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(\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 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)\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date);\n\n const persianMonths = [\n 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',\n 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n ];\n\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 const persianYear = year - 621;\n const persianMonth = persianMonths[month];\n const persianDay = convertToLocalNumbers(day, 'fa');\n const persianHours = convertToLocalNumbers(hours, 'fa');\n const persianMinutes = convertToLocalNumbers(minutes.toString().padStart(2, '0'), 'fa');\n\n return `${persianDay} ${persianMonth} ${convertToLocalNumbers(persianYear, 'fa')}، ${persianHours}:${persianMinutes}`;\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 type { SupportedLocale } from './utils';\n\n/* -------------------------------------------------------------------------- */\n/* Shared types */\n/* -------------------------------------------------------------------------- */\n\nexport type EngagementTier =\n | 'excellent'\n | 'veryGood'\n | 'good'\n | 'average'\n | 'couldBeImproved'\n | '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}\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<EngagementTier, { color: string; colorFaded: string; hoverColor: string }> = {\n excellent: {\n color: 'hsl(var(--engagement-excellent))',\n colorFaded: 'hsl(var(--engagement-excellent) / 0.1)',\n hoverColor: 'hsl(var(--engagement-excellent-hover))',\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 },\n good: {\n color: 'hsl(var(--engagement-good))',\n colorFaded: 'hsl(var(--engagement-good) / 0.1)',\n hoverColor: 'hsl(var(--engagement-good-hover))',\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 },\n couldBeImproved: {\n color: 'hsl(var(--engagement-low))',\n colorFaded: 'hsl(var(--engagement-low) / 0.1)',\n hoverColor: 'hsl(var(--engagement-low-hover))',\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 },\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(\n followers: number,\n locale: SupportedLocale\n): 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 { tier: 'couldBeImproved', min: r.couldBeImproved[0], max: r.couldBeImproved[1], display: `${r.couldBeImproved[0]}% - ${r.couldBeImproved[1]}%` },\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(\n currentRate: number,\n ranges: EngagementRange[]\n): number {\n const currentRatePercent = currentRate * 100;\n return ranges.findIndex(\n (range) =>\n currentRatePercent >= range.min &&\n (range.max === Infinity ? true : currentRatePercent <= range.max)\n );\n}\n","import type { SupportedLocale } from './utils'\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 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 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} 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 *\n * Primary: xs | sm | md | lg | xl\n * Legacy: tiny | small | medium | large | xlarge (deprecated, kept for backward compat)\n */\nexport type StandardSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** @deprecated Use `StandardSize` instead */\nexport type LegacySize = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge'\n\n/** Size type that accepts both standard and legacy names during migration */\nexport type SizeWithLegacy = StandardSize | LegacySize\n\n/** Maps legacy size names to standard names */\nconst LEGACY_SIZE_MAP: Record<LegacySize, StandardSize> = {\n tiny: 'xs',\n small: 'sm',\n medium: 'md',\n large: 'lg',\n xlarge: 'xl',\n}\n\n/**\n * Normalizes a size value to standard names (xs|sm|md|lg|xl).\n * Accepts both legacy and standard names.\n * Emits a console.warn in development for legacy names.\n */\nexport function normalizeSize(size: SizeWithLegacy): StandardSize {\n if (size in LEGACY_SIZE_MAP) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n `[parto-ui] Size \"${size}\" is deprecated. Use \"${LEGACY_SIZE_MAP[size as LegacySize]}\" instead.`\n )\n }\n return LEGACY_SIZE_MAP[size as LegacySize]\n }\n return size as StandardSize\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 /** @deprecated Use xs */ tiny: 'text-xs',\n /** @deprecated Use sm */ small: 'text-sm leading-4',\n /** @deprecated Use md */ medium: 'text-sm',\n /** @deprecated Use lg */ large: 'text-base',\n /** @deprecated Use xl */ xlarge: '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 /** @deprecated Use xs */ tiny: 'px-2.5 py-1',\n /** @deprecated Use sm */ small: 'px-3 py-2',\n /** @deprecated Use md */ medium: 'px-4 py-2',\n /** @deprecated Use lg */ large: 'px-4 py-2',\n /** @deprecated Use xl */ xlarge: '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 /** @deprecated Use xs */ tiny: 'h-[26px]',\n /** @deprecated Use sm */ small: 'h-[34px]',\n /** @deprecated Use md */ medium: 'h-[38px]',\n /** @deprecated Use lg */ large: 'h-[42px]',\n /** @deprecated Use xl */ xlarge: '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 /** @deprecated */ tiny: 'text-xs',\n /** @deprecated */ small: 'text-sm leading-4',\n /** @deprecated */ medium: 'text-sm',\n /** @deprecated */ large: 'text-base',\n /** @deprecated */ xlarge: '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 /** @deprecated */ tiny: 'px-2.5 py-1',\n /** @deprecated */ small: 'px-3 py-2',\n /** @deprecated */ medium: 'px-4 py-2',\n /** @deprecated */ large: 'px-4 py-2',\n /** @deprecated */ xlarge: '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 /** @deprecated */ tiny: 'h-[24px]',\n /** @deprecated */ small: 'h-[28px]',\n /** @deprecated */ medium: 'h-[32px]',\n /** @deprecated */ large: 'h-[36px]',\n /** @deprecated */ xlarge: '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 /** @deprecated Use xs */ tiny: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE.height['xs']}`,\n /** @deprecated Use sm */ small: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE.height['sm']}`,\n /** @deprecated Use md */ medium: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE.height['md']}`,\n /** @deprecated Use lg */ large: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE.height['lg']}`,\n /** @deprecated Use xl */ xlarge: `${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 /** @deprecated */ tiny: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE_INNER.height['xs']}`,\n /** @deprecated */ small: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE_INNER.height['sm']}`,\n /** @deprecated */ medium: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE_INNER.height['md']}`,\n /** @deprecated */ large: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE_INNER.height['lg']}`,\n /** @deprecated */ xlarge: `${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 [&>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, type SizeWithLegacy } 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 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/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 data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-500/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: `\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 data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive/50\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 data-[state=open]:border-warning\n data-[state=open]:bg-warning-400 dark:data-[state=open]:bg-warning/50\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 data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive/50\n `,\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: '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 xs: '[&_svg]:h-[14px] [&_svg]:w-[14px]',\n sm: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n md: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n lg: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n xl: '[&_svg]:h-[24px] [&_svg]:w-[24px]',\n /** @deprecated */ tiny: '[&_svg]:h-[14px] [&_svg]:w-[14px]',\n /** @deprecated */ small: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\n /** @deprecated */ medium: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n /** @deprecated */ large: '[&_svg]:h-[20px] [&_svg]:w-[20px]',\n /** @deprecated */ xlarge: '[&_svg]:h-[24px] [&_svg]:w-[24px]',\n default: '[&_svg]:h-[18px] [&_svg]:w-[18px]',\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 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 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 _loading = isLoading ?? loading\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\n const iconSize: SizeWithLegacy | 'default' | 'icon' =\n size === 'default' ? 'sm' :\n size === 'icon' ? 'sm' :\n (size ?? 'sm')\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: _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: _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","\"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>\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 /**\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<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 role=\"combobox\"\n aria-expanded={shouldShowSuggestions}\n aria-autocomplete=\"list\"\n aria-controls={shouldShowSuggestions ? listboxId : undefined}\n aria-activedescendant={\n activeSuggestionIndex >= 0\n ? `${listboxId}-option-${activeSuggestionIndex}`\n : undefined\n }\n {...props}\n />\n {isLoading && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 end-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 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 ? renderItem(item, index === activeSuggestionIndex) : defaultRenderItem(item, index === activeSuggestionIndex)}\n </div>\n ))\n ) : (\n !isLoading && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {resolvedEmptyMessage}\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-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 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 = 'sm', ...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\nSpinner.displayName = \"Spinner\"\n\nexport { Spinner }\n\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\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 * 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<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 = 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} 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 end-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(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\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 {resolvedEmptyMessage}\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\nAvatar.displayName = \"Avatar\"\nAvatarImage.displayName = \"AvatarImage\"\nAvatarFallback.displayName = \"AvatarFallback\"\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\nAspectRatio.displayName = \"AspectRatio\"\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 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(\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 = \"sm\",\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\nBadge.displayName = \"Badge\"\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\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\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\nButtonGroup.displayName = \"ButtonGroup\"\nButtonGroupText.displayName = \"ButtonGroupText\"\nButtonGroupSeparator.displayName = \"ButtonGroupSeparator\"\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?: Partial<Record<string, string>>\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-xs 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 outline-none\",\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: \"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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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\n/* -------------------------------------------------------------------------- */\n/* Card */\n/* -------------------------------------------------------------------------- */\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual variant */\n variant?: \"default\" | \"outlined\" | \"elevated\" | \"interactive\"\n /** Content density / padding size */\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"overflow-hidden rounded-lg text-card-foreground\",\n // Variant styles\n variant === \"default\" && \"border bg-surface-100 shadow-sm\",\n variant === \"outlined\" && \"border-2 border-border bg-transparent\",\n variant === \"elevated\" && \"bg-surface-100 shadow-card\",\n variant === \"interactive\" &&\n \"border bg-surface-100 shadow-sm transition-shadow hover:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n )\n)\nCard.displayName = \"Card\"\n\n/* -------------------------------------------------------------------------- */\n/* CardHeader */\n/* -------------------------------------------------------------------------- */\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n 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))\nCardHeader.displayName = \"CardHeader\"\n\n/* -------------------------------------------------------------------------- */\n/* CardTitle */\n/* -------------------------------------------------------------------------- */\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n 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))\nCardTitle.displayName = \"CardTitle\"\n\n/* -------------------------------------------------------------------------- */\n/* CardDescription */\n/* -------------------------------------------------------------------------- */\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn(\"text-sm text-foreground-muted\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\n/* -------------------------------------------------------------------------- */\n/* CardContent */\n/* -------------------------------------------------------------------------- */\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n 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))\nCardContent.displayName = \"CardContent\"\n\n/* -------------------------------------------------------------------------- */\n/* CardFooter */\n/* -------------------------------------------------------------------------- */\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n 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))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\nexport type { CardProps }\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\nCarousel.displayName = \"Carousel\"\nCarouselContent.displayName = \"CarouselContent\"\nCarouselItem.displayName = \"CarouselItem\"\nCarouselPrevious.displayName = \"CarouselPrevious\"\nCarouselNext.displayName = \"CarouselNext\"\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\nCheckbox.displayName = \"Checkbox\"\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\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 {\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\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\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, convertToLocalNumbers } 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: _id, usePersianDigits = true, ...props }, ref) => {\n const getSentimentColor = (sentiment: string) => {\n switch (sentiment) {\n case \"positive\":\n return \"hsl(var(--sentiment-positive))\"\n case \"negative\":\n return \"hsl(var(--sentiment-negative))\"\n case \"neutral\":\n return \"hsl(var(--sentiment-neutral))\"\n default:\n return \"hsl(var(--sentiment-neutral))\"\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 formatNum = (num: number): string =>\n convertToLocalNumbers(num, usePersianDigits ? \"fa\" : \"en\")\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} ({formatNum(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\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 { 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(\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 locale,\n}: DatePickerProps) {\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 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\nDatePicker.displayName = \"DatePicker\"\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\nDateRangePicker.displayName = \"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 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\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\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\nconst EmptyIcon = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\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\nconst EmptyTitle = React.forwardRef<HTMLHeadingElement, React.ComponentProps<\"h3\">>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"empty-title\"\n className={cn(\"mt-4 text-lg font-semibold\", className)}\n {...props}\n />\n )\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\nEmpty.displayName = \"Empty\"\nEmptyIcon.displayName = \"EmptyIcon\"\nEmptyTitle.displayName = \"EmptyTitle\"\nEmptyDescription.displayName = \"EmptyDescription\"\n\nexport { Empty, EmptyIcon, EmptyTitle, EmptyDescription }\n\n","import * 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 (\n {\n className,\n message,\n onRetry,\n retryLabel,\n size = \"md\",\n locale = \"fa\",\n ...props\n },\n ref\n ) => {\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\",\n sizeClasses[size].wrapper,\n className\n )}\n {...props}\n >\n <AlertCircleIcon\n aria-hidden=\"true\"\n className={cn(\"text-destructive-400\", sizeClasses[size].icon)}\n />\n <p className={cn(\"text-foreground-muted max-w-xs\", sizeClasses[size].message)}>\n {resolvedMessage}\n </p>\n {onRetry && (\n <Button\n variant=\"outline\"\n size={size === \"lg\" ? \"md\" : \"sm\"}\n onClick={onRetry}\n className=\"mt-1\"\n >\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(\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\nconst FieldGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ 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)\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\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\"\nFieldTitle.displayName = \"FieldTitle\"\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\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 { 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\nInputGroup.displayName = \"InputGroup\"\nInputGroupAddon.displayName = \"InputGroupAddon\"\nInputGroupButton.displayName = \"InputGroupButton\"\nInputGroupText.displayName = \"InputGroupText\"\nInputGroupInput.displayName = \"InputGroupInput\"\nInputGroupTextarea.displayName = \"InputGroupTextarea\"\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-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\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\nTextarea.displayName = \"Textarea\"\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\nInputOTP.displayName = \"InputOTP\"\nInputOTPGroup.displayName = \"InputOTPGroup\"\nInputOTPSlot.displayName = \"InputOTPSlot\"\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\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 // Localization\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(\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 showMoreText?: string\n showLessText?: string\n}\n\nfunction InstagramPostCaption({\n caption,\n maxLines = 3,\n variant = \"vertical\",\n showMoreText = \"بیشتر\",\n showLessText = \"کمتر\",\n}: InstagramPostCaptionProps) {\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 // 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 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={!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 aria-expanded={isExpanded}\n aria-controls={captionId}\n className=\"text-sm text-muted-foreground hover:text-foreground mt-1\"\n >\n {isExpanded ? showLessText : showMoreText}\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 showMoreText,\n showLessText,\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\"} showMoreText={showMoreText} showLessText={showLessText} />}\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\"} showMoreText={showMoreText} showLessText={showLessText} />}\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\n/* -------------------------------------------------------------------------- */\n/* TooltipContent */\n/* -------------------------------------------------------------------------- */\n\ninterface TooltipContentProps\n 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<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(({ className, variant = \"default\", size = \"sm\", showArrow = false, sideOffset = 4, children, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md shadow-dropdown 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 // 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))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\nimport { cn } from \"@/lib/utils\"\n\n/* -------------------------------------------------------------------------- */\n/* Item — composable list item primitive (Shadcn Oct 2025) */\n/* -------------------------------------------------------------------------- */\n\ninterface ItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Render as child element */\n asChild?: boolean\n}\n\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>(\n ({ className, asChild, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\"\n return (\n <Comp\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"item\"\n className={cn(\n \"flex items-center gap-3 rounded-md px-2 py-2 transition-colors\",\n className\n )}\n {...props}\n />\n )\n }\n)\nItem.displayName = \"Item\"\n\n/* -------------------------------------------------------------------------- */\n/* ItemMedia — optional media / avatar slot */\n/* -------------------------------------------------------------------------- */\n\nconst ItemMedia = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"item-media\"\n className={cn(\"shrink-0\", className)}\n {...props}\n />\n))\nItemMedia.displayName = \"ItemMedia\"\n\n/* -------------------------------------------------------------------------- */\n/* ItemContent — text content area (title + description) */\n/* -------------------------------------------------------------------------- */\n\nconst ItemContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"item-content\"\n className={cn(\"flex min-w-0 flex-1 flex-col gap-0.5\", className)}\n {...props}\n />\n))\nItemContent.displayName = \"ItemContent\"\n\n/* -------------------------------------------------------------------------- */\n/* ItemTitle — primary text */\n/* -------------------------------------------------------------------------- */\n\nconst ItemTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"item-title\"\n className={cn(\"truncate text-sm font-medium text-foreground\", className)}\n {...props}\n />\n))\nItemTitle.displayName = \"ItemTitle\"\n\n/* -------------------------------------------------------------------------- */\n/* ItemDescription — secondary text */\n/* -------------------------------------------------------------------------- */\n\nconst ItemDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"item-description\"\n className={cn(\"truncate text-xs text-foreground-muted\", className)}\n {...props}\n />\n))\nItemDescription.displayName = \"ItemDescription\"\n\n/* -------------------------------------------------------------------------- */\n/* ItemGroup — groups multiple items with an optional label */\n/* -------------------------------------------------------------------------- */\n\ninterface ItemGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section label rendered above the group */\n label?: string\n}\n\nconst ItemGroup = React.forwardRef<HTMLDivElement, ItemGroupProps>(\n ({ className, label, children, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"item-group\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {label && (\n <div\n data-slot=\"item-group-label\"\n className=\"px-2 py-1.5 text-xs font-medium text-foreground-muted\"\n >\n {label}\n </div>\n )}\n {children}\n </div>\n )\n)\nItemGroup.displayName = \"ItemGroup\"\n\nexport { Item, ItemMedia, ItemContent, ItemTitle, ItemDescription, ItemGroup }\nexport type { ItemProps, ItemGroupProps }\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\nKbd.displayName = \"Kbd\"\nKbdGroup.displayName = \"KbdGroup\"\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\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\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 /**\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 * 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\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, 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\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, \"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(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","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst skeletonVariants = cva(\n \"bg-accent animate-pulse\",\n {\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: \"w-8 h-8\" },\n { shape: \"circle\", size: \"md\", class: \"w-10 h-10\" },\n { shape: \"circle\", size: \"lg\", class: \"w-14 h-14\" },\n ],\n defaultVariants: {\n shape: \"rect\",\n size: \"md\",\n },\n }\n)\n\nexport interface SkeletonProps\n extends React.HTMLAttributes<HTMLDivElement>,\n 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","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\nNativeSelect.displayName = \"NativeSelect\"\nNativeSelectOption.displayName = \"NativeSelectOption\"\nNativeSelectOptGroup.displayName = \"NativeSelectOptGroup\"\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\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\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} 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 =\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 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(\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 {strings.previous}\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 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(\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 {strings.next}\n </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({\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\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\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\nPaginationControlled.displayName = \"PaginationControlled\"\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn, formatNumber } from \"@/lib/utils\";\nimport { Skeleton } from \"./skeleton\";\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 * 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 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\">{formatNumber(followers, 'short')}</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, type SupportedLocale } from \"@/lib/utils\";\nimport { getUIStrings } from \"@/lib/i18n\";\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 * 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 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={strings.actions}\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, convertToLocalNumbers, type SupportedLocale } from \"@/lib/utils\";\nimport { Skeleton } from \"./skeleton\";\nimport { getEngagementRanges, getFollowerGroup, getCurrentRangeIndex, GROUP_LABELS, TIER_LABELS } 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 = \"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// Component-specific translations (extends shared TIER_LABELS)\nconst uiTranslations = {\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\nconst EngagementRate = React.forwardRef<HTMLDivElement, EngagementRateProps>(\n ({ className, currentRate, followers, locale = \"fa\", showCategoryCard = true, isLoading, ...props }, ref) => {\n const isRTL = locale === \"fa\" || locale === \"ar\";\n\n if (isLoading) {\n return (\n <div ref={ref} className={cn(\"space-y-4\", className)} dir={isRTL ? \"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 const t = uiTranslations[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\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 ? tierLabels.excellent : tierLabels.low}</span>\n <span>{isRTL ? tierLabels.low : tierLabels.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 : \"hsl(var(--engagement-inactive))\",\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 = \"hsl(var(--engagement-inactive))\";\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(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 ? `${groupLabel} ${t.influencer}`\n : `${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 order-2 lg:order-2\">\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=\"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 ms-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, 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 (\n { className, currentRate, followers, locale = \"fa\", showHelperText = true, isLoading = false, ...props },\n ref\n ) => {\n const isRTL = locale === \"fa\" || locale === \"ar\";\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\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 : \"hsl(var(--engagement-inactive))\",\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 = \"hsl(var(--engagement-inactive))\";\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\nProgress.displayName = \"Progress\"\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\nRadioGroup.displayName = \"RadioGroup\"\nRadioGroupItem.displayName = \"RadioGroupItem\"\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\nResizablePanelGroup.displayName = \"ResizablePanelGroup\"\nResizablePanel.displayName = \"ResizablePanel\"\nResizableHandle.displayName = \"ResizableHandle\"\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\nScrollArea.displayName = \"ScrollArea\"\nScrollBar.displayName = \"ScrollBar\"\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-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 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\nSheet.displayName = \"Sheet\"\nSheetTrigger.displayName = \"SheetTrigger\"\nSheetClose.displayName = \"SheetClose\"\nSheetPortal.displayName = \"SheetPortal\"\nSheetOverlay.displayName = \"SheetOverlay\"\nSheetContent.displayName = \"SheetContent\"\nSheetHeader.displayName = \"SheetHeader\"\nSheetFooter.displayName = \"SheetFooter\"\nSheetTitle.displayName = \"SheetTitle\"\nSheetDescription.displayName = \"SheetDescription\"\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, 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\",\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 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\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 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\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\nSlider.displayName = \"Slider\"\n\nexport { Slider }\n\n","\"use client\"\n\nimport {\n CheckIcon,\n InfoIcon,\n Loader2Icon,\n TriangleAlertIcon,\n XCircleIcon,\n} from \"lucide-react\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport const SONNER_DEFAULT_DURATION = 4000\n\n// Try to use next-themes if available, fallback to provided theme prop\nlet useTheme: () => { theme?: string }\ntry {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n useTheme = require(\"next-themes\").useTheme\n} catch {\n useTheme = () => ({ theme: undefined })\n}\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\ninterface PartoToasterProps extends ToasterProps {\n /**\n * Override the theme directly instead of reading from next-themes.\n * Useful for non-Next.js consumers.\n */\n theme?: ToasterProps[\"theme\"]\n}\n\nconst Toaster = ({\n dir = \"rtl\",\n position = \"bottom-left\",\n closeButton = false,\n theme: themeProp,\n toastOptions,\n ...props\n}: PartoToasterProps) => {\n const { theme: contextTheme } = useTheme()\n const resolvedTheme = (themeProp ?? contextTheme ?? \"system\") as ToasterProps[\"theme\"]\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={resolvedTheme}\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\nToaster.displayName = \"Toaster\"\n\nexport { Toaster }\nexport type { PartoToasterProps }\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 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: 'md',\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 sm: 'h-[12px] w-[12px]',\n md: 'h-[16px] w-[16px]',\n lg: 'h-[18px] w-[18px]',\n /** @deprecated Use sm */ small: 'h-[12px] w-[12px]',\n /** @deprecated Use md */ medium: 'h-[16px] w-[16px]',\n /** @deprecated Use lg */ large: 'h-[18px] w-[18px]',\n },\n },\n defaultVariants: {\n size: 'md',\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\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\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\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-10 [[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\",\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(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\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(\n \"hover:bg-surface-200 data-[state=selected]:bg-selection border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* TableHead */\n/* -------------------------------------------------------------------------- */\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\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({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-foreground-muted mt-4 text-sm\", className)}\n {...props}\n />\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({\n className,\n children,\n sorted,\n ...props\n}: 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\",\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(\n \"transition-colors\",\n sorted === \"asc\" ? \"text-foreground\" : \"text-foreground-muted\"\n )}\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(\n \"transition-colors\",\n sorted === \"desc\" ? \"text-foreground\" : \"text-foreground-muted\"\n )}\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 {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n TableSortHeader,\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\n/* -------------------------------------------------------------------------- */\n/* Tabs Root */\n/* -------------------------------------------------------------------------- */\n\nconst Tabs = TabsPrimitive.Root\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsListProps\n 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<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, variant = \"default\", size = \"md\", ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\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\" &&\n \"rounded-lg bg-surface-200 p-1 gap-1\",\n // Underline variant\n variant === \"underline\" &&\n \"border-b border-border gap-0\",\n // Outline variant\n variant === \"outline\" &&\n \"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))\nTabsList.displayName = TabsPrimitive.List.displayName\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger */\n/* -------------------------------------------------------------------------- */\n\ninterface TabsTriggerProps\n 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<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, children, icon, badge, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\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))\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 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\nToggle.displayName = \"Toggle\"\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\nToggleGroup.displayName = \"ToggleGroup\"\nToggleGroupItem.displayName = \"ToggleGroupItem\"\n\nexport { ToggleGroup, ToggleGroupItem }\n\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 (\n {\n className,\n value,\n direction: directionProp,\n size = \"md\",\n locale = \"fa\",\n showPercent = true,\n ...props\n },\n ref\n ) => {\n const direction = directionProp ?? (value > 0 ? \"up\" : value < 0 ? \"down\" : \"neutral\")\n\n const sizeClasses = {\n sm: { text: \"text-xs\", icon: \"w-3 h-3\", gap: \"gap-0.5\" },\n md: { text: \"text-sm\", icon: \"w-4 h-4\", gap: \"gap-1\" },\n lg: { text: \"text-base\", icon: \"w-5 h-5\", gap: \"gap-1.5\" },\n }\n\n const colorClasses = {\n up: \"text-brand\",\n down: \"text-destructive\",\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 className={cn(\n \"inline-flex items-center font-medium\",\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>\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, 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 ({ className, label, onRemove, variant = \"default\", size = \"md\", removeAriaLabel, disabled = false, locale = \"fa\", ...props }, ref) => {\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-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n className={cn(\n \"inline-flex items-center rounded-full border font-medium transition-colors\",\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\" ? \"w-3 h-3\" : \"w-3.5 h-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}\n\nconst FilterChipGroup = React.forwardRef<HTMLDivElement, FilterChipGroupProps>(\n ({ className, children, maxVisible, ...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 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 +{overflowCount}\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 { cn, convertToLocalNumbers, formatLargeNumber, type SupportedLocale } from \"@/lib/utils\"\nimport { Skeleton } from \"./skeleton\"\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 (\n {\n className,\n value,\n label,\n unit,\n trend,\n size = \"md\",\n locale = \"fa\",\n icon,\n isLoading,\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n sm: { value: \"text-2xl\", label: \"text-xs\", icon: \"w-5 h-5\" },\n md: { value: \"text-3xl\", label: \"text-sm\", icon: \"w-6 h-6\" },\n lg: { value: \"text-4xl\", label: \"text-base\", icon: \"w-8 h-8\" },\n }\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[size].label)} />\n <Skeleton shape=\"line\" className={cn(\"w-28\", sizeClasses[size].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\n ref={ref}\n className={cn(\"flex flex-col gap-1\", className)}\n {...props}\n >\n <span className={cn(\"text-foreground-lighter font-medium\", sizeClasses[size].label)}>\n {label}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {icon && (\n <span className={cn(\"text-foreground-lighter flex-shrink-0\", sizeClasses[size].icon)}>\n {icon}\n </span>\n )}\n <span className={cn(\"font-bold text-foreground tracking-tight\", sizeClasses[size].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=\"flex-shrink-0\">{trend}</span>}\n </div>\n </div>\n )\n }\n)\n\nStatDisplay.displayName = \"StatDisplay\"\n\nexport { StatDisplay }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn, convertToLocalNumbers, type SupportedLocale } from \"@/lib/utils\"\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\nconst labels = {\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 SentimentBadge = React.forwardRef<HTMLSpanElement, SentimentBadgeProps>(\n (\n {\n className,\n sentiment,\n count,\n size = \"md\",\n showLabel = true,\n locale = \"fa\",\n ...props\n },\n ref\n ) => {\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-warning-200\",\n textClass: \"text-warning-600\",\n borderClass: \"border-warning-500\",\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: \"w-3 h-3\" },\n md: { badge: \"h-7 text-sm px-2.5 gap-1.5\", icon: \"w-3.5 h-3.5\" },\n }\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-full border font-medium\",\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>{labels[locale][sentiment]}</span>}\n {count !== undefined && (\n <span className=\"font-bold\">\n {convertToLocalNumbers(count.toLocaleString(), locale)}\n </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 } from \"@/lib/utils\"\nimport { ToggleGroup, ToggleGroupItem } from \"./toggle-group\"\n\nexport interface PeriodOption {\n value: string\n label: {\n fa: string\n en: string\n }\n}\n\nexport const DEFAULT_PERIODS: PeriodOption[] = [\n { value: \"1d\", label: { fa: \"۱ روز\", en: \"1D\" } },\n { value: \"7d\", label: { fa: \"۷ روز\", en: \"7D\" } },\n { value: \"30d\", label: { fa: \"۳۰ روز\", en: \"30D\" } },\n { value: \"90d\", label: { fa: \"۹۰ روز\", en: \"90D\" } },\n { value: \"1y\", label: { fa: \"۱ سال\", en: \"1Y\" } },\n { value: \"all\", label: { fa: \"همه\", 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?: \"fa\" | \"en\"\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<\n React.ElementRef<typeof ToggleGroup>,\n PeriodSelectorProps\n>(\n (\n {\n value,\n onValueChange,\n periods = DEFAULT_PERIODS,\n locale = \"fa\",\n size = \"md\",\n disabled = false,\n className,\n },\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 className={cn(\n \"inline-flex rounded-md border border-border bg-background p-0.5 gap-0.5\",\n className\n )}\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 { cn } from \"@/lib/utils\"\n\nexport type SocialPlatform =\n | \"instagram\"\n | \"twitter\"\n | \"tiktok\"\n | \"youtube\"\n | \"linkedin\"\n | \"telegram\"\n | \"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 SIZE_CLASSES = {\n xs: { icon: \"w-3 h-3\", text: \"text-xs\", gap: \"gap-1\", badge: \"px-1.5 py-0.5 rounded\" },\n sm: { icon: \"w-4 h-4\", text: \"text-xs\", gap: \"gap-1.5\", badge: \"px-2 py-1 rounded\" },\n md: { icon: \"w-5 h-5\", text: \"text-sm\", gap: \"gap-1.5\", badge: \"px-2.5 py-1 rounded-md\" },\n lg: { icon: \"w-6 h-6\", text: \"text-base\", gap: \"gap-2\", badge: \"px-3 py-1.5 rounded-md\" },\n}\n\nconst SocialPlatformBadge = React.forwardRef<HTMLSpanElement, SocialPlatformBadgeProps>(\n (\n {\n className,\n platform,\n size = \"sm\",\n showLabel = false,\n variant = \"flat\",\n style,\n ...props\n },\n ref\n ) => {\n const meta = PLATFORM_META[platform]\n const Icon = meta.icon\n const sizes = SIZE_CLASSES[size]\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium\",\n sizes.gap,\n variant === \"badge\" && [\n sizes.badge,\n \"border border-border bg-background-surface-100\",\n ],\n className\n )}\n style={style}\n {...props}\n >\n <Icon\n className={cn(sizes.icon, \"flex-shrink-0\")}\n style={{ color: `var(--social-platform-${platform})` }}\n />\n {showLabel && (\n <span className={cn(sizes.text, \"text-foreground-light\")}>{meta.label}</span>\n )}\n </span>\n )\n }\n)\n\nSocialPlatformBadge.displayName = \"SocialPlatformBadge\"\n\nexport { SocialPlatformBadge }\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\" ? \"w-3 h-3\" : size === \"lg\" || size === \"xl\" ? \"w-5 h-5\" : \"w-4 h-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 className={cn(\"relative flex items-center\", wrapperClassName)}>\n {/* Search icon — inline-start */}\n <span\n className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center ps-2.5\"\n aria-hidden=\"true\"\n >\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-background-surface-200\",\n \"transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n size === \"xs\" ? \"w-4 h-4\" : \"w-5 h-5\"\n )}\n >\n <X className={cn(size === \"xs\" ? \"w-2.5 h-2.5\" : \"w-3.5 h-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-background-surface-200\",\n \"transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n size === \"xs\" ? \"w-4 h-4\" : \"w-5 h-5\",\n filterActive && \"text-brand\"\n )}\n >\n <SlidersHorizontal className={cn(size === \"xs\" ? \"w-2.5 h-2.5\" : \"w-3.5 h-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}\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: \"خنثی\" },\n ar: { positive: \"إيجابي\", negative: \"سلبي\", neutral: \"محايد\" },\n en: { positive: \"Positive\", negative: \"Negative\", neutral: \"Neutral\" },\n}\n\nconst SENTIMENT_STYLES: Record<\n keyof SentimentData,\n { bar: string; text: string; bg: string }\n> = {\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}\n\nfunction calcPercents(data: SentimentData): Record<keyof SentimentData, number> {\n const total = data.positive + data.negative + data.neutral\n if (total === 0) return { positive: 0, negative: 0, neutral: 0 }\n return {\n positive: Math.round((data.positive / total) * 100),\n negative: Math.round((data.negative / total) * 100),\n neutral: Math.round((data.neutral / total) * 100),\n }\n}\n\nconst SENTIMENT_ORDER: Array<keyof SentimentData> = [\"positive\", \"neutral\", \"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\n if (isLoading) {\n return (\n <div ref={ref} 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} 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 {SENTIMENT_ORDER.map((key) =>\n percents[key] > 0 ? (\n <div\n key={key}\n className={cn(\"transition-all duration-500\", SENTIMENT_STYLES[key].bar)}\n style={{ width: `${percents[key]}%` }}\n />\n ) : null\n )}\n </div>\n\n {/* Legend */}\n <div className=\"flex flex-wrap gap-x-3 gap-y-1\">\n {SENTIMENT_ORDER.map((key) => (\n <span key={key} className=\"inline-flex items-center gap-1\">\n <span\n className={cn(\"inline-block h-2 w-2 rounded-full\", SENTIMENT_STYLES[key].bar)}\n />\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], 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 className={cn(\"inline-flex flex-wrap gap-2\", className)}\n {...props}\n >\n {SENTIMENT_ORDER.map((key) => (\n <span\n key={key}\n className={cn(\n \"inline-flex items-center gap-1 rounded-full px-2 py-0.5\",\n SENTIMENT_STYLES[key].bg\n )}\n >\n <span className={cn(\"text-xs font-medium\", SENTIMENT_STYLES[key].text)}>\n {labels[key]}\n </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].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} className={cn(\"space-y-1.5\", className)} {...props}>\n {SENTIMENT_ORDER.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\">\n {labels[key]}\n </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(\n \"w-10 shrink-0 text-xs font-medium tabular-nums text-start\",\n SENTIMENT_STYLES[key].text\n )}\n >\n {showCounts\n ? convertToLocalNumbers(data[key].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} 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\">\n {title}\n </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} 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 divide-x divide-x-reverse divide-border\">\n {/* Current period */}\n <div className=\"space-y-0.5\">\n <span className=\"block text-xs text-foreground-muted\">{resolvedCurrentLabel}</span>\n <div className=\"text-2xl font-semibold tabular-nums text-foreground\">\n {currentValue}\n </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\">\n {previousValue}\n </div>\n </div>\n </div>\n\n {/* Change row */}\n {changePercent !== undefined && trendDirection !== undefined && (\n <div className=\"flex items-center gap-1.5 pt-1 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\">\n {changePercent > 0 ? \"↑\" : \"↓\"}\n </span>\n )}\n </div>\n )}\n </Card>\n )\n }\n)\n\nComparisonCard.displayName = \"ComparisonCard\"\n\nexport { ComparisonCard }\n","'use client';\n\nimport { ResponsiveLine, type LineSvgProps } from '@nivo/line';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport interface PartoLineChartProps\n extends Omit<LineSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n /** Show loading skeleton instead of chart */\n isLoading?: boolean;\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, isLoading = false, ...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: 'var(--shadow-tooltip-lg)',\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 if (isLoading) {\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }} role=\"status\" aria-label=\"Loading chart\">\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" />\n </div>\n );\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 // eslint-disable-next-line react-hooks/exhaustive-deps -- version triggers re-computation on theme change\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';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport interface PartoBarChartProps\n extends Omit<BarSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n /** Show loading skeleton instead of chart */\n isLoading?: boolean;\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, isLoading = false, ...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: 'var(--shadow-tooltip)',\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 if (isLoading) {\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }} role=\"status\" aria-label=\"Loading chart\">\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" />\n </div>\n );\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';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport interface PartoPieChartProps\n extends Omit<PieSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n /** Show loading skeleton instead of chart */\n isLoading?: boolean;\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, isLoading = false, ...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: 'var(--shadow-tooltip)',\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 if (isLoading) {\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }} role=\"status\" aria-label=\"Loading chart\">\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" />\n </div>\n );\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';\nimport { Skeleton } from '@/components/ui/skeleton';\n\n \nexport interface PartoHeatMapProps\n extends Omit<HeatMapSvgProps<any, any>, 'theme' | 'width' | 'height'> {\n className?: string;\n locale?: 'fa' | 'en';\n /** Show loading skeleton instead of chart */\n isLoading?: boolean;\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 isLoading = false,\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: 'var(--shadow-tooltip)',\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 \n const defaultTooltip = ({ cell }: { 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 \n const processAxisConfig = (axisConfig: any) => {\n if (!axisConfig) return axisConfig;\n const processed = { ...axisConfig };\n if (typeof processed.format === 'function') {\n const originalFormat = processed.format;\n processed.format = (value: string | number) => formatNumber(originalFormat(value));\n } else {\n processed.format = (value: string | number) => formatNumber(value);\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 \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 if (isLoading) {\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }} role=\"status\" aria-label=\"Loading chart\">\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" />\n </div>\n );\n }\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 { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\nimport { Skeleton } from '@/components/ui/skeleton';\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}\n\nconst FALLBACK_COLORS = [\n 'hsl(156.5deg 86.5% 26.1%)',\n 'hsl(9.9deg 82% 43.5%)',\n 'hsl(30.3deg 80.3% 47.8%)',\n 'hsl(247.8deg 100% 70%)',\n];\n\nconst FONT_FAMILY = \"'Yekan Bakh', Arial, sans-serif\";\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 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 = 18,\n maxFontSize = 80,\n padding = 2,\n spiral = 'archimedean',\n rotate = 0,\n random = stableRandom,\n fontWeight = 700,\n onWordClick,\n isLoading = false,\n}: PartoWordCloudProps) {\n const styles = useRootStyles();\n const [hovered, setHovered] = React.useState<TooltipData | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = React.useState(0);\n\n // Responsive sizing: measure container and scale SVG accordingly\n React.useEffect(() => {\n if (!containerRef.current || typeof ResizeObserver === 'undefined') return;\n\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 // Use measured container width; height scales proportionally\n const width = containerWidth > 0 ? containerWidth : widthProp;\n const height = containerWidth > 0\n ? Math.round(containerWidth * (heightProp / widthProp))\n : heightProp;\n\n const chartColors = React.useMemo(\n () => [\n resolveCssColor(styles, '--chart-1', FALLBACK_COLORS[0]),\n resolveCssColor(styles, '--chart-2', FALLBACK_COLORS[1]),\n resolveCssColor(styles, '--chart-3', FALLBACK_COLORS[2]),\n resolveCssColor(styles, '--chart-4', FALLBACK_COLORS[3]),\n ],\n [styles]\n );\n\n const formattedWords = React.useMemo(\n () => words.map((word) => ({ ...word, text: formatHashtagDirection(word.text) })),\n [words]\n );\n\n const totalWordCount = React.useMemo(\n () => words.reduce((acc, w) => acc + w.value, 0),\n [words]\n );\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 = (\n event: React.MouseEvent,\n text: string,\n value: number,\n color: string\n ) => {\n setHovered({ text, value, x: event.clientX, y: event.clientY, color });\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: 20 }, (_, i) => (\n <Skeleton\n key={i}\n shape=\"rect\"\n className=\"h-8 rounded-full\"\n style={{\n width: `${40 + ((i * 37) % 80)}px`,\n opacity: 0.3 + ((i * 17) % 40) / 100,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n dir=\"rtl\"\n >\n {/* Only render after container size is measured */}\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\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={{ userSelect: 'none', pointerEvents: 'all' }}\n onMouseEnter={(e) => handleMouseMove(e, w.text!, value, color)}\n onMouseMove={(e) => handleMouseMove(e, w.text!, value, color)}\n onMouseLeave={() => setHovered(null)}\n onClick={() =>\n onWordClick?.({ text: originalData?.text ?? w.text!, value })\n }\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 - 10}px`,\n transform: 'translate(-50%, -100%)',\n }}\n >\n <div\n 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\"\n dir=\"rtl\"\n >\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 gap-4\">\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 {totalWordCount > 0 && (\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">درصد</span>\n <span className=\"font-mono font-medium tabular-nums\">\n {((hovered.value / totalWordCount) * 100).toFixed(1)}٪\n </span>\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["format","format","jsx","jsxs","jsx","React","cva","Loader2","forwardRef","jsx","jsxs","cva","forwardRef","Loader2","jsx","jsxs","React","cva","React","jsx","cva","jsx","Fragment","jsx","jsxs","React","createPortal","jsx","Fragment","jsx","jsxs","createPortal","jsx","cva","jsx","jsxs","cva","Slot","ChevronRight","MoreHorizontal","jsx","jsxs","Slot","ChevronRight","MoreHorizontal","Slot","cva","React","jsx","jsxs","jsx","cva","Slot","ChevronLeft","ChevronRight","jsx","Calendar","ChevronRight","ChevronLeft","React","jsx","React","ArrowLeft","ArrowRight","jsx","jsxs","api","ArrowRight","ArrowLeft","jsx","jsx","CollapsibleTrigger","CollapsibleContent","React","X","jsx","jsxs","X","jsx","jsxs","React","jsx","jsxs","sentiment","CheckIcon","jsx","jsxs","CheckIcon","React","jsx","jsx","jsxs","Calendar","React","CalendarIcon","ChevronDownIcon","jsx","Label","jsx","jsxs","formatDateRange","Label","ChevronDownIcon","Calendar","CalendarIcon","jsx","jsxs","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","React","jsx","React","jsx","jsxs","React","useMemo","cva","jsx","jsxs","cva","Label","useMemo","React","Slot","jsx","Label","Slot","jsx","React","X","cva","jsx","jsxs","cva","X","React","X","cva","jsx","jsxs","cva","X","React","cva","jsx","jsx","cva","React","jsx","jsxs","React","cva","React","jsx","jsxs","Fragment","jsx","jsxs","cva","Icon","React","Slot","jsx","jsxs","Item","Slot","jsx","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","React","Info","format","cva","jsx","jsxs","cva","Fragment","jsx","jsxs","Info","segmentCenterX","format","ChevronDownIcon","jsx","jsxs","ChevronDownIcon","cva","ChevronDownIcon","jsx","jsxs","cva","ChevronDownIcon","React","ChevronRightIcon","Fragment","jsx","jsxs","Icon","ChevronRightIcon","jsx","jsxs","React","jsx","jsxs","sizeClasses","React","jsx","jsxs","sizeClasses","React","Users","jsx","jsxs","Users","formatNumber","React","jsx","jsxs","cva","jsx","jsxs","cva","CircleIcon","jsx","RadioGroup","CircleIcon","React","RadioGroupPrimitive","jsx","jsx","jsx","jsxs","React","Check","ChevronDown","ChevronUp","cva","jsx","jsxs","cva","ChevronDown","ChevronUp","Check","jsx","jsxs","React","Slot","cva","React","jsx","jsxs","open","Slot","cva","React","jsx","jsxs","useDocumentDirection","CheckIcon","Loader2Icon","jsx","CheckIcon","Loader2Icon","React","cva","jsx","cva","jsx","jsxs","React","jsx","jsxs","cva","jsx","cva","React","jsx","React","TrendingUp","jsx","jsxs","sizeClasses","Icon","React","X","jsx","jsxs","sizeClasses","React","jsx","jsxs","sizeClasses","React","Minus","jsx","jsxs","Icon","sizeClasses","React","Check","ChevronDown","X","Fragment","jsx","jsxs","ChevronDown","Check","X","React","jsx","React","jsx","jsxs","Icon","React","Search","X","Loader2","jsx","jsxs","Search","Loader2","X","React","jsx","jsxs","labels","React","Info","jsx","jsxs","STRINGS","Info","useEffect","useMemo","useState","jsx","jsx","FALLBACKS","jsx","FALLBACKS","jsx","jsxs","FALLBACKS","toEnglishDigits","formatNumber","React","createPortal","jsx","jsxs","createPortal"]}
|