@parto-system-design/ui 4.0.0
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.
Potentially problematic release.
This version of @parto-system-design/ui might be problematic. Click here for more details.
- package/README.md +68 -0
- package/dist/assets/fonts/YekanBakh-VF.woff2 +0 -0
- package/dist/index.cjs +9799 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +5191 -0
- package/dist/index.d.cts +1389 -0
- package/dist/index.d.ts +1389 -0
- package/dist/index.js +9503 -0
- package/dist/index.js.map +1 -0
- package/package.json +110 -0
- package/tailwind.config.ts +552 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/utils.ts","../src/lib/jalali-utils.ts","../src/icons.tsx","../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/button.tsx","../src/lib/constants.ts","../src/components/ui/autocomplete.tsx","../src/components/ui/input.tsx","../src/components/ui/spinner.tsx","../src/components/ui/user-autocomplete.tsx","../src/components/ui/avatar.tsx","../src/components/ui/aspect-ratio.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/button-group.tsx","../src/components/ui/separator.tsx","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/carousel.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/command.tsx","../src/components/ui/dialog.tsx","../src/components/ui/comment-card.tsx","../src/components/ui/context-menu.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/popover.tsx","../src/components/ui/date-range-picker.tsx","../src/components/ui/label.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/empty.tsx","../src/components/ui/field.tsx","../src/components/ui/form.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/input-group.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/instagram-post.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/kbd.tsx","../src/components/ui/menubar.tsx","../src/components/ui/metric-card.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/native-select.tsx","../src/components/ui/navigation-menu.tsx","../src/components/ui/pagination.tsx","../src/components/ui/pagination-controlled.tsx","../src/components/ui/profile-card.tsx","../src/components/ui/profile-info.tsx","../src/components/ui/engagement-rate.tsx","../src/components/ui/engagement-rate-bar.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/radio-card.tsx","../src/components/ui/resizable.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/slider.tsx","../src/components/ui/sonner.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/charts/PartoLineChart.tsx","../src/hooks/use-root-styles.ts","../src/lib/theme.ts","../src/components/charts/PartoBarChart.tsx","../src/components/charts/PartoPieChart.tsx","../src/components/charts/PartoHeatMap.tsx","../src/components/charts/PartoWordCloud.tsx"],"sourcesContent":["// Export utility functions\nexport * from './lib/utils';\nexport * from './lib/jalali-utils';\n\n// Export icons\nexport * from './icons';\n\n// Export UI components\nexport * from './components/ui/accordion';\nexport * from './components/ui/alert';\nexport * from './components/ui/alert-dialog';\nexport * from './components/ui/autocomplete';\nexport * from './components/ui/user-autocomplete';\nexport * from './components/ui/aspect-ratio';\nexport * from './components/ui/avatar';\nexport * from './components/ui/badge';\nexport * from './components/ui/breadcrumb';\nexport * from './components/ui/button';\nexport * from './components/ui/button-group';\nexport * from './components/ui/calendar';\nexport * from './components/ui/card';\nexport * from './components/ui/carousel';\nexport * from './components/ui/checkbox';\nexport * from './components/ui/collapsible';\nexport * from './components/ui/command';\nexport * from './components/ui/comment-card';\nexport * from './components/ui/context-menu';\nexport * from './components/ui/date-picker';\nexport * from './components/ui/date-range-picker';\nexport * from './components/ui/dialog';\nexport * from './components/ui/drawer';\nexport * from './components/ui/dropdown-menu';\nexport * from './components/ui/empty';\nexport * from './components/ui/field';\nexport * from './components/ui/form';\nexport * from './components/ui/hover-card';\nexport * from './components/ui/input';\nexport * from './components/ui/input-group';\nexport * from './components/ui/input-otp';\nexport * from './components/ui/instagram-post';\nexport * from './components/ui/kbd';\nexport * from './components/ui/label';\nexport * from './components/ui/menubar';\nexport * from './components/ui/metric-card';\nexport * from './components/ui/native-select';\nexport * from './components/ui/navigation-menu';\nexport * from './components/ui/pagination';\nexport * from './components/ui/pagination-controlled';\nexport * from './components/ui/popover';\nexport * from './components/ui/profile-card';\nexport * from './components/ui/profile-info';\nexport * from './components/ui/engagement-rate';\nexport * from './components/ui/engagement-rate-bar';\nexport * from './components/ui/progress';\nexport * from './components/ui/radio-group';\nexport * from './components/ui/radio-card';\nexport * from './components/ui/resizable';\nexport * from './components/ui/scroll-area';\nexport * from './components/ui/select';\nexport * from './components/ui/separator';\nexport * from './components/ui/sheet';\nexport * from './components/ui/sidebar';\nexport * from './components/ui/skeleton';\nexport * from './components/ui/slider';\nexport * from './components/ui/sonner';\nexport * from './components/ui/spinner';\nexport * from './components/ui/switch';\nexport * from './components/ui/table';\nexport * from './components/ui/tabs';\nexport * from './components/ui/textarea';\nexport * from './components/ui/toggle';\nexport * from './components/ui/toggle-group';\nexport * from './components/ui/tooltip';\n\n// Export chart components\nexport * from './components/charts/PartoLineChart';\nexport * from './components/charts/PartoBarChart';\nexport * from './components/charts/PartoPieChart';\nexport * from './components/charts/PartoHeatMap';\nexport * from './components/charts/PartoWordCloud';\n\n// Export hooks\nexport * from './hooks/use-mobile';\n\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Format number to Instagram-style short format\n * @example formatNumber(123456, 'short') => '123K'\n * @example formatNumber(123456, 'exact') => '123,456'\n */\nexport function formatNumber(\n num: number | undefined,\n format: 'exact' | 'short' = 'exact'\n): string {\n if (num === undefined || num === null) return '0';\n\n if (format === 'exact') {\n return num.toLocaleString('en-US');\n }\n\n // Short format (Instagram style)\n if (num >= 1_000_000_000) {\n return `${(num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')}B`;\n }\n if (num >= 1_000_000) {\n return `${(num / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n }\n if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1).replace(/\\.0$/, '')}K`;\n }\n return num.toString();\n}\n\n/**\n * Format date to relative time with absolute on hover (Persian)\n * @example formatRelativeTime(new Date()) => '۲ ساعت پیش'\n */\nexport function formatRelativeTime(date: Date | string | number): string {\n const now = new Date();\n const then = new Date(date);\n const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1000);\n\n const toPersianDigits = (num: number | string): string => {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n };\n\n if (diffInSeconds < 60) {\n return 'همین الان';\n }\n\n const diffInMinutes = Math.floor(diffInSeconds / 60);\n if (diffInMinutes < 60) {\n return `${toPersianDigits(diffInMinutes)} دقیقه پیش`;\n }\n\n const diffInHours = Math.floor(diffInMinutes / 60);\n if (diffInHours < 24) {\n return `${toPersianDigits(diffInHours)} ساعت پیش`;\n }\n\n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays < 7) {\n return `${toPersianDigits(diffInDays)} روز پیش`;\n }\n\n const diffInWeeks = Math.floor(diffInDays / 7);\n if (diffInWeeks < 4) {\n return `${toPersianDigits(diffInWeeks)} هفته پیش`;\n }\n\n const diffInMonths = Math.floor(diffInDays / 30);\n if (diffInMonths < 12) {\n return `${toPersianDigits(diffInMonths)} ماه پیش`;\n }\n\n const diffInYears = Math.floor(diffInDays / 365);\n return `${toPersianDigits(diffInYears)} سال پیش`;\n}\n\n/**\n * Format date to absolute format (Persian)\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date);\n \n const toPersianDigits = (num: number | string): string => {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n };\n\n const persianMonths = [\n 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',\n 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n ];\n\n // Convert to Persian calendar (simple conversion)\n const year = d.getFullYear();\n const month = d.getMonth();\n const day = d.getDate();\n const hours = d.getHours();\n const minutes = d.getMinutes();\n\n // Simple Persian date conversion (approximate)\n const persianYear = year - 621;\n const persianMonth = persianMonths[month];\n const persianDay = toPersianDigits(day);\n const persianHours = toPersianDigits(hours);\n const persianMinutes = toPersianDigits(minutes.toString().padStart(2, '0'));\n\n return `${persianDay} ${persianMonth} ${toPersianDigits(persianYear)}، ${persianHours}:${persianMinutes}`;\n}\n\n","import moment from \"moment-jalaali\"\n\n// Configure moment-jalaali to use Farsi locale\nmoment.loadPersian({ usePersianDigits: true, dialect: \"persian-modern\" })\n\n/**\n * Persian/Farsi month names\n */\nexport const PERSIAN_MONTHS = [\n \"فروردین\",\n \"اردیبهشت\",\n \"خرداد\",\n \"تیر\",\n \"مرداد\",\n \"شهریور\",\n \"مهر\",\n \"آبان\",\n \"آذر\",\n \"دی\",\n \"بهمن\",\n \"اسفند\",\n]\n\n/**\n * Persian/Farsi short month names\n */\nexport const PERSIAN_MONTHS_SHORT = [\n \"فرو\",\n \"ارد\",\n \"خرد\",\n \"تیر\",\n \"مرد\",\n \"شهر\",\n \"مهر\",\n \"آبا\",\n \"آذر\",\n \"دی\",\n \"بهم\",\n \"اسف\",\n]\n\n/**\n * Persian/Farsi weekday names\n */\nexport const PERSIAN_WEEKDAYS = [\n \"یکشنبه\",\n \"دوشنبه\",\n \"سهشنبه\",\n \"چهارشنبه\",\n \"پنجشنبه\",\n \"جمعه\",\n \"شنبه\",\n]\n\n/**\n * Persian/Farsi short weekday names\n */\nexport const PERSIAN_WEEKDAYS_SHORT = [\"ی\", \"د\", \"س\", \"چ\", \"پ\", \"ج\", \"ش\"]\n\n/**\n * Convert English digits to Persian/Farsi digits\n */\nexport function toPersianDigits(num: number | string): string {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n return String(num).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n}\n\n/**\n * Convert Persian/Farsi digits to English digits\n */\nexport function toEnglishDigits(str: string): string {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n const arabicDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"]\n\n return str\n .replace(/[۰-۹]/g, (digit) => String(persianDigits.indexOf(digit)))\n .replace(/[٠-٩]/g, (digit) => String(arabicDigits.indexOf(digit)))\n}\n\n/**\n * Format a Date object to Persian/Jalali date string\n */\nexport function formatJalaliDate(\n date: Date,\n format: string = \"jYYYY/jMM/jDD\"\n): string {\n return moment(date).format(format)\n}\n\n/**\n * Get Persian month name from a Date object\n */\nexport function getPersianMonthName(date: Date): string {\n const monthIndex = moment(date).jMonth()\n return PERSIAN_MONTHS[monthIndex]\n}\n\n/**\n * Get Persian short month name from a Date object\n */\nexport function getPersianMonthNameShort(date: Date): string {\n const monthIndex = moment(date).jMonth()\n return PERSIAN_MONTHS_SHORT[monthIndex]\n}\n\n/**\n * Get Persian weekday name from a Date object\n */\nexport function getPersianWeekdayName(date: Date, short: boolean = false): string {\n const dayIndex = moment(date).day()\n return short ? PERSIAN_WEEKDAYS_SHORT[dayIndex] : PERSIAN_WEEKDAYS[dayIndex]\n}\n\n/**\n * Get Persian year from a Date object\n */\nexport function getPersianYear(date: Date): number {\n return moment(date).jYear()\n}\n\n/**\n * Get Persian month (0-11) from a Date object\n */\nexport function getPersianMonth(date: Date): number {\n return moment(date).jMonth()\n}\n\n/**\n * Get Persian day from a Date object\n */\nexport function getPersianDay(date: Date): number {\n return moment(date).jDate()\n}\n\n/**\n * Create a Date object from Persian/Jalali date\n */\nexport function jalaliToGregorian(\n year: number,\n month: number,\n day: number\n): Date {\n return moment(`${year}/${month + 1}/${day}`, \"jYYYY/jM/jD\").toDate()\n}\n\n/**\n * Format date range in Persian\n */\nexport function formatPersianDateRange(from: Date, to: Date): string {\n const fromMoment = moment(from)\n const toMoment = moment(to)\n\n const fromYear = fromMoment.jYear()\n const toYear = toMoment.jYear()\n const fromMonth = fromMoment.jMonth()\n const toMonth = toMoment.jMonth()\n const fromDay = fromMoment.jDate()\n const toDay = toMoment.jDate()\n\n // Same day\n if (fromYear === toYear && fromMonth === toMonth && fromDay === toDay) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same month and year\n if (fromYear === toYear && fromMonth === toMonth) {\n return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same year\n if (fromYear === toYear) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Different years\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(toYear)}`\n}\n\n/**\n * Get all months for a dropdown (returns array of {value, label})\n */\nexport function getPersianMonthsForDropdown(): Array<{\n value: number\n label: string\n}> {\n return PERSIAN_MONTHS.map((month, index) => ({\n value: index,\n label: month,\n }))\n}\n\n/**\n * Get years range for a dropdown\n */\nexport function getPersianYearsForDropdown(\n fromYear: number,\n toYear: number\n): Array<{ value: number; label: string }> {\n const years: Array<{ value: number; label: string }> = []\n for (let year = fromYear; year <= toYear; year++) {\n years.push({\n value: year,\n label: toPersianDigits(year),\n })\n }\n return years\n}\n\n","import * as React from 'react';\nimport {\n AlertCircle,\n AlertTriangle,\n ArrowRight,\n ArrowLeft,\n Bold,\n Building,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Circle,\n Clock,\n Copy,\n Download,\n Eye,\n EyeOff,\n File,\n FileText,\n Heart,\n Home,\n Image,\n Images,\n Inbox,\n Info,\n Italic,\n Loader2,\n Menu,\n MessageCircle,\n Moon,\n MoreHorizontal,\n MoreVertical,\n Plus,\n Rocket,\n Search,\n Settings,\n Share2,\n Sparkles,\n Sun,\n Trash,\n Underline,\n User,\n Users,\n Video,\n X,\n type LucideIcon,\n} from 'lucide-react';\n\nexport type Icon = LucideIcon;\n\n/**\n * Icon Collection for Parto Design System\n * \n * RTL Support Guidelines:\n * ----------------------\n * Directional icons (arrows, chevrons) should be flipped in RTL contexts when they indicate navigation direction.\n * \n * Usage Examples:\n * - For navigation: <Icons.arrowRight className=\"rtl:rotate-180\" />\n * - For UI direction: <Icons.chevronRight className=\"rtl:rotate-180\" />\n * \n * Icons that should NOT be flipped:\n * - Non-directional icons (check, close, settings, etc.)\n * - Icons representing real-world objects\n */\nexport const Icons: Record<string, React.FC<React.SVGProps<SVGSVGElement>> | LucideIcon> = {\n // Lucide Icons\n logo: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n ),\n parto: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 75 75\"\n fill=\"currentColor\"\n {...props}\n >\n <polygon points=\"75,0 0,0 0,25\" />\n <polygon points=\"75,75 50,75 75,0\" />\n <polygon points=\"75,0 25,75 0,75 0,50\" />\n </svg>\n ),\n alertCircle: AlertCircle,\n alertTriangle: AlertTriangle,\n arrowRight: ArrowRight,\n arrowLeft: ArrowLeft,\n bold: Bold,\n calendar: Calendar,\n check: Check,\n chevronDown: ChevronDown,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n chevronUp: ChevronUp,\n circle: Circle,\n clock: Clock,\n copy: Copy,\n download: Download,\n eye: Eye,\n eyeOff: EyeOff,\n file: File,\n fileText: FileText,\n heart: Heart,\n home: Home,\n image: Image,\n images: Images,\n inbox: Inbox,\n info: Info,\n italic: Italic,\n loader: Loader2,\n menu: Menu,\n messageCircle: MessageCircle,\n moon: Moon,\n moreHorizontal: MoreHorizontal,\n moreVertical: MoreVertical,\n plus: Plus,\n rocket: Rocket,\n search: Search,\n settings: Settings,\n share: Share2,\n sparkles: Sparkles,\n sun: Sun,\n trash: Trash,\n underline: Underline,\n user: User,\n users: Users,\n video: Video,\n building: Building,\n close: X,\n spinner: Loader2,\n gitHub: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fab\"\n data-icon=\"github\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 496 512\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"\n ></path>\n </svg>\n ),\n twitter: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z\" />\n </svg>\n ),\n instagram: (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\" />\n </svg>\n ),\n} as const;\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-start text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border ps-12 pe-4 py-3 text-sm [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-3.5 [&>svg]:w-5 [&>svg]:h-5\",\n {\n variants: {\n variant: {\n default: \"text-foreground bg-alternative border [&>svg]:text-foreground\",\n info: \"text-foreground bg-alternative border [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\n success: \"text-foreground bg-brand-200 dark:bg-brand-400 border-brand-500 dark:border-brand-600 [&>svg]:text-brand-600 dark:[&>svg]:text-brand-700\",\n warning: \"text-foreground border-warning-400 bg-warning-200 dark:bg-warning-400 [&>svg]:text-warning-600 dark:[&>svg]:text-warning-700\",\n destructive: \"text-foreground border-destructive-400 bg-destructive-200 dark:bg-destructive-400 [&>svg]:text-destructive-600 dark:[&>svg]:text-destructive-700\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed text-foreground-light font-normal\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-start\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end sm:gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants({ variant: \"secondary\" }), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n\n","'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { VariantProps, cva } from 'class-variance-authority'\nimport { Loader2 } from 'lucide-react'\nimport { cloneElement, forwardRef, isValidElement } from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>\nconst buttonVariants = cva(\n `relative\n flex items-center justify-center\n cursor-pointer\n inline-flex\n items-center\n space-x-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 <Loader2 className={cn(loadingVariants({ loading, variant: buttonVariant }))} />\n </div>\n ) : _iconLeft ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{_iconLeft}</div>\n ) : null),\n (children.props as { children?: React.ReactNode })?.children && (\n <span className={'truncate'}>{(children.props as { children?: React.ReactNode }).children}</span>\n ),\n iconRight && !loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{iconRight}</div>\n )\n )\n ) : null\n ) : (\n <>\n {showIcon &&\n (loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2 className={cn(loadingVariants({ loading, variant: buttonVariant }))} />\n </div>\n ) : _iconLeft ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{_iconLeft}</div>\n ) : null)}{' '}\n {children && <span className={'truncate'}>{children}</span>}{' '}\n {iconRight && !loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>{iconRight}</div>\n )}\n </>\n )}\n </Comp>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","export const SIZE = {\n text: {\n tiny: 'text-xs',\n small: 'text-sm leading-4',\n medium: 'text-sm',\n large: 'text-base',\n xlarge: 'text-base',\n },\n padding: {\n tiny: 'px-2.5 py-1',\n small: 'px-3 py-2',\n medium: 'px-4 py-2',\n large: 'px-4 py-2',\n xlarge: 'px-6 py-3',\n },\n height: {\n tiny: 'h-[26px]',\n small: 'h-[34px]',\n medium: 'h-[38px]',\n large: 'h-[42px]',\n xlarge: 'h-[50px]',\n },\n}\n\n// used for internal badges/buttons\n// such as Button Group Items or Multi Select items\nexport const SIZE_INNER = {\n text: {\n tiny: 'text-xs',\n small: 'text-sm leading-4',\n medium: 'text-sm',\n large: 'text-base',\n xlarge: 'text-base',\n },\n padding: {\n tiny: 'px-2.5 py-1',\n small: 'px-3 py-2',\n medium: 'px-4 py-2',\n large: 'px-4 py-2',\n xlarge: 'px-6 py-3',\n },\n height: {\n tiny: 'h-[24px]',\n small: 'h-[28px]',\n medium: 'h-[32px]',\n large: 'h-[36px]',\n xlarge: 'h-[44px]',\n },\n}\n\nexport const SIZE_VARIANTS = {\n tiny: `${SIZE.text['tiny']} ${SIZE.padding['tiny']} ${SIZE.height['tiny']}`,\n small: `${SIZE.text['small']} ${SIZE.padding['small']} ${SIZE.height['small']}`,\n medium: `${SIZE.text['medium']} ${SIZE.padding['medium']} ${SIZE.height['medium']}`,\n large: `${SIZE.text['large']} ${SIZE.padding['large']} ${SIZE.height['large']}`,\n xlarge: `${SIZE.text['xlarge']} ${SIZE.padding['xlarge']} ${SIZE.height['xlarge']}`,\n}\n\nexport const SIZE_VARIANTS_INNER = {\n tiny: `${SIZE.text['tiny']} ${SIZE.padding['tiny']} ${SIZE_INNER.height['tiny']}`,\n small: `${SIZE.text['small']} ${SIZE.padding['small']} ${SIZE_INNER.height['small']}`,\n medium: `${SIZE.text['medium']} ${SIZE.padding['medium']} ${SIZE_INNER.height['medium']}`,\n large: `${SIZE.text['large']} ${SIZE.padding['large']} ${SIZE_INNER.height['large']}`,\n xlarge: `${SIZE.text['xlarge']} ${SIZE.padding['xlarge']} ${SIZE_INNER.height['xlarge']}`,\n}\n\nexport const SIZE_VARIANTS_DEFAULT = 'small'\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\n\nexport interface AutocompleteItem {\n value: string;\n label: string;\n [key: string]: any;\n}\n\nexport interface AutocompleteProps<T extends AutocompleteItem = AutocompleteItem>\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\" | \"onSelect\" | \"size\"> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string;\n\n /**\n * مقدار پیشفرض\n * Default value\n */\n defaultValue?: string;\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void;\n\n /**\n * لیست پیشنهادها\n * List of suggestions\n */\n suggestions?: T[];\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean;\n\n /**\n * تابع جستجو (برای fetch کردن suggestions)\n * Search function (for fetching suggestions)\n */\n onSearch?: (query: string) => void | Promise<void>;\n\n /**\n * تابع فراخوانی هنگام انتخاب یک مورد\n * Called when an item is selected\n */\n onSelect?: (item: T) => void;\n\n /**\n * تابع سفارشی برای رندر کردن هر suggestion\n * Custom render function for each suggestion\n */\n renderItem?: (item: T, isActive: boolean) => React.ReactNode;\n\n /**\n * تأخیر debounce (میلیثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number;\n\n /**\n * حداقل تعداد کاراکتر برای نمایش suggestions\n * Minimum characters to show suggestions\n * @default 1\n */\n minChars?: number;\n\n /**\n * حداکثر ارتفاع منوی suggestions\n * Maximum height of suggestions menu\n * @default \"400px\"\n */\n maxHeight?: string;\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string;\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean;\n\n /**\n * باز کردن خودکار منو هنگام focus\n * Auto-open menu on focus\n */\n autoOpenOnFocus?: boolean;\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean;\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: \"rtl\" | \"ltr\";\n}\n\nconst Autocomplete = React.forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = \"\",\n onValueChange,\n suggestions = [],\n isLoading = false,\n onSearch,\n onSelect,\n renderItem,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = \"400px\",\n emptyMessage = \"نتیجهای یافت نشد\",\n disableKeyboard = false,\n autoOpenOnFocus = false,\n clearOnSelect = false,\n dir = \"rtl\",\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [showSuggestions, setShowSuggestions] = React.useState(false);\n const [activeSuggestionIndex, setActiveSuggestionIndex] = React.useState(-1);\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const suggestionsRef = React.useRef<HTMLDivElement>(null);\n const debounceTimerRef = React.useRef<NodeJS.Timeout | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n // Debounced search\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (value.length >= minChars && onSearch) {\n debounceTimerRef.current = setTimeout(() => {\n onSearch(value);\n }, debounceDelay);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [value, minChars, onSearch, debounceDelay]);\n\n // Update position when suggestions should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showSuggestions && value.length >= minChars;\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }\n };\n\n updatePosition();\n\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n } else if (!shouldShow) {\n setPosition(null);\n }\n }, [showSuggestions, value.length, minChars]);\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n suggestionsRef.current &&\n !suggestionsRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeSuggestionIndex >= 0 && suggestionsRef.current) {\n const activeElement = suggestionsRef.current.children[\n activeSuggestionIndex\n ] as HTMLElement;\n if (activeElement) {\n activeElement.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n }\n }\n }, [activeSuggestionIndex]);\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n\n if (newValue.length >= minChars) {\n setShowSuggestions(true);\n } else {\n setShowSuggestions(false);\n }\n setActiveSuggestionIndex(-1);\n };\n\n const handleSuggestionClick = (item: AutocompleteItem) => {\n if (clearOnSelect) {\n handleValueChange(\"\");\n } else {\n handleValueChange(item.value);\n }\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n onSelect?.(item);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showSuggestions && suggestions.length > 0) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setActiveSuggestionIndex((prev) =>\n prev < suggestions.length - 1 ? prev + 1 : prev\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setActiveSuggestionIndex((prev) => (prev > 0 ? prev - 1 : -1));\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeSuggestionIndex >= 0 && activeSuggestionIndex < suggestions.length) {\n handleSuggestionClick(suggestions[activeSuggestionIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setShowSuggestions(false);\n setActiveSuggestionIndex(-1);\n break;\n }\n }\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (autoOpenOnFocus && value.length >= minChars && suggestions.length > 0) {\n setShowSuggestions(true);\n }\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n };\n\n const defaultRenderItem = (item: AutocompleteItem, _isActive: boolean) => (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{item.label}</span>\n </div>\n );\n\n const shouldShowSuggestions = showSuggestions && value.length >= minChars;\n\n // Calculate position for portal\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n };\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n };\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n };\n }, [position]);\n\n return (\n <>\n <div ref={containerRef} className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n {...props}\n />\n {isLoading && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2\",\n dir === \"rtl\" ? \"left-3\" : \"right-3\"\n )}\n >\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowSuggestions && typeof document !== \"undefined\" && (\n createPortal(\n <div\n ref={suggestionsRef}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {suggestions.length > 0 ? (\n suggestions.map((item, index) => (\n <button\n key={item.value}\n onClick={() => handleSuggestionClick(item)}\n className={cn(\n \"w-full text-start p-3 hover:bg-accent transition-colors\",\n index === activeSuggestionIndex && \"bg-accent\",\n index !== suggestions.length - 1 && \"border-b border-border\"\n )}\n type=\"button\"\n >\n {renderItem ? renderItem(item, index === activeSuggestionIndex) : defaultRenderItem(item, index === activeSuggestionIndex)}\n </button>\n ))\n ) : (\n !isLoading && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </div>\n )\n )}\n </div>,\n document.body\n )\n )}\n </>\n );\n }\n);\n\nAutocomplete.displayName = \"Autocomplete\";\n\nexport { Autocomplete };\n\n","import { VariantProps, cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof InputVariants> {}\n\nexport const InputVariants = cva(\n cn(\n 'flex w-full rounded-md border border-control read-only:border-button bg-foreground/[.026] text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-foreground-muted read-only:text-foreground-light',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted disabled:cursor-not-allowed disabled:text-foreground-muted',\n 'aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive'\n ),\n {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, size = 'small', ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n {...props}\n className={cn(InputVariants({ size }), className)}\n />\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from \"react\"\nimport { Loader2Icon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n )\n}\n\nexport { Spinner }\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\n\nexport interface UserItem {\n id: string;\n name: string;\n username: string;\n avatar?: string;\n followers: number;\n [key: string]: any;\n}\n\nexport interface UserAutocompleteProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\" | \"onSelect\" | \"size\"> {\n /**\n * مقدار ورودی\n * Input value\n */\n value?: string;\n\n /**\n * مقدار پیشفرض\n * Default value\n */\n defaultValue?: string;\n\n /**\n * تابع فراخوانی هنگام تغییر مقدار\n * Called when value changes\n */\n onValueChange?: (value: string) => void;\n\n /**\n * لیست کاربران\n * List of users\n */\n users?: UserItem[];\n\n /**\n * وضعیت بارگذاری\n * Loading state\n */\n isLoading?: boolean;\n\n /**\n * تابع جستجو (برای fetch کردن users)\n * Search function (for fetching users)\n */\n onSearch?: (query: string, page: number) => void | Promise<void>;\n\n /**\n * تابع فراخوانی هنگام انتخاب یک کاربر\n * Called when a user is selected\n */\n onSelect?: (user: UserItem) => void;\n\n /**\n * تأخیر debounce (میلیثانیه)\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceDelay?: number;\n\n /**\n * حداقل تعداد کاراکتر برای نمایش نتایج\n * Minimum characters to show results\n * @default 1\n */\n minChars?: number;\n\n /**\n * حداکثر ارتفاع منوی نتایج\n * Maximum height of results menu\n * @default \"400px\"\n */\n maxHeight?: string;\n\n /**\n * پیام هنگام خالی بودن نتایج\n * Message when no results found\n */\n emptyMessage?: string;\n\n /**\n * غیرفعال کردن keyboard navigation\n * Disable keyboard navigation\n */\n disableKeyboard?: boolean;\n\n /**\n * پاک کردن خودکار input پس از انتخاب\n * Clear input after selection\n */\n clearOnSelect?: boolean;\n\n /**\n * جهت نمایش (RTL/LTR)\n * Direction\n */\n dir?: \"rtl\" | \"ltr\";\n\n /**\n * فعالسازی infinite scroll\n * Enable infinite scroll\n * @default true\n */\n enableInfiniteScroll?: boolean;\n\n /**\n * تابع بارگذاری صفحه بعدی\n * Load more function\n */\n onLoadMore?: () => void | Promise<void>;\n\n /**\n * وضعیت بارگذاری صفحه بعدی\n * Loading more state\n */\n isLoadingMore?: boolean;\n\n /**\n * آیا صفحات بیشتری وجود دارد\n * Has more pages\n */\n hasMore?: boolean;\n\n /**\n * صفحه فعلی\n * Current page\n */\n currentPage?: number;\n}\n\n// Format followers count (K, M, B)\nconst formatFollowers = (count: number): string => {\n if (count >= 1000000000) {\n return (count / 1000000000).toFixed(1).replace(/\\.0$/, \"\") + \"B\";\n }\n if (count >= 1000000) {\n return (count / 1000000).toFixed(1).replace(/\\.0$/, \"\") + \"M\";\n }\n if (count >= 1000) {\n return (count / 1000).toFixed(1).replace(/\\.0$/, \"\") + \"K\";\n }\n return count.toString();\n};\n\n// Convert numbers to Persian/Arabic\nconst convertToLocalNumbers = (text: string, locale: \"fa\" | \"ar\" | \"en\") => {\n if (locale === \"fa\" || locale === \"ar\") {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"];\n return text.replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n }\n return text;\n};\n\nconst UserAutocomplete = React.forwardRef<HTMLInputElement, UserAutocompleteProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = \"\",\n onValueChange,\n users = [],\n isLoading = false,\n onSearch,\n onSelect,\n debounceDelay = 300,\n minChars = 1,\n maxHeight = \"400px\",\n emptyMessage = \"کاربری یافت نشد\",\n disableKeyboard = false,\n clearOnSelect = false,\n dir = \"rtl\",\n enableInfiniteScroll = true,\n onLoadMore,\n isLoadingMore = false,\n hasMore = false,\n currentPage = 1,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [showResults, setShowResults] = React.useState(false);\n const [activeUserIndex, setActiveUserIndex] = React.useState(-1);\n const [page, setPage] = React.useState(currentPage);\n const [position, setPosition] = React.useState<{ top: number; left: number; width: number } | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const resultsRef = React.useRef<HTMLDivElement>(null);\n const debounceTimerRef = React.useRef<NodeJS.Timeout | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const observerRef = React.useRef<IntersectionObserver | null>(null);\n const lastItemRef = React.useRef<HTMLDivElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n const locale = dir === \"rtl\" ? \"fa\" : \"en\";\n\n // Debounced search\n React.useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (value.length >= minChars && onSearch) {\n debounceTimerRef.current = setTimeout(() => {\n setPage(1);\n onSearch(value, 1);\n }, debounceDelay);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [value, minChars, onSearch, debounceDelay]);\n\n // Update position when results should be shown\n React.useLayoutEffect(() => {\n const shouldShow = showResults && value.length >= minChars;\n if (shouldShow && inputRef.current) {\n const updatePosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }\n };\n\n updatePosition();\n\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n } else if (!shouldShow) {\n setPosition(null);\n }\n }, [showResults, value.length, minChars]);\n\n // Click outside handler\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n resultsRef.current &&\n !resultsRef.current.contains(event.target as Node)\n ) {\n setShowResults(false);\n setActiveUserIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (activeUserIndex >= 0 && resultsRef.current) {\n const activeElement = resultsRef.current.children[activeUserIndex] as HTMLElement;\n if (activeElement) {\n activeElement.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n }\n }\n }, [activeUserIndex]);\n\n // Infinite scroll observer\n React.useEffect(() => {\n if (!enableInfiniteScroll || !hasMore || isLoadingMore) return;\n\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore && !isLoadingMore && onLoadMore) {\n const nextPage = page + 1;\n setPage(nextPage);\n if (onSearch) {\n onSearch(value, nextPage);\n }\n onLoadMore();\n }\n },\n { threshold: 0.5 }\n );\n\n if (lastItemRef.current) {\n observerRef.current.observe(lastItemRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [enableInfiniteScroll, hasMore, isLoadingMore, onLoadMore, page, value, onSearch]);\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n\n if (newValue.length >= minChars) {\n setShowResults(true);\n setPage(1);\n } else {\n setShowResults(false);\n }\n setActiveUserIndex(-1);\n };\n\n const handleUserClick = (user: UserItem) => {\n if (clearOnSelect) {\n handleValueChange(\"\");\n } else {\n handleValueChange(user.name);\n }\n setShowResults(false);\n setActiveUserIndex(-1);\n onSelect?.(user);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!disableKeyboard && showResults && users.length > 0) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setActiveUserIndex((prev) => (prev < users.length - 1 ? prev + 1 : prev));\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setActiveUserIndex((prev) => (prev > 0 ? prev - 1 : -1));\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeUserIndex >= 0 && activeUserIndex < users.length) {\n handleUserClick(users[activeUserIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setShowResults(false);\n setActiveUserIndex(-1);\n break;\n }\n }\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (value.length >= minChars && users.length > 0) {\n setShowResults(true);\n }\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n };\n\n const shouldShowResults = showResults && value.length >= minChars;\n\n // Calculate position for portal - use position state or calculate on the fly\n const portalPosition = React.useMemo((): React.CSSProperties => {\n if (position) {\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n };\n }\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n return {\n top: `${rect.bottom + window.scrollY + 4}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`,\n };\n }\n // Fallback position\n return {\n top: '0px',\n left: '0px',\n width: '100%',\n };\n }, [position]);\n\n return (\n <>\n <div ref={containerRef} className=\"relative w-full\">\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(className)}\n dir={dir}\n {...props}\n />\n {isLoading && !isLoadingMore && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2\",\n dir === \"rtl\" ? \"left-3\" : \"right-3\"\n )}\n >\n <Spinner className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n </div>\n {shouldShowResults && typeof document !== \"undefined\" && (\n createPortal(\n <div\n ref={resultsRef}\n className=\"absolute bg-background border border-border rounded-lg shadow-lg overflow-y-auto z-50\"\n style={{\n ...portalPosition,\n maxHeight,\n }}\n dir={dir}\n >\n {isLoading && !isLoadingMore ? (\n <div className=\"p-4 flex items-center justify-center\">\n <Spinner className=\"h-5 w-5\" />\n </div>\n ) : users.length > 0 ? (\n <>\n {users.map((user, index) => (\n <button\n key={user.id}\n onClick={() => handleUserClick(user)}\n className={cn(\n \"w-full text-start p-3 hover:bg-accent transition-colors\",\n index === activeUserIndex && \"bg-accent\",\n index !== users.length - 1 && \"border-b border-border\"\n )}\n type=\"button\"\n >\n <div className=\"flex items-center gap-3\">\n {/* Avatar */}\n <div className=\"flex-shrink-0\">\n <Avatar className=\"w-12 h-12\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback>\n {user.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </div>\n\n {/* User Info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-foreground truncate\">\n {user.name}\n </div>\n <div className=\"text-sm text-muted-foreground truncate\">\n @{user.username}\n </div>\n </div>\n\n {/* Followers Count */}\n <div\n className={cn(\n \"flex-shrink-0\",\n dir === \"rtl\" ? \"text-left\" : \"text-right\"\n )}\n >\n <div className=\"text-sm font-medium text-foreground\">\n {convertToLocalNumbers(formatFollowers(user.followers), locale)}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {locale === \"fa\" ? \"دنبالکننده\" : \"followers\"}\n </div>\n </div>\n </div>\n </button>\n ))}\n\n {/* Infinite scroll trigger */}\n {enableInfiniteScroll && hasMore && (\n <div\n ref={lastItemRef}\n className=\"p-3 flex items-center justify-center\"\n >\n {isLoadingMore ? (\n <Spinner className=\"h-5 w-5\" />\n ) : (\n <div className=\"h-1\" />\n )}\n </div>\n )}\n </>\n ) : (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </div>\n )}\n </div>,\n document.body\n )\n )}\n </>\n );\n }\n);\n\nUserAutocomplete.displayName = \"UserAutocomplete\";\n\nexport { UserAutocomplete };\n\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\nimport { cn } from \"@/lib/utils\"\n\nfunction AspectRatio({\n className,\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return (\n <AspectRatioPrimitive.Root\n data-slot=\"aspect-ratio\"\n className={cn(\"relative w-full\", className)}\n {...props}\n />\n )\n}\n\nexport { AspectRatio }\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full font-normal whitespace-nowrap\",\n {\n variants: {\n variant: {\n default:\n \"bg-surface-75 text-foreground-light border border-strong\",\n secondary:\n \"bg-secondary bg-opacity-10 hover:bg-secondary/80 border-transparent text-secondary-foreground\",\n success:\n \"bg-brand bg-opacity-10 text-brand-600 border border-brand-500\",\n warning:\n \"bg-warning bg-opacity-10 text-warning border border-warning-500\",\n destructive:\n \"bg-destructive bg-opacity-10 text-destructive-600 border border-destructive-500\",\n brand:\n \"bg-brand bg-opacity-10 text-brand-600 border border-brand-500\",\n outline: \"bg-transparent text border border-foreground-muted\",\n },\n size: {\n tiny: \"px-1.5 py-[3px] text-[10px] leading-none tracking-wide uppercase\",\n small: \"px-2 py-0.5 text-xs\",\n large: \"px-3 py-0.5 text-sm\",\n },\n dot: {\n true: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"small\",\n },\n }\n)\n\nconst dotVariants = cva(\n \"h-2 w-2 rounded-full\",\n {\n variants: {\n position: {\n start: \"-ms-0.5 me-1.5\",\n end: \"ms-1.5 -me-0.5\",\n },\n },\n defaultVariants: {\n position: \"start\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean\n dotPosition?: \"start\" | \"end\"\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"small\",\n dot = false,\n dotPosition = \"start\",\n children,\n ...props\n}: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && dotPosition === \"start\" && (\n <svg className={cn(dotVariants({ position: \"start\" }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n {children}\n {dot && dotPosition === \"end\" && (\n <svg className={cn(dotVariants({ position: \"end\" }))} fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n )}\n </div>\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({\n className,\n dir,\n ...props\n}: React.ComponentProps<\"ol\">) {\n const direction = dir ?? \"rtl\"\n\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n dir={direction}\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5 list-none ps-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-foreground font-normal\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n\n","import { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-e-md has-[>[data-slot=button-group]]:gap-2\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-s-none [&>*:not(:first-child)]:border-s-0 [&>*:not(:last-child)]:rounded-e-none\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(\n \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface SeparatorProps extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {\n children?: React.ReactNode\n}\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, children, ...props },\n ref\n ) => {\n // If there's no children, render the default separator\n if (!children) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n }\n\n // If there are children (text), render separator with text\n if (orientation === \"horizontal\") {\n return (\n <div\n ref={ref}\n className={cn(\"relative flex items-center w-full\", className)}\n {...props}\n >\n <div className=\"flex-1 h-[1px] bg-border\" />\n <span className=\"px-3 text-sm text-muted-foreground whitespace-nowrap\">\n {children}\n </span>\n <div className=\"flex-1 h-[1px] bg-border\" />\n </div>\n )\n }\n\n // For vertical orientation with text (less common)\n return (\n <div\n ref={ref}\n className={cn(\"relative flex flex-col items-center h-full\", className)}\n {...props}\n >\n <div className=\"flex-1 w-[1px] bg-border\" />\n <span className=\"py-3 text-sm text-muted-foreground\">\n {children}\n </span>\n <div className=\"flex-1 w-[1px] bg-border\" />\n </div>\n )\n }\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\nimport { DayPicker as PersianDayPicker } from \"react-day-picker/persian\"\nimport { enUS } from \"date-fns/locale\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = {\n usePersianCalendar?: boolean\n className?: string\n classNames?: any\n showOutsideDays?: boolean\n} & (\n | React.ComponentProps<typeof DayPicker>\n | React.ComponentProps<typeof PersianDayPicker>\n)\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n usePersianCalendar = false,\n ...props\n}: CalendarProps) {\n const PickerComponent = usePersianCalendar ? PersianDayPicker : DayPicker\n\n // Formatters for English numbers in Gregorian calendar\n const englishFormatters = !usePersianCalendar ? {\n formatDay: (date: Date) => {\n // Force English numbers using Intl.NumberFormat with en-US locale\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n const dayNumber = date.getDate()\n return new Intl.NumberFormat('en-US', { useGrouping: false }).format(dayNumber)\n },\n formatWeekdayName: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n return new Intl.DateTimeFormat('en-US', { weekday: 'short' }).format(date)\n },\n formatMonthCaption: (date: Date) => {\n if (!date || !(date instanceof Date)) {\n return \"\"\n }\n return new Intl.DateTimeFormat('en-US', { month: 'long', year: 'numeric' }).format(date)\n }\n } : undefined\n\n\n return (\n <PickerComponent\n dir={usePersianCalendar ? \"rtl\" : \"ltr\"}\n locale={usePersianCalendar ? undefined : enUS}\n formatters={englishFormatters}\n showOutsideDays={showOutsideDays}\n className={cn(\"p-6\", usePersianCalendar ? \"\" : \"font-sans\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-y-4 sm:gap-y-0\",\n month: \"gap-y-4 mx-2\",\n month_caption: \"flex justify-center pt-1 relative items-center h-7\",\n caption_label: \"text-sm font-medium truncate\",\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute start-2 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute end-2 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 border-0\"\n ),\n month_grid: \"mt-4\",\n weekdays: \"flex flex-row\",\n weekday: \"text-muted-foreground rounded-md w-9 h-9 font-normal text-[0.8rem] flex items-center justify-center\",\n week: \"flex w-full mt-2\",\n day: cn(\n \"h-9 w-9 text-center text-sm p-0 relative\",\n \"focus-within:relative focus-within:z-20\",\n ),\n day_button: cn(\n \"w-full cursor-pointer h-full p-0 font-normal rounded-md\",\n \" aria-selected:opacity-100\",\n \"border-0 shadow-none ring-0 outline-none\",\n \"flex items-center justify-center\",\n \"text-foreground\" // رنگ روشنتر برای اعداد\n ),\n range_start: \"day-range-start\",\n range_end: \"day-range-end\",\n selected: \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-primary/20 aria-selected:text-foreground rounded-none\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) => {\n // برای RTL (تقویم شمسی) فلشها معکوس میشوند\n if (usePersianCalendar) {\n if (orientation === \"left\") {\n return <ChevronRight className=\"h-4 w-4\" />\n }\n return <ChevronLeft className=\"h-4 w-4\" />\n }\n // برای LTR (تقویم میلادی) فلشها طبیعی هستند\n if (orientation === \"left\") {\n return <ChevronLeft className=\"h-4 w-4\" />\n }\n return <ChevronRight className=\"h-4 w-4\" />\n },\n }}\n {...(props as any)}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden rounded-lg border bg-surface-100 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 py-4 px-6 border-b\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-xs font-mono uppercase\", className)} {...props} />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-foreground-muted\", className)} {...props} />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"py-4 px-6 border-b last:border-none\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center py-4 px-6\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype Direction = \"ltr\" | \"rtl\"\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n direction: Direction\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = React.useState<Direction>(\"rtl\")\n\n React.useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === \"undefined\") return \"rtl\"\n const htmlDir = document.documentElement.getAttribute(\"dir\")\n if (htmlDir === \"ltr\" || htmlDir === \"rtl\") {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === \"rtl\" ? \"rtl\" : \"ltr\"\n }\n\n setDirection(getDirection())\n\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"dir\"],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const documentDirection = useDocumentDirection()\n const direction = (dir as Direction) ?? documentDirection\n\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n direction: direction,\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n if (direction === \"rtl\") {\n scrollNext()\n } else {\n scrollPrev()\n }\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n if (direction === \"rtl\") {\n scrollPrev()\n } else {\n scrollNext()\n }\n }\n },\n [scrollPrev, scrollNext, direction]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n direction,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n dir={direction}\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ms-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"ps-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev, direction } = useCarousel()\n const isRTL = direction === \"rtl\"\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -translate-y-1/2\"\n : \"start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90\",\n orientation === \"horizontal\" && \"-start-12\",\n orientation === \"vertical\" && \"-top-12\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n {isRTL ? <ArrowRight /> : <ArrowLeft />}\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext, direction } = useCarousel()\n const isRTL = direction === \"rtl\"\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -translate-y-1/2\"\n : \"start-1/2 -translate-x-1/2 rtl:translate-x-1/2 rotate-90\",\n orientation === \"horizontal\" && \"-end-12\",\n orientation === \"vertical\" && \"-bottom-12\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n {isRTL ? <ArrowLeft /> : <ArrowRight />}\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-control bg-control data-[state=checked]:bg-brand data-[state=checked]:text-foreground-contrast data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n\n","\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-default bg-dialog text-foreground p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute end-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-start\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-foreground\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-foreground-light\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Card, CardContent } from \"./card\"\nimport { Badge } from \"./badge\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface CommentTag {\n title: string\n probability: number\n color: string\n}\n\nexport interface CommentCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * The comment text content\n */\n text: string\n \n /**\n * Array of analysis tags with probability and color\n */\n tags: CommentTag[]\n \n /**\n * Sentiment of the comment\n */\n sentiment: \"positive\" | \"negative\" | \"neutral\"\n \n /**\n * Optional id for the comment\n */\n id?: number | string\n \n /**\n * Show probability in Persian digits\n */\n usePersianDigits?: boolean\n}\n\nconst CommentCard = React.forwardRef<HTMLDivElement, CommentCardProps>(\n ({ className, text, tags, sentiment, id, usePersianDigits = true, ...props }, ref) => {\n const getSentimentColor = (sentiment: string) => {\n switch (sentiment) {\n case \"positive\":\n return \"#22c55e\"\n case \"negative\":\n return \"#ef4444\"\n case \"neutral\":\n return \"#6b7280\"\n default:\n return \"#6b7280\"\n }\n }\n\n const getSentimentLabel = (sentiment: string) => {\n switch (sentiment) {\n case \"positive\":\n return \"مثبت\"\n case \"negative\":\n return \"منفی\"\n case \"neutral\":\n return \"خنثی\"\n default:\n return \"خنثی\"\n }\n }\n\n const formatNumber = (num: number): string => {\n if (usePersianDigits) {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"]\n return num.toString().replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n }\n return num.toString()\n }\n\n return (\n <Card ref={ref} className={cn(\"h-full relative\", className)} {...props}>\n <CardContent className=\"p-4 pb-8\">\n {/* Comment Text */}\n <div className=\"mb-4\" dir=\"rtl\">\n <span className=\"text-sm leading-relaxed text-foreground\">\n {text}\n </span>\n </div>\n\n {/* Tags */}\n <div className=\"flex flex-row-reverse flex-wrap gap-2 mb-3\">\n {tags.map((tag, index) => (\n <Badge\n key={index}\n variant=\"secondary\"\n className=\"text-xs font-medium\"\n style={{\n backgroundColor: `${tag.color}15`,\n borderColor: tag.color,\n color: tag.color,\n border: `1px solid ${tag.color}30`,\n }}\n >\n <span className=\"text-xs\" dir=\"rtl\">\n {tag.title} ({formatNumber(tag.probability)}%)\n </span>\n </Badge>\n ))}\n </div>\n\n {/* Sentiment Indicator - Fixed to bottom right */}\n <div className=\"absolute bottom-3 end-3\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: getSentimentColor(sentiment) }}\n title={getSentimentLabel(sentiment)}\n />\n </div>\n </CardContent>\n </Card>\n )\n }\n)\n\nCommentCard.displayName = \"CommentCard\"\n\nexport { CommentCard }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto rtl:rotate-180\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n\n","\"use client\"\n\nimport { format, subDays, subMonths, subYears } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\nimport { DateRange } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\"\n\nexport interface DatePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when date range changes\n */\n onChange?: (date: DateRange | undefined) => void\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Placeholder text\n */\n placeholder?: string\n /**\n * Additional className for the button\n */\n className?: string\n /**\n * Disabled state\n */\n disabled?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Show preset date range buttons\n */\n showPresets?: boolean\n /**\n * Selection mode: 'single' for single date, 'range' for date range\n */\n mode?: 'single' | 'range'\n}\n\ninterface PresetRange {\n label: string\n range: DateRange\n}\n\nfunction formatDateRange(\n range: DateRange | undefined,\n usePersianCalendar: boolean\n): string {\n if (!range) return \"\"\n\n if (usePersianCalendar) {\n // Format Persian date\n const fromDate = range.from\n ? new Intl.DateTimeFormat(\"fa-IR\").format(range.from)\n : \"\"\n const toDate = range.to\n ? new Intl.DateTimeFormat(\"fa-IR\").format(range.to)\n : \"\"\n\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && \n range.from.getTime() === range.to.getTime()\n\n if (fromDate && toDate && !isSameDate) {\n return `${fromDate} - ${toDate}`\n }\n if (fromDate) {\n return fromDate\n }\n return \"\"\n } else {\n // Format Gregorian date\n if (range.from) {\n // Check if from and to are the same date (single date selection)\n const isSameDate = range.from && range.to && \n range.from.getTime() === range.to.getTime()\n\n if (range.to && !isSameDate) {\n return `${format(range.from, \"LLL dd, y\")} - ${format(\n range.to,\n \"LLL dd, y\"\n )}`\n } else {\n return format(range.from, \"LLL dd, y\")\n }\n }\n return \"\"\n }\n}\n\nexport function DatePicker({\n value,\n onChange,\n usePersianCalendar = false,\n placeholder,\n className,\n disabled = false,\n numberOfMonths = 2,\n showPresets = false,\n mode = 'range',\n}: DatePickerProps) {\n const displayText = formatDateRange(value, usePersianCalendar)\n const defaultPlaceholder = usePersianCalendar \n ? (mode === 'single' ? \"انتخاب تاریخ\" : \"انتخاب بازه تاریخ\")\n : (mode === 'single' ? \"Pick a date\" : \"Pick a date range\")\n\n // Generate preset ranges\n const getPresetRanges = (): PresetRange[] => {\n const today = new Date()\n \n if (usePersianCalendar) {\n return [\n {\n label: \"امروز\",\n range: { from: today, to: today }\n },\n {\n label: \"هفته اخیر\",\n range: { from: subDays(today, 6), to: today }\n },\n {\n label: \"ماه اخیر\",\n range: { from: subDays(today, 29), to: today }\n },\n {\n label: \"دو هفته اخیر\",\n range: { from: subDays(today, 13), to: today }\n },\n {\n label: \"شش ماه اخیر\",\n range: { from: subMonths(today, 6), to: today }\n },\n {\n label: \"سال گذشته\",\n range: { from: subYears(today, 1), to: today }\n }\n ]\n } else {\n return [\n {\n label: \"Today\",\n range: { from: today, to: today }\n },\n {\n label: \"Last week\",\n range: { from: subDays(today, 6), to: today }\n },\n {\n label: \"Last month\",\n range: { from: subDays(today, 29), to: today }\n },\n {\n label: \"Last 2 weeks\",\n range: { from: subDays(today, 13), to: today }\n },\n {\n label: \"Last 6 months\",\n range: { from: subMonths(today, 6), to: today }\n },\n {\n label: \"Last year\",\n range: { from: subYears(today, 1), to: today }\n }\n ]\n }\n }\n\n const presetRanges = showPresets ? getPresetRanges() : []\n\n const handlePresetClick = (range: DateRange) => {\n onChange?.(range)\n }\n\n return (\n <div className={cn(\"grid gap-2\", className)}>\n <Popover>\n <PopoverTrigger asChild>\n <Button\n id=\"date\"\n variant={\"outline\"}\n className={cn(\n \"w-full min-w-[220px] justify-start text-start font-normal\",\n !value && \"text-muted-foreground\"\n )}\n disabled={disabled}\n iconLeft={<CalendarIcon className=\"h-4 w-4\" />}\n >\n {displayText || placeholder || defaultPlaceholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent \n className=\"w-auto p-0\" \n align=\"start\"\n dir={usePersianCalendar ? \"rtl\" : \"ltr\"}\n >\n <div className=\"flex\">\n {mode === 'range' ? (\n <Calendar\n initialFocus\n mode=\"range\"\n defaultMonth={value?.from}\n selected={value}\n onSelect={onChange}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n ) : (\n <Calendar\n initialFocus\n mode=\"single\"\n defaultMonth={value?.from}\n selected={value?.from}\n onSelect={(date) => onChange?.(date ? { from: date, to: date } : undefined)}\n numberOfMonths={numberOfMonths}\n usePersianCalendar={usePersianCalendar}\n />\n )}\n {showPresets && mode === 'range' && (\n <div className={cn(\n \"flex flex-col gap-2 border-border p-3 mt-12\",\n usePersianCalendar ? \"border-e\" : \"border-s\"\n )}>\n {presetRanges.map((preset, index) => (\n <Button\n key={index}\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"justify-start text-start font-normal h-auto py-2 px-3 whitespace-nowrap\",\n \"hover:bg-accent hover:text-accent-foreground\"\n )}\n onClick={() => handlePresetClick(preset.range)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-overlay bg-overlay p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CalendarIcon, ChevronDownIcon } from \"lucide-react\"\nimport { type DateRange } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\"\nimport { Label } from \"./label\"\nimport { formatPersianDateRange } from \"../../lib/jalali-utils\"\n\nexport interface DateRangePickerProps {\n /**\n * The selected date range\n */\n value?: DateRange\n /**\n * Callback when the date range changes\n */\n onChange?: (range: DateRange | undefined) => void\n /**\n * Label for the date range picker\n */\n label?: string\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string\n /**\n * Use Persian/Jalali calendar\n */\n usePersianCalendar?: boolean\n /**\n * Number of months to display\n */\n numberOfMonths?: number\n /**\n * Minimum date that can be selected\n */\n minDate?: Date\n /**\n * Maximum date that can be selected\n */\n maxDate?: Date\n /**\n * Additional class name for the trigger button\n */\n className?: string\n /**\n * Disable the date range picker\n */\n disabled?: boolean\n /**\n * Show dropdown for year/month selection\n */\n captionLayout?: \"label\" | \"dropdown\" | \"dropdown-months\" | \"dropdown-years\"\n /**\n * From year for dropdown (when captionLayout includes dropdown)\n */\n fromYear?: number\n /**\n * To year for dropdown (when captionLayout includes dropdown)\n */\n toYear?: number\n}\n\nexport function DateRangePicker({\n value,\n onChange,\n label,\n placeholder = \"انتخاب بازه تاریخ\",\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = \"label\",\n fromYear,\n toYear,\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString(\"fa-IR\")} - ${range.to.toLocaleDateString(\"fa-IR\")}`\n }\n\n return range.from.toLocaleDateString(\"fa-IR\")\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor=\"date-range\" className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"date-range\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"justify-between font-normal min-w-64\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n {formatDateRange(value)}\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-lg border shadow-sm\"\n />\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\n/**\n * Simplified version without label (inline usage)\n */\nexport function DateRangePickerInline({\n value,\n onChange,\n placeholder = \"انتخاب تاریخ\",\n usePersianCalendar = false,\n numberOfMonths = 2,\n minDate,\n maxDate,\n className,\n disabled = false,\n captionLayout = \"label\",\n fromYear,\n toYear,\n}: Omit<DateRangePickerProps, \"label\">) {\n const [open, setOpen] = React.useState(false)\n\n const formatDateRange = (range: DateRange | undefined) => {\n if (!range?.from) return placeholder\n\n if (usePersianCalendar && range.from && range.to) {\n return formatPersianDateRange(range.from, range.to)\n }\n\n if (range.from && range.to) {\n return `${range.from.toLocaleDateString(\"fa-IR\")} - ${range.to.toLocaleDateString(\"fa-IR\")}`\n }\n\n return range.from.toLocaleDateString(\"fa-IR\")\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"justify-between font-normal min-w-64\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n {formatDateRange(value)}\n <CalendarIcon className=\"size-4 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={(range) => {\n onChange?.(range)\n // Auto close when both dates are selected\n if (range?.from && range?.to) {\n setOpen(false)\n }\n }}\n numberOfMonths={numberOfMonths}\n defaultMonth={value?.from}\n fromDate={minDate}\n toDate={maxDate}\n usePersianCalendar={usePersianCalendar}\n captionLayout={captionLayout}\n fromYear={fromYear}\n toYear={toYear}\n className=\"rounded-lg border shadow-sm\"\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-start\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto size-4 rtl:rotate-180\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex min-h-[400px] flex-col items-center justify-center rounded-md border border-dashed p-8 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyIcon({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-icon\"\n className={cn(\n \"text-muted-foreground mx-auto flex size-12 items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return (\n <h3\n data-slot=\"empty-title\"\n className={cn(\"mt-4 text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"empty-description\"\n className={cn(\"text-muted-foreground mt-2 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport { Empty, EmptyIcon, EmptyTitle, EmptyDescription }\n\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input, InputProps } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\ntype InputGroupContextValue = {\n dir?: \"ltr\" | \"rtl\"\n}\n\nconst InputGroupContext = React.createContext<InputGroupContextValue>({})\n\nfunction useInputGroup() {\n return React.useContext(InputGroupContext)\n}\n\ninterface InputGroupProps extends React.ComponentProps<\"div\"> {\n /**\n * Direction of the input group.\n * Use \"ltr\" for URL, email, tel, or other LTR-only content.\n * @default undefined (inherits from parent)\n */\n dir?: \"ltr\" | \"rtl\"\n}\n\nfunction InputGroup({ className, dir, ...props }: InputGroupProps) {\n const contextValue = React.useMemo(() => ({ dir }), [dir])\n \n return (\n <InputGroupContext.Provider value={contextValue}>\n <div\n data-slot=\"input-group\"\n role=\"group\"\n dir={dir}\n className={cn(\n // Base styles - aligned with Input component\n \"group/input-group relative flex w-full items-center rounded-md border border-control bg-foreground/[.026] transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:ps-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pe-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state - aligned with Input component\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-background-control has-[[data-slot=input-group-control]:focus-visible]:ring-offset-2 has-[[data-slot=input-group-control]:focus-visible]:ring-offset-foreground-muted\",\n\n // Error state - aligned with Input component\n \"has-[[data-slot][aria-invalid=true]]:bg-destructive-200 has-[[data-slot][aria-invalid=true]]:border-destructive-400\",\n\n className\n )}\n {...props}\n />\n </InputGroupContext.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first ps-3 has-[>button]:[margin-inline-start:-0.45rem] has-[>kbd]:[margin-inline-start:-0.35rem]\",\n \"inline-end\":\n \"order-last pe-3 has-[>button]:[margin-inline-end:-0.45rem] has-[>kbd]:[margin-inline-end:-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n type,\n size,\n dir: dirProp,\n ...props\n}: InputProps) {\n const { dir: contextDir } = useInputGroup()\n \n // URL, email, tel, number inputs should be LTR (unless explicitly overridden)\n const isLTRType = type === \"url\" || type === \"email\" || type === \"tel\" || type === \"number\" || props.inputMode === \"numeric\"\n \n // Priority: explicit dir prop > context dir > auto-detect based on type\n const dir = dirProp ?? contextDir ?? (isLTRType ? \"ltr\" : undefined)\n \n return (\n <Input\n data-slot=\"input-group-control\"\n type={type}\n size={size}\n dir={dir}\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n // For LTR inputs inside RTL pages, align text to left\n dir === \"ltr\" && \"text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Base styles - aligned with Input component\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-control bg-foreground/[.026] px-3 py-2 text-base text-foreground placeholder:text-foreground-muted\",\n // Focus state - aligned with Input component\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:text-foreground-muted\",\n // Error state - aligned with Input component\n \"aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive\",\n // Responsive\n \"md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n dir = \"ltr\",\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <div dir={dir ?? \"ltr\"}>\n <OTPInput\n data-slot=\"input-otp\"\n dir={dir ?? \"ltr\"}\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n dir=\"ltr\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-e border-y text-sm shadow-xs transition-all outline-none first:rounded-s-md first:border-s last:rounded-e-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-separator\"\n role=\"separator\"\n dir=\"ltr\"\n {...props}\n >\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport ReactPlayer from \"react-player\"\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 // 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 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.file 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]\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\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 />\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\" style={{ aspectRatio: ratio }}>\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\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 />\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]\">\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10 pointer-events-none\" />\n <div className=\"w-full h-full group-hover:scale-110 transition-transform duration-300\">\n <ReactPlayer\n url={item.url}\n width=\"100%\"\n height=\"100%\"\n controls\n playing={false}\n light\n />\n </div>\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\" style={{ aspectRatio: ratio }}>\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10 pointer-events-none\" />\n <div className=\"w-full h-full group-hover:scale-110 transition-transform duration-300\">\n <ReactPlayer\n url={item.url}\n width=\"100%\"\n height=\"100%\"\n controls\n playing={false}\n light\n />\n </div>\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]\">\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 {item.type === \"image\" ? (\n <>\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\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 />\n </>\n ) : (\n <>\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10 pointer-events-none\" />\n <div className=\"w-full h-full group-hover:scale-110 transition-transform duration-300\">\n <ReactPlayer\n url={item.url}\n width=\"100%\"\n height=\"100%\"\n controls\n playing={false}\n light\n />\n </div>\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 {item.type === \"image\" ? (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer\"\n style={{ aspectRatio: getAspectRatio(item.aspectRatio || \"1:1\") }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10\" />\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 />\n </div>\n ) : (\n <div\n className=\"w-full relative overflow-hidden group cursor-pointer\"\n style={{ aspectRatio: getAspectRatio(item.aspectRatio || \"16:9\") }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10 pointer-events-none\" />\n <div className=\"w-full h-full group-hover:scale-110 transition-transform duration-300\">\n <ReactPlayer\n url={item.url}\n width=\"100%\"\n height=\"100%\"\n controls\n playing={false}\n light\n />\n </div>\n </div>\n )}\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 )} dir=\"rtl\">\n <p \n ref={textRef}\n className={cn(\n \"text-sm leading-relaxed text-right\",\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 ...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\")}\n dir={isVertical ? \"ltr\" : \"rtl\"}\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 <InstagramPostMedia\n media={media}\n mediaType={mediaType}\n variant={variant || \"vertical\"}\n placeholderText={placeholderText}\n />\n <InstagramPostStats\n stats={stats}\n numberFormat={numberFormat}\n showLikes={showLikes}\n showComments={showComments}\n showViews={showViews}\n showShares={showShares}\n postType={postType}\n />\n {showCaption && <InstagramPostCaption caption={caption} variant={variant || \"vertical\"} />}\n <InstagramPostTime\n publishTime={publishTime}\n timeFormat={timeFormat}\n />\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 <InstagramPostTime\n publishTime={publishTime}\n timeFormat={timeFormat}\n />\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 { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pe-2 ps-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ms-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:ps-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto h-4 w-4 rtl:rotate-180\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ExternalLink, Info } from \"lucide-react\"\nimport { format } from \"date-fns\"\nimport { Card } from \"./card\"\nimport { Skeleton } from \"./skeleton\"\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\nimport { formatJalaliDate, toPersianDigits } from \"../../lib/jalali-utils\"\n\ninterface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Show loading state\n */\n isLoading?: boolean\n}\n\ninterface MetricCardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Optional link URL\n */\n href?: string\n}\n\ninterface MetricCardLabelProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * Tooltip text to display on hover\n */\n tooltip?: string\n /**\n * Optional icon to display before the label text\n */\n icon?: React.ReactNode\n}\n\ninterface MetricCardDifferentialProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Variant determines color: positive (green) or negative (red)\n */\n variant?: \"positive\" | \"negative\"\n}\n\ninterface MetricCardSparklineProps {\n /**\n * Array of data points for the sparkline\n */\n data: Array<{ value: number; timestamp: string }>\n /**\n * Key to use for the value in data objects\n */\n dataKey: string\n /**\n * Use Persian calendar for date formatting\n */\n usePersianCalendar?: boolean\n /**\n * Additional className\n */\n className?: string\n}\n\nconst MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n ({ className, isLoading, children, ...props }, ref) => {\n if (isLoading) {\n return (\n <Card\n ref={ref}\n className={cn(\"py-4 space-y-3\", className)}\n {...props}\n >\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-8 w-16\" />\n <Skeleton className=\"h-12 w-full\" />\n </Card>\n )\n }\n\n return (\n <Card\n ref={ref}\n className={cn(\"py-4 space-y-3\", className)}\n {...props}\n >\n {children}\n </Card>\n )\n }\n)\nMetricCard.displayName = \"MetricCard\"\n\nconst MetricCardHeader = React.forwardRef<HTMLDivElement, MetricCardHeaderProps>(\n ({ className, href, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex px-4 items-center justify-between gap-2\", className)}\n {...props}\n >\n {children}\n {href && (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground-lighter hover:text-foreground transition-colors\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n )}\n </div>\n )\n }\n)\nMetricCardHeader.displayName = \"MetricCardHeader\"\n\nconst MetricCardLabel = React.forwardRef<HTMLHeadingElement, MetricCardLabelProps>(\n ({ className, tooltip, icon, children, ...props }, ref) => {\n const label = (\n <h3\n ref={ref}\n className={cn(\n \"text-xs font-normal text-foreground-light uppercase tracking-wide\",\n className\n )}\n {...props}\n >\n <span className=\"flex items-center gap-1.5\">\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <span>{children}</span>\n </span>\n </h3>\n )\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1.5 cursor-help\">\n {label}\n <Info className=\"h-3.5 w-3.5 text-foreground-lighter\" />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n }\n\n return label\n }\n)\nMetricCardLabel.displayName = \"MetricCardLabel\"\n\nconst MetricCardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex px-4 items-baseline gap-3\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMetricCardContent.displayName = \"MetricCardContent\"\n\nconst MetricCardValue = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"text-3xl font-semibold tabular-nums\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMetricCardValue.displayName = \"MetricCardValue\"\n\nconst MetricCardDifferential = React.forwardRef<HTMLDivElement, MetricCardDifferentialProps>(\n ({ className, variant = \"positive\", children, ...props }, ref) => {\n // Parse children to extract sign and move it to the left\n const childrenString = typeof children === 'string' ? children : String(children)\n \n // Match sign at the beginning or end of the string\n const signMatch = childrenString.match(/^([+\\-])|([+\\-])$/)\n let sign = ''\n let value = childrenString\n \n if (signMatch) {\n sign = signMatch[1] || signMatch[2] || ''\n // Remove sign from the value\n value = childrenString.replace(/^[+\\-]|[+\\-]$/, '').trim()\n }\n \n return (\n <div\n ref={ref}\n className={cn(\n \"text-sm font-medium tabular-nums flex items-center\",\n variant === \"positive\" ? \"text-brand-600\" : \"text-destructive-600\",\n className\n )}\n {...props}\n >\n <span>{value}</span>\n {sign && (\n <span className=\"inline-block\" dir=\"ltr\">\n {sign}\n </span>\n )}\n \n </div>\n )\n }\n)\nMetricCardDifferential.displayName = \"MetricCardDifferential\"\n\nconst MetricCardSparkline = React.forwardRef<HTMLDivElement, MetricCardSparklineProps>(\n ({ data, dataKey, usePersianCalendar = false, className }, _ref) => {\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null)\n const [tooltipPosition, setTooltipPosition] = React.useState({ x: 0, y: 0 })\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n if (!data || data.length === 0) return null\n\n // Calculate SVG path for sparkline\n const values = data.map((item) => item[dataKey as keyof typeof item] as number)\n const timestamps = data.map((item) => new Date(item.timestamp))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const range = max - min || 1\n\n const width = 400\n const height = 60\n\n // Create step chart path (horizontal then vertical)\n const points = values.map((value, index) => {\n const x = (index / (values.length - 1)) * width\n const y = height - ((value - min) / range) * height\n return { x, y, value, timestamp: timestamps[index] }\n })\n\n // For step chart, we don't need separate segments array\n // We'll use points directly and calculate segment position on hover\n\n // Build step path: move horizontally first, then vertically\n let pathData = `M ${points[0].x},${points[0].y}`\n for (let i = 1; i < points.length; i++) {\n const prevPoint = points[i - 1]\n const currentPoint = points[i]\n // Draw horizontal line to current x\n pathData += ` L ${currentPoint.x},${prevPoint.y}`\n // Draw vertical line to current y\n pathData += ` L ${currentPoint.x},${currentPoint.y}`\n }\n\n // Build area path for gradient fill\n let areaPath = pathData\n // Close the path by going to bottom right, then bottom left\n areaPath += ` L ${points[points.length - 1].x},${height}`\n areaPath += ` L ${points[0].x},${height}`\n areaPath += ` Z`\n\n // Check if trend is positive or negative\n const isPositive = values[values.length - 1] >= values[0]\n const gradientId = React.useId()\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current) return\n \n const rect = containerRef.current.getBoundingClientRect()\n const mouseX = e.clientX - rect.left\n const relativeX = (mouseX / rect.width) * width\n \n // Find which segment the mouse is over\n // In step chart, segment i is the horizontal line from points[i] to points[i+1] at height points[i].y\n let closestSegmentIndex = 0\n let minDistance = Infinity\n \n for (let i = 0; i < points.length - 1; i++) {\n const segmentCenterX = (points[i].x + points[i + 1].x) / 2\n const distance = Math.abs(segmentCenterX - relativeX)\n if (distance < minDistance) {\n minDistance = distance\n closestSegmentIndex = i\n }\n }\n \n setHoveredIndex(closestSegmentIndex)\n \n // Calculate tooltip position based on segment center\n const segmentCenterX = (points[closestSegmentIndex].x + points[closestSegmentIndex + 1].x) / 2\n const pointX = (segmentCenterX / width) * rect.width\n setTooltipPosition({ \n x: pointX, \n y: (points[closestSegmentIndex].y / height) * rect.height \n })\n }\n\n const handleMouseLeave = () => {\n setHoveredIndex(null)\n }\n\n // Format date based on calendar type (only date, no time)\n const formatDate = (date: Date): string => {\n if (usePersianCalendar) {\n // Format as Persian date: \"24 دی\" (only date, no time)\n const jalaliDate = formatJalaliDate(date, \"jD jMMMM\")\n return toPersianDigits(jalaliDate)\n } else {\n // Format as Gregorian date: \"Dec 24\" (only date, no time)\n return format(date, \"MMM d\")\n }\n }\n\n return (\n <div \n ref={containerRef}\n className={cn(\"relative w-full h-12\", className)}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className=\"overflow-visible\"\n >\n {/* Gradient definition */}\n <defs>\n <linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop \n offset=\"0%\" \n stopColor=\"currentColor\" \n stopOpacity=\"0.3\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n <stop \n offset=\"100%\" \n stopColor=\"currentColor\" \n stopOpacity=\"0\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n </linearGradient>\n </defs>\n\n {/* Area fill with gradient */}\n <path\n d={areaPath}\n fill={`url(#${gradientId})`}\n />\n \n {/* Step line */}\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"miter\"\n strokeLinecap=\"square\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n \n {/* Highlight hovered point */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <>\n {/* Vertical line indicator */}\n <line\n x1={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y1=\"0\"\n x2={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n y2={height}\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeDasharray=\"2,2\"\n className=\"text-foreground-lighter opacity-50\"\n />\n {/* Circle at the point - white with colored center */}\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"5\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n <circle\n cx={(points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2}\n cy={points[hoveredIndex].y}\n r=\"3\"\n className={cn(\n \"fill-current\",\n isPositive ? \"text-brand-600\" : \"text-destructive-600\"\n )}\n />\n </>\n )}\n </svg>\n \n {/* Tooltip */}\n {hoveredIndex !== null && hoveredIndex < points.length - 1 && (\n <div\n className=\"absolute z-50 pointer-events-none\"\n style={{\n left: `${tooltipPosition.x + 8}px`,\n top: `${tooltipPosition.y - 40}px`,\n }}\n >\n <div className=\"bg-background-surface-100 border border-border-default rounded-md shadow-lg px-2 py-1.5\">\n <div className=\"text-xs text-foreground-lighter\">\n {formatDate(points[hoveredIndex].timestamp)}\n </div>\n <div className=\"text-xs font-medium tabular-nums mt-0.5\">\n {points[hoveredIndex].value.toLocaleString(usePersianCalendar ? 'fa-IR' : 'en-US')}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nMetricCardSparkline.displayName = \"MetricCardSparkline\"\n\nexport {\n MetricCard,\n MetricCardHeader,\n MetricCardLabel,\n MetricCardContent,\n MetricCardValue,\n MetricCardDifferential,\n MetricCardSparkline,\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n\n","import * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NativeSelect({ className, ...props }: React.ComponentProps<\"select\">) {\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-50\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n className={cn(\n // Base styles - aligned with Input component\n \"flex h-9 w-full min-w-0 appearance-none rounded-md border border-control bg-foreground/[.026] px-3 py-2 pe-9 text-sm text-foreground\",\n // Placeholder and selection\n \"placeholder:text-foreground-muted selection:bg-primary selection:text-primary-foreground\",\n // Focus state - aligned with Input component\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted\",\n // Disabled state\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-foreground-muted\",\n // Error state - aligned with Input component\n \"aria-[invalid=true]:bg-destructive-200 aria-[invalid=true]:border-destructive-400 aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive\",\n // Transitions\n \"transition-[color,box-shadow]\",\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"pointer-events-none absolute top-1/2 end-3 size-4 -translate-y-1/2 text-foreground-muted select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n\n","import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn(\n \"group flex flex-1 list-none items-center justify-center gap-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn(\"relative\", className)}\n {...props}\n />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 start-0 w-full p-2 pe-2.5 md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full start-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n className\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\ntype Direction = \"ltr\" | \"rtl\"\n\nconst PaginationDirectionContext =\n React.createContext<Direction>(\"rtl\")\n\nfunction usePaginationDirection() {\n return React.useContext(PaginationDirectionContext)\n}\n\nfunction Pagination({\n className,\n dir,\n children,\n ...props\n}: React.ComponentProps<\"nav\">) {\n const resolvedDir = (dir as Direction) ?? \"rtl\"\n\n return (\n <PaginationDirectionContext.Provider value={resolvedDir}>\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n dir={resolvedDir}\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n >\n {children}\n </nav>\n </PaginationDirectionContext.Provider>\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n const dir = usePaginationDirection()\n\n return (\n <ul\n data-slot=\"pagination-content\"\n dir={dir}\n className={cn(\n \"flex flex-row items-center gap-1 list-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n dir,\n ...props\n}: PaginationLinkProps) {\n const contextDir = usePaginationDirection()\n const linkDir = dir ?? (contextDir === \"rtl\" ? \"rtl\" : \"ltr\")\n\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n dir={linkDir}\n className={cn(\n buttonVariants({\n variant: \"outline\",\n size,\n }),\n // Remove underline from links\n \"no-underline\",\n // Active state styling with green color\n isActive && [\n \"border-brand-500 bg-brand-100 text-brand-600\",\n \"dark:border-brand-600 dark:bg-brand-950 dark:text-brand-400\",\n \"pointer-events-none\",\n ],\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === \"rtl\"\n const label = isRTL ? \"قبلی\" : \"Previous\"\n // In RTL, previous uses ChevronRight (→). In LTR, previous uses ChevronLeft (←)\n const Icon = isRTL ? ChevronRightIcon : ChevronLeftIcon\n\n return (\n <PaginationLink\n aria-label={isRTL ? \"رفتن به صفحه قبلی\" : \"Go to previous page\"}\n size=\"default\"\n className={cn(\n \"gap-1 ps-2.5 pe-2.5 no-underline flex items-center\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">\n {label}\n </span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n const dir = usePaginationDirection()\n const isRTL = dir === \"rtl\"\n const label = isRTL ? \"بعدی\" : \"Next\"\n // In RTL, next uses ChevronLeft (←). In LTR, next uses ChevronRight (→)\n const Icon = isRTL ? ChevronLeftIcon : ChevronRightIcon\n\n return (\n <PaginationLink\n aria-label={isRTL ? \"رفتن به صفحه بعدی\" : \"Go to next page\"}\n size=\"default\"\n className={cn(\n \"gap-1 ps-2.5 pe-2.5 no-underline flex items-center\",\n className\n )}\n dir=\"ltr\"\n {...props}\n >\n {isRTL ? (\n <>\n <Icon className=\"size-4\" />\n <span className=\"hidden sm:inline no-underline\">\n {label}\n </span>\n </>\n ) : (\n <>\n <span className=\"hidden sm:inline no-underline\">{label}</span>\n <Icon className=\"size-4\" />\n </>\n )}\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n\n","import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"./pagination\"\n\nexport interface PaginationControlledProps {\n /**\n * شماره صفحه فعلی (شروع از 1)\n */\n currentPage: number\n /**\n * تعداد کل صفحات\n */\n totalPages: number\n /**\n * تابع callback برای تغییر صفحه\n */\n onPageChange: (page: number) => void\n /**\n * تعداد صفحات نمایش داده شده در هر طرف صفحه فعلی\n * @default 1\n */\n siblingCount?: number\n /**\n * نمایش دکمههای اول و آخر\n * @default false\n */\n showFirstLast?: boolean\n /**\n * نمایش دکمههای قبلی و بعدی\n * @default true\n */\n showPrevNext?: boolean\n /**\n * نمایش ellipsis برای صفحات مخفی\n * @default true\n */\n showEllipsis?: boolean\n /**\n * کلاسهای اضافی\n */\n className?: string\n /**\n * جهت متن (rtl/ltr)\n */\n dir?: \"rtl\" | \"ltr\"\n}\n\n/**\n * کامپوننت صفحهبندی با props استاندارد\n * \n * @example\n * ```tsx\n * <PaginationControlled\n * currentPage={2}\n * totalPages={10}\n * onPageChange={(page) => console.log(page)}\n * />\n * ```\n */\nexport function PaginationControlled({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n showEllipsis = true,\n className,\n dir = \"rtl\",\n}: PaginationControlledProps) {\n const handlePageChange = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const generatePageNumbers = () => {\n const pages: (number | \"ellipsis\")[] = []\n const totalNumbers = siblingCount * 2 + 5 // siblingCount on each side + current + first + last + 2 ellipsis\n const totalBlocks = totalNumbers + 2 // +2 for first and last\n\n if (totalPages <= totalBlocks) {\n // Show all pages if total pages is less than or equal to total blocks\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1\n\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n const leftRange: number[] = []\n for (let i = 1; i <= leftItemCount; i++) {\n leftRange.push(i)\n }\n pages.push(...leftRange)\n if (showEllipsis) pages.push(\"ellipsis\")\n pages.push(totalPages)\n } else if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push(\"ellipsis\")\n const rightItemCount = 3 + 2 * siblingCount\n const rightRange: number[] = []\n for (let i = totalPages - rightItemCount + 1; i <= totalPages; i++) {\n rightRange.push(i)\n }\n pages.push(...rightRange)\n } else if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n pages.push(1)\n if (showEllipsis) pages.push(\"ellipsis\")\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i)\n }\n if (showEllipsis) pages.push(\"ellipsis\")\n pages.push(totalPages)\n }\n }\n\n return pages\n }\n\n const pageNumbers = generatePageNumbers()\n\n // Don't show first/last if they're already in pageNumbers\n const showFirstButton = showFirstLast && !pageNumbers.includes(1) && currentPage > 1\n const showLastButton = showFirstLast && !pageNumbers.includes(totalPages) && currentPage < totalPages\n\n return (\n <Pagination className={className} dir={dir}>\n <PaginationContent>\n {showFirstButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(1)\n }}\n >\n {(1).toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage - 1)\n }}\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"\"}\n />\n </PaginationItem>\n )}\n\n {pageNumbers.map((page, index) => {\n if (page === \"ellipsis\") {\n return (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis />\n </PaginationItem>\n )\n }\n\n return (\n <PaginationItem key={page}>\n <PaginationLink\n href=\"#\"\n isActive={page === currentPage}\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(page)\n }}\n >\n {page.toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )\n })}\n\n {showPrevNext && (\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(currentPage + 1)\n }}\n className={currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"\"}\n />\n </PaginationItem>\n )}\n\n {showLastButton && (\n <PaginationItem>\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault()\n handlePageChange(totalPages)\n }}\n >\n {totalPages.toLocaleString(\"fa-IR\")}\n </PaginationLink>\n </PaginationItem>\n )}\n </PaginationContent>\n </Pagination>\n )\n}\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\n\nexport interface ProfileCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نام کامل کاربر\n */\n name: string;\n /**\n * نام کاربری (username)\n */\n username: string;\n /**\n * آدرس تصویر پروفایل\n */\n avatarSrc?: string;\n /**\n * متن جایگزین برای تصویر\n */\n avatarAlt?: string;\n /**\n * حروف اولیه برای fallback (اختیاری)\n */\n initials?: string;\n /**\n * تعداد فالوورها\n */\n followers?: number;\n /**\n * آیکون فالوور\n */\n followersIcon?: React.ReactNode;\n /**\n * تابع کلیک روی کارت\n */\n onCardClick?: () => void;\n /**\n * استایل حاشیه آواتار\n */\n avatarBorderVariant?: \"gold\" | \"primary\" | \"none\";\n /**\n * اندازه کامپوننت\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * رنگ پسزمینه\n */\n variant?: \"default\" | \"dark\" | \"transparent\";\n}\n\n// تابع فرمت کردن عدد به فرمت کوتاه\nconst formatFollowers = (count: number): string => {\n if (count >= 1000000) {\n return `${(count / 1000000).toFixed(1).replace(/\\.0$/, '')}M`;\n }\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1).replace(/\\.0$/, '')}K`;\n }\n return count.toString();\n};\n\nconst ProfileCard = React.forwardRef<HTMLDivElement, ProfileCardProps>(\n (\n {\n className,\n name,\n username,\n avatarSrc,\n avatarAlt,\n initials,\n followers,\n followersIcon,\n onCardClick,\n avatarBorderVariant = \"gold\",\n size = \"md\",\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n sm: {\n container: \"p-4 gap-1.5\",\n avatar: \"size-16\",\n name: \"text-sm\",\n username: \"text-xs\",\n followers: \"text-xs\",\n iconSize: \"h-3 w-3\",\n },\n md: {\n container: \"p-6 gap-2\",\n avatar: \"size-20\",\n name: \"text-base\",\n username: \"text-sm\",\n followers: \"text-sm\",\n iconSize: \"h-3.5 w-3.5\",\n },\n lg: {\n container: \"p-8 gap-2.5\",\n avatar: \"size-24\",\n name: \"text-lg\",\n username: \"text-base\",\n followers: \"text-base\",\n iconSize: \"h-4 w-4\",\n },\n };\n\n const variantClasses = {\n default: \"bg-surface-100 border border-border\",\n dark: \"bg-surface-200 border border-border\",\n transparent: \"bg-transparent border border-border\",\n };\n\n const currentSize = sizeClasses[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center rounded-lg shadow-sm transition-colors\",\n variantClasses[variant],\n currentSize.container,\n onCardClick && \"cursor-pointer hover:bg-surface-200\",\n className\n )}\n onClick={onCardClick}\n {...props}\n >\n {/* Avatar with gradient border */}\n <div className=\"relative flex-shrink-0\">\n {avatarBorderVariant === \"gold\" ? (\n <div className=\"relative p-0.5 rounded-full bg-gradient-to-br from-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 { TrendingUp, Users, UserCheck, Award, Crown } from \"lucide-react\";\nimport { Badge } from \"./badge\";\n\nexport interface EngagementRateProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)\n * Current engagement rate (as decimal, e.g., 0.05710 for 5.710%)\n */\n currentRate: number;\n \n /**\n * تعداد فالوورها\n * Number of followers\n */\n followers: number;\n \n /**\n * نمایش به صورت فارسی/عربی یا انگلیسی\n * Display in Persian/Arabic or English\n * @default \"fa\"\n */\n locale?: \"fa\" | \"ar\" | \"en\";\n \n /**\n * نمایش کارت اطلاعات دستهبندی\n * Show category information card\n * @default true\n */\n showCategoryCard?: boolean;\n}\n\n// تبدیل اعداد به فارسی یا عربی\nconst convertToLocalNumbers = (text: string | number, locale: \"fa\" | \"ar\" | \"en\") => {\n if (locale === \"fa\" || locale === \"ar\") {\n const persianDigits = [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"];\n return String(text).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)]);\n }\n return String(text);\n};\n\n// گروههای فالوور و بازههای نرخ تعامل\nconst ranges = {\n nano: {\n followers: [1000, 10000],\n excellent: 6,\n veryGood: [5, 6],\n good: [4, 5],\n average: [3, 4],\n couldBeImproved: [1, 3],\n low: 1,\n },\n micro: {\n followers: [10000, 100000],\n excellent: 4,\n veryGood: [3, 4],\n good: [2, 3],\n average: [1, 2],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n mid: {\n followers: [100000, 500000],\n excellent: 3,\n veryGood: [2.5, 3],\n good: [1.5, 2.5],\n average: [1, 1.5],\n couldBeImproved: [0.5, 1],\n low: 0.5,\n },\n macro: {\n followers: [500000, 1000000],\n excellent: 2,\n veryGood: [1.5, 2],\n good: [1, 1.5],\n average: [0.5, 1],\n couldBeImproved: [0.2, 0.5],\n low: 0.2,\n },\n mega: {\n followers: [1000000, Infinity],\n excellent: 1,\n veryGood: [0.8, 1],\n good: [0.5, 0.8],\n average: [0.3, 0.5],\n couldBeImproved: [0.1, 0.3],\n low: 0.1,\n },\n};\n\n// آیکون بر اساس گروه\nconst getGroupIcon = (group: string) => {\n const iconClass = \"w-12 h-12 text-primary\";\n switch (group) {\n case \"nano\":\n return <Users className={iconClass} />;\n case \"micro\":\n return <UserCheck className={iconClass} />;\n case \"mid\":\n return <TrendingUp className={iconClass} />;\n case \"macro\":\n return <Award className={iconClass} />;\n case \"mega\":\n return <Crown className={iconClass} />;\n default:\n return <Users className={iconClass} />;\n }\n};\n\n// ترجمهها\nconst translations = {\n fa: {\n excellent: \"عالی\",\n veryGood: \"خیلی خوب\",\n good: \"خوب\",\n average: \"متوسط\",\n couldBeImproved: \"قابل بهبود\",\n low: \"ضعیف\",\n yourCategory: \"دسته شما:\",\n influencer: \"اینفلوئنسر\",\n followers: \"فالوور\",\n over: \"بیش از\",\n to: \"تا\",\n and: \"و بالاتر\",\n lessThan: \"کمتر از\",\n you: \"شما\",\n criteria: \"معیارهای دسته\",\n nano: \"نانو\",\n micro: \"میکرو\",\n mid: \"متوسط\",\n macro: \"ماکرو\",\n mega: \"مگا\",\n },\n ar: {\n excellent: \"ممتاز\",\n veryGood: \"جيد جداً\",\n good: \"جيد\",\n average: \"متوسط\",\n couldBeImproved: \"قابل للتحسين\",\n low: \"ضعيف\",\n yourCategory: \"فئتك:\",\n influencer: \"مؤثر\",\n followers: \"متابع\",\n over: \"أكثر من\",\n to: \"إلى\",\n and: \"وأعلى\",\n lessThan: \"أقل من\",\n you: \"أنت\",\n criteria: \"معايير فئة المؤثر\",\n nano: \"نانو\",\n micro: \"ميكرو\",\n mid: \"متوسط\",\n macro: \"ماكرو\",\n mega: \"ميجا\",\n },\n en: {\n excellent: \"Excellent\",\n veryGood: \"Very Good\",\n good: \"Good\",\n average: \"Average\",\n couldBeImproved: \"Could Be Improved\",\n low: \"Low\",\n yourCategory: \"Your Category:\",\n influencer: \"Influencer\",\n followers: \"followers\",\n over: \"Over\",\n to: \"to\",\n and: \"and above\",\n lessThan: \"Less than\",\n you: \"You\",\n criteria: \"Category Criteria\",\n nano: \"Nano\",\n micro: \"Micro\",\n mid: \"Mid\",\n macro: \"Macro\",\n mega: \"Mega\",\n },\n};\n\nconst EngagementRate = React.forwardRef<HTMLDivElement, EngagementRateProps>(\n ({ className, currentRate, followers, locale = \"fa\", showCategoryCard = true, ...props }, ref) => {\n const isRTL = locale === \"fa\" || locale === \"ar\";\n const t = translations[locale];\n\n // تابع برای گرفتن بازههای نرخ تعامل\n const getEngagementRanges = () => {\n let group = \"\";\n for (const [key, value] of Object.entries(ranges)) {\n if (followers >= value.followers[0] && followers < value.followers[1]) {\n group = key;\n break;\n }\n }\n\n if (!group) {\n group = followers < 1000 ? \"nano\" : \"mega\";\n }\n\n const r = ranges[group as keyof typeof ranges];\n\n return {\n group: t[group as keyof typeof translations.fa] as string,\n groupKey: group,\n ranges: [\n {\n label: t.excellent,\n min: r.excellent,\n max: Infinity,\n display: `>${r.excellent}%`,\n color: \"#166534\", // green-800\n hoverColor: \"#14532d\", // green-900\n },\n {\n label: t.veryGood,\n min: r.veryGood[0],\n max: r.veryGood[1],\n display: `${r.veryGood[0]}% - ${r.veryGood[1]}%`,\n color: \"#16a34a\", // green-600\n hoverColor: \"#15803d\", // green-700\n },\n {\n label: t.good,\n min: r.good[0],\n max: r.good[1],\n display: `${r.good[0]}% - ${r.good[1]}%`,\n color: \"#84cc16\", // lime-500\n hoverColor: \"#65a30d\", // lime-600\n },\n {\n label: t.average,\n min: r.average[0],\n max: r.average[1],\n display: `${r.average[0]}% - ${r.average[1]}%`,\n color: \"#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-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\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 { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-control bg-control data-[state=checked]:border-brand focus-visible:border-brand-default focus-visible:ring-brand-default/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-brand absolute top-1/2 start-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rtl:translate-x-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst RadioCards = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n columns?: number | Record<string, number>\n dir?: \"rtl\" | \"ltr\"\n }\n>(({ className, columns = 1, dir = \"rtl\", children, ...props }, ref) => {\n // Handle responsive columns\n const gridCols = typeof columns === 'number' \n ? `grid-cols-${columns}` \n : Object.entries(columns).map(([key, val]) => \n key === 'initial' ? `grid-cols-${val}` : `${key}:grid-cols-${val}`\n ).join(' ')\n\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n data-slot=\"radio-cards\"\n dir={dir}\n className={cn(\"grid gap-3\", gridCols, className)}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Root>\n )\n})\nRadioCards.displayName = \"RadioCards\"\n\nconst RadioCardItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, children, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-card-item\"\n className={cn(\n \"relative flex cursor-pointer rounded-lg border border-control bg-surface-100 px-4 py-3 transition-all\",\n \"hover:border-brand-muted hover:bg-surface-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n \"data-[state=checked]:border-brand data-[state=checked]:bg-brand/5\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n </RadioGroupPrimitive.Item>\n )\n})\nRadioCardItem.displayName = \"RadioCardItem\"\n\nconst RadioCardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"text-sm font-semibold leading-none\", className)}\n {...props}\n />\n))\nRadioCardTitle.displayName = \"RadioCardTitle\"\n\nconst RadioCardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-foreground-muted\", className)}\n {...props}\n />\n))\nRadioCardDescription.displayName = \"RadioCardDescription\"\n\nexport { RadioCards, RadioCardItem, RadioCardTitle, RadioCardDescription }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:start-1/2 after:w-1 after:-translate-x-1/2 rtl:after:translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:start-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from \"@/lib/constants\"\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectTriggerVariants = cva('', {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n})\n\n// If placeholder is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value> &\n VariantProps<typeof SelectTriggerVariants>\n>(({ placeholder, ...props }, ref) => (\n <SelectPrimitive.Value\n placeholder={typeof placeholder === 'string' ? <span>{placeholder}</span> : placeholder}\n {...props}\n ref={ref}\n />\n))\nSelectValue.displayName = SelectPrimitive.Value.displayName\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> &\n VariantProps<typeof SelectTriggerVariants>\n>(({ className, children, size, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection text-xs ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\n \"data-[state=open]:bg-selection data-[state=open]:border-stronger\",\n \"gap-2\",\n \"[&>span]:truncate text-start\",\n SelectTriggerVariants({ size }),\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 text-foreground-lighter flex-shrink-0\" strokeWidth={1.5} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-foreground-muted\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-foreground-muted\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider font-mono\",\n className\n )}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\n// If children is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"group\",\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute start-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator className=\"h-3.5 w-3.5 bg-foreground rounded-full flex justify-center items-center\">\n <Check className=\"h-2 w-2 text-background-overlay\" strokeWidth={6} />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>\n {typeof children === 'string' ? <span>{children}</span> : children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border-overlay\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute top-4 end-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 end-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pe-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 end-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute end-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px rtl:-translate-x-px flex-col gap-1 border-s px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../lib/utils\"\n\ntype Direction = \"ltr\" | \"rtl\"\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = React.useState<Direction>(\"rtl\")\n\n React.useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === \"undefined\") return \"rtl\"\n const htmlDir = document.documentElement.getAttribute(\"dir\")\n if (htmlDir === \"ltr\" || htmlDir === \"rtl\") {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === \"rtl\" ? \"rtl\" : \"ltr\"\n }\n\n setDirection(getDirection())\n\n // Watch for changes in direction\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"dir\"],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n dir,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n const documentDir = useDocumentDirection()\n const resolvedDir = (dir as Direction) ?? documentDir\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n dir={resolvedDir}\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-background-surface-75 shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n\n","\"use client\"\n\nimport {\n CheckIcon,\n InfoIcon,\n Loader2Icon,\n TriangleAlertIcon,\n XCircleIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport const SONNER_DEFAULT_DURATION = 4000\n\n// Status icons with proper contrast against toast backgrounds\nconst StatusIconSuccess = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-brand-600 dark:bg-brand-500 p-0.5\">\n <CheckIcon className=\"size-3 text-white\" strokeWidth={3} />\n </div>\n)\n\nconst StatusIconInfo = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-foreground-lighter p-0.5\">\n <InfoIcon className=\"size-3 text-background-surface-200\" />\n </div>\n)\n\nconst StatusIconWarning = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-warning-600 dark:bg-warning-500 p-0.5\">\n <TriangleAlertIcon className=\"size-3 text-white\" />\n </div>\n)\n\nconst StatusIconError = () => (\n <div className=\"flex size-4 shrink-0 items-center justify-center rounded bg-destructive-600 dark:bg-destructive-500 p-0.5\">\n <XCircleIcon className=\"size-3 text-white\" />\n </div>\n)\n\nconst Toaster = ({\n dir = \"rtl\",\n position = \"bottom-left\",\n closeButton = false,\n toastOptions,\n ...props\n}: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n icons={{\n success: <StatusIconSuccess />,\n info: <StatusIconInfo />,\n warning: <StatusIconWarning />,\n error: <StatusIconError />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group pointer-events-auto\"\n dir={dir}\n position={position}\n closeButton={closeButton}\n style={{ fontFamily: \"inherit\" }}\n toastOptions={{\n unstyled: true,\n classNames: {\n toast: cn(\n \"group toast w-full rounded-md py-3 px-4 flex gap-3 items-start font-normal text-sm relative\",\n \"bg-overlay text-foreground border border-overlay shadow-lg\"\n ),\n icon: \"mt-0.5 shrink-0\",\n title: \"font-normal pe-6\",\n description: cn(\n \"text-xs text-foreground-lighter\",\n \"transition-opacity group-data-[expanded=false]:opacity-0 group-data-[front=true]:!opacity-100\"\n ),\n actionButton: cn(\n \"!inline-flex !items-center !justify-center text-xs font-medium px-3 py-1.5 rounded !ms-auto\",\n \"!bg-brand !text-foreground-contrast hover:!bg-brand-600 transition-colors\"\n ),\n cancelButton: cn(\n \"!inline-flex !items-center !justify-center text-xs font-medium px-3 py-1.5 rounded\",\n \"!border !border-default !bg-transparent !text-foreground hover:!bg-selection transition-colors\"\n ),\n success: \"!bg-brand-200 !border-brand-500 !text-brand-600 dark:!text-brand-400\",\n warning: \"!bg-warning-200 !border-warning-500 !text-warning-600 dark:!text-warning-400\",\n error: \"!bg-destructive-200 !border-destructive-500 !text-destructive-600 dark:!text-destructive-400\",\n info: \"\",\n closeButton: cn(\n \"!absolute !top-1 !end-1 !start-auto !transform-none !p-1\",\n \"!size-6 !rounded-md !text-foreground/50\",\n \"hover:!text-foreground hover:!bg-foreground/10 focus:!outline-none\",\n \"!bg-transparent !border-0 !opacity-100\"\n ),\n content: \"grow min-w-0\",\n },\n duration: SONNER_DEFAULT_DURATION,\n ...toastOptions,\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n\n// Re-export toast from sonner for convenience\nexport { toast } from \"sonner\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst switchRootVariants = cva(\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:hover:bg-brand-600/90 data-[state=unchecked]:bg-control data-[state=unchecked]:hover:bg-border\",\n {\n variants: {\n size: {\n small: 'h-[16px] w-[28px]',\n medium: 'h-[20px] w-[34px]',\n large: 'h-[24px] w-[44px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n }\n)\n\nconst switchThumbVariants = cva(\n \"pointer-events-none block rounded-full bg-foreground-lighter data-[state=checked]:bg-white shadow-lg ring-0 transition-transform\",\n {\n variants: {\n size: {\n small: 'h-[12px] w-[12px]',\n medium: 'h-[16px] w-[16px]',\n large: 'h-[18px] w-[18px]',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n }\n)\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchRootVariants> {}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(switchRootVariants({ size }), className)}\n {...props}\n ref={ref}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(switchThumbVariants({ size }))}\n />\n </SwitchPrimitive.Root>\n))\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-start align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 transition-[color,box-shadow] whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-control bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\nimport type { VariantProps } from \"class-variance-authority\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n\n","'use client';\n\nimport { ResponsiveLine, type LineSvgProps } from '@nivo/line';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoLineChartProps\n extends Omit<LineSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n background: 'hsl(0 0% 98%)',\n foregroundMuted: 'hsl(0 0% 55%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoLineChart({ className, ...props }: PartoLineChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n // Helper to add opacity to a color string\n const addOpacity = (color: string, opacity: number) => {\n // If color is already in hsl format, add opacity\n if (color.startsWith('hsl(')) {\n return color.replace(')', ` / ${opacity})`);\n }\n // If color is in rgb format, convert to rgba\n if (color.startsWith('rgb(')) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${opacity})`);\n }\n // Fallback: return as is\n return color;\n };\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground-muted', FALLBACKS.foregroundMuted),\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n strokeOpacity: 0.5,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--background', FALLBACKS.background),\n color: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 12,\n borderRadius: '8px',\n border: `1px solid ${addOpacity(getColor('--border', FALLBACKS.border), 0.5)}`,\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n padding: '10px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsiveLine theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","import { useEffect, useMemo, useState } from 'react';\n\n/**\n * Returns a snapshot of the current document root computed styles and\n * re-renders when the theme class or OS color scheme changes.\n */\nexport function useRootStyles() {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return;\n }\n\n const target = document.documentElement;\n const observer = new MutationObserver(() => {\n setVersion((prev) => prev + 1);\n });\n\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const mediaHandler = () => setVersion((prev) => prev + 1);\n media.addEventListener('change', mediaHandler);\n\n return () => {\n observer.disconnect();\n media.removeEventListener('change', mediaHandler);\n };\n }, []);\n\n return useMemo(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return null;\n }\n\n return getComputedStyle(document.documentElement);\n }, [version]);\n}\n\n","const COLOR_VALUE_REGEX = /^(#|rgb|hsl|oklch)/i;\n\nexport function resolveCssColor(\n styles: CSSStyleDeclaration | null,\n variable: string,\n fallback: string,\n) {\n if (!styles) return fallback;\n const raw = styles.getPropertyValue(variable).trim();\n if (!raw) return fallback;\n if (COLOR_VALUE_REGEX.test(raw)) return raw;\n if (raw.includes('%')) return `hsl(${raw})`;\n return raw;\n}\n\n","'use client';\n\nimport { ResponsiveBar, type BarSvgProps } from '@nivo/bar';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoBarChartProps\n extends Omit<BarSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoBarChart({ className, ...props }: PartoBarChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--muted-foreground', FALLBACKS.mutedForeground),\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n strokeOpacity: 0.4,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 12px rgba(0,0,0,0.15)',\n padding: '8px 12px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsiveBar theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","'use client';\n\nimport { ResponsivePie, type PieSvgProps } from '@nivo/pie';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\n\nexport interface PartoPieChartProps\n extends Omit<PieSvgProps<any>, 'theme' | 'width' | 'height'> {\n className?: string;\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nexport function PartoPieChart({ className, ...props }: PartoPieChartProps) {\n const styles = useRootStyles();\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 12px rgba(0,0,0,0.15)',\n padding: '8px 12px',\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n },\n },\n };\n\n const defaultColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n ];\n\n return (\n <div className={className} dir=\"ltr\" style={{ position: 'relative', width: '100%', height: '100%' }}>\n <ResponsivePie theme={nivoTheme} colors={defaultColors} {...props} />\n </div>\n );\n}\n\n","'use client';\n\nimport { ResponsiveHeatMap, type HeatMapSvgProps } from '@nivo/heatmap';\n\nimport { useRootStyles } from '@/hooks/use-root-styles';\nimport { resolveCssColor } from '@/lib/theme';\nimport { toPersianDigits, PERSIAN_WEEKDAYS } from '@/lib/jalali-utils';\n\nexport interface PartoHeatMapProps\n extends Omit<HeatMapSvgProps<any, any>, 'theme' | 'width' | 'height'> {\n className?: string;\n locale?: 'fa' | 'en';\n}\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n border: 'hsl(0 0% 45%)',\n mutedForeground: 'hsl(0 0% 55%)',\n popover: 'hsl(0 0% 12%)',\n popoverForeground: 'hsl(0 0% 98%)',\n card: 'hsl(0 0% 9%)',\n chart1: 'hsl(12 76% 61%)',\n chart2: 'hsl(173 58% 39%)',\n chart3: 'hsl(197 37% 24%)',\n chart4: 'hsl(43 74% 66%)',\n chart5: 'hsl(27 87% 67%)',\n};\n\nconst ENGLISH_WEEKDAYS = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n];\n\nexport function PartoHeatMap({ \n className, \n locale = 'fa',\n data,\n axisTop,\n axisBottom,\n axisLeft,\n axisRight,\n valueFormat,\n tooltip,\n margin,\n ...props \n}: PartoHeatMapProps) {\n const styles = useRootStyles();\n const isPersian = locale === 'fa';\n\n const getColor = (variable: string, fallback: string) =>\n resolveCssColor(styles, variable, fallback);\n\n // Helper to convert Persian digits to English\n const toEnglishDigits = (value: string | number): string => {\n const str = String(value);\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n const englishDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n \n let result = str;\n persianDigits.forEach((persian, index) => {\n result = result.replace(new RegExp(persian, 'g'), englishDigits[index]);\n });\n \n return result;\n };\n\n // Helper to convert numbers based on locale\n const formatNumber = (value: number | string): string => {\n if (isPersian) {\n return toPersianDigits(value);\n }\n // Convert any Persian digits to English for English locale\n return toEnglishDigits(value);\n };\n\n // Helper to format weekday names\n const formatWeekday = (day: string): string => {\n if (isPersian) {\n // Try to map English weekdays to Persian\n const dayIndex = ENGLISH_WEEKDAYS.findIndex(\n d => d.toLowerCase() === day.toLowerCase()\n );\n return dayIndex !== -1 ? PERSIAN_WEEKDAYS[dayIndex] : day;\n }\n return day;\n };\n\n // Default margins - always LTR\n const defaultMargin = { top: 60, right: 50, bottom: 60, left: 150 };\n\n const nivoTheme = {\n background: 'transparent',\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 11,\n },\n axis: {\n domain: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n },\n ticks: {\n line: {\n stroke: getColor('--border', FALLBACKS.border),\n strokeWidth: 1,\n },\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 13,\n fontWeight: 600,\n },\n },\n legend: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 13,\n fontWeight: 700,\n },\n },\n },\n grid: {\n line: {\n stroke: getColor('--card', FALLBACKS.card),\n strokeWidth: 3,\n },\n },\n tooltip: {\n container: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n background: getColor('--popover', FALLBACKS.popover),\n color: getColor('--popover-foreground', FALLBACKS.popoverForeground),\n fontSize: 12,\n borderRadius: 'var(--radius)',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n padding: '8px 12px',\n border: `1px solid ${getColor('--border', FALLBACKS.border)}`,\n },\n },\n legends: {\n text: {\n fontFamily: 'Yekan Bakh, system-ui, -apple-system, sans-serif',\n fill: getColor('--foreground', FALLBACKS.foreground),\n fontSize: 11,\n },\n },\n };\n\n // Default value formatter\n const defaultValueFormat = (value: number) => formatNumber(value);\n\n // Default tooltip\n const defaultTooltip = ({ cell }: any) => (\n <div className=\"bg-popover text-popover-foreground rounded-md shadow-lg px-3 py-2 border border-border min-w-[140px] text-center\">\n <div className=\"font-semibold text-sm mb-1.5 whitespace-nowrap\">\n {formatWeekday(String(cell.serieId))} - {formatNumber(cell.data.x as string)}\n </div>\n <div className=\"text-xs whitespace-nowrap\">\n {isPersian ? 'شدت فعالیت' : 'Activity'}: <span className=\"font-bold text-primary\">{formatNumber(cell.value ?? 0)}</span>\n </div>\n </div>\n );\n\n // Process axis configurations with number formatting\n const processAxisConfig = (axisConfig: any) => {\n if (!axisConfig) return axisConfig;\n \n const processed = { ...axisConfig };\n \n // Wrap format function to apply number formatting based on locale\n if (processed.format) {\n const originalFormat = processed.format;\n processed.format = (value: any) => {\n const formatted = originalFormat(value);\n // Convert based on locale\n return formatNumber(formatted);\n };\n } else {\n // If no format provided, apply locale-based formatting\n processed.format = (value: any) => formatNumber(value);\n }\n \n return processed;\n };\n\n // Process left axis with weekday formatting\n const processedAxisLeft = axisLeft ? {\n ...axisLeft,\n tickPadding: axisLeft.tickPadding !== undefined ? axisLeft.tickPadding : 12,\n legendOffset: axisLeft.legendOffset !== undefined ? axisLeft.legendOffset : -120,\n format: (value: any) => {\n let formatted = value;\n if (axisLeft.format && typeof axisLeft.format === 'function') {\n formatted = axisLeft.format(value);\n }\n return formatWeekday(String(formatted));\n },\n } : null;\n\n return (\n <div \n className={className} \n dir=\"ltr\"\n style={{ position: 'relative', width: '100%', height: '100%' }}\n >\n <ResponsiveHeatMap\n data={data}\n margin={margin || defaultMargin}\n theme={nivoTheme}\n valueFormat={valueFormat || defaultValueFormat}\n tooltip={tooltip || defaultTooltip}\n axisTop={processAxisConfig(axisTop)}\n axisBottom={processAxisConfig(axisBottom)}\n axisLeft={processedAxisLeft}\n axisRight={axisRight}\n colors={{\n type: 'sequential',\n scheme: 'blues',\n }}\n emptyColor={getColor('--muted', 'hsl(0 0% 20%)')}\n borderRadius={2}\n borderWidth={3}\n borderColor={getColor('--card', FALLBACKS.card)}\n enableLabels={false}\n animate={true}\n motionConfig=\"gentle\"\n forceSquare={true}\n {...props}\n />\n </div>\n );\n}\n\n","'use client';\n\nimport * as React from 'react';\nimport { 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 if (containerRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n \n // Get mouse position relative to container\n const x = event.clientX - containerRect.left;\n const y = event.clientY - containerRect.top;\n \n setHovered({\n text,\n value,\n x,\n y,\n color: primaryColor,\n });\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 {hovered && (\n <div\n className=\"pointer-events-none absolute z-50\"\n style={{\n left: `${hovered.x}px`,\n top: `${hovered.y - 50}px`,\n transform: 'translateX(-50%)',\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\">\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 )}\n </div>\n </div>\n );\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAC;AAAA,E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","names":["Calendar","CollapsibleContent","CollapsibleTrigger","Label","RadioGroup","format","toPersianDigits","moment","format","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_react_slot","import_lucide_react","import_jsx_runtime","import_react_slot","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Calendar","PersianDayPicker","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","useEmblaCarousel","api","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_lucide_react","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CommandPrimitive","React","import_jsx_runtime","sentiment","formatNumber","import_lucide_react","import_jsx_runtime","import_lucide_react","React","import_jsx_runtime","import_jsx_runtime","CalendarIcon","Calendar","React","import_lucide_react","import_jsx_runtime","Label","import_jsx_runtime","formatDateRange","Label","Calendar","import_jsx_runtime","DrawerPrimitive","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_class_variance_authority","import_jsx_runtime","Label","React","import_react_slot","import_jsx_runtime","Label","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","ReactPlayer","Icon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_date_fns","import_jsx_runtime","import_jsx_runtime","segmentCenterX","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","Icon","import_jsx_runtime","React","import_jsx_runtime","formatFollowers","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","convertToLocalNumbers","formatNumber","React","import_jsx_runtime","convertToLocalNumbers","ranges","translations","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","RadioGroup","React","RadioGroupPrimitive","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_lucide_react","React","import_jsx_runtime","open","React","import_jsx_runtime","useDocumentDirection","import_lucide_react","import_sonner","import_jsx_runtime","Sonner","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","FALLBACKS","import_jsx_runtime","FALLBACKS","import_jsx_runtime","FALLBACKS","toEnglishDigits","formatNumber","React","import_jsx_runtime","FALLBACKS"]}
|