@amogads/ui 1.1.3 → 1.1.5
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.js +2277 -675
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2297 -649
- package/dist/index.mjs.map +1 -1
- package/dist/pages.js +7111 -6890
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +23240 -23019
- package/dist/pages.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -198,7 +198,10 @@ __export(design_system_exports, {
|
|
|
198
198
|
FieldSeparator: () => FieldSeparator,
|
|
199
199
|
FieldSet: () => FieldSet,
|
|
200
200
|
FieldTitle: () => FieldTitle,
|
|
201
|
+
FileCardItem: () => FileCardItem,
|
|
202
|
+
FileUploadForm: () => FileUploadForm,
|
|
201
203
|
FilterBar: () => FilterBar,
|
|
204
|
+
FolderTreeItem: () => FolderTreeItem,
|
|
202
205
|
Form: () => Form,
|
|
203
206
|
FormControl: () => FormControl,
|
|
204
207
|
FormDescription: () => FormDescription,
|
|
@@ -351,6 +354,7 @@ __export(design_system_exports, {
|
|
|
351
354
|
Spinner: () => Spinner,
|
|
352
355
|
Stats01: () => Stats01,
|
|
353
356
|
StatusBadge: () => StatusBadge,
|
|
357
|
+
StorageStatCard: () => StorageStatCard,
|
|
354
358
|
Switch: () => Switch,
|
|
355
359
|
Table: () => Table,
|
|
356
360
|
TableBody: () => TableBody,
|
|
@@ -378,12 +382,15 @@ __export(design_system_exports, {
|
|
|
378
382
|
TooltipTrigger: () => TooltipTrigger,
|
|
379
383
|
TopNav: () => TopNav,
|
|
380
384
|
TypingIndicator: () => TypingIndicator,
|
|
385
|
+
UserFileCardsView: () => UserFileCardsView,
|
|
381
386
|
WizardTemplate: () => WizardTemplate,
|
|
382
387
|
WorkspaceTemplate: () => WorkspaceTemplate,
|
|
383
388
|
badgeVariants: () => badgeVariants,
|
|
384
389
|
buttonGroupVariants: () => buttonGroupVariants,
|
|
385
390
|
buttonVariants: () => buttonVariants,
|
|
386
391
|
downloadQrCode: () => downloadQrCode,
|
|
392
|
+
formatBytes: () => formatBytes,
|
|
393
|
+
getFileCategoryTheme: () => getFileCategoryTheme,
|
|
387
394
|
navigationMenuTriggerStyle: () => navigationMenuTriggerStyle,
|
|
388
395
|
sidebarData: () => sidebarData2,
|
|
389
396
|
statusBadgeVariants: () => statusBadgeVariants,
|
|
@@ -4942,6 +4949,22 @@ function SidebarProvider({
|
|
|
4942
4949
|
window.addEventListener("keydown", handleKeyDown);
|
|
4943
4950
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
4944
4951
|
}, [toggleSidebar]);
|
|
4952
|
+
React7.useEffect(() => {
|
|
4953
|
+
const handleCustomToggle = (e) => {
|
|
4954
|
+
const customEvent = e;
|
|
4955
|
+
if (customEvent.detail && typeof customEvent.detail.open === "boolean") {
|
|
4956
|
+
if (isMobile) {
|
|
4957
|
+
setOpenMobile(customEvent.detail.open);
|
|
4958
|
+
} else {
|
|
4959
|
+
setOpen(customEvent.detail.open);
|
|
4960
|
+
}
|
|
4961
|
+
} else {
|
|
4962
|
+
toggleSidebar();
|
|
4963
|
+
}
|
|
4964
|
+
};
|
|
4965
|
+
window.addEventListener("amoga:toggle-sidebar", handleCustomToggle);
|
|
4966
|
+
return () => window.removeEventListener("amoga:toggle-sidebar", handleCustomToggle);
|
|
4967
|
+
}, [isMobile, setOpenMobile, setOpen, toggleSidebar]);
|
|
4945
4968
|
const state = open ? "expanded" : "collapsed";
|
|
4946
4969
|
const contextValue = React7.useMemo(
|
|
4947
4970
|
() => ({
|
|
@@ -11366,280 +11389,1852 @@ function AiChatHeader({
|
|
|
11366
11389
|
);
|
|
11367
11390
|
}
|
|
11368
11391
|
|
|
11369
|
-
// src/design-system/
|
|
11392
|
+
// src/design-system/components/files/file-card-item.tsx
|
|
11393
|
+
var import_react17 = __toESM(require("react"));
|
|
11394
|
+
var import_lucide_react48 = require("lucide-react");
|
|
11395
|
+
var import_date_fns3 = require("date-fns");
|
|
11370
11396
|
var import_jsx_runtime94 = require("react/jsx-runtime");
|
|
11371
|
-
function
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
|
|
11375
|
-
|
|
11376
|
-
|
|
11377
|
-
|
|
11378
|
-
|
|
11379
|
-
|
|
11380
|
-
|
|
11381
|
-
|
|
11382
|
-
|
|
11383
|
-
|
|
11384
|
-
|
|
11385
|
-
|
|
11386
|
-
|
|
11387
|
-
|
|
11388
|
-
|
|
11389
|
-
|
|
11390
|
-
|
|
11391
|
-
|
|
11392
|
-
|
|
11393
|
-
|
|
11394
|
-
|
|
11395
|
-
|
|
11396
|
-
|
|
11397
|
-
|
|
11398
|
-
|
|
11399
|
-
|
|
11400
|
-
|
|
11401
|
-
|
|
11402
|
-
|
|
11403
|
-
{
|
|
11404
|
-
|
|
11405
|
-
|
|
11406
|
-
|
|
11407
|
-
|
|
11408
|
-
|
|
11409
|
-
|
|
11410
|
-
|
|
11411
|
-
|
|
11412
|
-
|
|
11413
|
-
|
|
11414
|
-
|
|
11415
|
-
|
|
11397
|
+
function getFileCategoryTheme(category) {
|
|
11398
|
+
switch (category) {
|
|
11399
|
+
case "Pdf":
|
|
11400
|
+
return {
|
|
11401
|
+
bg: "bg-red-500/10 dark:bg-red-950/40",
|
|
11402
|
+
text: "text-red-600 dark:text-red-400",
|
|
11403
|
+
border: "border-red-200/40 dark:border-red-900/40",
|
|
11404
|
+
gradient: "from-red-500/20 to-orange-500/10"
|
|
11405
|
+
};
|
|
11406
|
+
case "Doc":
|
|
11407
|
+
return {
|
|
11408
|
+
bg: "bg-blue-500/10 dark:bg-blue-950/40",
|
|
11409
|
+
text: "text-blue-600 dark:text-blue-400",
|
|
11410
|
+
border: "border-blue-200/40 dark:border-blue-900/40",
|
|
11411
|
+
gradient: "from-blue-500/20 to-indigo-500/10"
|
|
11412
|
+
};
|
|
11413
|
+
case "Xls":
|
|
11414
|
+
case "Csv":
|
|
11415
|
+
return {
|
|
11416
|
+
bg: "bg-emerald-500/10 dark:bg-emerald-950/40",
|
|
11417
|
+
text: "text-emerald-600 dark:text-emerald-400",
|
|
11418
|
+
border: "border-emerald-200/40 dark:border-emerald-900/40",
|
|
11419
|
+
gradient: "from-emerald-500/20 to-teal-500/10"
|
|
11420
|
+
};
|
|
11421
|
+
case "Images":
|
|
11422
|
+
return {
|
|
11423
|
+
bg: "bg-amber-500/10 dark:bg-amber-950/40",
|
|
11424
|
+
text: "text-amber-600 dark:text-amber-400",
|
|
11425
|
+
border: "border-amber-200/40 dark:border-amber-900/40",
|
|
11426
|
+
gradient: "from-amber-500/20 to-yellow-500/10"
|
|
11427
|
+
};
|
|
11428
|
+
case "Videos":
|
|
11429
|
+
return {
|
|
11430
|
+
bg: "bg-purple-500/10 dark:bg-purple-950/40",
|
|
11431
|
+
text: "text-purple-600 dark:text-purple-400",
|
|
11432
|
+
border: "border-purple-200/40 dark:border-purple-900/40",
|
|
11433
|
+
gradient: "from-purple-500/20 to-pink-500/10"
|
|
11434
|
+
};
|
|
11435
|
+
case "Zip":
|
|
11436
|
+
return {
|
|
11437
|
+
bg: "bg-orange-500/10 dark:bg-orange-950/40",
|
|
11438
|
+
text: "text-orange-600 dark:text-orange-400",
|
|
11439
|
+
border: "border-orange-200/40 dark:border-orange-900/40",
|
|
11440
|
+
gradient: "from-orange-500/20 to-amber-500/10"
|
|
11441
|
+
};
|
|
11442
|
+
default:
|
|
11443
|
+
return {
|
|
11444
|
+
bg: "bg-indigo-500/10 dark:bg-indigo-950/40",
|
|
11445
|
+
text: "text-indigo-600 dark:text-indigo-400",
|
|
11446
|
+
border: "border-indigo-200/40 dark:border-indigo-900/40",
|
|
11447
|
+
gradient: "from-indigo-500/20 to-purple-500/10"
|
|
11448
|
+
};
|
|
11449
|
+
}
|
|
11416
11450
|
}
|
|
11417
|
-
|
|
11418
|
-
|
|
11419
|
-
|
|
11420
|
-
|
|
11421
|
-
|
|
11422
|
-
|
|
11423
|
-
|
|
11424
|
-
|
|
11425
|
-
|
|
11426
|
-
|
|
11427
|
-
|
|
11428
|
-
|
|
11429
|
-
|
|
11430
|
-
|
|
11431
|
-
|
|
11432
|
-
|
|
11433
|
-
|
|
11451
|
+
function formatBytes(bytes) {
|
|
11452
|
+
if (!bytes || bytes === 0) return "0 B";
|
|
11453
|
+
const k = 1024;
|
|
11454
|
+
const sizes = ["B", "KB", "MB", "GB", "TB"];
|
|
11455
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
11456
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
|
|
11457
|
+
}
|
|
11458
|
+
function FileCardItem({
|
|
11459
|
+
file,
|
|
11460
|
+
isSelected = false,
|
|
11461
|
+
viewMode = "grid",
|
|
11462
|
+
onSelect,
|
|
11463
|
+
onPreview,
|
|
11464
|
+
onDownload,
|
|
11465
|
+
onCopyLink,
|
|
11466
|
+
onRename,
|
|
11467
|
+
onDelete,
|
|
11468
|
+
onShare,
|
|
11469
|
+
className
|
|
11434
11470
|
}) {
|
|
11435
|
-
|
|
11436
|
-
|
|
11437
|
-
|
|
11438
|
-
|
|
11439
|
-
|
|
11440
|
-
|
|
11441
|
-
|
|
11442
|
-
|
|
11443
|
-
|
|
11444
|
-
|
|
11445
|
-
|
|
11446
|
-
|
|
11447
|
-
|
|
11448
|
-
|
|
11449
|
-
|
|
11450
|
-
|
|
11451
|
-
|
|
11452
|
-
|
|
11453
|
-
title,
|
|
11454
|
-
description,
|
|
11455
|
-
badge,
|
|
11456
|
-
breadcrumbs,
|
|
11457
|
-
actions
|
|
11458
|
-
}
|
|
11459
|
-
)
|
|
11460
|
-
] }),
|
|
11461
|
-
highlights && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4", children: highlights }),
|
|
11462
|
-
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
|
|
11463
|
-
"div",
|
|
11471
|
+
const theme = getFileCategoryTheme(file.category);
|
|
11472
|
+
const isImage = file.category === "Images" || /\.(jpg|jpeg|png|webp|svg|gif)$/i.test(file.fileName);
|
|
11473
|
+
const isVideo = file.category === "Videos" || /\.(mp4|webm|mov|mkv)$/i.test(file.fileName);
|
|
11474
|
+
const isPdf = file.category === "Pdf" || /\.pdf$/i.test(file.fileName);
|
|
11475
|
+
const isSheet = file.category === "Xls" || file.category === "Csv" || /\.(xls|xlsx|csv)$/i.test(file.fileName);
|
|
11476
|
+
const isZip = file.category === "Zip" || /\.(zip|rar|7z|tar|gz)$/i.test(file.fileName);
|
|
11477
|
+
const updatedTimeDisplay = import_react17.default.useMemo(() => {
|
|
11478
|
+
if (!file.updatedAt) return "Recently";
|
|
11479
|
+
try {
|
|
11480
|
+
const d = new Date(file.updatedAt);
|
|
11481
|
+
return (0, import_date_fns3.formatDistanceToNow)(d, { addSuffix: true });
|
|
11482
|
+
} catch {
|
|
11483
|
+
return "Recently";
|
|
11484
|
+
}
|
|
11485
|
+
}, [file.updatedAt]);
|
|
11486
|
+
if (viewMode === "table") {
|
|
11487
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11488
|
+
"tr",
|
|
11464
11489
|
{
|
|
11490
|
+
onClick: () => onSelect?.(file),
|
|
11465
11491
|
className: cn(
|
|
11466
|
-
"
|
|
11467
|
-
|
|
11492
|
+
"group border-b border-border/50 transition-colors hover:bg-muted/40 cursor-pointer",
|
|
11493
|
+
isSelected && "bg-primary/5",
|
|
11494
|
+
className
|
|
11468
11495
|
),
|
|
11469
11496
|
children: [
|
|
11470
|
-
/* @__PURE__ */ (0,
|
|
11471
|
-
|
|
11472
|
-
|
|
11473
|
-
|
|
11474
|
-
|
|
11475
|
-
|
|
11476
|
-
|
|
11477
|
-
|
|
11478
|
-
|
|
11479
|
-
|
|
11480
|
-
|
|
11481
|
-
|
|
11482
|
-
|
|
11483
|
-
|
|
11484
|
-
|
|
11485
|
-
breadcrumbs,
|
|
11486
|
-
onBack,
|
|
11487
|
-
backLabel = "Back",
|
|
11488
|
-
submitLabel = "Save changes",
|
|
11489
|
-
cancelLabel = "Cancel",
|
|
11490
|
-
onCancel,
|
|
11491
|
-
isSubmitting = false,
|
|
11492
|
-
stickyFooter = false,
|
|
11493
|
-
secondaryActions,
|
|
11494
|
-
children,
|
|
11495
|
-
className,
|
|
11496
|
-
onSubmit,
|
|
11497
|
-
...props
|
|
11498
|
-
}) {
|
|
11499
|
-
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex flex-col gap-6 p-4 sm:p-6 md:p-8", children: [
|
|
11500
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
11501
|
-
onBack && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
11502
|
-
Button,
|
|
11503
|
-
{
|
|
11504
|
-
type: "button",
|
|
11505
|
-
variant: "ghost",
|
|
11506
|
-
size: "sm",
|
|
11507
|
-
onClick: onBack,
|
|
11508
|
-
className: "w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground",
|
|
11509
|
-
children: [
|
|
11510
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react49.ArrowLeft, { className: "h-3.5 w-3.5" }),
|
|
11511
|
-
backLabel
|
|
11512
|
-
]
|
|
11513
|
-
}
|
|
11514
|
-
),
|
|
11515
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
11516
|
-
PageHeader,
|
|
11517
|
-
{
|
|
11518
|
-
title,
|
|
11519
|
-
description,
|
|
11520
|
-
badge,
|
|
11521
|
-
breadcrumbs
|
|
11522
|
-
}
|
|
11523
|
-
)
|
|
11524
|
-
] }),
|
|
11525
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("form", { onSubmit, className: cn("space-y-8", className), ...props, children: [
|
|
11526
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "space-y-6", children }),
|
|
11527
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
11528
|
-
"div",
|
|
11529
|
-
{
|
|
11530
|
-
className: cn(
|
|
11531
|
-
"flex flex-wrap items-center justify-between gap-4 pt-6",
|
|
11532
|
-
stickyFooter && "sticky bottom-0 -mx-4 -mb-4 bg-background/95 p-4 backdrop-blur border-t sm:-mx-6 sm:-mb-6 sm:p-6 md:-mx-8 md:-mb-8 md:p-8"
|
|
11533
|
-
),
|
|
11534
|
-
children: [
|
|
11535
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { children: secondaryActions }),
|
|
11536
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
11537
|
-
onCancel && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
11538
|
-
Button,
|
|
11539
|
-
{
|
|
11540
|
-
type: "button",
|
|
11541
|
-
variant: "outline",
|
|
11542
|
-
disabled: isSubmitting,
|
|
11543
|
-
onClick: onCancel,
|
|
11544
|
-
children: cancelLabel
|
|
11545
|
-
}
|
|
11546
|
-
),
|
|
11547
|
-
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Saving..." : submitLabel })
|
|
11497
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("td", { className: "py-3 px-4", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
11498
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11499
|
+
"div",
|
|
11500
|
+
{
|
|
11501
|
+
className: cn(
|
|
11502
|
+
"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border shadow-2xs",
|
|
11503
|
+
theme.bg,
|
|
11504
|
+
theme.border
|
|
11505
|
+
),
|
|
11506
|
+
children: isImage ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Image, { className: cn("h-4 w-4", theme.text) }) : isVideo ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Film, { className: cn("h-4 w-4", theme.text) }) : isPdf ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileText, { className: cn("h-4 w-4", theme.text) }) : isSheet ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileSpreadsheet, { className: cn("h-4 w-4", theme.text) }) : isZip ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileArchive, { className: cn("h-4 w-4", theme.text) }) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileCode, { className: cn("h-4 w-4", theme.text) })
|
|
11507
|
+
}
|
|
11508
|
+
),
|
|
11509
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "min-w-0", children: [
|
|
11510
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("p", { className: "font-semibold text-xs text-foreground truncate max-w-[240px] sm:max-w-xs", children: file.fileName }),
|
|
11511
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("p", { className: "text-[11px] text-muted-foreground", children: file.folderPath || file.section || "General" })
|
|
11548
11512
|
] })
|
|
11549
|
-
]
|
|
11550
|
-
|
|
11551
|
-
|
|
11552
|
-
|
|
11553
|
-
|
|
11554
|
-
|
|
11555
|
-
|
|
11556
|
-
|
|
11557
|
-
|
|
11558
|
-
|
|
11559
|
-
|
|
11560
|
-
|
|
11561
|
-
|
|
11562
|
-
steps,
|
|
11563
|
-
currentStepIndex,
|
|
11564
|
-
onStepChange,
|
|
11565
|
-
onNext,
|
|
11566
|
-
onPrevious,
|
|
11567
|
-
onSubmit,
|
|
11568
|
-
nextLabel = "Next",
|
|
11569
|
-
previousLabel = "Previous",
|
|
11570
|
-
submitLabel = "Complete",
|
|
11571
|
-
isSubmitting = false,
|
|
11572
|
-
canProceed = true,
|
|
11573
|
-
children,
|
|
11574
|
-
className,
|
|
11575
|
-
...props
|
|
11576
|
-
}) {
|
|
11577
|
-
const isLastStep = currentStepIndex === steps.length - 1;
|
|
11578
|
-
const isFirstStep = currentStepIndex === 0;
|
|
11579
|
-
return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: cn("flex flex-col gap-6 p-4 sm:p-6 md:p-8", className), ...props, children: [
|
|
11580
|
-
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(PageHeader, { title, description }),
|
|
11581
|
-
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("nav", { "aria-label": "Wizard Progress", className: "py-2", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("ol", { className: "flex items-center justify-between gap-2 overflow-x-auto pb-2", children: steps.map((step, idx) => {
|
|
11582
|
-
const isCompleted = idx < currentStepIndex;
|
|
11583
|
-
const isCurrent = idx === currentStepIndex;
|
|
11584
|
-
const isClickable = onStepChange && idx < currentStepIndex;
|
|
11585
|
-
return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
|
|
11586
|
-
"li",
|
|
11587
|
-
{
|
|
11588
|
-
className: "flex flex-1 items-center gap-2.5 min-w-[120px]",
|
|
11589
|
-
children: [
|
|
11590
|
-
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
|
|
11513
|
+
] }) }),
|
|
11514
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("td", { className: "py-3 px-4 text-xs", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11515
|
+
Badge,
|
|
11516
|
+
{
|
|
11517
|
+
variant: "outline",
|
|
11518
|
+
className: cn("text-[10px] px-2 py-0.5 font-bold", theme.bg, theme.text, theme.border),
|
|
11519
|
+
children: file.category
|
|
11520
|
+
}
|
|
11521
|
+
) }),
|
|
11522
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("td", { className: "py-3 px-4 text-xs text-muted-foreground font-mono", children: formatBytes(file.fileSize) }),
|
|
11523
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("td", { className: "py-3 px-4 text-xs text-muted-foreground hidden sm:table-cell", children: updatedTimeDisplay }),
|
|
11524
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("td", { className: "py-3 px-4 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex items-center justify-end gap-1", children: [
|
|
11525
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11591
11526
|
"button",
|
|
11592
11527
|
{
|
|
11593
11528
|
type: "button",
|
|
11594
|
-
|
|
11595
|
-
|
|
11596
|
-
|
|
11597
|
-
|
|
11598
|
-
|
|
11599
|
-
|
|
11600
|
-
children:
|
|
11601
|
-
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
11602
|
-
"span",
|
|
11603
|
-
{
|
|
11604
|
-
className: cn(
|
|
11605
|
-
"flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold",
|
|
11606
|
-
isCompleted && "bg-primary text-primary-foreground",
|
|
11607
|
-
isCurrent && "border-2 border-primary bg-primary/10 text-primary font-bold",
|
|
11608
|
-
!isCompleted && !isCurrent && "border border-border bg-muted text-muted-foreground"
|
|
11609
|
-
),
|
|
11610
|
-
children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react50.Check, { className: "h-4 w-4" }) : idx + 1
|
|
11611
|
-
}
|
|
11612
|
-
),
|
|
11613
|
-
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "hidden sm:block", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
11614
|
-
"div",
|
|
11615
|
-
{
|
|
11616
|
-
className: cn(
|
|
11617
|
-
"text-xs font-medium",
|
|
11618
|
-
isCurrent ? "text-foreground font-semibold" : "text-muted-foreground"
|
|
11619
|
-
),
|
|
11620
|
-
children: step.title
|
|
11621
|
-
}
|
|
11622
|
-
) })
|
|
11623
|
-
]
|
|
11529
|
+
onClick: (e) => {
|
|
11530
|
+
e.stopPropagation();
|
|
11531
|
+
onPreview?.(file);
|
|
11532
|
+
},
|
|
11533
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11534
|
+
title: "Preview",
|
|
11535
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Eye, { className: "h-4 w-4" })
|
|
11624
11536
|
}
|
|
11625
11537
|
),
|
|
11626
|
-
|
|
11627
|
-
"
|
|
11538
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11539
|
+
"button",
|
|
11628
11540
|
{
|
|
11629
|
-
|
|
11630
|
-
|
|
11631
|
-
|
|
11632
|
-
|
|
11541
|
+
type: "button",
|
|
11542
|
+
onClick: (e) => {
|
|
11543
|
+
e.stopPropagation();
|
|
11544
|
+
onDownload?.(file);
|
|
11545
|
+
},
|
|
11546
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11547
|
+
title: "Download",
|
|
11548
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Download, { className: "h-4 w-4" })
|
|
11633
11549
|
}
|
|
11634
|
-
)
|
|
11550
|
+
),
|
|
11551
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(DropdownMenu, { children: [
|
|
11552
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11553
|
+
"button",
|
|
11554
|
+
{
|
|
11555
|
+
type: "button",
|
|
11556
|
+
onClick: (e) => e.stopPropagation(),
|
|
11557
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11558
|
+
title: "More actions",
|
|
11559
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.MoreHorizontal, { className: "h-4 w-4" })
|
|
11560
|
+
}
|
|
11561
|
+
) }),
|
|
11562
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(DropdownMenuContent, { align: "end", className: "w-40 rounded-xl p-1 shadow-lg", children: [
|
|
11563
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11564
|
+
DropdownMenuItem,
|
|
11565
|
+
{
|
|
11566
|
+
onClick: () => onPreview?.(file),
|
|
11567
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11568
|
+
children: [
|
|
11569
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Eye, { className: "h-3.5 w-3.5 text-blue-500" }),
|
|
11570
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Preview" })
|
|
11571
|
+
]
|
|
11572
|
+
}
|
|
11573
|
+
),
|
|
11574
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11575
|
+
DropdownMenuItem,
|
|
11576
|
+
{
|
|
11577
|
+
onClick: () => onDownload?.(file),
|
|
11578
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11579
|
+
children: [
|
|
11580
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Download, { className: "h-3.5 w-3.5 text-emerald-500" }),
|
|
11581
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Download" })
|
|
11582
|
+
]
|
|
11583
|
+
}
|
|
11584
|
+
),
|
|
11585
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11586
|
+
DropdownMenuItem,
|
|
11587
|
+
{
|
|
11588
|
+
onClick: () => onCopyLink?.(file),
|
|
11589
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11590
|
+
children: [
|
|
11591
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Copy, { className: "h-3.5 w-3.5 text-amber-500" }),
|
|
11592
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Copy Link" })
|
|
11593
|
+
]
|
|
11594
|
+
}
|
|
11595
|
+
),
|
|
11596
|
+
onShare && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11597
|
+
DropdownMenuItem,
|
|
11598
|
+
{
|
|
11599
|
+
onClick: () => onShare(file),
|
|
11600
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11601
|
+
children: [
|
|
11602
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Share2, { className: "h-3.5 w-3.5 text-indigo-500" }),
|
|
11603
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Share" })
|
|
11604
|
+
]
|
|
11605
|
+
}
|
|
11606
|
+
),
|
|
11607
|
+
onRename && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11608
|
+
DropdownMenuItem,
|
|
11609
|
+
{
|
|
11610
|
+
onClick: () => onRename(file),
|
|
11611
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11612
|
+
children: [
|
|
11613
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Pencil, { className: "h-3.5 w-3.5 text-purple-500" }),
|
|
11614
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Rename" })
|
|
11615
|
+
]
|
|
11616
|
+
}
|
|
11617
|
+
),
|
|
11618
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment, { children: [
|
|
11619
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(DropdownMenuSeparator, {}),
|
|
11620
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11621
|
+
DropdownMenuItem,
|
|
11622
|
+
{
|
|
11623
|
+
onClick: () => onDelete(file),
|
|
11624
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5 text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 rounded-md",
|
|
11625
|
+
children: [
|
|
11626
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Trash2, { className: "h-3.5 w-3.5 text-rose-500" }),
|
|
11627
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Delete" })
|
|
11628
|
+
]
|
|
11629
|
+
}
|
|
11630
|
+
)
|
|
11631
|
+
] })
|
|
11632
|
+
] })
|
|
11633
|
+
] })
|
|
11634
|
+
] }) })
|
|
11635
|
+
]
|
|
11636
|
+
}
|
|
11637
|
+
);
|
|
11638
|
+
}
|
|
11639
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11640
|
+
"div",
|
|
11641
|
+
{
|
|
11642
|
+
onClick: () => onSelect?.(file),
|
|
11643
|
+
className: cn(
|
|
11644
|
+
"group relative flex flex-col justify-between overflow-hidden rounded-2xl border border-border/80 bg-card p-3.5 shadow-2xs transition-all duration-200 hover:shadow-md hover:border-indigo-300 dark:hover:border-indigo-700/60 cursor-pointer select-none",
|
|
11645
|
+
isSelected && "border-indigo-500 ring-2 ring-indigo-500/20 bg-indigo-500/5",
|
|
11646
|
+
className
|
|
11647
|
+
),
|
|
11648
|
+
children: [
|
|
11649
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "relative mb-3 flex items-center justify-center overflow-hidden rounded-xl bg-muted/20 border border-border/40 min-h-[105px]", children: [
|
|
11650
|
+
isImage && file.fileUrl ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11651
|
+
"img",
|
|
11652
|
+
{
|
|
11653
|
+
src: file.fileUrl,
|
|
11654
|
+
alt: file.fileName,
|
|
11655
|
+
className: "h-28 w-full object-cover transition-transform duration-300 group-hover:scale-105",
|
|
11656
|
+
loading: "lazy"
|
|
11657
|
+
}
|
|
11658
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11659
|
+
"div",
|
|
11660
|
+
{
|
|
11661
|
+
className: cn(
|
|
11662
|
+
"flex h-16 w-16 items-center justify-center rounded-2xl border shadow-inner transition-transform duration-200 group-hover:scale-110",
|
|
11663
|
+
theme.bg,
|
|
11664
|
+
theme.border
|
|
11665
|
+
),
|
|
11666
|
+
children: isPdf ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileText, { className: cn("h-8 w-8", theme.text) }) : isVideo ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Film, { className: cn("h-8 w-8", theme.text) }) : isSheet ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileSpreadsheet, { className: cn("h-8 w-8", theme.text) }) : isZip ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileArchive, { className: cn("h-8 w-8", theme.text) }) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.FileCode, { className: cn("h-8 w-8", theme.text) })
|
|
11667
|
+
}
|
|
11668
|
+
),
|
|
11669
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11670
|
+
Badge,
|
|
11671
|
+
{
|
|
11672
|
+
variant: "outline",
|
|
11673
|
+
className: cn(
|
|
11674
|
+
"absolute top-2 right-2 backdrop-blur-md text-[10px] font-bold px-1.5 py-0.5 shadow-2xs",
|
|
11675
|
+
theme.bg,
|
|
11676
|
+
theme.text,
|
|
11677
|
+
theme.border
|
|
11678
|
+
),
|
|
11679
|
+
children: file.category
|
|
11680
|
+
}
|
|
11681
|
+
)
|
|
11682
|
+
] }),
|
|
11683
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
11684
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("h4", { className: "font-bold text-xs text-foreground truncate tracking-tight", title: file.fileName, children: file.fileName }),
|
|
11685
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex items-center justify-between text-[11px] text-muted-foreground", children: [
|
|
11686
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "font-mono", children: formatBytes(file.fileSize) }),
|
|
11687
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "truncate", children: updatedTimeDisplay })
|
|
11688
|
+
] })
|
|
11689
|
+
] }),
|
|
11690
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "mt-3 pt-2.5 flex items-center justify-between border-t border-border/50 text-muted-foreground", children: [
|
|
11691
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "text-[10px] text-muted-foreground/70 font-medium truncate max-w-[120px]", children: file.folderPath || file.section || "General" }),
|
|
11692
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
11693
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11694
|
+
"button",
|
|
11695
|
+
{
|
|
11696
|
+
type: "button",
|
|
11697
|
+
onClick: (e) => {
|
|
11698
|
+
e.stopPropagation();
|
|
11699
|
+
onPreview?.(file);
|
|
11700
|
+
},
|
|
11701
|
+
className: "p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11702
|
+
title: "Preview file",
|
|
11703
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Eye, { className: "h-3.5 w-3.5" })
|
|
11704
|
+
}
|
|
11705
|
+
),
|
|
11706
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11707
|
+
"button",
|
|
11708
|
+
{
|
|
11709
|
+
type: "button",
|
|
11710
|
+
onClick: (e) => {
|
|
11711
|
+
e.stopPropagation();
|
|
11712
|
+
onDownload?.(file);
|
|
11713
|
+
},
|
|
11714
|
+
className: "p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11715
|
+
title: "Download file",
|
|
11716
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Download, { className: "h-3.5 w-3.5" })
|
|
11717
|
+
}
|
|
11718
|
+
),
|
|
11719
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(DropdownMenu, { children: [
|
|
11720
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
11721
|
+
"button",
|
|
11722
|
+
{
|
|
11723
|
+
type: "button",
|
|
11724
|
+
onClick: (e) => e.stopPropagation(),
|
|
11725
|
+
className: "p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
11726
|
+
title: "More",
|
|
11727
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.MoreHorizontal, { className: "h-3.5 w-3.5" })
|
|
11728
|
+
}
|
|
11729
|
+
) }),
|
|
11730
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(DropdownMenuContent, { align: "end", className: "w-38 rounded-xl p-1 shadow-lg", children: [
|
|
11731
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11732
|
+
DropdownMenuItem,
|
|
11733
|
+
{
|
|
11734
|
+
onClick: () => onPreview?.(file),
|
|
11735
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11736
|
+
children: [
|
|
11737
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Eye, { className: "h-3.5 w-3.5 text-blue-500" }),
|
|
11738
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Preview" })
|
|
11739
|
+
]
|
|
11740
|
+
}
|
|
11741
|
+
),
|
|
11742
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11743
|
+
DropdownMenuItem,
|
|
11744
|
+
{
|
|
11745
|
+
onClick: () => onDownload?.(file),
|
|
11746
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11747
|
+
children: [
|
|
11748
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Download, { className: "h-3.5 w-3.5 text-emerald-500" }),
|
|
11749
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Download" })
|
|
11750
|
+
]
|
|
11751
|
+
}
|
|
11752
|
+
),
|
|
11753
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11754
|
+
DropdownMenuItem,
|
|
11755
|
+
{
|
|
11756
|
+
onClick: () => onCopyLink?.(file),
|
|
11757
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5",
|
|
11758
|
+
children: [
|
|
11759
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Copy, { className: "h-3.5 w-3.5 text-amber-500" }),
|
|
11760
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Copy Link" })
|
|
11761
|
+
]
|
|
11762
|
+
}
|
|
11763
|
+
),
|
|
11764
|
+
onDelete && /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment, { children: [
|
|
11765
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(DropdownMenuSeparator, {}),
|
|
11766
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
11767
|
+
DropdownMenuItem,
|
|
11768
|
+
{
|
|
11769
|
+
onClick: () => onDelete(file),
|
|
11770
|
+
className: "cursor-pointer text-xs flex items-center gap-2 py-1.5 text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 rounded-md",
|
|
11771
|
+
children: [
|
|
11772
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(import_lucide_react48.Trash2, { className: "h-3.5 w-3.5 text-rose-500" }),
|
|
11773
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: "Delete" })
|
|
11774
|
+
]
|
|
11775
|
+
}
|
|
11776
|
+
)
|
|
11777
|
+
] })
|
|
11778
|
+
] })
|
|
11779
|
+
] })
|
|
11780
|
+
] })
|
|
11781
|
+
] })
|
|
11782
|
+
]
|
|
11783
|
+
}
|
|
11784
|
+
);
|
|
11785
|
+
}
|
|
11786
|
+
|
|
11787
|
+
// src/design-system/components/files/folder-tree-item.tsx
|
|
11788
|
+
var import_lucide_react49 = require("lucide-react");
|
|
11789
|
+
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
11790
|
+
function FolderTreeItem({
|
|
11791
|
+
folder,
|
|
11792
|
+
isFolderActive,
|
|
11793
|
+
isExpanded,
|
|
11794
|
+
onToggleExpand,
|
|
11795
|
+
onSelectFolder,
|
|
11796
|
+
className
|
|
11797
|
+
}) {
|
|
11798
|
+
const isLevel0 = folder.level === 0;
|
|
11799
|
+
const isLevel1 = folder.level === 1;
|
|
11800
|
+
const isLevel2 = folder.level === 2;
|
|
11801
|
+
const hasChildren = isLevel0 || isLevel1;
|
|
11802
|
+
return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
|
|
11803
|
+
"div",
|
|
11804
|
+
{
|
|
11805
|
+
id: `folder-card-${folder.id}`,
|
|
11806
|
+
onClick: () => {
|
|
11807
|
+
if (hasChildren) {
|
|
11808
|
+
onToggleExpand(folder.id);
|
|
11809
|
+
} else {
|
|
11810
|
+
onSelectFolder(folder);
|
|
11811
|
+
}
|
|
11812
|
+
},
|
|
11813
|
+
className: cn(
|
|
11814
|
+
"group relative flex cursor-pointer items-center justify-between gap-2 rounded-xl py-1.5 px-2 transition-all duration-200 select-none border",
|
|
11815
|
+
isLevel0 && "font-bold bg-muted/20 border-border/50 my-1",
|
|
11816
|
+
isLevel1 && "ml-3 border-border/40 my-0.5",
|
|
11817
|
+
isLevel2 && "ml-6 border-transparent hover:bg-muted/40 my-0.5",
|
|
11818
|
+
isFolderActive ? "border-indigo-300 bg-indigo-500/15 text-indigo-600 dark:border-indigo-800 dark:bg-indigo-950/40 dark:text-indigo-400 font-bold shadow-2xs" : "bg-card hover:bg-indigo-500/5 hover:border-indigo-200/40",
|
|
11819
|
+
className
|
|
11820
|
+
),
|
|
11821
|
+
children: [
|
|
11822
|
+
isFolderActive && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "absolute top-1 bottom-1 left-0 w-1 rounded-l-full bg-indigo-600" }),
|
|
11823
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "flex items-center gap-1.5 min-w-0 flex-1", children: [
|
|
11824
|
+
hasChildren && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11825
|
+
"button",
|
|
11826
|
+
{
|
|
11827
|
+
type: "button",
|
|
11828
|
+
onClick: (e) => onToggleExpand(folder.id, e),
|
|
11829
|
+
className: "flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer",
|
|
11830
|
+
children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react49.ChevronDown, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react49.ChevronRight, { className: "h-3 w-3" })
|
|
11831
|
+
}
|
|
11832
|
+
),
|
|
11833
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11834
|
+
"div",
|
|
11835
|
+
{
|
|
11836
|
+
className: cn(
|
|
11837
|
+
"flex shrink-0 items-center justify-center rounded-lg text-indigo-600 dark:text-indigo-400 transition-colors",
|
|
11838
|
+
isLevel0 ? "h-6 w-6 border border-indigo-200/40 bg-indigo-500/10" : isLevel1 ? "h-5.5 w-5.5 border border-indigo-200/30 bg-indigo-500/5" : "h-5 w-5"
|
|
11839
|
+
),
|
|
11840
|
+
children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11841
|
+
import_lucide_react49.FolderOpen,
|
|
11842
|
+
{
|
|
11843
|
+
className: isLevel0 ? "h-3.5 w-3.5" : isLevel1 ? "h-3 w-3" : "h-3 w-3 text-indigo-500"
|
|
11844
|
+
}
|
|
11845
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11846
|
+
import_lucide_react49.Folder,
|
|
11847
|
+
{
|
|
11848
|
+
className: isLevel0 ? "h-3.5 w-3.5" : isLevel1 ? "h-3 w-3" : "h-3 w-3 text-indigo-500"
|
|
11849
|
+
}
|
|
11850
|
+
)
|
|
11851
|
+
}
|
|
11852
|
+
),
|
|
11853
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11854
|
+
"span",
|
|
11855
|
+
{
|
|
11856
|
+
className: cn(
|
|
11857
|
+
"truncate text-foreground",
|
|
11858
|
+
isLevel0 ? "text-xs font-bold" : isLevel1 ? "text-[11px] font-semibold" : "text-[11px] font-medium",
|
|
11859
|
+
isFolderActive && "text-indigo-600 dark:text-indigo-400"
|
|
11860
|
+
),
|
|
11861
|
+
children: folder.name
|
|
11862
|
+
}
|
|
11863
|
+
)
|
|
11864
|
+
] }),
|
|
11865
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11866
|
+
Badge,
|
|
11867
|
+
{
|
|
11868
|
+
variant: isFolderActive ? "default" : "secondary",
|
|
11869
|
+
className: cn(
|
|
11870
|
+
"text-[10px] px-1.5 py-0 h-4 min-w-4 flex items-center justify-center font-mono",
|
|
11871
|
+
isFolderActive ? "bg-indigo-600 text-white" : "bg-muted text-muted-foreground group-hover:bg-indigo-500/10 group-hover:text-indigo-600"
|
|
11872
|
+
),
|
|
11873
|
+
children: folder.fileCount
|
|
11874
|
+
}
|
|
11875
|
+
)
|
|
11876
|
+
]
|
|
11877
|
+
}
|
|
11878
|
+
);
|
|
11879
|
+
}
|
|
11880
|
+
|
|
11881
|
+
// src/design-system/components/files/storage-stat-card.tsx
|
|
11882
|
+
var import_lucide_react50 = require("lucide-react");
|
|
11883
|
+
var import_jsx_runtime96 = require("react/jsx-runtime");
|
|
11884
|
+
function StorageStatCard({
|
|
11885
|
+
totalFiles,
|
|
11886
|
+
totalSizeBytes = 0,
|
|
11887
|
+
maxStorageBytes = 10 * 1024 * 1024 * 1024,
|
|
11888
|
+
// 10 GB default
|
|
11889
|
+
stats,
|
|
11890
|
+
onViewAllFiles,
|
|
11891
|
+
onUploadClick,
|
|
11892
|
+
className
|
|
11893
|
+
}) {
|
|
11894
|
+
const percentUsed = Math.min(
|
|
11895
|
+
100,
|
|
11896
|
+
Math.max(1, Math.round(totalSizeBytes / (maxStorageBytes || 1) * 100))
|
|
11897
|
+
);
|
|
11898
|
+
const defaultStats = stats || [
|
|
11899
|
+
{
|
|
11900
|
+
label: "Documents & PDFs",
|
|
11901
|
+
count: Math.round(totalFiles * 0.4),
|
|
11902
|
+
sizeBytes: Math.round(totalSizeBytes * 0.45),
|
|
11903
|
+
colorClass: "bg-red-500",
|
|
11904
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.FileText, { className: "h-4 w-4 text-red-500" })
|
|
11905
|
+
},
|
|
11906
|
+
{
|
|
11907
|
+
label: "Images & Photos",
|
|
11908
|
+
count: Math.round(totalFiles * 0.35),
|
|
11909
|
+
sizeBytes: Math.round(totalSizeBytes * 0.3),
|
|
11910
|
+
colorClass: "bg-amber-500",
|
|
11911
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.Image, { className: "h-4 w-4 text-amber-500" })
|
|
11912
|
+
},
|
|
11913
|
+
{
|
|
11914
|
+
label: "Media & Videos",
|
|
11915
|
+
count: Math.round(totalFiles * 0.15),
|
|
11916
|
+
sizeBytes: Math.round(totalSizeBytes * 0.2),
|
|
11917
|
+
colorClass: "bg-purple-500",
|
|
11918
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.Film, { className: "h-4 w-4 text-purple-500" })
|
|
11919
|
+
},
|
|
11920
|
+
{
|
|
11921
|
+
label: "Other & Archives",
|
|
11922
|
+
count: Math.max(0, totalFiles - Math.round(totalFiles * 0.9)),
|
|
11923
|
+
sizeBytes: Math.round(totalSizeBytes * 0.05),
|
|
11924
|
+
colorClass: "bg-indigo-500",
|
|
11925
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.Database, { className: "h-4 w-4 text-indigo-500" })
|
|
11926
|
+
}
|
|
11927
|
+
];
|
|
11928
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
11929
|
+
"div",
|
|
11930
|
+
{
|
|
11931
|
+
className: cn(
|
|
11932
|
+
"flex flex-col gap-4 rounded-2xl border border-border/80 bg-card p-4 shadow-2xs select-none",
|
|
11933
|
+
className
|
|
11934
|
+
),
|
|
11935
|
+
children: [
|
|
11936
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
11937
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
11938
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/40", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.HardDrive, { className: "h-5 w-5" }) }),
|
|
11939
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { children: [
|
|
11940
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("h3", { className: "text-xs font-bold text-foreground", children: "Storage Overview" }),
|
|
11941
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("p", { className: "text-[11px] text-muted-foreground", children: [
|
|
11942
|
+
totalFiles,
|
|
11943
|
+
" items stored in workspace"
|
|
11944
|
+
] })
|
|
11945
|
+
] })
|
|
11946
|
+
] }),
|
|
11947
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "text-right", children: [
|
|
11948
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "text-xs font-bold text-foreground font-mono", children: formatBytes(totalSizeBytes) }),
|
|
11949
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("p", { className: "text-[10px] text-muted-foreground font-mono", children: [
|
|
11950
|
+
"of ",
|
|
11951
|
+
formatBytes(maxStorageBytes)
|
|
11952
|
+
] })
|
|
11953
|
+
] })
|
|
11954
|
+
] }),
|
|
11955
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "space-y-1.5", children: [
|
|
11956
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "flex h-2.5 w-full overflow-hidden rounded-full bg-muted/60 p-0.5 border border-border/40", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
11957
|
+
"div",
|
|
11958
|
+
{
|
|
11959
|
+
className: "h-full rounded-full bg-linear-to-r from-indigo-500 via-purple-500 to-amber-500 transition-all duration-500",
|
|
11960
|
+
style: { width: `${percentUsed}%` }
|
|
11961
|
+
}
|
|
11962
|
+
) }),
|
|
11963
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex justify-between text-[10px] text-muted-foreground", children: [
|
|
11964
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { children: [
|
|
11965
|
+
percentUsed,
|
|
11966
|
+
"% capacity utilized"
|
|
11967
|
+
] }),
|
|
11968
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { children: [
|
|
11969
|
+
formatBytes(Math.max(0, maxStorageBytes - totalSizeBytes)),
|
|
11970
|
+
" available"
|
|
11971
|
+
] })
|
|
11972
|
+
] })
|
|
11973
|
+
] }),
|
|
11974
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "grid grid-cols-2 gap-2 pt-1", children: defaultStats.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
11975
|
+
"div",
|
|
11976
|
+
{
|
|
11977
|
+
className: "flex items-center gap-2 rounded-xl border border-border/40 bg-muted/20 p-2",
|
|
11978
|
+
children: [
|
|
11979
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "shrink-0", children: item.icon }),
|
|
11980
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
11981
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "truncate text-[11px] font-semibold text-foreground", children: item.label }),
|
|
11982
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center justify-between text-[10px] text-muted-foreground", children: [
|
|
11983
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { children: [
|
|
11984
|
+
item.count,
|
|
11985
|
+
" files"
|
|
11986
|
+
] }),
|
|
11987
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "font-mono", children: formatBytes(item.sizeBytes) })
|
|
11988
|
+
] })
|
|
11989
|
+
] })
|
|
11990
|
+
]
|
|
11991
|
+
},
|
|
11992
|
+
idx
|
|
11993
|
+
)) }),
|
|
11994
|
+
(onViewAllFiles || onUploadClick) && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "flex items-center justify-between pt-2 border-t border-border/50", children: [
|
|
11995
|
+
onViewAllFiles && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
11996
|
+
"button",
|
|
11997
|
+
{
|
|
11998
|
+
type: "button",
|
|
11999
|
+
onClick: onViewAllFiles,
|
|
12000
|
+
className: "text-xs font-semibold text-indigo-600 dark:text-indigo-400 hover:underline flex items-center gap-1 cursor-pointer",
|
|
12001
|
+
children: [
|
|
12002
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { children: "Explore All Files" }),
|
|
12003
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react50.ArrowUpRight, { className: "h-3.5 w-3.5" })
|
|
12004
|
+
]
|
|
12005
|
+
}
|
|
12006
|
+
),
|
|
12007
|
+
onUploadClick && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
12008
|
+
"button",
|
|
12009
|
+
{
|
|
12010
|
+
type: "button",
|
|
12011
|
+
onClick: onUploadClick,
|
|
12012
|
+
className: "text-xs font-semibold bg-indigo-600 text-white hover:bg-indigo-700 px-3 py-1 rounded-lg transition-colors cursor-pointer",
|
|
12013
|
+
children: "Upload New"
|
|
12014
|
+
}
|
|
12015
|
+
)
|
|
12016
|
+
] })
|
|
12017
|
+
]
|
|
12018
|
+
}
|
|
12019
|
+
);
|
|
12020
|
+
}
|
|
12021
|
+
|
|
12022
|
+
// src/design-system/components/files/user-file-cards-view.tsx
|
|
12023
|
+
var import_react18 = require("react");
|
|
12024
|
+
var import_lucide_react52 = require("lucide-react");
|
|
12025
|
+
|
|
12026
|
+
// src/features/Message/components/chat/header-actions.tsx
|
|
12027
|
+
var import_lucide_react51 = require("lucide-react");
|
|
12028
|
+
var import_sonner3 = require("sonner");
|
|
12029
|
+
var import_jsx_runtime97 = require("react/jsx-runtime");
|
|
12030
|
+
function HeaderActions({
|
|
12031
|
+
onDelete,
|
|
12032
|
+
onDownload,
|
|
12033
|
+
onPrint,
|
|
12034
|
+
onShare,
|
|
12035
|
+
onReply,
|
|
12036
|
+
onForward,
|
|
12037
|
+
onPin,
|
|
12038
|
+
onStar,
|
|
12039
|
+
onFavorite,
|
|
12040
|
+
onArchive,
|
|
12041
|
+
onActionThis,
|
|
12042
|
+
onClose
|
|
12043
|
+
}) {
|
|
12044
|
+
return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-1 shrink-0 select-none", children: [
|
|
12045
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12046
|
+
"button",
|
|
12047
|
+
{
|
|
12048
|
+
type: "button",
|
|
12049
|
+
onClick: () => {
|
|
12050
|
+
if (onActionThis) onActionThis();
|
|
12051
|
+
else import_sonner3.toast.info("Act on this option selected");
|
|
12052
|
+
},
|
|
12053
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer",
|
|
12054
|
+
title: "Act on this",
|
|
12055
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Bell, { className: "h-4.5 w-4.5" })
|
|
12056
|
+
}
|
|
12057
|
+
),
|
|
12058
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12059
|
+
"button",
|
|
12060
|
+
{
|
|
12061
|
+
type: "button",
|
|
12062
|
+
onClick: () => import_sonner3.toast.success("Flagged item"),
|
|
12063
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
12064
|
+
title: "Flag",
|
|
12065
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Flag, { className: "h-4.5 w-4.5" })
|
|
12066
|
+
}
|
|
12067
|
+
),
|
|
12068
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(DropdownMenu, { children: [
|
|
12069
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12070
|
+
"button",
|
|
12071
|
+
{
|
|
12072
|
+
type: "button",
|
|
12073
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
|
|
12074
|
+
title: "More options",
|
|
12075
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.MoreVertical, { className: "h-4.5 w-4.5" })
|
|
12076
|
+
}
|
|
12077
|
+
) }),
|
|
12078
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
|
|
12079
|
+
DropdownMenuContent,
|
|
12080
|
+
{
|
|
12081
|
+
align: "end",
|
|
12082
|
+
className: "w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5",
|
|
12083
|
+
children: [
|
|
12084
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12085
|
+
DropdownMenuItem,
|
|
12086
|
+
{
|
|
12087
|
+
onClick: () => {
|
|
12088
|
+
if (onReply) onReply();
|
|
12089
|
+
else import_sonner3.toast.info("Reply option selected");
|
|
12090
|
+
},
|
|
12091
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12092
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12093
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Reply, { className: "h-4 w-4 text-blue-500" }),
|
|
12094
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Reply" })
|
|
12095
|
+
] })
|
|
12096
|
+
}
|
|
12097
|
+
),
|
|
12098
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12099
|
+
DropdownMenuItem,
|
|
12100
|
+
{
|
|
12101
|
+
onClick: () => {
|
|
12102
|
+
if (onForward) onForward();
|
|
12103
|
+
else import_sonner3.toast.info("Forward option selected");
|
|
12104
|
+
},
|
|
12105
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12106
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12107
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Forward, { className: "h-4 w-4 text-sky-400" }),
|
|
12108
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Forward" })
|
|
12109
|
+
] })
|
|
12110
|
+
}
|
|
12111
|
+
),
|
|
12112
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12113
|
+
DropdownMenuItem,
|
|
12114
|
+
{
|
|
12115
|
+
onClick: () => {
|
|
12116
|
+
if (onPin) onPin();
|
|
12117
|
+
else import_sonner3.toast.success("Message pinned");
|
|
12118
|
+
},
|
|
12119
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12120
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12121
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Pin, { className: "h-4 w-4 text-purple-500" }),
|
|
12122
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Pin Message" })
|
|
12123
|
+
] })
|
|
12124
|
+
}
|
|
12125
|
+
),
|
|
12126
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12127
|
+
DropdownMenuItem,
|
|
12128
|
+
{
|
|
12129
|
+
onClick: () => {
|
|
12130
|
+
if (onStar) onStar();
|
|
12131
|
+
else import_sonner3.toast.success("Starred successfully");
|
|
12132
|
+
},
|
|
12133
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12134
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12135
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Star, { className: "h-4 w-4 text-amber-500" }),
|
|
12136
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Star" })
|
|
12137
|
+
] })
|
|
12138
|
+
}
|
|
12139
|
+
),
|
|
12140
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12141
|
+
DropdownMenuItem,
|
|
12142
|
+
{
|
|
12143
|
+
onClick: () => {
|
|
12144
|
+
if (onFavorite) onFavorite();
|
|
12145
|
+
else import_sonner3.toast.success("Added to favorites");
|
|
12146
|
+
},
|
|
12147
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12148
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12149
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Heart, { className: "h-4 w-4 text-rose-500" }),
|
|
12150
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Favorite" })
|
|
12151
|
+
] })
|
|
12152
|
+
}
|
|
12153
|
+
),
|
|
12154
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12155
|
+
DropdownMenuItem,
|
|
12156
|
+
{
|
|
12157
|
+
onClick: () => import_sonner3.toast.success("Flagged message"),
|
|
12158
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12159
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12160
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Flag, { className: "h-4 w-4 text-red-500" }),
|
|
12161
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Flag" })
|
|
12162
|
+
] })
|
|
12163
|
+
}
|
|
12164
|
+
),
|
|
12165
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12166
|
+
DropdownMenuItem,
|
|
12167
|
+
{
|
|
12168
|
+
onClick: () => {
|
|
12169
|
+
if (onArchive) onArchive();
|
|
12170
|
+
else import_sonner3.toast.success("Archived successfully");
|
|
12171
|
+
},
|
|
12172
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12173
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12174
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Archive, { className: "h-4 w-4 text-indigo-500" }),
|
|
12175
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Archive" })
|
|
12176
|
+
] })
|
|
12177
|
+
}
|
|
12178
|
+
),
|
|
12179
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12180
|
+
DropdownMenuItem,
|
|
12181
|
+
{
|
|
12182
|
+
onClick: () => {
|
|
12183
|
+
if (onActionThis) onActionThis();
|
|
12184
|
+
else import_sonner3.toast.info("Action This selected");
|
|
12185
|
+
},
|
|
12186
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md",
|
|
12187
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12188
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Bell, { className: "h-4 w-4 text-amber-500" }),
|
|
12189
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "text-foreground", children: "Action This" })
|
|
12190
|
+
] })
|
|
12191
|
+
}
|
|
12192
|
+
),
|
|
12193
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12194
|
+
DropdownMenuItem,
|
|
12195
|
+
{
|
|
12196
|
+
onClick: () => {
|
|
12197
|
+
if (onDelete) onDelete();
|
|
12198
|
+
else import_sonner3.toast.success("Item deleted");
|
|
12199
|
+
},
|
|
12200
|
+
className: "cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-red-500/10 rounded-md text-red-500 focus:text-red-500",
|
|
12201
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
12202
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.Trash2, { className: "h-4 w-4 text-red-500" }),
|
|
12203
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "font-semibold text-red-500", children: "Delete" })
|
|
12204
|
+
] })
|
|
12205
|
+
}
|
|
12206
|
+
)
|
|
12207
|
+
]
|
|
12208
|
+
}
|
|
12209
|
+
)
|
|
12210
|
+
] }),
|
|
12211
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
12212
|
+
"button",
|
|
12213
|
+
{
|
|
12214
|
+
type: "button",
|
|
12215
|
+
onClick: onClose,
|
|
12216
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer ml-0.5",
|
|
12217
|
+
title: "Close",
|
|
12218
|
+
"aria-label": "Close",
|
|
12219
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react51.X, { className: "h-4.5 w-4.5" })
|
|
12220
|
+
}
|
|
12221
|
+
)
|
|
12222
|
+
] });
|
|
12223
|
+
}
|
|
12224
|
+
|
|
12225
|
+
// src/design-system/components/files/user-file-cards-view.tsx
|
|
12226
|
+
var import_jsx_runtime98 = require("react/jsx-runtime");
|
|
12227
|
+
var CATEGORY_TABS = [
|
|
12228
|
+
{ label: "All Files", value: "all" },
|
|
12229
|
+
{ label: "PDFs", value: "Pdf" },
|
|
12230
|
+
{ label: "Documents", value: "Doc" },
|
|
12231
|
+
{ label: "Spreadsheets", value: "Xls" },
|
|
12232
|
+
{ label: "Images", value: "Images" },
|
|
12233
|
+
{ label: "Videos", value: "Videos" },
|
|
12234
|
+
{ label: "Archives", value: "Zip" }
|
|
12235
|
+
];
|
|
12236
|
+
function UserFileCardsView({
|
|
12237
|
+
folder,
|
|
12238
|
+
files,
|
|
12239
|
+
selectedFileId,
|
|
12240
|
+
onSelectFileForPreview,
|
|
12241
|
+
onDownloadFile,
|
|
12242
|
+
onDeleteFile,
|
|
12243
|
+
onCopyLink,
|
|
12244
|
+
onRenameFile,
|
|
12245
|
+
onShareFile,
|
|
12246
|
+
onUploadClick,
|
|
12247
|
+
onBack,
|
|
12248
|
+
className
|
|
12249
|
+
}) {
|
|
12250
|
+
const [searchQuery, setSearchQuery] = (0, import_react18.useState)("");
|
|
12251
|
+
const [selectedCategory, setSelectedCategory] = (0, import_react18.useState)("all");
|
|
12252
|
+
const [sortBy, setSortBy] = (0, import_react18.useState)("date");
|
|
12253
|
+
const [sortOrder, setSortOrder] = (0, import_react18.useState)("desc");
|
|
12254
|
+
const [viewMode, setViewMode] = (0, import_react18.useState)("grid");
|
|
12255
|
+
const [currentPage, setCurrentPage] = (0, import_react18.useState)(1);
|
|
12256
|
+
const itemsPerPage = viewMode === "grid" ? 12 : 20;
|
|
12257
|
+
const [selectedIds, setSelectedIds] = (0, import_react18.useState)(/* @__PURE__ */ new Set());
|
|
12258
|
+
const filteredFiles = (0, import_react18.useMemo)(() => {
|
|
12259
|
+
return files.filter((f) => {
|
|
12260
|
+
const matchCategory = selectedCategory === "all" || f.category.toLowerCase() === selectedCategory.toLowerCase() || selectedCategory === "Xls" && (f.category === "Csv" || f.category === "Xls");
|
|
12261
|
+
const matchSearch = !searchQuery.trim() || f.fileName.toLowerCase().includes(searchQuery.toLowerCase()) || f.folderPath && f.folderPath.toLowerCase().includes(searchQuery.toLowerCase());
|
|
12262
|
+
return matchCategory && matchSearch;
|
|
12263
|
+
});
|
|
12264
|
+
}, [files, selectedCategory, searchQuery]);
|
|
12265
|
+
const sortedFiles = (0, import_react18.useMemo)(() => {
|
|
12266
|
+
return [...filteredFiles].sort((a, b) => {
|
|
12267
|
+
let compare = 0;
|
|
12268
|
+
if (sortBy === "date") {
|
|
12269
|
+
const timeA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
12270
|
+
const timeB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
12271
|
+
compare = timeB - timeA;
|
|
12272
|
+
} else if (sortBy === "name") {
|
|
12273
|
+
compare = a.fileName.localeCompare(b.fileName);
|
|
12274
|
+
} else if (sortBy === "size") {
|
|
12275
|
+
compare = (b.fileSize || 0) - (a.fileSize || 0);
|
|
12276
|
+
}
|
|
12277
|
+
return sortOrder === "asc" ? -compare : compare;
|
|
12278
|
+
});
|
|
12279
|
+
}, [filteredFiles, sortBy, sortOrder]);
|
|
12280
|
+
const totalPages = Math.ceil(sortedFiles.length / itemsPerPage) || 1;
|
|
12281
|
+
const paginatedFiles = (0, import_react18.useMemo)(() => {
|
|
12282
|
+
const start = (currentPage - 1) * itemsPerPage;
|
|
12283
|
+
return sortedFiles.slice(start, start + itemsPerPage);
|
|
12284
|
+
}, [sortedFiles, currentPage, itemsPerPage]);
|
|
12285
|
+
const totalBytes = (0, import_react18.useMemo)(() => {
|
|
12286
|
+
return files.reduce((acc, curr) => acc + (curr.fileSize || 0), 0);
|
|
12287
|
+
}, [files]);
|
|
12288
|
+
const toggleSelectAll = () => {
|
|
12289
|
+
if (selectedIds.size === paginatedFiles.length) {
|
|
12290
|
+
setSelectedIds(/* @__PURE__ */ new Set());
|
|
12291
|
+
} else {
|
|
12292
|
+
setSelectedIds(new Set(paginatedFiles.map((f) => f.id)));
|
|
12293
|
+
}
|
|
12294
|
+
};
|
|
12295
|
+
const toggleSelectOne = (id) => {
|
|
12296
|
+
setSelectedIds((prev) => {
|
|
12297
|
+
const next = new Set(prev);
|
|
12298
|
+
if (next.has(id)) next.delete(id);
|
|
12299
|
+
else next.add(id);
|
|
12300
|
+
return next;
|
|
12301
|
+
});
|
|
12302
|
+
};
|
|
12303
|
+
const handleBulkDownload = () => {
|
|
12304
|
+
const toDownload = files.filter((f) => selectedIds.has(f.id));
|
|
12305
|
+
toDownload.forEach((f) => onDownloadFile?.(f));
|
|
12306
|
+
};
|
|
12307
|
+
const handleBulkDelete = () => {
|
|
12308
|
+
const toDelete = files.filter((f) => selectedIds.has(f.id));
|
|
12309
|
+
toDelete.forEach((f) => onDeleteFile?.(f));
|
|
12310
|
+
setSelectedIds(/* @__PURE__ */ new Set());
|
|
12311
|
+
};
|
|
12312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
12313
|
+
"div",
|
|
12314
|
+
{
|
|
12315
|
+
className: cn(
|
|
12316
|
+
"flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none",
|
|
12317
|
+
className
|
|
12318
|
+
),
|
|
12319
|
+
children: [
|
|
12320
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-background px-4 py-3 shrink-0", children: [
|
|
12321
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-2.5 min-w-0", children: [
|
|
12322
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12323
|
+
"button",
|
|
12324
|
+
{
|
|
12325
|
+
type: "button",
|
|
12326
|
+
onClick: onBack,
|
|
12327
|
+
className: "flex h-8 w-8 items-center justify-center rounded-xl text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer",
|
|
12328
|
+
title: "Back",
|
|
12329
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.ArrowLeft, { className: "h-4 w-4" })
|
|
12330
|
+
}
|
|
12331
|
+
),
|
|
12332
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/50 shrink-0 shadow-2xs", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.FolderOpen, { className: "h-5 w-5" }) }),
|
|
12333
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "min-w-0", children: [
|
|
12334
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
12335
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("h2", { className: "truncate text-sm font-bold text-foreground tracking-tight", children: folder?.name || "All Files & Folders" }),
|
|
12336
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-4 font-mono", children: [
|
|
12337
|
+
filteredFiles.length,
|
|
12338
|
+
" files"
|
|
12339
|
+
] })
|
|
12340
|
+
] }),
|
|
12341
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("p", { className: "truncate text-xs text-muted-foreground", children: [
|
|
12342
|
+
folder?.path || "Storage Space",
|
|
12343
|
+
" \xB7 Total size: ",
|
|
12344
|
+
formatBytes(totalBytes)
|
|
12345
|
+
] })
|
|
12346
|
+
] })
|
|
12347
|
+
] }),
|
|
12348
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
12349
|
+
onUploadClick && /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
12350
|
+
Button,
|
|
12351
|
+
{
|
|
12352
|
+
size: "sm",
|
|
12353
|
+
onClick: onUploadClick,
|
|
12354
|
+
className: "gap-1.5 h-8 text-xs font-semibold shadow-xs",
|
|
12355
|
+
children: [
|
|
12356
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Upload, { className: "h-3.5 w-3.5" }),
|
|
12357
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: "hidden sm:inline", children: "Upload Files" })
|
|
12358
|
+
]
|
|
12359
|
+
}
|
|
12360
|
+
),
|
|
12361
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(HeaderActions, { onDelete: onBack })
|
|
12362
|
+
] })
|
|
12363
|
+
] }),
|
|
12364
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex flex-col gap-2.5 border-b border-border/60 bg-muted/10 p-3 shrink-0", children: [
|
|
12365
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
|
|
12366
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "relative min-w-[200px] flex-1 max-w-md", children: [
|
|
12367
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground" }),
|
|
12368
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12369
|
+
Input,
|
|
12370
|
+
{
|
|
12371
|
+
value: searchQuery,
|
|
12372
|
+
onChange: (e) => {
|
|
12373
|
+
setSearchQuery(e.target.value);
|
|
12374
|
+
setCurrentPage(1);
|
|
12375
|
+
},
|
|
12376
|
+
placeholder: "Search files by name, type, or path...",
|
|
12377
|
+
className: "h-8.5 pl-8 pr-8 text-xs rounded-xl bg-background border-border/80"
|
|
12378
|
+
}
|
|
12379
|
+
),
|
|
12380
|
+
searchQuery && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12381
|
+
"button",
|
|
12382
|
+
{
|
|
12383
|
+
type: "button",
|
|
12384
|
+
onClick: () => setSearchQuery(""),
|
|
12385
|
+
className: "absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
12386
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.X, { className: "h-3.5 w-3.5" })
|
|
12387
|
+
}
|
|
12388
|
+
)
|
|
12389
|
+
] }),
|
|
12390
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
12391
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(DropdownMenu, { children: [
|
|
12392
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Button, { variant: "outline", size: "sm", className: "h-8 gap-1.5 text-xs rounded-xl", children: [
|
|
12393
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.ArrowUpDown, { className: "h-3.5 w-3.5 text-muted-foreground" }),
|
|
12394
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("span", { className: "hidden sm:inline capitalize", children: [
|
|
12395
|
+
"Sort: ",
|
|
12396
|
+
sortBy
|
|
12397
|
+
] })
|
|
12398
|
+
] }) }),
|
|
12399
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(DropdownMenuContent, { align: "end", className: "w-44 rounded-xl p-1 shadow-lg", children: [
|
|
12400
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(DropdownMenuLabel, { className: "text-[10px] text-muted-foreground uppercase font-bold tracking-wider", children: "Sort By" }),
|
|
12401
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12402
|
+
DropdownMenuItem,
|
|
12403
|
+
{
|
|
12404
|
+
onClick: () => setSortBy("date"),
|
|
12405
|
+
className: cn("text-xs cursor-pointer", sortBy === "date" && "font-bold text-primary"),
|
|
12406
|
+
children: "Last Updated"
|
|
12407
|
+
}
|
|
12408
|
+
),
|
|
12409
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12410
|
+
DropdownMenuItem,
|
|
12411
|
+
{
|
|
12412
|
+
onClick: () => setSortBy("name"),
|
|
12413
|
+
className: cn("text-xs cursor-pointer", sortBy === "name" && "font-bold text-primary"),
|
|
12414
|
+
children: "File Name (A-Z)"
|
|
12415
|
+
}
|
|
12416
|
+
),
|
|
12417
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12418
|
+
DropdownMenuItem,
|
|
12419
|
+
{
|
|
12420
|
+
onClick: () => setSortBy("size"),
|
|
12421
|
+
className: cn("text-xs cursor-pointer", sortBy === "size" && "font-bold text-primary"),
|
|
12422
|
+
children: "File Size"
|
|
12423
|
+
}
|
|
12424
|
+
),
|
|
12425
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(DropdownMenuSeparator, {}),
|
|
12426
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
12427
|
+
DropdownMenuItem,
|
|
12428
|
+
{
|
|
12429
|
+
onClick: () => setSortOrder((prev) => prev === "asc" ? "desc" : "asc"),
|
|
12430
|
+
className: "text-xs cursor-pointer",
|
|
12431
|
+
children: [
|
|
12432
|
+
"Order: ",
|
|
12433
|
+
sortOrder === "asc" ? "Ascending \u2191" : "Descending \u2193"
|
|
12434
|
+
]
|
|
12435
|
+
}
|
|
12436
|
+
)
|
|
12437
|
+
] })
|
|
12438
|
+
] }),
|
|
12439
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center rounded-xl bg-muted/50 p-0.5 border border-border/60", children: [
|
|
12440
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12441
|
+
"button",
|
|
12442
|
+
{
|
|
12443
|
+
type: "button",
|
|
12444
|
+
onClick: () => setViewMode("grid"),
|
|
12445
|
+
className: cn(
|
|
12446
|
+
"flex h-7 w-7 items-center justify-center rounded-lg transition-all cursor-pointer",
|
|
12447
|
+
viewMode === "grid" ? "bg-background text-foreground shadow-2xs font-bold" : "text-muted-foreground hover:text-foreground"
|
|
12448
|
+
),
|
|
12449
|
+
title: "Grid View",
|
|
12450
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.LayoutGrid, { className: "h-3.5 w-3.5" })
|
|
12451
|
+
}
|
|
12452
|
+
),
|
|
12453
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12454
|
+
"button",
|
|
12455
|
+
{
|
|
12456
|
+
type: "button",
|
|
12457
|
+
onClick: () => setViewMode("table"),
|
|
12458
|
+
className: cn(
|
|
12459
|
+
"flex h-7 w-7 items-center justify-center rounded-lg transition-all cursor-pointer",
|
|
12460
|
+
viewMode === "table" ? "bg-background text-foreground shadow-2xs font-bold" : "text-muted-foreground hover:text-foreground"
|
|
12461
|
+
),
|
|
12462
|
+
title: "Table View",
|
|
12463
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Table, { className: "h-3.5 w-3.5" })
|
|
12464
|
+
}
|
|
12465
|
+
)
|
|
12466
|
+
] })
|
|
12467
|
+
] })
|
|
12468
|
+
] }),
|
|
12469
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "flex items-center gap-1.5 overflow-x-auto scrollbar-none pb-0.5", children: CATEGORY_TABS.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12470
|
+
"button",
|
|
12471
|
+
{
|
|
12472
|
+
type: "button",
|
|
12473
|
+
onClick: () => {
|
|
12474
|
+
setSelectedCategory(tab.value);
|
|
12475
|
+
setCurrentPage(1);
|
|
12476
|
+
},
|
|
12477
|
+
className: cn(
|
|
12478
|
+
"rounded-lg px-2.5 py-1 text-xs font-semibold whitespace-nowrap transition-all duration-200 cursor-pointer border",
|
|
12479
|
+
selectedCategory === tab.value ? "bg-indigo-600 text-white border-indigo-600 shadow-2xs" : "bg-background border-border/80 text-muted-foreground hover:text-foreground hover:bg-muted/40"
|
|
12480
|
+
),
|
|
12481
|
+
children: tab.label
|
|
12482
|
+
},
|
|
12483
|
+
tab.value
|
|
12484
|
+
)) })
|
|
12485
|
+
] }),
|
|
12486
|
+
selectedIds.size > 0 && /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between bg-indigo-500/10 border-b border-indigo-200/40 px-4 py-2 text-xs", children: [
|
|
12487
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("span", { className: "font-semibold text-indigo-700 dark:text-indigo-300", children: [
|
|
12488
|
+
selectedIds.size,
|
|
12489
|
+
" files selected"
|
|
12490
|
+
] }),
|
|
12491
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
12492
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
12493
|
+
Button,
|
|
12494
|
+
{
|
|
12495
|
+
size: "sm",
|
|
12496
|
+
variant: "outline",
|
|
12497
|
+
onClick: handleBulkDownload,
|
|
12498
|
+
className: "h-7 text-xs gap-1 bg-background",
|
|
12499
|
+
children: [
|
|
12500
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Download, { className: "h-3 w-3" }),
|
|
12501
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { children: "Download" })
|
|
12502
|
+
]
|
|
12503
|
+
}
|
|
12504
|
+
),
|
|
12505
|
+
onDeleteFile && /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
12506
|
+
Button,
|
|
12507
|
+
{
|
|
12508
|
+
size: "sm",
|
|
12509
|
+
variant: "destructive",
|
|
12510
|
+
onClick: handleBulkDelete,
|
|
12511
|
+
className: "h-7 text-xs gap-1",
|
|
12512
|
+
children: [
|
|
12513
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Trash2, { className: "h-3 w-3" }),
|
|
12514
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { children: "Delete" })
|
|
12515
|
+
]
|
|
12516
|
+
}
|
|
12517
|
+
),
|
|
12518
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12519
|
+
Button,
|
|
12520
|
+
{
|
|
12521
|
+
size: "sm",
|
|
12522
|
+
variant: "ghost",
|
|
12523
|
+
onClick: () => setSelectedIds(/* @__PURE__ */ new Set()),
|
|
12524
|
+
className: "h-7 text-xs",
|
|
12525
|
+
children: "Clear"
|
|
12526
|
+
}
|
|
12527
|
+
)
|
|
12528
|
+
] })
|
|
12529
|
+
] }),
|
|
12530
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: paginatedFiles.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex h-64 flex-col items-center justify-center gap-3 text-center text-muted-foreground border-2 border-dashed border-border/60 rounded-2xl bg-muted/5 p-8", children: [
|
|
12531
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.FolderOpen, { className: "h-10 w-10 text-muted-foreground/40" }),
|
|
12532
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { children: [
|
|
12533
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("p", { className: "text-sm font-bold text-foreground", children: "No files found" }),
|
|
12534
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("p", { className: "text-xs text-muted-foreground mt-0.5", children: searchQuery ? "No documents match your search criteria" : "This folder is currently empty. Upload your first document." })
|
|
12535
|
+
] }),
|
|
12536
|
+
onUploadClick && /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Button, { size: "sm", onClick: onUploadClick, className: "gap-1.5 text-xs mt-2", children: [
|
|
12537
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.Upload, { className: "h-3.5 w-3.5" }),
|
|
12538
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { children: "Upload New File" })
|
|
12539
|
+
] })
|
|
12540
|
+
] }) : viewMode === "grid" ? /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3.5", children: paginatedFiles.map((file) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12541
|
+
FileCardItem,
|
|
12542
|
+
{
|
|
12543
|
+
file,
|
|
12544
|
+
isSelected: file.id === selectedFileId || selectedIds.has(file.id),
|
|
12545
|
+
viewMode: "grid",
|
|
12546
|
+
onSelect: () => onSelectFileForPreview?.(file),
|
|
12547
|
+
onPreview: () => onSelectFileForPreview?.(file),
|
|
12548
|
+
onDownload: () => onDownloadFile?.(file),
|
|
12549
|
+
onCopyLink: () => onCopyLink?.(file),
|
|
12550
|
+
onRename: () => onRenameFile?.(file),
|
|
12551
|
+
onDelete: () => onDeleteFile?.(file),
|
|
12552
|
+
onShare: () => onShareFile?.(file)
|
|
12553
|
+
},
|
|
12554
|
+
file.id
|
|
12555
|
+
)) }) : /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "overflow-hidden rounded-2xl border border-border/80 bg-card shadow-2xs", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("table", { className: "w-full text-left text-xs border-collapse", children: [
|
|
12556
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("thead", { className: "border-b border-border/80 bg-muted/30 text-muted-foreground font-bold", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("tr", { children: [
|
|
12557
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("th", { className: "py-2.5 px-4", children: "Name" }),
|
|
12558
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("th", { className: "py-2.5 px-4", children: "Category" }),
|
|
12559
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("th", { className: "py-2.5 px-4", children: "Size" }),
|
|
12560
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("th", { className: "py-2.5 px-4 hidden sm:table-cell", children: "Updated" }),
|
|
12561
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("th", { className: "py-2.5 px-4 text-right", children: "Actions" })
|
|
12562
|
+
] }) }),
|
|
12563
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("tbody", { children: paginatedFiles.map((file) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12564
|
+
FileCardItem,
|
|
12565
|
+
{
|
|
12566
|
+
file,
|
|
12567
|
+
isSelected: file.id === selectedFileId || selectedIds.has(file.id),
|
|
12568
|
+
viewMode: "table",
|
|
12569
|
+
onSelect: () => onSelectFileForPreview?.(file),
|
|
12570
|
+
onPreview: () => onSelectFileForPreview?.(file),
|
|
12571
|
+
onDownload: () => onDownloadFile?.(file),
|
|
12572
|
+
onCopyLink: () => onCopyLink?.(file),
|
|
12573
|
+
onRename: () => onRenameFile?.(file),
|
|
12574
|
+
onDelete: () => onDeleteFile?.(file),
|
|
12575
|
+
onShare: () => onShareFile?.(file)
|
|
12576
|
+
},
|
|
12577
|
+
file.id
|
|
12578
|
+
)) })
|
|
12579
|
+
] }) }) }),
|
|
12580
|
+
totalPages > 1 && /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between border-t border-border bg-background px-4 py-2.5 shrink-0 text-xs text-muted-foreground", children: [
|
|
12581
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("span", { children: [
|
|
12582
|
+
"Showing ",
|
|
12583
|
+
(currentPage - 1) * itemsPerPage + 1,
|
|
12584
|
+
" -",
|
|
12585
|
+
" ",
|
|
12586
|
+
Math.min(currentPage * itemsPerPage, sortedFiles.length),
|
|
12587
|
+
" of ",
|
|
12588
|
+
sortedFiles.length
|
|
12589
|
+
] }),
|
|
12590
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
12591
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12592
|
+
Button,
|
|
12593
|
+
{
|
|
12594
|
+
variant: "outline",
|
|
12595
|
+
size: "sm",
|
|
12596
|
+
onClick: () => setCurrentPage((p) => Math.max(1, p - 1)),
|
|
12597
|
+
disabled: currentPage === 1,
|
|
12598
|
+
className: "h-7 w-7 p-0 rounded-lg",
|
|
12599
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.ChevronLeft, { className: "h-3.5 w-3.5" })
|
|
12600
|
+
}
|
|
12601
|
+
),
|
|
12602
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("span", { className: "px-2 font-mono font-bold text-foreground", children: [
|
|
12603
|
+
currentPage,
|
|
12604
|
+
" / ",
|
|
12605
|
+
totalPages
|
|
12606
|
+
] }),
|
|
12607
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
12608
|
+
Button,
|
|
12609
|
+
{
|
|
12610
|
+
variant: "outline",
|
|
12611
|
+
size: "sm",
|
|
12612
|
+
onClick: () => setCurrentPage((p) => Math.min(totalPages, p + 1)),
|
|
12613
|
+
disabled: currentPage === totalPages,
|
|
12614
|
+
className: "h-7 w-7 p-0 rounded-lg",
|
|
12615
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(import_lucide_react52.ChevronRight, { className: "h-3.5 w-3.5" })
|
|
12616
|
+
}
|
|
12617
|
+
)
|
|
12618
|
+
] })
|
|
12619
|
+
] })
|
|
12620
|
+
]
|
|
12621
|
+
}
|
|
12622
|
+
);
|
|
12623
|
+
}
|
|
12624
|
+
|
|
12625
|
+
// src/design-system/components/files/file-upload-form.tsx
|
|
12626
|
+
var import_react19 = require("react");
|
|
12627
|
+
var import_lucide_react53 = require("lucide-react");
|
|
12628
|
+
var import_jsx_runtime99 = require("react/jsx-runtime");
|
|
12629
|
+
var TEMPLATE_OPTIONS = [
|
|
12630
|
+
{ id: "1", name: "Standard Document" },
|
|
12631
|
+
{ id: "2", name: "Financial Invoice" },
|
|
12632
|
+
{ id: "3", name: "Report & Spreadsheet" },
|
|
12633
|
+
{ id: "4", name: "Contract & Legal" }
|
|
12634
|
+
];
|
|
12635
|
+
var FOLDER_OPTIONS = ["Finance", "Chat", "Files", "Email", "AI Chat", "Order"];
|
|
12636
|
+
var SUB_FOLDER_OPTIONS = [
|
|
12637
|
+
"Pdf",
|
|
12638
|
+
"Doc",
|
|
12639
|
+
"Xls",
|
|
12640
|
+
"Images",
|
|
12641
|
+
"Videos",
|
|
12642
|
+
"Ppt",
|
|
12643
|
+
"Txt",
|
|
12644
|
+
"Csv",
|
|
12645
|
+
"Zip",
|
|
12646
|
+
"Other"
|
|
12647
|
+
];
|
|
12648
|
+
function FileUploadForm({
|
|
12649
|
+
userEmail,
|
|
12650
|
+
folders,
|
|
12651
|
+
initialSubject = "",
|
|
12652
|
+
initialFolder = "Finance",
|
|
12653
|
+
initialSubFolder = "Pdf",
|
|
12654
|
+
onClose,
|
|
12655
|
+
onSave,
|
|
12656
|
+
onUploadSuccess,
|
|
12657
|
+
onPreviewAttachment,
|
|
12658
|
+
className
|
|
12659
|
+
}) {
|
|
12660
|
+
const [template, setTemplate] = (0, import_react19.useState)(TEMPLATE_OPTIONS[0].id);
|
|
12661
|
+
const [subject, setSubject] = (0, import_react19.useState)(initialSubject);
|
|
12662
|
+
const [folder, setFolder] = (0, import_react19.useState)(initialFolder);
|
|
12663
|
+
const [subFolder, setSubFolder] = (0, import_react19.useState)(initialSubFolder);
|
|
12664
|
+
const [remarks, setRemarks] = (0, import_react19.useState)("");
|
|
12665
|
+
const [body, setBody] = (0, import_react19.useState)("");
|
|
12666
|
+
const [attachments, setAttachments] = (0, import_react19.useState)([]);
|
|
12667
|
+
const [isSaving, setIsSaving] = (0, import_react19.useState)(false);
|
|
12668
|
+
const fileInputRef = (0, import_react19.useRef)(null);
|
|
12669
|
+
const handleFileChange = (e) => {
|
|
12670
|
+
const files = e.target.files;
|
|
12671
|
+
if (!files || files.length === 0) return;
|
|
12672
|
+
const newAttachments = Array.from(files).map((f) => ({
|
|
12673
|
+
id: `att-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
12674
|
+
name: f.name,
|
|
12675
|
+
type: f.type || "application/octet-stream",
|
|
12676
|
+
size: formatBytes(f.size),
|
|
12677
|
+
url: URL.createObjectURL(f),
|
|
12678
|
+
fileObj: f,
|
|
12679
|
+
progress: 100
|
|
12680
|
+
}));
|
|
12681
|
+
setAttachments((prev) => [...prev, ...newAttachments]);
|
|
12682
|
+
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
12683
|
+
};
|
|
12684
|
+
const handleRemoveAttachment = (id) => {
|
|
12685
|
+
setAttachments((prev) => prev.filter((a) => a.id !== id));
|
|
12686
|
+
};
|
|
12687
|
+
const handleFormSubmit = async (e) => {
|
|
12688
|
+
e.preventDefault();
|
|
12689
|
+
setIsSaving(true);
|
|
12690
|
+
try {
|
|
12691
|
+
if (onSave) {
|
|
12692
|
+
await onSave({
|
|
12693
|
+
subject,
|
|
12694
|
+
folder,
|
|
12695
|
+
subFolder,
|
|
12696
|
+
remarks,
|
|
12697
|
+
body,
|
|
12698
|
+
attachments
|
|
12699
|
+
});
|
|
12700
|
+
}
|
|
12701
|
+
onUploadSuccess?.();
|
|
12702
|
+
} finally {
|
|
12703
|
+
setIsSaving(false);
|
|
12704
|
+
}
|
|
12705
|
+
};
|
|
12706
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12707
|
+
"div",
|
|
12708
|
+
{
|
|
12709
|
+
className: cn(
|
|
12710
|
+
"flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none",
|
|
12711
|
+
className
|
|
12712
|
+
),
|
|
12713
|
+
children: [
|
|
12714
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-background px-4 py-3 shrink-0", children: [
|
|
12715
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center gap-2.5 min-w-0", children: [
|
|
12716
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12717
|
+
"button",
|
|
12718
|
+
{
|
|
12719
|
+
type: "button",
|
|
12720
|
+
onClick: onClose,
|
|
12721
|
+
className: "flex h-8 w-8 items-center justify-center rounded-xl text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer",
|
|
12722
|
+
title: "Back",
|
|
12723
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.ArrowLeft, { className: "h-4 w-4" })
|
|
12724
|
+
}
|
|
12725
|
+
),
|
|
12726
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/50 shrink-0 shadow-2xs", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.FileText, { className: "h-5 w-5" }) }),
|
|
12727
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "min-w-0", children: [
|
|
12728
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("h2", { className: "truncate text-sm font-bold text-foreground tracking-tight", children: "Create & Upload Document" }),
|
|
12729
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: "Add metadata, descriptions, and attach files to your cloud storage" })
|
|
12730
|
+
] })
|
|
12731
|
+
] }),
|
|
12732
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center gap-2 shrink-0", children: [
|
|
12733
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Button, { variant: "ghost", size: "sm", onClick: onClose, className: "h-8 text-xs", children: "Cancel" }),
|
|
12734
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12735
|
+
Button,
|
|
12736
|
+
{
|
|
12737
|
+
size: "sm",
|
|
12738
|
+
onClick: handleFormSubmit,
|
|
12739
|
+
disabled: isSaving || !subject && attachments.length === 0,
|
|
12740
|
+
className: "h-8 gap-1.5 text-xs font-semibold shadow-xs bg-indigo-600 hover:bg-indigo-700 text-white",
|
|
12741
|
+
children: [
|
|
12742
|
+
isSaving ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Loader2, { className: "h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Save, { className: "h-3.5 w-3.5" }),
|
|
12743
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { children: "Save & Upload" })
|
|
12744
|
+
]
|
|
12745
|
+
}
|
|
12746
|
+
)
|
|
12747
|
+
] })
|
|
12748
|
+
] }),
|
|
12749
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "min-h-0 flex-1 overflow-y-auto p-4 space-y-4", children: [
|
|
12750
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3 p-3.5 rounded-2xl border border-border/80 bg-muted/10", children: [
|
|
12751
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12752
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Document Template" }),
|
|
12753
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Select, { value: template, onValueChange: setTemplate, children: [
|
|
12754
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectTrigger, { className: "h-8.5 text-xs rounded-xl bg-background border-border/80", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectValue, { placeholder: "Select template" }) }),
|
|
12755
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectContent, { className: "rounded-xl shadow-lg", children: TEMPLATE_OPTIONS.map((t) => /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectItem, { value: t.id, className: "text-xs", children: t.name }, t.id)) })
|
|
12756
|
+
] })
|
|
12757
|
+
] }),
|
|
12758
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12759
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Target Space" }),
|
|
12760
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Select, { value: folder, onValueChange: setFolder, children: [
|
|
12761
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectTrigger, { className: "h-8.5 text-xs rounded-xl bg-background border-border/80", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectValue, { placeholder: "Select space" }) }),
|
|
12762
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectContent, { className: "rounded-xl shadow-lg", children: (folders || FOLDER_OPTIONS.map((f) => ({ id: f, name: f }))).map((f) => /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectItem, { value: f.name, className: "text-xs", children: f.name }, f.id)) })
|
|
12763
|
+
] })
|
|
12764
|
+
] }),
|
|
12765
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12766
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Category Subfolder" }),
|
|
12767
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Select, { value: subFolder, onValueChange: setSubFolder, children: [
|
|
12768
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectTrigger, { className: "h-8.5 text-xs rounded-xl bg-background border-border/80", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectValue, { placeholder: "Select category" }) }),
|
|
12769
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectContent, { className: "rounded-xl shadow-lg", children: SUB_FOLDER_OPTIONS.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(SelectItem, { value: cat, className: "text-xs", children: cat }, cat)) })
|
|
12770
|
+
] })
|
|
12771
|
+
] })
|
|
12772
|
+
] }),
|
|
12773
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12774
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Document Title / Subject" }),
|
|
12775
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12776
|
+
Input,
|
|
12777
|
+
{
|
|
12778
|
+
value: subject,
|
|
12779
|
+
onChange: (e) => setSubject(e.target.value),
|
|
12780
|
+
placeholder: "e.g. Q3 Sales & Performance Report",
|
|
12781
|
+
className: "h-9 text-xs rounded-xl bg-background border-border/80"
|
|
12782
|
+
}
|
|
12783
|
+
)
|
|
12784
|
+
] }),
|
|
12785
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12786
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Document Content / Notes" }),
|
|
12787
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "rounded-2xl border border-border/80 overflow-hidden bg-background", children: [
|
|
12788
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center gap-1 border-b border-border/60 bg-muted/20 p-1.5", children: [
|
|
12789
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12790
|
+
"button",
|
|
12791
|
+
{
|
|
12792
|
+
type: "button",
|
|
12793
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12794
|
+
title: "Bold",
|
|
12795
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Bold, { className: "h-3.5 w-3.5" })
|
|
12796
|
+
}
|
|
12797
|
+
),
|
|
12798
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12799
|
+
"button",
|
|
12800
|
+
{
|
|
12801
|
+
type: "button",
|
|
12802
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12803
|
+
title: "Italic",
|
|
12804
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Italic, { className: "h-3.5 w-3.5" })
|
|
12805
|
+
}
|
|
12806
|
+
),
|
|
12807
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12808
|
+
"button",
|
|
12809
|
+
{
|
|
12810
|
+
type: "button",
|
|
12811
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12812
|
+
title: "Underline",
|
|
12813
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Underline, { className: "h-3.5 w-3.5" })
|
|
12814
|
+
}
|
|
12815
|
+
),
|
|
12816
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "h-4 w-px bg-border/80 mx-1" }),
|
|
12817
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12818
|
+
"button",
|
|
12819
|
+
{
|
|
12820
|
+
type: "button",
|
|
12821
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12822
|
+
title: "Bullet List",
|
|
12823
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.List, { className: "h-3.5 w-3.5" })
|
|
12824
|
+
}
|
|
12825
|
+
),
|
|
12826
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12827
|
+
"button",
|
|
12828
|
+
{
|
|
12829
|
+
type: "button",
|
|
12830
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12831
|
+
title: "Numbered List",
|
|
12832
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.ListOrdered, { className: "h-3.5 w-3.5" })
|
|
12833
|
+
}
|
|
12834
|
+
),
|
|
12835
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "h-4 w-px bg-border/80 mx-1" }),
|
|
12836
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12837
|
+
"button",
|
|
12838
|
+
{
|
|
12839
|
+
type: "button",
|
|
12840
|
+
onClick: () => fileInputRef.current?.click(),
|
|
12841
|
+
className: "p-1.5 rounded-lg hover:bg-muted text-indigo-600 dark:text-indigo-400 font-semibold flex items-center gap-1 text-xs",
|
|
12842
|
+
title: "Attach Files",
|
|
12843
|
+
children: [
|
|
12844
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Paperclip, { className: "h-3.5 w-3.5" }),
|
|
12845
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { children: "Attach" })
|
|
12846
|
+
]
|
|
12847
|
+
}
|
|
12848
|
+
)
|
|
12849
|
+
] }),
|
|
12850
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12851
|
+
"textarea",
|
|
12852
|
+
{
|
|
12853
|
+
value: body,
|
|
12854
|
+
onChange: (e) => setBody(e.target.value),
|
|
12855
|
+
placeholder: "Write or paste your document notes and text here...",
|
|
12856
|
+
rows: 4,
|
|
12857
|
+
className: "w-full p-3 text-xs bg-transparent border-0 focus:outline-hidden resize-y min-h-[90px]"
|
|
12858
|
+
}
|
|
12859
|
+
)
|
|
12860
|
+
] })
|
|
12861
|
+
] }),
|
|
12862
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-2", children: [
|
|
12863
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
12864
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Label, { className: "text-xs font-semibold text-foreground", children: [
|
|
12865
|
+
"Attachments (",
|
|
12866
|
+
attachments.length,
|
|
12867
|
+
")"
|
|
12868
|
+
] }),
|
|
12869
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12870
|
+
"input",
|
|
12871
|
+
{
|
|
12872
|
+
type: "file",
|
|
12873
|
+
multiple: true,
|
|
12874
|
+
ref: fileInputRef,
|
|
12875
|
+
onChange: handleFileChange,
|
|
12876
|
+
className: "hidden"
|
|
12877
|
+
}
|
|
12878
|
+
),
|
|
12879
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12880
|
+
Button,
|
|
12881
|
+
{
|
|
12882
|
+
type: "button",
|
|
12883
|
+
variant: "outline",
|
|
12884
|
+
size: "sm",
|
|
12885
|
+
onClick: () => fileInputRef.current?.click(),
|
|
12886
|
+
className: "h-7 text-xs gap-1.5 rounded-xl border-dashed",
|
|
12887
|
+
children: [
|
|
12888
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Paperclip, { className: "h-3 w-3" }),
|
|
12889
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { children: "Browse Files" })
|
|
12890
|
+
]
|
|
12891
|
+
}
|
|
12892
|
+
)
|
|
12893
|
+
] }),
|
|
12894
|
+
attachments.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12895
|
+
"div",
|
|
12896
|
+
{
|
|
12897
|
+
onClick: () => fileInputRef.current?.click(),
|
|
12898
|
+
className: "flex flex-col items-center justify-center gap-2 p-6 border-2 border-dashed border-border/80 rounded-2xl bg-muted/10 text-muted-foreground hover:border-indigo-400 hover:bg-indigo-50/20 dark:hover:bg-indigo-950/20 transition-all cursor-pointer text-center",
|
|
12899
|
+
children: [
|
|
12900
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.UploadCloud, { className: "h-8 w-8 text-indigo-500" }),
|
|
12901
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { children: [
|
|
12902
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "text-xs font-bold text-foreground", children: "Click to upload or drag and drop" }),
|
|
12903
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "PDF, DOCX, XLSX, PNG, JPG, MP4 or ZIP up to 50MB" })
|
|
12904
|
+
] })
|
|
12905
|
+
]
|
|
12906
|
+
}
|
|
12907
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2", children: attachments.map((att) => /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
12908
|
+
"div",
|
|
12909
|
+
{
|
|
12910
|
+
className: "flex items-center justify-between gap-2 p-2.5 rounded-xl border border-border/80 bg-card shadow-2xs",
|
|
12911
|
+
children: [
|
|
12912
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center gap-2.5 min-w-0", children: [
|
|
12913
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "flex h-8 w-8 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.FileText, { className: "h-4 w-4" }) }),
|
|
12914
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "min-w-0", children: [
|
|
12915
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "truncate text-xs font-semibold text-foreground", children: att.name }),
|
|
12916
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("p", { className: "text-[10px] text-muted-foreground font-mono", children: att.size })
|
|
12917
|
+
] })
|
|
12918
|
+
] }),
|
|
12919
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center gap-1 shrink-0", children: [
|
|
12920
|
+
onPreviewAttachment && att.url && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12921
|
+
"button",
|
|
12922
|
+
{
|
|
12923
|
+
type: "button",
|
|
12924
|
+
onClick: () => onPreviewAttachment({ name: att.name, url: att.url }),
|
|
12925
|
+
className: "p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
12926
|
+
title: "Preview",
|
|
12927
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.Eye, { className: "h-3.5 w-3.5" })
|
|
12928
|
+
}
|
|
12929
|
+
),
|
|
12930
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12931
|
+
"button",
|
|
12932
|
+
{
|
|
12933
|
+
type: "button",
|
|
12934
|
+
onClick: () => handleRemoveAttachment(att.id),
|
|
12935
|
+
className: "p-1 rounded-lg hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600",
|
|
12936
|
+
title: "Remove",
|
|
12937
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_lucide_react53.X, { className: "h-3.5 w-3.5" })
|
|
12938
|
+
}
|
|
12939
|
+
)
|
|
12940
|
+
] })
|
|
12941
|
+
]
|
|
12942
|
+
},
|
|
12943
|
+
att.id
|
|
12944
|
+
)) })
|
|
12945
|
+
] }),
|
|
12946
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "space-y-1.5", children: [
|
|
12947
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Label, { className: "text-xs font-semibold text-foreground", children: "Remarks / Tags" }),
|
|
12948
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
12949
|
+
Input,
|
|
12950
|
+
{
|
|
12951
|
+
value: remarks,
|
|
12952
|
+
onChange: (e) => setRemarks(e.target.value),
|
|
12953
|
+
placeholder: "e.g. Confidential, Q3 Approved, Client Copy",
|
|
12954
|
+
className: "h-8.5 text-xs rounded-xl bg-background border-border/80"
|
|
12955
|
+
}
|
|
12956
|
+
)
|
|
12957
|
+
] })
|
|
12958
|
+
] })
|
|
12959
|
+
]
|
|
12960
|
+
}
|
|
12961
|
+
);
|
|
12962
|
+
}
|
|
12963
|
+
|
|
12964
|
+
// src/design-system/templates/list-template.tsx
|
|
12965
|
+
var import_jsx_runtime100 = require("react/jsx-runtime");
|
|
12966
|
+
function ListTemplate({
|
|
12967
|
+
title,
|
|
12968
|
+
description,
|
|
12969
|
+
badge,
|
|
12970
|
+
breadcrumbs,
|
|
12971
|
+
actions,
|
|
12972
|
+
searchPlaceholder,
|
|
12973
|
+
searchValue,
|
|
12974
|
+
onSearchChange,
|
|
12975
|
+
filters,
|
|
12976
|
+
activeFilters,
|
|
12977
|
+
onClearAllFilters,
|
|
12978
|
+
filterActions,
|
|
12979
|
+
children,
|
|
12980
|
+
footer,
|
|
12981
|
+
className,
|
|
12982
|
+
...props
|
|
12983
|
+
}) {
|
|
12984
|
+
const hasFilterBar = Boolean(onSearchChange) || Boolean(filters) || activeFilters && activeFilters.length > 0 || Boolean(filterActions);
|
|
12985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("div", { className: cn("flex flex-col gap-6 p-4 sm:p-6 md:p-8", className), ...props, children: [
|
|
12986
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
|
|
12987
|
+
PageHeader,
|
|
12988
|
+
{
|
|
12989
|
+
title,
|
|
12990
|
+
description,
|
|
12991
|
+
badge,
|
|
12992
|
+
breadcrumbs,
|
|
12993
|
+
actions
|
|
12994
|
+
}
|
|
12995
|
+
),
|
|
12996
|
+
hasFilterBar && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
|
|
12997
|
+
FilterBar,
|
|
12998
|
+
{
|
|
12999
|
+
searchPlaceholder,
|
|
13000
|
+
searchValue,
|
|
13001
|
+
onSearchChange,
|
|
13002
|
+
filters,
|
|
13003
|
+
activeFilters,
|
|
13004
|
+
onClearAll: onClearAllFilters,
|
|
13005
|
+
actions: filterActions
|
|
13006
|
+
}
|
|
13007
|
+
),
|
|
13008
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: "flex-1", children }),
|
|
13009
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: "pt-2", children: footer })
|
|
13010
|
+
] });
|
|
13011
|
+
}
|
|
13012
|
+
|
|
13013
|
+
// src/design-system/templates/detail-template.tsx
|
|
13014
|
+
var import_lucide_react54 = require("lucide-react");
|
|
13015
|
+
var import_jsx_runtime101 = require("react/jsx-runtime");
|
|
13016
|
+
function DetailTemplate({
|
|
13017
|
+
title,
|
|
13018
|
+
description,
|
|
13019
|
+
badge,
|
|
13020
|
+
breadcrumbs,
|
|
13021
|
+
actions,
|
|
13022
|
+
onBack,
|
|
13023
|
+
backLabel = "Back",
|
|
13024
|
+
highlights,
|
|
13025
|
+
sidebar,
|
|
13026
|
+
children,
|
|
13027
|
+
className,
|
|
13028
|
+
...props
|
|
13029
|
+
}) {
|
|
13030
|
+
return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: cn("flex flex-col gap-6 p-4 sm:p-6 md:p-8", className), ...props, children: [
|
|
13031
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
13032
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
|
|
13033
|
+
Button,
|
|
13034
|
+
{
|
|
13035
|
+
variant: "ghost",
|
|
13036
|
+
size: "sm",
|
|
13037
|
+
onClick: onBack,
|
|
13038
|
+
className: "w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground",
|
|
13039
|
+
children: [
|
|
13040
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)(import_lucide_react54.ArrowLeft, { className: "h-3.5 w-3.5" }),
|
|
13041
|
+
backLabel
|
|
13042
|
+
]
|
|
13043
|
+
}
|
|
13044
|
+
),
|
|
13045
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
|
|
13046
|
+
PageHeader,
|
|
13047
|
+
{
|
|
13048
|
+
title,
|
|
13049
|
+
description,
|
|
13050
|
+
badge,
|
|
13051
|
+
breadcrumbs,
|
|
13052
|
+
actions
|
|
13053
|
+
}
|
|
13054
|
+
)
|
|
13055
|
+
] }),
|
|
13056
|
+
highlights && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4", children: highlights }),
|
|
13057
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
|
|
13058
|
+
"div",
|
|
13059
|
+
{
|
|
13060
|
+
className: cn(
|
|
13061
|
+
"grid gap-6",
|
|
13062
|
+
sidebar ? "grid-cols-1 lg:grid-cols-3" : "grid-cols-1"
|
|
13063
|
+
),
|
|
13064
|
+
children: [
|
|
13065
|
+
/* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: cn(sidebar ? "lg:col-span-2 space-y-6" : "space-y-6"), children }),
|
|
13066
|
+
sidebar && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("aside", { className: "space-y-6 lg:col-span-1", children: sidebar })
|
|
13067
|
+
]
|
|
13068
|
+
}
|
|
13069
|
+
)
|
|
13070
|
+
] });
|
|
13071
|
+
}
|
|
13072
|
+
|
|
13073
|
+
// src/design-system/templates/form-template.tsx
|
|
13074
|
+
var import_lucide_react55 = require("lucide-react");
|
|
13075
|
+
var import_jsx_runtime102 = require("react/jsx-runtime");
|
|
13076
|
+
function FormTemplate({
|
|
13077
|
+
title,
|
|
13078
|
+
description,
|
|
13079
|
+
badge,
|
|
13080
|
+
breadcrumbs,
|
|
13081
|
+
onBack,
|
|
13082
|
+
backLabel = "Back",
|
|
13083
|
+
submitLabel = "Save changes",
|
|
13084
|
+
cancelLabel = "Cancel",
|
|
13085
|
+
onCancel,
|
|
13086
|
+
isSubmitting = false,
|
|
13087
|
+
stickyFooter = false,
|
|
13088
|
+
secondaryActions,
|
|
13089
|
+
children,
|
|
13090
|
+
className,
|
|
13091
|
+
onSubmit,
|
|
13092
|
+
...props
|
|
13093
|
+
}) {
|
|
13094
|
+
return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex flex-col gap-6 p-4 sm:p-6 md:p-8", children: [
|
|
13095
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
13096
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(
|
|
13097
|
+
Button,
|
|
13098
|
+
{
|
|
13099
|
+
type: "button",
|
|
13100
|
+
variant: "ghost",
|
|
13101
|
+
size: "sm",
|
|
13102
|
+
onClick: onBack,
|
|
13103
|
+
className: "w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground",
|
|
13104
|
+
children: [
|
|
13105
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(import_lucide_react55.ArrowLeft, { className: "h-3.5 w-3.5" }),
|
|
13106
|
+
backLabel
|
|
13107
|
+
]
|
|
13108
|
+
}
|
|
13109
|
+
),
|
|
13110
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
13111
|
+
PageHeader,
|
|
13112
|
+
{
|
|
13113
|
+
title,
|
|
13114
|
+
description,
|
|
13115
|
+
badge,
|
|
13116
|
+
breadcrumbs
|
|
13117
|
+
}
|
|
13118
|
+
)
|
|
13119
|
+
] }),
|
|
13120
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("form", { onSubmit, className: cn("space-y-8", className), ...props, children: [
|
|
13121
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "space-y-6", children }),
|
|
13122
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(
|
|
13123
|
+
"div",
|
|
13124
|
+
{
|
|
13125
|
+
className: cn(
|
|
13126
|
+
"flex flex-wrap items-center justify-between gap-4 pt-6",
|
|
13127
|
+
stickyFooter && "sticky bottom-0 -mx-4 -mb-4 bg-background/95 p-4 backdrop-blur border-t sm:-mx-6 sm:-mb-6 sm:p-6 md:-mx-8 md:-mb-8 md:p-8"
|
|
13128
|
+
),
|
|
13129
|
+
children: [
|
|
13130
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { children: secondaryActions }),
|
|
13131
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
13132
|
+
onCancel && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
13133
|
+
Button,
|
|
13134
|
+
{
|
|
13135
|
+
type: "button",
|
|
13136
|
+
variant: "outline",
|
|
13137
|
+
disabled: isSubmitting,
|
|
13138
|
+
onClick: onCancel,
|
|
13139
|
+
children: cancelLabel
|
|
13140
|
+
}
|
|
13141
|
+
),
|
|
13142
|
+
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Saving..." : submitLabel })
|
|
13143
|
+
] })
|
|
13144
|
+
]
|
|
13145
|
+
}
|
|
13146
|
+
)
|
|
13147
|
+
] })
|
|
13148
|
+
] });
|
|
13149
|
+
}
|
|
13150
|
+
|
|
13151
|
+
// src/design-system/templates/wizard-template.tsx
|
|
13152
|
+
var import_lucide_react56 = require("lucide-react");
|
|
13153
|
+
var import_jsx_runtime103 = require("react/jsx-runtime");
|
|
13154
|
+
function WizardTemplate({
|
|
13155
|
+
title,
|
|
13156
|
+
description,
|
|
13157
|
+
steps,
|
|
13158
|
+
currentStepIndex,
|
|
13159
|
+
onStepChange,
|
|
13160
|
+
onNext,
|
|
13161
|
+
onPrevious,
|
|
13162
|
+
onSubmit,
|
|
13163
|
+
nextLabel = "Next",
|
|
13164
|
+
previousLabel = "Previous",
|
|
13165
|
+
submitLabel = "Complete",
|
|
13166
|
+
isSubmitting = false,
|
|
13167
|
+
canProceed = true,
|
|
13168
|
+
children,
|
|
13169
|
+
className,
|
|
13170
|
+
...props
|
|
13171
|
+
}) {
|
|
13172
|
+
const isLastStep = currentStepIndex === steps.length - 1;
|
|
13173
|
+
const isFirstStep = currentStepIndex === 0;
|
|
13174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: cn("flex flex-col gap-6 p-4 sm:p-6 md:p-8", className), ...props, children: [
|
|
13175
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(PageHeader, { title, description }),
|
|
13176
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)("nav", { "aria-label": "Wizard Progress", className: "py-2", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("ol", { className: "flex items-center justify-between gap-2 overflow-x-auto pb-2", children: steps.map((step, idx) => {
|
|
13177
|
+
const isCompleted = idx < currentStepIndex;
|
|
13178
|
+
const isCurrent = idx === currentStepIndex;
|
|
13179
|
+
const isClickable = onStepChange && idx < currentStepIndex;
|
|
13180
|
+
return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
|
|
13181
|
+
"li",
|
|
13182
|
+
{
|
|
13183
|
+
className: "flex flex-1 items-center gap-2.5 min-w-[120px]",
|
|
13184
|
+
children: [
|
|
13185
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
|
|
13186
|
+
"button",
|
|
13187
|
+
{
|
|
13188
|
+
type: "button",
|
|
13189
|
+
disabled: !isClickable,
|
|
13190
|
+
onClick: isClickable ? () => onStepChange(idx) : void 0,
|
|
13191
|
+
className: cn(
|
|
13192
|
+
"flex items-center gap-2 text-left transition-colors",
|
|
13193
|
+
isClickable && "cursor-pointer hover:opacity-80"
|
|
13194
|
+
),
|
|
13195
|
+
children: [
|
|
13196
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
13197
|
+
"span",
|
|
13198
|
+
{
|
|
13199
|
+
className: cn(
|
|
13200
|
+
"flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold",
|
|
13201
|
+
isCompleted && "bg-primary text-primary-foreground",
|
|
13202
|
+
isCurrent && "border-2 border-primary bg-primary/10 text-primary font-bold",
|
|
13203
|
+
!isCompleted && !isCurrent && "border border-border bg-muted text-muted-foreground"
|
|
13204
|
+
),
|
|
13205
|
+
children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react56.Check, { className: "h-4 w-4" }) : idx + 1
|
|
13206
|
+
}
|
|
13207
|
+
),
|
|
13208
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "hidden sm:block", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
13209
|
+
"div",
|
|
13210
|
+
{
|
|
13211
|
+
className: cn(
|
|
13212
|
+
"text-xs font-medium",
|
|
13213
|
+
isCurrent ? "text-foreground font-semibold" : "text-muted-foreground"
|
|
13214
|
+
),
|
|
13215
|
+
children: step.title
|
|
13216
|
+
}
|
|
13217
|
+
) })
|
|
13218
|
+
]
|
|
13219
|
+
}
|
|
13220
|
+
),
|
|
13221
|
+
idx < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
13222
|
+
"div",
|
|
13223
|
+
{
|
|
13224
|
+
className: cn(
|
|
13225
|
+
"h-0.5 flex-1 rounded-full",
|
|
13226
|
+
idx < currentStepIndex ? "bg-primary" : "bg-border"
|
|
13227
|
+
)
|
|
13228
|
+
}
|
|
13229
|
+
)
|
|
11635
13230
|
]
|
|
11636
13231
|
},
|
|
11637
13232
|
step.id
|
|
11638
13233
|
);
|
|
11639
13234
|
}) }) }),
|
|
11640
|
-
/* @__PURE__ */ (0,
|
|
11641
|
-
/* @__PURE__ */ (0,
|
|
11642
|
-
/* @__PURE__ */ (0,
|
|
13235
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "flex-1 rounded-lg border bg-card p-4 sm:p-6", children }),
|
|
13236
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex items-center justify-between pt-2", children: [
|
|
13237
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
|
|
11643
13238
|
Button,
|
|
11644
13239
|
{
|
|
11645
13240
|
type: "button",
|
|
@@ -11647,12 +13242,12 @@ function WizardTemplate({
|
|
|
11647
13242
|
disabled: isFirstStep || isSubmitting,
|
|
11648
13243
|
onClick: onPrevious,
|
|
11649
13244
|
children: [
|
|
11650
|
-
/* @__PURE__ */ (0,
|
|
13245
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react56.ChevronLeft, { className: "mr-1 h-4 w-4" }),
|
|
11651
13246
|
previousLabel
|
|
11652
13247
|
]
|
|
11653
13248
|
}
|
|
11654
13249
|
),
|
|
11655
|
-
isLastStep ? /* @__PURE__ */ (0,
|
|
13250
|
+
isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
11656
13251
|
Button,
|
|
11657
13252
|
{
|
|
11658
13253
|
type: "button",
|
|
@@ -11660,7 +13255,7 @@ function WizardTemplate({
|
|
|
11660
13255
|
onClick: onSubmit,
|
|
11661
13256
|
children: isSubmitting ? "Submitting..." : submitLabel
|
|
11662
13257
|
}
|
|
11663
|
-
) : /* @__PURE__ */ (0,
|
|
13258
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
|
|
11664
13259
|
Button,
|
|
11665
13260
|
{
|
|
11666
13261
|
type: "button",
|
|
@@ -11668,7 +13263,7 @@ function WizardTemplate({
|
|
|
11668
13263
|
onClick: onNext,
|
|
11669
13264
|
children: [
|
|
11670
13265
|
nextLabel,
|
|
11671
|
-
/* @__PURE__ */ (0,
|
|
13266
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_lucide_react56.ChevronRight, { className: "ml-1 h-4 w-4" })
|
|
11672
13267
|
]
|
|
11673
13268
|
}
|
|
11674
13269
|
)
|
|
@@ -11677,7 +13272,7 @@ function WizardTemplate({
|
|
|
11677
13272
|
}
|
|
11678
13273
|
|
|
11679
13274
|
// src/design-system/templates/dashboard-template.tsx
|
|
11680
|
-
var
|
|
13275
|
+
var import_jsx_runtime104 = require("react/jsx-runtime");
|
|
11681
13276
|
function DashboardTemplate({
|
|
11682
13277
|
title,
|
|
11683
13278
|
description,
|
|
@@ -11691,8 +13286,8 @@ function DashboardTemplate({
|
|
|
11691
13286
|
className,
|
|
11692
13287
|
...props
|
|
11693
13288
|
}) {
|
|
11694
|
-
return /* @__PURE__ */ (0,
|
|
11695
|
-
/* @__PURE__ */ (0,
|
|
13289
|
+
return /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("div", { className: cn("flex flex-col gap-6 p-4 sm:p-6 md:p-8", className), ...props, children: [
|
|
13290
|
+
/* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
|
|
11696
13291
|
PageHeader,
|
|
11697
13292
|
{
|
|
11698
13293
|
title,
|
|
@@ -11702,15 +13297,15 @@ function DashboardTemplate({
|
|
|
11702
13297
|
actions
|
|
11703
13298
|
}
|
|
11704
13299
|
),
|
|
11705
|
-
metrics && /* @__PURE__ */ (0,
|
|
11706
|
-
charts && /* @__PURE__ */ (0,
|
|
11707
|
-
activity && /* @__PURE__ */ (0,
|
|
11708
|
-
children && /* @__PURE__ */ (0,
|
|
13300
|
+
metrics && /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("section", { "aria-label": "Key Metrics", className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4", children: metrics }),
|
|
13301
|
+
charts && /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("section", { "aria-label": "Charts and Visualizations", className: "grid gap-4 md:grid-cols-2 lg:grid-cols-7", children: charts }),
|
|
13302
|
+
activity && /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("section", { "aria-label": "Recent Activity", className: "space-y-4", children: activity }),
|
|
13303
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { className: "space-y-6", children })
|
|
11709
13304
|
] });
|
|
11710
13305
|
}
|
|
11711
13306
|
|
|
11712
13307
|
// src/design-system/templates/workspace-template.tsx
|
|
11713
|
-
var
|
|
13308
|
+
var import_jsx_runtime105 = require("react/jsx-runtime");
|
|
11714
13309
|
function WorkspaceTemplate({
|
|
11715
13310
|
header,
|
|
11716
13311
|
leftSidebar,
|
|
@@ -11720,7 +13315,7 @@ function WorkspaceTemplate({
|
|
|
11720
13315
|
className,
|
|
11721
13316
|
...props
|
|
11722
13317
|
}) {
|
|
11723
|
-
return /* @__PURE__ */ (0,
|
|
13318
|
+
return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(
|
|
11724
13319
|
"div",
|
|
11725
13320
|
{
|
|
11726
13321
|
className: cn(
|
|
@@ -11729,29 +13324,29 @@ function WorkspaceTemplate({
|
|
|
11729
13324
|
),
|
|
11730
13325
|
...props,
|
|
11731
13326
|
children: [
|
|
11732
|
-
header && /* @__PURE__ */ (0,
|
|
11733
|
-
/* @__PURE__ */ (0,
|
|
11734
|
-
leftSidebar && /* @__PURE__ */ (0,
|
|
11735
|
-
/* @__PURE__ */ (0,
|
|
11736
|
-
rightSidebar && /* @__PURE__ */ (0,
|
|
13327
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("header", { className: "flex h-14 shrink-0 items-center border-b px-4 bg-background z-10", children: header }),
|
|
13328
|
+
/* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: "flex flex-1 overflow-hidden", children: [
|
|
13329
|
+
leftSidebar && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("aside", { className: "hidden md:flex w-64 shrink-0 flex-col border-r bg-sidebar p-3 overflow-y-auto", children: leftSidebar }),
|
|
13330
|
+
/* @__PURE__ */ (0, import_jsx_runtime105.jsx)("main", { className: "flex flex-1 flex-col overflow-y-auto p-4 sm:p-6 bg-muted/20", children }),
|
|
13331
|
+
rightSidebar && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("aside", { className: "hidden lg:flex w-80 shrink-0 flex-col border-l bg-background p-4 overflow-y-auto", children: rightSidebar })
|
|
11737
13332
|
] }),
|
|
11738
|
-
footer && /* @__PURE__ */ (0,
|
|
13333
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("footer", { className: "flex h-10 shrink-0 items-center border-t px-4 text-xs text-muted-foreground bg-background", children: footer })
|
|
11739
13334
|
]
|
|
11740
13335
|
}
|
|
11741
13336
|
);
|
|
11742
13337
|
}
|
|
11743
13338
|
|
|
11744
13339
|
// src/design-system/templates/app-header.tsx
|
|
11745
|
-
var
|
|
11746
|
-
var
|
|
13340
|
+
var import_react21 = require("react");
|
|
13341
|
+
var import_lucide_react58 = require("lucide-react");
|
|
11747
13342
|
var import_navigation2 = require("next/navigation");
|
|
11748
13343
|
|
|
11749
13344
|
// src/components/layout/header.tsx
|
|
11750
|
-
var
|
|
11751
|
-
var
|
|
13345
|
+
var import_react20 = require("react");
|
|
13346
|
+
var import_jsx_runtime106 = require("react/jsx-runtime");
|
|
11752
13347
|
function Header({ className, fixed, children, ...props }) {
|
|
11753
|
-
const [offset, setOffset] = (0,
|
|
11754
|
-
(0,
|
|
13348
|
+
const [offset, setOffset] = (0, import_react20.useState)(0);
|
|
13349
|
+
(0, import_react20.useEffect)(() => {
|
|
11755
13350
|
const onScroll = () => {
|
|
11756
13351
|
setOffset(document.body.scrollTop || document.documentElement.scrollTop);
|
|
11757
13352
|
};
|
|
@@ -11760,7 +13355,7 @@ function Header({ className, fixed, children, ...props }) {
|
|
|
11760
13355
|
}, []);
|
|
11761
13356
|
return (
|
|
11762
13357
|
// Page header container: fixed mode me top par sticky behavior deta hai.
|
|
11763
|
-
/* @__PURE__ */ (0,
|
|
13358
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
11764
13359
|
"header",
|
|
11765
13360
|
{
|
|
11766
13361
|
className: cn(
|
|
@@ -11770,7 +13365,7 @@ function Header({ className, fixed, children, ...props }) {
|
|
|
11770
13365
|
className
|
|
11771
13366
|
),
|
|
11772
13367
|
...props,
|
|
11773
|
-
children: /* @__PURE__ */ (0,
|
|
13368
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
|
|
11774
13369
|
"div",
|
|
11775
13370
|
{
|
|
11776
13371
|
className: cn(
|
|
@@ -11779,7 +13374,7 @@ function Header({ className, fixed, children, ...props }) {
|
|
|
11779
13374
|
offset > 10 && fixed && "after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg"
|
|
11780
13375
|
),
|
|
11781
13376
|
children: [
|
|
11782
|
-
/* @__PURE__ */ (0,
|
|
13377
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)(AppLogo, { className: "shrink-0 md:hidden" }),
|
|
11783
13378
|
children
|
|
11784
13379
|
]
|
|
11785
13380
|
}
|
|
@@ -11790,9 +13385,9 @@ function Header({ className, fixed, children, ...props }) {
|
|
|
11790
13385
|
}
|
|
11791
13386
|
|
|
11792
13387
|
// src/components/search.tsx
|
|
11793
|
-
var
|
|
11794
|
-
var
|
|
11795
|
-
function
|
|
13388
|
+
var import_lucide_react57 = require("lucide-react");
|
|
13389
|
+
var import_jsx_runtime107 = require("react/jsx-runtime");
|
|
13390
|
+
function Search7({
|
|
11796
13391
|
className = "",
|
|
11797
13392
|
placeholder = "Search",
|
|
11798
13393
|
iconOnly = true,
|
|
@@ -11804,7 +13399,7 @@ function Search6({
|
|
|
11804
13399
|
search.setOpen(true);
|
|
11805
13400
|
}
|
|
11806
13401
|
};
|
|
11807
|
-
return /* @__PURE__ */ (0,
|
|
13402
|
+
return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
|
|
11808
13403
|
Button,
|
|
11809
13404
|
{
|
|
11810
13405
|
...props,
|
|
@@ -11814,7 +13409,7 @@ function Search6({
|
|
|
11814
13409
|
"aria-label": "Search",
|
|
11815
13410
|
"aria-keyshortcuts": "Meta+K Control+K",
|
|
11816
13411
|
onClick: openSearch,
|
|
11817
|
-
children: /* @__PURE__ */ (0,
|
|
13412
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react57.SearchIcon, { className: "size-5", "aria-hidden": "true" })
|
|
11818
13413
|
}
|
|
11819
13414
|
);
|
|
11820
13415
|
}
|
|
@@ -11983,7 +13578,7 @@ var useNotificationStore = (0, import_zustand2.create)((set, get) => ({
|
|
|
11983
13578
|
}));
|
|
11984
13579
|
|
|
11985
13580
|
// src/design-system/templates/app-header.tsx
|
|
11986
|
-
var
|
|
13581
|
+
var import_jsx_runtime108 = require("react/jsx-runtime");
|
|
11987
13582
|
function AppHeader({
|
|
11988
13583
|
title,
|
|
11989
13584
|
fixed = true,
|
|
@@ -11993,7 +13588,7 @@ function AppHeader({
|
|
|
11993
13588
|
const router = (0, import_navigation2.useRouter)();
|
|
11994
13589
|
const currentUser = useAuthStore((state) => state.auth.user);
|
|
11995
13590
|
const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore();
|
|
11996
|
-
(0,
|
|
13591
|
+
(0, import_react21.useEffect)(() => {
|
|
11997
13592
|
if (currentUser) {
|
|
11998
13593
|
fetchNotifications(currentUser.accountNo);
|
|
11999
13594
|
subscribeToNotifications(currentUser.accountNo);
|
|
@@ -12002,12 +13597,12 @@ function AppHeader({
|
|
|
12002
13597
|
unsubscribe();
|
|
12003
13598
|
};
|
|
12004
13599
|
}, [currentUser, fetchNotifications, subscribeToNotifications, unsubscribe]);
|
|
12005
|
-
return /* @__PURE__ */ (0,
|
|
12006
|
-
/* @__PURE__ */ (0,
|
|
12007
|
-
/* @__PURE__ */ (0,
|
|
12008
|
-
/* @__PURE__ */ (0,
|
|
13600
|
+
return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Header, { fixed, className: "border-b bg-background", children: /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "flex flex-1 items-center justify-between w-full", children: iconsPosition === "left" ? /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center gap-2 sm:gap-3 min-w-0", children: [
|
|
13601
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)("h1", { className: "min-w-0 truncate text-base font-semibold sm:text-lg", children: title }),
|
|
13602
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center gap-1 sm:gap-2 shrink-0 ml-1", children: [
|
|
13603
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Search7, { iconOnly: true }),
|
|
12009
13604
|
children,
|
|
12010
|
-
/* @__PURE__ */ (0,
|
|
13605
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
12011
13606
|
Button,
|
|
12012
13607
|
{
|
|
12013
13608
|
variant: "ghost",
|
|
@@ -12016,18 +13611,18 @@ function AppHeader({
|
|
|
12016
13611
|
"aria-label": "Notifications",
|
|
12017
13612
|
onClick: () => router.push("/notification"),
|
|
12018
13613
|
children: [
|
|
12019
|
-
/* @__PURE__ */ (0,
|
|
12020
|
-
unreadCount > 0 && /* @__PURE__ */ (0,
|
|
13614
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(import_lucide_react58.Bell, { className: "size-5" }),
|
|
13615
|
+
unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs", children: unreadCount > 5 ? "5+" : unreadCount })
|
|
12021
13616
|
]
|
|
12022
13617
|
}
|
|
12023
13618
|
)
|
|
12024
13619
|
] })
|
|
12025
|
-
] }) : /* @__PURE__ */ (0,
|
|
12026
|
-
/* @__PURE__ */ (0,
|
|
12027
|
-
/* @__PURE__ */ (0,
|
|
12028
|
-
/* @__PURE__ */ (0,
|
|
13620
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment, { children: [
|
|
13621
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)("h1", { className: "min-w-0 truncate text-base font-semibold sm:text-lg", children: title }),
|
|
13622
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "ml-auto flex items-center gap-2 sm:gap-3", children: [
|
|
13623
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Search7, { iconOnly: true }),
|
|
12029
13624
|
children,
|
|
12030
|
-
/* @__PURE__ */ (0,
|
|
13625
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
12031
13626
|
Button,
|
|
12032
13627
|
{
|
|
12033
13628
|
variant: "ghost",
|
|
@@ -12036,8 +13631,8 @@ function AppHeader({
|
|
|
12036
13631
|
"aria-label": "Notifications",
|
|
12037
13632
|
onClick: () => router.push("/notification"),
|
|
12038
13633
|
children: [
|
|
12039
|
-
/* @__PURE__ */ (0,
|
|
12040
|
-
unreadCount > 0 && /* @__PURE__ */ (0,
|
|
13634
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(import_lucide_react58.Bell, { className: "size-5" }),
|
|
13635
|
+
unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs", children: unreadCount > 5 ? "5+" : unreadCount })
|
|
12041
13636
|
]
|
|
12042
13637
|
}
|
|
12043
13638
|
)
|
|
@@ -12046,7 +13641,7 @@ function AppHeader({
|
|
|
12046
13641
|
}
|
|
12047
13642
|
|
|
12048
13643
|
// src/design-system/templates/data/sidebar-data.ts
|
|
12049
|
-
var
|
|
13644
|
+
var import_lucide_react59 = require("lucide-react");
|
|
12050
13645
|
var sidebarData2 = {
|
|
12051
13646
|
user: {
|
|
12052
13647
|
name: "satnaing",
|
|
@@ -12056,7 +13651,7 @@ var sidebarData2 = {
|
|
|
12056
13651
|
teams: [
|
|
12057
13652
|
{
|
|
12058
13653
|
name: "Amoga App",
|
|
12059
|
-
logo:
|
|
13654
|
+
logo: import_lucide_react59.Command,
|
|
12060
13655
|
plan: "Demo Company"
|
|
12061
13656
|
}
|
|
12062
13657
|
],
|
|
@@ -12067,52 +13662,52 @@ var sidebarData2 = {
|
|
|
12067
13662
|
{
|
|
12068
13663
|
title: "Message",
|
|
12069
13664
|
url: "/message",
|
|
12070
|
-
icon:
|
|
13665
|
+
icon: import_lucide_react59.Mail
|
|
12071
13666
|
},
|
|
12072
13667
|
{
|
|
12073
13668
|
title: "Email Settings",
|
|
12074
13669
|
url: "/email-settings",
|
|
12075
|
-
icon:
|
|
13670
|
+
icon: import_lucide_react59.Settings
|
|
12076
13671
|
},
|
|
12077
13672
|
{
|
|
12078
13673
|
title: "Design System",
|
|
12079
13674
|
url: "/",
|
|
12080
|
-
icon:
|
|
13675
|
+
icon: import_lucide_react59.Settings
|
|
12081
13676
|
},
|
|
12082
13677
|
{
|
|
12083
13678
|
title: "Vouchers",
|
|
12084
13679
|
url: "/vouchers",
|
|
12085
|
-
icon:
|
|
13680
|
+
icon: import_lucide_react59.Ticket
|
|
12086
13681
|
},
|
|
12087
13682
|
{
|
|
12088
13683
|
title: "AI Chat",
|
|
12089
13684
|
url: "/ai_chat",
|
|
12090
|
-
icon:
|
|
13685
|
+
icon: import_lucide_react59.Bot
|
|
12091
13686
|
},
|
|
12092
13687
|
{
|
|
12093
13688
|
title: "AI Search",
|
|
12094
13689
|
url: "/ai_search",
|
|
12095
|
-
icon:
|
|
13690
|
+
icon: import_lucide_react59.SearchIcon
|
|
12096
13691
|
},
|
|
12097
13692
|
{
|
|
12098
13693
|
title: "Chart Template",
|
|
12099
13694
|
url: "/charttemplate",
|
|
12100
|
-
icon:
|
|
13695
|
+
icon: import_lucide_react59.ChartArea
|
|
12101
13696
|
},
|
|
12102
13697
|
{
|
|
12103
13698
|
title: "Map Template",
|
|
12104
13699
|
url: "/map",
|
|
12105
|
-
icon:
|
|
13700
|
+
icon: import_lucide_react59.Map
|
|
12106
13701
|
},
|
|
12107
13702
|
{
|
|
12108
13703
|
title: "Route Doc",
|
|
12109
13704
|
url: "/routedoc",
|
|
12110
|
-
icon:
|
|
13705
|
+
icon: import_lucide_react59.Route
|
|
12111
13706
|
},
|
|
12112
13707
|
{
|
|
12113
13708
|
title: "Link Maker",
|
|
12114
13709
|
url: "/link-maker",
|
|
12115
|
-
icon:
|
|
13710
|
+
icon: import_lucide_react59.Link
|
|
12116
13711
|
}
|
|
12117
13712
|
]
|
|
12118
13713
|
},
|
|
@@ -12121,7 +13716,7 @@ var sidebarData2 = {
|
|
|
12121
13716
|
items: [
|
|
12122
13717
|
{
|
|
12123
13718
|
title: "Settings",
|
|
12124
|
-
icon:
|
|
13719
|
+
icon: import_lucide_react59.Settings,
|
|
12125
13720
|
items: [
|
|
12126
13721
|
// Add settings pages here
|
|
12127
13722
|
]
|
|
@@ -12129,7 +13724,7 @@ var sidebarData2 = {
|
|
|
12129
13724
|
{
|
|
12130
13725
|
title: "Help Center",
|
|
12131
13726
|
url: "/help-center",
|
|
12132
|
-
icon:
|
|
13727
|
+
icon: import_lucide_react59.HelpCircle
|
|
12133
13728
|
}
|
|
12134
13729
|
]
|
|
12135
13730
|
}
|
|
@@ -12137,7 +13732,7 @@ var sidebarData2 = {
|
|
|
12137
13732
|
};
|
|
12138
13733
|
|
|
12139
13734
|
// src/design-system/templates/app-logo.tsx
|
|
12140
|
-
var
|
|
13735
|
+
var import_jsx_runtime109 = require("react/jsx-runtime");
|
|
12141
13736
|
function AppLogo({ className, onClick }) {
|
|
12142
13737
|
const { toggleSidebar, setOpenMobile, isMobile } = useSidebar();
|
|
12143
13738
|
const team = sidebarData2.teams[0];
|
|
@@ -12154,7 +13749,7 @@ function AppLogo({ className, onClick }) {
|
|
|
12154
13749
|
toggleSidebar();
|
|
12155
13750
|
}
|
|
12156
13751
|
};
|
|
12157
|
-
return /* @__PURE__ */ (0,
|
|
13752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
|
|
12158
13753
|
Button,
|
|
12159
13754
|
{
|
|
12160
13755
|
type: "button",
|
|
@@ -12165,30 +13760,30 @@ function AppLogo({ className, onClick }) {
|
|
|
12165
13760
|
className
|
|
12166
13761
|
),
|
|
12167
13762
|
"aria-label": "Open sidebar menu",
|
|
12168
|
-
children: /* @__PURE__ */ (0,
|
|
13763
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "flex size-full items-center justify-center rounded-lg bg-primary text-primary-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(Logo, { className: "size-4" }) })
|
|
12169
13764
|
}
|
|
12170
13765
|
);
|
|
12171
13766
|
}
|
|
12172
13767
|
|
|
12173
13768
|
// src/context/layout-provider.tsx
|
|
12174
|
-
var
|
|
12175
|
-
var
|
|
13769
|
+
var import_react22 = require("react");
|
|
13770
|
+
var import_jsx_runtime110 = require("react/jsx-runtime");
|
|
12176
13771
|
var LAYOUT_COLLAPSIBLE_COOKIE_NAME = "layout_collapsible";
|
|
12177
13772
|
var LAYOUT_VARIANT_COOKIE_NAME = "layout_variant";
|
|
12178
13773
|
var LAYOUT_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
12179
13774
|
var DEFAULT_VARIANT = "inset";
|
|
12180
13775
|
var DEFAULT_COLLAPSIBLE = "icon";
|
|
12181
|
-
var LayoutContext = (0,
|
|
13776
|
+
var LayoutContext = (0, import_react22.createContext)(null);
|
|
12182
13777
|
function LayoutProvider({ children }) {
|
|
12183
|
-
const [collapsible, _setCollapsible] = (0,
|
|
13778
|
+
const [collapsible, _setCollapsible] = (0, import_react22.useState)(() => {
|
|
12184
13779
|
const saved = getCookie(LAYOUT_COLLAPSIBLE_COOKIE_NAME);
|
|
12185
13780
|
return saved || DEFAULT_COLLAPSIBLE;
|
|
12186
13781
|
});
|
|
12187
|
-
const [variant, _setVariant] = (0,
|
|
13782
|
+
const [variant, _setVariant] = (0, import_react22.useState)(() => {
|
|
12188
13783
|
const saved = getCookie(LAYOUT_VARIANT_COOKIE_NAME);
|
|
12189
13784
|
return saved || DEFAULT_VARIANT;
|
|
12190
13785
|
});
|
|
12191
|
-
const [showInlineNotFound, setShowInlineNotFound] = (0,
|
|
13786
|
+
const [showInlineNotFound, setShowInlineNotFound] = (0, import_react22.useState)(false);
|
|
12192
13787
|
const setCollapsible = (newCollapsible) => {
|
|
12193
13788
|
_setCollapsible(newCollapsible);
|
|
12194
13789
|
setCookie(
|
|
@@ -12216,10 +13811,10 @@ function LayoutProvider({ children }) {
|
|
|
12216
13811
|
showInlineNotFound,
|
|
12217
13812
|
setShowInlineNotFound
|
|
12218
13813
|
};
|
|
12219
|
-
return /* @__PURE__ */ (0,
|
|
13814
|
+
return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(LayoutContext, { value: contextValue, children });
|
|
12220
13815
|
}
|
|
12221
13816
|
function useLayout() {
|
|
12222
|
-
const context = (0,
|
|
13817
|
+
const context = (0, import_react22.useContext)(LayoutContext);
|
|
12223
13818
|
if (!context) {
|
|
12224
13819
|
return {
|
|
12225
13820
|
resetLayout: () => {
|
|
@@ -12243,13 +13838,13 @@ function useLayout() {
|
|
|
12243
13838
|
// src/design-system/templates/nav-group.tsx
|
|
12244
13839
|
var import_link = __toESM(require("next/link"));
|
|
12245
13840
|
var import_navigation3 = require("next/navigation");
|
|
12246
|
-
var
|
|
12247
|
-
var
|
|
13841
|
+
var import_lucide_react60 = require("lucide-react");
|
|
13842
|
+
var import_jsx_runtime111 = require("react/jsx-runtime");
|
|
12248
13843
|
function NavGroup({ title, items }) {
|
|
12249
13844
|
const { state, isMobile, openMobile, setOpenMobile } = useSidebar();
|
|
12250
13845
|
const href = (0, import_navigation3.usePathname)();
|
|
12251
|
-
return /* @__PURE__ */ (0,
|
|
12252
|
-
/* @__PURE__ */ (0,
|
|
13846
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(SidebarGroup, { className: cn(title === "Menu" && "pt-0"), children: [
|
|
13847
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12253
13848
|
SidebarGroupLabel,
|
|
12254
13849
|
{
|
|
12255
13850
|
className: cn(
|
|
@@ -12257,8 +13852,8 @@ function NavGroup({ title, items }) {
|
|
|
12257
13852
|
title === "Menu" && state !== "collapsed" && "sticky top-0 z-20 bg-sidebar py-1.5"
|
|
12258
13853
|
),
|
|
12259
13854
|
children: [
|
|
12260
|
-
/* @__PURE__ */ (0,
|
|
12261
|
-
title === "Menu" && !isMobile && /* @__PURE__ */ (0,
|
|
13855
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: title }),
|
|
13856
|
+
title === "Menu" && !isMobile && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
|
|
12262
13857
|
SidebarTrigger,
|
|
12263
13858
|
{
|
|
12264
13859
|
variant: "ghost",
|
|
@@ -12266,7 +13861,7 @@ function NavGroup({ title, items }) {
|
|
|
12266
13861
|
"aria-label": "Toggle sidebar"
|
|
12267
13862
|
}
|
|
12268
13863
|
),
|
|
12269
|
-
title === "Menu" && isMobile && openMobile && /* @__PURE__ */ (0,
|
|
13864
|
+
title === "Menu" && isMobile && openMobile && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
|
|
12270
13865
|
Button,
|
|
12271
13866
|
{
|
|
12272
13867
|
type: "button",
|
|
@@ -12275,37 +13870,37 @@ function NavGroup({ title, items }) {
|
|
|
12275
13870
|
className: "size-6 shrink-0",
|
|
12276
13871
|
"aria-label": "Close sidebar",
|
|
12277
13872
|
onClick: () => setOpenMobile(false),
|
|
12278
|
-
children: /* @__PURE__ */ (0,
|
|
13873
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react60.X, { className: "size-4", "aria-hidden": "true" })
|
|
12279
13874
|
}
|
|
12280
13875
|
)
|
|
12281
13876
|
]
|
|
12282
13877
|
}
|
|
12283
13878
|
),
|
|
12284
|
-
/* @__PURE__ */ (0,
|
|
13879
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenu, { children: items.map((item) => {
|
|
12285
13880
|
const key = `${item.title}-${item.url}`;
|
|
12286
13881
|
if (!item.items)
|
|
12287
|
-
return /* @__PURE__ */ (0,
|
|
13882
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuLink, { item, href }, key);
|
|
12288
13883
|
if (item.title === "Settings" && item.items.length === 0)
|
|
12289
|
-
return /* @__PURE__ */ (0,
|
|
13884
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuSettings, { item }, key);
|
|
12290
13885
|
if (state === "collapsed" && !isMobile)
|
|
12291
|
-
return /* @__PURE__ */ (0,
|
|
12292
|
-
return /* @__PURE__ */ (0,
|
|
13886
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuCollapsedDropdown, { item, href }, key);
|
|
13887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuCollapsible, { item, href }, key);
|
|
12293
13888
|
}) })
|
|
12294
13889
|
] });
|
|
12295
13890
|
}
|
|
12296
13891
|
function NavBadge({ children }) {
|
|
12297
|
-
return /* @__PURE__ */ (0,
|
|
13892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Badge, { className: "rounded-full px-1 py-0 text-xs", children });
|
|
12298
13893
|
}
|
|
12299
13894
|
function SidebarMenuLink({ item, href }) {
|
|
12300
13895
|
const { setOpenMobile } = useSidebar();
|
|
12301
13896
|
const { setShowInlineNotFound } = useLayout();
|
|
12302
|
-
return /* @__PURE__ */ (0,
|
|
13897
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
|
|
12303
13898
|
SidebarMenuButton,
|
|
12304
13899
|
{
|
|
12305
13900
|
asChild: true,
|
|
12306
13901
|
isActive: checkIsActive(href, item),
|
|
12307
13902
|
tooltip: item.title,
|
|
12308
|
-
children: /* @__PURE__ */ (0,
|
|
13903
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12309
13904
|
import_link.default,
|
|
12310
13905
|
{
|
|
12311
13906
|
href: item.url,
|
|
@@ -12314,9 +13909,9 @@ function SidebarMenuLink({ item, href }) {
|
|
|
12314
13909
|
setOpenMobile(false);
|
|
12315
13910
|
},
|
|
12316
13911
|
children: [
|
|
12317
|
-
item.icon && /* @__PURE__ */ (0,
|
|
12318
|
-
/* @__PURE__ */ (0,
|
|
12319
|
-
item.badge && /* @__PURE__ */ (0,
|
|
13912
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(item.icon, {}),
|
|
13913
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: item.title }),
|
|
13914
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(NavBadge, { children: item.badge })
|
|
12320
13915
|
]
|
|
12321
13916
|
}
|
|
12322
13917
|
)
|
|
@@ -12326,7 +13921,7 @@ function SidebarMenuLink({ item, href }) {
|
|
|
12326
13921
|
function SidebarMenuSettings({ item }) {
|
|
12327
13922
|
const { setOpenMobile } = useSidebar();
|
|
12328
13923
|
const { showInlineNotFound, setShowInlineNotFound } = useLayout();
|
|
12329
|
-
return /* @__PURE__ */ (0,
|
|
13924
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12330
13925
|
SidebarMenuButton,
|
|
12331
13926
|
{
|
|
12332
13927
|
tooltip: item.title,
|
|
@@ -12336,8 +13931,8 @@ function SidebarMenuSettings({ item }) {
|
|
|
12336
13931
|
setOpenMobile(false);
|
|
12337
13932
|
},
|
|
12338
13933
|
children: [
|
|
12339
|
-
item.icon && /* @__PURE__ */ (0,
|
|
12340
|
-
/* @__PURE__ */ (0,
|
|
13934
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(item.icon, {}),
|
|
13935
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: item.title })
|
|
12341
13936
|
]
|
|
12342
13937
|
}
|
|
12343
13938
|
) });
|
|
@@ -12348,25 +13943,25 @@ function SidebarMenuCollapsible({
|
|
|
12348
13943
|
}) {
|
|
12349
13944
|
const { setOpenMobile } = useSidebar();
|
|
12350
13945
|
const { setShowInlineNotFound } = useLayout();
|
|
12351
|
-
return /* @__PURE__ */ (0,
|
|
13946
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
|
|
12352
13947
|
Collapsible,
|
|
12353
13948
|
{
|
|
12354
13949
|
asChild: true,
|
|
12355
13950
|
defaultOpen: checkIsActive(href, item, true),
|
|
12356
13951
|
className: "group/collapsible",
|
|
12357
|
-
children: /* @__PURE__ */ (0,
|
|
12358
|
-
/* @__PURE__ */ (0,
|
|
12359
|
-
item.icon && /* @__PURE__ */ (0,
|
|
12360
|
-
/* @__PURE__ */ (0,
|
|
12361
|
-
item.badge && /* @__PURE__ */ (0,
|
|
12362
|
-
/* @__PURE__ */ (0,
|
|
13952
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(SidebarMenuItem, { children: [
|
|
13953
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(SidebarMenuButton, { tooltip: item.title, children: [
|
|
13954
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(item.icon, {}),
|
|
13955
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: item.title }),
|
|
13956
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(NavBadge, { children: item.badge }),
|
|
13957
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react60.ChevronRight, { className: "ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180" })
|
|
12363
13958
|
] }) }),
|
|
12364
|
-
/* @__PURE__ */ (0,
|
|
13959
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleContent, { className: "CollapsibleContent", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuSub, { children: item.items.map((subItem) => /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuSubItem, { children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
|
|
12365
13960
|
SidebarMenuSubButton,
|
|
12366
13961
|
{
|
|
12367
13962
|
asChild: true,
|
|
12368
13963
|
isActive: checkIsActive(href, subItem),
|
|
12369
|
-
children: /* @__PURE__ */ (0,
|
|
13964
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12370
13965
|
import_link.default,
|
|
12371
13966
|
{
|
|
12372
13967
|
href: subItem.url,
|
|
@@ -12375,9 +13970,9 @@ function SidebarMenuCollapsible({
|
|
|
12375
13970
|
setOpenMobile(false);
|
|
12376
13971
|
},
|
|
12377
13972
|
children: [
|
|
12378
|
-
subItem.icon && /* @__PURE__ */ (0,
|
|
12379
|
-
/* @__PURE__ */ (0,
|
|
12380
|
-
subItem.badge && /* @__PURE__ */ (0,
|
|
13973
|
+
subItem.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(subItem.icon, {}),
|
|
13974
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: subItem.title }),
|
|
13975
|
+
subItem.badge && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(NavBadge, { children: subItem.badge })
|
|
12381
13976
|
]
|
|
12382
13977
|
}
|
|
12383
13978
|
)
|
|
@@ -12391,36 +13986,36 @@ function SidebarMenuCollapsedDropdown({
|
|
|
12391
13986
|
item,
|
|
12392
13987
|
href
|
|
12393
13988
|
}) {
|
|
12394
|
-
return /* @__PURE__ */ (0,
|
|
12395
|
-
/* @__PURE__ */ (0,
|
|
13989
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(DropdownMenu, { children: [
|
|
13990
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12396
13991
|
SidebarMenuButton,
|
|
12397
13992
|
{
|
|
12398
13993
|
tooltip: item.title,
|
|
12399
13994
|
isActive: checkIsActive(href, item),
|
|
12400
13995
|
children: [
|
|
12401
|
-
item.icon && /* @__PURE__ */ (0,
|
|
12402
|
-
/* @__PURE__ */ (0,
|
|
12403
|
-
item.badge && /* @__PURE__ */ (0,
|
|
12404
|
-
/* @__PURE__ */ (0,
|
|
13996
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(item.icon, {}),
|
|
13997
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: item.title }),
|
|
13998
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(NavBadge, { children: item.badge }),
|
|
13999
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_lucide_react60.ChevronRight, { className: "ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" })
|
|
12405
14000
|
]
|
|
12406
14001
|
}
|
|
12407
14002
|
) }),
|
|
12408
|
-
/* @__PURE__ */ (0,
|
|
12409
|
-
/* @__PURE__ */ (0,
|
|
14003
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(DropdownMenuContent, { side: "right", align: "start", sideOffset: 4, children: [
|
|
14004
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(DropdownMenuLabel, { children: [
|
|
12410
14005
|
item.title,
|
|
12411
14006
|
" ",
|
|
12412
14007
|
item.badge ? `(${item.badge})` : ""
|
|
12413
14008
|
] }),
|
|
12414
|
-
/* @__PURE__ */ (0,
|
|
12415
|
-
item.items.map((sub) => /* @__PURE__ */ (0,
|
|
14009
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(DropdownMenuSeparator, {}),
|
|
14010
|
+
item.items.map((sub) => /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
12416
14011
|
import_link.default,
|
|
12417
14012
|
{
|
|
12418
14013
|
href: sub.url,
|
|
12419
14014
|
className: `${checkIsActive(href, sub) ? "bg-secondary" : ""}`,
|
|
12420
14015
|
children: [
|
|
12421
|
-
sub.icon && /* @__PURE__ */ (0,
|
|
12422
|
-
/* @__PURE__ */ (0,
|
|
12423
|
-
sub.badge && /* @__PURE__ */ (0,
|
|
14016
|
+
sub.icon && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(sub.icon, {}),
|
|
14017
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { className: "max-w-52 text-wrap", children: sub.title }),
|
|
14018
|
+
sub.badge && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { className: "ms-auto text-xs", children: sub.badge })
|
|
12424
14019
|
]
|
|
12425
14020
|
}
|
|
12426
14021
|
) }, `${sub.title}-${sub.url}`))
|
|
@@ -12435,20 +14030,20 @@ function checkIsActive(href, item, mainNav = false) {
|
|
|
12435
14030
|
}
|
|
12436
14031
|
|
|
12437
14032
|
// src/design-system/templates/team-switcher.tsx
|
|
12438
|
-
var
|
|
14033
|
+
var import_jsx_runtime112 = require("react/jsx-runtime");
|
|
12439
14034
|
function TeamSwitcher({ teams }) {
|
|
12440
14035
|
useSidebar();
|
|
12441
14036
|
const activeTeam = teams[0];
|
|
12442
|
-
return /* @__PURE__ */ (0,
|
|
14037
|
+
return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(
|
|
12443
14038
|
SidebarMenuButton,
|
|
12444
14039
|
{
|
|
12445
14040
|
size: "lg",
|
|
12446
14041
|
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
12447
14042
|
children: [
|
|
12448
|
-
/* @__PURE__ */ (0,
|
|
12449
|
-
/* @__PURE__ */ (0,
|
|
12450
|
-
/* @__PURE__ */ (0,
|
|
12451
|
-
/* @__PURE__ */ (0,
|
|
14043
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(activeTeam.logo, { className: "size-4" }) }),
|
|
14044
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "grid flex-1 text-start text-sm leading-tight", children: [
|
|
14045
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { className: "truncate font-semibold", children: activeTeam.name }),
|
|
14046
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { className: "truncate text-xs", children: activeTeam.plan })
|
|
12452
14047
|
] })
|
|
12453
14048
|
]
|
|
12454
14049
|
}
|
|
@@ -12456,25 +14051,25 @@ function TeamSwitcher({ teams }) {
|
|
|
12456
14051
|
}
|
|
12457
14052
|
|
|
12458
14053
|
// src/design-system/templates/nav-user.tsx
|
|
12459
|
-
var
|
|
14054
|
+
var import_lucide_react62 = require("lucide-react");
|
|
12460
14055
|
|
|
12461
14056
|
// src/hooks/use-dialog-state.tsx
|
|
12462
|
-
var
|
|
14057
|
+
var import_react23 = require("react");
|
|
12463
14058
|
function useDialogState(initialState2 = null) {
|
|
12464
|
-
const [open, _setOpen] = (0,
|
|
14059
|
+
const [open, _setOpen] = (0, import_react23.useState)(initialState2);
|
|
12465
14060
|
const setOpen = (str) => _setOpen((prev) => prev === str ? null : str);
|
|
12466
14061
|
return [open, setOpen];
|
|
12467
14062
|
}
|
|
12468
14063
|
|
|
12469
14064
|
// src/components/config-drawer.tsx
|
|
12470
|
-
var
|
|
14065
|
+
var import_react24 = require("react");
|
|
12471
14066
|
var import_react_radio_group = require("@radix-ui/react-radio-group");
|
|
12472
|
-
var
|
|
14067
|
+
var import_lucide_react61 = require("lucide-react");
|
|
12473
14068
|
|
|
12474
14069
|
// src/assets/custom/icon-theme-dark.tsx
|
|
12475
|
-
var
|
|
14070
|
+
var import_jsx_runtime113 = require("react/jsx-runtime");
|
|
12476
14071
|
function IconThemeDark(props) {
|
|
12477
|
-
return /* @__PURE__ */ (0,
|
|
14072
|
+
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
12478
14073
|
"svg",
|
|
12479
14074
|
{
|
|
12480
14075
|
"data-name": "icon-theme-dark",
|
|
@@ -12482,27 +14077,27 @@ function IconThemeDark(props) {
|
|
|
12482
14077
|
viewBox: "0 0 79.86 51.14",
|
|
12483
14078
|
...props,
|
|
12484
14079
|
children: [
|
|
12485
|
-
/* @__PURE__ */ (0,
|
|
12486
|
-
/* @__PURE__ */ (0,
|
|
12487
|
-
/* @__PURE__ */ (0,
|
|
14080
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("g", { fill: "#1d2b3f", children: [
|
|
14081
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("rect", { x: 0.53, y: 0.5, width: 78.83, height: 50.14, rx: 3.5, ry: 3.5 }),
|
|
14082
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("path", { d: "M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z" })
|
|
12488
14083
|
] }),
|
|
12489
|
-
/* @__PURE__ */ (0,
|
|
14084
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12490
14085
|
"path",
|
|
12491
14086
|
{
|
|
12492
14087
|
d: "M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z",
|
|
12493
14088
|
fill: "#0d1628"
|
|
12494
14089
|
}
|
|
12495
14090
|
),
|
|
12496
|
-
/* @__PURE__ */ (0,
|
|
12497
|
-
/* @__PURE__ */ (0,
|
|
14091
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("circle", { cx: 6.7, cy: 7.04, r: 3.54, fill: "#426187" }),
|
|
14092
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12498
14093
|
"path",
|
|
12499
14094
|
{
|
|
12500
14095
|
d: "M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",
|
|
12501
14096
|
fill: "#426187"
|
|
12502
14097
|
}
|
|
12503
14098
|
),
|
|
12504
|
-
/* @__PURE__ */ (0,
|
|
12505
|
-
/* @__PURE__ */ (0,
|
|
14099
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("g", { fill: "#2a62bc", children: [
|
|
14100
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12506
14101
|
"rect",
|
|
12507
14102
|
{
|
|
12508
14103
|
x: 33.36,
|
|
@@ -12514,7 +14109,7 @@ function IconThemeDark(props) {
|
|
|
12514
14109
|
opacity: 0.32
|
|
12515
14110
|
}
|
|
12516
14111
|
),
|
|
12517
|
-
/* @__PURE__ */ (0,
|
|
14112
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12518
14113
|
"rect",
|
|
12519
14114
|
{
|
|
12520
14115
|
x: 29.64,
|
|
@@ -12526,7 +14121,7 @@ function IconThemeDark(props) {
|
|
|
12526
14121
|
opacity: 0.44
|
|
12527
14122
|
}
|
|
12528
14123
|
),
|
|
12529
|
-
/* @__PURE__ */ (0,
|
|
14124
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12530
14125
|
"rect",
|
|
12531
14126
|
{
|
|
12532
14127
|
x: 37.16,
|
|
@@ -12538,7 +14133,7 @@ function IconThemeDark(props) {
|
|
|
12538
14133
|
opacity: 0.53
|
|
12539
14134
|
}
|
|
12540
14135
|
),
|
|
12541
|
-
/* @__PURE__ */ (0,
|
|
14136
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12542
14137
|
"rect",
|
|
12543
14138
|
{
|
|
12544
14139
|
x: 41.19,
|
|
@@ -12551,8 +14146,8 @@ function IconThemeDark(props) {
|
|
|
12551
14146
|
}
|
|
12552
14147
|
)
|
|
12553
14148
|
] }),
|
|
12554
|
-
/* @__PURE__ */ (0,
|
|
12555
|
-
/* @__PURE__ */ (0,
|
|
14149
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)("circle", { cx: 62.74, cy: 16.32, r: 8, fill: "#2f5491", opacity: 0.5 }),
|
|
14150
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12556
14151
|
"path",
|
|
12557
14152
|
{
|
|
12558
14153
|
d: "M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z",
|
|
@@ -12560,7 +14155,7 @@ function IconThemeDark(props) {
|
|
|
12560
14155
|
opacity: 0.74
|
|
12561
14156
|
}
|
|
12562
14157
|
),
|
|
12563
|
-
/* @__PURE__ */ (0,
|
|
14158
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
12564
14159
|
"rect",
|
|
12565
14160
|
{
|
|
12566
14161
|
x: 29.64,
|
|
@@ -12578,9 +14173,9 @@ function IconThemeDark(props) {
|
|
|
12578
14173
|
}
|
|
12579
14174
|
|
|
12580
14175
|
// src/assets/custom/icon-theme-light.tsx
|
|
12581
|
-
var
|
|
14176
|
+
var import_jsx_runtime114 = require("react/jsx-runtime");
|
|
12582
14177
|
function IconThemeLight(props) {
|
|
12583
|
-
return /* @__PURE__ */ (0,
|
|
14178
|
+
return /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)(
|
|
12584
14179
|
"svg",
|
|
12585
14180
|
{
|
|
12586
14181
|
"data-name": "icon-theme-light",
|
|
@@ -12588,27 +14183,27 @@ function IconThemeLight(props) {
|
|
|
12588
14183
|
viewBox: "0 0 79.86 51.14",
|
|
12589
14184
|
...props,
|
|
12590
14185
|
children: [
|
|
12591
|
-
/* @__PURE__ */ (0,
|
|
12592
|
-
/* @__PURE__ */ (0,
|
|
12593
|
-
/* @__PURE__ */ (0,
|
|
14186
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsxs)("g", { fill: "#d9d9d9", children: [
|
|
14187
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("rect", { x: 0.53, y: 0.5, width: 78.83, height: 50.14, rx: 3.5, ry: 3.5 }),
|
|
14188
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("path", { d: "M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z" })
|
|
12594
14189
|
] }),
|
|
12595
|
-
/* @__PURE__ */ (0,
|
|
14190
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12596
14191
|
"path",
|
|
12597
14192
|
{
|
|
12598
14193
|
d: "M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z",
|
|
12599
14194
|
fill: "#ecedef"
|
|
12600
14195
|
}
|
|
12601
14196
|
),
|
|
12602
|
-
/* @__PURE__ */ (0,
|
|
12603
|
-
/* @__PURE__ */ (0,
|
|
14197
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("circle", { cx: 6.7, cy: 7.04, r: 3.54, fill: "#fff" }),
|
|
14198
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12604
14199
|
"path",
|
|
12605
14200
|
{
|
|
12606
14201
|
d: "M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",
|
|
12607
14202
|
fill: "#fff"
|
|
12608
14203
|
}
|
|
12609
14204
|
),
|
|
12610
|
-
/* @__PURE__ */ (0,
|
|
12611
|
-
/* @__PURE__ */ (0,
|
|
14205
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsxs)("g", { fill: "#c0c4c4", children: [
|
|
14206
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12612
14207
|
"rect",
|
|
12613
14208
|
{
|
|
12614
14209
|
x: 33.36,
|
|
@@ -12620,7 +14215,7 @@ function IconThemeLight(props) {
|
|
|
12620
14215
|
opacity: 0.32
|
|
12621
14216
|
}
|
|
12622
14217
|
),
|
|
12623
|
-
/* @__PURE__ */ (0,
|
|
14218
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12624
14219
|
"rect",
|
|
12625
14220
|
{
|
|
12626
14221
|
x: 29.64,
|
|
@@ -12632,7 +14227,7 @@ function IconThemeLight(props) {
|
|
|
12632
14227
|
opacity: 0.44
|
|
12633
14228
|
}
|
|
12634
14229
|
),
|
|
12635
|
-
/* @__PURE__ */ (0,
|
|
14230
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12636
14231
|
"rect",
|
|
12637
14232
|
{
|
|
12638
14233
|
x: 37.16,
|
|
@@ -12644,7 +14239,7 @@ function IconThemeLight(props) {
|
|
|
12644
14239
|
opacity: 0.53
|
|
12645
14240
|
}
|
|
12646
14241
|
),
|
|
12647
|
-
/* @__PURE__ */ (0,
|
|
14242
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12648
14243
|
"rect",
|
|
12649
14244
|
{
|
|
12650
14245
|
x: 41.19,
|
|
@@ -12657,12 +14252,12 @@ function IconThemeLight(props) {
|
|
|
12657
14252
|
}
|
|
12658
14253
|
)
|
|
12659
14254
|
] }),
|
|
12660
|
-
/* @__PURE__ */ (0,
|
|
12661
|
-
/* @__PURE__ */ (0,
|
|
12662
|
-
/* @__PURE__ */ (0,
|
|
12663
|
-
/* @__PURE__ */ (0,
|
|
14255
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("circle", { cx: 62.74, cy: 16.32, r: 8, fill: "#fff" }),
|
|
14256
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsxs)("g", { fill: "#d9d9d9", children: [
|
|
14257
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("path", { d: "M63.62 15.82L67 10.15c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z" }),
|
|
14258
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)("path", { d: "M67.14 10.88a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95s-1.67-2.21-2.86-2.92z" })
|
|
12664
14259
|
] }),
|
|
12665
|
-
/* @__PURE__ */ (0,
|
|
14260
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
12666
14261
|
"rect",
|
|
12667
14262
|
{
|
|
12668
14263
|
x: 29.64,
|
|
@@ -12680,12 +14275,12 @@ function IconThemeLight(props) {
|
|
|
12680
14275
|
}
|
|
12681
14276
|
|
|
12682
14277
|
// src/assets/custom/icon-theme-system.tsx
|
|
12683
|
-
var
|
|
14278
|
+
var import_jsx_runtime115 = require("react/jsx-runtime");
|
|
12684
14279
|
function IconThemeSystem({
|
|
12685
14280
|
className,
|
|
12686
14281
|
...props
|
|
12687
14282
|
}) {
|
|
12688
|
-
return /* @__PURE__ */ (0,
|
|
14283
|
+
return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
|
|
12689
14284
|
"svg",
|
|
12690
14285
|
{
|
|
12691
14286
|
"data-name": "icon-theme-system",
|
|
@@ -12698,8 +14293,8 @@ function IconThemeSystem({
|
|
|
12698
14293
|
),
|
|
12699
14294
|
...props,
|
|
12700
14295
|
children: [
|
|
12701
|
-
/* @__PURE__ */ (0,
|
|
12702
|
-
/* @__PURE__ */ (0,
|
|
14296
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)("path", { opacity: 0.2, d: "M0 0.03H22.88V51.17H0z" }),
|
|
14297
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12703
14298
|
"circle",
|
|
12704
14299
|
{
|
|
12705
14300
|
cx: 6.7,
|
|
@@ -12712,7 +14307,7 @@ function IconThemeSystem({
|
|
|
12712
14307
|
strokeMiterlimit: 10
|
|
12713
14308
|
}
|
|
12714
14309
|
),
|
|
12715
|
-
/* @__PURE__ */ (0,
|
|
14310
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12716
14311
|
"path",
|
|
12717
14312
|
{
|
|
12718
14313
|
d: "M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1z",
|
|
@@ -12721,7 +14316,7 @@ function IconThemeSystem({
|
|
|
12721
14316
|
opacity: 0.75
|
|
12722
14317
|
}
|
|
12723
14318
|
),
|
|
12724
|
-
/* @__PURE__ */ (0,
|
|
14319
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12725
14320
|
"path",
|
|
12726
14321
|
{
|
|
12727
14322
|
d: "M18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05z",
|
|
@@ -12730,7 +14325,7 @@ function IconThemeSystem({
|
|
|
12730
14325
|
opacity: 0.72
|
|
12731
14326
|
}
|
|
12732
14327
|
),
|
|
12733
|
-
/* @__PURE__ */ (0,
|
|
14328
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12734
14329
|
"path",
|
|
12735
14330
|
{
|
|
12736
14331
|
d: "M15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91z",
|
|
@@ -12739,7 +14334,7 @@ function IconThemeSystem({
|
|
|
12739
14334
|
opacity: 0.55
|
|
12740
14335
|
}
|
|
12741
14336
|
),
|
|
12742
|
-
/* @__PURE__ */ (0,
|
|
14337
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12743
14338
|
"path",
|
|
12744
14339
|
{
|
|
12745
14340
|
d: "M16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",
|
|
@@ -12748,7 +14343,7 @@ function IconThemeSystem({
|
|
|
12748
14343
|
opacity: 0.67
|
|
12749
14344
|
}
|
|
12750
14345
|
),
|
|
12751
|
-
/* @__PURE__ */ (0,
|
|
14346
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12752
14347
|
"rect",
|
|
12753
14348
|
{
|
|
12754
14349
|
x: 33.36,
|
|
@@ -12761,7 +14356,7 @@ function IconThemeSystem({
|
|
|
12761
14356
|
stroke: "none"
|
|
12762
14357
|
}
|
|
12763
14358
|
),
|
|
12764
|
-
/* @__PURE__ */ (0,
|
|
14359
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12765
14360
|
"rect",
|
|
12766
14361
|
{
|
|
12767
14362
|
x: 29.64,
|
|
@@ -12774,7 +14369,7 @@ function IconThemeSystem({
|
|
|
12774
14369
|
stroke: "none"
|
|
12775
14370
|
}
|
|
12776
14371
|
),
|
|
12777
|
-
/* @__PURE__ */ (0,
|
|
14372
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12778
14373
|
"rect",
|
|
12779
14374
|
{
|
|
12780
14375
|
x: 37.16,
|
|
@@ -12787,7 +14382,7 @@ function IconThemeSystem({
|
|
|
12787
14382
|
stroke: "none"
|
|
12788
14383
|
}
|
|
12789
14384
|
),
|
|
12790
|
-
/* @__PURE__ */ (0,
|
|
14385
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12791
14386
|
"rect",
|
|
12792
14387
|
{
|
|
12793
14388
|
x: 41.19,
|
|
@@ -12800,9 +14395,9 @@ function IconThemeSystem({
|
|
|
12800
14395
|
stroke: "none"
|
|
12801
14396
|
}
|
|
12802
14397
|
),
|
|
12803
|
-
/* @__PURE__ */ (0,
|
|
12804
|
-
/* @__PURE__ */ (0,
|
|
12805
|
-
/* @__PURE__ */ (0,
|
|
14398
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsxs)("g", { children: [
|
|
14399
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)("circle", { cx: 62.74, cy: 16.32, r: 8, opacity: 0.25 }),
|
|
14400
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12806
14401
|
"path",
|
|
12807
14402
|
{
|
|
12808
14403
|
d: "M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z",
|
|
@@ -12810,7 +14405,7 @@ function IconThemeSystem({
|
|
|
12810
14405
|
}
|
|
12811
14406
|
)
|
|
12812
14407
|
] }),
|
|
12813
|
-
/* @__PURE__ */ (0,
|
|
14408
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
12814
14409
|
"rect",
|
|
12815
14410
|
{
|
|
12816
14411
|
x: 29.64,
|
|
@@ -12831,7 +14426,7 @@ function IconThemeSystem({
|
|
|
12831
14426
|
}
|
|
12832
14427
|
|
|
12833
14428
|
// src/components/config-drawer.tsx
|
|
12834
|
-
var
|
|
14429
|
+
var import_jsx_runtime116 = require("react/jsx-runtime");
|
|
12835
14430
|
function ConfigDrawer({
|
|
12836
14431
|
trigger
|
|
12837
14432
|
}) {
|
|
@@ -12841,27 +14436,27 @@ function ConfigDrawer({
|
|
|
12841
14436
|
resetTheme();
|
|
12842
14437
|
resetColorTheme();
|
|
12843
14438
|
};
|
|
12844
|
-
return /* @__PURE__ */ (0,
|
|
12845
|
-
/* @__PURE__ */ (0,
|
|
14439
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Sheet, { children: [
|
|
14440
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(SheetTrigger, { asChild: true, children: trigger ?? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12846
14441
|
Button,
|
|
12847
14442
|
{
|
|
12848
14443
|
size: "icon",
|
|
12849
14444
|
variant: "ghost",
|
|
12850
14445
|
"aria-label": "Open theme settings",
|
|
12851
14446
|
className: "rounded-full",
|
|
12852
|
-
children: /* @__PURE__ */ (0,
|
|
14447
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.Settings, { "aria-hidden": "true" })
|
|
12853
14448
|
}
|
|
12854
14449
|
) }),
|
|
12855
|
-
/* @__PURE__ */ (0,
|
|
12856
|
-
/* @__PURE__ */ (0,
|
|
12857
|
-
/* @__PURE__ */ (0,
|
|
12858
|
-
/* @__PURE__ */ (0,
|
|
14450
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(SheetContent, { className: "flex flex-col", children: [
|
|
14451
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(SheetHeader, { className: "pb-0 text-start", children: [
|
|
14452
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(SheetTitle, { children: "Theme Settings" }),
|
|
14453
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(SheetDescription, { children: "Customize the look and feel of your dashboard." })
|
|
12859
14454
|
] }),
|
|
12860
|
-
/* @__PURE__ */ (0,
|
|
12861
|
-
/* @__PURE__ */ (0,
|
|
12862
|
-
/* @__PURE__ */ (0,
|
|
14455
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex flex-1 flex-col gap-6 overflow-hidden px-4", children: [
|
|
14456
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ThemeConfig, {}),
|
|
14457
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ThemeListSelector, {})
|
|
12863
14458
|
] }),
|
|
12864
|
-
/* @__PURE__ */ (0,
|
|
14459
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(SheetFooter, { className: "gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12865
14460
|
Button,
|
|
12866
14461
|
{
|
|
12867
14462
|
variant: "destructive",
|
|
@@ -12879,7 +14474,7 @@ function SectionTitle({
|
|
|
12879
14474
|
resetAriaLabel,
|
|
12880
14475
|
className
|
|
12881
14476
|
}) {
|
|
12882
|
-
return /* @__PURE__ */ (0,
|
|
14477
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
12883
14478
|
"div",
|
|
12884
14479
|
{
|
|
12885
14480
|
className: cn(
|
|
@@ -12888,7 +14483,7 @@ function SectionTitle({
|
|
|
12888
14483
|
),
|
|
12889
14484
|
children: [
|
|
12890
14485
|
title,
|
|
12891
|
-
showReset && onReset && /* @__PURE__ */ (0,
|
|
14486
|
+
showReset && onReset && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12892
14487
|
Button,
|
|
12893
14488
|
{
|
|
12894
14489
|
type: "button",
|
|
@@ -12897,7 +14492,7 @@ function SectionTitle({
|
|
|
12897
14492
|
className: "size-4 rounded-full",
|
|
12898
14493
|
onClick: onReset,
|
|
12899
14494
|
"aria-label": resetAriaLabel,
|
|
12900
|
-
children: /* @__PURE__ */ (0,
|
|
14495
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.RotateCcw, { className: "size-3" })
|
|
12901
14496
|
}
|
|
12902
14497
|
)
|
|
12903
14498
|
]
|
|
@@ -12908,7 +14503,7 @@ function RadioGroupItem2({
|
|
|
12908
14503
|
item,
|
|
12909
14504
|
isTheme = false
|
|
12910
14505
|
}) {
|
|
12911
|
-
return /* @__PURE__ */ (0,
|
|
14506
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
12912
14507
|
import_react_radio_group.Item,
|
|
12913
14508
|
{
|
|
12914
14509
|
value: item.value,
|
|
@@ -12916,7 +14511,7 @@ function RadioGroupItem2({
|
|
|
12916
14511
|
"aria-label": `Select ${item.label.toLowerCase()}`,
|
|
12917
14512
|
"aria-describedby": `${item.value}-description`,
|
|
12918
14513
|
children: [
|
|
12919
|
-
/* @__PURE__ */ (0,
|
|
14514
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
12920
14515
|
"div",
|
|
12921
14516
|
{
|
|
12922
14517
|
className: cn(
|
|
@@ -12928,8 +14523,8 @@ function RadioGroupItem2({
|
|
|
12928
14523
|
"aria-hidden": "false",
|
|
12929
14524
|
"aria-label": `${item.label} option preview`,
|
|
12930
14525
|
children: [
|
|
12931
|
-
/* @__PURE__ */ (0,
|
|
12932
|
-
|
|
14526
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
14527
|
+
import_lucide_react61.CircleCheck,
|
|
12933
14528
|
{
|
|
12934
14529
|
className: cn(
|
|
12935
14530
|
"size-6 fill-primary stroke-white",
|
|
@@ -12939,7 +14534,7 @@ function RadioGroupItem2({
|
|
|
12939
14534
|
"aria-hidden": "true"
|
|
12940
14535
|
}
|
|
12941
14536
|
),
|
|
12942
|
-
/* @__PURE__ */ (0,
|
|
14537
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12943
14538
|
item.icon,
|
|
12944
14539
|
{
|
|
12945
14540
|
className: cn(
|
|
@@ -12951,7 +14546,7 @@ function RadioGroupItem2({
|
|
|
12951
14546
|
]
|
|
12952
14547
|
}
|
|
12953
14548
|
),
|
|
12954
|
-
/* @__PURE__ */ (0,
|
|
14549
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12955
14550
|
"div",
|
|
12956
14551
|
{
|
|
12957
14552
|
className: "mt-1 text-xs",
|
|
@@ -12966,8 +14561,8 @@ function RadioGroupItem2({
|
|
|
12966
14561
|
}
|
|
12967
14562
|
function ThemeConfig() {
|
|
12968
14563
|
const { defaultTheme, theme, setTheme } = useTheme2();
|
|
12969
|
-
return /* @__PURE__ */ (0,
|
|
12970
|
-
/* @__PURE__ */ (0,
|
|
14564
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { children: [
|
|
14565
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12971
14566
|
SectionTitle,
|
|
12972
14567
|
{
|
|
12973
14568
|
title: "Theme",
|
|
@@ -12976,7 +14571,7 @@ function ThemeConfig() {
|
|
|
12976
14571
|
resetAriaLabel: "Reset theme preference to default"
|
|
12977
14572
|
}
|
|
12978
14573
|
),
|
|
12979
|
-
/* @__PURE__ */ (0,
|
|
14574
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
12980
14575
|
import_react_radio_group.Root,
|
|
12981
14576
|
{
|
|
12982
14577
|
value: theme,
|
|
@@ -13000,20 +14595,20 @@ function ThemeConfig() {
|
|
|
13000
14595
|
label: "Dark",
|
|
13001
14596
|
icon: IconThemeDark
|
|
13002
14597
|
}
|
|
13003
|
-
].map((item) => /* @__PURE__ */ (0,
|
|
14598
|
+
].map((item) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(RadioGroupItem2, { item, isTheme: true }, item.value))
|
|
13004
14599
|
}
|
|
13005
14600
|
),
|
|
13006
|
-
/* @__PURE__ */ (0,
|
|
14601
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { id: "theme-description", className: "sr-only", children: "Choose between system preference, light mode, or dark mode" })
|
|
13007
14602
|
] });
|
|
13008
14603
|
}
|
|
13009
14604
|
function ThemeListSelector() {
|
|
13010
|
-
const [search, setSearch] = (0,
|
|
14605
|
+
const [search, setSearch] = (0, import_react24.useState)("");
|
|
13011
14606
|
const { colorTheme, setColorTheme } = useColorTheme();
|
|
13012
14607
|
const filtered = colorThemes.filter(
|
|
13013
14608
|
(t) => t.label.toLowerCase().includes(search.toLowerCase())
|
|
13014
14609
|
);
|
|
13015
|
-
return /* @__PURE__ */ (0,
|
|
13016
|
-
/* @__PURE__ */ (0,
|
|
14610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
14611
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
13017
14612
|
SectionTitle,
|
|
13018
14613
|
{
|
|
13019
14614
|
title: "Color Theme",
|
|
@@ -13022,9 +14617,9 @@ function ThemeListSelector() {
|
|
|
13022
14617
|
resetAriaLabel: "Reset color theme to default"
|
|
13023
14618
|
}
|
|
13024
14619
|
),
|
|
13025
|
-
/* @__PURE__ */ (0,
|
|
13026
|
-
/* @__PURE__ */ (0,
|
|
13027
|
-
/* @__PURE__ */ (0,
|
|
14620
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "relative mb-2.5", children: [
|
|
14621
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.Search, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
|
|
14622
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
13028
14623
|
"input",
|
|
13029
14624
|
{
|
|
13030
14625
|
type: "text",
|
|
@@ -13040,21 +14635,21 @@ function ThemeListSelector() {
|
|
|
13040
14635
|
}
|
|
13041
14636
|
)
|
|
13042
14637
|
] }),
|
|
13043
|
-
/* @__PURE__ */ (0,
|
|
14638
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("p", { className: "mb-2 text-xs text-muted-foreground font-medium", children: [
|
|
13044
14639
|
filtered.length,
|
|
13045
14640
|
" theme",
|
|
13046
14641
|
filtered.length !== 1 ? "s" : "",
|
|
13047
14642
|
" available"
|
|
13048
14643
|
] }),
|
|
13049
|
-
/* @__PURE__ */ (0,
|
|
14644
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
13050
14645
|
"div",
|
|
13051
14646
|
{
|
|
13052
14647
|
className: "flex-1 space-y-1 overflow-y-auto rounded-lg pr-1",
|
|
13053
14648
|
role: "radiogroup",
|
|
13054
14649
|
"aria-label": "Select color theme",
|
|
13055
14650
|
children: [
|
|
13056
|
-
filtered.length === 0 && /* @__PURE__ */ (0,
|
|
13057
|
-
filtered.map((ct) => /* @__PURE__ */ (0,
|
|
14651
|
+
filtered.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("p", { className: "py-8 text-center text-sm text-muted-foreground", children: "No themes found" }),
|
|
14652
|
+
filtered.map((ct) => /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
13058
14653
|
"button",
|
|
13059
14654
|
{
|
|
13060
14655
|
onClick: () => setColorTheme(ct.name),
|
|
@@ -13066,7 +14661,7 @@ function ThemeListSelector() {
|
|
|
13066
14661
|
colorTheme === ct.name ? "bg-primary text-primary-foreground shadow-md" : "hover:bg-accent/80 hover:text-foreground border border-transparent hover:border-border/40"
|
|
13067
14662
|
),
|
|
13068
14663
|
children: [
|
|
13069
|
-
/* @__PURE__ */ (0,
|
|
14664
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { className: "flex gap-1.5 shrink-0", children: ct.colors.map((color, i) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
13070
14665
|
"span",
|
|
13071
14666
|
{
|
|
13072
14667
|
className: cn(
|
|
@@ -13077,9 +14672,9 @@ function ThemeListSelector() {
|
|
|
13077
14672
|
},
|
|
13078
14673
|
i
|
|
13079
14674
|
)) }),
|
|
13080
|
-
/* @__PURE__ */ (0,
|
|
13081
|
-
/* @__PURE__ */ (0,
|
|
13082
|
-
ct.category === "tweakcn" && /* @__PURE__ */ (0,
|
|
14675
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex items-center gap-1.5 truncate", children: [
|
|
14676
|
+
/* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "text-sm font-medium truncate", children: ct.label }),
|
|
14677
|
+
ct.category === "tweakcn" && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
13083
14678
|
"span",
|
|
13084
14679
|
{
|
|
13085
14680
|
className: cn(
|
|
@@ -13089,7 +14684,7 @@ function ThemeListSelector() {
|
|
|
13089
14684
|
}
|
|
13090
14685
|
)
|
|
13091
14686
|
] }),
|
|
13092
|
-
colorTheme === ct.name && /* @__PURE__ */ (0,
|
|
14687
|
+
colorTheme === ct.name && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react61.Check, { className: "ml-auto size-4 shrink-0", strokeWidth: 3 })
|
|
13093
14688
|
]
|
|
13094
14689
|
},
|
|
13095
14690
|
ct.name
|
|
@@ -13101,7 +14696,7 @@ function ThemeListSelector() {
|
|
|
13101
14696
|
}
|
|
13102
14697
|
|
|
13103
14698
|
// src/design-system/templates/nav-user.tsx
|
|
13104
|
-
var
|
|
14699
|
+
var import_jsx_runtime117 = require("react/jsx-runtime");
|
|
13105
14700
|
function NavUser({ user: fallbackUser }) {
|
|
13106
14701
|
const { isMobile } = useSidebar();
|
|
13107
14702
|
const [open, setOpen] = useDialogState();
|
|
@@ -13110,28 +14705,28 @@ function NavUser({ user: fallbackUser }) {
|
|
|
13110
14705
|
const userEmail = auth.user?.email || fallbackUser.email;
|
|
13111
14706
|
const userAvatar = auth.user?.picture || fallbackUser.avatar;
|
|
13112
14707
|
const userInitials = userName.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
|
|
13113
|
-
return /* @__PURE__ */ (0,
|
|
13114
|
-
/* @__PURE__ */ (0,
|
|
13115
|
-
/* @__PURE__ */ (0,
|
|
14708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(import_jsx_runtime117.Fragment, { children: [
|
|
14709
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { modal: false, children: [
|
|
14710
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
13116
14711
|
SidebarMenuButton,
|
|
13117
14712
|
{
|
|
13118
14713
|
size: "lg",
|
|
13119
14714
|
tooltip: userName,
|
|
13120
14715
|
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
13121
14716
|
children: [
|
|
13122
|
-
/* @__PURE__ */ (0,
|
|
13123
|
-
/* @__PURE__ */ (0,
|
|
13124
|
-
/* @__PURE__ */ (0,
|
|
14717
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(Avatar, { className: "h-8 w-8 rounded-lg", children: [
|
|
14718
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(AvatarImage, { src: userAvatar, alt: userName }),
|
|
14719
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(AvatarFallback, { className: "rounded-lg", children: userInitials })
|
|
13125
14720
|
] }),
|
|
13126
|
-
/* @__PURE__ */ (0,
|
|
13127
|
-
/* @__PURE__ */ (0,
|
|
13128
|
-
/* @__PURE__ */ (0,
|
|
14721
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "grid flex-1 text-start text-sm leading-tight", children: [
|
|
14722
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "truncate font-semibold", children: userName }),
|
|
14723
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "truncate text-xs text-muted-foreground", children: userEmail })
|
|
13129
14724
|
] }),
|
|
13130
|
-
/* @__PURE__ */ (0,
|
|
14725
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.ChevronsUpDown, { className: "ml-auto size-4 shrink-0" })
|
|
13131
14726
|
]
|
|
13132
14727
|
}
|
|
13133
14728
|
) }),
|
|
13134
|
-
/* @__PURE__ */ (0,
|
|
14729
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
13135
14730
|
DropdownMenuContent,
|
|
13136
14731
|
{
|
|
13137
14732
|
className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
|
|
@@ -13139,43 +14734,43 @@ function NavUser({ user: fallbackUser }) {
|
|
|
13139
14734
|
align: "end",
|
|
13140
14735
|
sideOffset: 4,
|
|
13141
14736
|
children: [
|
|
13142
|
-
/* @__PURE__ */ (0,
|
|
13143
|
-
/* @__PURE__ */ (0,
|
|
13144
|
-
/* @__PURE__ */ (0,
|
|
13145
|
-
/* @__PURE__ */ (0,
|
|
14737
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuLabel, { className: "p-0 font-normal", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex items-center gap-2 px-1 py-1.5 text-start text-sm", children: [
|
|
14738
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(Avatar, { className: "h-8 w-8 rounded-lg", children: [
|
|
14739
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(AvatarImage, { src: userAvatar, alt: userName }),
|
|
14740
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(AvatarFallback, { className: "rounded-lg", children: userInitials })
|
|
13146
14741
|
] }),
|
|
13147
|
-
/* @__PURE__ */ (0,
|
|
13148
|
-
/* @__PURE__ */ (0,
|
|
13149
|
-
/* @__PURE__ */ (0,
|
|
14742
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "grid flex-1 text-start text-sm leading-tight", children: [
|
|
14743
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "truncate font-semibold", children: userName }),
|
|
14744
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "truncate text-xs text-muted-foreground", children: userEmail })
|
|
13150
14745
|
] })
|
|
13151
14746
|
] }) }),
|
|
13152
|
-
/* @__PURE__ */ (0,
|
|
13153
|
-
/* @__PURE__ */ (0,
|
|
14747
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuSeparator, {}),
|
|
14748
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
13154
14749
|
ConfigDrawer,
|
|
13155
14750
|
{
|
|
13156
|
-
trigger: /* @__PURE__ */ (0,
|
|
13157
|
-
/* @__PURE__ */ (0,
|
|
14751
|
+
trigger: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenuItem, { onSelect: (e) => e.preventDefault(), children: [
|
|
14752
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.Palette, { className: "mr-2 h-4 w-4" }),
|
|
13158
14753
|
"Theme"
|
|
13159
14754
|
] })
|
|
13160
14755
|
}
|
|
13161
14756
|
),
|
|
13162
|
-
/* @__PURE__ */ (0,
|
|
14757
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
13163
14758
|
ConfigDrawer,
|
|
13164
14759
|
{
|
|
13165
|
-
trigger: /* @__PURE__ */ (0,
|
|
13166
|
-
/* @__PURE__ */ (0,
|
|
14760
|
+
trigger: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenuItem, { onSelect: (e) => e.preventDefault(), children: [
|
|
14761
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.Settings, { className: "mr-2 h-4 w-4" }),
|
|
13167
14762
|
"Setting"
|
|
13168
14763
|
] })
|
|
13169
14764
|
}
|
|
13170
14765
|
),
|
|
13171
|
-
/* @__PURE__ */ (0,
|
|
13172
|
-
/* @__PURE__ */ (0,
|
|
14766
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuSeparator, {}),
|
|
14767
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
13173
14768
|
DropdownMenuItem,
|
|
13174
14769
|
{
|
|
13175
14770
|
variant: "destructive",
|
|
13176
14771
|
onClick: () => setOpen(true),
|
|
13177
14772
|
children: [
|
|
13178
|
-
/* @__PURE__ */ (0,
|
|
14773
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react62.LogOut, { className: "mr-2 h-4 w-4" }),
|
|
13179
14774
|
"Sign out"
|
|
13180
14775
|
]
|
|
13181
14776
|
}
|
|
@@ -13184,19 +14779,19 @@ function NavUser({ user: fallbackUser }) {
|
|
|
13184
14779
|
}
|
|
13185
14780
|
)
|
|
13186
14781
|
] }) }) }),
|
|
13187
|
-
/* @__PURE__ */ (0,
|
|
14782
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(SignOutDialog, { open: !!open, onOpenChange: setOpen })
|
|
13188
14783
|
] });
|
|
13189
14784
|
}
|
|
13190
14785
|
|
|
13191
14786
|
// src/design-system/templates/app-sidebar.tsx
|
|
13192
|
-
var
|
|
14787
|
+
var import_jsx_runtime118 = require("react/jsx-runtime");
|
|
13193
14788
|
function AppSidebar() {
|
|
13194
14789
|
const { collapsible } = useLayout();
|
|
13195
|
-
return /* @__PURE__ */ (0,
|
|
13196
|
-
/* @__PURE__ */ (0,
|
|
13197
|
-
/* @__PURE__ */ (0,
|
|
13198
|
-
/* @__PURE__ */ (0,
|
|
13199
|
-
/* @__PURE__ */ (0,
|
|
14790
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(Sidebar, { collapsible, variant: "sidebar", children: [
|
|
14791
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(SidebarHeader, { className: "p-2 pb-1", children: [
|
|
14792
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "flex items-center justify-between gap-1", children: [
|
|
14793
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(TeamSwitcher, { teams: sidebarData2.teams }) }),
|
|
14794
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "group-data-[collapsible=icon]:hidden shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
13200
14795
|
SidebarTrigger,
|
|
13201
14796
|
{
|
|
13202
14797
|
variant: "ghost",
|
|
@@ -13205,7 +14800,7 @@ function AppSidebar() {
|
|
|
13205
14800
|
}
|
|
13206
14801
|
) })
|
|
13207
14802
|
] }),
|
|
13208
|
-
/* @__PURE__ */ (0,
|
|
14803
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "hidden group-data-[collapsible=icon]:flex justify-center pt-2 pb-1", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
13209
14804
|
SidebarTrigger,
|
|
13210
14805
|
{
|
|
13211
14806
|
variant: "ghost",
|
|
@@ -13214,37 +14809,37 @@ function AppSidebar() {
|
|
|
13214
14809
|
}
|
|
13215
14810
|
) })
|
|
13216
14811
|
] }),
|
|
13217
|
-
/* @__PURE__ */ (0,
|
|
13218
|
-
/* @__PURE__ */ (0,
|
|
14812
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(SidebarContent, { children: sidebarData2.navGroups.map((props) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(NavGroup, { ...props }, props.title)) }),
|
|
14813
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(SidebarFooter, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(NavUser, { user: sidebarData2.user }) })
|
|
13219
14814
|
] });
|
|
13220
14815
|
}
|
|
13221
14816
|
|
|
13222
14817
|
// src/design-system/templates/app-title.tsx
|
|
13223
14818
|
var import_link2 = __toESM(require("next/link"));
|
|
13224
|
-
var
|
|
13225
|
-
var
|
|
14819
|
+
var import_lucide_react63 = require("lucide-react");
|
|
14820
|
+
var import_jsx_runtime119 = require("react/jsx-runtime");
|
|
13226
14821
|
function AppTitle() {
|
|
13227
14822
|
const { setOpenMobile } = useSidebar();
|
|
13228
|
-
return /* @__PURE__ */ (0,
|
|
14823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
13229
14824
|
SidebarMenuButton,
|
|
13230
14825
|
{
|
|
13231
14826
|
size: "lg",
|
|
13232
14827
|
className: "gap-0 py-0 hover:bg-transparent active:bg-transparent",
|
|
13233
14828
|
asChild: true,
|
|
13234
|
-
children: /* @__PURE__ */ (0,
|
|
13235
|
-
/* @__PURE__ */ (0,
|
|
14829
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { children: [
|
|
14830
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
13236
14831
|
import_link2.default,
|
|
13237
14832
|
{
|
|
13238
14833
|
href: "/",
|
|
13239
14834
|
onClick: () => setOpenMobile(false),
|
|
13240
14835
|
className: "grid flex-1 text-start text-sm leading-tight",
|
|
13241
14836
|
children: [
|
|
13242
|
-
/* @__PURE__ */ (0,
|
|
13243
|
-
/* @__PURE__ */ (0,
|
|
14837
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("span", { className: "truncate font-bold", children: "Shadcn-Admin" }),
|
|
14838
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("span", { className: "truncate text-xs", children: "Vite + ShadcnUI" })
|
|
13244
14839
|
]
|
|
13245
14840
|
}
|
|
13246
14841
|
),
|
|
13247
|
-
/* @__PURE__ */ (0,
|
|
14842
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)(ToggleSidebar, {})
|
|
13248
14843
|
] })
|
|
13249
14844
|
}
|
|
13250
14845
|
) }) });
|
|
@@ -13255,7 +14850,7 @@ function ToggleSidebar({
|
|
|
13255
14850
|
...props
|
|
13256
14851
|
}) {
|
|
13257
14852
|
const { toggleSidebar } = useSidebar();
|
|
13258
|
-
return /* @__PURE__ */ (0,
|
|
14853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
13259
14854
|
Button,
|
|
13260
14855
|
{
|
|
13261
14856
|
"data-sidebar": "trigger",
|
|
@@ -13269,31 +14864,31 @@ function ToggleSidebar({
|
|
|
13269
14864
|
},
|
|
13270
14865
|
...props,
|
|
13271
14866
|
children: [
|
|
13272
|
-
/* @__PURE__ */ (0,
|
|
13273
|
-
/* @__PURE__ */ (0,
|
|
13274
|
-
/* @__PURE__ */ (0,
|
|
14867
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react63.X, { className: "md:hidden" }),
|
|
14868
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_lucide_react63.Menu, { className: "max-md:hidden" }),
|
|
14869
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
13275
14870
|
]
|
|
13276
14871
|
}
|
|
13277
14872
|
);
|
|
13278
14873
|
}
|
|
13279
14874
|
|
|
13280
14875
|
// src/design-system/templates/authenticated-layout.tsx
|
|
13281
|
-
var
|
|
14876
|
+
var import_react26 = require("react");
|
|
13282
14877
|
var import_navigation6 = require("next/navigation");
|
|
13283
14878
|
|
|
13284
14879
|
// src/components/layout/app-sidebar.tsx
|
|
13285
|
-
var
|
|
14880
|
+
var import_react25 = require("react");
|
|
13286
14881
|
|
|
13287
14882
|
// src/components/layout/nav-group.tsx
|
|
13288
14883
|
var import_link3 = __toESM(require("next/link"));
|
|
13289
14884
|
var import_navigation4 = require("next/navigation");
|
|
13290
|
-
var
|
|
13291
|
-
var
|
|
14885
|
+
var import_lucide_react64 = require("lucide-react");
|
|
14886
|
+
var import_jsx_runtime120 = require("react/jsx-runtime");
|
|
13292
14887
|
function NavGroup2({ title, items }) {
|
|
13293
14888
|
const { state, isMobile, openMobile, setOpenMobile } = useSidebar();
|
|
13294
14889
|
const href = (0, import_navigation4.usePathname)();
|
|
13295
|
-
return /* @__PURE__ */ (0,
|
|
13296
|
-
/* @__PURE__ */ (0,
|
|
14890
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(SidebarGroup, { className: cn(title === "Menu" && "pt-0"), children: [
|
|
14891
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13297
14892
|
SidebarGroupLabel,
|
|
13298
14893
|
{
|
|
13299
14894
|
className: cn(
|
|
@@ -13301,8 +14896,8 @@ function NavGroup2({ title, items }) {
|
|
|
13301
14896
|
title === "Menu" && state !== "collapsed" && "sticky top-0 z-20 bg-sidebar py-1.5"
|
|
13302
14897
|
),
|
|
13303
14898
|
children: [
|
|
13304
|
-
/* @__PURE__ */ (0,
|
|
13305
|
-
title === "Menu" && !isMobile && /* @__PURE__ */ (0,
|
|
14899
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: title }),
|
|
14900
|
+
title === "Menu" && !isMobile && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
13306
14901
|
SidebarTrigger,
|
|
13307
14902
|
{
|
|
13308
14903
|
variant: "ghost",
|
|
@@ -13310,7 +14905,7 @@ function NavGroup2({ title, items }) {
|
|
|
13310
14905
|
"aria-label": "Toggle sidebar"
|
|
13311
14906
|
}
|
|
13312
14907
|
),
|
|
13313
|
-
title === "Menu" && isMobile && openMobile && /* @__PURE__ */ (0,
|
|
14908
|
+
title === "Menu" && isMobile && openMobile && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
13314
14909
|
Button,
|
|
13315
14910
|
{
|
|
13316
14911
|
type: "button",
|
|
@@ -13319,37 +14914,37 @@ function NavGroup2({ title, items }) {
|
|
|
13319
14914
|
className: "size-6 shrink-0",
|
|
13320
14915
|
"aria-label": "Close sidebar",
|
|
13321
14916
|
onClick: () => setOpenMobile(false),
|
|
13322
|
-
children: /* @__PURE__ */ (0,
|
|
14917
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_lucide_react64.X, { className: "size-4", "aria-hidden": "true" })
|
|
13323
14918
|
}
|
|
13324
14919
|
)
|
|
13325
14920
|
]
|
|
13326
14921
|
}
|
|
13327
14922
|
),
|
|
13328
|
-
/* @__PURE__ */ (0,
|
|
14923
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenu, { children: items.map((item) => {
|
|
13329
14924
|
const key = `${item.title}-${item.url}`;
|
|
13330
14925
|
if (!item.items)
|
|
13331
|
-
return /* @__PURE__ */ (0,
|
|
14926
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuLink2, { item, href }, key);
|
|
13332
14927
|
if (item.title === "Settings" && item.items.length === 0)
|
|
13333
|
-
return /* @__PURE__ */ (0,
|
|
14928
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuSettings2, { item }, key);
|
|
13334
14929
|
if (state === "collapsed" && !isMobile)
|
|
13335
|
-
return /* @__PURE__ */ (0,
|
|
13336
|
-
return /* @__PURE__ */ (0,
|
|
14930
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuCollapsedDropdown2, { item, href }, key);
|
|
14931
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuCollapsible2, { item, href }, key);
|
|
13337
14932
|
}) })
|
|
13338
14933
|
] });
|
|
13339
14934
|
}
|
|
13340
14935
|
function NavBadge2({ children }) {
|
|
13341
|
-
return /* @__PURE__ */ (0,
|
|
14936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(Badge, { className: "rounded-full px-1 py-0 text-xs", children });
|
|
13342
14937
|
}
|
|
13343
14938
|
function SidebarMenuLink2({ item, href }) {
|
|
13344
14939
|
const { setOpenMobile } = useSidebar();
|
|
13345
14940
|
const { setShowInlineNotFound } = useLayout();
|
|
13346
|
-
return /* @__PURE__ */ (0,
|
|
14941
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
13347
14942
|
SidebarMenuButton,
|
|
13348
14943
|
{
|
|
13349
14944
|
asChild: true,
|
|
13350
14945
|
isActive: checkIsActive2(href, item),
|
|
13351
14946
|
tooltip: item.title,
|
|
13352
|
-
children: /* @__PURE__ */ (0,
|
|
14947
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13353
14948
|
import_link3.default,
|
|
13354
14949
|
{
|
|
13355
14950
|
href: item.url,
|
|
@@ -13358,9 +14953,9 @@ function SidebarMenuLink2({ item, href }) {
|
|
|
13358
14953
|
setOpenMobile(false);
|
|
13359
14954
|
},
|
|
13360
14955
|
children: [
|
|
13361
|
-
item.icon && /* @__PURE__ */ (0,
|
|
13362
|
-
/* @__PURE__ */ (0,
|
|
13363
|
-
item.badge && /* @__PURE__ */ (0,
|
|
14956
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(item.icon, {}),
|
|
14957
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: item.title }),
|
|
14958
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(NavBadge2, { children: item.badge })
|
|
13364
14959
|
]
|
|
13365
14960
|
}
|
|
13366
14961
|
)
|
|
@@ -13370,7 +14965,7 @@ function SidebarMenuLink2({ item, href }) {
|
|
|
13370
14965
|
function SidebarMenuSettings2({ item }) {
|
|
13371
14966
|
const { setOpenMobile } = useSidebar();
|
|
13372
14967
|
const { showInlineNotFound, setShowInlineNotFound } = useLayout();
|
|
13373
|
-
return /* @__PURE__ */ (0,
|
|
14968
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13374
14969
|
SidebarMenuButton,
|
|
13375
14970
|
{
|
|
13376
14971
|
tooltip: item.title,
|
|
@@ -13380,8 +14975,8 @@ function SidebarMenuSettings2({ item }) {
|
|
|
13380
14975
|
setOpenMobile(false);
|
|
13381
14976
|
},
|
|
13382
14977
|
children: [
|
|
13383
|
-
item.icon && /* @__PURE__ */ (0,
|
|
13384
|
-
/* @__PURE__ */ (0,
|
|
14978
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(item.icon, {}),
|
|
14979
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: item.title })
|
|
13385
14980
|
]
|
|
13386
14981
|
}
|
|
13387
14982
|
) });
|
|
@@ -13392,25 +14987,25 @@ function SidebarMenuCollapsible2({
|
|
|
13392
14987
|
}) {
|
|
13393
14988
|
const { setOpenMobile } = useSidebar();
|
|
13394
14989
|
const { setShowInlineNotFound } = useLayout();
|
|
13395
|
-
return /* @__PURE__ */ (0,
|
|
14990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
13396
14991
|
Collapsible,
|
|
13397
14992
|
{
|
|
13398
14993
|
asChild: true,
|
|
13399
14994
|
defaultOpen: checkIsActive2(href, item, true),
|
|
13400
14995
|
className: "group/collapsible",
|
|
13401
|
-
children: /* @__PURE__ */ (0,
|
|
13402
|
-
/* @__PURE__ */ (0,
|
|
13403
|
-
item.icon && /* @__PURE__ */ (0,
|
|
13404
|
-
/* @__PURE__ */ (0,
|
|
13405
|
-
item.badge && /* @__PURE__ */ (0,
|
|
13406
|
-
/* @__PURE__ */ (0,
|
|
14996
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(SidebarMenuItem, { children: [
|
|
14997
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(SidebarMenuButton, { tooltip: item.title, children: [
|
|
14998
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(item.icon, {}),
|
|
14999
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: item.title }),
|
|
15000
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(NavBadge2, { children: item.badge }),
|
|
15001
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_lucide_react64.ChevronRight, { className: "ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180" })
|
|
13407
15002
|
] }) }),
|
|
13408
|
-
/* @__PURE__ */ (0,
|
|
15003
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(CollapsibleContent, { className: "CollapsibleContent", children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuSub, { children: item.items.map((subItem) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuSubItem, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
13409
15004
|
SidebarMenuSubButton,
|
|
13410
15005
|
{
|
|
13411
15006
|
asChild: true,
|
|
13412
15007
|
isActive: checkIsActive2(href, subItem),
|
|
13413
|
-
children: /* @__PURE__ */ (0,
|
|
15008
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13414
15009
|
import_link3.default,
|
|
13415
15010
|
{
|
|
13416
15011
|
href: subItem.url,
|
|
@@ -13419,9 +15014,9 @@ function SidebarMenuCollapsible2({
|
|
|
13419
15014
|
setOpenMobile(false);
|
|
13420
15015
|
},
|
|
13421
15016
|
children: [
|
|
13422
|
-
subItem.icon && /* @__PURE__ */ (0,
|
|
13423
|
-
/* @__PURE__ */ (0,
|
|
13424
|
-
subItem.badge && /* @__PURE__ */ (0,
|
|
15017
|
+
subItem.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(subItem.icon, {}),
|
|
15018
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: subItem.title }),
|
|
15019
|
+
subItem.badge && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(NavBadge2, { children: subItem.badge })
|
|
13425
15020
|
]
|
|
13426
15021
|
}
|
|
13427
15022
|
)
|
|
@@ -13435,36 +15030,36 @@ function SidebarMenuCollapsedDropdown2({
|
|
|
13435
15030
|
item,
|
|
13436
15031
|
href
|
|
13437
15032
|
}) {
|
|
13438
|
-
return /* @__PURE__ */ (0,
|
|
13439
|
-
/* @__PURE__ */ (0,
|
|
15033
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(DropdownMenu, { children: [
|
|
15034
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13440
15035
|
SidebarMenuButton,
|
|
13441
15036
|
{
|
|
13442
15037
|
tooltip: item.title,
|
|
13443
15038
|
isActive: checkIsActive2(href, item),
|
|
13444
15039
|
children: [
|
|
13445
|
-
item.icon && /* @__PURE__ */ (0,
|
|
13446
|
-
/* @__PURE__ */ (0,
|
|
13447
|
-
item.badge && /* @__PURE__ */ (0,
|
|
13448
|
-
/* @__PURE__ */ (0,
|
|
15040
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(item.icon, {}),
|
|
15041
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { children: item.title }),
|
|
15042
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(NavBadge2, { children: item.badge }),
|
|
15043
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_lucide_react64.ChevronRight, { className: "ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" })
|
|
13449
15044
|
]
|
|
13450
15045
|
}
|
|
13451
15046
|
) }),
|
|
13452
|
-
/* @__PURE__ */ (0,
|
|
13453
|
-
/* @__PURE__ */ (0,
|
|
15047
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(DropdownMenuContent, { side: "right", align: "start", sideOffset: 4, children: [
|
|
15048
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(DropdownMenuLabel, { children: [
|
|
13454
15049
|
item.title,
|
|
13455
15050
|
" ",
|
|
13456
15051
|
item.badge ? `(${item.badge})` : ""
|
|
13457
15052
|
] }),
|
|
13458
|
-
/* @__PURE__ */ (0,
|
|
13459
|
-
item.items.map((sub) => /* @__PURE__ */ (0,
|
|
15053
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(DropdownMenuSeparator, {}),
|
|
15054
|
+
item.items.map((sub) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
13460
15055
|
import_link3.default,
|
|
13461
15056
|
{
|
|
13462
15057
|
href: sub.url,
|
|
13463
15058
|
className: `${checkIsActive2(href, sub) ? "bg-secondary" : ""}`,
|
|
13464
15059
|
children: [
|
|
13465
|
-
sub.icon && /* @__PURE__ */ (0,
|
|
13466
|
-
/* @__PURE__ */ (0,
|
|
13467
|
-
sub.badge && /* @__PURE__ */ (0,
|
|
15060
|
+
sub.icon && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(sub.icon, {}),
|
|
15061
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { className: "max-w-52 text-wrap", children: sub.title }),
|
|
15062
|
+
sub.badge && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { className: "ms-auto text-xs", children: sub.badge })
|
|
13468
15063
|
]
|
|
13469
15064
|
}
|
|
13470
15065
|
) }, `${sub.title}-${sub.url}`))
|
|
@@ -13479,9 +15074,9 @@ function checkIsActive2(href, item, mainNav = false) {
|
|
|
13479
15074
|
}
|
|
13480
15075
|
|
|
13481
15076
|
// src/components/layout/nav-user.tsx
|
|
13482
|
-
var
|
|
15077
|
+
var import_lucide_react65 = require("lucide-react");
|
|
13483
15078
|
var import_link4 = __toESM(require("next/link"));
|
|
13484
|
-
var
|
|
15079
|
+
var import_jsx_runtime121 = require("react/jsx-runtime");
|
|
13485
15080
|
function NavUser2({ user: fallbackUser }) {
|
|
13486
15081
|
const { isMobile } = useSidebar();
|
|
13487
15082
|
const [open, setOpen] = useDialogState();
|
|
@@ -13491,28 +15086,28 @@ function NavUser2({ user: fallbackUser }) {
|
|
|
13491
15086
|
const userEmail = auth.user?.email || fallbackUser.email;
|
|
13492
15087
|
const userAvatar = auth.user?.picture || fallbackUser.avatar;
|
|
13493
15088
|
const userInitials = userName.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
|
|
13494
|
-
return /* @__PURE__ */ (0,
|
|
13495
|
-
/* @__PURE__ */ (0,
|
|
13496
|
-
/* @__PURE__ */ (0,
|
|
15089
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment, { children: [
|
|
15090
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenu, { modal: false, children: [
|
|
15091
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
13497
15092
|
SidebarMenuButton,
|
|
13498
15093
|
{
|
|
13499
15094
|
size: "lg",
|
|
13500
15095
|
tooltip: userName,
|
|
13501
15096
|
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
13502
15097
|
children: [
|
|
13503
|
-
/* @__PURE__ */ (0,
|
|
13504
|
-
/* @__PURE__ */ (0,
|
|
13505
|
-
/* @__PURE__ */ (0,
|
|
15098
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(Avatar, { className: "h-8 w-8 rounded-lg", children: [
|
|
15099
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(AvatarImage, { src: userAvatar, alt: userName }),
|
|
15100
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(AvatarFallback, { className: "rounded-lg", children: userInitials })
|
|
13506
15101
|
] }),
|
|
13507
|
-
/* @__PURE__ */ (0,
|
|
13508
|
-
/* @__PURE__ */ (0,
|
|
13509
|
-
/* @__PURE__ */ (0,
|
|
15102
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("div", { className: "grid flex-1 text-start text-sm leading-tight", children: [
|
|
15103
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "truncate font-semibold", children: userName }),
|
|
15104
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "truncate text-xs text-muted-foreground", children: userEmail })
|
|
13510
15105
|
] }),
|
|
13511
|
-
/* @__PURE__ */ (0,
|
|
15106
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.ChevronsUpDown, { className: "ml-auto size-4 shrink-0" })
|
|
13512
15107
|
]
|
|
13513
15108
|
}
|
|
13514
15109
|
) }),
|
|
13515
|
-
/* @__PURE__ */ (0,
|
|
15110
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
13516
15111
|
DropdownMenuContent,
|
|
13517
15112
|
{
|
|
13518
15113
|
className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
|
|
@@ -13520,59 +15115,59 @@ function NavUser2({ user: fallbackUser }) {
|
|
|
13520
15115
|
align: "end",
|
|
13521
15116
|
sideOffset: 4,
|
|
13522
15117
|
children: [
|
|
13523
|
-
/* @__PURE__ */ (0,
|
|
13524
|
-
/* @__PURE__ */ (0,
|
|
13525
|
-
/* @__PURE__ */ (0,
|
|
13526
|
-
/* @__PURE__ */ (0,
|
|
15118
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuLabel, { className: "p-0 font-normal", children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("div", { className: "flex items-center gap-2 px-1 py-1.5 text-start text-sm", children: [
|
|
15119
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(Avatar, { className: "h-8 w-8 rounded-lg", children: [
|
|
15120
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(AvatarImage, { src: userAvatar, alt: userName }),
|
|
15121
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(AvatarFallback, { className: "rounded-lg", children: userInitials })
|
|
13527
15122
|
] }),
|
|
13528
|
-
/* @__PURE__ */ (0,
|
|
13529
|
-
/* @__PURE__ */ (0,
|
|
13530
|
-
/* @__PURE__ */ (0,
|
|
15123
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("div", { className: "grid flex-1 text-start text-sm leading-tight", children: [
|
|
15124
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "truncate font-semibold", children: userName }),
|
|
15125
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "truncate text-xs text-muted-foreground", children: userEmail })
|
|
13531
15126
|
] })
|
|
13532
15127
|
] }) }),
|
|
13533
|
-
/* @__PURE__ */ (0,
|
|
13534
|
-
/* @__PURE__ */ (0,
|
|
13535
|
-
/* @__PURE__ */ (0,
|
|
15128
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuSeparator, {}),
|
|
15129
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onClick: () => setShowInlineNotFound(true), children: [
|
|
15130
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.User, { className: "mr-2 h-4 w-4" }),
|
|
13536
15131
|
"My Profile"
|
|
13537
15132
|
] }),
|
|
13538
|
-
/* @__PURE__ */ (0,
|
|
13539
|
-
/* @__PURE__ */ (0,
|
|
15133
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onClick: () => setShowInlineNotFound(true), children: [
|
|
15134
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.Bell, { className: "mr-2 h-4 w-4" }),
|
|
13540
15135
|
"Notifications"
|
|
13541
15136
|
] }),
|
|
13542
|
-
/* @__PURE__ */ (0,
|
|
13543
|
-
/* @__PURE__ */ (0,
|
|
15137
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onClick: () => setShowInlineNotFound(true), children: [
|
|
15138
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.MessageCircle, { className: "mr-2 h-4 w-4" }),
|
|
13544
15139
|
"Help & Support"
|
|
13545
15140
|
] }),
|
|
13546
|
-
/* @__PURE__ */ (0,
|
|
13547
|
-
/* @__PURE__ */ (0,
|
|
13548
|
-
/* @__PURE__ */ (0,
|
|
15141
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuSeparator, {}),
|
|
15142
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onClick: () => setShowInlineNotFound(true), children: [
|
|
15143
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.CreditCard, { className: "mr-2 h-4 w-4" }),
|
|
13549
15144
|
"Subscriptions"
|
|
13550
15145
|
] }),
|
|
13551
|
-
/* @__PURE__ */ (0,
|
|
13552
|
-
/* @__PURE__ */ (0,
|
|
15146
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(import_link4.default, { href: "/apps", children: [
|
|
15147
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.ShoppingBag, { className: "mr-2 h-4 w-4" }),
|
|
13553
15148
|
"Buy Apps"
|
|
13554
15149
|
] }) }),
|
|
13555
|
-
/* @__PURE__ */ (0,
|
|
15150
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
13556
15151
|
ConfigDrawer,
|
|
13557
15152
|
{
|
|
13558
|
-
trigger: /* @__PURE__ */ (0,
|
|
13559
|
-
/* @__PURE__ */ (0,
|
|
15153
|
+
trigger: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onSelect: (e) => e.preventDefault(), children: [
|
|
15154
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.Palette, { className: "mr-2 h-4 w-4" }),
|
|
13560
15155
|
"Theme Settings"
|
|
13561
15156
|
] })
|
|
13562
15157
|
}
|
|
13563
15158
|
),
|
|
13564
|
-
/* @__PURE__ */ (0,
|
|
13565
|
-
/* @__PURE__ */ (0,
|
|
15159
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(DropdownMenuItem, { onClick: () => setShowInlineNotFound(true), children: [
|
|
15160
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.Settings, { className: "mr-2 h-4 w-4" }),
|
|
13566
15161
|
"Settings"
|
|
13567
15162
|
] }),
|
|
13568
|
-
/* @__PURE__ */ (0,
|
|
13569
|
-
/* @__PURE__ */ (0,
|
|
15163
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(DropdownMenuSeparator, {}),
|
|
15164
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
13570
15165
|
DropdownMenuItem,
|
|
13571
15166
|
{
|
|
13572
15167
|
variant: "destructive",
|
|
13573
15168
|
onClick: () => setOpen(true),
|
|
13574
15169
|
children: [
|
|
13575
|
-
/* @__PURE__ */ (0,
|
|
15170
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_lucide_react65.LogOut, { className: "mr-2 h-4 w-4" }),
|
|
13576
15171
|
"Sign out"
|
|
13577
15172
|
]
|
|
13578
15173
|
}
|
|
@@ -13581,12 +15176,12 @@ function NavUser2({ user: fallbackUser }) {
|
|
|
13581
15176
|
}
|
|
13582
15177
|
)
|
|
13583
15178
|
] }) }) }),
|
|
13584
|
-
/* @__PURE__ */ (0,
|
|
15179
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(SignOutDialog, { open: !!open, onOpenChange: setOpen })
|
|
13585
15180
|
] });
|
|
13586
15181
|
}
|
|
13587
15182
|
|
|
13588
15183
|
// src/components/layout/app-sidebar.tsx
|
|
13589
|
-
var
|
|
15184
|
+
var import_jsx_runtime122 = (
|
|
13590
15185
|
// Sidebar ko fixed "sidebar" variant par lock kiya gaya hai (floating remove).
|
|
13591
15186
|
require("react/jsx-runtime")
|
|
13592
15187
|
);
|
|
@@ -13594,7 +15189,7 @@ function AppSidebar2() {
|
|
|
13594
15189
|
const { collapsible } = useLayout();
|
|
13595
15190
|
const currentUser = useAuthStore((state) => state.auth.user);
|
|
13596
15191
|
const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore();
|
|
13597
|
-
(0,
|
|
15192
|
+
(0, import_react25.useEffect)(() => {
|
|
13598
15193
|
if (currentUser) {
|
|
13599
15194
|
fetchNotifications(currentUser.accountNo);
|
|
13600
15195
|
subscribeToNotifications(currentUser.accountNo);
|
|
@@ -13618,9 +15213,9 @@ function AppSidebar2() {
|
|
|
13618
15213
|
})
|
|
13619
15214
|
}))
|
|
13620
15215
|
};
|
|
13621
|
-
return /* @__PURE__ */ (0,
|
|
13622
|
-
/* @__PURE__ */ (0,
|
|
13623
|
-
/* @__PURE__ */ (0,
|
|
15216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)(Sidebar, { collapsible, variant: "sidebar", children: [
|
|
15217
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)(SidebarHeader, { className: "pb-0", children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(TeamSwitcher, { teams: dynamicSidebarData.teams }) }),
|
|
15218
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)("div", { className: "hidden group-data-[state=collapsed]:flex justify-center py-2", children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
13624
15219
|
SidebarTrigger,
|
|
13625
15220
|
{
|
|
13626
15221
|
variant: "ghost",
|
|
@@ -13628,15 +15223,15 @@ function AppSidebar2() {
|
|
|
13628
15223
|
"aria-label": "Toggle sidebar"
|
|
13629
15224
|
}
|
|
13630
15225
|
) }),
|
|
13631
|
-
/* @__PURE__ */ (0,
|
|
13632
|
-
/* @__PURE__ */ (0,
|
|
15226
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)(SidebarContent, { children: dynamicSidebarData.navGroups.map((props) => /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(NavGroup2, { ...props }, props.title)) }),
|
|
15227
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)(SidebarFooter, { children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(NavUser2, { user: dynamicSidebarData.user }) })
|
|
13633
15228
|
] });
|
|
13634
15229
|
}
|
|
13635
15230
|
|
|
13636
15231
|
// src/components/skip-to-main.tsx
|
|
13637
|
-
var
|
|
15232
|
+
var import_jsx_runtime123 = require("react/jsx-runtime");
|
|
13638
15233
|
function SkipToMain() {
|
|
13639
|
-
return /* @__PURE__ */ (0,
|
|
15234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
13640
15235
|
"a",
|
|
13641
15236
|
{
|
|
13642
15237
|
className: `fixed inset-s-44 z-999 -translate-y-52 bg-primary px-4 py-2 text-sm font-medium whitespace-nowrap text-primary-foreground opacity-95 shadow-sm transition hover:bg-primary/90 focus:translate-y-3 focus:transform focus-visible:ring-1 focus-visible:ring-ring`,
|
|
@@ -13648,7 +15243,7 @@ function SkipToMain() {
|
|
|
13648
15243
|
|
|
13649
15244
|
// src/features/errors/not-found-error.tsx
|
|
13650
15245
|
var import_navigation5 = require("next/navigation");
|
|
13651
|
-
var
|
|
15246
|
+
var import_jsx_runtime124 = require("react/jsx-runtime");
|
|
13652
15247
|
function NotFoundError({
|
|
13653
15248
|
className,
|
|
13654
15249
|
embedded = false,
|
|
@@ -13666,8 +15261,8 @@ function NotFoundError({
|
|
|
13666
15261
|
if (onDismiss) onDismiss();
|
|
13667
15262
|
router.push("/");
|
|
13668
15263
|
};
|
|
13669
|
-
return /* @__PURE__ */ (0,
|
|
13670
|
-
/* @__PURE__ */ (0,
|
|
15264
|
+
return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("div", { className: cn(embedded ? "min-h-96 w-full py-8" : "h-svh", className), children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("div", { className: "m-auto flex h-full w-full flex-col items-center justify-center gap-2", children: [
|
|
15265
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
13671
15266
|
"h1",
|
|
13672
15267
|
{
|
|
13673
15268
|
className: cn(
|
|
@@ -13677,31 +15272,31 @@ function NotFoundError({
|
|
|
13677
15272
|
children: "404"
|
|
13678
15273
|
}
|
|
13679
15274
|
),
|
|
13680
|
-
/* @__PURE__ */ (0,
|
|
13681
|
-
/* @__PURE__ */ (0,
|
|
15275
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { className: "font-medium", children: "Oops! Page Not Found :-(!" }),
|
|
15276
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("p", { className: "text-center text-muted-foreground", children: [
|
|
13682
15277
|
"It seems like the page you're looking for ",
|
|
13683
|
-
/* @__PURE__ */ (0,
|
|
15278
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("br", {}),
|
|
13684
15279
|
"does not exist or might have been removed."
|
|
13685
15280
|
] }),
|
|
13686
|
-
/* @__PURE__ */ (0,
|
|
13687
|
-
/* @__PURE__ */ (0,
|
|
13688
|
-
/* @__PURE__ */ (0,
|
|
15281
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("div", { className: "mt-6 flex gap-4", children: [
|
|
15282
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Button, { variant: "outline", onClick: handleGoBack, children: "Go Back" }),
|
|
15283
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Button, { onClick: handleGoHome, children: "Back to Home" })
|
|
13689
15284
|
] })
|
|
13690
15285
|
] }) });
|
|
13691
15286
|
}
|
|
13692
15287
|
|
|
13693
15288
|
// src/design-system/templates/authenticated-layout.tsx
|
|
13694
|
-
var
|
|
15289
|
+
var import_jsx_runtime125 = require("react/jsx-runtime");
|
|
13695
15290
|
function AuthenticatedLayoutContent({ children }) {
|
|
13696
15291
|
const { showInlineNotFound, setShowInlineNotFound } = useLayout();
|
|
13697
15292
|
const pathname = (0, import_navigation6.usePathname)();
|
|
13698
|
-
(0,
|
|
15293
|
+
(0, import_react26.useEffect)(() => {
|
|
13699
15294
|
setShowInlineNotFound(false);
|
|
13700
15295
|
}, [pathname, setShowInlineNotFound]);
|
|
13701
|
-
return /* @__PURE__ */ (0,
|
|
13702
|
-
/* @__PURE__ */ (0,
|
|
13703
|
-
/* @__PURE__ */ (0,
|
|
13704
|
-
/* @__PURE__ */ (0,
|
|
15296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment, { children: [
|
|
15297
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)(SkipToMain, {}),
|
|
15298
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)(AppSidebar2, {}),
|
|
15299
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
|
|
13705
15300
|
SidebarInset,
|
|
13706
15301
|
{
|
|
13707
15302
|
className: cn(
|
|
@@ -13709,7 +15304,7 @@ function AuthenticatedLayoutContent({ children }) {
|
|
|
13709
15304
|
"has-[[data-layout=fixed]]:h-svh has-data-[layout=fixed]:h-svh",
|
|
13710
15305
|
"peer-data-[variant=inset]:has-data-[layout=fixed]:h-[calc(100svh-(var(--spacing)*4))]"
|
|
13711
15306
|
),
|
|
13712
|
-
children: showInlineNotFound ? /* @__PURE__ */ (0,
|
|
15307
|
+
children: showInlineNotFound ? /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
|
|
13713
15308
|
NotFoundError,
|
|
13714
15309
|
{
|
|
13715
15310
|
embedded: true,
|
|
@@ -13721,24 +15316,24 @@ function AuthenticatedLayoutContent({ children }) {
|
|
|
13721
15316
|
] });
|
|
13722
15317
|
}
|
|
13723
15318
|
function AuthenticatedLayout({ children }) {
|
|
13724
|
-
const [defaultOpen, setDefaultOpen] = (0,
|
|
13725
|
-
const [isMounted, setIsMounted] = (0,
|
|
13726
|
-
(0,
|
|
15319
|
+
const [defaultOpen, setDefaultOpen] = (0, import_react26.useState)(true);
|
|
15320
|
+
const [isMounted, setIsMounted] = (0, import_react26.useState)(false);
|
|
15321
|
+
(0, import_react26.useEffect)(() => {
|
|
13727
15322
|
setDefaultOpen(getCookie("sidebar_state") !== "false");
|
|
13728
15323
|
setIsMounted(true);
|
|
13729
15324
|
}, []);
|
|
13730
15325
|
if (!isMounted) {
|
|
13731
15326
|
return null;
|
|
13732
15327
|
}
|
|
13733
|
-
return /* @__PURE__ */ (0,
|
|
15328
|
+
return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(SearchProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(LayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(SidebarProvider, { defaultOpen, children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(AuthenticatedLayoutContent, { children }) }) }) });
|
|
13734
15329
|
}
|
|
13735
15330
|
|
|
13736
15331
|
// src/design-system/templates/header.tsx
|
|
13737
|
-
var
|
|
13738
|
-
var
|
|
15332
|
+
var import_react27 = require("react");
|
|
15333
|
+
var import_jsx_runtime126 = require("react/jsx-runtime");
|
|
13739
15334
|
function Header2({ className, fixed, children, ...props }) {
|
|
13740
|
-
const [offset, setOffset] = (0,
|
|
13741
|
-
(0,
|
|
15335
|
+
const [offset, setOffset] = (0, import_react27.useState)(0);
|
|
15336
|
+
(0, import_react27.useEffect)(() => {
|
|
13742
15337
|
const onScroll = () => {
|
|
13743
15338
|
setOffset(document.body.scrollTop || document.documentElement.scrollTop);
|
|
13744
15339
|
};
|
|
@@ -13747,7 +15342,7 @@ function Header2({ className, fixed, children, ...props }) {
|
|
|
13747
15342
|
}, []);
|
|
13748
15343
|
return (
|
|
13749
15344
|
// Page header container: fixed mode me top par sticky behavior deta hai.
|
|
13750
|
-
/* @__PURE__ */ (0,
|
|
15345
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
|
|
13751
15346
|
"header",
|
|
13752
15347
|
{
|
|
13753
15348
|
className: cn(
|
|
@@ -13757,7 +15352,7 @@ function Header2({ className, fixed, children, ...props }) {
|
|
|
13757
15352
|
className
|
|
13758
15353
|
),
|
|
13759
15354
|
...props,
|
|
13760
|
-
children: /* @__PURE__ */ (0,
|
|
15355
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)(
|
|
13761
15356
|
"div",
|
|
13762
15357
|
{
|
|
13763
15358
|
className: cn(
|
|
@@ -13766,7 +15361,7 @@ function Header2({ className, fixed, children, ...props }) {
|
|
|
13766
15361
|
offset > 10 && fixed && "after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg"
|
|
13767
15362
|
),
|
|
13768
15363
|
children: [
|
|
13769
|
-
/* @__PURE__ */ (0,
|
|
15364
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(AppLogo, { className: "shrink-0 md:hidden" }),
|
|
13770
15365
|
children
|
|
13771
15366
|
]
|
|
13772
15367
|
}
|
|
@@ -13777,9 +15372,9 @@ function Header2({ className, fixed, children, ...props }) {
|
|
|
13777
15372
|
}
|
|
13778
15373
|
|
|
13779
15374
|
// src/design-system/templates/main.tsx
|
|
13780
|
-
var
|
|
15375
|
+
var import_jsx_runtime127 = require("react/jsx-runtime");
|
|
13781
15376
|
function Main({ fixed, className, fluid, ...props }) {
|
|
13782
|
-
return /* @__PURE__ */ (0,
|
|
15377
|
+
return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
|
|
13783
15378
|
"main",
|
|
13784
15379
|
{
|
|
13785
15380
|
"data-layout": fixed ? "fixed" : "auto",
|
|
@@ -13797,21 +15392,21 @@ function Main({ fixed, className, fluid, ...props }) {
|
|
|
13797
15392
|
}
|
|
13798
15393
|
|
|
13799
15394
|
// src/design-system/templates/sidebar-search.tsx
|
|
13800
|
-
var
|
|
13801
|
-
var
|
|
15395
|
+
var import_lucide_react66 = require("lucide-react");
|
|
15396
|
+
var import_jsx_runtime128 = require("react/jsx-runtime");
|
|
13802
15397
|
function SidebarSearch() {
|
|
13803
15398
|
const { setOpen } = useSearch();
|
|
13804
|
-
return /* @__PURE__ */ (0,
|
|
15399
|
+
return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
|
|
13805
15400
|
SidebarMenuButton,
|
|
13806
15401
|
{
|
|
13807
15402
|
onClick: () => setOpen(true),
|
|
13808
15403
|
tooltip: "Search (\u2318K)",
|
|
13809
15404
|
className: "bg-sidebar-accent/50 hover:bg-sidebar-accent border border-sidebar-border/60 text-muted-foreground hover:text-foreground",
|
|
13810
15405
|
children: [
|
|
13811
|
-
/* @__PURE__ */ (0,
|
|
13812
|
-
/* @__PURE__ */ (0,
|
|
13813
|
-
/* @__PURE__ */ (0,
|
|
13814
|
-
/* @__PURE__ */ (0,
|
|
15406
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react66.SearchIcon, { className: "size-4 shrink-0" }),
|
|
15407
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "flex-1 text-left text-xs font-normal group-data-[collapsible=icon]:hidden", children: "Search..." }),
|
|
15408
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("kbd", { className: "pointer-events-none hidden h-4 select-none items-center gap-0.5 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium opacity-100 group-data-[collapsible=icon]:hidden sm:flex", children: [
|
|
15409
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "text-[10px]", children: "\u2318" }),
|
|
13815
15410
|
"K"
|
|
13816
15411
|
] })
|
|
13817
15412
|
]
|
|
@@ -13821,8 +15416,8 @@ function SidebarSearch() {
|
|
|
13821
15416
|
|
|
13822
15417
|
// src/design-system/templates/top-nav.tsx
|
|
13823
15418
|
var import_link5 = __toESM(require("next/link"));
|
|
13824
|
-
var
|
|
13825
|
-
var
|
|
15419
|
+
var import_lucide_react67 = require("lucide-react");
|
|
15420
|
+
var import_jsx_runtime129 = require("react/jsx-runtime");
|
|
13826
15421
|
function TopNav({ className, links, ...props }) {
|
|
13827
15422
|
const renderLink = ({
|
|
13828
15423
|
title,
|
|
@@ -13833,7 +15428,7 @@ function TopNav({ className, links, ...props }) {
|
|
|
13833
15428
|
}) => {
|
|
13834
15429
|
const className2 = `text-sm font-medium transition-colors hover:text-primary ${isActive ? "" : "text-muted-foreground"}`;
|
|
13835
15430
|
if (onClick) {
|
|
13836
|
-
return /* @__PURE__ */ (0,
|
|
15431
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
13837
15432
|
"button",
|
|
13838
15433
|
{
|
|
13839
15434
|
type: "button",
|
|
@@ -13845,7 +15440,7 @@ function TopNav({ className, links, ...props }) {
|
|
|
13845
15440
|
title
|
|
13846
15441
|
);
|
|
13847
15442
|
}
|
|
13848
|
-
return /* @__PURE__ */ (0,
|
|
15443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
13849
15444
|
import_link5.default,
|
|
13850
15445
|
{
|
|
13851
15446
|
href,
|
|
@@ -13856,9 +15451,9 @@ function TopNav({ className, links, ...props }) {
|
|
|
13856
15451
|
title
|
|
13857
15452
|
);
|
|
13858
15453
|
};
|
|
13859
|
-
return /* @__PURE__ */ (0,
|
|
13860
|
-
/* @__PURE__ */ (0,
|
|
13861
|
-
/* @__PURE__ */ (0,
|
|
15454
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment, { children: [
|
|
15455
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(DropdownMenu, { modal: false, children: [
|
|
15456
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
13862
15457
|
Button,
|
|
13863
15458
|
{
|
|
13864
15459
|
size: "icon",
|
|
@@ -13868,18 +15463,18 @@ function TopNav({ className, links, ...props }) {
|
|
|
13868
15463
|
className
|
|
13869
15464
|
),
|
|
13870
15465
|
children: [
|
|
13871
|
-
/* @__PURE__ */ (0,
|
|
13872
|
-
/* @__PURE__ */ (0,
|
|
15466
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(import_lucide_react67.Menu, {}),
|
|
15467
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: "sr-only", children: "Toggle navigation menu" })
|
|
13873
15468
|
]
|
|
13874
15469
|
}
|
|
13875
15470
|
) }),
|
|
13876
|
-
/* @__PURE__ */ (0,
|
|
15471
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(DropdownMenuContent, { side: "bottom", align: "start", children: links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
13877
15472
|
DropdownMenuItem,
|
|
13878
15473
|
{
|
|
13879
15474
|
disabled: link.disabled,
|
|
13880
15475
|
onClick: link.onClick,
|
|
13881
15476
|
asChild: !link.onClick,
|
|
13882
|
-
children: link.onClick ? /* @__PURE__ */ (0,
|
|
15477
|
+
children: link.onClick ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: !link.isActive ? "text-muted-foreground" : "", children: link.title }) : /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
13883
15478
|
import_link5.default,
|
|
13884
15479
|
{
|
|
13885
15480
|
href: link.href,
|
|
@@ -13892,7 +15487,7 @@ function TopNav({ className, links, ...props }) {
|
|
|
13892
15487
|
link.title
|
|
13893
15488
|
)) })
|
|
13894
15489
|
] }),
|
|
13895
|
-
/* @__PURE__ */ (0,
|
|
15490
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
13896
15491
|
"nav",
|
|
13897
15492
|
{
|
|
13898
15493
|
className: cn(
|
|
@@ -14075,7 +15670,10 @@ function TopNav({ className, links, ...props }) {
|
|
|
14075
15670
|
FieldSeparator,
|
|
14076
15671
|
FieldSet,
|
|
14077
15672
|
FieldTitle,
|
|
15673
|
+
FileCardItem,
|
|
15674
|
+
FileUploadForm,
|
|
14078
15675
|
FilterBar,
|
|
15676
|
+
FolderTreeItem,
|
|
14079
15677
|
Form,
|
|
14080
15678
|
FormControl,
|
|
14081
15679
|
FormDescription,
|
|
@@ -14228,6 +15826,7 @@ function TopNav({ className, links, ...props }) {
|
|
|
14228
15826
|
Spinner,
|
|
14229
15827
|
Stats01,
|
|
14230
15828
|
StatusBadge,
|
|
15829
|
+
StorageStatCard,
|
|
14231
15830
|
Switch,
|
|
14232
15831
|
Table,
|
|
14233
15832
|
TableBody,
|
|
@@ -14255,12 +15854,15 @@ function TopNav({ className, links, ...props }) {
|
|
|
14255
15854
|
TooltipTrigger,
|
|
14256
15855
|
TopNav,
|
|
14257
15856
|
TypingIndicator,
|
|
15857
|
+
UserFileCardsView,
|
|
14258
15858
|
WizardTemplate,
|
|
14259
15859
|
WorkspaceTemplate,
|
|
14260
15860
|
badgeVariants,
|
|
14261
15861
|
buttonGroupVariants,
|
|
14262
15862
|
buttonVariants,
|
|
14263
15863
|
downloadQrCode,
|
|
15864
|
+
formatBytes,
|
|
15865
|
+
getFileCategoryTheme,
|
|
14264
15866
|
navigationMenuTriggerStyle,
|
|
14265
15867
|
sidebarData,
|
|
14266
15868
|
statusBadgeVariants,
|