@parto-system-design/ui 1.0.4 → 1.1.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.
- package/dist/index.cjs +1164 -1021
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +78 -347
- package/dist/index.d.cts +54 -25
- package/dist/index.d.ts +54 -25
- package/dist/index.js +1181 -1041
- package/dist/index.js.map +1 -1
- package/package.json +21 -4
- package/tailwind.config.ts +13 -297
package/dist/index.js
CHANGED
|
@@ -1,95 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/lib/utils.ts
|
|
2
4
|
import { clsx } from "clsx";
|
|
3
5
|
import { twMerge } from "tailwind-merge";
|
|
4
|
-
function cn(...inputs) {
|
|
5
|
-
return twMerge(clsx(inputs));
|
|
6
|
-
}
|
|
7
|
-
function formatNumber(num, format3 = "exact") {
|
|
8
|
-
if (num === void 0 || num === null) return "0";
|
|
9
|
-
if (format3 === "exact") {
|
|
10
|
-
return num.toLocaleString("en-US");
|
|
11
|
-
}
|
|
12
|
-
if (num >= 1e9) {
|
|
13
|
-
return `${(num / 1e9).toFixed(1).replace(/\.0$/, "")}B`;
|
|
14
|
-
}
|
|
15
|
-
if (num >= 1e6) {
|
|
16
|
-
return `${(num / 1e6).toFixed(1).replace(/\.0$/, "")}M`;
|
|
17
|
-
}
|
|
18
|
-
if (num >= 1e3) {
|
|
19
|
-
return `${(num / 1e3).toFixed(1).replace(/\.0$/, "")}K`;
|
|
20
|
-
}
|
|
21
|
-
return num.toString();
|
|
22
|
-
}
|
|
23
|
-
function formatRelativeTime(date) {
|
|
24
|
-
const now = /* @__PURE__ */ new Date();
|
|
25
|
-
const then = new Date(date);
|
|
26
|
-
const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1e3);
|
|
27
|
-
const toPersianDigits2 = (num) => {
|
|
28
|
-
const persianDigits = ["\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9"];
|
|
29
|
-
return num.toString().replace(/\d/g, (digit) => persianDigits[parseInt(digit)]);
|
|
30
|
-
};
|
|
31
|
-
if (diffInSeconds < 60) {
|
|
32
|
-
return "\u0647\u0645\u06CC\u0646 \u0627\u0644\u0627\u0646";
|
|
33
|
-
}
|
|
34
|
-
const diffInMinutes = Math.floor(diffInSeconds / 60);
|
|
35
|
-
if (diffInMinutes < 60) {
|
|
36
|
-
return `${toPersianDigits2(diffInMinutes)} \u062F\u0642\u06CC\u0642\u0647 \u067E\u06CC\u0634`;
|
|
37
|
-
}
|
|
38
|
-
const diffInHours = Math.floor(diffInMinutes / 60);
|
|
39
|
-
if (diffInHours < 24) {
|
|
40
|
-
return `${toPersianDigits2(diffInHours)} \u0633\u0627\u0639\u062A \u067E\u06CC\u0634`;
|
|
41
|
-
}
|
|
42
|
-
const diffInDays = Math.floor(diffInHours / 24);
|
|
43
|
-
if (diffInDays < 7) {
|
|
44
|
-
return `${toPersianDigits2(diffInDays)} \u0631\u0648\u0632 \u067E\u06CC\u0634`;
|
|
45
|
-
}
|
|
46
|
-
const diffInWeeks = Math.floor(diffInDays / 7);
|
|
47
|
-
if (diffInWeeks < 4) {
|
|
48
|
-
return `${toPersianDigits2(diffInWeeks)} \u0647\u0641\u062A\u0647 \u067E\u06CC\u0634`;
|
|
49
|
-
}
|
|
50
|
-
const diffInMonths = Math.floor(diffInDays / 30);
|
|
51
|
-
if (diffInMonths < 12) {
|
|
52
|
-
return `${toPersianDigits2(diffInMonths)} \u0645\u0627\u0647 \u067E\u06CC\u0634`;
|
|
53
|
-
}
|
|
54
|
-
const diffInYears = Math.floor(diffInDays / 365);
|
|
55
|
-
return `${toPersianDigits2(diffInYears)} \u0633\u0627\u0644 \u067E\u06CC\u0634`;
|
|
56
|
-
}
|
|
57
|
-
function formatAbsoluteTime(date) {
|
|
58
|
-
const d = new Date(date);
|
|
59
|
-
const toPersianDigits2 = (num) => {
|
|
60
|
-
const persianDigits = ["\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9"];
|
|
61
|
-
return num.toString().replace(/\d/g, (digit) => persianDigits[parseInt(digit)]);
|
|
62
|
-
};
|
|
63
|
-
const persianMonths = [
|
|
64
|
-
"\u0641\u0631\u0648\u0631\u062F\u06CC\u0646",
|
|
65
|
-
"\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A",
|
|
66
|
-
"\u062E\u0631\u062F\u0627\u062F",
|
|
67
|
-
"\u062A\u06CC\u0631",
|
|
68
|
-
"\u0645\u0631\u062F\u0627\u062F",
|
|
69
|
-
"\u0634\u0647\u0631\u06CC\u0648\u0631",
|
|
70
|
-
"\u0645\u0647\u0631",
|
|
71
|
-
"\u0622\u0628\u0627\u0646",
|
|
72
|
-
"\u0622\u0630\u0631",
|
|
73
|
-
"\u062F\u06CC",
|
|
74
|
-
"\u0628\u0647\u0645\u0646",
|
|
75
|
-
"\u0627\u0633\u0641\u0646\u062F"
|
|
76
|
-
];
|
|
77
|
-
const year = d.getFullYear();
|
|
78
|
-
const month = d.getMonth();
|
|
79
|
-
const day = d.getDate();
|
|
80
|
-
const hours = d.getHours();
|
|
81
|
-
const minutes = d.getMinutes();
|
|
82
|
-
const persianYear = year - 621;
|
|
83
|
-
const persianMonth = persianMonths[month];
|
|
84
|
-
const persianDay = toPersianDigits2(day);
|
|
85
|
-
const persianHours = toPersianDigits2(hours);
|
|
86
|
-
const persianMinutes = toPersianDigits2(minutes.toString().padStart(2, "0"));
|
|
87
|
-
return `${persianDay} ${persianMonth} ${toPersianDigits2(persianYear)}\u060C ${persianHours}:${persianMinutes}`;
|
|
88
|
-
}
|
|
89
6
|
|
|
90
7
|
// src/lib/jalali-utils.ts
|
|
91
|
-
import
|
|
92
|
-
moment.loadPersian({ usePersianDigits: true, dialect: "persian-modern" });
|
|
8
|
+
import { format, getYear, getMonth, getDate, parse, isSameDay, isSameMonth, isSameYear } from "date-fns-jalali";
|
|
93
9
|
var PERSIAN_MONTHS = [
|
|
94
10
|
"\u0641\u0631\u0648\u0631\u062F\u06CC\u0646",
|
|
95
11
|
"\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A",
|
|
@@ -137,49 +53,59 @@ function toEnglishDigits(str) {
|
|
|
137
53
|
const arabicDigits = ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"];
|
|
138
54
|
return str.replace(/[۰-۹]/g, (digit) => String(persianDigits.indexOf(digit))).replace(/[٠-٩]/g, (digit) => String(arabicDigits.indexOf(digit)));
|
|
139
55
|
}
|
|
140
|
-
function formatJalaliDate(date,
|
|
141
|
-
|
|
56
|
+
function formatJalaliDate(date, formatStr = "yyyy/MM/dd") {
|
|
57
|
+
let finalFormatStr = formatStr;
|
|
58
|
+
if (finalFormatStr.includes("jYYYY")) finalFormatStr = finalFormatStr.replace(/jYYYY/g, "yyyy");
|
|
59
|
+
if (finalFormatStr.includes("jMMMM")) finalFormatStr = finalFormatStr.replace(/jMMMM/g, "MMMM");
|
|
60
|
+
if (finalFormatStr.includes("jMM")) finalFormatStr = finalFormatStr.replace(/jMM/g, "MM");
|
|
61
|
+
if (finalFormatStr.includes("jM")) finalFormatStr = finalFormatStr.replace(/jM/g, "M");
|
|
62
|
+
if (finalFormatStr.includes("jDD")) finalFormatStr = finalFormatStr.replace(/jDD/g, "dd");
|
|
63
|
+
if (finalFormatStr.includes("jD")) finalFormatStr = finalFormatStr.replace(/jD/g, "d");
|
|
64
|
+
return format(date, finalFormatStr);
|
|
142
65
|
}
|
|
143
66
|
function getPersianMonthName(date) {
|
|
144
|
-
const monthIndex =
|
|
67
|
+
const monthIndex = getMonth(date);
|
|
145
68
|
return PERSIAN_MONTHS[monthIndex];
|
|
146
69
|
}
|
|
147
70
|
function getPersianMonthNameShort(date) {
|
|
148
|
-
const monthIndex =
|
|
71
|
+
const monthIndex = getMonth(date);
|
|
149
72
|
return PERSIAN_MONTHS_SHORT[monthIndex];
|
|
150
73
|
}
|
|
151
74
|
function getPersianWeekdayName(date, short = false) {
|
|
152
|
-
const dayIndex =
|
|
75
|
+
const dayIndex = date.getDay();
|
|
153
76
|
return short ? PERSIAN_WEEKDAYS_SHORT[dayIndex] : PERSIAN_WEEKDAYS[dayIndex];
|
|
154
77
|
}
|
|
155
78
|
function getPersianYear(date) {
|
|
156
|
-
return
|
|
79
|
+
return getYear(date);
|
|
157
80
|
}
|
|
158
81
|
function getPersianMonth(date) {
|
|
159
|
-
return
|
|
82
|
+
return getMonth(date);
|
|
160
83
|
}
|
|
161
84
|
function getPersianDay(date) {
|
|
162
|
-
return
|
|
85
|
+
return getDate(date);
|
|
163
86
|
}
|
|
164
87
|
function jalaliToGregorian(year, month, day) {
|
|
165
|
-
|
|
88
|
+
const yyyy = year.toString().padStart(4, "0");
|
|
89
|
+
const MM = (month + 1).toString().padStart(2, "0");
|
|
90
|
+
const dd = day.toString().padStart(2, "0");
|
|
91
|
+
const referenceDate = /* @__PURE__ */ new Date();
|
|
92
|
+
referenceDate.setHours(12, 0, 0, 0);
|
|
93
|
+
return parse(`${yyyy}/${MM}/${dd}`, "yyyy/MM/dd", referenceDate);
|
|
166
94
|
}
|
|
167
95
|
function formatPersianDateRange(from, to) {
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
const toDay = toMoment.jDate();
|
|
176
|
-
if (fromYear === toYear && fromMonth === toMonth && fromDay === toDay) {
|
|
96
|
+
const fromYear = getYear(from);
|
|
97
|
+
const toYear = getYear(to);
|
|
98
|
+
const fromMonth = getMonth(from);
|
|
99
|
+
const toMonth = getMonth(to);
|
|
100
|
+
const fromDay = getDate(from);
|
|
101
|
+
const toDay = getDate(to);
|
|
102
|
+
if (isSameDay(from, to)) {
|
|
177
103
|
return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`;
|
|
178
104
|
}
|
|
179
|
-
if (
|
|
105
|
+
if (isSameYear(from, to) && isSameMonth(from, to)) {
|
|
180
106
|
return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`;
|
|
181
107
|
}
|
|
182
|
-
if (
|
|
108
|
+
if (isSameYear(from, to)) {
|
|
183
109
|
return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(fromYear)}`;
|
|
184
110
|
}
|
|
185
111
|
return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(toYear)}`;
|
|
@@ -201,6 +127,66 @@ function getPersianYearsForDropdown(fromYear, toYear) {
|
|
|
201
127
|
return years;
|
|
202
128
|
}
|
|
203
129
|
|
|
130
|
+
// src/lib/utils.ts
|
|
131
|
+
function cn(...inputs) {
|
|
132
|
+
return twMerge(clsx(inputs));
|
|
133
|
+
}
|
|
134
|
+
function formatNumber(num, format4 = "exact") {
|
|
135
|
+
if (num === void 0 || num === null) return "0";
|
|
136
|
+
if (format4 === "exact") {
|
|
137
|
+
return num.toLocaleString("en-US");
|
|
138
|
+
}
|
|
139
|
+
if (num >= 1e9) {
|
|
140
|
+
return `${(num / 1e9).toFixed(1).replace(/\.0$/, "")}B`;
|
|
141
|
+
}
|
|
142
|
+
if (num >= 1e6) {
|
|
143
|
+
return `${(num / 1e6).toFixed(1).replace(/\.0$/, "")}M`;
|
|
144
|
+
}
|
|
145
|
+
if (num >= 1e3) {
|
|
146
|
+
return `${(num / 1e3).toFixed(1).replace(/\.0$/, "")}K`;
|
|
147
|
+
}
|
|
148
|
+
return num.toString();
|
|
149
|
+
}
|
|
150
|
+
function formatRelativeTime(date) {
|
|
151
|
+
const now = /* @__PURE__ */ new Date();
|
|
152
|
+
const then = new Date(date);
|
|
153
|
+
const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1e3);
|
|
154
|
+
if (diffInSeconds < 60) {
|
|
155
|
+
return "\u0647\u0645\u06CC\u0646 \u0627\u0644\u0627\u0646";
|
|
156
|
+
}
|
|
157
|
+
const diffInMinutes = Math.floor(diffInSeconds / 60);
|
|
158
|
+
if (diffInMinutes < 60) {
|
|
159
|
+
return `${toPersianDigits(diffInMinutes)} \u062F\u0642\u06CC\u0642\u0647 \u067E\u06CC\u0634`;
|
|
160
|
+
}
|
|
161
|
+
const diffInHours = Math.floor(diffInMinutes / 60);
|
|
162
|
+
if (diffInHours < 24) {
|
|
163
|
+
return `${toPersianDigits(diffInHours)} \u0633\u0627\u0639\u062A \u067E\u06CC\u0634`;
|
|
164
|
+
}
|
|
165
|
+
const diffInDays = Math.floor(diffInHours / 24);
|
|
166
|
+
if (diffInDays < 7) {
|
|
167
|
+
return `${toPersianDigits(diffInDays)} \u0631\u0648\u0632 \u067E\u06CC\u0634`;
|
|
168
|
+
}
|
|
169
|
+
const diffInWeeks = Math.floor(diffInDays / 7);
|
|
170
|
+
if (diffInWeeks < 4) {
|
|
171
|
+
return `${toPersianDigits(diffInWeeks)} \u0647\u0641\u062A\u0647 \u067E\u06CC\u0634`;
|
|
172
|
+
}
|
|
173
|
+
const diffInMonths = Math.floor(diffInDays / 30);
|
|
174
|
+
if (diffInMonths < 12) {
|
|
175
|
+
return `${toPersianDigits(diffInMonths)} \u0645\u0627\u0647 \u067E\u06CC\u0634`;
|
|
176
|
+
}
|
|
177
|
+
const diffInYears = Math.floor(diffInDays / 365);
|
|
178
|
+
return `${toPersianDigits(diffInYears)} \u0633\u0627\u0644 \u067E\u06CC\u0634`;
|
|
179
|
+
}
|
|
180
|
+
function formatAbsoluteTime(date) {
|
|
181
|
+
const d = new Date(date);
|
|
182
|
+
const year = getPersianYear(d);
|
|
183
|
+
const month = getPersianMonth(d);
|
|
184
|
+
const day = getPersianDay(d);
|
|
185
|
+
const hours = d.getHours();
|
|
186
|
+
const minutes = d.getMinutes();
|
|
187
|
+
return `${toPersianDigits(day)} ${PERSIAN_MONTHS[month]} ${toPersianDigits(year)}\u060C ${toPersianDigits(hours)}:${toPersianDigits(String(minutes).padStart(2, "0"))}`;
|
|
188
|
+
}
|
|
189
|
+
|
|
204
190
|
// src/icons.tsx
|
|
205
191
|
import {
|
|
206
192
|
AlertCircle,
|
|
@@ -248,11 +234,21 @@ import {
|
|
|
248
234
|
User,
|
|
249
235
|
Users,
|
|
250
236
|
Video,
|
|
251
|
-
X
|
|
237
|
+
X,
|
|
238
|
+
UserCheck,
|
|
239
|
+
TrendingUp,
|
|
240
|
+
Award,
|
|
241
|
+
Crown,
|
|
242
|
+
Minus,
|
|
243
|
+
ImageOff,
|
|
244
|
+
ExternalLink,
|
|
245
|
+
GripVertical,
|
|
246
|
+
PanelLeft,
|
|
247
|
+
XCircle
|
|
252
248
|
} from "lucide-react";
|
|
253
249
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
254
250
|
var Icons = {
|
|
255
|
-
|
|
251
|
+
/** Parto layered logo mark (generic) */
|
|
256
252
|
logo: (props) => /* @__PURE__ */ jsxs(
|
|
257
253
|
"svg",
|
|
258
254
|
{
|
|
@@ -271,6 +267,7 @@ var Icons = {
|
|
|
271
267
|
]
|
|
272
268
|
}
|
|
273
269
|
),
|
|
270
|
+
/** Official Parto brand mark (triangle composition) */
|
|
274
271
|
parto: (props) => /* @__PURE__ */ jsxs(
|
|
275
272
|
"svg",
|
|
276
273
|
{
|
|
@@ -290,6 +287,7 @@ var Icons = {
|
|
|
290
287
|
arrowRight: ArrowRight,
|
|
291
288
|
arrowLeft: ArrowLeft,
|
|
292
289
|
bold: Bold,
|
|
290
|
+
building: Building,
|
|
293
291
|
calendar: Calendar,
|
|
294
292
|
check: Check,
|
|
295
293
|
chevronDown: ChevronDown,
|
|
@@ -298,47 +296,19 @@ var Icons = {
|
|
|
298
296
|
chevronUp: ChevronUp,
|
|
299
297
|
circle: Circle,
|
|
300
298
|
clock: Clock,
|
|
299
|
+
/** Use for close/dismiss actions (X mark) */
|
|
300
|
+
close: X,
|
|
301
301
|
copy: Copy,
|
|
302
302
|
download: Download,
|
|
303
303
|
eye: Eye,
|
|
304
304
|
eyeOff: EyeOff,
|
|
305
305
|
file: File,
|
|
306
306
|
fileText: FileText,
|
|
307
|
-
heart: Heart,
|
|
308
|
-
home: Home,
|
|
309
|
-
image: Image,
|
|
310
|
-
images: Images,
|
|
311
|
-
inbox: Inbox,
|
|
312
|
-
info: Info,
|
|
313
|
-
italic: Italic,
|
|
314
|
-
loader: Loader2,
|
|
315
|
-
menu: Menu,
|
|
316
|
-
messageCircle: MessageCircle,
|
|
317
|
-
moon: Moon,
|
|
318
|
-
moreHorizontal: MoreHorizontal,
|
|
319
|
-
moreVertical: MoreVertical,
|
|
320
|
-
plus: Plus,
|
|
321
|
-
rocket: Rocket,
|
|
322
|
-
search: Search,
|
|
323
|
-
settings: Settings,
|
|
324
|
-
share: Share2,
|
|
325
|
-
sparkles: Sparkles,
|
|
326
|
-
sun: Sun,
|
|
327
|
-
trash: Trash,
|
|
328
|
-
underline: Underline,
|
|
329
|
-
user: User,
|
|
330
|
-
users: Users,
|
|
331
|
-
video: Video,
|
|
332
|
-
building: Building,
|
|
333
|
-
close: X,
|
|
334
|
-
spinner: Loader2,
|
|
335
307
|
gitHub: (props) => /* @__PURE__ */ jsx(
|
|
336
308
|
"svg",
|
|
337
309
|
{
|
|
338
310
|
"aria-hidden": "true",
|
|
339
311
|
focusable: "false",
|
|
340
|
-
"data-prefix": "fab",
|
|
341
|
-
"data-icon": "github",
|
|
342
312
|
role: "img",
|
|
343
313
|
xmlns: "http://www.w3.org/2000/svg",
|
|
344
314
|
viewBox: "0 0 496 512",
|
|
@@ -352,7 +322,13 @@ var Icons = {
|
|
|
352
322
|
)
|
|
353
323
|
}
|
|
354
324
|
),
|
|
355
|
-
|
|
325
|
+
heart: Heart,
|
|
326
|
+
home: Home,
|
|
327
|
+
image: Image,
|
|
328
|
+
images: Images,
|
|
329
|
+
inbox: Inbox,
|
|
330
|
+
info: Info,
|
|
331
|
+
instagram: (props) => /* @__PURE__ */ jsxs(
|
|
356
332
|
"svg",
|
|
357
333
|
{
|
|
358
334
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -363,10 +339,30 @@ var Icons = {
|
|
|
363
339
|
strokeLinecap: "round",
|
|
364
340
|
strokeLinejoin: "round",
|
|
365
341
|
...props,
|
|
366
|
-
children:
|
|
342
|
+
children: [
|
|
343
|
+
/* @__PURE__ */ jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", ry: "5" }),
|
|
344
|
+
/* @__PURE__ */ jsx("path", { d: "M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" }),
|
|
345
|
+
/* @__PURE__ */ jsx("line", { x1: "17.5", y1: "6.5", x2: "17.51", y2: "6.5" })
|
|
346
|
+
]
|
|
367
347
|
}
|
|
368
348
|
),
|
|
369
|
-
|
|
349
|
+
italic: Italic,
|
|
350
|
+
/** Animated loading spinner — prefer this over a custom spinner */
|
|
351
|
+
loader: Loader2,
|
|
352
|
+
menu: Menu,
|
|
353
|
+
messageCircle: MessageCircle,
|
|
354
|
+
moon: Moon,
|
|
355
|
+
moreHorizontal: MoreHorizontal,
|
|
356
|
+
moreVertical: MoreVertical,
|
|
357
|
+
plus: Plus,
|
|
358
|
+
rocket: Rocket,
|
|
359
|
+
search: Search,
|
|
360
|
+
settings: Settings,
|
|
361
|
+
share: Share2,
|
|
362
|
+
sparkles: Sparkles,
|
|
363
|
+
sun: Sun,
|
|
364
|
+
trash: Trash,
|
|
365
|
+
twitter: (props) => /* @__PURE__ */ jsx(
|
|
370
366
|
"svg",
|
|
371
367
|
{
|
|
372
368
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -377,18 +373,27 @@ var Icons = {
|
|
|
377
373
|
strokeLinecap: "round",
|
|
378
374
|
strokeLinejoin: "round",
|
|
379
375
|
...props,
|
|
380
|
-
children:
|
|
381
|
-
/* @__PURE__ */ jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", ry: "5" }),
|
|
382
|
-
/* @__PURE__ */ jsx("path", { d: "M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" }),
|
|
383
|
-
/* @__PURE__ */ jsx("line", { x1: "17.5", y1: "6.5", x2: "17.51", y2: "6.5" })
|
|
384
|
-
]
|
|
376
|
+
children: /* @__PURE__ */ jsx("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" })
|
|
385
377
|
}
|
|
386
|
-
)
|
|
378
|
+
),
|
|
379
|
+
underline: Underline,
|
|
380
|
+
user: User,
|
|
381
|
+
users: Users,
|
|
382
|
+
video: Video,
|
|
383
|
+
userCheck: UserCheck,
|
|
384
|
+
trendingUp: TrendingUp,
|
|
385
|
+
award: Award,
|
|
386
|
+
crown: Crown,
|
|
387
|
+
minus: Minus,
|
|
388
|
+
imageOff: ImageOff,
|
|
389
|
+
externalLink: ExternalLink,
|
|
390
|
+
gripVertical: GripVertical,
|
|
391
|
+
panelLeft: PanelLeft,
|
|
392
|
+
xCircle: XCircle
|
|
387
393
|
};
|
|
388
394
|
|
|
389
395
|
// src/components/ui/accordion.tsx
|
|
390
396
|
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
|
391
|
-
import { ChevronDownIcon } from "lucide-react";
|
|
392
397
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
393
398
|
function Accordion({
|
|
394
399
|
...props
|
|
@@ -424,7 +429,7 @@ function AccordionTrigger({
|
|
|
424
429
|
...props,
|
|
425
430
|
children: [
|
|
426
431
|
children,
|
|
427
|
-
/* @__PURE__ */ jsx2(
|
|
432
|
+
/* @__PURE__ */ jsx2(Icons.chevronDown, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" })
|
|
428
433
|
]
|
|
429
434
|
}
|
|
430
435
|
) });
|
|
@@ -502,7 +507,6 @@ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
|
502
507
|
// src/components/ui/button.tsx
|
|
503
508
|
import { Slot } from "@radix-ui/react-slot";
|
|
504
509
|
import { cva as cva2 } from "class-variance-authority";
|
|
505
|
-
import { Loader2 as Loader22 } from "lucide-react";
|
|
506
510
|
import { cloneElement, forwardRef as forwardRef2, isValidElement } from "react";
|
|
507
511
|
|
|
508
512
|
// src/lib/constants.ts
|
|
@@ -816,11 +820,11 @@ var Button = forwardRef2(
|
|
|
816
820
|
children: asChild ? isValidElement(children) ? cloneElement(
|
|
817
821
|
children,
|
|
818
822
|
void 0,
|
|
819
|
-
showIcon && (loading ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: /* @__PURE__ */ jsx4(
|
|
823
|
+
showIcon && (loading ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: /* @__PURE__ */ jsx4(Icons.loader, { className: cn(loadingVariants({ loading, variant: buttonVariant })) }) }) : _iconLeft ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: _iconLeft }) : null),
|
|
820
824
|
children.props?.children && /* @__PURE__ */ jsx4("span", { className: "truncate", children: children.props.children }),
|
|
821
825
|
iconRight && !loading && /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: iconRight })
|
|
822
826
|
) : null : /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
823
|
-
showIcon && (loading ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: /* @__PURE__ */ jsx4(
|
|
827
|
+
showIcon && (loading ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: /* @__PURE__ */ jsx4(Icons.loader, { className: cn(loadingVariants({ loading, variant: buttonVariant })) }) }) : _iconLeft ? /* @__PURE__ */ jsx4("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: _iconLeft }) : null),
|
|
824
828
|
" ",
|
|
825
829
|
children && /* @__PURE__ */ jsx4("span", { className: "truncate", children }),
|
|
826
830
|
" ",
|
|
@@ -999,11 +1003,10 @@ var Input = React3.forwardRef(
|
|
|
999
1003
|
Input.displayName = "Input";
|
|
1000
1004
|
|
|
1001
1005
|
// src/components/ui/spinner.tsx
|
|
1002
|
-
import { Loader2Icon } from "lucide-react";
|
|
1003
1006
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
1004
1007
|
function Spinner({ className, ...props }) {
|
|
1005
1008
|
return /* @__PURE__ */ jsx7(
|
|
1006
|
-
|
|
1009
|
+
Icons.loader,
|
|
1007
1010
|
{
|
|
1008
1011
|
role: "status",
|
|
1009
1012
|
"aria-label": "Loading",
|
|
@@ -1711,7 +1714,6 @@ function Badge({
|
|
|
1711
1714
|
|
|
1712
1715
|
// src/components/ui/breadcrumb.tsx
|
|
1713
1716
|
import { Slot as Slot2 } from "@radix-ui/react-slot";
|
|
1714
|
-
import { ChevronRight as ChevronRight2, MoreHorizontal as MoreHorizontal2 } from "lucide-react";
|
|
1715
1717
|
import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1716
1718
|
function Breadcrumb({ ...props }) {
|
|
1717
1719
|
return /* @__PURE__ */ jsx13("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
@@ -1786,7 +1788,7 @@ function BreadcrumbSeparator({
|
|
|
1786
1788
|
"aria-hidden": "true",
|
|
1787
1789
|
className: cn("[&>svg]:size-3.5", className),
|
|
1788
1790
|
...props,
|
|
1789
|
-
children: children ?? /* @__PURE__ */ jsx13(
|
|
1791
|
+
children: children ?? /* @__PURE__ */ jsx13(Icons.chevronRight, {})
|
|
1790
1792
|
}
|
|
1791
1793
|
);
|
|
1792
1794
|
}
|
|
@@ -1803,7 +1805,7 @@ function BreadcrumbEllipsis({
|
|
|
1803
1805
|
className: cn("flex size-9 items-center justify-center", className),
|
|
1804
1806
|
...props,
|
|
1805
1807
|
children: [
|
|
1806
|
-
/* @__PURE__ */ jsx13(
|
|
1808
|
+
/* @__PURE__ */ jsx13(Icons.moreHorizontal, { className: "size-4" }),
|
|
1807
1809
|
/* @__PURE__ */ jsx13("span", { className: "sr-only", children: "More" })
|
|
1808
1810
|
]
|
|
1809
1811
|
}
|
|
@@ -1937,7 +1939,6 @@ function ButtonGroupSeparator({
|
|
|
1937
1939
|
}
|
|
1938
1940
|
|
|
1939
1941
|
// src/components/ui/calendar.tsx
|
|
1940
|
-
import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3 } from "lucide-react";
|
|
1941
1942
|
import { DayPicker } from "react-day-picker";
|
|
1942
1943
|
import { DayPicker as PersianDayPicker } from "react-day-picker/persian";
|
|
1943
1944
|
import { enUS } from "date-fns/locale";
|
|
@@ -2022,14 +2023,14 @@ function Calendar2({
|
|
|
2022
2023
|
Chevron: ({ orientation }) => {
|
|
2023
2024
|
if (usePersianCalendar) {
|
|
2024
2025
|
if (orientation === "left") {
|
|
2025
|
-
return /* @__PURE__ */ jsx16(
|
|
2026
|
+
return /* @__PURE__ */ jsx16(Icons.chevronRight, { className: "h-4 w-4" });
|
|
2026
2027
|
}
|
|
2027
|
-
return /* @__PURE__ */ jsx16(
|
|
2028
|
+
return /* @__PURE__ */ jsx16(Icons.chevronLeft, { className: "h-4 w-4" });
|
|
2028
2029
|
}
|
|
2029
2030
|
if (orientation === "left") {
|
|
2030
|
-
return /* @__PURE__ */ jsx16(
|
|
2031
|
+
return /* @__PURE__ */ jsx16(Icons.chevronLeft, { className: "h-4 w-4" });
|
|
2031
2032
|
}
|
|
2032
|
-
return /* @__PURE__ */ jsx16(
|
|
2033
|
+
return /* @__PURE__ */ jsx16(Icons.chevronRight, { className: "h-4 w-4" });
|
|
2033
2034
|
}
|
|
2034
2035
|
},
|
|
2035
2036
|
...props
|
|
@@ -2081,7 +2082,6 @@ CardFooter.displayName = "CardFooter";
|
|
|
2081
2082
|
// src/components/ui/carousel.tsx
|
|
2082
2083
|
import * as React8 from "react";
|
|
2083
2084
|
import useEmblaCarousel from "embla-carousel-react";
|
|
2084
|
-
import { ArrowLeft as ArrowLeft2, ArrowRight as ArrowRight2 } from "lucide-react";
|
|
2085
2085
|
import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
2086
2086
|
var CarouselContext = React8.createContext(null);
|
|
2087
2087
|
function useCarousel() {
|
|
@@ -2275,7 +2275,7 @@ function CarouselPrevious({
|
|
|
2275
2275
|
onClick: scrollPrev,
|
|
2276
2276
|
...props,
|
|
2277
2277
|
children: [
|
|
2278
|
-
isRTL ? /* @__PURE__ */ jsx18(
|
|
2278
|
+
isRTL ? /* @__PURE__ */ jsx18(Icons.arrowRight, {}) : /* @__PURE__ */ jsx18(Icons.arrowLeft, {}),
|
|
2279
2279
|
/* @__PURE__ */ jsx18("span", { className: "sr-only", children: "Previous slide" })
|
|
2280
2280
|
]
|
|
2281
2281
|
}
|
|
@@ -2306,7 +2306,7 @@ function CarouselNext({
|
|
|
2306
2306
|
onClick: scrollNext,
|
|
2307
2307
|
...props,
|
|
2308
2308
|
children: [
|
|
2309
|
-
isRTL ? /* @__PURE__ */ jsx18(
|
|
2309
|
+
isRTL ? /* @__PURE__ */ jsx18(Icons.arrowLeft, {}) : /* @__PURE__ */ jsx18(Icons.arrowRight, {}),
|
|
2310
2310
|
/* @__PURE__ */ jsx18("span", { className: "sr-only", children: "Next slide" })
|
|
2311
2311
|
]
|
|
2312
2312
|
}
|
|
@@ -2315,7 +2315,6 @@ function CarouselNext({
|
|
|
2315
2315
|
|
|
2316
2316
|
// src/components/ui/checkbox.tsx
|
|
2317
2317
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
2318
|
-
import { CheckIcon } from "lucide-react";
|
|
2319
2318
|
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
2320
2319
|
function Checkbox({
|
|
2321
2320
|
className,
|
|
@@ -2335,7 +2334,7 @@ function Checkbox({
|
|
|
2335
2334
|
{
|
|
2336
2335
|
"data-slot": "checkbox-indicator",
|
|
2337
2336
|
className: "grid place-content-center text-current transition-none",
|
|
2338
|
-
children: /* @__PURE__ */ jsx19(
|
|
2337
|
+
children: /* @__PURE__ */ jsx19(Icons.check, { className: "size-3.5" })
|
|
2339
2338
|
}
|
|
2340
2339
|
)
|
|
2341
2340
|
}
|
|
@@ -2375,12 +2374,10 @@ function CollapsibleContent2({
|
|
|
2375
2374
|
|
|
2376
2375
|
// src/components/ui/command.tsx
|
|
2377
2376
|
import { Command as CommandPrimitive } from "cmdk";
|
|
2378
|
-
import { SearchIcon } from "lucide-react";
|
|
2379
2377
|
|
|
2380
2378
|
// src/components/ui/dialog.tsx
|
|
2381
2379
|
import * as React9 from "react";
|
|
2382
2380
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
2383
|
-
import { X as X2 } from "lucide-react";
|
|
2384
2381
|
import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2385
2382
|
var Dialog = DialogPrimitive.Root;
|
|
2386
2383
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
@@ -2412,7 +2409,7 @@ var DialogContent = React9.forwardRef(({ className, children, ...props }, ref) =
|
|
|
2412
2409
|
children: [
|
|
2413
2410
|
children,
|
|
2414
2411
|
/* @__PURE__ */ jsxs11(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", children: [
|
|
2415
|
-
/* @__PURE__ */ jsx21(
|
|
2412
|
+
/* @__PURE__ */ jsx21(Icons.close, { className: "h-4 w-4" }),
|
|
2416
2413
|
/* @__PURE__ */ jsx21("span", { className: "sr-only", children: "Close" })
|
|
2417
2414
|
] })
|
|
2418
2415
|
]
|
|
@@ -2519,7 +2516,7 @@ function CommandInput({
|
|
|
2519
2516
|
"data-slot": "command-input-wrapper",
|
|
2520
2517
|
className: "flex h-9 items-center gap-2 border-b px-3",
|
|
2521
2518
|
children: [
|
|
2522
|
-
/* @__PURE__ */ jsx22(
|
|
2519
|
+
/* @__PURE__ */ jsx22(Icons.search, { className: "size-4 shrink-0 opacity-50" }),
|
|
2523
2520
|
/* @__PURE__ */ jsx22(
|
|
2524
2521
|
CommandPrimitive.Input,
|
|
2525
2522
|
{
|
|
@@ -2698,7 +2695,6 @@ CommentCard.displayName = "CommentCard";
|
|
|
2698
2695
|
|
|
2699
2696
|
// src/components/ui/context-menu.tsx
|
|
2700
2697
|
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
2701
|
-
import { CheckIcon as CheckIcon2, ChevronRightIcon, CircleIcon } from "lucide-react";
|
|
2702
2698
|
import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2703
2699
|
function ContextMenu({
|
|
2704
2700
|
...props
|
|
@@ -2754,7 +2750,7 @@ function ContextMenuSubTrigger({
|
|
|
2754
2750
|
...props,
|
|
2755
2751
|
children: [
|
|
2756
2752
|
children,
|
|
2757
|
-
/* @__PURE__ */ jsx24(
|
|
2753
|
+
/* @__PURE__ */ jsx24(Icons.chevronRight, { className: "ms-auto rtl:rotate-180" })
|
|
2758
2754
|
]
|
|
2759
2755
|
}
|
|
2760
2756
|
);
|
|
@@ -2828,7 +2824,7 @@ function ContextMenuCheckboxItem({
|
|
|
2828
2824
|
checked,
|
|
2829
2825
|
...props,
|
|
2830
2826
|
children: [
|
|
2831
|
-
/* @__PURE__ */ jsx24("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx24(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx24(
|
|
2827
|
+
/* @__PURE__ */ jsx24("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx24(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx24(Icons.check, { className: "size-4" }) }) }),
|
|
2832
2828
|
children
|
|
2833
2829
|
]
|
|
2834
2830
|
}
|
|
@@ -2849,7 +2845,7 @@ function ContextMenuRadioItem({
|
|
|
2849
2845
|
),
|
|
2850
2846
|
...props,
|
|
2851
2847
|
children: [
|
|
2852
|
-
/* @__PURE__ */ jsx24("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx24(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx24(
|
|
2848
|
+
/* @__PURE__ */ jsx24("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx24(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx24(Icons.circle, { className: "size-2 fill-current" }) }) }),
|
|
2853
2849
|
children
|
|
2854
2850
|
]
|
|
2855
2851
|
}
|
|
@@ -2904,8 +2900,7 @@ function ContextMenuShortcut({
|
|
|
2904
2900
|
}
|
|
2905
2901
|
|
|
2906
2902
|
// src/components/ui/date-picker.tsx
|
|
2907
|
-
import { format, subDays, subMonths, subYears } from "date-fns";
|
|
2908
|
-
import { Calendar as CalendarIcon } from "lucide-react";
|
|
2903
|
+
import { format as format2, subDays, subMonths, subYears } from "date-fns";
|
|
2909
2904
|
|
|
2910
2905
|
// src/components/ui/popover.tsx
|
|
2911
2906
|
import * as React11 from "react";
|
|
@@ -2948,12 +2943,12 @@ function formatDateRange(range, usePersianCalendar) {
|
|
|
2948
2943
|
if (range.from) {
|
|
2949
2944
|
const isSameDate = range.from && range.to && range.from.getTime() === range.to.getTime();
|
|
2950
2945
|
if (range.to && !isSameDate) {
|
|
2951
|
-
return `${
|
|
2946
|
+
return `${format2(range.from, "LLL dd, y")} - ${format2(
|
|
2952
2947
|
range.to,
|
|
2953
2948
|
"LLL dd, y"
|
|
2954
2949
|
)}`;
|
|
2955
2950
|
} else {
|
|
2956
|
-
return
|
|
2951
|
+
return format2(range.from, "LLL dd, y");
|
|
2957
2952
|
}
|
|
2958
2953
|
}
|
|
2959
2954
|
return "";
|
|
@@ -3045,7 +3040,7 @@ function DatePicker({
|
|
|
3045
3040
|
!value && "text-muted-foreground"
|
|
3046
3041
|
),
|
|
3047
3042
|
disabled,
|
|
3048
|
-
iconLeft: /* @__PURE__ */ jsx26(
|
|
3043
|
+
iconLeft: /* @__PURE__ */ jsx26(Icons.calendar, { className: "h-4 w-4" }),
|
|
3049
3044
|
children: displayText || placeholder || defaultPlaceholder
|
|
3050
3045
|
}
|
|
3051
3046
|
) }),
|
|
@@ -3104,7 +3099,6 @@ function DatePicker({
|
|
|
3104
3099
|
|
|
3105
3100
|
// src/components/ui/date-range-picker.tsx
|
|
3106
3101
|
import * as React12 from "react";
|
|
3107
|
-
import { CalendarIcon as CalendarIcon2, ChevronDownIcon as ChevronDownIcon2 } from "lucide-react";
|
|
3108
3102
|
|
|
3109
3103
|
// src/components/ui/label.tsx
|
|
3110
3104
|
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
@@ -3170,7 +3164,7 @@ function DateRangePicker({
|
|
|
3170
3164
|
),
|
|
3171
3165
|
children: [
|
|
3172
3166
|
formatDateRange2(value),
|
|
3173
|
-
/* @__PURE__ */ jsx28(
|
|
3167
|
+
/* @__PURE__ */ jsx28(Icons.chevronDown, { className: "size-4 opacity-50" })
|
|
3174
3168
|
]
|
|
3175
3169
|
}
|
|
3176
3170
|
) }),
|
|
@@ -3237,7 +3231,7 @@ function DateRangePickerInline({
|
|
|
3237
3231
|
),
|
|
3238
3232
|
children: [
|
|
3239
3233
|
formatDateRange2(value),
|
|
3240
|
-
/* @__PURE__ */ jsx28(
|
|
3234
|
+
/* @__PURE__ */ jsx28(Icons.calendar, { className: "size-4 opacity-50" })
|
|
3241
3235
|
]
|
|
3242
3236
|
}
|
|
3243
3237
|
) }),
|
|
@@ -3385,7 +3379,6 @@ function DrawerDescription({
|
|
|
3385
3379
|
|
|
3386
3380
|
// src/components/ui/dropdown-menu.tsx
|
|
3387
3381
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
3388
|
-
import { CheckIcon as CheckIcon3, ChevronRightIcon as ChevronRightIcon2, CircleIcon as CircleIcon2 } from "lucide-react";
|
|
3389
3382
|
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3390
3383
|
function DropdownMenu({
|
|
3391
3384
|
...props
|
|
@@ -3468,7 +3461,7 @@ function DropdownMenuCheckboxItem({
|
|
|
3468
3461
|
checked,
|
|
3469
3462
|
...props,
|
|
3470
3463
|
children: [
|
|
3471
|
-
/* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(
|
|
3464
|
+
/* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Icons.check, { className: "size-4" }) }) }),
|
|
3472
3465
|
children
|
|
3473
3466
|
]
|
|
3474
3467
|
}
|
|
@@ -3500,7 +3493,7 @@ function DropdownMenuRadioItem({
|
|
|
3500
3493
|
),
|
|
3501
3494
|
...props,
|
|
3502
3495
|
children: [
|
|
3503
|
-
/* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(
|
|
3496
|
+
/* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Icons.circle, { className: "size-2 fill-current" }) }) }),
|
|
3504
3497
|
children
|
|
3505
3498
|
]
|
|
3506
3499
|
}
|
|
@@ -3576,7 +3569,7 @@ function DropdownMenuSubTrigger({
|
|
|
3576
3569
|
...props,
|
|
3577
3570
|
children: [
|
|
3578
3571
|
children,
|
|
3579
|
-
/* @__PURE__ */ jsx30(
|
|
3572
|
+
/* @__PURE__ */ jsx30(Icons.chevronRight, { className: "ms-auto size-4 rtl:rotate-180" })
|
|
3580
3573
|
]
|
|
3581
3574
|
}
|
|
3582
3575
|
);
|
|
@@ -4008,108 +4001,363 @@ function HoverCardContent({
|
|
|
4008
4001
|
) });
|
|
4009
4002
|
}
|
|
4010
4003
|
|
|
4011
|
-
// src/components/ui/input
|
|
4004
|
+
// src/components/ui/tag-input.tsx
|
|
4012
4005
|
import * as React14 from "react";
|
|
4013
4006
|
import { cva as cva7 } from "class-variance-authority";
|
|
4014
|
-
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
function Textarea({ className, ...props }) {
|
|
4018
|
-
return /* @__PURE__ */ jsx35(
|
|
4019
|
-
"textarea",
|
|
4020
|
-
{
|
|
4021
|
-
"data-slot": "textarea",
|
|
4022
|
-
className: cn(
|
|
4023
|
-
// Base styles - aligned with Input component
|
|
4024
|
-
"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",
|
|
4025
|
-
// Focus state - aligned with Input component
|
|
4026
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted",
|
|
4027
|
-
// Disabled state
|
|
4028
|
-
"disabled:cursor-not-allowed disabled:text-foreground-muted",
|
|
4029
|
-
// Error state - aligned with Input component
|
|
4030
|
-
"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",
|
|
4031
|
-
// Responsive
|
|
4032
|
-
"md:text-sm",
|
|
4033
|
-
className
|
|
4034
|
-
),
|
|
4035
|
-
...props
|
|
4036
|
-
}
|
|
4037
|
-
);
|
|
4038
|
-
}
|
|
4039
|
-
|
|
4040
|
-
// src/components/ui/input-group.tsx
|
|
4041
|
-
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
4042
|
-
var InputGroupContext = React14.createContext({});
|
|
4043
|
-
function useInputGroup() {
|
|
4044
|
-
return React14.useContext(InputGroupContext);
|
|
4045
|
-
}
|
|
4046
|
-
function InputGroup({ className, dir, ...props }) {
|
|
4047
|
-
const contextValue = React14.useMemo(() => ({ dir }), [dir]);
|
|
4048
|
-
return /* @__PURE__ */ jsx36(InputGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx36(
|
|
4049
|
-
"div",
|
|
4050
|
-
{
|
|
4051
|
-
"data-slot": "input-group",
|
|
4052
|
-
role: "group",
|
|
4053
|
-
dir,
|
|
4054
|
-
className: cn(
|
|
4055
|
-
// Base styles - aligned with Input component
|
|
4056
|
-
"group/input-group relative flex w-full items-center rounded-md border border-control bg-foreground/[.026] transition-[color,box-shadow] outline-none",
|
|
4057
|
-
"h-9 min-w-0 has-[>textarea]:h-auto",
|
|
4058
|
-
// Variants based on alignment.
|
|
4059
|
-
"has-[>[data-align=inline-start]]:[&>input]:ps-2",
|
|
4060
|
-
"has-[>[data-align=inline-end]]:[&>input]:pe-2",
|
|
4061
|
-
"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
4062
|
-
"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
|
|
4063
|
-
// Focus state - aligned with Input component
|
|
4064
|
-
"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",
|
|
4065
|
-
// Error state - aligned with Input component
|
|
4066
|
-
"has-[[data-slot][aria-invalid=true]]:bg-destructive-200 has-[[data-slot][aria-invalid=true]]:border-destructive-400",
|
|
4067
|
-
className
|
|
4068
|
-
),
|
|
4069
|
-
...props
|
|
4070
|
-
}
|
|
4071
|
-
) });
|
|
4072
|
-
}
|
|
4073
|
-
var inputGroupAddonVariants = cva7(
|
|
4074
|
-
"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",
|
|
4007
|
+
import { jsx as jsx35, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4008
|
+
var tagInputVariants = cva7(
|
|
4009
|
+
"flex min-h-[38px] w-full flex-wrap gap-2 rounded-md border border-control bg-background px-3 py-2 text-sm ring-offset-background focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
4075
4010
|
{
|
|
4076
4011
|
variants: {
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
"block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
|
|
4081
|
-
"block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
|
|
4012
|
+
variant: {
|
|
4013
|
+
default: "bg-background",
|
|
4014
|
+
secondary: "bg-secondary"
|
|
4082
4015
|
}
|
|
4083
4016
|
},
|
|
4084
4017
|
defaultVariants: {
|
|
4085
|
-
|
|
4018
|
+
variant: "default"
|
|
4086
4019
|
}
|
|
4087
4020
|
}
|
|
4088
4021
|
);
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
}
|
|
4111
|
-
|
|
4112
|
-
|
|
4022
|
+
var TagInput = React14.forwardRef(
|
|
4023
|
+
({
|
|
4024
|
+
className,
|
|
4025
|
+
variant,
|
|
4026
|
+
value: controlledValue,
|
|
4027
|
+
defaultValue,
|
|
4028
|
+
onChange,
|
|
4029
|
+
placeholder,
|
|
4030
|
+
disabled,
|
|
4031
|
+
maxTags,
|
|
4032
|
+
...props
|
|
4033
|
+
}, ref) => {
|
|
4034
|
+
const [value, setValue] = React14.useState(
|
|
4035
|
+
controlledValue || defaultValue || []
|
|
4036
|
+
);
|
|
4037
|
+
const [inputValue, setInputValue] = React14.useState("");
|
|
4038
|
+
const inputRef = React14.useRef(null);
|
|
4039
|
+
React14.useEffect(() => {
|
|
4040
|
+
if (controlledValue !== void 0) {
|
|
4041
|
+
setValue(controlledValue);
|
|
4042
|
+
}
|
|
4043
|
+
}, [controlledValue]);
|
|
4044
|
+
const handleKeyDown = (e) => {
|
|
4045
|
+
if (e.key === "Enter") {
|
|
4046
|
+
e.preventDefault();
|
|
4047
|
+
const newTag = inputValue.trim();
|
|
4048
|
+
if (newTag && !value.includes(newTag)) {
|
|
4049
|
+
if (maxTags && value.length >= maxTags) return;
|
|
4050
|
+
const newValue = [...value, newTag];
|
|
4051
|
+
if (controlledValue === void 0) {
|
|
4052
|
+
setValue(newValue);
|
|
4053
|
+
}
|
|
4054
|
+
onChange?.(newValue);
|
|
4055
|
+
setInputValue("");
|
|
4056
|
+
}
|
|
4057
|
+
} else if (e.key === "Backspace" && !inputValue && value.length > 0) {
|
|
4058
|
+
const newValue = value.slice(0, -1);
|
|
4059
|
+
if (controlledValue === void 0) {
|
|
4060
|
+
setValue(newValue);
|
|
4061
|
+
}
|
|
4062
|
+
onChange?.(newValue);
|
|
4063
|
+
}
|
|
4064
|
+
};
|
|
4065
|
+
const removeTag = (tagToRemove) => {
|
|
4066
|
+
const newValue = value.filter((tag) => tag !== tagToRemove);
|
|
4067
|
+
if (controlledValue === void 0) {
|
|
4068
|
+
setValue(newValue);
|
|
4069
|
+
}
|
|
4070
|
+
onChange?.(newValue);
|
|
4071
|
+
inputRef.current?.focus();
|
|
4072
|
+
};
|
|
4073
|
+
return /* @__PURE__ */ jsxs20(
|
|
4074
|
+
"div",
|
|
4075
|
+
{
|
|
4076
|
+
ref,
|
|
4077
|
+
className: cn(tagInputVariants({ variant }), className),
|
|
4078
|
+
onClick: () => inputRef.current?.focus(),
|
|
4079
|
+
...props,
|
|
4080
|
+
children: [
|
|
4081
|
+
value.map((tag) => /* @__PURE__ */ jsxs20(
|
|
4082
|
+
Badge,
|
|
4083
|
+
{
|
|
4084
|
+
variant: "secondary",
|
|
4085
|
+
className: "gap-1 pe-1 ps-2 h-7 hover:!bg-primary/20 hover:!text-primary transition-colors [&:hover_svg]:!text-primary",
|
|
4086
|
+
children: [
|
|
4087
|
+
tag,
|
|
4088
|
+
/* @__PURE__ */ jsxs20(
|
|
4089
|
+
"button",
|
|
4090
|
+
{
|
|
4091
|
+
type: "button",
|
|
4092
|
+
onClick: (e) => {
|
|
4093
|
+
e.stopPropagation();
|
|
4094
|
+
removeTag(tag);
|
|
4095
|
+
},
|
|
4096
|
+
className: "rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:!bg-primary/20 transition-colors",
|
|
4097
|
+
disabled,
|
|
4098
|
+
children: [
|
|
4099
|
+
/* @__PURE__ */ jsx35(Icons.close, { className: "h-3 w-3 text-muted-foreground" }),
|
|
4100
|
+
/* @__PURE__ */ jsxs20("span", { className: "sr-only", children: [
|
|
4101
|
+
"Remove ",
|
|
4102
|
+
tag
|
|
4103
|
+
] })
|
|
4104
|
+
]
|
|
4105
|
+
}
|
|
4106
|
+
)
|
|
4107
|
+
]
|
|
4108
|
+
},
|
|
4109
|
+
tag
|
|
4110
|
+
)),
|
|
4111
|
+
/* @__PURE__ */ jsx35(
|
|
4112
|
+
"input",
|
|
4113
|
+
{
|
|
4114
|
+
ref: inputRef,
|
|
4115
|
+
type: "text",
|
|
4116
|
+
value: inputValue,
|
|
4117
|
+
onChange: (e) => setInputValue(e.target.value),
|
|
4118
|
+
onKeyDown: handleKeyDown,
|
|
4119
|
+
className: "flex-1 bg-transparent outline-none placeholder:text-muted-foreground min-w-[120px] text-sm h-7",
|
|
4120
|
+
placeholder: value.length === 0 ? placeholder : void 0,
|
|
4121
|
+
disabled
|
|
4122
|
+
}
|
|
4123
|
+
)
|
|
4124
|
+
]
|
|
4125
|
+
}
|
|
4126
|
+
);
|
|
4127
|
+
}
|
|
4128
|
+
);
|
|
4129
|
+
TagInput.displayName = "TagInput";
|
|
4130
|
+
|
|
4131
|
+
// src/components/ui/hashtag-input.tsx
|
|
4132
|
+
import * as React15 from "react";
|
|
4133
|
+
import { cva as cva8 } from "class-variance-authority";
|
|
4134
|
+
import { jsx as jsx36, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4135
|
+
var hashtagInputVariants = cva8(
|
|
4136
|
+
"flex min-h-[38px] w-full flex-wrap gap-2 rounded-md border border-control bg-background px-3 py-2 text-sm ring-offset-background focus-within:ring-2 focus-within:ring-background-control focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
4137
|
+
{
|
|
4138
|
+
variants: {
|
|
4139
|
+
variant: {
|
|
4140
|
+
default: "bg-background",
|
|
4141
|
+
secondary: "bg-secondary"
|
|
4142
|
+
}
|
|
4143
|
+
},
|
|
4144
|
+
defaultVariants: {
|
|
4145
|
+
variant: "default"
|
|
4146
|
+
}
|
|
4147
|
+
}
|
|
4148
|
+
);
|
|
4149
|
+
var HashtagInput = React15.forwardRef(
|
|
4150
|
+
({
|
|
4151
|
+
className,
|
|
4152
|
+
variant,
|
|
4153
|
+
value: controlledValue,
|
|
4154
|
+
defaultValue,
|
|
4155
|
+
onChange,
|
|
4156
|
+
placeholder,
|
|
4157
|
+
disabled,
|
|
4158
|
+
maxTags,
|
|
4159
|
+
...props
|
|
4160
|
+
}, ref) => {
|
|
4161
|
+
const [value, setValue] = React15.useState(
|
|
4162
|
+
controlledValue || defaultValue || []
|
|
4163
|
+
);
|
|
4164
|
+
const [inputValue, setInputValue] = React15.useState("");
|
|
4165
|
+
const inputRef = React15.useRef(null);
|
|
4166
|
+
React15.useEffect(() => {
|
|
4167
|
+
if (controlledValue !== void 0) {
|
|
4168
|
+
setValue(controlledValue);
|
|
4169
|
+
}
|
|
4170
|
+
}, [controlledValue]);
|
|
4171
|
+
const handleKeyDown = (e) => {
|
|
4172
|
+
if (e.key === "Enter") {
|
|
4173
|
+
e.preventDefault();
|
|
4174
|
+
const rawTag = inputValue.trim().replace(/^#/, "");
|
|
4175
|
+
if (rawTag && !value.includes(rawTag)) {
|
|
4176
|
+
if (maxTags && value.length >= maxTags) return;
|
|
4177
|
+
const newValue = [...value, rawTag];
|
|
4178
|
+
if (controlledValue === void 0) {
|
|
4179
|
+
setValue(newValue);
|
|
4180
|
+
}
|
|
4181
|
+
onChange?.(newValue);
|
|
4182
|
+
setInputValue("");
|
|
4183
|
+
}
|
|
4184
|
+
} else if (e.key === "Backspace" && !inputValue && value.length > 0) {
|
|
4185
|
+
const newValue = value.slice(0, -1);
|
|
4186
|
+
if (controlledValue === void 0) {
|
|
4187
|
+
setValue(newValue);
|
|
4188
|
+
}
|
|
4189
|
+
onChange?.(newValue);
|
|
4190
|
+
}
|
|
4191
|
+
};
|
|
4192
|
+
const removeTag = (tagToRemove) => {
|
|
4193
|
+
const newValue = value.filter((tag) => tag !== tagToRemove);
|
|
4194
|
+
if (controlledValue === void 0) {
|
|
4195
|
+
setValue(newValue);
|
|
4196
|
+
}
|
|
4197
|
+
onChange?.(newValue);
|
|
4198
|
+
inputRef.current?.focus();
|
|
4199
|
+
};
|
|
4200
|
+
return /* @__PURE__ */ jsxs21(
|
|
4201
|
+
"div",
|
|
4202
|
+
{
|
|
4203
|
+
ref,
|
|
4204
|
+
className: cn(hashtagInputVariants({ variant }), className),
|
|
4205
|
+
onClick: () => inputRef.current?.focus(),
|
|
4206
|
+
...props,
|
|
4207
|
+
children: [
|
|
4208
|
+
value.map((tag) => /* @__PURE__ */ jsxs21(
|
|
4209
|
+
Badge,
|
|
4210
|
+
{
|
|
4211
|
+
variant: "secondary",
|
|
4212
|
+
className: "gap-1 pe-1 ps-2 h-7 hover:!bg-primary/20 hover:!text-primary transition-colors [&:hover_svg]:!text-primary",
|
|
4213
|
+
children: [
|
|
4214
|
+
"#",
|
|
4215
|
+
tag,
|
|
4216
|
+
/* @__PURE__ */ jsxs21(
|
|
4217
|
+
"button",
|
|
4218
|
+
{
|
|
4219
|
+
type: "button",
|
|
4220
|
+
onClick: (e) => {
|
|
4221
|
+
e.stopPropagation();
|
|
4222
|
+
removeTag(tag);
|
|
4223
|
+
},
|
|
4224
|
+
className: "rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:!bg-primary/20 transition-colors",
|
|
4225
|
+
disabled,
|
|
4226
|
+
children: [
|
|
4227
|
+
/* @__PURE__ */ jsx36(Icons.close, { className: "h-3 w-3 text-muted-foreground" }),
|
|
4228
|
+
/* @__PURE__ */ jsxs21("span", { className: "sr-only", children: [
|
|
4229
|
+
"Remove ",
|
|
4230
|
+
tag
|
|
4231
|
+
] })
|
|
4232
|
+
]
|
|
4233
|
+
}
|
|
4234
|
+
)
|
|
4235
|
+
]
|
|
4236
|
+
},
|
|
4237
|
+
tag
|
|
4238
|
+
)),
|
|
4239
|
+
/* @__PURE__ */ jsx36(
|
|
4240
|
+
"input",
|
|
4241
|
+
{
|
|
4242
|
+
ref: inputRef,
|
|
4243
|
+
type: "text",
|
|
4244
|
+
value: inputValue,
|
|
4245
|
+
onChange: (e) => setInputValue(e.target.value),
|
|
4246
|
+
onKeyDown: handleKeyDown,
|
|
4247
|
+
className: "flex-1 bg-transparent outline-none placeholder:text-muted-foreground min-w-[120px] text-sm h-7",
|
|
4248
|
+
placeholder: value.length === 0 ? placeholder : void 0,
|
|
4249
|
+
disabled
|
|
4250
|
+
}
|
|
4251
|
+
)
|
|
4252
|
+
]
|
|
4253
|
+
}
|
|
4254
|
+
);
|
|
4255
|
+
}
|
|
4256
|
+
);
|
|
4257
|
+
HashtagInput.displayName = "HashtagInput";
|
|
4258
|
+
|
|
4259
|
+
// src/components/ui/input-group.tsx
|
|
4260
|
+
import * as React16 from "react";
|
|
4261
|
+
import { cva as cva9 } from "class-variance-authority";
|
|
4262
|
+
|
|
4263
|
+
// src/components/ui/textarea.tsx
|
|
4264
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
4265
|
+
function Textarea({ className, ...props }) {
|
|
4266
|
+
return /* @__PURE__ */ jsx37(
|
|
4267
|
+
"textarea",
|
|
4268
|
+
{
|
|
4269
|
+
"data-slot": "textarea",
|
|
4270
|
+
className: cn(
|
|
4271
|
+
// Base styles - aligned with Input component
|
|
4272
|
+
"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",
|
|
4273
|
+
// Focus state - aligned with Input component
|
|
4274
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-background-control focus-visible:ring-offset-2 focus-visible:ring-offset-foreground-muted",
|
|
4275
|
+
// Disabled state
|
|
4276
|
+
"disabled:cursor-not-allowed disabled:text-foreground-muted",
|
|
4277
|
+
// Error state - aligned with Input component
|
|
4278
|
+
"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",
|
|
4279
|
+
// Responsive
|
|
4280
|
+
"md:text-sm",
|
|
4281
|
+
className
|
|
4282
|
+
),
|
|
4283
|
+
...props
|
|
4284
|
+
}
|
|
4285
|
+
);
|
|
4286
|
+
}
|
|
4287
|
+
|
|
4288
|
+
// src/components/ui/input-group.tsx
|
|
4289
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
4290
|
+
var InputGroupContext = React16.createContext({});
|
|
4291
|
+
function useInputGroup() {
|
|
4292
|
+
return React16.useContext(InputGroupContext);
|
|
4293
|
+
}
|
|
4294
|
+
function InputGroup({ className, dir, ...props }) {
|
|
4295
|
+
const contextValue = React16.useMemo(() => ({ dir }), [dir]);
|
|
4296
|
+
return /* @__PURE__ */ jsx38(InputGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx38(
|
|
4297
|
+
"div",
|
|
4298
|
+
{
|
|
4299
|
+
"data-slot": "input-group",
|
|
4300
|
+
role: "group",
|
|
4301
|
+
dir,
|
|
4302
|
+
className: cn(
|
|
4303
|
+
// Base styles - aligned with Input component
|
|
4304
|
+
"group/input-group relative flex w-full items-center rounded-md border border-control bg-foreground/[.026] transition-[color,box-shadow] outline-none",
|
|
4305
|
+
"h-9 min-w-0 has-[>textarea]:h-auto",
|
|
4306
|
+
// Variants based on alignment.
|
|
4307
|
+
"has-[>[data-align=inline-start]]:[&>input]:ps-2",
|
|
4308
|
+
"has-[>[data-align=inline-end]]:[&>input]:pe-2",
|
|
4309
|
+
"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
4310
|
+
"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
|
|
4311
|
+
// Focus state - aligned with Input component
|
|
4312
|
+
"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",
|
|
4313
|
+
// Error state - aligned with Input component
|
|
4314
|
+
"has-[[data-slot][aria-invalid=true]]:bg-destructive-200 has-[[data-slot][aria-invalid=true]]:border-destructive-400",
|
|
4315
|
+
className
|
|
4316
|
+
),
|
|
4317
|
+
...props
|
|
4318
|
+
}
|
|
4319
|
+
) });
|
|
4320
|
+
}
|
|
4321
|
+
var inputGroupAddonVariants = cva9(
|
|
4322
|
+
"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",
|
|
4323
|
+
{
|
|
4324
|
+
variants: {
|
|
4325
|
+
align: {
|
|
4326
|
+
"inline-start": "order-first ps-3 has-[>button]:[margin-inline-start:-0.45rem] has-[>kbd]:[margin-inline-start:-0.35rem]",
|
|
4327
|
+
"inline-end": "order-last pe-3 has-[>button]:[margin-inline-end:-0.45rem] has-[>kbd]:[margin-inline-end:-0.35rem]",
|
|
4328
|
+
"block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
|
|
4329
|
+
"block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
|
|
4330
|
+
}
|
|
4331
|
+
},
|
|
4332
|
+
defaultVariants: {
|
|
4333
|
+
align: "inline-start"
|
|
4334
|
+
}
|
|
4335
|
+
}
|
|
4336
|
+
);
|
|
4337
|
+
function InputGroupAddon({
|
|
4338
|
+
className,
|
|
4339
|
+
align = "inline-start",
|
|
4340
|
+
...props
|
|
4341
|
+
}) {
|
|
4342
|
+
return /* @__PURE__ */ jsx38(
|
|
4343
|
+
"div",
|
|
4344
|
+
{
|
|
4345
|
+
role: "group",
|
|
4346
|
+
"data-slot": "input-group-addon",
|
|
4347
|
+
"data-align": align,
|
|
4348
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
4349
|
+
onClick: (e) => {
|
|
4350
|
+
if (e.target.closest("button")) {
|
|
4351
|
+
return;
|
|
4352
|
+
}
|
|
4353
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
4354
|
+
},
|
|
4355
|
+
...props
|
|
4356
|
+
}
|
|
4357
|
+
);
|
|
4358
|
+
}
|
|
4359
|
+
var inputGroupButtonVariants = cva9(
|
|
4360
|
+
"text-sm shadow-none flex gap-2 items-center",
|
|
4113
4361
|
{
|
|
4114
4362
|
variants: {
|
|
4115
4363
|
size: {
|
|
@@ -4131,7 +4379,7 @@ function InputGroupButton({
|
|
|
4131
4379
|
size = "xs",
|
|
4132
4380
|
...props
|
|
4133
4381
|
}) {
|
|
4134
|
-
return /* @__PURE__ */
|
|
4382
|
+
return /* @__PURE__ */ jsx38(
|
|
4135
4383
|
Button,
|
|
4136
4384
|
{
|
|
4137
4385
|
type,
|
|
@@ -4143,7 +4391,7 @@ function InputGroupButton({
|
|
|
4143
4391
|
);
|
|
4144
4392
|
}
|
|
4145
4393
|
function InputGroupText({ className, ...props }) {
|
|
4146
|
-
return /* @__PURE__ */
|
|
4394
|
+
return /* @__PURE__ */ jsx38(
|
|
4147
4395
|
"span",
|
|
4148
4396
|
{
|
|
4149
4397
|
className: cn(
|
|
@@ -4164,7 +4412,7 @@ function InputGroupInput({
|
|
|
4164
4412
|
const { dir: contextDir } = useInputGroup();
|
|
4165
4413
|
const isLTRType = type === "url" || type === "email" || type === "tel" || type === "number" || props.inputMode === "numeric";
|
|
4166
4414
|
const dir = dirProp ?? contextDir ?? (isLTRType ? "ltr" : void 0);
|
|
4167
|
-
return /* @__PURE__ */
|
|
4415
|
+
return /* @__PURE__ */ jsx38(
|
|
4168
4416
|
Input,
|
|
4169
4417
|
{
|
|
4170
4418
|
"data-slot": "input-group-control",
|
|
@@ -4185,7 +4433,7 @@ function InputGroupTextarea({
|
|
|
4185
4433
|
className,
|
|
4186
4434
|
...props
|
|
4187
4435
|
}) {
|
|
4188
|
-
return /* @__PURE__ */
|
|
4436
|
+
return /* @__PURE__ */ jsx38(
|
|
4189
4437
|
Textarea,
|
|
4190
4438
|
{
|
|
4191
4439
|
"data-slot": "input-group-control",
|
|
@@ -4199,17 +4447,16 @@ function InputGroupTextarea({
|
|
|
4199
4447
|
}
|
|
4200
4448
|
|
|
4201
4449
|
// src/components/ui/input-otp.tsx
|
|
4202
|
-
import * as
|
|
4450
|
+
import * as React17 from "react";
|
|
4203
4451
|
import { OTPInput, OTPInputContext } from "input-otp";
|
|
4204
|
-
import {
|
|
4205
|
-
import { jsx as jsx37, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4452
|
+
import { jsx as jsx39, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4206
4453
|
function InputOTP({
|
|
4207
4454
|
className,
|
|
4208
4455
|
containerClassName,
|
|
4209
4456
|
dir = "ltr",
|
|
4210
4457
|
...props
|
|
4211
4458
|
}) {
|
|
4212
|
-
return /* @__PURE__ */
|
|
4459
|
+
return /* @__PURE__ */ jsx39("div", { dir: dir ?? "ltr", children: /* @__PURE__ */ jsx39(
|
|
4213
4460
|
OTPInput,
|
|
4214
4461
|
{
|
|
4215
4462
|
"data-slot": "input-otp",
|
|
@@ -4224,7 +4471,7 @@ function InputOTP({
|
|
|
4224
4471
|
) });
|
|
4225
4472
|
}
|
|
4226
4473
|
function InputOTPGroup({ className, ...props }) {
|
|
4227
|
-
return /* @__PURE__ */
|
|
4474
|
+
return /* @__PURE__ */ jsx39(
|
|
4228
4475
|
"div",
|
|
4229
4476
|
{
|
|
4230
4477
|
"data-slot": "input-otp-group",
|
|
@@ -4239,9 +4486,9 @@ function InputOTPSlot({
|
|
|
4239
4486
|
className,
|
|
4240
4487
|
...props
|
|
4241
4488
|
}) {
|
|
4242
|
-
const inputOTPContext =
|
|
4489
|
+
const inputOTPContext = React17.useContext(OTPInputContext);
|
|
4243
4490
|
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
4244
|
-
return /* @__PURE__ */
|
|
4491
|
+
return /* @__PURE__ */ jsxs22(
|
|
4245
4492
|
"div",
|
|
4246
4493
|
{
|
|
4247
4494
|
"data-slot": "input-otp-slot",
|
|
@@ -4254,36 +4501,36 @@ function InputOTPSlot({
|
|
|
4254
4501
|
...props,
|
|
4255
4502
|
children: [
|
|
4256
4503
|
char,
|
|
4257
|
-
hasFakeCaret && /* @__PURE__ */
|
|
4504
|
+
hasFakeCaret && /* @__PURE__ */ jsx39("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx39("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
|
|
4258
4505
|
]
|
|
4259
4506
|
}
|
|
4260
4507
|
);
|
|
4261
4508
|
}
|
|
4262
4509
|
function InputOTPSeparator({ ...props }) {
|
|
4263
|
-
return /* @__PURE__ */
|
|
4510
|
+
return /* @__PURE__ */ jsx39(
|
|
4264
4511
|
"div",
|
|
4265
4512
|
{
|
|
4266
4513
|
"data-slot": "input-otp-separator",
|
|
4267
4514
|
role: "separator",
|
|
4268
4515
|
dir: "ltr",
|
|
4269
4516
|
...props,
|
|
4270
|
-
children: /* @__PURE__ */
|
|
4517
|
+
children: /* @__PURE__ */ jsx39(Icons.minus, {})
|
|
4271
4518
|
}
|
|
4272
4519
|
);
|
|
4273
4520
|
}
|
|
4274
4521
|
|
|
4275
4522
|
// src/components/ui/instagram-post.tsx
|
|
4276
|
-
import * as
|
|
4277
|
-
import { cva as
|
|
4523
|
+
import * as React19 from "react";
|
|
4524
|
+
import { cva as cva10 } from "class-variance-authority";
|
|
4278
4525
|
|
|
4279
4526
|
// src/components/ui/tooltip.tsx
|
|
4280
|
-
import * as
|
|
4527
|
+
import * as React18 from "react";
|
|
4281
4528
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
4282
|
-
import { jsx as
|
|
4529
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
|
4283
4530
|
var TooltipProvider = TooltipPrimitive.Provider;
|
|
4284
4531
|
var Tooltip = TooltipPrimitive.Root;
|
|
4285
4532
|
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
4286
|
-
var TooltipContent =
|
|
4533
|
+
var TooltipContent = React18.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx40(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx40(
|
|
4287
4534
|
TooltipPrimitive.Content,
|
|
4288
4535
|
{
|
|
4289
4536
|
ref,
|
|
@@ -4298,8 +4545,8 @@ var TooltipContent = React16.forwardRef(({ className, sideOffset = 4, ...props }
|
|
|
4298
4545
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
4299
4546
|
|
|
4300
4547
|
// src/components/ui/instagram-post.tsx
|
|
4301
|
-
import { Fragment as Fragment4, jsx as
|
|
4302
|
-
var instagramPostVariants =
|
|
4548
|
+
import { Fragment as Fragment4, jsx as jsx41, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
4549
|
+
var instagramPostVariants = cva10(
|
|
4303
4550
|
"relative border bg-background-surface-100",
|
|
4304
4551
|
{
|
|
4305
4552
|
variants: {
|
|
@@ -4319,17 +4566,22 @@ function InstagramPostMedia({
|
|
|
4319
4566
|
variant = "vertical",
|
|
4320
4567
|
placeholderText = "No media available"
|
|
4321
4568
|
}) {
|
|
4569
|
+
const [imageError, setImageError] = React19.useState({});
|
|
4570
|
+
const handleImageError = (url) => {
|
|
4571
|
+
setImageError((prev) => ({ ...prev, [url]: true }));
|
|
4572
|
+
};
|
|
4573
|
+
const renderPlaceholder = () => /* @__PURE__ */ jsx41("div", { className: "w-full h-full flex items-center justify-center bg-muted/10 dark:bg-muted/5", children: /* @__PURE__ */ jsx41(Icons.imageOff, { className: "size-12 text-muted-foreground/50" }) });
|
|
4322
4574
|
if (!media || media.length === 0) {
|
|
4323
|
-
return /* @__PURE__ */
|
|
4575
|
+
return /* @__PURE__ */ jsx41(
|
|
4324
4576
|
"div",
|
|
4325
4577
|
{
|
|
4326
4578
|
className: cn(
|
|
4327
4579
|
"flex items-center justify-center bg-muted/30",
|
|
4328
4580
|
variant === "vertical" ? "aspect-square" : "w-[20%] shrink-0 h-full min-h-[200px] -my-[1px] -ms-[1px]"
|
|
4329
4581
|
),
|
|
4330
|
-
children: /* @__PURE__ */
|
|
4331
|
-
/* @__PURE__ */
|
|
4332
|
-
/* @__PURE__ */
|
|
4582
|
+
children: /* @__PURE__ */ jsxs23("div", { className: "text-center p-4", children: [
|
|
4583
|
+
/* @__PURE__ */ jsx41(Icons.imageOff, { className: "size-12 mx-auto mb-2 text-muted-foreground" }),
|
|
4584
|
+
/* @__PURE__ */ jsx41("p", { className: "text-sm text-muted-foreground", children: placeholderText })
|
|
4333
4585
|
] })
|
|
4334
4586
|
}
|
|
4335
4587
|
);
|
|
@@ -4337,27 +4589,29 @@ function InstagramPostMedia({
|
|
|
4337
4589
|
if (mediaType === "image" || media.length === 1 && media[0].type === "image") {
|
|
4338
4590
|
const item = media[0];
|
|
4339
4591
|
if (variant === "horizontal") {
|
|
4340
|
-
return /* @__PURE__ */
|
|
4341
|
-
/* @__PURE__ */
|
|
4342
|
-
/* @__PURE__ */
|
|
4592
|
+
return /* @__PURE__ */ jsxs23("div", { className: "w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30", children: [
|
|
4593
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4594
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4343
4595
|
"img",
|
|
4344
4596
|
{
|
|
4345
4597
|
src: item.url,
|
|
4346
4598
|
alt: "Post media",
|
|
4347
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4599
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4600
|
+
onError: () => handleImageError(item.url)
|
|
4348
4601
|
}
|
|
4349
4602
|
)
|
|
4350
4603
|
] });
|
|
4351
4604
|
}
|
|
4352
4605
|
const ratio = getAspectRatio(item.aspectRatio || "1:1");
|
|
4353
|
-
return /* @__PURE__ */
|
|
4354
|
-
/* @__PURE__ */
|
|
4355
|
-
/* @__PURE__ */
|
|
4606
|
+
return /* @__PURE__ */ jsxs23("div", { className: "w-full relative overflow-hidden group cursor-pointer bg-muted/30", style: { aspectRatio: ratio }, children: [
|
|
4607
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4608
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4356
4609
|
"img",
|
|
4357
4610
|
{
|
|
4358
4611
|
src: item.url,
|
|
4359
4612
|
alt: "Post media",
|
|
4360
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4613
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4614
|
+
onError: () => handleImageError(item.url)
|
|
4361
4615
|
}
|
|
4362
4616
|
)
|
|
4363
4617
|
] });
|
|
@@ -4365,70 +4619,74 @@ function InstagramPostMedia({
|
|
|
4365
4619
|
if (mediaType === "video" || media.length === 1 && media[0].type === "video") {
|
|
4366
4620
|
const item = media[0];
|
|
4367
4621
|
if (variant === "horizontal") {
|
|
4368
|
-
return /* @__PURE__ */
|
|
4369
|
-
/* @__PURE__ */
|
|
4370
|
-
/* @__PURE__ */
|
|
4622
|
+
return /* @__PURE__ */ jsxs23("div", { className: "w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30", children: [
|
|
4623
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4624
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4371
4625
|
"img",
|
|
4372
4626
|
{
|
|
4373
4627
|
src: item.url,
|
|
4374
4628
|
alt: "Post media",
|
|
4375
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4629
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4630
|
+
onError: () => handleImageError(item.url)
|
|
4376
4631
|
}
|
|
4377
4632
|
)
|
|
4378
4633
|
] });
|
|
4379
4634
|
}
|
|
4380
4635
|
const ratio = getAspectRatio(item.aspectRatio || "16:9");
|
|
4381
|
-
return /* @__PURE__ */
|
|
4382
|
-
/* @__PURE__ */
|
|
4383
|
-
/* @__PURE__ */
|
|
4636
|
+
return /* @__PURE__ */ jsxs23("div", { className: "w-full relative overflow-hidden group cursor-pointer bg-muted/30", style: { aspectRatio: ratio }, children: [
|
|
4637
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4638
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4384
4639
|
"img",
|
|
4385
4640
|
{
|
|
4386
4641
|
src: item.url,
|
|
4387
4642
|
alt: "Post media",
|
|
4388
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4643
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4644
|
+
onError: () => handleImageError(item.url)
|
|
4389
4645
|
}
|
|
4390
4646
|
)
|
|
4391
4647
|
] });
|
|
4392
4648
|
}
|
|
4393
4649
|
if (mediaType === "carousel" || media.length > 1) {
|
|
4394
4650
|
if (variant === "horizontal") {
|
|
4395
|
-
return /* @__PURE__ */
|
|
4396
|
-
/* @__PURE__ */
|
|
4397
|
-
/* @__PURE__ */
|
|
4398
|
-
/* @__PURE__ */
|
|
4651
|
+
return /* @__PURE__ */ jsx41("div", { className: "w-[20%] shrink-0 relative overflow-hidden group cursor-pointer h-full -my-[1px] -ms-[1px] bg-muted/30", children: /* @__PURE__ */ jsxs23(Carousel, { className: "w-full h-full", children: [
|
|
4652
|
+
/* @__PURE__ */ jsx41(CarouselContent, { className: "h-full", children: media.map((item, index) => /* @__PURE__ */ jsxs23(CarouselItem, { className: "h-full", children: [
|
|
4653
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4654
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4399
4655
|
"img",
|
|
4400
4656
|
{
|
|
4401
4657
|
src: item.url,
|
|
4402
4658
|
alt: `Post media ${index + 1}`,
|
|
4403
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4659
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4660
|
+
onError: () => handleImageError(item.url)
|
|
4404
4661
|
}
|
|
4405
4662
|
)
|
|
4406
4663
|
] }, index)) }),
|
|
4407
|
-
/* @__PURE__ */
|
|
4408
|
-
/* @__PURE__ */
|
|
4664
|
+
/* @__PURE__ */ jsx41(CarouselPrevious, { className: "ms-2" }),
|
|
4665
|
+
/* @__PURE__ */ jsx41(CarouselNext, { className: "me-2" })
|
|
4409
4666
|
] }) });
|
|
4410
4667
|
}
|
|
4411
|
-
return /* @__PURE__ */
|
|
4412
|
-
/* @__PURE__ */
|
|
4668
|
+
return /* @__PURE__ */ jsxs23(Carousel, { className: "w-full", children: [
|
|
4669
|
+
/* @__PURE__ */ jsx41(CarouselContent, { children: media.map((item, index) => /* @__PURE__ */ jsx41(CarouselItem, { children: /* @__PURE__ */ jsxs23(
|
|
4413
4670
|
"div",
|
|
4414
4671
|
{
|
|
4415
|
-
className: "w-full relative overflow-hidden group cursor-pointer",
|
|
4672
|
+
className: "w-full relative overflow-hidden group cursor-pointer bg-muted/30",
|
|
4416
4673
|
style: { aspectRatio: getAspectRatio(item.aspectRatio || (item.type === "video" ? "16:9" : "1:1")) },
|
|
4417
4674
|
children: [
|
|
4418
|
-
/* @__PURE__ */
|
|
4419
|
-
/* @__PURE__ */
|
|
4675
|
+
/* @__PURE__ */ jsx41("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors duration-300 z-10" }),
|
|
4676
|
+
imageError[item.url] ? renderPlaceholder() : /* @__PURE__ */ jsx41(
|
|
4420
4677
|
"img",
|
|
4421
4678
|
{
|
|
4422
4679
|
src: item.url,
|
|
4423
4680
|
alt: `Post media ${index + 1}`,
|
|
4424
|
-
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
|
|
4681
|
+
className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300",
|
|
4682
|
+
onError: () => handleImageError(item.url)
|
|
4425
4683
|
}
|
|
4426
4684
|
)
|
|
4427
4685
|
]
|
|
4428
4686
|
}
|
|
4429
4687
|
) }, index)) }),
|
|
4430
|
-
/* @__PURE__ */
|
|
4431
|
-
/* @__PURE__ */
|
|
4688
|
+
/* @__PURE__ */ jsx41(CarouselPrevious, { className: "ms-2" }),
|
|
4689
|
+
/* @__PURE__ */ jsx41(CarouselNext, { className: "me-2" })
|
|
4432
4690
|
] });
|
|
4433
4691
|
}
|
|
4434
4692
|
return null;
|
|
@@ -4448,10 +4706,10 @@ function InstagramPostCaption({
|
|
|
4448
4706
|
maxLines = 3,
|
|
4449
4707
|
variant = "vertical"
|
|
4450
4708
|
}) {
|
|
4451
|
-
const [isExpanded, setIsExpanded] =
|
|
4452
|
-
const [shouldShowMore, setShouldShowMore] =
|
|
4453
|
-
const textRef =
|
|
4454
|
-
|
|
4709
|
+
const [isExpanded, setIsExpanded] = React19.useState(false);
|
|
4710
|
+
const [shouldShowMore, setShouldShowMore] = React19.useState(false);
|
|
4711
|
+
const textRef = React19.useRef(null);
|
|
4712
|
+
React19.useEffect(() => {
|
|
4455
4713
|
if (variant === "vertical" && textRef.current && !isExpanded) {
|
|
4456
4714
|
const lineHeight = parseInt(window.getComputedStyle(textRef.current).lineHeight);
|
|
4457
4715
|
const maxHeight = lineHeight * maxLines;
|
|
@@ -4462,11 +4720,11 @@ function InstagramPostCaption({
|
|
|
4462
4720
|
}, [caption, maxLines, isExpanded, variant]);
|
|
4463
4721
|
if (!caption) return null;
|
|
4464
4722
|
const parsedCaption = parseCaption(caption);
|
|
4465
|
-
return /* @__PURE__ */
|
|
4723
|
+
return /* @__PURE__ */ jsxs23("div", { className: cn(
|
|
4466
4724
|
"px-4 py-2",
|
|
4467
4725
|
variant === "horizontal" && "overflow-visible"
|
|
4468
4726
|
), children: [
|
|
4469
|
-
/* @__PURE__ */
|
|
4727
|
+
/* @__PURE__ */ jsx41(
|
|
4470
4728
|
"p",
|
|
4471
4729
|
{
|
|
4472
4730
|
ref: textRef,
|
|
@@ -4483,7 +4741,7 @@ function InstagramPostCaption({
|
|
|
4483
4741
|
} : void 0,
|
|
4484
4742
|
children: parsedCaption.map((part, index) => {
|
|
4485
4743
|
if (part.type === "hashtag") {
|
|
4486
|
-
return /* @__PURE__ */
|
|
4744
|
+
return /* @__PURE__ */ jsx41(
|
|
4487
4745
|
"span",
|
|
4488
4746
|
{
|
|
4489
4747
|
className: "text-brand-link hover:underline cursor-pointer",
|
|
@@ -4493,7 +4751,7 @@ function InstagramPostCaption({
|
|
|
4493
4751
|
);
|
|
4494
4752
|
}
|
|
4495
4753
|
if (part.type === "mention") {
|
|
4496
|
-
return /* @__PURE__ */
|
|
4754
|
+
return /* @__PURE__ */ jsx41(
|
|
4497
4755
|
"span",
|
|
4498
4756
|
{
|
|
4499
4757
|
className: "text-brand-link hover:underline cursor-pointer font-medium",
|
|
@@ -4502,11 +4760,11 @@ function InstagramPostCaption({
|
|
|
4502
4760
|
index
|
|
4503
4761
|
);
|
|
4504
4762
|
}
|
|
4505
|
-
return /* @__PURE__ */
|
|
4763
|
+
return /* @__PURE__ */ jsx41("span", { children: part.text }, index);
|
|
4506
4764
|
})
|
|
4507
4765
|
}
|
|
4508
4766
|
),
|
|
4509
|
-
shouldShowMore && variant === "vertical" && /* @__PURE__ */
|
|
4767
|
+
shouldShowMore && variant === "vertical" && /* @__PURE__ */ jsx41(
|
|
4510
4768
|
"button",
|
|
4511
4769
|
{
|
|
4512
4770
|
onClick: () => setIsExpanded(!isExpanded),
|
|
@@ -4612,15 +4870,15 @@ function InstagramPostStats({
|
|
|
4612
4870
|
});
|
|
4613
4871
|
}
|
|
4614
4872
|
if (items.length === 0) return null;
|
|
4615
|
-
return /* @__PURE__ */
|
|
4873
|
+
return /* @__PURE__ */ jsx41(TooltipProvider, { children: /* @__PURE__ */ jsx41("div", { className: "px-4 py-2 flex items-center gap-4 text-sm text-foreground-light border-t border-border-default", dir: "ltr", children: items.map((item, index) => {
|
|
4616
4874
|
const Icon2 = item.icon;
|
|
4617
|
-
return /* @__PURE__ */
|
|
4618
|
-
/* @__PURE__ */
|
|
4619
|
-
/* @__PURE__ */
|
|
4620
|
-
/* @__PURE__ */
|
|
4621
|
-
/* @__PURE__ */
|
|
4875
|
+
return /* @__PURE__ */ jsxs23(Tooltip, { children: [
|
|
4876
|
+
/* @__PURE__ */ jsx41(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-1.5 cursor-default", children: [
|
|
4877
|
+
/* @__PURE__ */ jsx41(Icon2, { className: "size-4" }),
|
|
4878
|
+
/* @__PURE__ */ jsx41("span", { className: item.isPostType ? "text-xs" : "", children: item.value }),
|
|
4879
|
+
/* @__PURE__ */ jsx41("span", { className: "sr-only", children: item.labelEn })
|
|
4622
4880
|
] }) }),
|
|
4623
|
-
/* @__PURE__ */
|
|
4881
|
+
/* @__PURE__ */ jsx41(TooltipContent, { children: /* @__PURE__ */ jsxs23("p", { children: [
|
|
4624
4882
|
item.label,
|
|
4625
4883
|
": ",
|
|
4626
4884
|
item.exactValue
|
|
@@ -4635,7 +4893,7 @@ function InstagramPostProfile({
|
|
|
4635
4893
|
}) {
|
|
4636
4894
|
if (!profile) return null;
|
|
4637
4895
|
const displayAvatarUrl = avatarUrl || profile.avatarUrl || profile.profilePicture;
|
|
4638
|
-
return /* @__PURE__ */
|
|
4896
|
+
return /* @__PURE__ */ jsxs23(
|
|
4639
4897
|
"div",
|
|
4640
4898
|
{
|
|
4641
4899
|
className: cn(
|
|
@@ -4644,13 +4902,13 @@ function InstagramPostProfile({
|
|
|
4644
4902
|
variant === "horizontal" && "pb-2"
|
|
4645
4903
|
),
|
|
4646
4904
|
children: [
|
|
4647
|
-
/* @__PURE__ */
|
|
4648
|
-
displayAvatarUrl && /* @__PURE__ */
|
|
4649
|
-
/* @__PURE__ */
|
|
4905
|
+
/* @__PURE__ */ jsxs23(Avatar, { className: "size-10", children: [
|
|
4906
|
+
displayAvatarUrl && /* @__PURE__ */ jsx41(AvatarImage, { src: displayAvatarUrl, alt: profile.username }),
|
|
4907
|
+
/* @__PURE__ */ jsx41(AvatarFallback, { children: profile.username.charAt(0).toUpperCase() })
|
|
4650
4908
|
] }),
|
|
4651
|
-
/* @__PURE__ */
|
|
4652
|
-
/* @__PURE__ */
|
|
4653
|
-
profile.fullName && /* @__PURE__ */
|
|
4909
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
|
|
4910
|
+
/* @__PURE__ */ jsx41("div", { className: "font-semibold text-sm truncate", children: profile.username }),
|
|
4911
|
+
profile.fullName && /* @__PURE__ */ jsx41("div", { className: "text-xs text-muted-foreground truncate", children: profile.fullName })
|
|
4654
4912
|
] })
|
|
4655
4913
|
]
|
|
4656
4914
|
}
|
|
@@ -4687,9 +4945,9 @@ function InstagramPostActions({
|
|
|
4687
4945
|
onAIAnalysis();
|
|
4688
4946
|
}
|
|
4689
4947
|
};
|
|
4690
|
-
return /* @__PURE__ */
|
|
4691
|
-
/* @__PURE__ */
|
|
4692
|
-
/* @__PURE__ */
|
|
4948
|
+
return /* @__PURE__ */ jsx41(TooltipProvider, { children: /* @__PURE__ */ jsxs23("div", { className: "absolute top-2 end-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity z-10", children: [
|
|
4949
|
+
/* @__PURE__ */ jsxs23(Tooltip, { children: [
|
|
4950
|
+
/* @__PURE__ */ jsx41(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx41(
|
|
4693
4951
|
Button,
|
|
4694
4952
|
{
|
|
4695
4953
|
variant: "ghost",
|
|
@@ -4697,13 +4955,13 @@ function InstagramPostActions({
|
|
|
4697
4955
|
className: "size-8 bg-background/80 backdrop-blur-sm hover:bg-background",
|
|
4698
4956
|
onClick: handleCommentAnalyzer,
|
|
4699
4957
|
"aria-label": "Comment Analyzer",
|
|
4700
|
-
children: /* @__PURE__ */
|
|
4958
|
+
children: /* @__PURE__ */ jsx41(Icons.messageCircle, { className: "size-4" })
|
|
4701
4959
|
}
|
|
4702
4960
|
) }),
|
|
4703
|
-
/* @__PURE__ */
|
|
4961
|
+
/* @__PURE__ */ jsx41(TooltipContent, { children: /* @__PURE__ */ jsx41("p", { children: "\u062A\u062D\u0644\u06CC\u0644 \u06A9\u0627\u0645\u0646\u062A\u200C\u0647\u0627" }) })
|
|
4704
4962
|
] }),
|
|
4705
|
-
/* @__PURE__ */
|
|
4706
|
-
/* @__PURE__ */
|
|
4963
|
+
/* @__PURE__ */ jsxs23(Tooltip, { children: [
|
|
4964
|
+
/* @__PURE__ */ jsx41(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx41(
|
|
4707
4965
|
Button,
|
|
4708
4966
|
{
|
|
4709
4967
|
variant: "ghost",
|
|
@@ -4711,13 +4969,13 @@ function InstagramPostActions({
|
|
|
4711
4969
|
className: "size-8 bg-background/80 backdrop-blur-sm hover:bg-background",
|
|
4712
4970
|
onClick: handleBooster,
|
|
4713
4971
|
"aria-label": "Booster",
|
|
4714
|
-
children: /* @__PURE__ */
|
|
4972
|
+
children: /* @__PURE__ */ jsx41(Icons.rocket, { className: "size-4" })
|
|
4715
4973
|
}
|
|
4716
4974
|
) }),
|
|
4717
|
-
/* @__PURE__ */
|
|
4975
|
+
/* @__PURE__ */ jsx41(TooltipContent, { children: /* @__PURE__ */ jsx41("p", { children: "\u0628\u0648\u0633\u062A\u0631" }) })
|
|
4718
4976
|
] }),
|
|
4719
|
-
/* @__PURE__ */
|
|
4720
|
-
/* @__PURE__ */
|
|
4977
|
+
/* @__PURE__ */ jsxs23(Tooltip, { children: [
|
|
4978
|
+
/* @__PURE__ */ jsx41(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx41(
|
|
4721
4979
|
Button,
|
|
4722
4980
|
{
|
|
4723
4981
|
variant: "ghost",
|
|
@@ -4725,13 +4983,13 @@ function InstagramPostActions({
|
|
|
4725
4983
|
className: "size-8 bg-background/80 backdrop-blur-sm hover:bg-background",
|
|
4726
4984
|
onClick: handleAIAnalysis,
|
|
4727
4985
|
"aria-label": "AI Analysis",
|
|
4728
|
-
children: /* @__PURE__ */
|
|
4986
|
+
children: /* @__PURE__ */ jsx41(Icons.sparkles, { className: "size-4" })
|
|
4729
4987
|
}
|
|
4730
4988
|
) }),
|
|
4731
|
-
/* @__PURE__ */
|
|
4989
|
+
/* @__PURE__ */ jsx41(TooltipContent, { children: /* @__PURE__ */ jsx41("p", { children: "\u062A\u062D\u0644\u06CC\u0644 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06CC" }) })
|
|
4732
4990
|
] }),
|
|
4733
|
-
/* @__PURE__ */
|
|
4734
|
-
/* @__PURE__ */
|
|
4991
|
+
/* @__PURE__ */ jsxs23(Tooltip, { children: [
|
|
4992
|
+
/* @__PURE__ */ jsx41(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx41(
|
|
4735
4993
|
Button,
|
|
4736
4994
|
{
|
|
4737
4995
|
variant: "ghost",
|
|
@@ -4739,10 +4997,10 @@ function InstagramPostActions({
|
|
|
4739
4997
|
className: "size-8 bg-background/80 backdrop-blur-sm hover:bg-background",
|
|
4740
4998
|
onClick: handleOpenInstagram,
|
|
4741
4999
|
"aria-label": "Open on Instagram",
|
|
4742
|
-
children: /* @__PURE__ */
|
|
5000
|
+
children: /* @__PURE__ */ jsx41(Icons.instagram, { className: "size-4" })
|
|
4743
5001
|
}
|
|
4744
5002
|
) }),
|
|
4745
|
-
/* @__PURE__ */
|
|
5003
|
+
/* @__PURE__ */ jsx41(TooltipContent, { children: /* @__PURE__ */ jsx41("p", { children: "\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u062F\u0631 \u0627\u06CC\u0646\u0633\u062A\u0627\u06AF\u0631\u0627\u0645" }) })
|
|
4746
5004
|
] })
|
|
4747
5005
|
] }) });
|
|
4748
5006
|
}
|
|
@@ -4754,25 +5012,25 @@ function InstagramPostTime({
|
|
|
4754
5012
|
const relativeTime = formatRelativeTime(publishTime);
|
|
4755
5013
|
const absoluteTime = formatAbsoluteTime(publishTime);
|
|
4756
5014
|
if (timeFormat === "absolute") {
|
|
4757
|
-
return /* @__PURE__ */
|
|
4758
|
-
/* @__PURE__ */
|
|
4759
|
-
/* @__PURE__ */
|
|
5015
|
+
return /* @__PURE__ */ jsxs23("div", { className: "px-4 py-1 text-xs text-muted-foreground flex items-center gap-1.5", dir: "ltr", children: [
|
|
5016
|
+
/* @__PURE__ */ jsx41(Icons.clock, { className: "size-3" }),
|
|
5017
|
+
/* @__PURE__ */ jsx41("span", { children: absoluteTime })
|
|
4760
5018
|
] });
|
|
4761
5019
|
}
|
|
4762
|
-
return /* @__PURE__ */
|
|
5020
|
+
return /* @__PURE__ */ jsxs23(
|
|
4763
5021
|
"div",
|
|
4764
5022
|
{
|
|
4765
5023
|
className: "px-4 py-1 text-xs text-muted-foreground cursor-default flex items-center gap-1.5",
|
|
4766
5024
|
title: absoluteTime,
|
|
4767
5025
|
dir: "ltr",
|
|
4768
5026
|
children: [
|
|
4769
|
-
/* @__PURE__ */
|
|
4770
|
-
/* @__PURE__ */
|
|
5027
|
+
/* @__PURE__ */ jsx41(Icons.clock, { className: "size-3" }),
|
|
5028
|
+
/* @__PURE__ */ jsx41("span", { children: relativeTime })
|
|
4771
5029
|
]
|
|
4772
5030
|
}
|
|
4773
5031
|
);
|
|
4774
5032
|
}
|
|
4775
|
-
var InstagramPost =
|
|
5033
|
+
var InstagramPost = React19.forwardRef(
|
|
4776
5034
|
({
|
|
4777
5035
|
className,
|
|
4778
5036
|
variant = "vertical",
|
|
@@ -4803,7 +5061,7 @@ var InstagramPost = React17.forwardRef(
|
|
|
4803
5061
|
...props
|
|
4804
5062
|
}, ref) => {
|
|
4805
5063
|
const isVertical = variant === "vertical";
|
|
4806
|
-
return /* @__PURE__ */
|
|
5064
|
+
return /* @__PURE__ */ jsxs23(
|
|
4807
5065
|
"div",
|
|
4808
5066
|
{
|
|
4809
5067
|
ref,
|
|
@@ -4811,7 +5069,7 @@ var InstagramPost = React17.forwardRef(
|
|
|
4811
5069
|
dir,
|
|
4812
5070
|
...props,
|
|
4813
5071
|
children: [
|
|
4814
|
-
showActions && /* @__PURE__ */
|
|
5072
|
+
showActions && /* @__PURE__ */ jsx41(
|
|
4815
5073
|
InstagramPostActions,
|
|
4816
5074
|
{
|
|
4817
5075
|
showActions,
|
|
@@ -4822,9 +5080,9 @@ var InstagramPost = React17.forwardRef(
|
|
|
4822
5080
|
instagramUrl
|
|
4823
5081
|
}
|
|
4824
5082
|
),
|
|
4825
|
-
isVertical ? /* @__PURE__ */
|
|
4826
|
-
showProfile && /* @__PURE__ */
|
|
4827
|
-
/* @__PURE__ */
|
|
5083
|
+
isVertical ? /* @__PURE__ */ jsxs23(Fragment4, { children: [
|
|
5084
|
+
showProfile && /* @__PURE__ */ jsx41(InstagramPostProfile, { profile, variant: variant || "vertical", avatarUrl }),
|
|
5085
|
+
/* @__PURE__ */ jsx41("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx41(
|
|
4828
5086
|
InstagramPostMedia,
|
|
4829
5087
|
{
|
|
4830
5088
|
media,
|
|
@@ -4833,7 +5091,7 @@ var InstagramPost = React17.forwardRef(
|
|
|
4833
5091
|
placeholderText
|
|
4834
5092
|
}
|
|
4835
5093
|
) }),
|
|
4836
|
-
/* @__PURE__ */
|
|
5094
|
+
/* @__PURE__ */ jsx41(
|
|
4837
5095
|
InstagramPostStats,
|
|
4838
5096
|
{
|
|
4839
5097
|
stats,
|
|
@@ -4845,16 +5103,16 @@ var InstagramPost = React17.forwardRef(
|
|
|
4845
5103
|
postType
|
|
4846
5104
|
}
|
|
4847
5105
|
),
|
|
4848
|
-
showCaption && /* @__PURE__ */
|
|
4849
|
-
/* @__PURE__ */
|
|
5106
|
+
showCaption && /* @__PURE__ */ jsx41(InstagramPostCaption, { caption, variant: variant || "vertical" }),
|
|
5107
|
+
/* @__PURE__ */ jsx41("div", { className: "mt-auto w-full", children: /* @__PURE__ */ jsx41(
|
|
4850
5108
|
InstagramPostTime,
|
|
4851
5109
|
{
|
|
4852
5110
|
publishTime,
|
|
4853
5111
|
timeFormat
|
|
4854
5112
|
}
|
|
4855
5113
|
) })
|
|
4856
|
-
] }) : /* @__PURE__ */
|
|
4857
|
-
/* @__PURE__ */
|
|
5114
|
+
] }) : /* @__PURE__ */ jsxs23(Fragment4, { children: [
|
|
5115
|
+
/* @__PURE__ */ jsx41(
|
|
4858
5116
|
InstagramPostMedia,
|
|
4859
5117
|
{
|
|
4860
5118
|
media,
|
|
@@ -4863,9 +5121,9 @@ var InstagramPost = React17.forwardRef(
|
|
|
4863
5121
|
placeholderText
|
|
4864
5122
|
}
|
|
4865
5123
|
),
|
|
4866
|
-
/* @__PURE__ */
|
|
4867
|
-
showProfile && /* @__PURE__ */
|
|
4868
|
-
/* @__PURE__ */
|
|
5124
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex-1 flex flex-col min-w-0 overflow-hidden rounded-e-lg", children: [
|
|
5125
|
+
showProfile && /* @__PURE__ */ jsx41(InstagramPostProfile, { profile, variant: variant || "horizontal", avatarUrl }),
|
|
5126
|
+
/* @__PURE__ */ jsx41(
|
|
4869
5127
|
InstagramPostStats,
|
|
4870
5128
|
{
|
|
4871
5129
|
stats,
|
|
@@ -4877,8 +5135,8 @@ var InstagramPost = React17.forwardRef(
|
|
|
4877
5135
|
postType
|
|
4878
5136
|
}
|
|
4879
5137
|
),
|
|
4880
|
-
showCaption && /* @__PURE__ */
|
|
4881
|
-
/* @__PURE__ */
|
|
5138
|
+
showCaption && /* @__PURE__ */ jsx41(InstagramPostCaption, { caption, variant: variant || "horizontal" }),
|
|
5139
|
+
/* @__PURE__ */ jsx41("div", { className: "mt-auto w-full", children: /* @__PURE__ */ jsx41(
|
|
4882
5140
|
InstagramPostTime,
|
|
4883
5141
|
{
|
|
4884
5142
|
publishTime,
|
|
@@ -4895,9 +5153,9 @@ var InstagramPost = React17.forwardRef(
|
|
|
4895
5153
|
InstagramPost.displayName = "InstagramPost";
|
|
4896
5154
|
|
|
4897
5155
|
// src/components/ui/kbd.tsx
|
|
4898
|
-
import { jsx as
|
|
5156
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
4899
5157
|
function Kbd({ className, ...props }) {
|
|
4900
|
-
return /* @__PURE__ */
|
|
5158
|
+
return /* @__PURE__ */ jsx42(
|
|
4901
5159
|
"kbd",
|
|
4902
5160
|
{
|
|
4903
5161
|
"data-slot": "kbd",
|
|
@@ -4912,7 +5170,7 @@ function Kbd({ className, ...props }) {
|
|
|
4912
5170
|
);
|
|
4913
5171
|
}
|
|
4914
5172
|
function KbdGroup({ className, ...props }) {
|
|
4915
|
-
return /* @__PURE__ */
|
|
5173
|
+
return /* @__PURE__ */ jsx42(
|
|
4916
5174
|
"kbd",
|
|
4917
5175
|
{
|
|
4918
5176
|
"data-slot": "kbd-group",
|
|
@@ -4924,13 +5182,12 @@ function KbdGroup({ className, ...props }) {
|
|
|
4924
5182
|
|
|
4925
5183
|
// src/components/ui/menubar.tsx
|
|
4926
5184
|
import * as MenubarPrimitive from "@radix-ui/react-menubar";
|
|
4927
|
-
import {
|
|
4928
|
-
import { jsx as jsx41, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5185
|
+
import { jsx as jsx43, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
4929
5186
|
function Menubar({
|
|
4930
5187
|
className,
|
|
4931
5188
|
...props
|
|
4932
5189
|
}) {
|
|
4933
|
-
return /* @__PURE__ */
|
|
5190
|
+
return /* @__PURE__ */ jsx43(
|
|
4934
5191
|
MenubarPrimitive.Root,
|
|
4935
5192
|
{
|
|
4936
5193
|
"data-slot": "menubar",
|
|
@@ -4945,28 +5202,28 @@ function Menubar({
|
|
|
4945
5202
|
function MenubarMenu({
|
|
4946
5203
|
...props
|
|
4947
5204
|
}) {
|
|
4948
|
-
return /* @__PURE__ */
|
|
5205
|
+
return /* @__PURE__ */ jsx43(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
|
|
4949
5206
|
}
|
|
4950
5207
|
function MenubarGroup({
|
|
4951
5208
|
...props
|
|
4952
5209
|
}) {
|
|
4953
|
-
return /* @__PURE__ */
|
|
5210
|
+
return /* @__PURE__ */ jsx43(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
|
|
4954
5211
|
}
|
|
4955
5212
|
function MenubarPortal({
|
|
4956
5213
|
...props
|
|
4957
5214
|
}) {
|
|
4958
|
-
return /* @__PURE__ */
|
|
5215
|
+
return /* @__PURE__ */ jsx43(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
|
|
4959
5216
|
}
|
|
4960
5217
|
function MenubarRadioGroup({
|
|
4961
5218
|
...props
|
|
4962
5219
|
}) {
|
|
4963
|
-
return /* @__PURE__ */
|
|
5220
|
+
return /* @__PURE__ */ jsx43(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
|
|
4964
5221
|
}
|
|
4965
5222
|
function MenubarTrigger({
|
|
4966
5223
|
className,
|
|
4967
5224
|
...props
|
|
4968
5225
|
}) {
|
|
4969
|
-
return /* @__PURE__ */
|
|
5226
|
+
return /* @__PURE__ */ jsx43(
|
|
4970
5227
|
MenubarPrimitive.Trigger,
|
|
4971
5228
|
{
|
|
4972
5229
|
"data-slot": "menubar-trigger",
|
|
@@ -4985,7 +5242,7 @@ function MenubarContent({
|
|
|
4985
5242
|
sideOffset = 8,
|
|
4986
5243
|
...props
|
|
4987
5244
|
}) {
|
|
4988
|
-
return /* @__PURE__ */
|
|
5245
|
+
return /* @__PURE__ */ jsx43(MenubarPortal, { children: /* @__PURE__ */ jsx43(
|
|
4989
5246
|
MenubarPrimitive.Content,
|
|
4990
5247
|
{
|
|
4991
5248
|
"data-slot": "menubar-content",
|
|
@@ -5006,7 +5263,7 @@ function MenubarItem({
|
|
|
5006
5263
|
variant = "default",
|
|
5007
5264
|
...props
|
|
5008
5265
|
}) {
|
|
5009
|
-
return /* @__PURE__ */
|
|
5266
|
+
return /* @__PURE__ */ jsx43(
|
|
5010
5267
|
MenubarPrimitive.Item,
|
|
5011
5268
|
{
|
|
5012
5269
|
"data-slot": "menubar-item",
|
|
@@ -5026,7 +5283,7 @@ function MenubarCheckboxItem({
|
|
|
5026
5283
|
checked,
|
|
5027
5284
|
...props
|
|
5028
5285
|
}) {
|
|
5029
|
-
return /* @__PURE__ */
|
|
5286
|
+
return /* @__PURE__ */ jsxs24(
|
|
5030
5287
|
MenubarPrimitive.CheckboxItem,
|
|
5031
5288
|
{
|
|
5032
5289
|
"data-slot": "menubar-checkbox-item",
|
|
@@ -5037,7 +5294,7 @@ function MenubarCheckboxItem({
|
|
|
5037
5294
|
checked,
|
|
5038
5295
|
...props,
|
|
5039
5296
|
children: [
|
|
5040
|
-
/* @__PURE__ */
|
|
5297
|
+
/* @__PURE__ */ jsx43("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx43(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx43(Icons.check, { className: "size-4" }) }) }),
|
|
5041
5298
|
children
|
|
5042
5299
|
]
|
|
5043
5300
|
}
|
|
@@ -5048,7 +5305,7 @@ function MenubarRadioItem({
|
|
|
5048
5305
|
children,
|
|
5049
5306
|
...props
|
|
5050
5307
|
}) {
|
|
5051
|
-
return /* @__PURE__ */
|
|
5308
|
+
return /* @__PURE__ */ jsxs24(
|
|
5052
5309
|
MenubarPrimitive.RadioItem,
|
|
5053
5310
|
{
|
|
5054
5311
|
"data-slot": "menubar-radio-item",
|
|
@@ -5058,7 +5315,7 @@ function MenubarRadioItem({
|
|
|
5058
5315
|
),
|
|
5059
5316
|
...props,
|
|
5060
5317
|
children: [
|
|
5061
|
-
/* @__PURE__ */
|
|
5318
|
+
/* @__PURE__ */ jsx43("span", { className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx43(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx43(Icons.circle, { className: "size-2 fill-current" }) }) }),
|
|
5062
5319
|
children
|
|
5063
5320
|
]
|
|
5064
5321
|
}
|
|
@@ -5069,7 +5326,7 @@ function MenubarLabel({
|
|
|
5069
5326
|
inset,
|
|
5070
5327
|
...props
|
|
5071
5328
|
}) {
|
|
5072
|
-
return /* @__PURE__ */
|
|
5329
|
+
return /* @__PURE__ */ jsx43(
|
|
5073
5330
|
MenubarPrimitive.Label,
|
|
5074
5331
|
{
|
|
5075
5332
|
"data-slot": "menubar-label",
|
|
@@ -5086,7 +5343,7 @@ function MenubarSeparator({
|
|
|
5086
5343
|
className,
|
|
5087
5344
|
...props
|
|
5088
5345
|
}) {
|
|
5089
|
-
return /* @__PURE__ */
|
|
5346
|
+
return /* @__PURE__ */ jsx43(
|
|
5090
5347
|
MenubarPrimitive.Separator,
|
|
5091
5348
|
{
|
|
5092
5349
|
"data-slot": "menubar-separator",
|
|
@@ -5099,7 +5356,7 @@ function MenubarShortcut({
|
|
|
5099
5356
|
className,
|
|
5100
5357
|
...props
|
|
5101
5358
|
}) {
|
|
5102
|
-
return /* @__PURE__ */
|
|
5359
|
+
return /* @__PURE__ */ jsx43(
|
|
5103
5360
|
"span",
|
|
5104
5361
|
{
|
|
5105
5362
|
"data-slot": "menubar-shortcut",
|
|
@@ -5114,7 +5371,7 @@ function MenubarShortcut({
|
|
|
5114
5371
|
function MenubarSub({
|
|
5115
5372
|
...props
|
|
5116
5373
|
}) {
|
|
5117
|
-
return /* @__PURE__ */
|
|
5374
|
+
return /* @__PURE__ */ jsx43(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
|
|
5118
5375
|
}
|
|
5119
5376
|
function MenubarSubTrigger({
|
|
5120
5377
|
className,
|
|
@@ -5122,7 +5379,7 @@ function MenubarSubTrigger({
|
|
|
5122
5379
|
children,
|
|
5123
5380
|
...props
|
|
5124
5381
|
}) {
|
|
5125
|
-
return /* @__PURE__ */
|
|
5382
|
+
return /* @__PURE__ */ jsxs24(
|
|
5126
5383
|
MenubarPrimitive.SubTrigger,
|
|
5127
5384
|
{
|
|
5128
5385
|
"data-slot": "menubar-sub-trigger",
|
|
@@ -5134,7 +5391,7 @@ function MenubarSubTrigger({
|
|
|
5134
5391
|
...props,
|
|
5135
5392
|
children: [
|
|
5136
5393
|
children,
|
|
5137
|
-
/* @__PURE__ */
|
|
5394
|
+
/* @__PURE__ */ jsx43(Icons.chevronRight, { className: "ms-auto h-4 w-4 rtl:rotate-180" })
|
|
5138
5395
|
]
|
|
5139
5396
|
}
|
|
5140
5397
|
);
|
|
@@ -5143,7 +5400,7 @@ function MenubarSubContent({
|
|
|
5143
5400
|
className,
|
|
5144
5401
|
...props
|
|
5145
5402
|
}) {
|
|
5146
|
-
return /* @__PURE__ */
|
|
5403
|
+
return /* @__PURE__ */ jsx43(
|
|
5147
5404
|
MenubarPrimitive.SubContent,
|
|
5148
5405
|
{
|
|
5149
5406
|
"data-slot": "menubar-sub-content",
|
|
@@ -5157,14 +5414,13 @@ function MenubarSubContent({
|
|
|
5157
5414
|
}
|
|
5158
5415
|
|
|
5159
5416
|
// src/components/ui/metric-card.tsx
|
|
5160
|
-
import * as
|
|
5161
|
-
import {
|
|
5162
|
-
import { format as format2 } from "date-fns";
|
|
5417
|
+
import * as React20 from "react";
|
|
5418
|
+
import { format as format3 } from "date-fns";
|
|
5163
5419
|
|
|
5164
5420
|
// src/components/ui/skeleton.tsx
|
|
5165
|
-
import { jsx as
|
|
5421
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
5166
5422
|
function Skeleton({ className, ...props }) {
|
|
5167
|
-
return /* @__PURE__ */
|
|
5423
|
+
return /* @__PURE__ */ jsx44(
|
|
5168
5424
|
"div",
|
|
5169
5425
|
{
|
|
5170
5426
|
"data-slot": "skeleton",
|
|
@@ -5175,29 +5431,29 @@ function Skeleton({ className, ...props }) {
|
|
|
5175
5431
|
}
|
|
5176
5432
|
|
|
5177
5433
|
// src/components/ui/metric-card.tsx
|
|
5178
|
-
import { Fragment as Fragment5, jsx as
|
|
5179
|
-
var MetricCard =
|
|
5434
|
+
import { Fragment as Fragment5, jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5435
|
+
var MetricCard = React20.forwardRef(
|
|
5180
5436
|
({ className, isLoading, children, ...props }, ref) => {
|
|
5181
5437
|
if (isLoading) {
|
|
5182
|
-
return /* @__PURE__ */
|
|
5438
|
+
return /* @__PURE__ */ jsxs25(
|
|
5183
5439
|
Card,
|
|
5184
5440
|
{
|
|
5185
5441
|
ref,
|
|
5186
5442
|
className: cn("py-4 space-y-3", className),
|
|
5187
5443
|
...props,
|
|
5188
5444
|
children: [
|
|
5189
|
-
/* @__PURE__ */
|
|
5190
|
-
/* @__PURE__ */
|
|
5191
|
-
/* @__PURE__ */
|
|
5445
|
+
/* @__PURE__ */ jsx45(Skeleton, { className: "h-4 w-24" }),
|
|
5446
|
+
/* @__PURE__ */ jsx45(Skeleton, { className: "h-8 w-16" }),
|
|
5447
|
+
/* @__PURE__ */ jsx45(Skeleton, { className: "h-12 w-full" })
|
|
5192
5448
|
]
|
|
5193
5449
|
}
|
|
5194
5450
|
);
|
|
5195
5451
|
}
|
|
5196
|
-
return /* @__PURE__ */
|
|
5452
|
+
return /* @__PURE__ */ jsx45(
|
|
5197
5453
|
Card,
|
|
5198
5454
|
{
|
|
5199
5455
|
ref,
|
|
5200
|
-
className: cn("py-4 space-y-3", className),
|
|
5456
|
+
className: cn("py-4 space-y-3 @container", className),
|
|
5201
5457
|
...props,
|
|
5202
5458
|
children
|
|
5203
5459
|
}
|
|
@@ -5205,9 +5461,9 @@ var MetricCard = React18.forwardRef(
|
|
|
5205
5461
|
}
|
|
5206
5462
|
);
|
|
5207
5463
|
MetricCard.displayName = "MetricCard";
|
|
5208
|
-
var MetricCardHeader =
|
|
5464
|
+
var MetricCardHeader = React20.forwardRef(
|
|
5209
5465
|
({ className, href, children, ...props }, ref) => {
|
|
5210
|
-
return /* @__PURE__ */
|
|
5466
|
+
return /* @__PURE__ */ jsxs25(
|
|
5211
5467
|
"div",
|
|
5212
5468
|
{
|
|
5213
5469
|
ref,
|
|
@@ -5215,14 +5471,14 @@ var MetricCardHeader = React18.forwardRef(
|
|
|
5215
5471
|
...props,
|
|
5216
5472
|
children: [
|
|
5217
5473
|
children,
|
|
5218
|
-
href && /* @__PURE__ */
|
|
5474
|
+
href && /* @__PURE__ */ jsx45(
|
|
5219
5475
|
"a",
|
|
5220
5476
|
{
|
|
5221
5477
|
href,
|
|
5222
5478
|
target: "_blank",
|
|
5223
5479
|
rel: "noopener noreferrer",
|
|
5224
5480
|
className: "text-foreground-lighter hover:text-foreground transition-colors",
|
|
5225
|
-
children: /* @__PURE__ */
|
|
5481
|
+
children: /* @__PURE__ */ jsx45(Icons.externalLink, { className: "h-3.5 w-3.5" })
|
|
5226
5482
|
}
|
|
5227
5483
|
)
|
|
5228
5484
|
]
|
|
@@ -5231,9 +5487,9 @@ var MetricCardHeader = React18.forwardRef(
|
|
|
5231
5487
|
}
|
|
5232
5488
|
);
|
|
5233
5489
|
MetricCardHeader.displayName = "MetricCardHeader";
|
|
5234
|
-
var MetricCardLabel =
|
|
5490
|
+
var MetricCardLabel = React20.forwardRef(
|
|
5235
5491
|
({ className, tooltip, icon, children, ...props }, ref) => {
|
|
5236
|
-
const label = /* @__PURE__ */
|
|
5492
|
+
const label = /* @__PURE__ */ jsx45(
|
|
5237
5493
|
"h3",
|
|
5238
5494
|
{
|
|
5239
5495
|
ref,
|
|
@@ -5242,28 +5498,28 @@ var MetricCardLabel = React18.forwardRef(
|
|
|
5242
5498
|
className
|
|
5243
5499
|
),
|
|
5244
5500
|
...props,
|
|
5245
|
-
children: /* @__PURE__ */
|
|
5246
|
-
icon && /* @__PURE__ */
|
|
5247
|
-
/* @__PURE__ */
|
|
5501
|
+
children: /* @__PURE__ */ jsxs25("span", { className: "flex items-center gap-1.5", children: [
|
|
5502
|
+
icon && /* @__PURE__ */ jsx45("span", { className: "flex-shrink-0", children: icon }),
|
|
5503
|
+
/* @__PURE__ */ jsx45("span", { children })
|
|
5248
5504
|
] })
|
|
5249
5505
|
}
|
|
5250
5506
|
);
|
|
5251
5507
|
if (tooltip) {
|
|
5252
|
-
return /* @__PURE__ */
|
|
5253
|
-
/* @__PURE__ */
|
|
5508
|
+
return /* @__PURE__ */ jsx45(TooltipProvider, { children: /* @__PURE__ */ jsxs25(Tooltip, { children: [
|
|
5509
|
+
/* @__PURE__ */ jsx45(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-1.5 cursor-help", children: [
|
|
5254
5510
|
label,
|
|
5255
|
-
/* @__PURE__ */
|
|
5511
|
+
/* @__PURE__ */ jsx45(Icons.info, { className: "h-3.5 w-3.5 text-foreground-lighter" })
|
|
5256
5512
|
] }) }),
|
|
5257
|
-
/* @__PURE__ */
|
|
5513
|
+
/* @__PURE__ */ jsx45(TooltipContent, { children: /* @__PURE__ */ jsx45("p", { className: "max-w-xs", children: tooltip }) })
|
|
5258
5514
|
] }) });
|
|
5259
5515
|
}
|
|
5260
5516
|
return label;
|
|
5261
5517
|
}
|
|
5262
5518
|
);
|
|
5263
5519
|
MetricCardLabel.displayName = "MetricCardLabel";
|
|
5264
|
-
var MetricCardContent =
|
|
5520
|
+
var MetricCardContent = React20.forwardRef(
|
|
5265
5521
|
({ className, children, ...props }, ref) => {
|
|
5266
|
-
return /* @__PURE__ */
|
|
5522
|
+
return /* @__PURE__ */ jsx45(
|
|
5267
5523
|
"div",
|
|
5268
5524
|
{
|
|
5269
5525
|
ref,
|
|
@@ -5275,9 +5531,9 @@ var MetricCardContent = React18.forwardRef(
|
|
|
5275
5531
|
}
|
|
5276
5532
|
);
|
|
5277
5533
|
MetricCardContent.displayName = "MetricCardContent";
|
|
5278
|
-
var MetricCardValue =
|
|
5534
|
+
var MetricCardValue = React20.forwardRef(
|
|
5279
5535
|
({ className, children, ...props }, ref) => {
|
|
5280
|
-
return /* @__PURE__ */
|
|
5536
|
+
return /* @__PURE__ */ jsx45(
|
|
5281
5537
|
"div",
|
|
5282
5538
|
{
|
|
5283
5539
|
ref,
|
|
@@ -5289,7 +5545,7 @@ var MetricCardValue = React18.forwardRef(
|
|
|
5289
5545
|
}
|
|
5290
5546
|
);
|
|
5291
5547
|
MetricCardValue.displayName = "MetricCardValue";
|
|
5292
|
-
var MetricCardDifferential =
|
|
5548
|
+
var MetricCardDifferential = React20.forwardRef(
|
|
5293
5549
|
({ className, variant = "positive", children, ...props }, ref) => {
|
|
5294
5550
|
const childrenString = typeof children === "string" ? children : String(children);
|
|
5295
5551
|
const signMatch = childrenString.match(/^([+\-])|([+\-])$/);
|
|
@@ -5299,7 +5555,7 @@ var MetricCardDifferential = React18.forwardRef(
|
|
|
5299
5555
|
sign = signMatch[1] || signMatch[2] || "";
|
|
5300
5556
|
value = childrenString.replace(/^[+\-]|[+\-]$/, "").trim();
|
|
5301
5557
|
}
|
|
5302
|
-
return /* @__PURE__ */
|
|
5558
|
+
return /* @__PURE__ */ jsxs25(
|
|
5303
5559
|
"div",
|
|
5304
5560
|
{
|
|
5305
5561
|
ref,
|
|
@@ -5310,19 +5566,19 @@ var MetricCardDifferential = React18.forwardRef(
|
|
|
5310
5566
|
),
|
|
5311
5567
|
...props,
|
|
5312
5568
|
children: [
|
|
5313
|
-
/* @__PURE__ */
|
|
5314
|
-
sign && /* @__PURE__ */
|
|
5569
|
+
/* @__PURE__ */ jsx45("span", { children: value }),
|
|
5570
|
+
sign && /* @__PURE__ */ jsx45("span", { className: "inline-block", dir: "ltr", children: sign })
|
|
5315
5571
|
]
|
|
5316
5572
|
}
|
|
5317
5573
|
);
|
|
5318
5574
|
}
|
|
5319
5575
|
);
|
|
5320
5576
|
MetricCardDifferential.displayName = "MetricCardDifferential";
|
|
5321
|
-
var MetricCardSparkline =
|
|
5577
|
+
var MetricCardSparkline = React20.forwardRef(
|
|
5322
5578
|
({ data, dataKey, usePersianCalendar = false, className }, _ref) => {
|
|
5323
|
-
const [hoveredIndex, setHoveredIndex] =
|
|
5324
|
-
const [tooltipPosition, setTooltipPosition] =
|
|
5325
|
-
const containerRef =
|
|
5579
|
+
const [hoveredIndex, setHoveredIndex] = React20.useState(null);
|
|
5580
|
+
const [tooltipPosition, setTooltipPosition] = React20.useState({ x: 0, y: 0 });
|
|
5581
|
+
const containerRef = React20.useRef(null);
|
|
5326
5582
|
if (!data || data.length === 0) return null;
|
|
5327
5583
|
const values = data.map((item) => item[dataKey]);
|
|
5328
5584
|
const timestamps = data.map((item) => new Date(item.timestamp));
|
|
@@ -5348,7 +5604,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5348
5604
|
areaPath += ` L ${points[0].x},${height}`;
|
|
5349
5605
|
areaPath += ` Z`;
|
|
5350
5606
|
const isPositive = values[values.length - 1] >= values[0];
|
|
5351
|
-
const gradientId =
|
|
5607
|
+
const gradientId = React20.useId();
|
|
5352
5608
|
const handleMouseMove = (e) => {
|
|
5353
5609
|
if (!containerRef.current) return;
|
|
5354
5610
|
const rect = containerRef.current.getBoundingClientRect();
|
|
@@ -5380,10 +5636,10 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5380
5636
|
const jalaliDate = formatJalaliDate(date, "jD jMMMM");
|
|
5381
5637
|
return toPersianDigits(jalaliDate);
|
|
5382
5638
|
} else {
|
|
5383
|
-
return
|
|
5639
|
+
return format3(date, "MMM d");
|
|
5384
5640
|
}
|
|
5385
5641
|
};
|
|
5386
|
-
return /* @__PURE__ */
|
|
5642
|
+
return /* @__PURE__ */ jsxs25(
|
|
5387
5643
|
"div",
|
|
5388
5644
|
{
|
|
5389
5645
|
ref: containerRef,
|
|
@@ -5391,7 +5647,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5391
5647
|
onMouseMove: handleMouseMove,
|
|
5392
5648
|
onMouseLeave: handleMouseLeave,
|
|
5393
5649
|
children: [
|
|
5394
|
-
/* @__PURE__ */
|
|
5650
|
+
/* @__PURE__ */ jsxs25(
|
|
5395
5651
|
"svg",
|
|
5396
5652
|
{
|
|
5397
5653
|
width: "100%",
|
|
@@ -5400,8 +5656,8 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5400
5656
|
preserveAspectRatio: "none",
|
|
5401
5657
|
className: "overflow-visible",
|
|
5402
5658
|
children: [
|
|
5403
|
-
/* @__PURE__ */
|
|
5404
|
-
/* @__PURE__ */
|
|
5659
|
+
/* @__PURE__ */ jsx45("defs", { children: /* @__PURE__ */ jsxs25("linearGradient", { id: gradientId, x1: "0", x2: "0", y1: "0", y2: "1", children: [
|
|
5660
|
+
/* @__PURE__ */ jsx45(
|
|
5405
5661
|
"stop",
|
|
5406
5662
|
{
|
|
5407
5663
|
offset: "0%",
|
|
@@ -5412,7 +5668,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5412
5668
|
)
|
|
5413
5669
|
}
|
|
5414
5670
|
),
|
|
5415
|
-
/* @__PURE__ */
|
|
5671
|
+
/* @__PURE__ */ jsx45(
|
|
5416
5672
|
"stop",
|
|
5417
5673
|
{
|
|
5418
5674
|
offset: "100%",
|
|
@@ -5424,14 +5680,14 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5424
5680
|
}
|
|
5425
5681
|
)
|
|
5426
5682
|
] }) }),
|
|
5427
|
-
/* @__PURE__ */
|
|
5683
|
+
/* @__PURE__ */ jsx45(
|
|
5428
5684
|
"path",
|
|
5429
5685
|
{
|
|
5430
5686
|
d: areaPath,
|
|
5431
5687
|
fill: `url(#${gradientId})`
|
|
5432
5688
|
}
|
|
5433
5689
|
),
|
|
5434
|
-
/* @__PURE__ */
|
|
5690
|
+
/* @__PURE__ */ jsx45(
|
|
5435
5691
|
"path",
|
|
5436
5692
|
{
|
|
5437
5693
|
d: pathData,
|
|
@@ -5445,8 +5701,8 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5445
5701
|
)
|
|
5446
5702
|
}
|
|
5447
5703
|
),
|
|
5448
|
-
hoveredIndex !== null && hoveredIndex < points.length - 1 && /* @__PURE__ */
|
|
5449
|
-
/* @__PURE__ */
|
|
5704
|
+
hoveredIndex !== null && hoveredIndex < points.length - 1 && /* @__PURE__ */ jsxs25(Fragment5, { children: [
|
|
5705
|
+
/* @__PURE__ */ jsx45(
|
|
5450
5706
|
"line",
|
|
5451
5707
|
{
|
|
5452
5708
|
x1: (points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2,
|
|
@@ -5459,7 +5715,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5459
5715
|
className: "text-foreground-lighter opacity-50"
|
|
5460
5716
|
}
|
|
5461
5717
|
),
|
|
5462
|
-
/* @__PURE__ */
|
|
5718
|
+
/* @__PURE__ */ jsx45(
|
|
5463
5719
|
"circle",
|
|
5464
5720
|
{
|
|
5465
5721
|
cx: (points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2,
|
|
@@ -5473,7 +5729,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5473
5729
|
)
|
|
5474
5730
|
}
|
|
5475
5731
|
),
|
|
5476
|
-
/* @__PURE__ */
|
|
5732
|
+
/* @__PURE__ */ jsx45(
|
|
5477
5733
|
"circle",
|
|
5478
5734
|
{
|
|
5479
5735
|
cx: (points[hoveredIndex].x + points[hoveredIndex + 1].x) / 2,
|
|
@@ -5489,7 +5745,7 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5489
5745
|
]
|
|
5490
5746
|
}
|
|
5491
5747
|
),
|
|
5492
|
-
hoveredIndex !== null && hoveredIndex < points.length - 1 && /* @__PURE__ */
|
|
5748
|
+
hoveredIndex !== null && hoveredIndex < points.length - 1 && /* @__PURE__ */ jsx45(
|
|
5493
5749
|
"div",
|
|
5494
5750
|
{
|
|
5495
5751
|
className: "absolute z-50 pointer-events-none",
|
|
@@ -5497,9 +5753,9 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5497
5753
|
left: `${tooltipPosition.x + 8}px`,
|
|
5498
5754
|
top: `${tooltipPosition.y - 40}px`
|
|
5499
5755
|
},
|
|
5500
|
-
children: /* @__PURE__ */
|
|
5501
|
-
/* @__PURE__ */
|
|
5502
|
-
/* @__PURE__ */
|
|
5756
|
+
children: /* @__PURE__ */ jsxs25("div", { className: "bg-background-surface-100 border border-border-default rounded-md shadow-lg px-2 py-1.5", children: [
|
|
5757
|
+
/* @__PURE__ */ jsx45("div", { className: "text-xs text-foreground-lighter", children: formatDate(points[hoveredIndex].timestamp) }),
|
|
5758
|
+
/* @__PURE__ */ jsx45("div", { className: "text-xs font-medium tabular-nums mt-0.5", children: points[hoveredIndex].value.toLocaleString(usePersianCalendar ? "fa-IR" : "en-US") })
|
|
5503
5759
|
] })
|
|
5504
5760
|
}
|
|
5505
5761
|
)
|
|
@@ -5511,16 +5767,15 @@ var MetricCardSparkline = React18.forwardRef(
|
|
|
5511
5767
|
MetricCardSparkline.displayName = "MetricCardSparkline";
|
|
5512
5768
|
|
|
5513
5769
|
// src/components/ui/native-select.tsx
|
|
5514
|
-
import {
|
|
5515
|
-
import { jsx as jsx44, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5770
|
+
import { jsx as jsx46, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5516
5771
|
function NativeSelect({ className, ...props }) {
|
|
5517
|
-
return /* @__PURE__ */
|
|
5772
|
+
return /* @__PURE__ */ jsxs26(
|
|
5518
5773
|
"div",
|
|
5519
5774
|
{
|
|
5520
5775
|
className: "group/native-select relative w-fit has-[select:disabled]:opacity-50",
|
|
5521
5776
|
"data-slot": "native-select-wrapper",
|
|
5522
5777
|
children: [
|
|
5523
|
-
/* @__PURE__ */
|
|
5778
|
+
/* @__PURE__ */ jsx46(
|
|
5524
5779
|
"select",
|
|
5525
5780
|
{
|
|
5526
5781
|
"data-slot": "native-select",
|
|
@@ -5542,8 +5797,8 @@ function NativeSelect({ className, ...props }) {
|
|
|
5542
5797
|
...props
|
|
5543
5798
|
}
|
|
5544
5799
|
),
|
|
5545
|
-
/* @__PURE__ */
|
|
5546
|
-
|
|
5800
|
+
/* @__PURE__ */ jsx46(
|
|
5801
|
+
Icons.chevronDown,
|
|
5547
5802
|
{
|
|
5548
5803
|
className: "pointer-events-none absolute top-1/2 end-3 size-4 -translate-y-1/2 text-foreground-muted select-none",
|
|
5549
5804
|
"aria-hidden": "true",
|
|
@@ -5555,13 +5810,13 @@ function NativeSelect({ className, ...props }) {
|
|
|
5555
5810
|
);
|
|
5556
5811
|
}
|
|
5557
5812
|
function NativeSelectOption({ ...props }) {
|
|
5558
|
-
return /* @__PURE__ */
|
|
5813
|
+
return /* @__PURE__ */ jsx46("option", { "data-slot": "native-select-option", ...props });
|
|
5559
5814
|
}
|
|
5560
5815
|
function NativeSelectOptGroup({
|
|
5561
5816
|
className,
|
|
5562
5817
|
...props
|
|
5563
5818
|
}) {
|
|
5564
|
-
return /* @__PURE__ */
|
|
5819
|
+
return /* @__PURE__ */ jsx46(
|
|
5565
5820
|
"optgroup",
|
|
5566
5821
|
{
|
|
5567
5822
|
"data-slot": "native-select-optgroup",
|
|
@@ -5573,16 +5828,15 @@ function NativeSelectOptGroup({
|
|
|
5573
5828
|
|
|
5574
5829
|
// src/components/ui/navigation-menu.tsx
|
|
5575
5830
|
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
5576
|
-
import { cva as
|
|
5577
|
-
import {
|
|
5578
|
-
import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5831
|
+
import { cva as cva11 } from "class-variance-authority";
|
|
5832
|
+
import { jsx as jsx47, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
5579
5833
|
function NavigationMenu({
|
|
5580
5834
|
className,
|
|
5581
5835
|
children,
|
|
5582
5836
|
viewport = true,
|
|
5583
5837
|
...props
|
|
5584
5838
|
}) {
|
|
5585
|
-
return /* @__PURE__ */
|
|
5839
|
+
return /* @__PURE__ */ jsxs27(
|
|
5586
5840
|
NavigationMenuPrimitive.Root,
|
|
5587
5841
|
{
|
|
5588
5842
|
"data-slot": "navigation-menu",
|
|
@@ -5594,7 +5848,7 @@ function NavigationMenu({
|
|
|
5594
5848
|
...props,
|
|
5595
5849
|
children: [
|
|
5596
5850
|
children,
|
|
5597
|
-
viewport && /* @__PURE__ */
|
|
5851
|
+
viewport && /* @__PURE__ */ jsx47(NavigationMenuViewport, {})
|
|
5598
5852
|
]
|
|
5599
5853
|
}
|
|
5600
5854
|
);
|
|
@@ -5603,7 +5857,7 @@ function NavigationMenuList({
|
|
|
5603
5857
|
className,
|
|
5604
5858
|
...props
|
|
5605
5859
|
}) {
|
|
5606
|
-
return /* @__PURE__ */
|
|
5860
|
+
return /* @__PURE__ */ jsx47(
|
|
5607
5861
|
NavigationMenuPrimitive.List,
|
|
5608
5862
|
{
|
|
5609
5863
|
"data-slot": "navigation-menu-list",
|
|
@@ -5619,7 +5873,7 @@ function NavigationMenuItem({
|
|
|
5619
5873
|
className,
|
|
5620
5874
|
...props
|
|
5621
5875
|
}) {
|
|
5622
|
-
return /* @__PURE__ */
|
|
5876
|
+
return /* @__PURE__ */ jsx47(
|
|
5623
5877
|
NavigationMenuPrimitive.Item,
|
|
5624
5878
|
{
|
|
5625
5879
|
"data-slot": "navigation-menu-item",
|
|
@@ -5628,7 +5882,7 @@ function NavigationMenuItem({
|
|
|
5628
5882
|
}
|
|
5629
5883
|
);
|
|
5630
5884
|
}
|
|
5631
|
-
var navigationMenuTriggerStyle =
|
|
5885
|
+
var navigationMenuTriggerStyle = cva11(
|
|
5632
5886
|
"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"
|
|
5633
5887
|
);
|
|
5634
5888
|
function NavigationMenuTrigger({
|
|
@@ -5636,7 +5890,7 @@ function NavigationMenuTrigger({
|
|
|
5636
5890
|
children,
|
|
5637
5891
|
...props
|
|
5638
5892
|
}) {
|
|
5639
|
-
return /* @__PURE__ */
|
|
5893
|
+
return /* @__PURE__ */ jsxs27(
|
|
5640
5894
|
NavigationMenuPrimitive.Trigger,
|
|
5641
5895
|
{
|
|
5642
5896
|
"data-slot": "navigation-menu-trigger",
|
|
@@ -5645,8 +5899,8 @@ function NavigationMenuTrigger({
|
|
|
5645
5899
|
children: [
|
|
5646
5900
|
children,
|
|
5647
5901
|
" ",
|
|
5648
|
-
/* @__PURE__ */
|
|
5649
|
-
|
|
5902
|
+
/* @__PURE__ */ jsx47(
|
|
5903
|
+
Icons.chevronDown,
|
|
5650
5904
|
{
|
|
5651
5905
|
className: "relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
|
|
5652
5906
|
"aria-hidden": "true"
|
|
@@ -5660,7 +5914,7 @@ function NavigationMenuContent({
|
|
|
5660
5914
|
className,
|
|
5661
5915
|
...props
|
|
5662
5916
|
}) {
|
|
5663
|
-
return /* @__PURE__ */
|
|
5917
|
+
return /* @__PURE__ */ jsx47(
|
|
5664
5918
|
NavigationMenuPrimitive.Content,
|
|
5665
5919
|
{
|
|
5666
5920
|
"data-slot": "navigation-menu-content",
|
|
@@ -5677,13 +5931,13 @@ function NavigationMenuViewport({
|
|
|
5677
5931
|
className,
|
|
5678
5932
|
...props
|
|
5679
5933
|
}) {
|
|
5680
|
-
return /* @__PURE__ */
|
|
5934
|
+
return /* @__PURE__ */ jsx47(
|
|
5681
5935
|
"div",
|
|
5682
5936
|
{
|
|
5683
5937
|
className: cn(
|
|
5684
5938
|
"absolute top-full start-0 isolate z-50 flex justify-center"
|
|
5685
5939
|
),
|
|
5686
|
-
children: /* @__PURE__ */
|
|
5940
|
+
children: /* @__PURE__ */ jsx47(
|
|
5687
5941
|
NavigationMenuPrimitive.Viewport,
|
|
5688
5942
|
{
|
|
5689
5943
|
"data-slot": "navigation-menu-viewport",
|
|
@@ -5701,7 +5955,7 @@ function NavigationMenuLink({
|
|
|
5701
5955
|
className,
|
|
5702
5956
|
...props
|
|
5703
5957
|
}) {
|
|
5704
|
-
return /* @__PURE__ */
|
|
5958
|
+
return /* @__PURE__ */ jsx47(
|
|
5705
5959
|
NavigationMenuPrimitive.Link,
|
|
5706
5960
|
{
|
|
5707
5961
|
"data-slot": "navigation-menu-link",
|
|
@@ -5717,7 +5971,7 @@ function NavigationMenuIndicator({
|
|
|
5717
5971
|
className,
|
|
5718
5972
|
...props
|
|
5719
5973
|
}) {
|
|
5720
|
-
return /* @__PURE__ */
|
|
5974
|
+
return /* @__PURE__ */ jsx47(
|
|
5721
5975
|
NavigationMenuPrimitive.Indicator,
|
|
5722
5976
|
{
|
|
5723
5977
|
"data-slot": "navigation-menu-indicator",
|
|
@@ -5726,22 +5980,17 @@ function NavigationMenuIndicator({
|
|
|
5726
5980
|
className
|
|
5727
5981
|
),
|
|
5728
5982
|
...props,
|
|
5729
|
-
children: /* @__PURE__ */
|
|
5983
|
+
children: /* @__PURE__ */ jsx47("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
|
|
5730
5984
|
}
|
|
5731
5985
|
);
|
|
5732
5986
|
}
|
|
5733
5987
|
|
|
5734
5988
|
// src/components/ui/pagination.tsx
|
|
5735
|
-
import * as
|
|
5736
|
-
import {
|
|
5737
|
-
|
|
5738
|
-
ChevronRightIcon as ChevronRightIcon4,
|
|
5739
|
-
MoreHorizontalIcon
|
|
5740
|
-
} from "lucide-react";
|
|
5741
|
-
import { Fragment as Fragment6, jsx as jsx46, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5742
|
-
var PaginationDirectionContext = React19.createContext("rtl");
|
|
5989
|
+
import * as React21 from "react";
|
|
5990
|
+
import { Fragment as Fragment6, jsx as jsx48, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
5991
|
+
var PaginationDirectionContext = React21.createContext("rtl");
|
|
5743
5992
|
function usePaginationDirection() {
|
|
5744
|
-
return
|
|
5993
|
+
return React21.useContext(PaginationDirectionContext);
|
|
5745
5994
|
}
|
|
5746
5995
|
function Pagination({
|
|
5747
5996
|
className,
|
|
@@ -5750,7 +5999,7 @@ function Pagination({
|
|
|
5750
5999
|
...props
|
|
5751
6000
|
}) {
|
|
5752
6001
|
const resolvedDir = dir ?? "rtl";
|
|
5753
|
-
return /* @__PURE__ */
|
|
6002
|
+
return /* @__PURE__ */ jsx48(PaginationDirectionContext.Provider, { value: resolvedDir, children: /* @__PURE__ */ jsx48(
|
|
5754
6003
|
"nav",
|
|
5755
6004
|
{
|
|
5756
6005
|
role: "navigation",
|
|
@@ -5768,7 +6017,7 @@ function PaginationContent({
|
|
|
5768
6017
|
...props
|
|
5769
6018
|
}) {
|
|
5770
6019
|
const dir = usePaginationDirection();
|
|
5771
|
-
return /* @__PURE__ */
|
|
6020
|
+
return /* @__PURE__ */ jsx48(
|
|
5772
6021
|
"ul",
|
|
5773
6022
|
{
|
|
5774
6023
|
"data-slot": "pagination-content",
|
|
@@ -5782,7 +6031,7 @@ function PaginationContent({
|
|
|
5782
6031
|
);
|
|
5783
6032
|
}
|
|
5784
6033
|
function PaginationItem({ ...props }) {
|
|
5785
|
-
return /* @__PURE__ */
|
|
6034
|
+
return /* @__PURE__ */ jsx48("li", { "data-slot": "pagination-item", ...props });
|
|
5786
6035
|
}
|
|
5787
6036
|
function PaginationLink({
|
|
5788
6037
|
className,
|
|
@@ -5793,7 +6042,7 @@ function PaginationLink({
|
|
|
5793
6042
|
}) {
|
|
5794
6043
|
const contextDir = usePaginationDirection();
|
|
5795
6044
|
const linkDir = dir ?? (contextDir === "rtl" ? "rtl" : "ltr");
|
|
5796
|
-
return /* @__PURE__ */
|
|
6045
|
+
return /* @__PURE__ */ jsx48(
|
|
5797
6046
|
"a",
|
|
5798
6047
|
{
|
|
5799
6048
|
"aria-current": isActive ? "page" : void 0,
|
|
@@ -5826,8 +6075,8 @@ function PaginationPrevious({
|
|
|
5826
6075
|
const dir = usePaginationDirection();
|
|
5827
6076
|
const isRTL = dir === "rtl";
|
|
5828
6077
|
const label = isRTL ? "\u0642\u0628\u0644\u06CC" : "Previous";
|
|
5829
|
-
const Icon2 = isRTL ?
|
|
5830
|
-
return /* @__PURE__ */
|
|
6078
|
+
const Icon2 = isRTL ? Icons.chevronRight : Icons.chevronLeft;
|
|
6079
|
+
return /* @__PURE__ */ jsxs28(
|
|
5831
6080
|
PaginationLink,
|
|
5832
6081
|
{
|
|
5833
6082
|
"aria-label": isRTL ? "\u0631\u0641\u062A\u0646 \u0628\u0647 \u0635\u0641\u062D\u0647 \u0642\u0628\u0644\u06CC" : "Go to previous page",
|
|
@@ -5839,8 +6088,8 @@ function PaginationPrevious({
|
|
|
5839
6088
|
dir: "ltr",
|
|
5840
6089
|
...props,
|
|
5841
6090
|
children: [
|
|
5842
|
-
/* @__PURE__ */
|
|
5843
|
-
/* @__PURE__ */
|
|
6091
|
+
/* @__PURE__ */ jsx48(Icon2, { className: "size-4" }),
|
|
6092
|
+
/* @__PURE__ */ jsx48("span", { className: "hidden sm:inline no-underline", children: label })
|
|
5844
6093
|
]
|
|
5845
6094
|
}
|
|
5846
6095
|
);
|
|
@@ -5852,8 +6101,8 @@ function PaginationNext({
|
|
|
5852
6101
|
const dir = usePaginationDirection();
|
|
5853
6102
|
const isRTL = dir === "rtl";
|
|
5854
6103
|
const label = isRTL ? "\u0628\u0639\u062F\u06CC" : "Next";
|
|
5855
|
-
const Icon2 = isRTL ?
|
|
5856
|
-
return /* @__PURE__ */
|
|
6104
|
+
const Icon2 = isRTL ? Icons.chevronLeft : Icons.chevronRight;
|
|
6105
|
+
return /* @__PURE__ */ jsx48(
|
|
5857
6106
|
PaginationLink,
|
|
5858
6107
|
{
|
|
5859
6108
|
"aria-label": isRTL ? "\u0631\u0641\u062A\u0646 \u0628\u0647 \u0635\u0641\u062D\u0647 \u0628\u0639\u062F\u06CC" : "Go to next page",
|
|
@@ -5864,12 +6113,12 @@ function PaginationNext({
|
|
|
5864
6113
|
),
|
|
5865
6114
|
dir: "ltr",
|
|
5866
6115
|
...props,
|
|
5867
|
-
children: isRTL ? /* @__PURE__ */
|
|
5868
|
-
/* @__PURE__ */
|
|
5869
|
-
/* @__PURE__ */
|
|
5870
|
-
] }) : /* @__PURE__ */
|
|
5871
|
-
/* @__PURE__ */
|
|
5872
|
-
/* @__PURE__ */
|
|
6116
|
+
children: isRTL ? /* @__PURE__ */ jsxs28(Fragment6, { children: [
|
|
6117
|
+
/* @__PURE__ */ jsx48(Icon2, { className: "size-4" }),
|
|
6118
|
+
/* @__PURE__ */ jsx48("span", { className: "hidden sm:inline no-underline", children: label })
|
|
6119
|
+
] }) : /* @__PURE__ */ jsxs28(Fragment6, { children: [
|
|
6120
|
+
/* @__PURE__ */ jsx48("span", { className: "hidden sm:inline no-underline", children: label }),
|
|
6121
|
+
/* @__PURE__ */ jsx48(Icon2, { className: "size-4" })
|
|
5873
6122
|
] })
|
|
5874
6123
|
}
|
|
5875
6124
|
);
|
|
@@ -5878,7 +6127,7 @@ function PaginationEllipsis({
|
|
|
5878
6127
|
className,
|
|
5879
6128
|
...props
|
|
5880
6129
|
}) {
|
|
5881
|
-
return /* @__PURE__ */
|
|
6130
|
+
return /* @__PURE__ */ jsxs28(
|
|
5882
6131
|
"span",
|
|
5883
6132
|
{
|
|
5884
6133
|
"aria-hidden": true,
|
|
@@ -5886,15 +6135,15 @@ function PaginationEllipsis({
|
|
|
5886
6135
|
className: cn("flex size-9 items-center justify-center", className),
|
|
5887
6136
|
...props,
|
|
5888
6137
|
children: [
|
|
5889
|
-
/* @__PURE__ */
|
|
5890
|
-
/* @__PURE__ */
|
|
6138
|
+
/* @__PURE__ */ jsx48(Icons.moreHorizontal, { className: "size-4" }),
|
|
6139
|
+
/* @__PURE__ */ jsx48("span", { className: "sr-only", children: "More pages" })
|
|
5891
6140
|
]
|
|
5892
6141
|
}
|
|
5893
6142
|
);
|
|
5894
6143
|
}
|
|
5895
6144
|
|
|
5896
6145
|
// src/components/ui/pagination-controlled.tsx
|
|
5897
|
-
import { jsx as
|
|
6146
|
+
import { jsx as jsx49, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
5898
6147
|
function PaginationControlled({
|
|
5899
6148
|
currentPage,
|
|
5900
6149
|
totalPages,
|
|
@@ -5957,8 +6206,8 @@ function PaginationControlled({
|
|
|
5957
6206
|
const pageNumbers = generatePageNumbers();
|
|
5958
6207
|
const showFirstButton = showFirstLast && !pageNumbers.includes(1) && currentPage > 1;
|
|
5959
6208
|
const showLastButton = showFirstLast && !pageNumbers.includes(totalPages) && currentPage < totalPages;
|
|
5960
|
-
return /* @__PURE__ */
|
|
5961
|
-
showFirstButton && /* @__PURE__ */
|
|
6209
|
+
return /* @__PURE__ */ jsx49(Pagination, { className, dir, children: /* @__PURE__ */ jsxs29(PaginationContent, { children: [
|
|
6210
|
+
showFirstButton && /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(
|
|
5962
6211
|
PaginationLink,
|
|
5963
6212
|
{
|
|
5964
6213
|
href: "#",
|
|
@@ -5969,7 +6218,7 @@ function PaginationControlled({
|
|
|
5969
6218
|
children: 1 .toLocaleString("fa-IR")
|
|
5970
6219
|
}
|
|
5971
6220
|
) }),
|
|
5972
|
-
showPrevNext && /* @__PURE__ */
|
|
6221
|
+
showPrevNext && /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(
|
|
5973
6222
|
PaginationPrevious,
|
|
5974
6223
|
{
|
|
5975
6224
|
href: "#",
|
|
@@ -5982,9 +6231,9 @@ function PaginationControlled({
|
|
|
5982
6231
|
) }),
|
|
5983
6232
|
pageNumbers.map((page, index) => {
|
|
5984
6233
|
if (page === "ellipsis") {
|
|
5985
|
-
return /* @__PURE__ */
|
|
6234
|
+
return /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(PaginationEllipsis, {}) }, `ellipsis-${index}`);
|
|
5986
6235
|
}
|
|
5987
|
-
return /* @__PURE__ */
|
|
6236
|
+
return /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(
|
|
5988
6237
|
PaginationLink,
|
|
5989
6238
|
{
|
|
5990
6239
|
href: "#",
|
|
@@ -5997,7 +6246,7 @@ function PaginationControlled({
|
|
|
5997
6246
|
}
|
|
5998
6247
|
) }, page);
|
|
5999
6248
|
}),
|
|
6000
|
-
showPrevNext && /* @__PURE__ */
|
|
6249
|
+
showPrevNext && /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(
|
|
6001
6250
|
PaginationNext,
|
|
6002
6251
|
{
|
|
6003
6252
|
href: "#",
|
|
@@ -6008,7 +6257,7 @@ function PaginationControlled({
|
|
|
6008
6257
|
className: currentPage === totalPages ? "pointer-events-none opacity-50" : ""
|
|
6009
6258
|
}
|
|
6010
6259
|
) }),
|
|
6011
|
-
showLastButton && /* @__PURE__ */
|
|
6260
|
+
showLastButton && /* @__PURE__ */ jsx49(PaginationItem, { children: /* @__PURE__ */ jsx49(
|
|
6012
6261
|
PaginationLink,
|
|
6013
6262
|
{
|
|
6014
6263
|
href: "#",
|
|
@@ -6023,8 +6272,8 @@ function PaginationControlled({
|
|
|
6023
6272
|
}
|
|
6024
6273
|
|
|
6025
6274
|
// src/components/ui/profile-card.tsx
|
|
6026
|
-
import * as
|
|
6027
|
-
import { jsx as
|
|
6275
|
+
import * as React22 from "react";
|
|
6276
|
+
import { jsx as jsx50, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
6028
6277
|
var formatFollowers2 = (count) => {
|
|
6029
6278
|
if (count >= 1e6) {
|
|
6030
6279
|
return `${(count / 1e6).toFixed(1).replace(/\.0$/, "")}M`;
|
|
@@ -6034,7 +6283,7 @@ var formatFollowers2 = (count) => {
|
|
|
6034
6283
|
}
|
|
6035
6284
|
return count.toString();
|
|
6036
6285
|
};
|
|
6037
|
-
var ProfileCard =
|
|
6286
|
+
var ProfileCard = React22.forwardRef(
|
|
6038
6287
|
({
|
|
6039
6288
|
className,
|
|
6040
6289
|
name,
|
|
@@ -6082,12 +6331,12 @@ var ProfileCard = React20.forwardRef(
|
|
|
6082
6331
|
transparent: "bg-transparent border border-border"
|
|
6083
6332
|
};
|
|
6084
6333
|
const currentSize = sizeClasses[size];
|
|
6085
|
-
return /* @__PURE__ */
|
|
6334
|
+
return /* @__PURE__ */ jsxs30(
|
|
6086
6335
|
"div",
|
|
6087
6336
|
{
|
|
6088
6337
|
ref,
|
|
6089
6338
|
className: cn(
|
|
6090
|
-
"flex flex-col items-center rounded-lg shadow-sm transition-colors",
|
|
6339
|
+
"flex flex-col items-center rounded-lg shadow-sm transition-colors @container",
|
|
6091
6340
|
variantClasses[variant],
|
|
6092
6341
|
currentSize.container,
|
|
6093
6342
|
onCardClick && "cursor-pointer hover:bg-surface-200",
|
|
@@ -6096,22 +6345,22 @@ var ProfileCard = React20.forwardRef(
|
|
|
6096
6345
|
onClick: onCardClick,
|
|
6097
6346
|
...props,
|
|
6098
6347
|
children: [
|
|
6099
|
-
/* @__PURE__ */
|
|
6100
|
-
/* @__PURE__ */
|
|
6101
|
-
/* @__PURE__ */
|
|
6102
|
-
] }) }) : avatarBorderVariant === "primary" ? /* @__PURE__ */
|
|
6103
|
-
/* @__PURE__ */
|
|
6104
|
-
/* @__PURE__ */
|
|
6105
|
-
] }) : /* @__PURE__ */
|
|
6106
|
-
/* @__PURE__ */
|
|
6107
|
-
/* @__PURE__ */
|
|
6348
|
+
/* @__PURE__ */ jsx50("div", { className: "relative flex-shrink-0", children: avatarBorderVariant === "gold" ? /* @__PURE__ */ jsx50("div", { className: "relative p-0.5 rounded-full bg-gradient-to-br from-amber-500 via-yellow-400 to-amber-500", children: /* @__PURE__ */ jsxs30(Avatar, { className: cn(currentSize.avatar, "ring-2 ring-background"), children: [
|
|
6349
|
+
/* @__PURE__ */ jsx50(AvatarImage, { src: avatarSrc, alt: avatarAlt || name }),
|
|
6350
|
+
/* @__PURE__ */ jsx50(AvatarFallback, { className: "bg-surface-300 text-foreground font-medium", children: initials || name.charAt(0) })
|
|
6351
|
+
] }) }) : avatarBorderVariant === "primary" ? /* @__PURE__ */ jsxs30(Avatar, { className: cn(currentSize.avatar, "ring-2 ring-offset-2 ring-offset-background ring-primary"), children: [
|
|
6352
|
+
/* @__PURE__ */ jsx50(AvatarImage, { src: avatarSrc, alt: avatarAlt || name }),
|
|
6353
|
+
/* @__PURE__ */ jsx50(AvatarFallback, { className: "bg-surface-300 text-foreground font-medium", children: initials || name.charAt(0) })
|
|
6354
|
+
] }) : /* @__PURE__ */ jsxs30(Avatar, { className: currentSize.avatar, children: [
|
|
6355
|
+
/* @__PURE__ */ jsx50(AvatarImage, { src: avatarSrc, alt: avatarAlt || name }),
|
|
6356
|
+
/* @__PURE__ */ jsx50(AvatarFallback, { className: "bg-surface-300 text-foreground font-medium", children: initials || name.charAt(0) })
|
|
6108
6357
|
] }) }),
|
|
6109
|
-
/* @__PURE__ */
|
|
6110
|
-
/* @__PURE__ */
|
|
6111
|
-
/* @__PURE__ */
|
|
6112
|
-
followers !== void 0 && /* @__PURE__ */
|
|
6113
|
-
followersIcon && /* @__PURE__ */
|
|
6114
|
-
/* @__PURE__ */
|
|
6358
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex flex-col items-center gap-0.5 w-full", children: [
|
|
6359
|
+
/* @__PURE__ */ jsx50("h3", { className: cn("font-semibold text-foreground text-center", currentSize.name), children: name }),
|
|
6360
|
+
/* @__PURE__ */ jsx50("p", { className: cn("text-muted-foreground text-center", currentSize.username), children: username }),
|
|
6361
|
+
followers !== void 0 && /* @__PURE__ */ jsxs30("div", { className: cn("flex items-center gap-1.5 text-muted-foreground mt-0.5", currentSize.followers), children: [
|
|
6362
|
+
followersIcon && /* @__PURE__ */ jsx50("span", { className: cn("flex-shrink-0", currentSize.iconSize), children: followersIcon }),
|
|
6363
|
+
/* @__PURE__ */ jsx50("span", { className: "font-medium", children: formatFollowers2(followers) })
|
|
6115
6364
|
] })
|
|
6116
6365
|
] })
|
|
6117
6366
|
]
|
|
@@ -6122,9 +6371,9 @@ var ProfileCard = React20.forwardRef(
|
|
|
6122
6371
|
ProfileCard.displayName = "ProfileCard";
|
|
6123
6372
|
|
|
6124
6373
|
// src/components/ui/profile-info.tsx
|
|
6125
|
-
import * as
|
|
6126
|
-
import { jsx as
|
|
6127
|
-
var ProfileInfo =
|
|
6374
|
+
import * as React23 from "react";
|
|
6375
|
+
import { jsx as jsx51, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
6376
|
+
var ProfileInfo = React23.forwardRef(
|
|
6128
6377
|
({
|
|
6129
6378
|
className,
|
|
6130
6379
|
name,
|
|
@@ -6179,7 +6428,7 @@ var ProfileInfo = React21.forwardRef(
|
|
|
6179
6428
|
none: ""
|
|
6180
6429
|
};
|
|
6181
6430
|
const currentSize = sizeClasses[size];
|
|
6182
|
-
return /* @__PURE__ */
|
|
6431
|
+
return /* @__PURE__ */ jsxs31(
|
|
6183
6432
|
"div",
|
|
6184
6433
|
{
|
|
6185
6434
|
ref,
|
|
@@ -6193,24 +6442,24 @@ var ProfileInfo = React21.forwardRef(
|
|
|
6193
6442
|
onClick: onProfileClick,
|
|
6194
6443
|
...props,
|
|
6195
6444
|
children: [
|
|
6196
|
-
/* @__PURE__ */
|
|
6197
|
-
/* @__PURE__ */
|
|
6198
|
-
/* @__PURE__ */
|
|
6199
|
-
/* @__PURE__ */
|
|
6200
|
-
] }) }) : /* @__PURE__ */
|
|
6201
|
-
/* @__PURE__ */
|
|
6202
|
-
/* @__PURE__ */
|
|
6445
|
+
/* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-4", children: [
|
|
6446
|
+
/* @__PURE__ */ jsx51("div", { className: "relative", children: avatarBorderVariant === "gold" ? /* @__PURE__ */ jsx51("div", { className: "relative p-0.5 rounded-full bg-gradient-to-br from-amber-500 via-yellow-400 to-amber-500", children: /* @__PURE__ */ jsxs31(Avatar, { className: cn(currentSize.avatar, "ring-2 ring-background"), children: [
|
|
6447
|
+
/* @__PURE__ */ jsx51(AvatarImage, { src: avatarSrc, alt: avatarAlt || name }),
|
|
6448
|
+
/* @__PURE__ */ jsx51(AvatarFallback, { className: "bg-surface-300 text-foreground font-medium", children: initials || name.charAt(0) })
|
|
6449
|
+
] }) }) : /* @__PURE__ */ jsxs31(Avatar, { className: cn(currentSize.avatar, borderClasses[avatarBorderVariant]), children: [
|
|
6450
|
+
/* @__PURE__ */ jsx51(AvatarImage, { src: avatarSrc, alt: avatarAlt || name }),
|
|
6451
|
+
/* @__PURE__ */ jsx51(AvatarFallback, { className: "bg-surface-300 text-foreground font-medium", children: initials || name.charAt(0) })
|
|
6203
6452
|
] }) }),
|
|
6204
|
-
/* @__PURE__ */
|
|
6205
|
-
/* @__PURE__ */
|
|
6206
|
-
/* @__PURE__ */
|
|
6207
|
-
infoText && /* @__PURE__ */
|
|
6208
|
-
infoIcon && /* @__PURE__ */
|
|
6209
|
-
/* @__PURE__ */
|
|
6453
|
+
/* @__PURE__ */ jsxs31("div", { className: "flex flex-col gap-1", children: [
|
|
6454
|
+
/* @__PURE__ */ jsx51("h3", { className: cn("font-semibold text-foreground", currentSize.name), children: name }),
|
|
6455
|
+
/* @__PURE__ */ jsx51("p", { className: cn("text-muted-foreground", currentSize.username), children: username }),
|
|
6456
|
+
infoText && /* @__PURE__ */ jsxs31("div", { className: cn("flex items-center gap-1.5 text-muted-foreground", currentSize.info), children: [
|
|
6457
|
+
infoIcon && /* @__PURE__ */ jsx51("span", { className: "flex-shrink-0", children: infoIcon }),
|
|
6458
|
+
/* @__PURE__ */ jsx51("span", { className: "font-medium", children: infoText })
|
|
6210
6459
|
] })
|
|
6211
6460
|
] })
|
|
6212
6461
|
] }),
|
|
6213
|
-
(actionIcon || onActionClick) && /* @__PURE__ */
|
|
6462
|
+
(actionIcon || onActionClick) && /* @__PURE__ */ jsx51(
|
|
6214
6463
|
Button,
|
|
6215
6464
|
{
|
|
6216
6465
|
variant: "ghost",
|
|
@@ -6221,7 +6470,7 @@ var ProfileInfo = React21.forwardRef(
|
|
|
6221
6470
|
onActionClick?.();
|
|
6222
6471
|
},
|
|
6223
6472
|
"aria-label": "\u0639\u0645\u0644\u06CC\u0627\u062A",
|
|
6224
|
-
children: actionIcon || /* @__PURE__ */
|
|
6473
|
+
children: actionIcon || /* @__PURE__ */ jsxs31(
|
|
6225
6474
|
"svg",
|
|
6226
6475
|
{
|
|
6227
6476
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -6234,9 +6483,9 @@ var ProfileInfo = React21.forwardRef(
|
|
|
6234
6483
|
strokeLinecap: "round",
|
|
6235
6484
|
strokeLinejoin: "round",
|
|
6236
6485
|
children: [
|
|
6237
|
-
/* @__PURE__ */
|
|
6238
|
-
/* @__PURE__ */
|
|
6239
|
-
/* @__PURE__ */
|
|
6486
|
+
/* @__PURE__ */ jsx51("circle", { cx: "12", cy: "12", r: "1" }),
|
|
6487
|
+
/* @__PURE__ */ jsx51("circle", { cx: "12", cy: "5", r: "1" }),
|
|
6488
|
+
/* @__PURE__ */ jsx51("circle", { cx: "12", cy: "19", r: "1" })
|
|
6240
6489
|
]
|
|
6241
6490
|
}
|
|
6242
6491
|
)
|
|
@@ -6250,9 +6499,8 @@ var ProfileInfo = React21.forwardRef(
|
|
|
6250
6499
|
ProfileInfo.displayName = "ProfileInfo";
|
|
6251
6500
|
|
|
6252
6501
|
// src/components/ui/engagement-rate.tsx
|
|
6253
|
-
import * as
|
|
6254
|
-
import {
|
|
6255
|
-
import { jsx as jsx50, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
6502
|
+
import * as React24 from "react";
|
|
6503
|
+
import { jsx as jsx52, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
6256
6504
|
var convertToLocalNumbers2 = (text, locale) => {
|
|
6257
6505
|
if (locale === "fa" || locale === "ar") {
|
|
6258
6506
|
const persianDigits = ["\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9"];
|
|
@@ -6311,17 +6559,17 @@ var getGroupIcon = (group) => {
|
|
|
6311
6559
|
const iconClass = "w-12 h-12 text-primary";
|
|
6312
6560
|
switch (group) {
|
|
6313
6561
|
case "nano":
|
|
6314
|
-
return /* @__PURE__ */
|
|
6562
|
+
return /* @__PURE__ */ jsx52(Icons.users, { className: iconClass });
|
|
6315
6563
|
case "micro":
|
|
6316
|
-
return /* @__PURE__ */
|
|
6564
|
+
return /* @__PURE__ */ jsx52(Icons.userCheck, { className: iconClass });
|
|
6317
6565
|
case "mid":
|
|
6318
|
-
return /* @__PURE__ */
|
|
6566
|
+
return /* @__PURE__ */ jsx52(Icons.trendingUp, { className: iconClass });
|
|
6319
6567
|
case "macro":
|
|
6320
|
-
return /* @__PURE__ */
|
|
6568
|
+
return /* @__PURE__ */ jsx52(Icons.award, { className: iconClass });
|
|
6321
6569
|
case "mega":
|
|
6322
|
-
return /* @__PURE__ */
|
|
6570
|
+
return /* @__PURE__ */ jsx52(Icons.crown, { className: iconClass });
|
|
6323
6571
|
default:
|
|
6324
|
-
return /* @__PURE__ */
|
|
6572
|
+
return /* @__PURE__ */ jsx52(Icons.users, { className: iconClass });
|
|
6325
6573
|
}
|
|
6326
6574
|
};
|
|
6327
6575
|
var translations = {
|
|
@@ -6392,7 +6640,7 @@ var translations = {
|
|
|
6392
6640
|
mega: "Mega"
|
|
6393
6641
|
}
|
|
6394
6642
|
};
|
|
6395
|
-
var EngagementRate =
|
|
6643
|
+
var EngagementRate = React24.forwardRef(
|
|
6396
6644
|
({ className, currentRate, followers, locale = "fa", showCategoryCard = true, ...props }, ref) => {
|
|
6397
6645
|
const isRTL = locale === "fa" || locale === "ar";
|
|
6398
6646
|
const t = translations[locale];
|
|
@@ -6514,13 +6762,13 @@ var EngagementRate = React22.forwardRef(
|
|
|
6514
6762
|
return `${formatNumber2(1e3)} ${t.to} ${formatNumber2(1e4)} ${t.followers}`;
|
|
6515
6763
|
}
|
|
6516
6764
|
};
|
|
6517
|
-
return /* @__PURE__ */
|
|
6518
|
-
/* @__PURE__ */
|
|
6519
|
-
/* @__PURE__ */
|
|
6765
|
+
return /* @__PURE__ */ jsxs32("div", { ref, className: cn("space-y-4", className), dir: isRTL ? "rtl" : "ltr", ...props, children: [
|
|
6766
|
+
/* @__PURE__ */ jsxs32("div", { className: "text-center", children: [
|
|
6767
|
+
/* @__PURE__ */ jsxs32("div", { className: "text-4xl font-bold text-primary mb-2", children: [
|
|
6520
6768
|
convertToLocalNumbers2((currentRate * 100).toFixed(3), locale),
|
|
6521
6769
|
"%"
|
|
6522
6770
|
] }),
|
|
6523
|
-
currentRangeIndex !== -1 && /* @__PURE__ */
|
|
6771
|
+
currentRangeIndex !== -1 && /* @__PURE__ */ jsx52(
|
|
6524
6772
|
Badge,
|
|
6525
6773
|
{
|
|
6526
6774
|
className: "text-sm font-medium text-white border-0",
|
|
@@ -6529,13 +6777,13 @@ var EngagementRate = React22.forwardRef(
|
|
|
6529
6777
|
}
|
|
6530
6778
|
)
|
|
6531
6779
|
] }),
|
|
6532
|
-
/* @__PURE__ */
|
|
6533
|
-
/* @__PURE__ */
|
|
6534
|
-
/* @__PURE__ */
|
|
6535
|
-
/* @__PURE__ */
|
|
6780
|
+
/* @__PURE__ */ jsxs32("div", { className: "space-y-3", children: [
|
|
6781
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex justify-between text-sm text-muted-foreground", children: [
|
|
6782
|
+
/* @__PURE__ */ jsx52("span", { children: isRTL ? t.excellent : t.low }),
|
|
6783
|
+
/* @__PURE__ */ jsx52("span", { children: isRTL ? t.low : t.excellent })
|
|
6536
6784
|
] }),
|
|
6537
|
-
/* @__PURE__ */
|
|
6538
|
-
/* @__PURE__ */
|
|
6785
|
+
/* @__PURE__ */ jsxs32("div", { className: "relative", children: [
|
|
6786
|
+
/* @__PURE__ */ jsx52("div", { className: "flex gap-1 h-6 rounded overflow-hidden", children: engagementRanges.map((range, index) => /* @__PURE__ */ jsx52(
|
|
6539
6787
|
"div",
|
|
6540
6788
|
{
|
|
6541
6789
|
className: "flex-1 transition-all duration-300 cursor-pointer group relative",
|
|
@@ -6556,35 +6804,35 @@ var EngagementRate = React22.forwardRef(
|
|
|
6556
6804
|
},
|
|
6557
6805
|
index
|
|
6558
6806
|
)) }),
|
|
6559
|
-
/* @__PURE__ */
|
|
6807
|
+
/* @__PURE__ */ jsx52(
|
|
6560
6808
|
"div",
|
|
6561
6809
|
{
|
|
6562
6810
|
className: "absolute -top-1 transform -translate-x-1/2 transition-all duration-500 z-10",
|
|
6563
6811
|
style: { left: `${adjustedTrianglePosition}%` },
|
|
6564
|
-
children: /* @__PURE__ */
|
|
6812
|
+
children: /* @__PURE__ */ jsx52(
|
|
6565
6813
|
"svg",
|
|
6566
6814
|
{
|
|
6567
6815
|
width: "20",
|
|
6568
6816
|
height: "14",
|
|
6569
6817
|
viewBox: "0 0 20 14",
|
|
6570
6818
|
className: "fill-white dark:fill-white drop-shadow-md transition-transform duration-300",
|
|
6571
|
-
children: /* @__PURE__ */
|
|
6819
|
+
children: /* @__PURE__ */ jsx52("path", { d: "M10 14L0 0H20L10 14Z" })
|
|
6572
6820
|
}
|
|
6573
6821
|
)
|
|
6574
6822
|
}
|
|
6575
6823
|
)
|
|
6576
6824
|
] })
|
|
6577
6825
|
] }),
|
|
6578
|
-
showCategoryCard && /* @__PURE__ */
|
|
6579
|
-
/* @__PURE__ */
|
|
6580
|
-
/* @__PURE__ */
|
|
6581
|
-
/* @__PURE__ */
|
|
6582
|
-
/* @__PURE__ */
|
|
6583
|
-
/* @__PURE__ */
|
|
6826
|
+
showCategoryCard && /* @__PURE__ */ jsx52("div", { className: "mt-6 bg-surface-100 rounded-lg border border-border p-5", children: /* @__PURE__ */ jsxs32("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
|
|
6827
|
+
/* @__PURE__ */ jsx52("div", { className: "flex items-center justify-center order-1 lg:order-1", children: /* @__PURE__ */ jsxs32("div", { className: "w-full h-full flex flex-col justify-center items-center text-center space-y-4", children: [
|
|
6828
|
+
/* @__PURE__ */ jsx52("div", { className: "mb-2", children: getGroupIcon(engagementData.groupKey) }),
|
|
6829
|
+
/* @__PURE__ */ jsxs32("div", { className: "space-y-2", children: [
|
|
6830
|
+
/* @__PURE__ */ jsx52("p", { className: "text-lg font-semibold", children: t.yourCategory }),
|
|
6831
|
+
/* @__PURE__ */ jsx52("p", { className: "text-3xl font-black text-primary", children: locale === "en" ? `${engagementData.group} ${t.influencer}` : `${engagementData.group} ${t.influencer}` })
|
|
6584
6832
|
] }),
|
|
6585
|
-
/* @__PURE__ */
|
|
6586
|
-
/* @__PURE__ */
|
|
6587
|
-
/* @__PURE__ */
|
|
6833
|
+
/* @__PURE__ */ jsxs32("div", { className: "space-y-2", children: [
|
|
6834
|
+
/* @__PURE__ */ jsx52("p", { className: "text-base font-medium text-muted-foreground", children: getFollowerRange() }),
|
|
6835
|
+
/* @__PURE__ */ jsxs32("p", { className: "text-xl font-bold", children: [
|
|
6588
6836
|
"(",
|
|
6589
6837
|
formatNumber2(followers),
|
|
6590
6838
|
" ",
|
|
@@ -6593,9 +6841,9 @@ var EngagementRate = React22.forwardRef(
|
|
|
6593
6841
|
] })
|
|
6594
6842
|
] })
|
|
6595
6843
|
] }) }),
|
|
6596
|
-
/* @__PURE__ */
|
|
6597
|
-
/* @__PURE__ */
|
|
6598
|
-
/* @__PURE__ */
|
|
6844
|
+
/* @__PURE__ */ jsxs32("div", { className: "space-y-3 order-2 lg:order-2", children: [
|
|
6845
|
+
/* @__PURE__ */ jsx52("h3", { className: "text-base font-semibold mb-3", children: locale === "en" ? `${engagementData.group} ${t.influencer} ${t.criteria}` : `${t.criteria} ${engagementData.group} ${t.influencer}` }),
|
|
6846
|
+
/* @__PURE__ */ jsx52("div", { className: "space-y-2.5", children: engagementRanges.map((range, index) => {
|
|
6599
6847
|
const isCurrentRange = index === currentRangeIndex;
|
|
6600
6848
|
const hexToRgb = (hex) => {
|
|
6601
6849
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
@@ -6608,7 +6856,7 @@ var EngagementRate = React22.forwardRef(
|
|
|
6608
6856
|
const rgb = hexToRgb(range.color);
|
|
6609
6857
|
const bgColor = isCurrentRange && rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 0.1)` : "transparent";
|
|
6610
6858
|
const displayText = index === 0 ? convertToLocalNumbers2(`${range.min}% ${t.and}`, locale) : index === engagementRanges.length - 1 ? convertToLocalNumbers2(`${t.lessThan} ${range.max}%`, locale) : convertToLocalNumbers2(`${range.min}% ${t.to} ${range.max}%`, locale);
|
|
6611
|
-
return /* @__PURE__ */
|
|
6859
|
+
return /* @__PURE__ */ jsxs32(
|
|
6612
6860
|
"div",
|
|
6613
6861
|
{
|
|
6614
6862
|
className: cn(
|
|
@@ -6620,9 +6868,9 @@ var EngagementRate = React22.forwardRef(
|
|
|
6620
6868
|
borderColor: isCurrentRange ? range.color : void 0
|
|
6621
6869
|
},
|
|
6622
6870
|
children: [
|
|
6623
|
-
/* @__PURE__ */
|
|
6624
|
-
/* @__PURE__ */
|
|
6625
|
-
/* @__PURE__ */
|
|
6871
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-2", children: [
|
|
6872
|
+
/* @__PURE__ */ jsx52("div", { className: "w-2.5 h-2.5 rounded-full", style: { backgroundColor: range.color } }),
|
|
6873
|
+
/* @__PURE__ */ jsxs32(
|
|
6626
6874
|
"span",
|
|
6627
6875
|
{
|
|
6628
6876
|
className: cn(
|
|
@@ -6631,7 +6879,7 @@ var EngagementRate = React22.forwardRef(
|
|
|
6631
6879
|
),
|
|
6632
6880
|
children: [
|
|
6633
6881
|
range.label,
|
|
6634
|
-
isCurrentRange && /* @__PURE__ */
|
|
6882
|
+
isCurrentRange && /* @__PURE__ */ jsxs32("span", { className: cn("text-xs font-normal text-muted-foreground", isRTL ? "mr-1" : "ml-1"), children: [
|
|
6635
6883
|
"(",
|
|
6636
6884
|
t.you,
|
|
6637
6885
|
")"
|
|
@@ -6640,7 +6888,7 @@ var EngagementRate = React22.forwardRef(
|
|
|
6640
6888
|
}
|
|
6641
6889
|
)
|
|
6642
6890
|
] }),
|
|
6643
|
-
/* @__PURE__ */
|
|
6891
|
+
/* @__PURE__ */ jsx52(
|
|
6644
6892
|
"span",
|
|
6645
6893
|
{
|
|
6646
6894
|
className: cn("text-sm font-semibold", !isCurrentRange && "text-muted-foreground"),
|
|
@@ -6661,8 +6909,8 @@ var EngagementRate = React22.forwardRef(
|
|
|
6661
6909
|
EngagementRate.displayName = "EngagementRate";
|
|
6662
6910
|
|
|
6663
6911
|
// src/components/ui/engagement-rate-bar.tsx
|
|
6664
|
-
import * as
|
|
6665
|
-
import { jsx as
|
|
6912
|
+
import * as React25 from "react";
|
|
6913
|
+
import { jsx as jsx53, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
6666
6914
|
var convertToLocalNumbers3 = (text, locale) => {
|
|
6667
6915
|
if (locale === "fa" || locale === "ar") {
|
|
6668
6916
|
const persianDigits = ["\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9"];
|
|
@@ -6743,7 +6991,7 @@ var translations2 = {
|
|
|
6743
6991
|
low: "Low"
|
|
6744
6992
|
}
|
|
6745
6993
|
};
|
|
6746
|
-
var EngagementRateBar =
|
|
6994
|
+
var EngagementRateBar = React25.forwardRef(
|
|
6747
6995
|
({ className, currentRate, followers, locale = "fa", showHelperText = true, ...props }, ref) => {
|
|
6748
6996
|
const isRTL = locale === "fa" || locale === "ar";
|
|
6749
6997
|
const t = translations2[locale];
|
|
@@ -6838,7 +7086,7 @@ var EngagementRateBar = React23.forwardRef(
|
|
|
6838
7086
|
};
|
|
6839
7087
|
const trianglePosition = getTrianglePosition();
|
|
6840
7088
|
const adjustedTrianglePosition = isRTL ? 100 - trianglePosition : trianglePosition;
|
|
6841
|
-
return /* @__PURE__ */
|
|
7089
|
+
return /* @__PURE__ */ jsxs33(
|
|
6842
7090
|
"div",
|
|
6843
7091
|
{
|
|
6844
7092
|
ref,
|
|
@@ -6846,12 +7094,12 @@ var EngagementRateBar = React23.forwardRef(
|
|
|
6846
7094
|
dir: isRTL ? "rtl" : "ltr",
|
|
6847
7095
|
...props,
|
|
6848
7096
|
children: [
|
|
6849
|
-
/* @__PURE__ */
|
|
6850
|
-
/* @__PURE__ */
|
|
7097
|
+
/* @__PURE__ */ jsxs33("div", { className: "text-center", children: [
|
|
7098
|
+
/* @__PURE__ */ jsxs33("div", { className: "text-4xl font-bold text-primary mb-2", children: [
|
|
6851
7099
|
convertToLocalNumbers3((currentRate * 100).toFixed(3), locale),
|
|
6852
7100
|
"%"
|
|
6853
7101
|
] }),
|
|
6854
|
-
currentRangeIndex !== -1 && /* @__PURE__ */
|
|
7102
|
+
currentRangeIndex !== -1 && /* @__PURE__ */ jsx53(
|
|
6855
7103
|
Badge,
|
|
6856
7104
|
{
|
|
6857
7105
|
className: "text-sm font-medium text-white border-0",
|
|
@@ -6860,13 +7108,13 @@ var EngagementRateBar = React23.forwardRef(
|
|
|
6860
7108
|
}
|
|
6861
7109
|
)
|
|
6862
7110
|
] }),
|
|
6863
|
-
/* @__PURE__ */
|
|
6864
|
-
showHelperText && /* @__PURE__ */
|
|
6865
|
-
/* @__PURE__ */
|
|
6866
|
-
/* @__PURE__ */
|
|
7111
|
+
/* @__PURE__ */ jsxs33("div", { className: "space-y-3", children: [
|
|
7112
|
+
showHelperText && /* @__PURE__ */ jsxs33("div", { className: "flex justify-between text-sm text-muted-foreground", children: [
|
|
7113
|
+
/* @__PURE__ */ jsx53("span", { children: isRTL ? t.excellent : t.low }),
|
|
7114
|
+
/* @__PURE__ */ jsx53("span", { children: isRTL ? t.low : t.excellent })
|
|
6867
7115
|
] }),
|
|
6868
|
-
/* @__PURE__ */
|
|
6869
|
-
/* @__PURE__ */
|
|
7116
|
+
/* @__PURE__ */ jsxs33("div", { className: "relative", children: [
|
|
7117
|
+
/* @__PURE__ */ jsx53("div", { className: "flex gap-1 h-6 rounded overflow-hidden", children: engagementRanges.map((range, index) => /* @__PURE__ */ jsx53(
|
|
6870
7118
|
"div",
|
|
6871
7119
|
{
|
|
6872
7120
|
className: "flex-1 transition-all duration-300 cursor-pointer group relative",
|
|
@@ -6887,14 +7135,14 @@ var EngagementRateBar = React23.forwardRef(
|
|
|
6887
7135
|
},
|
|
6888
7136
|
index
|
|
6889
7137
|
)) }),
|
|
6890
|
-
/* @__PURE__ */
|
|
7138
|
+
/* @__PURE__ */ jsx53(
|
|
6891
7139
|
"div",
|
|
6892
7140
|
{
|
|
6893
7141
|
className: "absolute -top-2 transform -translate-x-1/2 transition-all duration-500 z-10",
|
|
6894
7142
|
style: { left: `${adjustedTrianglePosition}%` },
|
|
6895
|
-
children: /* @__PURE__ */
|
|
6896
|
-
/* @__PURE__ */
|
|
6897
|
-
/* @__PURE__ */
|
|
7143
|
+
children: /* @__PURE__ */ jsxs33("div", { className: "relative", children: [
|
|
7144
|
+
/* @__PURE__ */ jsx53("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" }),
|
|
7145
|
+
/* @__PURE__ */ jsx53("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" })
|
|
6898
7146
|
] })
|
|
6899
7147
|
}
|
|
6900
7148
|
)
|
|
@@ -6909,9 +7157,9 @@ EngagementRateBar.displayName = "EngagementRateBar";
|
|
|
6909
7157
|
|
|
6910
7158
|
// src/components/ui/progress.tsx
|
|
6911
7159
|
import * as ProgressPrimitive from "@radix-ui/react-progress";
|
|
6912
|
-
import { cva as
|
|
6913
|
-
import { jsx as
|
|
6914
|
-
var progressVariants =
|
|
7160
|
+
import { cva as cva12 } from "class-variance-authority";
|
|
7161
|
+
import { jsx as jsx54, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
7162
|
+
var progressVariants = cva12(
|
|
6915
7163
|
"relative w-full overflow-hidden rounded-full bg-surface-300",
|
|
6916
7164
|
{
|
|
6917
7165
|
variants: {
|
|
@@ -6926,7 +7174,7 @@ var progressVariants = cva10(
|
|
|
6926
7174
|
}
|
|
6927
7175
|
}
|
|
6928
7176
|
);
|
|
6929
|
-
var progressIndicatorVariants =
|
|
7177
|
+
var progressIndicatorVariants = cva12(
|
|
6930
7178
|
"h-full w-full flex-1 transition-all origin-left rtl:origin-right",
|
|
6931
7179
|
{
|
|
6932
7180
|
variants: {
|
|
@@ -6954,19 +7202,19 @@ function Progress({
|
|
|
6954
7202
|
}) {
|
|
6955
7203
|
const clampedValue = Math.max(0, Math.min(100, value ?? 0));
|
|
6956
7204
|
const displayValue = `${Math.round(clampedValue)}%`;
|
|
6957
|
-
return /* @__PURE__ */
|
|
6958
|
-
(label || showValue) && /* @__PURE__ */
|
|
6959
|
-
label && /* @__PURE__ */
|
|
6960
|
-
showValue && /* @__PURE__ */
|
|
7205
|
+
return /* @__PURE__ */ jsxs34("div", { className: "w-full space-y-2", children: [
|
|
7206
|
+
(label || showValue) && /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-between text-sm", children: [
|
|
7207
|
+
label && /* @__PURE__ */ jsx54("span", { className: "text-foreground", children: label }),
|
|
7208
|
+
showValue && /* @__PURE__ */ jsx54("span", { className: "text-foreground-light font-medium", children: displayValue })
|
|
6961
7209
|
] }),
|
|
6962
|
-
/* @__PURE__ */
|
|
7210
|
+
/* @__PURE__ */ jsx54(
|
|
6963
7211
|
ProgressPrimitive.Root,
|
|
6964
7212
|
{
|
|
6965
7213
|
"data-slot": "progress",
|
|
6966
7214
|
className: cn(progressVariants({ size }), className),
|
|
6967
7215
|
value,
|
|
6968
7216
|
...props,
|
|
6969
|
-
children: /* @__PURE__ */
|
|
7217
|
+
children: /* @__PURE__ */ jsx54(
|
|
6970
7218
|
ProgressPrimitive.Indicator,
|
|
6971
7219
|
{
|
|
6972
7220
|
"data-slot": "progress-indicator",
|
|
@@ -6981,13 +7229,12 @@ function Progress({
|
|
|
6981
7229
|
|
|
6982
7230
|
// src/components/ui/radio-group.tsx
|
|
6983
7231
|
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
|
|
6984
|
-
import {
|
|
6985
|
-
import { jsx as jsx53 } from "react/jsx-runtime";
|
|
7232
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
6986
7233
|
function RadioGroup4({
|
|
6987
7234
|
className,
|
|
6988
7235
|
...props
|
|
6989
7236
|
}) {
|
|
6990
|
-
return /* @__PURE__ */
|
|
7237
|
+
return /* @__PURE__ */ jsx55(
|
|
6991
7238
|
RadioGroupPrimitive.Root,
|
|
6992
7239
|
{
|
|
6993
7240
|
"data-slot": "radio-group",
|
|
@@ -7000,7 +7247,7 @@ function RadioGroupItem({
|
|
|
7000
7247
|
className,
|
|
7001
7248
|
...props
|
|
7002
7249
|
}) {
|
|
7003
|
-
return /* @__PURE__ */
|
|
7250
|
+
return /* @__PURE__ */ jsx55(
|
|
7004
7251
|
RadioGroupPrimitive.Item,
|
|
7005
7252
|
{
|
|
7006
7253
|
"data-slot": "radio-group-item",
|
|
@@ -7009,12 +7256,12 @@ function RadioGroupItem({
|
|
|
7009
7256
|
className
|
|
7010
7257
|
),
|
|
7011
7258
|
...props,
|
|
7012
|
-
children: /* @__PURE__ */
|
|
7259
|
+
children: /* @__PURE__ */ jsx55(
|
|
7013
7260
|
RadioGroupPrimitive.Indicator,
|
|
7014
7261
|
{
|
|
7015
7262
|
"data-slot": "radio-group-indicator",
|
|
7016
7263
|
className: "relative flex items-center justify-center",
|
|
7017
|
-
children: /* @__PURE__ */
|
|
7264
|
+
children: /* @__PURE__ */ jsx55(Icons.circle, { className: "fill-brand absolute top-1/2 start-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rtl:translate-x-1/2" })
|
|
7018
7265
|
}
|
|
7019
7266
|
)
|
|
7020
7267
|
}
|
|
@@ -7022,14 +7269,14 @@ function RadioGroupItem({
|
|
|
7022
7269
|
}
|
|
7023
7270
|
|
|
7024
7271
|
// src/components/ui/radio-card.tsx
|
|
7025
|
-
import * as
|
|
7272
|
+
import * as React26 from "react";
|
|
7026
7273
|
import * as RadioGroupPrimitive2 from "@radix-ui/react-radio-group";
|
|
7027
|
-
import { jsx as
|
|
7028
|
-
var RadioCards =
|
|
7274
|
+
import { jsx as jsx56 } from "react/jsx-runtime";
|
|
7275
|
+
var RadioCards = React26.forwardRef(({ className, columns = 1, dir = "rtl", children, ...props }, ref) => {
|
|
7029
7276
|
const gridCols = typeof columns === "number" ? `grid-cols-${columns}` : Object.entries(columns).map(
|
|
7030
7277
|
([key, val]) => key === "initial" ? `grid-cols-${val}` : `${key}:grid-cols-${val}`
|
|
7031
7278
|
).join(" ");
|
|
7032
|
-
return /* @__PURE__ */
|
|
7279
|
+
return /* @__PURE__ */ jsx56(
|
|
7033
7280
|
RadioGroupPrimitive2.Root,
|
|
7034
7281
|
{
|
|
7035
7282
|
ref,
|
|
@@ -7042,8 +7289,8 @@ var RadioCards = React24.forwardRef(({ className, columns = 1, dir = "rtl", chil
|
|
|
7042
7289
|
);
|
|
7043
7290
|
});
|
|
7044
7291
|
RadioCards.displayName = "RadioCards";
|
|
7045
|
-
var RadioCardItem =
|
|
7046
|
-
return /* @__PURE__ */
|
|
7292
|
+
var RadioCardItem = React26.forwardRef(({ className, children, ...props }, ref) => {
|
|
7293
|
+
return /* @__PURE__ */ jsx56(
|
|
7047
7294
|
RadioGroupPrimitive2.Item,
|
|
7048
7295
|
{
|
|
7049
7296
|
ref,
|
|
@@ -7062,7 +7309,7 @@ var RadioCardItem = React24.forwardRef(({ className, children, ...props }, ref)
|
|
|
7062
7309
|
);
|
|
7063
7310
|
});
|
|
7064
7311
|
RadioCardItem.displayName = "RadioCardItem";
|
|
7065
|
-
var RadioCardTitle =
|
|
7312
|
+
var RadioCardTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx56(
|
|
7066
7313
|
"h4",
|
|
7067
7314
|
{
|
|
7068
7315
|
ref,
|
|
@@ -7071,7 +7318,7 @@ var RadioCardTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__
|
|
|
7071
7318
|
}
|
|
7072
7319
|
));
|
|
7073
7320
|
RadioCardTitle.displayName = "RadioCardTitle";
|
|
7074
|
-
var RadioCardDescription =
|
|
7321
|
+
var RadioCardDescription = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx56(
|
|
7075
7322
|
"p",
|
|
7076
7323
|
{
|
|
7077
7324
|
ref,
|
|
@@ -7082,14 +7329,13 @@ var RadioCardDescription = React24.forwardRef(({ className, ...props }, ref) =>
|
|
|
7082
7329
|
RadioCardDescription.displayName = "RadioCardDescription";
|
|
7083
7330
|
|
|
7084
7331
|
// src/components/ui/resizable.tsx
|
|
7085
|
-
import { GripVerticalIcon } from "lucide-react";
|
|
7086
7332
|
import * as ResizablePrimitive from "react-resizable-panels";
|
|
7087
|
-
import { jsx as
|
|
7333
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
7088
7334
|
function ResizablePanelGroup({
|
|
7089
7335
|
className,
|
|
7090
7336
|
...props
|
|
7091
7337
|
}) {
|
|
7092
|
-
return /* @__PURE__ */
|
|
7338
|
+
return /* @__PURE__ */ jsx57(
|
|
7093
7339
|
ResizablePrimitive.PanelGroup,
|
|
7094
7340
|
{
|
|
7095
7341
|
"data-slot": "resizable-panel-group",
|
|
@@ -7104,14 +7350,14 @@ function ResizablePanelGroup({
|
|
|
7104
7350
|
function ResizablePanel({
|
|
7105
7351
|
...props
|
|
7106
7352
|
}) {
|
|
7107
|
-
return /* @__PURE__ */
|
|
7353
|
+
return /* @__PURE__ */ jsx57(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
|
|
7108
7354
|
}
|
|
7109
7355
|
function ResizableHandle({
|
|
7110
7356
|
withHandle,
|
|
7111
7357
|
className,
|
|
7112
7358
|
...props
|
|
7113
7359
|
}) {
|
|
7114
|
-
return /* @__PURE__ */
|
|
7360
|
+
return /* @__PURE__ */ jsx57(
|
|
7115
7361
|
ResizablePrimitive.PanelResizeHandle,
|
|
7116
7362
|
{
|
|
7117
7363
|
"data-slot": "resizable-handle",
|
|
@@ -7120,27 +7366,27 @@ function ResizableHandle({
|
|
|
7120
7366
|
className
|
|
7121
7367
|
),
|
|
7122
7368
|
...props,
|
|
7123
|
-
children: withHandle && /* @__PURE__ */
|
|
7369
|
+
children: withHandle && /* @__PURE__ */ jsx57("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border", children: /* @__PURE__ */ jsx57(Icons.gripVertical, { className: "size-2.5" }) })
|
|
7124
7370
|
}
|
|
7125
7371
|
);
|
|
7126
7372
|
}
|
|
7127
7373
|
|
|
7128
7374
|
// src/components/ui/scroll-area.tsx
|
|
7129
7375
|
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
7130
|
-
import { jsx as
|
|
7376
|
+
import { jsx as jsx58, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
7131
7377
|
function ScrollArea({
|
|
7132
7378
|
className,
|
|
7133
7379
|
children,
|
|
7134
7380
|
...props
|
|
7135
7381
|
}) {
|
|
7136
|
-
return /* @__PURE__ */
|
|
7382
|
+
return /* @__PURE__ */ jsxs35(
|
|
7137
7383
|
ScrollAreaPrimitive.Root,
|
|
7138
7384
|
{
|
|
7139
7385
|
"data-slot": "scroll-area",
|
|
7140
7386
|
className: cn("relative", className),
|
|
7141
7387
|
...props,
|
|
7142
7388
|
children: [
|
|
7143
|
-
/* @__PURE__ */
|
|
7389
|
+
/* @__PURE__ */ jsx58(
|
|
7144
7390
|
ScrollAreaPrimitive.Viewport,
|
|
7145
7391
|
{
|
|
7146
7392
|
"data-slot": "scroll-area-viewport",
|
|
@@ -7148,8 +7394,8 @@ function ScrollArea({
|
|
|
7148
7394
|
children
|
|
7149
7395
|
}
|
|
7150
7396
|
),
|
|
7151
|
-
/* @__PURE__ */
|
|
7152
|
-
/* @__PURE__ */
|
|
7397
|
+
/* @__PURE__ */ jsx58(ScrollBar, {}),
|
|
7398
|
+
/* @__PURE__ */ jsx58(ScrollAreaPrimitive.Corner, {})
|
|
7153
7399
|
]
|
|
7154
7400
|
}
|
|
7155
7401
|
);
|
|
@@ -7159,7 +7405,7 @@ function ScrollBar({
|
|
|
7159
7405
|
orientation = "vertical",
|
|
7160
7406
|
...props
|
|
7161
7407
|
}) {
|
|
7162
|
-
return /* @__PURE__ */
|
|
7408
|
+
return /* @__PURE__ */ jsx58(
|
|
7163
7409
|
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
7164
7410
|
{
|
|
7165
7411
|
"data-slot": "scroll-area-scrollbar",
|
|
@@ -7171,7 +7417,7 @@ function ScrollBar({
|
|
|
7171
7417
|
className
|
|
7172
7418
|
),
|
|
7173
7419
|
...props,
|
|
7174
|
-
children: /* @__PURE__ */
|
|
7420
|
+
children: /* @__PURE__ */ jsx58(
|
|
7175
7421
|
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
7176
7422
|
{
|
|
7177
7423
|
"data-slot": "scroll-area-thumb",
|
|
@@ -7183,14 +7429,13 @@ function ScrollBar({
|
|
|
7183
7429
|
}
|
|
7184
7430
|
|
|
7185
7431
|
// src/components/ui/select.tsx
|
|
7186
|
-
import * as
|
|
7432
|
+
import * as React27 from "react";
|
|
7187
7433
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
7188
|
-
import {
|
|
7189
|
-
import {
|
|
7190
|
-
import { jsx as jsx57, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
7434
|
+
import { cva as cva13 } from "class-variance-authority";
|
|
7435
|
+
import { jsx as jsx59, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
7191
7436
|
var Select = SelectPrimitive.Root;
|
|
7192
7437
|
var SelectGroup = SelectPrimitive.Group;
|
|
7193
|
-
var SelectTriggerVariants =
|
|
7438
|
+
var SelectTriggerVariants = cva13("", {
|
|
7194
7439
|
variants: {
|
|
7195
7440
|
size: {
|
|
7196
7441
|
...SIZE_VARIANTS
|
|
@@ -7200,16 +7445,16 @@ var SelectTriggerVariants = cva11("", {
|
|
|
7200
7445
|
size: SIZE_VARIANTS_DEFAULT
|
|
7201
7446
|
}
|
|
7202
7447
|
});
|
|
7203
|
-
var SelectValue =
|
|
7448
|
+
var SelectValue = React27.forwardRef(({ placeholder, ...props }, ref) => /* @__PURE__ */ jsx59(
|
|
7204
7449
|
SelectPrimitive.Value,
|
|
7205
7450
|
{
|
|
7206
|
-
placeholder: typeof placeholder === "string" ? /* @__PURE__ */
|
|
7451
|
+
placeholder: typeof placeholder === "string" ? /* @__PURE__ */ jsx59("span", { children: placeholder }) : placeholder,
|
|
7207
7452
|
...props,
|
|
7208
7453
|
ref
|
|
7209
7454
|
}
|
|
7210
7455
|
));
|
|
7211
7456
|
SelectValue.displayName = SelectPrimitive.Value.displayName;
|
|
7212
|
-
var SelectTrigger =
|
|
7457
|
+
var SelectTrigger = React27.forwardRef(({ className, children, size, ...props }, ref) => /* @__PURE__ */ jsxs36(
|
|
7213
7458
|
SelectPrimitive.Trigger,
|
|
7214
7459
|
{
|
|
7215
7460
|
ref,
|
|
@@ -7224,12 +7469,12 @@ var SelectTrigger = React25.forwardRef(({ className, children, size, ...props },
|
|
|
7224
7469
|
...props,
|
|
7225
7470
|
children: [
|
|
7226
7471
|
children,
|
|
7227
|
-
/* @__PURE__ */
|
|
7472
|
+
/* @__PURE__ */ jsx59(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx59(Icons.chevronDown, { className: "h-4 w-4 text-foreground-lighter flex-shrink-0", strokeWidth: 1.5 }) })
|
|
7228
7473
|
]
|
|
7229
7474
|
}
|
|
7230
7475
|
));
|
|
7231
7476
|
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
7232
|
-
var SelectScrollUpButton =
|
|
7477
|
+
var SelectScrollUpButton = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx59(
|
|
7233
7478
|
SelectPrimitive.ScrollUpButton,
|
|
7234
7479
|
{
|
|
7235
7480
|
ref,
|
|
@@ -7238,11 +7483,11 @@ var SelectScrollUpButton = React25.forwardRef(({ className, ...props }, ref) =>
|
|
|
7238
7483
|
className
|
|
7239
7484
|
),
|
|
7240
7485
|
...props,
|
|
7241
|
-
children: /* @__PURE__ */
|
|
7486
|
+
children: /* @__PURE__ */ jsx59(Icons.chevronUp, { className: "h-4 w-4" })
|
|
7242
7487
|
}
|
|
7243
7488
|
));
|
|
7244
7489
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
7245
|
-
var SelectScrollDownButton =
|
|
7490
|
+
var SelectScrollDownButton = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx59(
|
|
7246
7491
|
SelectPrimitive.ScrollDownButton,
|
|
7247
7492
|
{
|
|
7248
7493
|
ref,
|
|
@@ -7251,11 +7496,11 @@ var SelectScrollDownButton = React25.forwardRef(({ className, ...props }, ref) =
|
|
|
7251
7496
|
className
|
|
7252
7497
|
),
|
|
7253
7498
|
...props,
|
|
7254
|
-
children: /* @__PURE__ */
|
|
7499
|
+
children: /* @__PURE__ */ jsx59(Icons.chevronDown, { className: "h-4 w-4" })
|
|
7255
7500
|
}
|
|
7256
7501
|
));
|
|
7257
7502
|
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
7258
|
-
var SelectContent =
|
|
7503
|
+
var SelectContent = React27.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx59(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs36(
|
|
7259
7504
|
SelectPrimitive.Content,
|
|
7260
7505
|
{
|
|
7261
7506
|
ref,
|
|
@@ -7267,8 +7512,8 @@ var SelectContent = React25.forwardRef(({ className, children, position = "poppe
|
|
|
7267
7512
|
position,
|
|
7268
7513
|
...props,
|
|
7269
7514
|
children: [
|
|
7270
|
-
/* @__PURE__ */
|
|
7271
|
-
/* @__PURE__ */
|
|
7515
|
+
/* @__PURE__ */ jsx59(SelectScrollUpButton, {}),
|
|
7516
|
+
/* @__PURE__ */ jsx59(
|
|
7272
7517
|
SelectPrimitive.Viewport,
|
|
7273
7518
|
{
|
|
7274
7519
|
className: cn(
|
|
@@ -7278,12 +7523,12 @@ var SelectContent = React25.forwardRef(({ className, children, position = "poppe
|
|
|
7278
7523
|
children
|
|
7279
7524
|
}
|
|
7280
7525
|
),
|
|
7281
|
-
/* @__PURE__ */
|
|
7526
|
+
/* @__PURE__ */ jsx59(SelectScrollDownButton, {})
|
|
7282
7527
|
]
|
|
7283
7528
|
}
|
|
7284
7529
|
) }));
|
|
7285
7530
|
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
7286
|
-
var SelectLabel =
|
|
7531
|
+
var SelectLabel = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx59(
|
|
7287
7532
|
SelectPrimitive.Label,
|
|
7288
7533
|
{
|
|
7289
7534
|
ref,
|
|
@@ -7295,7 +7540,7 @@ var SelectLabel = React25.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
7295
7540
|
}
|
|
7296
7541
|
));
|
|
7297
7542
|
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
7298
|
-
var SelectItem =
|
|
7543
|
+
var SelectItem = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs36(
|
|
7299
7544
|
SelectPrimitive.Item,
|
|
7300
7545
|
{
|
|
7301
7546
|
ref,
|
|
@@ -7306,13 +7551,13 @@ var SelectItem = React25.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
7306
7551
|
),
|
|
7307
7552
|
...props,
|
|
7308
7553
|
children: [
|
|
7309
|
-
/* @__PURE__ */
|
|
7310
|
-
/* @__PURE__ */
|
|
7554
|
+
/* @__PURE__ */ jsx59("span", { className: "absolute start-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx59(SelectPrimitive.ItemIndicator, { className: "h-3.5 w-3.5 bg-foreground rounded-full flex justify-center items-center", children: /* @__PURE__ */ jsx59(Icons.check, { className: "h-2 w-2 text-background-overlay", strokeWidth: 6 }) }) }),
|
|
7555
|
+
/* @__PURE__ */ jsx59(SelectPrimitive.ItemText, { children: typeof children === "string" ? /* @__PURE__ */ jsx59("span", { children }) : children })
|
|
7311
7556
|
]
|
|
7312
7557
|
}
|
|
7313
7558
|
));
|
|
7314
7559
|
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
7315
|
-
var SelectSeparator =
|
|
7560
|
+
var SelectSeparator = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx59(
|
|
7316
7561
|
SelectPrimitive.Separator,
|
|
7317
7562
|
{
|
|
7318
7563
|
ref,
|
|
@@ -7324,31 +7569,30 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
|
7324
7569
|
|
|
7325
7570
|
// src/components/ui/sheet.tsx
|
|
7326
7571
|
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
7327
|
-
import {
|
|
7328
|
-
import { jsx as jsx58, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
7572
|
+
import { jsx as jsx60, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
7329
7573
|
function Sheet({ ...props }) {
|
|
7330
|
-
return /* @__PURE__ */
|
|
7574
|
+
return /* @__PURE__ */ jsx60(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
7331
7575
|
}
|
|
7332
7576
|
function SheetTrigger({
|
|
7333
7577
|
...props
|
|
7334
7578
|
}) {
|
|
7335
|
-
return /* @__PURE__ */
|
|
7579
|
+
return /* @__PURE__ */ jsx60(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
7336
7580
|
}
|
|
7337
7581
|
function SheetClose({
|
|
7338
7582
|
...props
|
|
7339
7583
|
}) {
|
|
7340
|
-
return /* @__PURE__ */
|
|
7584
|
+
return /* @__PURE__ */ jsx60(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
7341
7585
|
}
|
|
7342
7586
|
function SheetPortal({
|
|
7343
7587
|
...props
|
|
7344
7588
|
}) {
|
|
7345
|
-
return /* @__PURE__ */
|
|
7589
|
+
return /* @__PURE__ */ jsx60(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
7346
7590
|
}
|
|
7347
7591
|
function SheetOverlay({
|
|
7348
7592
|
className,
|
|
7349
7593
|
...props
|
|
7350
7594
|
}) {
|
|
7351
|
-
return /* @__PURE__ */
|
|
7595
|
+
return /* @__PURE__ */ jsx60(
|
|
7352
7596
|
SheetPrimitive.Overlay,
|
|
7353
7597
|
{
|
|
7354
7598
|
"data-slot": "sheet-overlay",
|
|
@@ -7366,9 +7610,9 @@ function SheetContent({
|
|
|
7366
7610
|
side = "right",
|
|
7367
7611
|
...props
|
|
7368
7612
|
}) {
|
|
7369
|
-
return /* @__PURE__ */
|
|
7370
|
-
/* @__PURE__ */
|
|
7371
|
-
/* @__PURE__ */
|
|
7613
|
+
return /* @__PURE__ */ jsxs37(SheetPortal, { children: [
|
|
7614
|
+
/* @__PURE__ */ jsx60(SheetOverlay, {}),
|
|
7615
|
+
/* @__PURE__ */ jsxs37(
|
|
7372
7616
|
SheetPrimitive.Content,
|
|
7373
7617
|
{
|
|
7374
7618
|
"data-slot": "sheet-content",
|
|
@@ -7383,9 +7627,9 @@ function SheetContent({
|
|
|
7383
7627
|
...props,
|
|
7384
7628
|
children: [
|
|
7385
7629
|
children,
|
|
7386
|
-
/* @__PURE__ */
|
|
7387
|
-
/* @__PURE__ */
|
|
7388
|
-
/* @__PURE__ */
|
|
7630
|
+
/* @__PURE__ */ jsxs37(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", children: [
|
|
7631
|
+
/* @__PURE__ */ jsx60(Icons.close, { className: "size-4" }),
|
|
7632
|
+
/* @__PURE__ */ jsx60("span", { className: "sr-only", children: "Close" })
|
|
7389
7633
|
] })
|
|
7390
7634
|
]
|
|
7391
7635
|
}
|
|
@@ -7393,7 +7637,7 @@ function SheetContent({
|
|
|
7393
7637
|
] });
|
|
7394
7638
|
}
|
|
7395
7639
|
function SheetHeader({ className, ...props }) {
|
|
7396
|
-
return /* @__PURE__ */
|
|
7640
|
+
return /* @__PURE__ */ jsx60(
|
|
7397
7641
|
"div",
|
|
7398
7642
|
{
|
|
7399
7643
|
"data-slot": "sheet-header",
|
|
@@ -7403,7 +7647,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
7403
7647
|
);
|
|
7404
7648
|
}
|
|
7405
7649
|
function SheetFooter({ className, ...props }) {
|
|
7406
|
-
return /* @__PURE__ */
|
|
7650
|
+
return /* @__PURE__ */ jsx60(
|
|
7407
7651
|
"div",
|
|
7408
7652
|
{
|
|
7409
7653
|
"data-slot": "sheet-footer",
|
|
@@ -7416,7 +7660,7 @@ function SheetTitle({
|
|
|
7416
7660
|
className,
|
|
7417
7661
|
...props
|
|
7418
7662
|
}) {
|
|
7419
|
-
return /* @__PURE__ */
|
|
7663
|
+
return /* @__PURE__ */ jsx60(
|
|
7420
7664
|
SheetPrimitive.Title,
|
|
7421
7665
|
{
|
|
7422
7666
|
"data-slot": "sheet-title",
|
|
@@ -7429,7 +7673,7 @@ function SheetDescription({
|
|
|
7429
7673
|
className,
|
|
7430
7674
|
...props
|
|
7431
7675
|
}) {
|
|
7432
|
-
return /* @__PURE__ */
|
|
7676
|
+
return /* @__PURE__ */ jsx60(
|
|
7433
7677
|
SheetPrimitive.Description,
|
|
7434
7678
|
{
|
|
7435
7679
|
"data-slot": "sheet-description",
|
|
@@ -7440,17 +7684,16 @@ function SheetDescription({
|
|
|
7440
7684
|
}
|
|
7441
7685
|
|
|
7442
7686
|
// src/components/ui/sidebar.tsx
|
|
7443
|
-
import * as
|
|
7687
|
+
import * as React29 from "react";
|
|
7444
7688
|
import { Slot as Slot5 } from "@radix-ui/react-slot";
|
|
7445
|
-
import { cva as
|
|
7446
|
-
import { PanelLeftIcon } from "lucide-react";
|
|
7689
|
+
import { cva as cva14 } from "class-variance-authority";
|
|
7447
7690
|
|
|
7448
7691
|
// src/hooks/use-mobile.ts
|
|
7449
|
-
import * as
|
|
7692
|
+
import * as React28 from "react";
|
|
7450
7693
|
var MOBILE_BREAKPOINT = 768;
|
|
7451
7694
|
function useIsMobile() {
|
|
7452
|
-
const [isMobile, setIsMobile] =
|
|
7453
|
-
|
|
7695
|
+
const [isMobile, setIsMobile] = React28.useState(void 0);
|
|
7696
|
+
React28.useEffect(() => {
|
|
7454
7697
|
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
7455
7698
|
const onChange = () => {
|
|
7456
7699
|
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
@@ -7463,16 +7706,16 @@ function useIsMobile() {
|
|
|
7463
7706
|
}
|
|
7464
7707
|
|
|
7465
7708
|
// src/components/ui/sidebar.tsx
|
|
7466
|
-
import { jsx as
|
|
7709
|
+
import { jsx as jsx61, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
7467
7710
|
var SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
7468
7711
|
var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
7469
7712
|
var SIDEBAR_WIDTH = "16rem";
|
|
7470
7713
|
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
7471
7714
|
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
7472
7715
|
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
7473
|
-
var SidebarContext =
|
|
7716
|
+
var SidebarContext = React29.createContext(null);
|
|
7474
7717
|
function useSidebar() {
|
|
7475
|
-
const context =
|
|
7718
|
+
const context = React29.useContext(SidebarContext);
|
|
7476
7719
|
if (!context) {
|
|
7477
7720
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
7478
7721
|
}
|
|
@@ -7488,10 +7731,10 @@ function SidebarProvider({
|
|
|
7488
7731
|
...props
|
|
7489
7732
|
}) {
|
|
7490
7733
|
const isMobile = useIsMobile();
|
|
7491
|
-
const [openMobile, setOpenMobile] =
|
|
7492
|
-
const [_open, _setOpen] =
|
|
7734
|
+
const [openMobile, setOpenMobile] = React29.useState(false);
|
|
7735
|
+
const [_open, _setOpen] = React29.useState(defaultOpen);
|
|
7493
7736
|
const open = openProp ?? _open;
|
|
7494
|
-
const setOpen =
|
|
7737
|
+
const setOpen = React29.useCallback(
|
|
7495
7738
|
(value) => {
|
|
7496
7739
|
const openState = typeof value === "function" ? value(open) : value;
|
|
7497
7740
|
if (setOpenProp) {
|
|
@@ -7503,10 +7746,10 @@ function SidebarProvider({
|
|
|
7503
7746
|
},
|
|
7504
7747
|
[setOpenProp, open]
|
|
7505
7748
|
);
|
|
7506
|
-
const toggleSidebar =
|
|
7749
|
+
const toggleSidebar = React29.useCallback(() => {
|
|
7507
7750
|
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
7508
7751
|
}, [isMobile, setOpen, setOpenMobile]);
|
|
7509
|
-
|
|
7752
|
+
React29.useEffect(() => {
|
|
7510
7753
|
const handleKeyDown = (event) => {
|
|
7511
7754
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
7512
7755
|
event.preventDefault();
|
|
@@ -7517,7 +7760,7 @@ function SidebarProvider({
|
|
|
7517
7760
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
7518
7761
|
}, [toggleSidebar]);
|
|
7519
7762
|
const state = open ? "expanded" : "collapsed";
|
|
7520
|
-
const contextValue =
|
|
7763
|
+
const contextValue = React29.useMemo(
|
|
7521
7764
|
() => ({
|
|
7522
7765
|
state,
|
|
7523
7766
|
open,
|
|
@@ -7529,7 +7772,7 @@ function SidebarProvider({
|
|
|
7529
7772
|
}),
|
|
7530
7773
|
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
|
|
7531
7774
|
);
|
|
7532
|
-
return /* @__PURE__ */
|
|
7775
|
+
return /* @__PURE__ */ jsx61(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx61(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx61(
|
|
7533
7776
|
"div",
|
|
7534
7777
|
{
|
|
7535
7778
|
"data-slot": "sidebar-wrapper",
|
|
@@ -7557,7 +7800,7 @@ function Sidebar({
|
|
|
7557
7800
|
}) {
|
|
7558
7801
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
7559
7802
|
if (collapsible === "none") {
|
|
7560
|
-
return /* @__PURE__ */
|
|
7803
|
+
return /* @__PURE__ */ jsx61(
|
|
7561
7804
|
"div",
|
|
7562
7805
|
{
|
|
7563
7806
|
"data-slot": "sidebar",
|
|
@@ -7571,7 +7814,7 @@ function Sidebar({
|
|
|
7571
7814
|
);
|
|
7572
7815
|
}
|
|
7573
7816
|
if (isMobile) {
|
|
7574
|
-
return /* @__PURE__ */
|
|
7817
|
+
return /* @__PURE__ */ jsx61(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs38(
|
|
7575
7818
|
SheetContent,
|
|
7576
7819
|
{
|
|
7577
7820
|
"data-sidebar": "sidebar",
|
|
@@ -7583,16 +7826,16 @@ function Sidebar({
|
|
|
7583
7826
|
},
|
|
7584
7827
|
side,
|
|
7585
7828
|
children: [
|
|
7586
|
-
/* @__PURE__ */
|
|
7587
|
-
/* @__PURE__ */
|
|
7588
|
-
/* @__PURE__ */
|
|
7829
|
+
/* @__PURE__ */ jsxs38(SheetHeader, { className: "sr-only", children: [
|
|
7830
|
+
/* @__PURE__ */ jsx61(SheetTitle, { children: "Sidebar" }),
|
|
7831
|
+
/* @__PURE__ */ jsx61(SheetDescription, { children: "Displays the mobile sidebar." })
|
|
7589
7832
|
] }),
|
|
7590
|
-
/* @__PURE__ */
|
|
7833
|
+
/* @__PURE__ */ jsx61("div", { className: "flex h-full w-full flex-col", children })
|
|
7591
7834
|
]
|
|
7592
7835
|
}
|
|
7593
7836
|
) });
|
|
7594
7837
|
}
|
|
7595
|
-
return /* @__PURE__ */
|
|
7838
|
+
return /* @__PURE__ */ jsxs38(
|
|
7596
7839
|
"div",
|
|
7597
7840
|
{
|
|
7598
7841
|
className: "group peer text-sidebar-foreground hidden md:block",
|
|
@@ -7602,7 +7845,7 @@ function Sidebar({
|
|
|
7602
7845
|
"data-side": side,
|
|
7603
7846
|
"data-slot": "sidebar",
|
|
7604
7847
|
children: [
|
|
7605
|
-
/* @__PURE__ */
|
|
7848
|
+
/* @__PURE__ */ jsx61(
|
|
7606
7849
|
"div",
|
|
7607
7850
|
{
|
|
7608
7851
|
"data-slot": "sidebar-gap",
|
|
@@ -7614,7 +7857,7 @@ function Sidebar({
|
|
|
7614
7857
|
)
|
|
7615
7858
|
}
|
|
7616
7859
|
),
|
|
7617
|
-
/* @__PURE__ */
|
|
7860
|
+
/* @__PURE__ */ jsx61(
|
|
7618
7861
|
"div",
|
|
7619
7862
|
{
|
|
7620
7863
|
"data-slot": "sidebar-container",
|
|
@@ -7626,7 +7869,7 @@ function Sidebar({
|
|
|
7626
7869
|
className
|
|
7627
7870
|
),
|
|
7628
7871
|
...props,
|
|
7629
|
-
children: /* @__PURE__ */
|
|
7872
|
+
children: /* @__PURE__ */ jsx61(
|
|
7630
7873
|
"div",
|
|
7631
7874
|
{
|
|
7632
7875
|
"data-sidebar": "sidebar",
|
|
@@ -7647,7 +7890,7 @@ function SidebarTrigger({
|
|
|
7647
7890
|
...props
|
|
7648
7891
|
}) {
|
|
7649
7892
|
const { toggleSidebar } = useSidebar();
|
|
7650
|
-
return /* @__PURE__ */
|
|
7893
|
+
return /* @__PURE__ */ jsxs38(
|
|
7651
7894
|
Button,
|
|
7652
7895
|
{
|
|
7653
7896
|
"data-sidebar": "trigger",
|
|
@@ -7661,15 +7904,15 @@ function SidebarTrigger({
|
|
|
7661
7904
|
},
|
|
7662
7905
|
...props,
|
|
7663
7906
|
children: [
|
|
7664
|
-
/* @__PURE__ */
|
|
7665
|
-
/* @__PURE__ */
|
|
7907
|
+
/* @__PURE__ */ jsx61(Icons.panelLeft, {}),
|
|
7908
|
+
/* @__PURE__ */ jsx61("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
7666
7909
|
]
|
|
7667
7910
|
}
|
|
7668
7911
|
);
|
|
7669
7912
|
}
|
|
7670
7913
|
function SidebarRail({ className, ...props }) {
|
|
7671
7914
|
const { toggleSidebar } = useSidebar();
|
|
7672
|
-
return /* @__PURE__ */
|
|
7915
|
+
return /* @__PURE__ */ jsx61(
|
|
7673
7916
|
"button",
|
|
7674
7917
|
{
|
|
7675
7918
|
"data-sidebar": "rail",
|
|
@@ -7692,7 +7935,7 @@ function SidebarRail({ className, ...props }) {
|
|
|
7692
7935
|
);
|
|
7693
7936
|
}
|
|
7694
7937
|
function SidebarInset({ className, ...props }) {
|
|
7695
|
-
return /* @__PURE__ */
|
|
7938
|
+
return /* @__PURE__ */ jsx61(
|
|
7696
7939
|
"main",
|
|
7697
7940
|
{
|
|
7698
7941
|
"data-slot": "sidebar-inset",
|
|
@@ -7709,7 +7952,7 @@ function SidebarInput({
|
|
|
7709
7952
|
className,
|
|
7710
7953
|
...props
|
|
7711
7954
|
}) {
|
|
7712
|
-
return /* @__PURE__ */
|
|
7955
|
+
return /* @__PURE__ */ jsx61(
|
|
7713
7956
|
Input,
|
|
7714
7957
|
{
|
|
7715
7958
|
"data-slot": "sidebar-input",
|
|
@@ -7720,7 +7963,7 @@ function SidebarInput({
|
|
|
7720
7963
|
);
|
|
7721
7964
|
}
|
|
7722
7965
|
function SidebarHeader({ className, ...props }) {
|
|
7723
|
-
return /* @__PURE__ */
|
|
7966
|
+
return /* @__PURE__ */ jsx61(
|
|
7724
7967
|
"div",
|
|
7725
7968
|
{
|
|
7726
7969
|
"data-slot": "sidebar-header",
|
|
@@ -7731,7 +7974,7 @@ function SidebarHeader({ className, ...props }) {
|
|
|
7731
7974
|
);
|
|
7732
7975
|
}
|
|
7733
7976
|
function SidebarFooter({ className, ...props }) {
|
|
7734
|
-
return /* @__PURE__ */
|
|
7977
|
+
return /* @__PURE__ */ jsx61(
|
|
7735
7978
|
"div",
|
|
7736
7979
|
{
|
|
7737
7980
|
"data-slot": "sidebar-footer",
|
|
@@ -7745,7 +7988,7 @@ function SidebarSeparator({
|
|
|
7745
7988
|
className,
|
|
7746
7989
|
...props
|
|
7747
7990
|
}) {
|
|
7748
|
-
return /* @__PURE__ */
|
|
7991
|
+
return /* @__PURE__ */ jsx61(
|
|
7749
7992
|
Separator,
|
|
7750
7993
|
{
|
|
7751
7994
|
"data-slot": "sidebar-separator",
|
|
@@ -7756,7 +7999,7 @@ function SidebarSeparator({
|
|
|
7756
7999
|
);
|
|
7757
8000
|
}
|
|
7758
8001
|
function SidebarContent({ className, ...props }) {
|
|
7759
|
-
return /* @__PURE__ */
|
|
8002
|
+
return /* @__PURE__ */ jsx61(
|
|
7760
8003
|
"div",
|
|
7761
8004
|
{
|
|
7762
8005
|
"data-slot": "sidebar-content",
|
|
@@ -7770,7 +8013,7 @@ function SidebarContent({ className, ...props }) {
|
|
|
7770
8013
|
);
|
|
7771
8014
|
}
|
|
7772
8015
|
function SidebarGroup({ className, ...props }) {
|
|
7773
|
-
return /* @__PURE__ */
|
|
8016
|
+
return /* @__PURE__ */ jsx61(
|
|
7774
8017
|
"div",
|
|
7775
8018
|
{
|
|
7776
8019
|
"data-slot": "sidebar-group",
|
|
@@ -7786,7 +8029,7 @@ function SidebarGroupLabel({
|
|
|
7786
8029
|
...props
|
|
7787
8030
|
}) {
|
|
7788
8031
|
const Comp = asChild ? Slot5 : "div";
|
|
7789
|
-
return /* @__PURE__ */
|
|
8032
|
+
return /* @__PURE__ */ jsx61(
|
|
7790
8033
|
Comp,
|
|
7791
8034
|
{
|
|
7792
8035
|
"data-slot": "sidebar-group-label",
|
|
@@ -7806,7 +8049,7 @@ function SidebarGroupAction({
|
|
|
7806
8049
|
...props
|
|
7807
8050
|
}) {
|
|
7808
8051
|
const Comp = asChild ? Slot5 : "button";
|
|
7809
|
-
return /* @__PURE__ */
|
|
8052
|
+
return /* @__PURE__ */ jsx61(
|
|
7810
8053
|
Comp,
|
|
7811
8054
|
{
|
|
7812
8055
|
"data-slot": "sidebar-group-action",
|
|
@@ -7826,7 +8069,7 @@ function SidebarGroupContent({
|
|
|
7826
8069
|
className,
|
|
7827
8070
|
...props
|
|
7828
8071
|
}) {
|
|
7829
|
-
return /* @__PURE__ */
|
|
8072
|
+
return /* @__PURE__ */ jsx61(
|
|
7830
8073
|
"div",
|
|
7831
8074
|
{
|
|
7832
8075
|
"data-slot": "sidebar-group-content",
|
|
@@ -7837,7 +8080,7 @@ function SidebarGroupContent({
|
|
|
7837
8080
|
);
|
|
7838
8081
|
}
|
|
7839
8082
|
function SidebarMenu({ className, ...props }) {
|
|
7840
|
-
return /* @__PURE__ */
|
|
8083
|
+
return /* @__PURE__ */ jsx61(
|
|
7841
8084
|
"ul",
|
|
7842
8085
|
{
|
|
7843
8086
|
"data-slot": "sidebar-menu",
|
|
@@ -7848,7 +8091,7 @@ function SidebarMenu({ className, ...props }) {
|
|
|
7848
8091
|
);
|
|
7849
8092
|
}
|
|
7850
8093
|
function SidebarMenuItem({ className, ...props }) {
|
|
7851
|
-
return /* @__PURE__ */
|
|
8094
|
+
return /* @__PURE__ */ jsx61(
|
|
7852
8095
|
"li",
|
|
7853
8096
|
{
|
|
7854
8097
|
"data-slot": "sidebar-menu-item",
|
|
@@ -7858,7 +8101,7 @@ function SidebarMenuItem({ className, ...props }) {
|
|
|
7858
8101
|
}
|
|
7859
8102
|
);
|
|
7860
8103
|
}
|
|
7861
|
-
var sidebarMenuButtonVariants =
|
|
8104
|
+
var sidebarMenuButtonVariants = cva14(
|
|
7862
8105
|
"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",
|
|
7863
8106
|
{
|
|
7864
8107
|
variants: {
|
|
@@ -7889,7 +8132,7 @@ function SidebarMenuButton({
|
|
|
7889
8132
|
}) {
|
|
7890
8133
|
const Comp = asChild ? Slot5 : "button";
|
|
7891
8134
|
const { isMobile, state } = useSidebar();
|
|
7892
|
-
const button = /* @__PURE__ */
|
|
8135
|
+
const button = /* @__PURE__ */ jsx61(
|
|
7893
8136
|
Comp,
|
|
7894
8137
|
{
|
|
7895
8138
|
"data-slot": "sidebar-menu-button",
|
|
@@ -7908,9 +8151,9 @@ function SidebarMenuButton({
|
|
|
7908
8151
|
children: tooltip
|
|
7909
8152
|
};
|
|
7910
8153
|
}
|
|
7911
|
-
return /* @__PURE__ */
|
|
7912
|
-
/* @__PURE__ */
|
|
7913
|
-
/* @__PURE__ */
|
|
8154
|
+
return /* @__PURE__ */ jsxs38(Tooltip, { children: [
|
|
8155
|
+
/* @__PURE__ */ jsx61(TooltipTrigger, { asChild: true, children: button }),
|
|
8156
|
+
/* @__PURE__ */ jsx61(
|
|
7914
8157
|
TooltipContent,
|
|
7915
8158
|
{
|
|
7916
8159
|
side: "right",
|
|
@@ -7928,7 +8171,7 @@ function SidebarMenuAction({
|
|
|
7928
8171
|
...props
|
|
7929
8172
|
}) {
|
|
7930
8173
|
const Comp = asChild ? Slot5 : "button";
|
|
7931
|
-
return /* @__PURE__ */
|
|
8174
|
+
return /* @__PURE__ */ jsx61(
|
|
7932
8175
|
Comp,
|
|
7933
8176
|
{
|
|
7934
8177
|
"data-slot": "sidebar-menu-action",
|
|
@@ -7952,7 +8195,7 @@ function SidebarMenuBadge({
|
|
|
7952
8195
|
className,
|
|
7953
8196
|
...props
|
|
7954
8197
|
}) {
|
|
7955
|
-
return /* @__PURE__ */
|
|
8198
|
+
return /* @__PURE__ */ jsx61(
|
|
7956
8199
|
"div",
|
|
7957
8200
|
{
|
|
7958
8201
|
"data-slot": "sidebar-menu-badge",
|
|
@@ -7975,10 +8218,10 @@ function SidebarMenuSkeleton({
|
|
|
7975
8218
|
showIcon = false,
|
|
7976
8219
|
...props
|
|
7977
8220
|
}) {
|
|
7978
|
-
const width =
|
|
8221
|
+
const width = React29.useMemo(() => {
|
|
7979
8222
|
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
7980
8223
|
}, []);
|
|
7981
|
-
return /* @__PURE__ */
|
|
8224
|
+
return /* @__PURE__ */ jsxs38(
|
|
7982
8225
|
"div",
|
|
7983
8226
|
{
|
|
7984
8227
|
"data-slot": "sidebar-menu-skeleton",
|
|
@@ -7986,14 +8229,14 @@ function SidebarMenuSkeleton({
|
|
|
7986
8229
|
className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
|
|
7987
8230
|
...props,
|
|
7988
8231
|
children: [
|
|
7989
|
-
showIcon && /* @__PURE__ */
|
|
8232
|
+
showIcon && /* @__PURE__ */ jsx61(
|
|
7990
8233
|
Skeleton,
|
|
7991
8234
|
{
|
|
7992
8235
|
className: "size-4 rounded-md",
|
|
7993
8236
|
"data-sidebar": "menu-skeleton-icon"
|
|
7994
8237
|
}
|
|
7995
8238
|
),
|
|
7996
|
-
/* @__PURE__ */
|
|
8239
|
+
/* @__PURE__ */ jsx61(
|
|
7997
8240
|
Skeleton,
|
|
7998
8241
|
{
|
|
7999
8242
|
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
@@ -8008,7 +8251,7 @@ function SidebarMenuSkeleton({
|
|
|
8008
8251
|
);
|
|
8009
8252
|
}
|
|
8010
8253
|
function SidebarMenuSub({ className, ...props }) {
|
|
8011
|
-
return /* @__PURE__ */
|
|
8254
|
+
return /* @__PURE__ */ jsx61(
|
|
8012
8255
|
"ul",
|
|
8013
8256
|
{
|
|
8014
8257
|
"data-slot": "sidebar-menu-sub",
|
|
@@ -8026,7 +8269,7 @@ function SidebarMenuSubItem({
|
|
|
8026
8269
|
className,
|
|
8027
8270
|
...props
|
|
8028
8271
|
}) {
|
|
8029
|
-
return /* @__PURE__ */
|
|
8272
|
+
return /* @__PURE__ */ jsx61(
|
|
8030
8273
|
"li",
|
|
8031
8274
|
{
|
|
8032
8275
|
"data-slot": "sidebar-menu-sub-item",
|
|
@@ -8044,7 +8287,7 @@ function SidebarMenuSubButton({
|
|
|
8044
8287
|
...props
|
|
8045
8288
|
}) {
|
|
8046
8289
|
const Comp = asChild ? Slot5 : "a";
|
|
8047
|
-
return /* @__PURE__ */
|
|
8290
|
+
return /* @__PURE__ */ jsx61(
|
|
8048
8291
|
Comp,
|
|
8049
8292
|
{
|
|
8050
8293
|
"data-slot": "sidebar-menu-sub-button",
|
|
@@ -8065,12 +8308,12 @@ function SidebarMenuSubButton({
|
|
|
8065
8308
|
}
|
|
8066
8309
|
|
|
8067
8310
|
// src/components/ui/slider.tsx
|
|
8068
|
-
import * as
|
|
8311
|
+
import * as React30 from "react";
|
|
8069
8312
|
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
8070
|
-
import { jsx as
|
|
8313
|
+
import { jsx as jsx62, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
8071
8314
|
function useDocumentDirection2() {
|
|
8072
|
-
const [direction, setDirection] =
|
|
8073
|
-
|
|
8315
|
+
const [direction, setDirection] = React30.useState("rtl");
|
|
8316
|
+
React30.useEffect(() => {
|
|
8074
8317
|
const getDirection = () => {
|
|
8075
8318
|
if (typeof document === "undefined") return "rtl";
|
|
8076
8319
|
const htmlDir = document.documentElement.getAttribute("dir");
|
|
@@ -8101,13 +8344,13 @@ function Slider({
|
|
|
8101
8344
|
dir,
|
|
8102
8345
|
...props
|
|
8103
8346
|
}) {
|
|
8104
|
-
const _values =
|
|
8347
|
+
const _values = React30.useMemo(
|
|
8105
8348
|
() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
|
|
8106
8349
|
[value, defaultValue, min, max]
|
|
8107
8350
|
);
|
|
8108
8351
|
const documentDir = useDocumentDirection2();
|
|
8109
8352
|
const resolvedDir = dir ?? documentDir;
|
|
8110
|
-
return /* @__PURE__ */
|
|
8353
|
+
return /* @__PURE__ */ jsxs39(
|
|
8111
8354
|
SliderPrimitive.Root,
|
|
8112
8355
|
{
|
|
8113
8356
|
"data-slot": "slider",
|
|
@@ -8122,14 +8365,14 @@ function Slider({
|
|
|
8122
8365
|
),
|
|
8123
8366
|
...props,
|
|
8124
8367
|
children: [
|
|
8125
|
-
/* @__PURE__ */
|
|
8368
|
+
/* @__PURE__ */ jsx62(
|
|
8126
8369
|
SliderPrimitive.Track,
|
|
8127
8370
|
{
|
|
8128
8371
|
"data-slot": "slider-track",
|
|
8129
8372
|
className: cn(
|
|
8130
8373
|
"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"
|
|
8131
8374
|
),
|
|
8132
|
-
children: /* @__PURE__ */
|
|
8375
|
+
children: /* @__PURE__ */ jsx62(
|
|
8133
8376
|
SliderPrimitive.Range,
|
|
8134
8377
|
{
|
|
8135
8378
|
"data-slot": "slider-range",
|
|
@@ -8140,7 +8383,7 @@ function Slider({
|
|
|
8140
8383
|
)
|
|
8141
8384
|
}
|
|
8142
8385
|
),
|
|
8143
|
-
Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */
|
|
8386
|
+
Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx62(
|
|
8144
8387
|
SliderPrimitive.Thumb,
|
|
8145
8388
|
{
|
|
8146
8389
|
"data-slot": "slider-thumb",
|
|
@@ -8154,22 +8397,15 @@ function Slider({
|
|
|
8154
8397
|
}
|
|
8155
8398
|
|
|
8156
8399
|
// src/components/ui/sonner.tsx
|
|
8157
|
-
import {
|
|
8158
|
-
CheckIcon as CheckIcon5,
|
|
8159
|
-
InfoIcon,
|
|
8160
|
-
Loader2Icon as Loader2Icon2,
|
|
8161
|
-
TriangleAlertIcon,
|
|
8162
|
-
XCircleIcon
|
|
8163
|
-
} from "lucide-react";
|
|
8164
8400
|
import { useTheme } from "next-themes";
|
|
8165
8401
|
import { Toaster as Sonner } from "sonner";
|
|
8166
8402
|
import { toast } from "sonner";
|
|
8167
|
-
import { jsx as
|
|
8403
|
+
import { jsx as jsx63 } from "react/jsx-runtime";
|
|
8168
8404
|
var SONNER_DEFAULT_DURATION = 4e3;
|
|
8169
|
-
var StatusIconSuccess = () => /* @__PURE__ */
|
|
8170
|
-
var StatusIconInfo = () => /* @__PURE__ */
|
|
8171
|
-
var StatusIconWarning = () => /* @__PURE__ */
|
|
8172
|
-
var StatusIconError = () => /* @__PURE__ */
|
|
8405
|
+
var StatusIconSuccess = () => /* @__PURE__ */ jsx63("div", { className: "flex size-4 shrink-0 items-center justify-center rounded bg-brand-600 dark:bg-brand-500 p-0.5", children: /* @__PURE__ */ jsx63(Icons.check, { className: "size-3 text-white", strokeWidth: 3 }) });
|
|
8406
|
+
var StatusIconInfo = () => /* @__PURE__ */ jsx63("div", { className: "flex size-4 shrink-0 items-center justify-center rounded bg-foreground-lighter p-0.5", children: /* @__PURE__ */ jsx63(Icons.info, { className: "size-3 text-background-surface-200" }) });
|
|
8407
|
+
var StatusIconWarning = () => /* @__PURE__ */ jsx63("div", { className: "flex size-4 shrink-0 items-center justify-center rounded bg-warning-600 dark:bg-warning-500 p-0.5", children: /* @__PURE__ */ jsx63(Icons.alertTriangle, { className: "size-3 text-white" }) });
|
|
8408
|
+
var StatusIconError = () => /* @__PURE__ */ jsx63("div", { className: "flex size-4 shrink-0 items-center justify-center rounded bg-destructive-600 dark:bg-destructive-500 p-0.5", children: /* @__PURE__ */ jsx63(Icons.xCircle, { className: "size-3 text-white" }) });
|
|
8173
8409
|
var Toaster = ({
|
|
8174
8410
|
dir = "rtl",
|
|
8175
8411
|
position = "bottom-left",
|
|
@@ -8178,15 +8414,15 @@ var Toaster = ({
|
|
|
8178
8414
|
...props
|
|
8179
8415
|
}) => {
|
|
8180
8416
|
const { theme = "system" } = useTheme();
|
|
8181
|
-
return /* @__PURE__ */
|
|
8417
|
+
return /* @__PURE__ */ jsx63(
|
|
8182
8418
|
Sonner,
|
|
8183
8419
|
{
|
|
8184
8420
|
icons: {
|
|
8185
|
-
success: /* @__PURE__ */
|
|
8186
|
-
info: /* @__PURE__ */
|
|
8187
|
-
warning: /* @__PURE__ */
|
|
8188
|
-
error: /* @__PURE__ */
|
|
8189
|
-
loading: /* @__PURE__ */
|
|
8421
|
+
success: /* @__PURE__ */ jsx63(StatusIconSuccess, {}),
|
|
8422
|
+
info: /* @__PURE__ */ jsx63(StatusIconInfo, {}),
|
|
8423
|
+
warning: /* @__PURE__ */ jsx63(StatusIconWarning, {}),
|
|
8424
|
+
error: /* @__PURE__ */ jsx63(StatusIconError, {}),
|
|
8425
|
+
loading: /* @__PURE__ */ jsx63(Icons.loader, { className: "size-4 animate-spin" })
|
|
8190
8426
|
},
|
|
8191
8427
|
theme,
|
|
8192
8428
|
className: "toaster group pointer-events-auto",
|
|
@@ -8236,11 +8472,11 @@ var Toaster = ({
|
|
|
8236
8472
|
};
|
|
8237
8473
|
|
|
8238
8474
|
// src/components/ui/switch.tsx
|
|
8239
|
-
import * as
|
|
8475
|
+
import * as React31 from "react";
|
|
8240
8476
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
8241
|
-
import { cva as
|
|
8242
|
-
import { jsx as
|
|
8243
|
-
var switchRootVariants =
|
|
8477
|
+
import { cva as cva15 } from "class-variance-authority";
|
|
8478
|
+
import { jsx as jsx64 } from "react/jsx-runtime";
|
|
8479
|
+
var switchRootVariants = cva15(
|
|
8244
8480
|
"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",
|
|
8245
8481
|
{
|
|
8246
8482
|
variants: {
|
|
@@ -8255,7 +8491,7 @@ var switchRootVariants = cva13(
|
|
|
8255
8491
|
}
|
|
8256
8492
|
}
|
|
8257
8493
|
);
|
|
8258
|
-
var switchThumbVariants =
|
|
8494
|
+
var switchThumbVariants = cva15(
|
|
8259
8495
|
"pointer-events-none block rounded-full bg-foreground-lighter data-[state=checked]:bg-white shadow-lg ring-0 transition-transform",
|
|
8260
8496
|
{
|
|
8261
8497
|
variants: {
|
|
@@ -8270,14 +8506,14 @@ var switchThumbVariants = cva13(
|
|
|
8270
8506
|
}
|
|
8271
8507
|
}
|
|
8272
8508
|
);
|
|
8273
|
-
var Switch =
|
|
8509
|
+
var Switch = React31.forwardRef(({ className, size, ...props }, ref) => /* @__PURE__ */ jsx64(
|
|
8274
8510
|
SwitchPrimitive.Root,
|
|
8275
8511
|
{
|
|
8276
8512
|
"data-slot": "switch",
|
|
8277
8513
|
className: cn(switchRootVariants({ size }), className),
|
|
8278
8514
|
...props,
|
|
8279
8515
|
ref,
|
|
8280
|
-
children: /* @__PURE__ */
|
|
8516
|
+
children: /* @__PURE__ */ jsx64(
|
|
8281
8517
|
SwitchPrimitive.Thumb,
|
|
8282
8518
|
{
|
|
8283
8519
|
"data-slot": "switch-thumb",
|
|
@@ -8289,14 +8525,14 @@ var Switch = React29.forwardRef(({ className, size, ...props }, ref) => /* @__PU
|
|
|
8289
8525
|
Switch.displayName = SwitchPrimitive.Root.displayName;
|
|
8290
8526
|
|
|
8291
8527
|
// src/components/ui/table.tsx
|
|
8292
|
-
import { jsx as
|
|
8528
|
+
import { jsx as jsx65 } from "react/jsx-runtime";
|
|
8293
8529
|
function Table({ className, ...props }) {
|
|
8294
|
-
return /* @__PURE__ */
|
|
8530
|
+
return /* @__PURE__ */ jsx65(
|
|
8295
8531
|
"div",
|
|
8296
8532
|
{
|
|
8297
8533
|
"data-slot": "table-container",
|
|
8298
8534
|
className: "relative w-full overflow-x-auto",
|
|
8299
|
-
children: /* @__PURE__ */
|
|
8535
|
+
children: /* @__PURE__ */ jsx65(
|
|
8300
8536
|
"table",
|
|
8301
8537
|
{
|
|
8302
8538
|
"data-slot": "table",
|
|
@@ -8308,7 +8544,7 @@ function Table({ className, ...props }) {
|
|
|
8308
8544
|
);
|
|
8309
8545
|
}
|
|
8310
8546
|
function TableHeader({ className, ...props }) {
|
|
8311
|
-
return /* @__PURE__ */
|
|
8547
|
+
return /* @__PURE__ */ jsx65(
|
|
8312
8548
|
"thead",
|
|
8313
8549
|
{
|
|
8314
8550
|
"data-slot": "table-header",
|
|
@@ -8318,7 +8554,7 @@ function TableHeader({ className, ...props }) {
|
|
|
8318
8554
|
);
|
|
8319
8555
|
}
|
|
8320
8556
|
function TableBody({ className, ...props }) {
|
|
8321
|
-
return /* @__PURE__ */
|
|
8557
|
+
return /* @__PURE__ */ jsx65(
|
|
8322
8558
|
"tbody",
|
|
8323
8559
|
{
|
|
8324
8560
|
"data-slot": "table-body",
|
|
@@ -8328,7 +8564,7 @@ function TableBody({ className, ...props }) {
|
|
|
8328
8564
|
);
|
|
8329
8565
|
}
|
|
8330
8566
|
function TableFooter({ className, ...props }) {
|
|
8331
|
-
return /* @__PURE__ */
|
|
8567
|
+
return /* @__PURE__ */ jsx65(
|
|
8332
8568
|
"tfoot",
|
|
8333
8569
|
{
|
|
8334
8570
|
"data-slot": "table-footer",
|
|
@@ -8341,7 +8577,7 @@ function TableFooter({ className, ...props }) {
|
|
|
8341
8577
|
);
|
|
8342
8578
|
}
|
|
8343
8579
|
function TableRow({ className, ...props }) {
|
|
8344
|
-
return /* @__PURE__ */
|
|
8580
|
+
return /* @__PURE__ */ jsx65(
|
|
8345
8581
|
"tr",
|
|
8346
8582
|
{
|
|
8347
8583
|
"data-slot": "table-row",
|
|
@@ -8354,7 +8590,7 @@ function TableRow({ className, ...props }) {
|
|
|
8354
8590
|
);
|
|
8355
8591
|
}
|
|
8356
8592
|
function TableHead({ className, ...props }) {
|
|
8357
|
-
return /* @__PURE__ */
|
|
8593
|
+
return /* @__PURE__ */ jsx65(
|
|
8358
8594
|
"th",
|
|
8359
8595
|
{
|
|
8360
8596
|
"data-slot": "table-head",
|
|
@@ -8367,7 +8603,7 @@ function TableHead({ className, ...props }) {
|
|
|
8367
8603
|
);
|
|
8368
8604
|
}
|
|
8369
8605
|
function TableCell({ className, ...props }) {
|
|
8370
|
-
return /* @__PURE__ */
|
|
8606
|
+
return /* @__PURE__ */ jsx65(
|
|
8371
8607
|
"td",
|
|
8372
8608
|
{
|
|
8373
8609
|
"data-slot": "table-cell",
|
|
@@ -8383,7 +8619,7 @@ function TableCaption({
|
|
|
8383
8619
|
className,
|
|
8384
8620
|
...props
|
|
8385
8621
|
}) {
|
|
8386
|
-
return /* @__PURE__ */
|
|
8622
|
+
return /* @__PURE__ */ jsx65(
|
|
8387
8623
|
"caption",
|
|
8388
8624
|
{
|
|
8389
8625
|
"data-slot": "table-caption",
|
|
@@ -8394,11 +8630,11 @@ function TableCaption({
|
|
|
8394
8630
|
}
|
|
8395
8631
|
|
|
8396
8632
|
// src/components/ui/tabs.tsx
|
|
8397
|
-
import * as
|
|
8633
|
+
import * as React32 from "react";
|
|
8398
8634
|
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
8399
|
-
import { jsx as
|
|
8635
|
+
import { jsx as jsx66 } from "react/jsx-runtime";
|
|
8400
8636
|
var Tabs = TabsPrimitive.Root;
|
|
8401
|
-
var TabsList =
|
|
8637
|
+
var TabsList = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
|
|
8402
8638
|
TabsPrimitive.List,
|
|
8403
8639
|
{
|
|
8404
8640
|
ref,
|
|
@@ -8410,7 +8646,7 @@ var TabsList = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
8410
8646
|
}
|
|
8411
8647
|
));
|
|
8412
8648
|
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
8413
|
-
var TabsTrigger =
|
|
8649
|
+
var TabsTrigger = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
|
|
8414
8650
|
TabsPrimitive.Trigger,
|
|
8415
8651
|
{
|
|
8416
8652
|
ref,
|
|
@@ -8422,7 +8658,7 @@ var TabsTrigger = React30.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
8422
8658
|
}
|
|
8423
8659
|
));
|
|
8424
8660
|
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
8425
|
-
var TabsContent =
|
|
8661
|
+
var TabsContent = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
|
|
8426
8662
|
TabsPrimitive.Content,
|
|
8427
8663
|
{
|
|
8428
8664
|
ref,
|
|
@@ -8437,9 +8673,9 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
8437
8673
|
|
|
8438
8674
|
// src/components/ui/toggle.tsx
|
|
8439
8675
|
import * as TogglePrimitive from "@radix-ui/react-toggle";
|
|
8440
|
-
import { cva as
|
|
8441
|
-
import { jsx as
|
|
8442
|
-
var toggleVariants =
|
|
8676
|
+
import { cva as cva16 } from "class-variance-authority";
|
|
8677
|
+
import { jsx as jsx67 } from "react/jsx-runtime";
|
|
8678
|
+
var toggleVariants = cva16(
|
|
8443
8679
|
"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",
|
|
8444
8680
|
{
|
|
8445
8681
|
variants: {
|
|
@@ -8465,7 +8701,7 @@ function Toggle({
|
|
|
8465
8701
|
size,
|
|
8466
8702
|
...props
|
|
8467
8703
|
}) {
|
|
8468
|
-
return /* @__PURE__ */
|
|
8704
|
+
return /* @__PURE__ */ jsx67(
|
|
8469
8705
|
TogglePrimitive.Root,
|
|
8470
8706
|
{
|
|
8471
8707
|
"data-slot": "toggle",
|
|
@@ -8476,10 +8712,10 @@ function Toggle({
|
|
|
8476
8712
|
}
|
|
8477
8713
|
|
|
8478
8714
|
// src/components/ui/toggle-group.tsx
|
|
8479
|
-
import * as
|
|
8715
|
+
import * as React33 from "react";
|
|
8480
8716
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
8481
|
-
import { jsx as
|
|
8482
|
-
var ToggleGroupContext =
|
|
8717
|
+
import { jsx as jsx68 } from "react/jsx-runtime";
|
|
8718
|
+
var ToggleGroupContext = React33.createContext({
|
|
8483
8719
|
size: "default",
|
|
8484
8720
|
variant: "default"
|
|
8485
8721
|
});
|
|
@@ -8490,13 +8726,13 @@ function ToggleGroup({
|
|
|
8490
8726
|
children,
|
|
8491
8727
|
...props
|
|
8492
8728
|
}) {
|
|
8493
|
-
return /* @__PURE__ */
|
|
8729
|
+
return /* @__PURE__ */ jsx68(
|
|
8494
8730
|
ToggleGroupPrimitive.Root,
|
|
8495
8731
|
{
|
|
8496
8732
|
"data-slot": "toggle-group",
|
|
8497
8733
|
className: cn("flex items-center justify-center gap-1", className),
|
|
8498
8734
|
...props,
|
|
8499
|
-
children: /* @__PURE__ */
|
|
8735
|
+
children: /* @__PURE__ */ jsx68(ToggleGroupContext.Provider, { value: { variant, size }, children })
|
|
8500
8736
|
}
|
|
8501
8737
|
);
|
|
8502
8738
|
}
|
|
@@ -8507,8 +8743,8 @@ function ToggleGroupItem({
|
|
|
8507
8743
|
size,
|
|
8508
8744
|
...props
|
|
8509
8745
|
}) {
|
|
8510
|
-
const context =
|
|
8511
|
-
return /* @__PURE__ */
|
|
8746
|
+
const context = React33.useContext(ToggleGroupContext);
|
|
8747
|
+
return /* @__PURE__ */ jsx68(
|
|
8512
8748
|
ToggleGroupPrimitive.Item,
|
|
8513
8749
|
{
|
|
8514
8750
|
"data-slot": "toggle-group-item",
|
|
@@ -8529,10 +8765,10 @@ function ToggleGroupItem({
|
|
|
8529
8765
|
import { ResponsiveLine } from "@nivo/line";
|
|
8530
8766
|
|
|
8531
8767
|
// src/hooks/use-root-styles.ts
|
|
8532
|
-
import { useEffect as
|
|
8768
|
+
import { useEffect as useEffect10, useMemo as useMemo7, useState as useState12 } from "react";
|
|
8533
8769
|
function useRootStyles() {
|
|
8534
|
-
const [version, setVersion] =
|
|
8535
|
-
|
|
8770
|
+
const [version, setVersion] = useState12(0);
|
|
8771
|
+
useEffect10(() => {
|
|
8536
8772
|
if (typeof window === "undefined" || !document?.documentElement) {
|
|
8537
8773
|
return;
|
|
8538
8774
|
}
|
|
@@ -8570,236 +8806,136 @@ function resolveCssColor(styles, variable, fallback) {
|
|
|
8570
8806
|
if (raw.includes("%")) return `hsl(${raw})`;
|
|
8571
8807
|
return raw;
|
|
8572
8808
|
}
|
|
8573
|
-
|
|
8574
|
-
|
|
8575
|
-
|
|
8576
|
-
|
|
8577
|
-
|
|
8578
|
-
|
|
8579
|
-
|
|
8580
|
-
|
|
8581
|
-
|
|
8582
|
-
|
|
8583
|
-
|
|
8584
|
-
|
|
8585
|
-
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
|
|
8589
|
-
const
|
|
8590
|
-
|
|
8591
|
-
const addOpacity = (color, opacity) => {
|
|
8592
|
-
if (color.startsWith("hsl(")) {
|
|
8593
|
-
return color.replace(")", ` / ${opacity})`);
|
|
8594
|
-
}
|
|
8595
|
-
if (color.startsWith("rgb(")) {
|
|
8596
|
-
return color.replace("rgb(", "rgba(").replace(")", `, ${opacity})`);
|
|
8597
|
-
}
|
|
8598
|
-
return color;
|
|
8599
|
-
};
|
|
8600
|
-
const nivoTheme = {
|
|
8809
|
+
function addOpacityToColor(color, opacity) {
|
|
8810
|
+
if (color.startsWith("hsl(")) {
|
|
8811
|
+
return color.replace(")", ` / ${opacity})`);
|
|
8812
|
+
}
|
|
8813
|
+
if (color.startsWith("rgb(")) {
|
|
8814
|
+
return color.replace("rgb(", "rgba(").replace(")", `, ${opacity})`);
|
|
8815
|
+
}
|
|
8816
|
+
return color;
|
|
8817
|
+
}
|
|
8818
|
+
var CHART_FONT_FAMILY = "Yekan Bakh, system-ui, -apple-system, sans-serif";
|
|
8819
|
+
function createNivoTheme(styles, fallbacks) {
|
|
8820
|
+
const fb = { ...DEFAULT_FALLBACKS, ...fallbacks };
|
|
8821
|
+
const get = (variable, fallback) => resolveCssColor(styles, variable, fallback);
|
|
8822
|
+
const foreground = get("--foreground", fb.foreground);
|
|
8823
|
+
const foregroundMuted = get("--foreground-muted", fb.foregroundMuted);
|
|
8824
|
+
const border = get("--border", fb.border);
|
|
8825
|
+
const background = get("--background", fb.background);
|
|
8826
|
+
return {
|
|
8601
8827
|
background: "transparent",
|
|
8602
8828
|
text: {
|
|
8603
|
-
fontFamily:
|
|
8604
|
-
fill:
|
|
8829
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8830
|
+
fill: foreground
|
|
8605
8831
|
},
|
|
8606
8832
|
axis: {
|
|
8607
8833
|
domain: {
|
|
8608
8834
|
line: {
|
|
8609
|
-
stroke:
|
|
8835
|
+
stroke: border,
|
|
8610
8836
|
strokeWidth: 1
|
|
8611
8837
|
}
|
|
8612
8838
|
},
|
|
8613
8839
|
ticks: {
|
|
8614
8840
|
line: {
|
|
8615
|
-
stroke:
|
|
8841
|
+
stroke: border,
|
|
8616
8842
|
strokeWidth: 1
|
|
8617
8843
|
},
|
|
8618
8844
|
text: {
|
|
8619
|
-
fontFamily:
|
|
8620
|
-
fill:
|
|
8845
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8846
|
+
fill: foregroundMuted
|
|
8621
8847
|
}
|
|
8622
8848
|
},
|
|
8623
8849
|
legend: {
|
|
8624
8850
|
text: {
|
|
8625
|
-
fontFamily:
|
|
8626
|
-
fill:
|
|
8851
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8852
|
+
fill: foreground
|
|
8627
8853
|
}
|
|
8628
8854
|
}
|
|
8629
8855
|
},
|
|
8630
8856
|
grid: {
|
|
8631
8857
|
line: {
|
|
8632
|
-
stroke:
|
|
8858
|
+
stroke: border,
|
|
8633
8859
|
strokeWidth: 1,
|
|
8634
8860
|
strokeOpacity: 0.5
|
|
8635
8861
|
}
|
|
8636
8862
|
},
|
|
8637
8863
|
tooltip: {
|
|
8638
8864
|
container: {
|
|
8639
|
-
fontFamily:
|
|
8640
|
-
background
|
|
8641
|
-
color:
|
|
8865
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8866
|
+
background,
|
|
8867
|
+
color: foreground,
|
|
8642
8868
|
fontSize: 12,
|
|
8643
8869
|
borderRadius: "8px",
|
|
8644
|
-
border: `1px solid ${
|
|
8870
|
+
border: `1px solid ${addOpacityToColor(border, 0.5)}`,
|
|
8645
8871
|
boxShadow: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)",
|
|
8646
8872
|
padding: "10px"
|
|
8647
8873
|
}
|
|
8648
8874
|
},
|
|
8649
8875
|
legends: {
|
|
8650
8876
|
text: {
|
|
8651
|
-
fontFamily:
|
|
8652
|
-
fill:
|
|
8877
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8878
|
+
fill: foreground
|
|
8653
8879
|
}
|
|
8654
8880
|
}
|
|
8655
8881
|
};
|
|
8656
|
-
const defaultColors = [
|
|
8657
|
-
getColor("--chart-1", FALLBACKS.chart1),
|
|
8658
|
-
getColor("--chart-2", FALLBACKS.chart2),
|
|
8659
|
-
getColor("--chart-3", FALLBACKS.chart3),
|
|
8660
|
-
getColor("--chart-4", FALLBACKS.chart4),
|
|
8661
|
-
getColor("--chart-5", FALLBACKS.chart5)
|
|
8662
|
-
];
|
|
8663
|
-
return /* @__PURE__ */ jsx67("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx67(ResponsiveLine, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8664
8882
|
}
|
|
8665
|
-
|
|
8666
|
-
|
|
8667
|
-
|
|
8668
|
-
|
|
8669
|
-
|
|
8670
|
-
|
|
8671
|
-
border: "hsl(0 0% 45%)",
|
|
8672
|
-
mutedForeground: "hsl(0 0% 55%)",
|
|
8673
|
-
popover: "hsl(0 0% 12%)",
|
|
8674
|
-
popoverForeground: "hsl(0 0% 98%)",
|
|
8675
|
-
chart1: "hsl(12 76% 61%)",
|
|
8883
|
+
var DEFAULT_FALLBACKS = {
|
|
8884
|
+
foreground: "hsl(0 0% 9%)",
|
|
8885
|
+
foregroundMuted: "hsl(0 0% 44%)",
|
|
8886
|
+
border: "hsl(0 0% 88%)",
|
|
8887
|
+
background: "hsl(0 0% 99%)",
|
|
8888
|
+
chart1: "hsl(152.9deg 60% 52.9%)",
|
|
8676
8889
|
chart2: "hsl(173 58% 39%)",
|
|
8677
8890
|
chart3: "hsl(197 37% 24%)",
|
|
8678
8891
|
chart4: "hsl(43 74% 66%)",
|
|
8679
8892
|
chart5: "hsl(27 87% 67%)"
|
|
8680
8893
|
};
|
|
8894
|
+
function resolveChartColors(styles, fallbacks) {
|
|
8895
|
+
const fb = { ...DEFAULT_FALLBACKS, ...fallbacks };
|
|
8896
|
+
const get = (variable, fallback) => resolveCssColor(styles, variable, fallback);
|
|
8897
|
+
return [
|
|
8898
|
+
get("--chart-1", fb.chart1),
|
|
8899
|
+
get("--chart-2", fb.chart2),
|
|
8900
|
+
get("--chart-3", fb.chart3),
|
|
8901
|
+
get("--chart-4", fb.chart4),
|
|
8902
|
+
get("--chart-5", fb.chart5)
|
|
8903
|
+
];
|
|
8904
|
+
}
|
|
8905
|
+
|
|
8906
|
+
// src/components/charts/PartoLineChart.tsx
|
|
8907
|
+
import { jsx as jsx69 } from "react/jsx-runtime";
|
|
8908
|
+
function PartoLineChart({ className, ...props }) {
|
|
8909
|
+
const styles = useRootStyles();
|
|
8910
|
+
const nivoTheme = createNivoTheme(styles);
|
|
8911
|
+
const defaultColors = resolveChartColors(styles);
|
|
8912
|
+
return /* @__PURE__ */ jsx69("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx69(ResponsiveLine, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8913
|
+
}
|
|
8914
|
+
|
|
8915
|
+
// src/components/charts/PartoBarChart.tsx
|
|
8916
|
+
import { ResponsiveBar } from "@nivo/bar";
|
|
8917
|
+
import { jsx as jsx70 } from "react/jsx-runtime";
|
|
8681
8918
|
function PartoBarChart({ className, ...props }) {
|
|
8682
8919
|
const styles = useRootStyles();
|
|
8683
|
-
const
|
|
8684
|
-
const
|
|
8685
|
-
|
|
8686
|
-
text: {
|
|
8687
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8688
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
8689
|
-
},
|
|
8690
|
-
axis: {
|
|
8691
|
-
domain: {
|
|
8692
|
-
line: {
|
|
8693
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8694
|
-
strokeWidth: 1
|
|
8695
|
-
}
|
|
8696
|
-
},
|
|
8697
|
-
ticks: {
|
|
8698
|
-
line: {
|
|
8699
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8700
|
-
strokeWidth: 1
|
|
8701
|
-
},
|
|
8702
|
-
text: {
|
|
8703
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8704
|
-
fill: getColor("--muted-foreground", FALLBACKS2.mutedForeground)
|
|
8705
|
-
}
|
|
8706
|
-
},
|
|
8707
|
-
legend: {
|
|
8708
|
-
text: {
|
|
8709
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8710
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
8711
|
-
}
|
|
8712
|
-
}
|
|
8713
|
-
},
|
|
8714
|
-
grid: {
|
|
8715
|
-
line: {
|
|
8716
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8717
|
-
strokeWidth: 1,
|
|
8718
|
-
strokeOpacity: 0.4
|
|
8719
|
-
}
|
|
8720
|
-
},
|
|
8721
|
-
tooltip: {
|
|
8722
|
-
container: {
|
|
8723
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8724
|
-
background: getColor("--popover", FALLBACKS2.popover),
|
|
8725
|
-
color: getColor("--popover-foreground", FALLBACKS2.popoverForeground),
|
|
8726
|
-
fontSize: 12,
|
|
8727
|
-
borderRadius: "var(--radius)",
|
|
8728
|
-
boxShadow: "0 2px 12px rgba(0,0,0,0.15)",
|
|
8729
|
-
padding: "8px 12px"
|
|
8730
|
-
}
|
|
8731
|
-
},
|
|
8732
|
-
legends: {
|
|
8733
|
-
text: {
|
|
8734
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8735
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
8736
|
-
}
|
|
8737
|
-
}
|
|
8738
|
-
};
|
|
8739
|
-
const defaultColors = [
|
|
8740
|
-
getColor("--chart-1", FALLBACKS2.chart1),
|
|
8741
|
-
getColor("--chart-2", FALLBACKS2.chart2),
|
|
8742
|
-
getColor("--chart-3", FALLBACKS2.chart3),
|
|
8743
|
-
getColor("--chart-4", FALLBACKS2.chart4),
|
|
8744
|
-
getColor("--chart-5", FALLBACKS2.chart5)
|
|
8745
|
-
];
|
|
8746
|
-
return /* @__PURE__ */ jsx68("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx68(ResponsiveBar, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8920
|
+
const nivoTheme = createNivoTheme(styles);
|
|
8921
|
+
const defaultColors = resolveChartColors(styles);
|
|
8922
|
+
return /* @__PURE__ */ jsx70("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx70(ResponsiveBar, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8747
8923
|
}
|
|
8748
8924
|
|
|
8749
8925
|
// src/components/charts/PartoPieChart.tsx
|
|
8750
8926
|
import { ResponsivePie } from "@nivo/pie";
|
|
8751
|
-
import { jsx as
|
|
8752
|
-
var FALLBACKS3 = {
|
|
8753
|
-
foreground: "hsl(0 0% 98%)",
|
|
8754
|
-
popover: "hsl(0 0% 12%)",
|
|
8755
|
-
popoverForeground: "hsl(0 0% 98%)",
|
|
8756
|
-
chart1: "hsl(12 76% 61%)",
|
|
8757
|
-
chart2: "hsl(173 58% 39%)",
|
|
8758
|
-
chart3: "hsl(197 37% 24%)",
|
|
8759
|
-
chart4: "hsl(43 74% 66%)",
|
|
8760
|
-
chart5: "hsl(27 87% 67%)"
|
|
8761
|
-
};
|
|
8927
|
+
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
8762
8928
|
function PartoPieChart({ className, ...props }) {
|
|
8763
8929
|
const styles = useRootStyles();
|
|
8764
|
-
const
|
|
8765
|
-
const
|
|
8766
|
-
|
|
8767
|
-
text: {
|
|
8768
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8769
|
-
fill: getColor("--foreground", FALLBACKS3.foreground)
|
|
8770
|
-
},
|
|
8771
|
-
tooltip: {
|
|
8772
|
-
container: {
|
|
8773
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8774
|
-
background: getColor("--popover", FALLBACKS3.popover),
|
|
8775
|
-
color: getColor("--popover-foreground", FALLBACKS3.popoverForeground),
|
|
8776
|
-
fontSize: 12,
|
|
8777
|
-
borderRadius: "var(--radius)",
|
|
8778
|
-
boxShadow: "0 2px 12px rgba(0,0,0,0.15)",
|
|
8779
|
-
padding: "8px 12px"
|
|
8780
|
-
}
|
|
8781
|
-
},
|
|
8782
|
-
legends: {
|
|
8783
|
-
text: {
|
|
8784
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8785
|
-
fill: getColor("--foreground", FALLBACKS3.foreground)
|
|
8786
|
-
}
|
|
8787
|
-
}
|
|
8788
|
-
};
|
|
8789
|
-
const defaultColors = [
|
|
8790
|
-
getColor("--chart-1", FALLBACKS3.chart1),
|
|
8791
|
-
getColor("--chart-2", FALLBACKS3.chart2),
|
|
8792
|
-
getColor("--chart-3", FALLBACKS3.chart3),
|
|
8793
|
-
getColor("--chart-4", FALLBACKS3.chart4),
|
|
8794
|
-
getColor("--chart-5", FALLBACKS3.chart5)
|
|
8795
|
-
];
|
|
8796
|
-
return /* @__PURE__ */ jsx69("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx69(ResponsivePie, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8930
|
+
const nivoTheme = createNivoTheme(styles);
|
|
8931
|
+
const defaultColors = resolveChartColors(styles);
|
|
8932
|
+
return /* @__PURE__ */ jsx71("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx71(ResponsivePie, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8797
8933
|
}
|
|
8798
8934
|
|
|
8799
8935
|
// src/components/charts/PartoHeatMap.tsx
|
|
8800
8936
|
import { ResponsiveHeatMap } from "@nivo/heatmap";
|
|
8801
|
-
import { jsx as
|
|
8802
|
-
var
|
|
8937
|
+
import { jsx as jsx72, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
8938
|
+
var FALLBACKS = {
|
|
8803
8939
|
foreground: "hsl(0 0% 98%)",
|
|
8804
8940
|
border: "hsl(0 0% 45%)",
|
|
8805
8941
|
mutedForeground: "hsl(0 0% 55%)",
|
|
@@ -8867,24 +9003,24 @@ function PartoHeatMap({
|
|
|
8867
9003
|
background: "transparent",
|
|
8868
9004
|
text: {
|
|
8869
9005
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8870
|
-
fill: getColor("--foreground",
|
|
9006
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
8871
9007
|
fontSize: 11
|
|
8872
9008
|
},
|
|
8873
9009
|
axis: {
|
|
8874
9010
|
domain: {
|
|
8875
9011
|
line: {
|
|
8876
|
-
stroke: getColor("--border",
|
|
9012
|
+
stroke: getColor("--border", FALLBACKS.border),
|
|
8877
9013
|
strokeWidth: 1
|
|
8878
9014
|
}
|
|
8879
9015
|
},
|
|
8880
9016
|
ticks: {
|
|
8881
9017
|
line: {
|
|
8882
|
-
stroke: getColor("--border",
|
|
9018
|
+
stroke: getColor("--border", FALLBACKS.border),
|
|
8883
9019
|
strokeWidth: 1
|
|
8884
9020
|
},
|
|
8885
9021
|
text: {
|
|
8886
9022
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8887
|
-
fill: getColor("--foreground",
|
|
9023
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
8888
9024
|
fontSize: 13,
|
|
8889
9025
|
fontWeight: 600
|
|
8890
9026
|
}
|
|
@@ -8892,7 +9028,7 @@ function PartoHeatMap({
|
|
|
8892
9028
|
legend: {
|
|
8893
9029
|
text: {
|
|
8894
9030
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8895
|
-
fill: getColor("--foreground",
|
|
9031
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
8896
9032
|
fontSize: 13,
|
|
8897
9033
|
fontWeight: 700
|
|
8898
9034
|
}
|
|
@@ -8900,41 +9036,41 @@ function PartoHeatMap({
|
|
|
8900
9036
|
},
|
|
8901
9037
|
grid: {
|
|
8902
9038
|
line: {
|
|
8903
|
-
stroke: getColor("--card",
|
|
9039
|
+
stroke: getColor("--card", FALLBACKS.card),
|
|
8904
9040
|
strokeWidth: 3
|
|
8905
9041
|
}
|
|
8906
9042
|
},
|
|
8907
9043
|
tooltip: {
|
|
8908
9044
|
container: {
|
|
8909
9045
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8910
|
-
background: getColor("--popover",
|
|
8911
|
-
color: getColor("--popover-foreground",
|
|
9046
|
+
background: getColor("--popover", FALLBACKS.popover),
|
|
9047
|
+
color: getColor("--popover-foreground", FALLBACKS.popoverForeground),
|
|
8912
9048
|
fontSize: 12,
|
|
8913
9049
|
borderRadius: "var(--radius)",
|
|
8914
9050
|
boxShadow: "0 2px 4px rgba(0,0,0,0.2)",
|
|
8915
9051
|
padding: "8px 12px",
|
|
8916
|
-
border: `1px solid ${getColor("--border",
|
|
9052
|
+
border: `1px solid ${getColor("--border", FALLBACKS.border)}`
|
|
8917
9053
|
}
|
|
8918
9054
|
},
|
|
8919
9055
|
legends: {
|
|
8920
9056
|
text: {
|
|
8921
9057
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8922
|
-
fill: getColor("--foreground",
|
|
9058
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
8923
9059
|
fontSize: 11
|
|
8924
9060
|
}
|
|
8925
9061
|
}
|
|
8926
9062
|
};
|
|
8927
9063
|
const defaultValueFormat = (value) => formatNumber2(value);
|
|
8928
|
-
const defaultTooltip = ({ cell }) => /* @__PURE__ */
|
|
8929
|
-
/* @__PURE__ */
|
|
9064
|
+
const defaultTooltip = ({ cell }) => /* @__PURE__ */ jsxs40("div", { className: "bg-popover text-popover-foreground rounded-md shadow-lg px-3 py-2 border border-border min-w-[140px] text-center", children: [
|
|
9065
|
+
/* @__PURE__ */ jsxs40("div", { className: "font-semibold text-sm mb-1.5 whitespace-nowrap", children: [
|
|
8930
9066
|
formatWeekday(String(cell.serieId)),
|
|
8931
9067
|
" - ",
|
|
8932
9068
|
formatNumber2(cell.data.x)
|
|
8933
9069
|
] }),
|
|
8934
|
-
/* @__PURE__ */
|
|
9070
|
+
/* @__PURE__ */ jsxs40("div", { className: "text-xs whitespace-nowrap", children: [
|
|
8935
9071
|
isPersian ? "\u0634\u062F\u062A \u0641\u0639\u0627\u0644\u06CC\u062A" : "Activity",
|
|
8936
9072
|
": ",
|
|
8937
|
-
/* @__PURE__ */
|
|
9073
|
+
/* @__PURE__ */ jsx72("span", { className: "font-bold text-primary", children: formatNumber2(cell.value ?? 0) })
|
|
8938
9074
|
] })
|
|
8939
9075
|
] });
|
|
8940
9076
|
const processAxisConfig = (axisConfig) => {
|
|
@@ -8963,13 +9099,13 @@ function PartoHeatMap({
|
|
|
8963
9099
|
return formatWeekday(String(formatted));
|
|
8964
9100
|
}
|
|
8965
9101
|
} : null;
|
|
8966
|
-
return /* @__PURE__ */
|
|
9102
|
+
return /* @__PURE__ */ jsx72(
|
|
8967
9103
|
"div",
|
|
8968
9104
|
{
|
|
8969
9105
|
className,
|
|
8970
9106
|
dir: "ltr",
|
|
8971
9107
|
style: { position: "relative", width: "100%", height: "100%" },
|
|
8972
|
-
children: /* @__PURE__ */
|
|
9108
|
+
children: /* @__PURE__ */ jsx72(
|
|
8973
9109
|
ResponsiveHeatMap,
|
|
8974
9110
|
{
|
|
8975
9111
|
data,
|
|
@@ -8988,7 +9124,7 @@ function PartoHeatMap({
|
|
|
8988
9124
|
emptyColor: getColor("--muted", "hsl(0 0% 20%)"),
|
|
8989
9125
|
borderRadius: 2,
|
|
8990
9126
|
borderWidth: 3,
|
|
8991
|
-
borderColor: getColor("--card",
|
|
9127
|
+
borderColor: getColor("--card", FALLBACKS.card),
|
|
8992
9128
|
enableLabels: false,
|
|
8993
9129
|
animate: true,
|
|
8994
9130
|
motionConfig: "gentle",
|
|
@@ -9001,13 +9137,13 @@ function PartoHeatMap({
|
|
|
9001
9137
|
}
|
|
9002
9138
|
|
|
9003
9139
|
// src/components/charts/PartoWordCloud.tsx
|
|
9004
|
-
import * as
|
|
9140
|
+
import * as React34 from "react";
|
|
9005
9141
|
import { createPortal as createPortal3 } from "react-dom";
|
|
9006
9142
|
import { Wordcloud } from "@visx/wordcloud";
|
|
9007
9143
|
import { scaleLog } from "@visx/scale";
|
|
9008
9144
|
import { Text } from "@visx/text";
|
|
9009
|
-
import { jsx as
|
|
9010
|
-
var
|
|
9145
|
+
import { jsx as jsx73, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9146
|
+
var FALLBACKS2 = {
|
|
9011
9147
|
primary: "hsl(12 76% 61%)"
|
|
9012
9148
|
};
|
|
9013
9149
|
var stableRandom = () => 0.5;
|
|
@@ -9038,11 +9174,11 @@ function PartoWordCloud({
|
|
|
9038
9174
|
fontWeight = 600
|
|
9039
9175
|
}) {
|
|
9040
9176
|
const styles = useRootStyles();
|
|
9041
|
-
const [hovered, setHovered] =
|
|
9042
|
-
const containerRef =
|
|
9177
|
+
const [hovered, setHovered] = React34.useState(null);
|
|
9178
|
+
const containerRef = React34.useRef(null);
|
|
9043
9179
|
const getColor = (variable, fallback) => resolveCssColor(styles, variable, fallback);
|
|
9044
|
-
const primaryColor = getColor("--primary",
|
|
9045
|
-
const formattedWords =
|
|
9180
|
+
const primaryColor = getColor("--primary", FALLBACKS2.primary);
|
|
9181
|
+
const formattedWords = React34.useMemo(() => {
|
|
9046
9182
|
return words.map((word) => ({
|
|
9047
9183
|
...word,
|
|
9048
9184
|
text: formatHashtagDirection(word.text)
|
|
@@ -9069,7 +9205,7 @@ function PartoWordCloud({
|
|
|
9069
9205
|
color: primaryColor
|
|
9070
9206
|
});
|
|
9071
9207
|
};
|
|
9072
|
-
return /* @__PURE__ */
|
|
9208
|
+
return /* @__PURE__ */ jsxs41(
|
|
9073
9209
|
"div",
|
|
9074
9210
|
{
|
|
9075
9211
|
ref: containerRef,
|
|
@@ -9077,7 +9213,7 @@ function PartoWordCloud({
|
|
|
9077
9213
|
style: { position: "relative", width: "100%", height: "100%", display: "flex", alignItems: "center", justifyContent: "center" },
|
|
9078
9214
|
dir: "rtl",
|
|
9079
9215
|
children: [
|
|
9080
|
-
/* @__PURE__ */
|
|
9216
|
+
/* @__PURE__ */ jsx73("div", { style: { position: "relative", width, height, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx73(
|
|
9081
9217
|
Wordcloud,
|
|
9082
9218
|
{
|
|
9083
9219
|
words: formattedWords,
|
|
@@ -9093,7 +9229,7 @@ function PartoWordCloud({
|
|
|
9093
9229
|
const originalData = formattedWords.find((item) => item.text === w.text);
|
|
9094
9230
|
const value = originalData?.value || 0;
|
|
9095
9231
|
if (!w.x || !w.y || !w.text) return null;
|
|
9096
|
-
return /* @__PURE__ */
|
|
9232
|
+
return /* @__PURE__ */ jsx73("g", { children: /* @__PURE__ */ jsx73(
|
|
9097
9233
|
Text,
|
|
9098
9234
|
{
|
|
9099
9235
|
fill: primaryColor,
|
|
@@ -9117,7 +9253,7 @@ function PartoWordCloud({
|
|
|
9117
9253
|
}
|
|
9118
9254
|
) }),
|
|
9119
9255
|
hovered && typeof document !== "undefined" && createPortal3(
|
|
9120
|
-
/* @__PURE__ */
|
|
9256
|
+
/* @__PURE__ */ jsx73(
|
|
9121
9257
|
"div",
|
|
9122
9258
|
{
|
|
9123
9259
|
className: "pointer-events-none fixed z-[9999]",
|
|
@@ -9127,14 +9263,14 @@ function PartoWordCloud({
|
|
|
9127
9263
|
top: `${hovered.y - 10}px`,
|
|
9128
9264
|
transform: "translate(-50%, -100%)"
|
|
9129
9265
|
},
|
|
9130
|
-
children: /* @__PURE__ */
|
|
9131
|
-
/* @__PURE__ */
|
|
9132
|
-
/* @__PURE__ */
|
|
9133
|
-
/* @__PURE__ */
|
|
9266
|
+
children: /* @__PURE__ */ jsxs41("div", { className: "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", dir: "rtl", children: [
|
|
9267
|
+
/* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
|
|
9268
|
+
/* @__PURE__ */ jsx73("div", { className: "h-2.5 w-2.5 rounded-[2px]", style: { backgroundColor: hovered.color } }),
|
|
9269
|
+
/* @__PURE__ */ jsx73("span", { className: "font-medium", children: hovered.text })
|
|
9134
9270
|
] }),
|
|
9135
|
-
/* @__PURE__ */
|
|
9136
|
-
/* @__PURE__ */
|
|
9137
|
-
/* @__PURE__ */
|
|
9271
|
+
/* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-between", children: [
|
|
9272
|
+
/* @__PURE__ */ jsx73("span", { className: "text-muted-foreground", children: "\u062A\u0639\u062F\u0627\u062F" }),
|
|
9273
|
+
/* @__PURE__ */ jsx73("span", { className: "font-mono font-medium tabular-nums", children: hovered.value.toLocaleString("fa-IR") })
|
|
9138
9274
|
] })
|
|
9139
9275
|
] })
|
|
9140
9276
|
}
|
|
@@ -9283,6 +9419,7 @@ export {
|
|
|
9283
9419
|
FormItem,
|
|
9284
9420
|
FormLabel,
|
|
9285
9421
|
FormMessage,
|
|
9422
|
+
HashtagInput,
|
|
9286
9423
|
HoverCard,
|
|
9287
9424
|
HoverCardContent,
|
|
9288
9425
|
HoverCardTrigger,
|
|
@@ -9431,6 +9568,7 @@ export {
|
|
|
9431
9568
|
TabsContent,
|
|
9432
9569
|
TabsList,
|
|
9433
9570
|
TabsTrigger,
|
|
9571
|
+
TagInput,
|
|
9434
9572
|
Textarea,
|
|
9435
9573
|
Toaster,
|
|
9436
9574
|
Toggle,
|
|
@@ -9458,9 +9596,11 @@ export {
|
|
|
9458
9596
|
getPersianWeekdayName,
|
|
9459
9597
|
getPersianYear,
|
|
9460
9598
|
getPersianYearsForDropdown,
|
|
9599
|
+
hashtagInputVariants,
|
|
9461
9600
|
instagramPostVariants,
|
|
9462
9601
|
jalaliToGregorian,
|
|
9463
9602
|
navigationMenuTriggerStyle,
|
|
9603
|
+
tagInputVariants,
|
|
9464
9604
|
toEnglishDigits,
|
|
9465
9605
|
toPersianDigits,
|
|
9466
9606
|
toast,
|