@parto-system-design/ui 1.0.5 → 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 +282 -416
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +13 -347
- package/dist/index.d.cts +28 -25
- package/dist/index.d.ts +28 -25
- package/dist/index.js +299 -432
- 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
|
);
|
|
@@ -4010,7 +4003,6 @@ function HoverCardContent({
|
|
|
4010
4003
|
|
|
4011
4004
|
// src/components/ui/tag-input.tsx
|
|
4012
4005
|
import * as React14 from "react";
|
|
4013
|
-
import { X as X3 } from "lucide-react";
|
|
4014
4006
|
import { cva as cva7 } from "class-variance-authority";
|
|
4015
4007
|
import { jsx as jsx35, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4016
4008
|
var tagInputVariants = cva7(
|
|
@@ -4104,7 +4096,7 @@ var TagInput = React14.forwardRef(
|
|
|
4104
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",
|
|
4105
4097
|
disabled,
|
|
4106
4098
|
children: [
|
|
4107
|
-
/* @__PURE__ */ jsx35(
|
|
4099
|
+
/* @__PURE__ */ jsx35(Icons.close, { className: "h-3 w-3 text-muted-foreground" }),
|
|
4108
4100
|
/* @__PURE__ */ jsxs20("span", { className: "sr-only", children: [
|
|
4109
4101
|
"Remove ",
|
|
4110
4102
|
tag
|
|
@@ -4138,7 +4130,6 @@ TagInput.displayName = "TagInput";
|
|
|
4138
4130
|
|
|
4139
4131
|
// src/components/ui/hashtag-input.tsx
|
|
4140
4132
|
import * as React15 from "react";
|
|
4141
|
-
import { X as X4 } from "lucide-react";
|
|
4142
4133
|
import { cva as cva8 } from "class-variance-authority";
|
|
4143
4134
|
import { jsx as jsx36, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4144
4135
|
var hashtagInputVariants = cva8(
|
|
@@ -4233,7 +4224,7 @@ var HashtagInput = React15.forwardRef(
|
|
|
4233
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",
|
|
4234
4225
|
disabled,
|
|
4235
4226
|
children: [
|
|
4236
|
-
/* @__PURE__ */ jsx36(
|
|
4227
|
+
/* @__PURE__ */ jsx36(Icons.close, { className: "h-3 w-3 text-muted-foreground" }),
|
|
4237
4228
|
/* @__PURE__ */ jsxs21("span", { className: "sr-only", children: [
|
|
4238
4229
|
"Remove ",
|
|
4239
4230
|
tag
|
|
@@ -4458,7 +4449,6 @@ function InputGroupTextarea({
|
|
|
4458
4449
|
// src/components/ui/input-otp.tsx
|
|
4459
4450
|
import * as React17 from "react";
|
|
4460
4451
|
import { OTPInput, OTPInputContext } from "input-otp";
|
|
4461
|
-
import { MinusIcon } from "lucide-react";
|
|
4462
4452
|
import { jsx as jsx39, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4463
4453
|
function InputOTP({
|
|
4464
4454
|
className,
|
|
@@ -4524,7 +4514,7 @@ function InputOTPSeparator({ ...props }) {
|
|
|
4524
4514
|
role: "separator",
|
|
4525
4515
|
dir: "ltr",
|
|
4526
4516
|
...props,
|
|
4527
|
-
children: /* @__PURE__ */ jsx39(
|
|
4517
|
+
children: /* @__PURE__ */ jsx39(Icons.minus, {})
|
|
4528
4518
|
}
|
|
4529
4519
|
);
|
|
4530
4520
|
}
|
|
@@ -4555,7 +4545,6 @@ var TooltipContent = React18.forwardRef(({ className, sideOffset = 4, ...props }
|
|
|
4555
4545
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
4556
4546
|
|
|
4557
4547
|
// src/components/ui/instagram-post.tsx
|
|
4558
|
-
import { ImageOff } from "lucide-react";
|
|
4559
4548
|
import { Fragment as Fragment4, jsx as jsx41, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
4560
4549
|
var instagramPostVariants = cva10(
|
|
4561
4550
|
"relative border bg-background-surface-100",
|
|
@@ -4581,7 +4570,7 @@ function InstagramPostMedia({
|
|
|
4581
4570
|
const handleImageError = (url) => {
|
|
4582
4571
|
setImageError((prev) => ({ ...prev, [url]: true }));
|
|
4583
4572
|
};
|
|
4584
|
-
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(
|
|
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" }) });
|
|
4585
4574
|
if (!media || media.length === 0) {
|
|
4586
4575
|
return /* @__PURE__ */ jsx41(
|
|
4587
4576
|
"div",
|
|
@@ -4591,7 +4580,7 @@ function InstagramPostMedia({
|
|
|
4591
4580
|
variant === "vertical" ? "aspect-square" : "w-[20%] shrink-0 h-full min-h-[200px] -my-[1px] -ms-[1px]"
|
|
4592
4581
|
),
|
|
4593
4582
|
children: /* @__PURE__ */ jsxs23("div", { className: "text-center p-4", children: [
|
|
4594
|
-
/* @__PURE__ */ jsx41(
|
|
4583
|
+
/* @__PURE__ */ jsx41(Icons.imageOff, { className: "size-12 mx-auto mb-2 text-muted-foreground" }),
|
|
4595
4584
|
/* @__PURE__ */ jsx41("p", { className: "text-sm text-muted-foreground", children: placeholderText })
|
|
4596
4585
|
] })
|
|
4597
4586
|
}
|
|
@@ -5193,7 +5182,6 @@ function KbdGroup({ className, ...props }) {
|
|
|
5193
5182
|
|
|
5194
5183
|
// src/components/ui/menubar.tsx
|
|
5195
5184
|
import * as MenubarPrimitive from "@radix-ui/react-menubar";
|
|
5196
|
-
import { CheckIcon as CheckIcon4, ChevronRightIcon as ChevronRightIcon3, CircleIcon as CircleIcon3 } from "lucide-react";
|
|
5197
5185
|
import { jsx as jsx43, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5198
5186
|
function Menubar({
|
|
5199
5187
|
className,
|
|
@@ -5306,7 +5294,7 @@ function MenubarCheckboxItem({
|
|
|
5306
5294
|
checked,
|
|
5307
5295
|
...props,
|
|
5308
5296
|
children: [
|
|
5309
|
-
/* @__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(
|
|
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" }) }) }),
|
|
5310
5298
|
children
|
|
5311
5299
|
]
|
|
5312
5300
|
}
|
|
@@ -5327,7 +5315,7 @@ function MenubarRadioItem({
|
|
|
5327
5315
|
),
|
|
5328
5316
|
...props,
|
|
5329
5317
|
children: [
|
|
5330
|
-
/* @__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(
|
|
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" }) }) }),
|
|
5331
5319
|
children
|
|
5332
5320
|
]
|
|
5333
5321
|
}
|
|
@@ -5403,7 +5391,7 @@ function MenubarSubTrigger({
|
|
|
5403
5391
|
...props,
|
|
5404
5392
|
children: [
|
|
5405
5393
|
children,
|
|
5406
|
-
/* @__PURE__ */ jsx43(
|
|
5394
|
+
/* @__PURE__ */ jsx43(Icons.chevronRight, { className: "ms-auto h-4 w-4 rtl:rotate-180" })
|
|
5407
5395
|
]
|
|
5408
5396
|
}
|
|
5409
5397
|
);
|
|
@@ -5427,8 +5415,7 @@ function MenubarSubContent({
|
|
|
5427
5415
|
|
|
5428
5416
|
// src/components/ui/metric-card.tsx
|
|
5429
5417
|
import * as React20 from "react";
|
|
5430
|
-
import {
|
|
5431
|
-
import { format as format2 } from "date-fns";
|
|
5418
|
+
import { format as format3 } from "date-fns";
|
|
5432
5419
|
|
|
5433
5420
|
// src/components/ui/skeleton.tsx
|
|
5434
5421
|
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
@@ -5466,7 +5453,7 @@ var MetricCard = React20.forwardRef(
|
|
|
5466
5453
|
Card,
|
|
5467
5454
|
{
|
|
5468
5455
|
ref,
|
|
5469
|
-
className: cn("py-4 space-y-3", className),
|
|
5456
|
+
className: cn("py-4 space-y-3 @container", className),
|
|
5470
5457
|
...props,
|
|
5471
5458
|
children
|
|
5472
5459
|
}
|
|
@@ -5491,7 +5478,7 @@ var MetricCardHeader = React20.forwardRef(
|
|
|
5491
5478
|
target: "_blank",
|
|
5492
5479
|
rel: "noopener noreferrer",
|
|
5493
5480
|
className: "text-foreground-lighter hover:text-foreground transition-colors",
|
|
5494
|
-
children: /* @__PURE__ */ jsx45(
|
|
5481
|
+
children: /* @__PURE__ */ jsx45(Icons.externalLink, { className: "h-3.5 w-3.5" })
|
|
5495
5482
|
}
|
|
5496
5483
|
)
|
|
5497
5484
|
]
|
|
@@ -5521,7 +5508,7 @@ var MetricCardLabel = React20.forwardRef(
|
|
|
5521
5508
|
return /* @__PURE__ */ jsx45(TooltipProvider, { children: /* @__PURE__ */ jsxs25(Tooltip, { children: [
|
|
5522
5509
|
/* @__PURE__ */ jsx45(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-1.5 cursor-help", children: [
|
|
5523
5510
|
label,
|
|
5524
|
-
/* @__PURE__ */ jsx45(
|
|
5511
|
+
/* @__PURE__ */ jsx45(Icons.info, { className: "h-3.5 w-3.5 text-foreground-lighter" })
|
|
5525
5512
|
] }) }),
|
|
5526
5513
|
/* @__PURE__ */ jsx45(TooltipContent, { children: /* @__PURE__ */ jsx45("p", { className: "max-w-xs", children: tooltip }) })
|
|
5527
5514
|
] }) });
|
|
@@ -5649,7 +5636,7 @@ var MetricCardSparkline = React20.forwardRef(
|
|
|
5649
5636
|
const jalaliDate = formatJalaliDate(date, "jD jMMMM");
|
|
5650
5637
|
return toPersianDigits(jalaliDate);
|
|
5651
5638
|
} else {
|
|
5652
|
-
return
|
|
5639
|
+
return format3(date, "MMM d");
|
|
5653
5640
|
}
|
|
5654
5641
|
};
|
|
5655
5642
|
return /* @__PURE__ */ jsxs25(
|
|
@@ -5780,7 +5767,6 @@ var MetricCardSparkline = React20.forwardRef(
|
|
|
5780
5767
|
MetricCardSparkline.displayName = "MetricCardSparkline";
|
|
5781
5768
|
|
|
5782
5769
|
// src/components/ui/native-select.tsx
|
|
5783
|
-
import { ChevronDownIcon as ChevronDownIcon3 } from "lucide-react";
|
|
5784
5770
|
import { jsx as jsx46, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5785
5771
|
function NativeSelect({ className, ...props }) {
|
|
5786
5772
|
return /* @__PURE__ */ jsxs26(
|
|
@@ -5812,7 +5798,7 @@ function NativeSelect({ className, ...props }) {
|
|
|
5812
5798
|
}
|
|
5813
5799
|
),
|
|
5814
5800
|
/* @__PURE__ */ jsx46(
|
|
5815
|
-
|
|
5801
|
+
Icons.chevronDown,
|
|
5816
5802
|
{
|
|
5817
5803
|
className: "pointer-events-none absolute top-1/2 end-3 size-4 -translate-y-1/2 text-foreground-muted select-none",
|
|
5818
5804
|
"aria-hidden": "true",
|
|
@@ -5843,7 +5829,6 @@ function NativeSelectOptGroup({
|
|
|
5843
5829
|
// src/components/ui/navigation-menu.tsx
|
|
5844
5830
|
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
5845
5831
|
import { cva as cva11 } from "class-variance-authority";
|
|
5846
|
-
import { ChevronDownIcon as ChevronDownIcon4 } from "lucide-react";
|
|
5847
5832
|
import { jsx as jsx47, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
5848
5833
|
function NavigationMenu({
|
|
5849
5834
|
className,
|
|
@@ -5915,7 +5900,7 @@ function NavigationMenuTrigger({
|
|
|
5915
5900
|
children,
|
|
5916
5901
|
" ",
|
|
5917
5902
|
/* @__PURE__ */ jsx47(
|
|
5918
|
-
|
|
5903
|
+
Icons.chevronDown,
|
|
5919
5904
|
{
|
|
5920
5905
|
className: "relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
|
|
5921
5906
|
"aria-hidden": "true"
|
|
@@ -6002,11 +5987,6 @@ function NavigationMenuIndicator({
|
|
|
6002
5987
|
|
|
6003
5988
|
// src/components/ui/pagination.tsx
|
|
6004
5989
|
import * as React21 from "react";
|
|
6005
|
-
import {
|
|
6006
|
-
ChevronLeftIcon,
|
|
6007
|
-
ChevronRightIcon as ChevronRightIcon4,
|
|
6008
|
-
MoreHorizontalIcon
|
|
6009
|
-
} from "lucide-react";
|
|
6010
5990
|
import { Fragment as Fragment6, jsx as jsx48, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
6011
5991
|
var PaginationDirectionContext = React21.createContext("rtl");
|
|
6012
5992
|
function usePaginationDirection() {
|
|
@@ -6095,7 +6075,7 @@ function PaginationPrevious({
|
|
|
6095
6075
|
const dir = usePaginationDirection();
|
|
6096
6076
|
const isRTL = dir === "rtl";
|
|
6097
6077
|
const label = isRTL ? "\u0642\u0628\u0644\u06CC" : "Previous";
|
|
6098
|
-
const Icon2 = isRTL ?
|
|
6078
|
+
const Icon2 = isRTL ? Icons.chevronRight : Icons.chevronLeft;
|
|
6099
6079
|
return /* @__PURE__ */ jsxs28(
|
|
6100
6080
|
PaginationLink,
|
|
6101
6081
|
{
|
|
@@ -6121,7 +6101,7 @@ function PaginationNext({
|
|
|
6121
6101
|
const dir = usePaginationDirection();
|
|
6122
6102
|
const isRTL = dir === "rtl";
|
|
6123
6103
|
const label = isRTL ? "\u0628\u0639\u062F\u06CC" : "Next";
|
|
6124
|
-
const Icon2 = isRTL ?
|
|
6104
|
+
const Icon2 = isRTL ? Icons.chevronLeft : Icons.chevronRight;
|
|
6125
6105
|
return /* @__PURE__ */ jsx48(
|
|
6126
6106
|
PaginationLink,
|
|
6127
6107
|
{
|
|
@@ -6155,7 +6135,7 @@ function PaginationEllipsis({
|
|
|
6155
6135
|
className: cn("flex size-9 items-center justify-center", className),
|
|
6156
6136
|
...props,
|
|
6157
6137
|
children: [
|
|
6158
|
-
/* @__PURE__ */ jsx48(
|
|
6138
|
+
/* @__PURE__ */ jsx48(Icons.moreHorizontal, { className: "size-4" }),
|
|
6159
6139
|
/* @__PURE__ */ jsx48("span", { className: "sr-only", children: "More pages" })
|
|
6160
6140
|
]
|
|
6161
6141
|
}
|
|
@@ -6356,7 +6336,7 @@ var ProfileCard = React22.forwardRef(
|
|
|
6356
6336
|
{
|
|
6357
6337
|
ref,
|
|
6358
6338
|
className: cn(
|
|
6359
|
-
"flex flex-col items-center rounded-lg shadow-sm transition-colors",
|
|
6339
|
+
"flex flex-col items-center rounded-lg shadow-sm transition-colors @container",
|
|
6360
6340
|
variantClasses[variant],
|
|
6361
6341
|
currentSize.container,
|
|
6362
6342
|
onCardClick && "cursor-pointer hover:bg-surface-200",
|
|
@@ -6520,7 +6500,6 @@ ProfileInfo.displayName = "ProfileInfo";
|
|
|
6520
6500
|
|
|
6521
6501
|
// src/components/ui/engagement-rate.tsx
|
|
6522
6502
|
import * as React24 from "react";
|
|
6523
|
-
import { TrendingUp, Users as Users2, UserCheck, Award, Crown } from "lucide-react";
|
|
6524
6503
|
import { jsx as jsx52, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
6525
6504
|
var convertToLocalNumbers2 = (text, locale) => {
|
|
6526
6505
|
if (locale === "fa" || locale === "ar") {
|
|
@@ -6580,17 +6559,17 @@ var getGroupIcon = (group) => {
|
|
|
6580
6559
|
const iconClass = "w-12 h-12 text-primary";
|
|
6581
6560
|
switch (group) {
|
|
6582
6561
|
case "nano":
|
|
6583
|
-
return /* @__PURE__ */ jsx52(
|
|
6562
|
+
return /* @__PURE__ */ jsx52(Icons.users, { className: iconClass });
|
|
6584
6563
|
case "micro":
|
|
6585
|
-
return /* @__PURE__ */ jsx52(
|
|
6564
|
+
return /* @__PURE__ */ jsx52(Icons.userCheck, { className: iconClass });
|
|
6586
6565
|
case "mid":
|
|
6587
|
-
return /* @__PURE__ */ jsx52(
|
|
6566
|
+
return /* @__PURE__ */ jsx52(Icons.trendingUp, { className: iconClass });
|
|
6588
6567
|
case "macro":
|
|
6589
|
-
return /* @__PURE__ */ jsx52(
|
|
6568
|
+
return /* @__PURE__ */ jsx52(Icons.award, { className: iconClass });
|
|
6590
6569
|
case "mega":
|
|
6591
|
-
return /* @__PURE__ */ jsx52(
|
|
6570
|
+
return /* @__PURE__ */ jsx52(Icons.crown, { className: iconClass });
|
|
6592
6571
|
default:
|
|
6593
|
-
return /* @__PURE__ */ jsx52(
|
|
6572
|
+
return /* @__PURE__ */ jsx52(Icons.users, { className: iconClass });
|
|
6594
6573
|
}
|
|
6595
6574
|
};
|
|
6596
6575
|
var translations = {
|
|
@@ -7250,7 +7229,6 @@ function Progress({
|
|
|
7250
7229
|
|
|
7251
7230
|
// src/components/ui/radio-group.tsx
|
|
7252
7231
|
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
|
|
7253
|
-
import { CircleIcon as CircleIcon4 } from "lucide-react";
|
|
7254
7232
|
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
7255
7233
|
function RadioGroup4({
|
|
7256
7234
|
className,
|
|
@@ -7283,7 +7261,7 @@ function RadioGroupItem({
|
|
|
7283
7261
|
{
|
|
7284
7262
|
"data-slot": "radio-group-indicator",
|
|
7285
7263
|
className: "relative flex items-center justify-center",
|
|
7286
|
-
children: /* @__PURE__ */ jsx55(
|
|
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" })
|
|
7287
7265
|
}
|
|
7288
7266
|
)
|
|
7289
7267
|
}
|
|
@@ -7351,7 +7329,6 @@ var RadioCardDescription = React26.forwardRef(({ className, ...props }, ref) =>
|
|
|
7351
7329
|
RadioCardDescription.displayName = "RadioCardDescription";
|
|
7352
7330
|
|
|
7353
7331
|
// src/components/ui/resizable.tsx
|
|
7354
|
-
import { GripVerticalIcon } from "lucide-react";
|
|
7355
7332
|
import * as ResizablePrimitive from "react-resizable-panels";
|
|
7356
7333
|
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
7357
7334
|
function ResizablePanelGroup({
|
|
@@ -7389,7 +7366,7 @@ function ResizableHandle({
|
|
|
7389
7366
|
className
|
|
7390
7367
|
),
|
|
7391
7368
|
...props,
|
|
7392
|
-
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(
|
|
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" }) })
|
|
7393
7370
|
}
|
|
7394
7371
|
);
|
|
7395
7372
|
}
|
|
@@ -7454,7 +7431,6 @@ function ScrollBar({
|
|
|
7454
7431
|
// src/components/ui/select.tsx
|
|
7455
7432
|
import * as React27 from "react";
|
|
7456
7433
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
7457
|
-
import { Check as Check2, ChevronDown as ChevronDown2, ChevronUp as ChevronUp2 } from "lucide-react";
|
|
7458
7434
|
import { cva as cva13 } from "class-variance-authority";
|
|
7459
7435
|
import { jsx as jsx59, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
7460
7436
|
var Select = SelectPrimitive.Root;
|
|
@@ -7493,7 +7469,7 @@ var SelectTrigger = React27.forwardRef(({ className, children, size, ...props },
|
|
|
7493
7469
|
...props,
|
|
7494
7470
|
children: [
|
|
7495
7471
|
children,
|
|
7496
|
-
/* @__PURE__ */ jsx59(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx59(
|
|
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 }) })
|
|
7497
7473
|
]
|
|
7498
7474
|
}
|
|
7499
7475
|
));
|
|
@@ -7507,7 +7483,7 @@ var SelectScrollUpButton = React27.forwardRef(({ className, ...props }, ref) =>
|
|
|
7507
7483
|
className
|
|
7508
7484
|
),
|
|
7509
7485
|
...props,
|
|
7510
|
-
children: /* @__PURE__ */ jsx59(
|
|
7486
|
+
children: /* @__PURE__ */ jsx59(Icons.chevronUp, { className: "h-4 w-4" })
|
|
7511
7487
|
}
|
|
7512
7488
|
));
|
|
7513
7489
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
@@ -7520,7 +7496,7 @@ var SelectScrollDownButton = React27.forwardRef(({ className, ...props }, ref) =
|
|
|
7520
7496
|
className
|
|
7521
7497
|
),
|
|
7522
7498
|
...props,
|
|
7523
|
-
children: /* @__PURE__ */ jsx59(
|
|
7499
|
+
children: /* @__PURE__ */ jsx59(Icons.chevronDown, { className: "h-4 w-4" })
|
|
7524
7500
|
}
|
|
7525
7501
|
));
|
|
7526
7502
|
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
@@ -7575,7 +7551,7 @@ var SelectItem = React27.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
7575
7551
|
),
|
|
7576
7552
|
...props,
|
|
7577
7553
|
children: [
|
|
7578
|
-
/* @__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(
|
|
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 }) }) }),
|
|
7579
7555
|
/* @__PURE__ */ jsx59(SelectPrimitive.ItemText, { children: typeof children === "string" ? /* @__PURE__ */ jsx59("span", { children }) : children })
|
|
7580
7556
|
]
|
|
7581
7557
|
}
|
|
@@ -7593,7 +7569,6 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
|
7593
7569
|
|
|
7594
7570
|
// src/components/ui/sheet.tsx
|
|
7595
7571
|
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
7596
|
-
import { XIcon } from "lucide-react";
|
|
7597
7572
|
import { jsx as jsx60, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
7598
7573
|
function Sheet({ ...props }) {
|
|
7599
7574
|
return /* @__PURE__ */ jsx60(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
@@ -7653,7 +7628,7 @@ function SheetContent({
|
|
|
7653
7628
|
children: [
|
|
7654
7629
|
children,
|
|
7655
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: [
|
|
7656
|
-
/* @__PURE__ */ jsx60(
|
|
7631
|
+
/* @__PURE__ */ jsx60(Icons.close, { className: "size-4" }),
|
|
7657
7632
|
/* @__PURE__ */ jsx60("span", { className: "sr-only", children: "Close" })
|
|
7658
7633
|
] })
|
|
7659
7634
|
]
|
|
@@ -7712,7 +7687,6 @@ function SheetDescription({
|
|
|
7712
7687
|
import * as React29 from "react";
|
|
7713
7688
|
import { Slot as Slot5 } from "@radix-ui/react-slot";
|
|
7714
7689
|
import { cva as cva14 } from "class-variance-authority";
|
|
7715
|
-
import { PanelLeftIcon } from "lucide-react";
|
|
7716
7690
|
|
|
7717
7691
|
// src/hooks/use-mobile.ts
|
|
7718
7692
|
import * as React28 from "react";
|
|
@@ -7930,7 +7904,7 @@ function SidebarTrigger({
|
|
|
7930
7904
|
},
|
|
7931
7905
|
...props,
|
|
7932
7906
|
children: [
|
|
7933
|
-
/* @__PURE__ */ jsx61(
|
|
7907
|
+
/* @__PURE__ */ jsx61(Icons.panelLeft, {}),
|
|
7934
7908
|
/* @__PURE__ */ jsx61("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
7935
7909
|
]
|
|
7936
7910
|
}
|
|
@@ -8423,22 +8397,15 @@ function Slider({
|
|
|
8423
8397
|
}
|
|
8424
8398
|
|
|
8425
8399
|
// src/components/ui/sonner.tsx
|
|
8426
|
-
import {
|
|
8427
|
-
CheckIcon as CheckIcon5,
|
|
8428
|
-
InfoIcon,
|
|
8429
|
-
Loader2Icon as Loader2Icon2,
|
|
8430
|
-
TriangleAlertIcon,
|
|
8431
|
-
XCircleIcon
|
|
8432
|
-
} from "lucide-react";
|
|
8433
8400
|
import { useTheme } from "next-themes";
|
|
8434
8401
|
import { Toaster as Sonner } from "sonner";
|
|
8435
8402
|
import { toast } from "sonner";
|
|
8436
8403
|
import { jsx as jsx63 } from "react/jsx-runtime";
|
|
8437
8404
|
var SONNER_DEFAULT_DURATION = 4e3;
|
|
8438
|
-
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(
|
|
8439
|
-
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(
|
|
8440
|
-
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(
|
|
8441
|
-
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(
|
|
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" }) });
|
|
8442
8409
|
var Toaster = ({
|
|
8443
8410
|
dir = "rtl",
|
|
8444
8411
|
position = "bottom-left",
|
|
@@ -8455,7 +8422,7 @@ var Toaster = ({
|
|
|
8455
8422
|
info: /* @__PURE__ */ jsx63(StatusIconInfo, {}),
|
|
8456
8423
|
warning: /* @__PURE__ */ jsx63(StatusIconWarning, {}),
|
|
8457
8424
|
error: /* @__PURE__ */ jsx63(StatusIconError, {}),
|
|
8458
|
-
loading: /* @__PURE__ */ jsx63(
|
|
8425
|
+
loading: /* @__PURE__ */ jsx63(Icons.loader, { className: "size-4 animate-spin" })
|
|
8459
8426
|
},
|
|
8460
8427
|
theme,
|
|
8461
8428
|
className: "toaster group pointer-events-auto",
|
|
@@ -8839,236 +8806,136 @@ function resolveCssColor(styles, variable, fallback) {
|
|
|
8839
8806
|
if (raw.includes("%")) return `hsl(${raw})`;
|
|
8840
8807
|
return raw;
|
|
8841
8808
|
}
|
|
8842
|
-
|
|
8843
|
-
|
|
8844
|
-
|
|
8845
|
-
|
|
8846
|
-
|
|
8847
|
-
|
|
8848
|
-
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
|
|
8853
|
-
|
|
8854
|
-
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
const
|
|
8859
|
-
|
|
8860
|
-
const addOpacity = (color, opacity) => {
|
|
8861
|
-
if (color.startsWith("hsl(")) {
|
|
8862
|
-
return color.replace(")", ` / ${opacity})`);
|
|
8863
|
-
}
|
|
8864
|
-
if (color.startsWith("rgb(")) {
|
|
8865
|
-
return color.replace("rgb(", "rgba(").replace(")", `, ${opacity})`);
|
|
8866
|
-
}
|
|
8867
|
-
return color;
|
|
8868
|
-
};
|
|
8869
|
-
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 {
|
|
8870
8827
|
background: "transparent",
|
|
8871
8828
|
text: {
|
|
8872
|
-
fontFamily:
|
|
8873
|
-
fill:
|
|
8829
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8830
|
+
fill: foreground
|
|
8874
8831
|
},
|
|
8875
8832
|
axis: {
|
|
8876
8833
|
domain: {
|
|
8877
8834
|
line: {
|
|
8878
|
-
stroke:
|
|
8835
|
+
stroke: border,
|
|
8879
8836
|
strokeWidth: 1
|
|
8880
8837
|
}
|
|
8881
8838
|
},
|
|
8882
8839
|
ticks: {
|
|
8883
8840
|
line: {
|
|
8884
|
-
stroke:
|
|
8841
|
+
stroke: border,
|
|
8885
8842
|
strokeWidth: 1
|
|
8886
8843
|
},
|
|
8887
8844
|
text: {
|
|
8888
|
-
fontFamily:
|
|
8889
|
-
fill:
|
|
8845
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8846
|
+
fill: foregroundMuted
|
|
8890
8847
|
}
|
|
8891
8848
|
},
|
|
8892
8849
|
legend: {
|
|
8893
8850
|
text: {
|
|
8894
|
-
fontFamily:
|
|
8895
|
-
fill:
|
|
8851
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8852
|
+
fill: foreground
|
|
8896
8853
|
}
|
|
8897
8854
|
}
|
|
8898
8855
|
},
|
|
8899
8856
|
grid: {
|
|
8900
8857
|
line: {
|
|
8901
|
-
stroke:
|
|
8858
|
+
stroke: border,
|
|
8902
8859
|
strokeWidth: 1,
|
|
8903
8860
|
strokeOpacity: 0.5
|
|
8904
8861
|
}
|
|
8905
8862
|
},
|
|
8906
8863
|
tooltip: {
|
|
8907
8864
|
container: {
|
|
8908
|
-
fontFamily:
|
|
8909
|
-
background
|
|
8910
|
-
color:
|
|
8865
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8866
|
+
background,
|
|
8867
|
+
color: foreground,
|
|
8911
8868
|
fontSize: 12,
|
|
8912
8869
|
borderRadius: "8px",
|
|
8913
|
-
border: `1px solid ${
|
|
8870
|
+
border: `1px solid ${addOpacityToColor(border, 0.5)}`,
|
|
8914
8871
|
boxShadow: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)",
|
|
8915
8872
|
padding: "10px"
|
|
8916
8873
|
}
|
|
8917
8874
|
},
|
|
8918
8875
|
legends: {
|
|
8919
8876
|
text: {
|
|
8920
|
-
fontFamily:
|
|
8921
|
-
fill:
|
|
8877
|
+
fontFamily: CHART_FONT_FAMILY,
|
|
8878
|
+
fill: foreground
|
|
8922
8879
|
}
|
|
8923
8880
|
}
|
|
8924
8881
|
};
|
|
8925
|
-
|
|
8926
|
-
|
|
8927
|
-
|
|
8928
|
-
|
|
8929
|
-
|
|
8930
|
-
|
|
8882
|
+
}
|
|
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%)",
|
|
8889
|
+
chart2: "hsl(173 58% 39%)",
|
|
8890
|
+
chart3: "hsl(197 37% 24%)",
|
|
8891
|
+
chart4: "hsl(43 74% 66%)",
|
|
8892
|
+
chart5: "hsl(27 87% 67%)"
|
|
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)
|
|
8931
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);
|
|
8932
8912
|
return /* @__PURE__ */ jsx69("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx69(ResponsiveLine, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
8933
8913
|
}
|
|
8934
8914
|
|
|
8935
8915
|
// src/components/charts/PartoBarChart.tsx
|
|
8936
8916
|
import { ResponsiveBar } from "@nivo/bar";
|
|
8937
8917
|
import { jsx as jsx70 } from "react/jsx-runtime";
|
|
8938
|
-
var FALLBACKS2 = {
|
|
8939
|
-
foreground: "hsl(0 0% 98%)",
|
|
8940
|
-
border: "hsl(0 0% 45%)",
|
|
8941
|
-
mutedForeground: "hsl(0 0% 55%)",
|
|
8942
|
-
popover: "hsl(0 0% 12%)",
|
|
8943
|
-
popoverForeground: "hsl(0 0% 98%)",
|
|
8944
|
-
chart1: "hsl(12 76% 61%)",
|
|
8945
|
-
chart2: "hsl(173 58% 39%)",
|
|
8946
|
-
chart3: "hsl(197 37% 24%)",
|
|
8947
|
-
chart4: "hsl(43 74% 66%)",
|
|
8948
|
-
chart5: "hsl(27 87% 67%)"
|
|
8949
|
-
};
|
|
8950
8918
|
function PartoBarChart({ className, ...props }) {
|
|
8951
8919
|
const styles = useRootStyles();
|
|
8952
|
-
const
|
|
8953
|
-
const
|
|
8954
|
-
background: "transparent",
|
|
8955
|
-
text: {
|
|
8956
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8957
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
8958
|
-
},
|
|
8959
|
-
axis: {
|
|
8960
|
-
domain: {
|
|
8961
|
-
line: {
|
|
8962
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8963
|
-
strokeWidth: 1
|
|
8964
|
-
}
|
|
8965
|
-
},
|
|
8966
|
-
ticks: {
|
|
8967
|
-
line: {
|
|
8968
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8969
|
-
strokeWidth: 1
|
|
8970
|
-
},
|
|
8971
|
-
text: {
|
|
8972
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8973
|
-
fill: getColor("--muted-foreground", FALLBACKS2.mutedForeground)
|
|
8974
|
-
}
|
|
8975
|
-
},
|
|
8976
|
-
legend: {
|
|
8977
|
-
text: {
|
|
8978
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8979
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
8980
|
-
}
|
|
8981
|
-
}
|
|
8982
|
-
},
|
|
8983
|
-
grid: {
|
|
8984
|
-
line: {
|
|
8985
|
-
stroke: getColor("--border", FALLBACKS2.border),
|
|
8986
|
-
strokeWidth: 1,
|
|
8987
|
-
strokeOpacity: 0.4
|
|
8988
|
-
}
|
|
8989
|
-
},
|
|
8990
|
-
tooltip: {
|
|
8991
|
-
container: {
|
|
8992
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
8993
|
-
background: getColor("--popover", FALLBACKS2.popover),
|
|
8994
|
-
color: getColor("--popover-foreground", FALLBACKS2.popoverForeground),
|
|
8995
|
-
fontSize: 12,
|
|
8996
|
-
borderRadius: "var(--radius)",
|
|
8997
|
-
boxShadow: "0 2px 12px rgba(0,0,0,0.15)",
|
|
8998
|
-
padding: "8px 12px"
|
|
8999
|
-
}
|
|
9000
|
-
},
|
|
9001
|
-
legends: {
|
|
9002
|
-
text: {
|
|
9003
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9004
|
-
fill: getColor("--foreground", FALLBACKS2.foreground)
|
|
9005
|
-
}
|
|
9006
|
-
}
|
|
9007
|
-
};
|
|
9008
|
-
const defaultColors = [
|
|
9009
|
-
getColor("--chart-1", FALLBACKS2.chart1),
|
|
9010
|
-
getColor("--chart-2", FALLBACKS2.chart2),
|
|
9011
|
-
getColor("--chart-3", FALLBACKS2.chart3),
|
|
9012
|
-
getColor("--chart-4", FALLBACKS2.chart4),
|
|
9013
|
-
getColor("--chart-5", FALLBACKS2.chart5)
|
|
9014
|
-
];
|
|
8920
|
+
const nivoTheme = createNivoTheme(styles);
|
|
8921
|
+
const defaultColors = resolveChartColors(styles);
|
|
9015
8922
|
return /* @__PURE__ */ jsx70("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx70(ResponsiveBar, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
9016
8923
|
}
|
|
9017
8924
|
|
|
9018
8925
|
// src/components/charts/PartoPieChart.tsx
|
|
9019
8926
|
import { ResponsivePie } from "@nivo/pie";
|
|
9020
8927
|
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
9021
|
-
var FALLBACKS3 = {
|
|
9022
|
-
foreground: "hsl(0 0% 98%)",
|
|
9023
|
-
popover: "hsl(0 0% 12%)",
|
|
9024
|
-
popoverForeground: "hsl(0 0% 98%)",
|
|
9025
|
-
chart1: "hsl(12 76% 61%)",
|
|
9026
|
-
chart2: "hsl(173 58% 39%)",
|
|
9027
|
-
chart3: "hsl(197 37% 24%)",
|
|
9028
|
-
chart4: "hsl(43 74% 66%)",
|
|
9029
|
-
chart5: "hsl(27 87% 67%)"
|
|
9030
|
-
};
|
|
9031
8928
|
function PartoPieChart({ className, ...props }) {
|
|
9032
8929
|
const styles = useRootStyles();
|
|
9033
|
-
const
|
|
9034
|
-
const
|
|
9035
|
-
background: "transparent",
|
|
9036
|
-
text: {
|
|
9037
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9038
|
-
fill: getColor("--foreground", FALLBACKS3.foreground)
|
|
9039
|
-
},
|
|
9040
|
-
tooltip: {
|
|
9041
|
-
container: {
|
|
9042
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9043
|
-
background: getColor("--popover", FALLBACKS3.popover),
|
|
9044
|
-
color: getColor("--popover-foreground", FALLBACKS3.popoverForeground),
|
|
9045
|
-
fontSize: 12,
|
|
9046
|
-
borderRadius: "var(--radius)",
|
|
9047
|
-
boxShadow: "0 2px 12px rgba(0,0,0,0.15)",
|
|
9048
|
-
padding: "8px 12px"
|
|
9049
|
-
}
|
|
9050
|
-
},
|
|
9051
|
-
legends: {
|
|
9052
|
-
text: {
|
|
9053
|
-
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9054
|
-
fill: getColor("--foreground", FALLBACKS3.foreground)
|
|
9055
|
-
}
|
|
9056
|
-
}
|
|
9057
|
-
};
|
|
9058
|
-
const defaultColors = [
|
|
9059
|
-
getColor("--chart-1", FALLBACKS3.chart1),
|
|
9060
|
-
getColor("--chart-2", FALLBACKS3.chart2),
|
|
9061
|
-
getColor("--chart-3", FALLBACKS3.chart3),
|
|
9062
|
-
getColor("--chart-4", FALLBACKS3.chart4),
|
|
9063
|
-
getColor("--chart-5", FALLBACKS3.chart5)
|
|
9064
|
-
];
|
|
8930
|
+
const nivoTheme = createNivoTheme(styles);
|
|
8931
|
+
const defaultColors = resolveChartColors(styles);
|
|
9065
8932
|
return /* @__PURE__ */ jsx71("div", { className, dir: "ltr", style: { position: "relative", width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx71(ResponsivePie, { theme: nivoTheme, colors: defaultColors, ...props }) });
|
|
9066
8933
|
}
|
|
9067
8934
|
|
|
9068
8935
|
// src/components/charts/PartoHeatMap.tsx
|
|
9069
8936
|
import { ResponsiveHeatMap } from "@nivo/heatmap";
|
|
9070
8937
|
import { jsx as jsx72, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9071
|
-
var
|
|
8938
|
+
var FALLBACKS = {
|
|
9072
8939
|
foreground: "hsl(0 0% 98%)",
|
|
9073
8940
|
border: "hsl(0 0% 45%)",
|
|
9074
8941
|
mutedForeground: "hsl(0 0% 55%)",
|
|
@@ -9136,24 +9003,24 @@ function PartoHeatMap({
|
|
|
9136
9003
|
background: "transparent",
|
|
9137
9004
|
text: {
|
|
9138
9005
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9139
|
-
fill: getColor("--foreground",
|
|
9006
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
9140
9007
|
fontSize: 11
|
|
9141
9008
|
},
|
|
9142
9009
|
axis: {
|
|
9143
9010
|
domain: {
|
|
9144
9011
|
line: {
|
|
9145
|
-
stroke: getColor("--border",
|
|
9012
|
+
stroke: getColor("--border", FALLBACKS.border),
|
|
9146
9013
|
strokeWidth: 1
|
|
9147
9014
|
}
|
|
9148
9015
|
},
|
|
9149
9016
|
ticks: {
|
|
9150
9017
|
line: {
|
|
9151
|
-
stroke: getColor("--border",
|
|
9018
|
+
stroke: getColor("--border", FALLBACKS.border),
|
|
9152
9019
|
strokeWidth: 1
|
|
9153
9020
|
},
|
|
9154
9021
|
text: {
|
|
9155
9022
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9156
|
-
fill: getColor("--foreground",
|
|
9023
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
9157
9024
|
fontSize: 13,
|
|
9158
9025
|
fontWeight: 600
|
|
9159
9026
|
}
|
|
@@ -9161,7 +9028,7 @@ function PartoHeatMap({
|
|
|
9161
9028
|
legend: {
|
|
9162
9029
|
text: {
|
|
9163
9030
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9164
|
-
fill: getColor("--foreground",
|
|
9031
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
9165
9032
|
fontSize: 13,
|
|
9166
9033
|
fontWeight: 700
|
|
9167
9034
|
}
|
|
@@ -9169,26 +9036,26 @@ function PartoHeatMap({
|
|
|
9169
9036
|
},
|
|
9170
9037
|
grid: {
|
|
9171
9038
|
line: {
|
|
9172
|
-
stroke: getColor("--card",
|
|
9039
|
+
stroke: getColor("--card", FALLBACKS.card),
|
|
9173
9040
|
strokeWidth: 3
|
|
9174
9041
|
}
|
|
9175
9042
|
},
|
|
9176
9043
|
tooltip: {
|
|
9177
9044
|
container: {
|
|
9178
9045
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9179
|
-
background: getColor("--popover",
|
|
9180
|
-
color: getColor("--popover-foreground",
|
|
9046
|
+
background: getColor("--popover", FALLBACKS.popover),
|
|
9047
|
+
color: getColor("--popover-foreground", FALLBACKS.popoverForeground),
|
|
9181
9048
|
fontSize: 12,
|
|
9182
9049
|
borderRadius: "var(--radius)",
|
|
9183
9050
|
boxShadow: "0 2px 4px rgba(0,0,0,0.2)",
|
|
9184
9051
|
padding: "8px 12px",
|
|
9185
|
-
border: `1px solid ${getColor("--border",
|
|
9052
|
+
border: `1px solid ${getColor("--border", FALLBACKS.border)}`
|
|
9186
9053
|
}
|
|
9187
9054
|
},
|
|
9188
9055
|
legends: {
|
|
9189
9056
|
text: {
|
|
9190
9057
|
fontFamily: "Yekan Bakh, system-ui, -apple-system, sans-serif",
|
|
9191
|
-
fill: getColor("--foreground",
|
|
9058
|
+
fill: getColor("--foreground", FALLBACKS.foreground),
|
|
9192
9059
|
fontSize: 11
|
|
9193
9060
|
}
|
|
9194
9061
|
}
|
|
@@ -9257,7 +9124,7 @@ function PartoHeatMap({
|
|
|
9257
9124
|
emptyColor: getColor("--muted", "hsl(0 0% 20%)"),
|
|
9258
9125
|
borderRadius: 2,
|
|
9259
9126
|
borderWidth: 3,
|
|
9260
|
-
borderColor: getColor("--card",
|
|
9127
|
+
borderColor: getColor("--card", FALLBACKS.card),
|
|
9261
9128
|
enableLabels: false,
|
|
9262
9129
|
animate: true,
|
|
9263
9130
|
motionConfig: "gentle",
|
|
@@ -9276,7 +9143,7 @@ import { Wordcloud } from "@visx/wordcloud";
|
|
|
9276
9143
|
import { scaleLog } from "@visx/scale";
|
|
9277
9144
|
import { Text } from "@visx/text";
|
|
9278
9145
|
import { jsx as jsx73, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9279
|
-
var
|
|
9146
|
+
var FALLBACKS2 = {
|
|
9280
9147
|
primary: "hsl(12 76% 61%)"
|
|
9281
9148
|
};
|
|
9282
9149
|
var stableRandom = () => 0.5;
|
|
@@ -9310,7 +9177,7 @@ function PartoWordCloud({
|
|
|
9310
9177
|
const [hovered, setHovered] = React34.useState(null);
|
|
9311
9178
|
const containerRef = React34.useRef(null);
|
|
9312
9179
|
const getColor = (variable, fallback) => resolveCssColor(styles, variable, fallback);
|
|
9313
|
-
const primaryColor = getColor("--primary",
|
|
9180
|
+
const primaryColor = getColor("--primary", FALLBACKS2.primary);
|
|
9314
9181
|
const formattedWords = React34.useMemo(() => {
|
|
9315
9182
|
return words.map((word) => ({
|
|
9316
9183
|
...word,
|