@retinalabsllc/zairusjs 21.1.4 → 21.1.6

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 CHANGED
@@ -59,15 +59,20 @@ __export(index_exports, {
59
59
  PipleAuth: () => PipleAuth,
60
60
  PlatformFeatures: () => PlatformFeatures,
61
61
  PortfolioHero: () => PortfolioHero,
62
+ RootSidebar: () => RootSidebar,
62
63
  TextInput: () => TextInput,
63
64
  ThreeDActionButton: () => ThreeDActionButton,
64
65
  ThreeDButton: () => ThreeDButton,
66
+ UniversalApplicationPage2: () => UniversalApplicationPage2,
67
+ UniversalApplicationsPage: () => UniversalApplicationsPage,
65
68
  UniversalBuyCryptoPage: () => UniversalBuyCryptoPage,
66
69
  UniversalCardActionPage: () => UniversalCardActionPage,
67
70
  UniversalCardPage: () => UniversalCardPage,
68
71
  UniversalCreateHuddle: () => UniversalCreateHuddle,
72
+ UniversalDeveloperSettings: () => UniversalDeveloperSettings,
69
73
  UniversalErrorView: () => UniversalErrorView,
70
74
  UniversalHome2: () => UniversalHome2,
75
+ UniversalHome3: () => UniversalHome3,
71
76
  UniversalHomeView: () => UniversalHomeView,
72
77
  UniversalHuddleDetails: () => UniversalHuddleDetails,
73
78
  UniversalHuddlesPage: () => UniversalHuddlesPage,
@@ -79,6 +84,7 @@ __export(index_exports, {
79
84
  UniversalRewardPage: () => UniversalRewardPage,
80
85
  UniversalSecurityPage: () => UniversalSecurityPage,
81
86
  UniversalSettings: () => UniversalSettings,
87
+ UniversalSettings2: () => UniversalSettings2,
82
88
  UniversalSidebar: () => UniversalSidebar,
83
89
  UniversalTransactionPage: () => UniversalTransactionPage,
84
90
  UniversalVerificationPage: () => UniversalVerificationPage,
@@ -6326,6 +6332,1004 @@ var HomeHuddleCalendar = ({
6326
6332
  }
6327
6333
  ));
6328
6334
  };
6335
+
6336
+ // src/components/UniversalApplicationsPage.tsx
6337
+ var import_react95 = __toESM(require("react"));
6338
+ var import_react96 = require("@hugeicons/react");
6339
+ var import_core_free_icons37 = require("@hugeicons/core-free-icons");
6340
+ var formatType = (type) => {
6341
+ if (!type) return "";
6342
+ return type.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
6343
+ };
6344
+ var ApplicationIcon = ({ icon, sizeClass = "w-10 h-10" }) => {
6345
+ return /* @__PURE__ */ import_react95.default.createElement("div", { className: `relative shrink-0 aspect-square ${sizeClass}` }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "w-full h-full aspect-square rounded-lg bg-neutral-50 flex items-center justify-center overflow-hidden" }, icon ? /* @__PURE__ */ import_react95.default.createElement(import_react96.HugeiconsIcon, { icon, size: 20, className: "text-stone-500" }) : /* @__PURE__ */ import_react95.default.createElement("div", { className: "w-4 h-4 rounded-sm bg-stone-300" })));
6346
+ };
6347
+ var PageSpinner9 = () => /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react95.default.createElement(import_react96.HugeiconsIcon, { icon: import_core_free_icons37.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
6348
+ var UniversalApplicationsPage = ({
6349
+ headerTitle,
6350
+ headerDescription,
6351
+ applications,
6352
+ isLoading,
6353
+ currentPage,
6354
+ totalPages,
6355
+ onPageChange,
6356
+ onApplicationClick,
6357
+ onCreateApplication
6358
+ }) => {
6359
+ return /* @__PURE__ */ import_react95.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-row items-center justify-between gap-4" }, /* @__PURE__ */ import_react95.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, headerTitle), /* @__PURE__ */ import_react95.default.createElement(
6360
+ "button",
6361
+ {
6362
+ onClick: () => onCreateApplication?.(),
6363
+ className: "shrink-0 px-4 py-1.5 border border-stone-200 text-black text-xs tracking-wide rounded-full hover:bg-stone-50 transition-colors outline-none"
6364
+ },
6365
+ "Create new"
6366
+ )), headerDescription && /* @__PURE__ */ import_react95.default.createElement("p", { className: "text-xs text-stone-500" }, headerDescription)), /* @__PURE__ */ import_react95.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react95.default.createElement(PageSpinner9, null) : /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react95.default.createElement("div", null, applications.length === 0 ? /* @__PURE__ */ import_react95.default.createElement("p", { className: "text-xs text-stone-400 py-6 text-center" }, "No applications available") : applications.map((app) => /* @__PURE__ */ import_react95.default.createElement(
6367
+ "div",
6368
+ {
6369
+ key: app.id,
6370
+ onClick: () => onApplicationClick(app.id),
6371
+ className: "flex flex-row items-center gap-4 py-2 hover:bg-stone-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl"
6372
+ },
6373
+ /* @__PURE__ */ import_react95.default.createElement(ApplicationIcon, { icon: app.icon }),
6374
+ /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ import_react95.default.createElement("p", { className: "text-sm text-black tracking-tight truncate" }, formatType(app.type)), /* @__PURE__ */ import_react95.default.createElement("span", { className: "text-xs text-stone-500 truncate block mt-0.5" }, app.timeString)),
6375
+ /* @__PURE__ */ import_react95.default.createElement(import_react96.HugeiconsIcon, { icon: import_core_free_icons37.ArrowRight01Icon, size: 14, className: "shrink-0 text-stone-400" })
6376
+ ))), /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react95.default.createElement("span", { className: "text-xs text-stone-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react95.default.createElement(
6377
+ "button",
6378
+ {
6379
+ onClick: () => onPageChange(currentPage - 1),
6380
+ disabled: currentPage <= 1 || isLoading,
6381
+ className: "p-2 bg-white border border-stone-200 rounded-full text-black hover:bg-stone-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
6382
+ },
6383
+ /* @__PURE__ */ import_react95.default.createElement(import_react96.HugeiconsIcon, { icon: import_core_free_icons37.ArrowLeft01Icon, size: 14 })
6384
+ ), /* @__PURE__ */ import_react95.default.createElement(
6385
+ "button",
6386
+ {
6387
+ onClick: () => onPageChange(currentPage + 1),
6388
+ disabled: currentPage >= totalPages || isLoading || totalPages === 0,
6389
+ className: "p-2 bg-white border border-stone-200 rounded-full text-black hover:bg-stone-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
6390
+ },
6391
+ /* @__PURE__ */ import_react95.default.createElement(import_react96.HugeiconsIcon, { icon: import_core_free_icons37.ArrowRight01Icon, size: 14 })
6392
+ )))))));
6393
+ };
6394
+
6395
+ // src/components/UniversalHome3.tsx
6396
+ var import_react97 = __toESM(require("react"));
6397
+ var import_navigation8 = require("next/navigation");
6398
+ var import_react98 = require("@hugeicons/react");
6399
+ var import_react_hot_toast18 = __toESM(require("react-hot-toast"));
6400
+ var import_core_free_icons38 = require("@hugeicons/core-free-icons");
6401
+ var UniversalHome3 = ({
6402
+ createApplicationAction,
6403
+ checkApplicationAction,
6404
+ notifications = [],
6405
+ notificationPage = 1,
6406
+ notificationTotalPages = 1,
6407
+ isNotifsLoading = false,
6408
+ onNotificationPageChange,
6409
+ onNotificationClick,
6410
+ onResolveInvite,
6411
+ formatNotifDate,
6412
+ customContent,
6413
+ applicationsProps
6414
+ }) => {
6415
+ const [showNotifDialog, setShowNotifDialog] = (0, import_react97.useState)(false);
6416
+ const [selectedNotif, setSelectedNotif] = (0, import_react97.useState)(null);
6417
+ const [isResolving, setIsResolving] = (0, import_react97.useState)(false);
6418
+ const router = (0, import_navigation8.useRouter)();
6419
+ const hasUnreadNotifs = notifications.some((n) => !n.isRead);
6420
+ const handleResolve = async (resolution) => {
6421
+ if (!onResolveInvite || !selectedNotif) return;
6422
+ setIsResolving(true);
6423
+ try {
6424
+ await onResolveInvite(selectedNotif, resolution);
6425
+ window.location.reload();
6426
+ } catch (error) {
6427
+ import_react_hot_toast18.default.error("Failed to process invitation");
6428
+ setIsResolving(false);
6429
+ }
6430
+ };
6431
+ return /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center justify-between w-full pb-4" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react97.default.createElement(
6432
+ "button",
6433
+ {
6434
+ onClick: () => window.dispatchEvent(new Event("open-sidebar")),
6435
+ className: "md:hidden flex items-center justify-center w-7 h-7 bg-white rounded-full text-black transition-all duration-300 outline-none hover:bg-stone-50",
6436
+ "aria-label": "Open Menu"
6437
+ },
6438
+ /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.SidebarLeft01Icon, size: 16 })
6439
+ )), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ import_react97.default.createElement(
6440
+ "button",
6441
+ {
6442
+ onClick: () => router.push("/app/ai"),
6443
+ className: "relative w-7 h-7 flex items-center justify-center rounded-full bg-white outline-none hover:bg-stone-50 transition-colors"
6444
+ },
6445
+ /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.Robot01Icon, size: 16, className: "text-black" })
6446
+ ), /* @__PURE__ */ import_react97.default.createElement(
6447
+ "button",
6448
+ {
6449
+ onClick: () => {
6450
+ setShowNotifDialog(true);
6451
+ setSelectedNotif(null);
6452
+ },
6453
+ className: "relative w-7 h-7 flex items-center justify-center rounded-full bg-white outline-none hover:bg-stone-50 transition-colors"
6454
+ },
6455
+ /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.Notification01Icon, size: 16, className: "text-black" }),
6456
+ hasUnreadNotifs && /* @__PURE__ */ import_react97.default.createElement("span", { className: "absolute top-2.5 right-2.5 w-2 h-2 bg-[#d97757] rounded-full border border-white" })
6457
+ ))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-full pb-6 flex flex-col gap-4" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ import_react97.default.createElement(
6458
+ "div",
6459
+ {
6460
+ onClick: createApplicationAction?.onClick,
6461
+ className: "bg-[#d97757] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
6462
+ },
6463
+ /* @__PURE__ */ import_react97.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-sm sm:text-sm text-white leading-tight" }, "New", /* @__PURE__ */ import_react97.default.createElement("br", null), /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-white/70" }, "Application")), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-8 h-8 rounded-full bg-white/10 flex items-center justify-center" }, /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.ArrowUpRight01Icon, size: 16, className: "text-white" }))),
6464
+ /* @__PURE__ */ import_react97.default.createElement(
6465
+ "img",
6466
+ {
6467
+ src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/cal_b.avif",
6468
+ alt: "New Application",
6469
+ className: "absolute bottom-4 right-2 translate-x-1/4 translate-y-1/2 w-32 h-auto object-contain z-0 pointer-events-none opacity-30"
6470
+ }
6471
+ )
6472
+ ), /* @__PURE__ */ import_react97.default.createElement(
6473
+ "div",
6474
+ {
6475
+ onClick: checkApplicationAction?.onClick,
6476
+ className: "bg-[#ffffff] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
6477
+ },
6478
+ /* @__PURE__ */ import_react97.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-sm sm:text-sm text-black leading-tight" }, "Check", /* @__PURE__ */ import_react97.default.createElement("br", null), /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-black/60" }, "Application")), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-8 h-8 rounded-full bg-black/5 flex items-center justify-center" }, /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.ArrowRight01Icon, size: 16, className: "text-black" }))),
6479
+ /* @__PURE__ */ import_react97.default.createElement(
6480
+ "img",
6481
+ {
6482
+ src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/cam_c.avif",
6483
+ alt: "Check Application",
6484
+ className: "absolute bottom-4 right-2 translate-x-1/4 translate-y-1/2 w-32 h-auto object-contain z-0 pointer-events-none opacity-30"
6485
+ }
6486
+ )
6487
+ ))), customContent && /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-full" }, customContent), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ import_react97.default.createElement(
6488
+ UniversalApplicationsPage,
6489
+ {
6490
+ ...applicationsProps
6491
+ }
6492
+ )), showNotifDialog && /* @__PURE__ */ import_react97.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowNotifDialog(false) }), /* @__PURE__ */ import_react97.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[80vh] h-auto" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, selectedNotif ? /* @__PURE__ */ import_react97.default.createElement("button", { onClick: () => setSelectedNotif(null), disabled: isResolving, className: "text-[#d97757] hover:text-[#d97757] transition-colors outline-none flex items-center gap-2 text-xs tracking-widest disabled:opacity-50" }, /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.ArrowLeft01Icon, size: 14 }), " Back") : /* @__PURE__ */ import_react97.default.createElement("h3", { className: "text-sm text-black tracking-tight flex items-center gap-2" }, "Notifications"), /* @__PURE__ */ import_react97.default.createElement("button", { onClick: () => setShowNotifDialog(false), disabled: isResolving, className: "text-stone-400 hover:text-black transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2 relative" }, isNotifsLoading && !selectedNotif && /* @__PURE__ */ import_react97.default.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center" }, /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.Loading03Icon, size: 28, className: "animate-spin text-black" })), selectedNotif ? /* @__PURE__ */ import_react97.default.createElement("div", { className: "p-4 text-left" }, selectedNotif.type === "HUDDLE_INVITE" && selectedNotif.meta_json?.action === "RESOLVE_INVITE" && selectedNotif.meta_json?.completed ? /* @__PURE__ */ import_react97.default.createElement("div", { className: "" }) : /* @__PURE__ */ import_react97.default.createElement("h4", { className: "text-sm text-black mb-1" }, selectedNotif.title), /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-xs text-stone-400 tracking-widest mb-4 block" }, formatNotifDate(selectedNotif.createdAt)), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-xs text-stone-600 leading-relaxed whitespace-pre-wrap" }, selectedNotif.message), selectedNotif.type === "HUDDLE_INVITE" && selectedNotif.meta_json?.action === "RESOLVE_INVITE" && /* @__PURE__ */ import_react97.default.createElement("div", { className: `mt-8 flex gap-3 pt-6 ${selectedNotif.meta_json?.completed ? "opacity-40 pointer-events-none cursor-not-allowed" : ""}` }, /* @__PURE__ */ import_react97.default.createElement(
6493
+ "button",
6494
+ {
6495
+ onClick: () => handleResolve("ACCEPTED"),
6496
+ disabled: isResolving || selectedNotif.meta_json?.completed,
6497
+ className: "flex-1 py-2.5 rounded-full bg-black text-white text-xs tracking-wide transition-all outline-none hover:bg-stone-800 flex justify-center items-center disabled:opacity-50"
6498
+ },
6499
+ isResolving ? /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.Loading03Icon, className: "animate-spin", size: 16 }) : "Accept"
6500
+ ), /* @__PURE__ */ import_react97.default.createElement(
6501
+ "button",
6502
+ {
6503
+ onClick: () => handleResolve("REJECTED"),
6504
+ disabled: isResolving || selectedNotif.meta_json?.completed,
6505
+ className: "flex-1 py-2.5 rounded-full bg-white border border-stone-200 text-black text-xs tracking-wide transition-all outline-none hover:bg-stone-50 flex justify-center items-center disabled:opacity-50"
6506
+ },
6507
+ "Reject"
6508
+ ))) : /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex flex-col divide-y divide-stone-50/50" }, notifications?.length === 0 && !isNotifsLoading ? /* @__PURE__ */ import_react97.default.createElement("div", { className: "p-8 text-center text-xs text-stone-400" }, "You have no notifications.") : notifications?.map((notif) => /* @__PURE__ */ import_react97.default.createElement(
6509
+ "div",
6510
+ {
6511
+ key: notif.id,
6512
+ onClick: () => {
6513
+ setSelectedNotif(notif);
6514
+ onNotificationClick?.(notif);
6515
+ },
6516
+ className: `p-3 flex items-start gap-3 rounded-xl cursor-pointer transition-colors ${isNotifsLoading ? "opacity-50 pointer-events-none" : "hover:bg-stone-50"}`
6517
+ },
6518
+ /* @__PURE__ */ import_react97.default.createElement("div", { className: "mt-1.5 shrink-0" }, !notif.isRead ? /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-1.5 h-1.5 bg-[#d97757] rounded-full" }) : /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-1.5 h-1.5 bg-transparent" })),
6519
+ /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex-1 min-w-0 text-left" }, /* @__PURE__ */ import_react97.default.createElement("h5", { className: `text-xs truncate ${notif.isRead ? "text-stone-500" : "text-black"}` }, notif.title), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-xs text-stone-400 truncate mt-0.5" }, notif.message), /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-xs text-stone-400 tracking-widest mt-2 block" }, formatNotifDate(notif.createdAt)))
6520
+ )))), !selectedNotif && /* @__PURE__ */ import_react97.default.createElement("div", { className: "p-4 flex items-center justify-between shrink-0" }, /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-xs text-stone-400 tracking-widest" }, "Page ", notificationPage, " of ", notificationTotalPages === 0 ? 1 : notificationTotalPages), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ import_react97.default.createElement(
6521
+ "button",
6522
+ {
6523
+ disabled: notificationPage <= 1 || isNotifsLoading,
6524
+ onClick: () => onNotificationPageChange?.(notificationPage - 1),
6525
+ className: "w-7 h-7 flex items-center justify-center rounded-full bg-white border border-stone-200 text-stone-600 disabled:opacity-30 outline-none hover:bg-stone-50 transition-colors"
6526
+ },
6527
+ /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.ArrowLeft01Icon, size: 12 })
6528
+ ), /* @__PURE__ */ import_react97.default.createElement(
6529
+ "button",
6530
+ {
6531
+ disabled: notificationPage >= notificationTotalPages || notificationTotalPages === 0 || isNotifsLoading,
6532
+ onClick: () => onNotificationPageChange?.(notificationPage + 1),
6533
+ className: "w-7 h-7 flex items-center justify-center rounded-full bg-white border border-stone-200 text-stone-600 disabled:opacity-30 outline-none hover:bg-stone-50 transition-colors"
6534
+ },
6535
+ /* @__PURE__ */ import_react97.default.createElement(import_react98.HugeiconsIcon, { icon: import_core_free_icons38.ArrowRight01Icon, size: 12 })
6536
+ ))))));
6537
+ };
6538
+
6539
+ // src/components/RootSidebar.tsx
6540
+ var import_react99 = __toESM(require("react"));
6541
+ var import_link10 = __toESM(require("next/link"));
6542
+ var import_react100 = require("@hugeicons/react");
6543
+ var import_core_free_icons39 = require("@hugeicons/core-free-icons");
6544
+ function RootSidebar({
6545
+ NavItem2s,
6546
+ currentPath,
6547
+ isMobileOpen,
6548
+ closeMobile,
6549
+ onNavClick,
6550
+ avatarSrc,
6551
+ title = "App",
6552
+ subtitle,
6553
+ homeUrl = "/app",
6554
+ showWorkspaceSwitcher = false,
6555
+ workspaces = [],
6556
+ activeWorkspaceId,
6557
+ onSwitchWorkspace,
6558
+ showLogoutAction = false,
6559
+ onLogout
6560
+ }) {
6561
+ const [isCollapsed, setIsCollapsed] = (0, import_react99.useState)(false);
6562
+ const [isAvatarLoaded, setIsAvatarLoaded] = (0, import_react99.useState)(false);
6563
+ const [showSwitcherDialog, setShowSwitcherDialog] = (0, import_react99.useState)(false);
6564
+ const [showLogoutDialog, setShowLogoutDialog] = (0, import_react99.useState)(false);
6565
+ const [isLoggingOut, setIsLoggingOut] = (0, import_react99.useState)(false);
6566
+ (0, import_react99.useEffect)(() => {
6567
+ if (isMobileOpen) {
6568
+ closeMobile();
6569
+ }
6570
+ }, [currentPath]);
6571
+ const hasActiveMatch = NavItem2s.some(
6572
+ (item) => item.path === "/applications" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
6573
+ );
6574
+ const handleLogoutInitiation = async () => {
6575
+ if (isLoggingOut || !onLogout) return;
6576
+ setIsLoggingOut(true);
6577
+ try {
6578
+ await onLogout();
6579
+ } catch (error) {
6580
+ setIsLoggingOut(false);
6581
+ setShowLogoutDialog(false);
6582
+ }
6583
+ };
6584
+ const finalAvatarSrc = avatarSrc || "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
6585
+ return /* @__PURE__ */ import_react99.default.createElement(import_react99.default.Fragment, null, /* @__PURE__ */ import_react99.default.createElement(
6586
+ "div",
6587
+ {
6588
+ className: `fixed inset-0 bg-black/30 shadow-2xl transition-opacity duration-300 md:hidden z-90 ${isMobileOpen ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"}`,
6589
+ onClick: closeMobile
6590
+ }
6591
+ ), /* @__PURE__ */ import_react99.default.createElement(
6592
+ "aside",
6593
+ {
6594
+ className: `
6595
+ fixed md:sticky rounded-2xl top-4 md:top-4 md:my-4 left-4 md:left-0 md:ml-4 h-[calc(100dvh-2rem)] bg-white
6596
+ transition-all duration-300 ease-in-out shrink-0 flex flex-col z-100 md:z-10
6597
+ ${isMobileOpen ? "translate-x-0" : "translate-x-[-120%] md:translate-x-0"}
6598
+ ${isCollapsed ? "md:w-16 w-64" : "w-64"}
6599
+ `
6600
+ },
6601
+ /* @__PURE__ */ import_react99.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center" : "justify-between"}` }, /* @__PURE__ */ import_react99.default.createElement(import_link10.default, { href: homeUrl, className: `flex items-center outline-none group min-w-0 ${isCollapsed && !isMobileOpen ? "" : "gap-3 pr-2"}` }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-8 h-8 shrink-0 relative rounded-lg overflow-hidden bg-stone-50 flex items-center justify-center" }, !isAvatarLoaded && /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.Loading03Icon, size: 14, className: "animate-spin text-stone-300 absolute" }), /* @__PURE__ */ import_react99.default.createElement(
6602
+ "img",
6603
+ {
6604
+ src: finalAvatarSrc,
6605
+ alt: "User Avatar",
6606
+ onLoad: () => setIsAvatarLoaded(true),
6607
+ className: `w-full h-full object-cover transition-opacity duration-300 ${isAvatarLoaded ? "opacity-100" : "opacity-0"}`
6608
+ }
6609
+ )), (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col justify-center min-w-0" }, /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[13px] font-serif text-black leading-none truncate max-w-32.5 tracking-wide mb-1 group-hover:opacity-70 transition-opacity" }, title), subtitle && /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[9px] text-neutral-500 truncate max-w-32.5 tracking-[0.2em] leading-none uppercase" }, subtitle))), (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react99.default.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ import_react99.default.createElement(
6610
+ "button",
6611
+ {
6612
+ onClick: closeMobile,
6613
+ className: "text-neutral-400 hover:text-black transition-colors outline-none",
6614
+ "aria-label": "Close Menu"
6615
+ },
6616
+ /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.CancelCircleIcon, size: 24 })
6617
+ ))),
6618
+ /* @__PURE__ */ import_react99.default.createElement("nav", { className: "flex-1 py-2 flex flex-col gap-1.5 px-3 overflow-y-auto custom-scrollbar" }, NavItem2s.map((item, index) => {
6619
+ const isExactOrSubMatch = item.path === "/applications" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
6620
+ const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
6621
+ return /* @__PURE__ */ import_react99.default.createElement(
6622
+ import_link10.default,
6623
+ {
6624
+ key: item.name,
6625
+ href: item.path,
6626
+ onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
6627
+ className: `flex items-center gap-3 px-3 py-2 rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-neutral-100 text-black " : "text-neutral-500 hover:text-black hover:bg-neutral-50"}`,
6628
+ title: isCollapsed && !isMobileOpen ? item.name : void 0
6629
+ },
6630
+ /* @__PURE__ */ import_react99.default.createElement(
6631
+ import_react100.HugeiconsIcon,
6632
+ {
6633
+ icon: item.icon,
6634
+ size: 18,
6635
+ className: `shrink-0 transition-colors ${isCurrentRoute ? "text-black" : "text-neutral-400 group-hover:text-black"}`
6636
+ }
6637
+ ),
6638
+ (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-xs tracking-wide truncate" }, item.name)
6639
+ );
6640
+ })),
6641
+ /* @__PURE__ */ import_react99.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " }, (showWorkspaceSwitcher || showLogoutAction) && /* @__PURE__ */ import_react99.default.createElement("div", { className: `flex gap-2 px-1 pb-2 ${isCollapsed && !isMobileOpen ? "flex-col items-center" : "flex-col items-start md:flex-row md:items-center"}` }, showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react99.default.createElement(
6642
+ "button",
6643
+ {
6644
+ onClick: () => setShowSwitcherDialog(true),
6645
+ className: "w-8 h-8 shrink-0 rounded-full bg-neutral-50 flex items-center justify-center text-neutral-500 hover:text-black hover:bg-neutral-100 transition-all outline-none",
6646
+ title: "Switch Workspace"
6647
+ },
6648
+ /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.UserIcon, size: 16 })
6649
+ ), showLogoutAction && /* @__PURE__ */ import_react99.default.createElement(
6650
+ "button",
6651
+ {
6652
+ onClick: () => setShowLogoutDialog(true),
6653
+ className: "w-8 h-8 shrink-0 rounded-full bg-neutral-50 flex items-center justify-center text-neutral-500 hover:text-black hover:bg-neutral-100 transition-all outline-none",
6654
+ title: "Secure Logout"
6655
+ },
6656
+ /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.LogoutCircle02Icon, size: 16 })
6657
+ )), /* @__PURE__ */ import_react99.default.createElement("div", { className: "hidden md:block" }, /* @__PURE__ */ import_react99.default.createElement(
6658
+ "button",
6659
+ {
6660
+ onClick: () => setIsCollapsed(!isCollapsed),
6661
+ className: "flex items-center justify-center md:justify-start gap-3 w-full p-2.5 rounded-full text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none"
6662
+ },
6663
+ /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-400" }),
6664
+ !isCollapsed && /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-xs" }, "Collapse")
6665
+ )))
6666
+ ), showSwitcherDialog && showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react99.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react99.default.createElement(
6667
+ "div",
6668
+ {
6669
+ className: "absolute inset-0 bg-black/30",
6670
+ onClick: () => setShowSwitcherDialog(false)
6671
+ }
6672
+ ), /* @__PURE__ */ import_react99.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "p-5 text-center w-full" }, /* @__PURE__ */ import_react99.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, "Switch Workspace"), /* @__PURE__ */ import_react99.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Select an organization to switch your current context.")), /* @__PURE__ */ import_react99.default.createElement("div", { className: "max-h-75 overflow-y-auto w-full custom-scrollbar" }, workspaces.map((org) => /* @__PURE__ */ import_react99.default.createElement(
6673
+ "button",
6674
+ {
6675
+ key: org.id,
6676
+ onClick: () => {
6677
+ if (onSwitchWorkspace) onSwitchWorkspace(org.id);
6678
+ setShowSwitcherDialog(false);
6679
+ },
6680
+ className: "w-full text-left px-5 py-4 flex items-center justify-between hover:bg-neutral-50 transition-colors group outline-none last:border-0"
6681
+ },
6682
+ /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col truncate pr-4" }, /* @__PURE__ */ import_react99.default.createElement("span", { className: `text-[13px] truncate ${activeWorkspaceId === org.id ? "text-black" : "text-neutral-600 group-hover:text-black"}` }, org.name), /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[9px] text-neutral-400 tracking-[0.2em] mt-1 uppercase" }, "Role: ", org.role)),
6683
+ activeWorkspaceId === org.id && /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons39.CheckmarkCircle01Icon, size: 16, className: "text-black shrink-0" })
6684
+ ))), /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-full flex mt-auto" }, /* @__PURE__ */ import_react99.default.createElement(
6685
+ "button",
6686
+ {
6687
+ onClick: () => setShowSwitcherDialog(false),
6688
+ className: "w-full py-3.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
6689
+ },
6690
+ "Cancel"
6691
+ )))), /* @__PURE__ */ import_react99.default.createElement(
6692
+ ConfirmationDialog,
6693
+ {
6694
+ isOpen: showLogoutDialog && showLogoutAction,
6695
+ title: "Secure Logout",
6696
+ message: "Are you sure you want to log out? You will need to authenticate to return.",
6697
+ confirmText: "Log Out",
6698
+ cancelText: "Cancel",
6699
+ isProcessing: isLoggingOut,
6700
+ isDestructive: true,
6701
+ onClose: () => !isLoggingOut && setShowLogoutDialog(false),
6702
+ onConfirm: handleLogoutInitiation
6703
+ }
6704
+ ));
6705
+ }
6706
+
6707
+ // src/components/UniversalSettings2.tsx
6708
+ var import_react101 = __toESM(require("react"));
6709
+ var import_react_hot_toast19 = __toESM(require("react-hot-toast"));
6710
+ var import_react102 = require("@hugeicons/react");
6711
+ var import_core_free_icons40 = require("@hugeicons/core-free-icons");
6712
+ var MemberAvatar5 = ({ src, status, sizeClass = "w-10 h-10" }) => {
6713
+ const [loaded, setLoaded] = (0, import_react101.useState)(false);
6714
+ const [error, setError] = (0, import_react101.useState)(false);
6715
+ const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
6716
+ const finalSrc = error || !src ? defaultAvatar : src;
6717
+ const getStatusColor = () => {
6718
+ switch (status?.toUpperCase()) {
6719
+ case "ACTIVE":
6720
+ return "bg-emerald-500";
6721
+ case "BUSY":
6722
+ return "bg-amber-500";
6723
+ case "OFFLINE":
6724
+ return "bg-[#d97757]";
6725
+ case "AWAY":
6726
+ return "bg-stone-400";
6727
+ default:
6728
+ return "bg-stone-200";
6729
+ }
6730
+ };
6731
+ return /* @__PURE__ */ import_react101.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full h-full rounded-lg bg-stone-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, className: "animate-spin text-stone-400 absolute", size: 14 }), /* @__PURE__ */ import_react101.default.createElement("img", { src: finalSrc, alt: "Member", className: `w-full h-full object-cover transition-opacity duration-300 ${loaded || error ? "opacity-100" : "opacity-0"}`, onLoad: () => setLoaded(true), onError: () => setError(true) })), /* @__PURE__ */ import_react101.default.createElement("div", { className: `absolute -bottom-1 -right-1 w-3.5 h-3.5 rounded-full border-2 border-white z-10 ${getStatusColor()}` }));
6732
+ };
6733
+ var OrgAvatar3 = ({ src, sizeClass = "w-10 h-10" }) => {
6734
+ const [loaded, setLoaded] = (0, import_react101.useState)(false);
6735
+ const [error, setError] = (0, import_react101.useState)(false);
6736
+ const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/office_a.avif";
6737
+ const finalSrc = error || !src ? defaultAvatar : src;
6738
+ return /* @__PURE__ */ import_react101.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full h-full rounded-lg bg-stone-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, className: "animate-spin text-stone-400 absolute", size: 14 }), /* @__PURE__ */ import_react101.default.createElement(
6739
+ "img",
6740
+ {
6741
+ src: finalSrc,
6742
+ alt: "Workspace Avatar",
6743
+ className: `w-full h-full object-cover transition-opacity duration-300 ${loaded || error ? "opacity-100" : "opacity-0"}`,
6744
+ onLoad: () => setLoaded(true),
6745
+ onError: () => setError(true)
6746
+ }
6747
+ )));
6748
+ };
6749
+ var PageSpinner10 = () => /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
6750
+ var InputSpinner4 = () => /* @__PURE__ */ import_react101.default.createElement("svg", { className: "animate-spin h-4 w-4 text-stone-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react101.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react101.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
6751
+ var UniversalSettings2 = ({
6752
+ accountType,
6753
+ userRole,
6754
+ members = [],
6755
+ isMembersLoading = false,
6756
+ membersCurrentPage = 1,
6757
+ membersTotalPages = 1,
6758
+ onMembersPageChange = () => {
6759
+ },
6760
+ membersSearchQuery = "",
6761
+ onMembersSearchChange = () => {
6762
+ },
6763
+ activeStatusFilter = "ALL",
6764
+ onStatusFilterChange = () => {
6765
+ },
6766
+ activeRoleFilter = "ALL",
6767
+ onRoleFilterChange = () => {
6768
+ },
6769
+ onRemoveMember,
6770
+ onInviteMember,
6771
+ onUpdateRole,
6772
+ initialOrgName = "",
6773
+ initialOrgSlug = "",
6774
+ initialOrgAvatarUrl = "",
6775
+ initialFullName = "",
6776
+ initialEmail = "",
6777
+ initialJobTitle = "",
6778
+ initialDescription = "",
6779
+ initialAvatarUrl = "",
6780
+ onSaveProfile,
6781
+ onSaveOrganization,
6782
+ onCheckSlugAvailability,
6783
+ onUploadAvatar
6784
+ }) => {
6785
+ const isOrg = accountType === "ORGANIZATION";
6786
+ const safeRole = String(userRole || "").toUpperCase().trim();
6787
+ const canManage = ["ADMIN", "MANAGER", "OWNER"].includes(safeRole);
6788
+ const [activeTab, setActiveTab] = (0, import_react101.useState)(isOrg ? "MEMBERS" : "ACCOUNT");
6789
+ const [expandedId, setExpandedId] = (0, import_react101.useState)(null);
6790
+ const [memberToRemove, setMemberToRemove] = (0, import_react101.useState)(null);
6791
+ const [isRemoving, setIsRemoving] = (0, import_react101.useState)(false);
6792
+ const [isInviteMode, setIsInviteMode] = (0, import_react101.useState)(false);
6793
+ const [inviteEmail, setInviteEmail] = (0, import_react101.useState)("");
6794
+ const [isInviting, setIsInviting] = (0, import_react101.useState)(false);
6795
+ const [localSearchQuery, setLocalSearchQuery] = (0, import_react101.useState)(membersSearchQuery);
6796
+ const [isTyping, setIsTyping] = (0, import_react101.useState)(false);
6797
+ const isFirstSearchMount = (0, import_react101.useRef)(true);
6798
+ const [isStatusModalOpen, setIsStatusModalOpen] = (0, import_react101.useState)(false);
6799
+ const [isRoleModalOpen, setIsRoleModalOpen] = (0, import_react101.useState)(false);
6800
+ const [roleEditTarget, setRoleEditTarget] = (0, import_react101.useState)(null);
6801
+ const [isUpdatingRole, setIsUpdatingRole] = (0, import_react101.useState)(false);
6802
+ const [orgName, setOrgName] = (0, import_react101.useState)(initialOrgName);
6803
+ const [orgSlug, setOrgSlug] = (0, import_react101.useState)(initialOrgSlug);
6804
+ const [orgAvatarUrl, setOrgAvatarUrl] = (0, import_react101.useState)(initialOrgAvatarUrl);
6805
+ const [firstName, setFirstName] = (0, import_react101.useState)("");
6806
+ const [lastName, setLastName] = (0, import_react101.useState)("");
6807
+ const [jobTitle, setJobTitle] = (0, import_react101.useState)(initialJobTitle);
6808
+ const [description, setDescription] = (0, import_react101.useState)(initialDescription);
6809
+ const [avatarUrl, setAvatarUrl] = (0, import_react101.useState)(initialAvatarUrl);
6810
+ const [isCheckingSlug, setIsCheckingSlug] = (0, import_react101.useState)(false);
6811
+ const [slugAvailable, setSlugAvailable] = (0, import_react101.useState)(null);
6812
+ const [isSavingOrg, setIsSavingOrg] = (0, import_react101.useState)(false);
6813
+ const [isSavingProfile, setIsSavingProfile] = (0, import_react101.useState)(false);
6814
+ const orgFileInputRef = (0, import_react101.useRef)(null);
6815
+ const userFileInputRef = (0, import_react101.useRef)(null);
6816
+ const [pendingOrgAvatar, setPendingOrgAvatar] = (0, import_react101.useState)(null);
6817
+ const [pendingUserAvatar, setPendingUserAvatar] = (0, import_react101.useState)(null);
6818
+ const [isUploadingOrgAvatar, setIsUploadingOrgAvatar] = (0, import_react101.useState)(false);
6819
+ const [isUploadingUserAvatar, setIsUploadingUserAvatar] = (0, import_react101.useState)(false);
6820
+ (0, import_react101.useEffect)(() => {
6821
+ setOrgName(initialOrgName || "");
6822
+ setOrgSlug(initialOrgSlug || "");
6823
+ setOrgAvatarUrl(initialOrgAvatarUrl || "");
6824
+ const parts = (initialFullName || "").split(" ");
6825
+ setFirstName(parts[0] || "");
6826
+ setLastName(parts.slice(1).join(" ") || "");
6827
+ setJobTitle(initialJobTitle || "");
6828
+ setDescription(initialDescription || "");
6829
+ setAvatarUrl(initialAvatarUrl || "");
6830
+ }, [initialOrgName, initialOrgSlug, initialOrgAvatarUrl, initialFullName, initialJobTitle, initialDescription, initialAvatarUrl]);
6831
+ const handleFileSelect = (e, type) => {
6832
+ const file = e.target.files?.[0];
6833
+ if (!file) return;
6834
+ if (file.size > 1024 * 1024) {
6835
+ import_react_hot_toast19.default.error("Image size must be less than 1MB.");
6836
+ e.target.value = "";
6837
+ return;
6838
+ }
6839
+ const validTypes = ["image/jpeg", "image/jpg", "image/png"];
6840
+ if (!validTypes.includes(file.type)) {
6841
+ import_react_hot_toast19.default.error("Only PNG and JPEG images are allowed.");
6842
+ e.target.value = "";
6843
+ return;
6844
+ }
6845
+ const previewUrl = URL.createObjectURL(file);
6846
+ if (type === "USER") {
6847
+ setPendingUserAvatar(file);
6848
+ setAvatarUrl(previewUrl);
6849
+ } else if (type === "ORGANIZATION") {
6850
+ setPendingOrgAvatar(file);
6851
+ setOrgAvatarUrl(previewUrl);
6852
+ }
6853
+ e.target.value = "";
6854
+ };
6855
+ (0, import_react101.useEffect)(() => {
6856
+ if (activeTab !== "MEMBERS") return;
6857
+ if (isFirstSearchMount.current) {
6858
+ isFirstSearchMount.current = false;
6859
+ return;
6860
+ }
6861
+ setIsTyping(true);
6862
+ const handler = setTimeout(() => {
6863
+ onMembersSearchChange(localSearchQuery);
6864
+ setIsTyping(false);
6865
+ }, 600);
6866
+ return () => clearTimeout(handler);
6867
+ }, [localSearchQuery, activeTab]);
6868
+ const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
6869
+ const handleOrgSlugChange = (val) => setOrgSlug(val.toLowerCase().replace(/[^a-z0-9-]/g, "").replace(/-+/g, "-").substring(0, 50));
6870
+ const handleOrgNameChange = (val) => setOrgName(val.replace(/[^a-zA-Z0-9\s-]/g, "").substring(0, 50));
6871
+ const handleConfirmRemove = async () => {
6872
+ if (!memberToRemove || !onRemoveMember) return;
6873
+ setIsRemoving(true);
6874
+ try {
6875
+ await onRemoveMember(memberToRemove.userId);
6876
+ import_react_hot_toast19.default.success("Member removed successfully.");
6877
+ setExpandedId(null);
6878
+ setMemberToRemove(null);
6879
+ } catch (error) {
6880
+ import_react_hot_toast19.default.error(error.message || "Failed to remove member.");
6881
+ } finally {
6882
+ setIsRemoving(false);
6883
+ }
6884
+ };
6885
+ const handleInviteSubmit = async (e) => {
6886
+ e.preventDefault();
6887
+ if (inviteEmail.length < 5 || isInviting || !onInviteMember) return;
6888
+ setIsInviting(true);
6889
+ try {
6890
+ await onInviteMember(inviteEmail);
6891
+ setInviteEmail("");
6892
+ setIsInviteMode(false);
6893
+ } catch (error) {
6894
+ import_react_hot_toast19.default.error(error.message || "Failed to send invitation.");
6895
+ } finally {
6896
+ setIsInviting(false);
6897
+ }
6898
+ };
6899
+ const handleRoleUpdate = async (newRole) => {
6900
+ if (!roleEditTarget || !onUpdateRole) return;
6901
+ setIsUpdatingRole(true);
6902
+ const targetId = roleEditTarget.userId;
6903
+ setRoleEditTarget(null);
6904
+ try {
6905
+ await onUpdateRole(targetId, newRole);
6906
+ } catch (error) {
6907
+ } finally {
6908
+ setIsUpdatingRole(false);
6909
+ }
6910
+ };
6911
+ const activeExpandedMember = expandedId ? members.find((m) => m.id === expandedId) : null;
6912
+ (0, import_react101.useEffect)(() => {
6913
+ if (!isOrg || !orgSlug || orgSlug === initialOrgSlug) {
6914
+ setSlugAvailable(null);
6915
+ setIsCheckingSlug(false);
6916
+ return;
6917
+ }
6918
+ if (orgSlug.length < 3) {
6919
+ setSlugAvailable(false);
6920
+ setIsCheckingSlug(false);
6921
+ return;
6922
+ }
6923
+ setIsCheckingSlug(true);
6924
+ setSlugAvailable(null);
6925
+ const checkTimer = setTimeout(async () => {
6926
+ try {
6927
+ if (onCheckSlugAvailability) {
6928
+ const res = await onCheckSlugAvailability(orgSlug);
6929
+ setSlugAvailable(res.available);
6930
+ }
6931
+ } catch (error) {
6932
+ setSlugAvailable(null);
6933
+ } finally {
6934
+ setIsCheckingSlug(false);
6935
+ }
6936
+ }, 1500);
6937
+ return () => clearTimeout(checkTimer);
6938
+ }, [orgSlug, initialOrgSlug, onCheckSlugAvailability, isOrg]);
6939
+ const handleSaveOrganization = async (e) => {
6940
+ e.preventDefault();
6941
+ if (isSavingOrg || isCheckingSlug || !canManage || !onSaveOrganization) return;
6942
+ if (orgSlug !== initialOrgSlug && slugAvailable === false) return import_react_hot_toast19.default.error("Address handle unavailable.");
6943
+ setIsSavingOrg(true);
6944
+ try {
6945
+ let finalAvatarUrl = orgAvatarUrl;
6946
+ if (pendingOrgAvatar && onUploadAvatar) {
6947
+ setIsUploadingOrgAvatar(true);
6948
+ try {
6949
+ const res2 = await onUploadAvatar(pendingOrgAvatar, "ORGANIZATION");
6950
+ if (res2?.url) {
6951
+ finalAvatarUrl = res2.url;
6952
+ setOrgAvatarUrl(finalAvatarUrl);
6953
+ }
6954
+ } catch (err) {
6955
+ import_react_hot_toast19.default.error("Failed to securely upload workspace avatar.");
6956
+ setIsSavingOrg(false);
6957
+ setIsUploadingOrgAvatar(false);
6958
+ return;
6959
+ }
6960
+ setPendingOrgAvatar(null);
6961
+ setIsUploadingOrgAvatar(false);
6962
+ }
6963
+ const res = await onSaveOrganization({ name: orgName, slug: orgSlug, avatarUrl: finalAvatarUrl });
6964
+ if (res.success) import_react_hot_toast19.default.success("Workspace updated successfully.");
6965
+ else import_react_hot_toast19.default.error(res.error || "Failed to update workspace.");
6966
+ } catch (error) {
6967
+ import_react_hot_toast19.default.error("Service unavailable.");
6968
+ } finally {
6969
+ setIsSavingOrg(false);
6970
+ setIsUploadingOrgAvatar(false);
6971
+ }
6972
+ };
6973
+ const handleSaveProfile = async (e) => {
6974
+ e.preventDefault();
6975
+ if (isSavingProfile || !onSaveProfile) return;
6976
+ setIsSavingProfile(true);
6977
+ try {
6978
+ let finalAvatarUrl = avatarUrl;
6979
+ if (pendingUserAvatar && onUploadAvatar) {
6980
+ setIsUploadingUserAvatar(true);
6981
+ try {
6982
+ const res2 = await onUploadAvatar(pendingUserAvatar, "USER");
6983
+ if (res2?.url) {
6984
+ finalAvatarUrl = res2.url;
6985
+ setAvatarUrl(finalAvatarUrl);
6986
+ }
6987
+ } catch (err) {
6988
+ import_react_hot_toast19.default.error("Failed to securely upload profile avatar.");
6989
+ setIsSavingProfile(false);
6990
+ setIsUploadingUserAvatar(false);
6991
+ return;
6992
+ }
6993
+ setPendingUserAvatar(null);
6994
+ setIsUploadingUserAvatar(false);
6995
+ }
6996
+ const res = await onSaveProfile({ firstName, lastName, jobTitle, description, avatarUrl: finalAvatarUrl });
6997
+ if (res.success) import_react_hot_toast19.default.success("Identity updated successfully.");
6998
+ else import_react_hot_toast19.default.error(res.error || "Failed to update identity.");
6999
+ } catch (error) {
7000
+ import_react_hot_toast19.default.error("Service unavailable.");
7001
+ } finally {
7002
+ setIsSavingProfile(false);
7003
+ setIsUploadingUserAvatar(false);
7004
+ }
7005
+ };
7006
+ const hasOrgChanges = orgName !== initialOrgName || orgSlug !== initialOrgSlug || orgAvatarUrl !== initialOrgAvatarUrl;
7007
+ const isOrgSaveDisabled = isSavingOrg || !canManage || isCheckingSlug || !hasOrgChanges || orgName.length < 3 || orgSlug.length < 3 || orgSlug !== initialOrgSlug && slugAvailable === false;
7008
+ const hasProfileChanges = `${firstName} ${lastName}`.trim() !== initialFullName || jobTitle !== initialJobTitle || description !== initialDescription || avatarUrl !== initialAvatarUrl;
7009
+ const isProfileSaveDisabled = isSavingProfile || !hasProfileChanges || firstName.length < 2 || lastName.length < 2;
7010
+ const tabs = [];
7011
+ if (isOrg) {
7012
+ tabs.push({ id: "MEMBERS", label: "Members" });
7013
+ tabs.push({ id: "ORGANIZATION", label: "Organization" });
7014
+ }
7015
+ tabs.push({ id: "ACCOUNT", label: "Profile" });
7016
+ return /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react101.default.createElement(
7017
+ "button",
7018
+ {
7019
+ onClick: () => window.dispatchEvent(new Event("open-sidebar")),
7020
+ className: "md:hidden flex shrink-0 items-center justify-center w-7 h-7 bg-white rounded-full text-black transition-all duration-300 outline-none hover:bg-stone-50",
7021
+ "aria-label": "Open Menu"
7022
+ },
7023
+ /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.SidebarLeft01Icon, size: 16 })
7024
+ ), /* @__PURE__ */ import_react101.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "System Settings")), /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500" }, "Manage your workspace identity, team configurations, and AI billing parameters.")), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center mb-4 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
7025
+ const isActive = activeTab === tab.id;
7026
+ return /* @__PURE__ */ import_react101.default.createElement(
7027
+ "button",
7028
+ {
7029
+ key: idx,
7030
+ onClick: () => {
7031
+ setActiveTab(tab.id);
7032
+ if (tab.id === "MEMBERS") {
7033
+ setExpandedId(null);
7034
+ setIsInviteMode(false);
7035
+ }
7036
+ },
7037
+ className: `px-4 py-1.5 rounded-full text-xs transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-stone-50 text-black" : "text-stone-500 hover:text-black hover:bg-stone-50/50"}`
7038
+ },
7039
+ tab.label
7040
+ );
7041
+ }))), activeTab === "MEMBERS" && isOrg && /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement(
7042
+ ConfirmationDialog,
7043
+ {
7044
+ isOpen: !!memberToRemove,
7045
+ title: "Remove Member",
7046
+ message: `Are you sure you want to remove ${memberToRemove?.fullName}? This action cannot be undone.`,
7047
+ confirmText: "Remove",
7048
+ cancelText: "Cancel",
7049
+ isProcessing: isRemoving,
7050
+ isDestructive: true,
7051
+ onClose: () => setMemberToRemove(null),
7052
+ onConfirm: handleConfirmRemove
7053
+ }
7054
+ ), !isInviteMode && !activeExpandedMember && /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-row flex-nowrap mb-4 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Search01Icon, size: 16, className: "text-stone-400" })), /* @__PURE__ */ import_react101.default.createElement("input", { type: "text", placeholder: "Search members...", value: localSearchQuery, onChange: (e) => setLocalSearchQuery(e.target.value), className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-sm text-black placeholder-stone-400 outline-none transition-colors focus:border-[#d97757] border border-transparent " })), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => setIsStatusModalOpen(true), className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-stone-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.SearchList02Icon, size: 16 })), /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => setIsRoleModalOpen(true), className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-stone-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.ListSettingIcon, size: 16 })))), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, activeExpandedMember ? /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col animate-in fade-in zoom-in-95 duration-300 w-full" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "mb-6 flex w-full items-center" }, /* @__PURE__ */ import_react101.default.createElement(
7055
+ "button",
7056
+ {
7057
+ onClick: () => setExpandedId(null),
7058
+ disabled: isUpdatingRole,
7059
+ className: "flex items-center gap-2 text-[#d97757] hover:text-[#d97757] transition-colors text-sm outline-none disabled:opacity-50"
7060
+ },
7061
+ /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.ArrowLeft01Icon, size: 16 }),
7062
+ " Back"
7063
+ )), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-1 mb-8" }, /* @__PURE__ */ import_react101.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, "Member Profile"), /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500" }, "View and manage this member's access privileges.")), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-4 mb-4" }, /* @__PURE__ */ import_react101.default.createElement(MemberAvatar5, { src: activeExpandedMember.avatarUrl, status: activeExpandedMember.status, sizeClass: "w-14 h-14" }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-sm text-black tracking-tight truncate" }, activeExpandedMember.fullName), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-2 mt-0.5" }, /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-xs text-stone-500 capitalize" }, activeExpandedMember.role.toLowerCase()), canManage && (isUpdatingRole ? /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, size: 12, className: "animate-spin text-stone-400 ml-1" }) : /* @__PURE__ */ import_react101.default.createElement(import_react101.default.Fragment, null, /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-stone-300 text-xs px-0.5" }, "\u2022"), /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => setRoleEditTarget(activeExpandedMember), className: "text-xs text-[#d97757] hover:underline outline-none" }, "Edit"), /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-stone-300 text-xs px-0.5" }, "\u2022"), /* @__PURE__ */ import_react101.default.createElement(
7064
+ "button",
7065
+ {
7066
+ onClick: () => setMemberToRemove(activeExpandedMember),
7067
+ disabled: isUpdatingRole,
7068
+ className: "text-xs text-[#d97757] hover:underline outline-none disabled:opacity-50"
7069
+ },
7070
+ "Remove"
7071
+ ))))))) : /* @__PURE__ */ import_react101.default.createElement(import_react101.default.Fragment, null, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-row items-center justify-between gap-4" }, /* @__PURE__ */ import_react101.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, isInviteMode ? "Add Member" : "Team Directory"), !isInviteMode && canManage && /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => setIsInviteMode(true), className: "shrink-0 px-4 py-1.5 border border-stone-200 text-black text-xs tracking-wide rounded-full hover:bg-stone-50 transition-colors outline-none" }, "Invite Team")), !isInviteMode && /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500" }, "Manage members and access controls across your organization.")), /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full overflow-hidden" }, isInviteMode ? /* @__PURE__ */ import_react101.default.createElement("form", { onSubmit: handleInviteSubmit, className: "flex flex-col gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react101.default.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ import_react101.default.createElement("input", { type: "email", value: inviteEmail, onChange: (e) => setInviteEmail(cleanEmailId(e.target.value)), required: true, autoFocus: true, className: "w-full px-2 py-3 bg-transparent text-sm border-b border-stone-200 text-black outline-none focus:border-black transition-all duration-300", placeholder: "name@company.com" })), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react101.default.createElement(ThreeDActionButton, { type: "submit", disabled: inviteEmail.length < 5 || isInviting, isLoading: isInviting, className: "w-full" }, "Send Invitation"), /* @__PURE__ */ import_react101.default.createElement("button", { type: "button", onClick: () => {
7072
+ setIsInviteMode(false);
7073
+ setInviteEmail("");
7074
+ }, disabled: isInviting, className: "w-full flex items-center justify-center py-2.5 rounded-full border border-stone-200 text-black hover:bg-stone-50 transition-colors outline-none text-xs tracking-wide" }, "Cancel"))) : isMembersLoading || isTyping ? /* @__PURE__ */ import_react101.default.createElement(PageSpinner10, null) : /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col min-w-0 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement("div", null, members.length === 0 ? /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-400 py-6 text-center" }, "No members found") : members.map((member) => /* @__PURE__ */ import_react101.default.createElement("div", { key: member.id, onClick: () => setExpandedId(member.id), className: "flex items-center justify-between py-3 hover:bg-stone-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react101.default.createElement(MemberAvatar5, { src: member.avatarUrl, status: member.status }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5" }, /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-sm text-black truncate" }, member.fullName), /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500 capitalize truncate" }, member.role.toLowerCase())))))), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-xs text-stone-400 tracking-[0.2em]" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => onMembersPageChange(membersCurrentPage - 1), disabled: membersCurrentPage <= 1 || isMembersLoading, className: "p-2 bg-white border border-stone-200 rounded-full text-black hover:bg-stone-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react101.default.createElement("button", { onClick: () => onMembersPageChange(membersCurrentPage + 1), disabled: membersCurrentPage >= membersTotalPages || isMembersLoading || membersTotalPages === 0, className: "p-2 bg-white border border-stone-200 rounded-full text-black hover:bg-stone-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.ArrowRight01Icon, size: 14 })))))))), /* @__PURE__ */ import_react101.default.createElement(ReusableOptions, { isOpen: isStatusModalOpen, onClose: () => setIsStatusModalOpen(false), title: "Status Filter", options: ["ALL", "ACTIVE", "BUSY", "OFFLINE", "AWAY"], selectedOption: activeStatusFilter, onSelect: (status) => onStatusFilterChange(status) }), /* @__PURE__ */ import_react101.default.createElement(ReusableOptions, { isOpen: isRoleModalOpen, onClose: () => setIsRoleModalOpen(false), title: "Role Filter", options: ["ALL", "OWNER", "ADMIN", "MANAGER", "MEMBER", "GUEST"], selectedOption: activeRoleFilter, onSelect: (role) => onRoleFilterChange(role) }), /* @__PURE__ */ import_react101.default.createElement(ReusableOptions, { isOpen: !!roleEditTarget, onClose: () => setRoleEditTarget(null), title: "Modify Access Role", options: ["ADMIN", "MANAGER", "MEMBER"], selectedOption: roleEditTarget?.role || "", onSelect: handleRoleUpdate })), activeTab === "ORGANIZATION" && isOrg && /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "relative group cursor-pointer shrink-0", onClick: () => canManage && !isSavingOrg ? orgFileInputRef.current?.click() : void 0 }, /* @__PURE__ */ import_react101.default.createElement(OrgAvatar3, { src: orgAvatarUrl, sizeClass: "w-14 h-14" }), canManage && /* @__PURE__ */ import_react101.default.createElement("div", { className: "absolute -bottom-1 -right-1 w-6 h-6 bg-white border border-stone-200 rounded-full flex items-center justify-center text-stone-500 group-hover:text-black transition-colors z-10" }, isUploadingOrgAvatar ? /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, size: 12, className: "animate-spin" }) : /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.CloudUploadIcon, size: 14 })), /* @__PURE__ */ import_react101.default.createElement("input", { type: "file", ref: orgFileInputRef, className: "hidden", accept: ".png, .jpg, .jpeg", onChange: (e) => handleFileSelect(e, "ORGANIZATION") })), /* @__PURE__ */ import_react101.default.createElement("div", null, /* @__PURE__ */ import_react101.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Workspace Details"), /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500" }, "Manage your organizational identity and handles."))), !canManage && /* @__PURE__ */ import_react101.default.createElement("span", { className: "p-2 w-9 h-9 bg-stone-100 text-stone-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react101.default.createElement("form", { className: "flex flex-col gap-8 w-full max-w-5xl", onSubmit: handleSaveOrganization, autoComplete: "off" }, /* @__PURE__ */ import_react101.default.createElement(TextInput, { label: "Workspace Name", value: orgName, onChange: handleOrgNameChange, disabled: !canManage || isSavingOrg, placeholder: "Acme Corporation", maxLength: 50 }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ import_react101.default.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Workspace Handle"), /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center relative w-full border-b border-stone-200 focus-within:border-black transition-all duration-300 overflow-hidden" }, /* @__PURE__ */ import_react101.default.createElement("input", { type: "text", value: orgSlug, disabled: !canManage || isSavingOrg, onChange: (e) => handleOrgSlugChange(e.target.value), spellCheck: "false", autoComplete: "off", className: "w-full pr-10 pl-0 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed", placeholder: "workspace-handle" }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react101.default.createElement(InputSpinner4, null), !isCheckingSlug && canManage && orgSlug !== initialOrgSlug && orgSlug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react101.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-[#d97757]/10" }, /* @__PURE__ */ import_react101.default.createElement("svg", { className: "w-2 h-2 text-[#d97757]", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react101.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" }))), !isCheckingSlug && canManage && orgSlug !== initialOrgSlug && orgSlug.length >= 3 && slugAvailable === true && /* @__PURE__ */ import_react101.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react101.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react101.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 10-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z" })))))), /* @__PURE__ */ import_react101.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react101.default.createElement(ThreeDActionButton, { type: "submit", disabled: isOrgSaveDisabled, isLoading: isSavingOrg, className: "min-w-32" }, "Save Changes"), hasOrgChanges && !isSavingOrg && canManage && /* @__PURE__ */ import_react101.default.createElement("button", { type: "button", onClick: () => {
7075
+ setOrgName(initialOrgName || "");
7076
+ setOrgSlug(initialOrgSlug || "");
7077
+ setOrgAvatarUrl(initialOrgAvatarUrl || "");
7078
+ setPendingOrgAvatar(null);
7079
+ }, className: "text-xs tracking-widest text-stone-400 hover:text-black transition-colors outline-none" }, "Cancel")))), activeTab === "ACCOUNT" && /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col gap-8 rounded-2xl p-6 bg-white w-full" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "relative group cursor-pointer shrink-0", onClick: () => !isSavingProfile ? userFileInputRef.current?.click() : void 0 }, /* @__PURE__ */ import_react101.default.createElement(MemberAvatar5, { src: avatarUrl, status: "ACTIVE", sizeClass: "w-14 h-14" }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "absolute -bottom-1 -right-1 w-6 h-6 bg-white border border-stone-200 rounded-full flex items-center justify-center text-stone-500 group-hover:text-black transition-colors z-20" }, isUploadingUserAvatar ? /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.Loading03Icon, size: 12, className: "animate-spin" }) : /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons40.CloudUploadIcon, size: 14 })), /* @__PURE__ */ import_react101.default.createElement("input", { type: "file", ref: userFileInputRef, className: "hidden", accept: ".png, .jpg, .jpeg", onChange: (e) => handleFileSelect(e, "USER") })), /* @__PURE__ */ import_react101.default.createElement("div", null, /* @__PURE__ */ import_react101.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Personal Identity"), /* @__PURE__ */ import_react101.default.createElement("p", { className: "text-xs text-stone-500" }, "Update your system display name and contact email.")))), /* @__PURE__ */ import_react101.default.createElement("form", { className: "flex flex-col gap-6 w-full max-w-5xl", onSubmit: handleSaveProfile, autoComplete: "off" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-6" }, /* @__PURE__ */ import_react101.default.createElement(TextInput, { label: "First Name", value: firstName, onChange: (v) => setFirstName(v.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50)), disabled: isSavingProfile, placeholder: "First name", maxLength: 50 }), /* @__PURE__ */ import_react101.default.createElement(TextInput, { label: "Last Name", value: lastName, onChange: (v) => setLastName(v.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50)), disabled: isSavingProfile, placeholder: "Last name", maxLength: 50 })), /* @__PURE__ */ import_react101.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-6" }, /* @__PURE__ */ import_react101.default.createElement(TextInput, { label: "Job Title", value: jobTitle, onChange: (v) => setJobTitle(v.substring(0, 50)), disabled: isSavingProfile, placeholder: "e.g. HR Manager, CEO", maxLength: 50 }), /* @__PURE__ */ import_react101.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react101.default.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ import_react101.default.createElement("input", { type: "email", value: initialEmail, disabled: true, className: "w-full pb-3 pt-3 text-sm bg-transparent text-stone-400 border-b border-stone-200 outline-none cursor-not-allowed" }))), /* @__PURE__ */ import_react101.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react101.default.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "About Me"), /* @__PURE__ */ import_react101.default.createElement(
7080
+ "textarea",
7081
+ {
7082
+ value: description,
7083
+ onChange: (e) => setDescription(e.target.value.substring(0, 300)),
7084
+ disabled: isSavingProfile,
7085
+ placeholder: "A short shout about yourself...",
7086
+ className: "w-full pb-3 pt-3 text-sm bg-transparent text-black border-b border-stone-200 outline-none focus:border-[#d97757] transition-all duration-300 resize-none h-20 custom-scrollbar",
7087
+ maxLength: 300
7088
+ }
7089
+ )), /* @__PURE__ */ import_react101.default.createElement("div", { className: "pt-4 flex items-center gap-4" }, /* @__PURE__ */ import_react101.default.createElement(ThreeDActionButton, { type: "submit", disabled: isProfileSaveDisabled, isLoading: isSavingProfile, className: "min-w-32" }, "Update Identity"))))));
7090
+ };
7091
+
7092
+ // src/components/UniversalDeveloperSettings.tsx
7093
+ var import_react103 = __toESM(require("react"));
7094
+ var import_react_hot_toast20 = require("react-hot-toast");
7095
+ var import_react104 = require("@hugeicons/react");
7096
+ var import_core_free_icons41 = require("@hugeicons/core-free-icons");
7097
+ var UniversalDeveloperSettings = ({
7098
+ initialPublicKey,
7099
+ initialWebhookUrl,
7100
+ isReadOnly = false,
7101
+ onGenerateKeys,
7102
+ onSaveWebhook
7103
+ }) => {
7104
+ const [publicKey, setPublicKey] = (0, import_react103.useState)(initialPublicKey);
7105
+ const [webhookUrl, setWebhookUrl] = (0, import_react103.useState)(initialWebhookUrl);
7106
+ const [isGenerating, setIsGenerating] = (0, import_react103.useState)(false);
7107
+ const [isSavingWebhook, setIsSavingWebhook] = (0, import_react103.useState)(false);
7108
+ const [isRollModalOpen, setIsRollModalOpen] = (0, import_react103.useState)(false);
7109
+ (0, import_react103.useEffect)(() => {
7110
+ setPublicKey(initialPublicKey || "");
7111
+ setWebhookUrl(initialWebhookUrl || "");
7112
+ }, [initialPublicKey, initialWebhookUrl]);
7113
+ const handleWebhookChange = (val) => {
7114
+ setWebhookUrl(val.trim());
7115
+ };
7116
+ const downloadEnvironmentFile = (pubKey, secKey) => {
7117
+ const envContent = `AUDDITUR_PUBLIC_KEY="${pubKey}"
7118
+ AUDDITUR_SECRET_KEY="${secKey}"
7119
+ `;
7120
+ const blob = new Blob([envContent], { type: "text/plain" });
7121
+ const url = URL.createObjectURL(blob);
7122
+ const link = document.createElement("a");
7123
+ link.href = url;
7124
+ link.download = "audditur_credentials.txt";
7125
+ document.body.appendChild(link);
7126
+ link.click();
7127
+ document.body.removeChild(link);
7128
+ URL.revokeObjectURL(url);
7129
+ };
7130
+ const handleGenerateKeys = async () => {
7131
+ if (isGenerating || isReadOnly) return;
7132
+ setIsGenerating(true);
7133
+ try {
7134
+ const res = await onGenerateKeys();
7135
+ if (res.success && res.data) {
7136
+ setPublicKey(res.data.publicKey);
7137
+ downloadEnvironmentFile(res.data.publicKey, res.data.secretKey);
7138
+ import_react_hot_toast20.toast.success("Keys generated. Check your downloads folder.");
7139
+ setIsRollModalOpen(false);
7140
+ } else {
7141
+ import_react_hot_toast20.toast.error(res.error || "Uh oh! Something went wrong.");
7142
+ }
7143
+ } catch (error) {
7144
+ import_react_hot_toast20.toast.error("Uh oh! Something went wrong.");
7145
+ } finally {
7146
+ setIsGenerating(false);
7147
+ }
7148
+ };
7149
+ const handleSaveWebhook = async (e) => {
7150
+ e.preventDefault();
7151
+ if (isSavingWebhook || isReadOnly) return;
7152
+ setIsSavingWebhook(true);
7153
+ try {
7154
+ const res = await onSaveWebhook(webhookUrl);
7155
+ if (res.success && res.data) {
7156
+ setWebhookUrl(res.data.webhookUrl || "");
7157
+ import_react_hot_toast20.toast.success("Webhook URL updated.");
7158
+ } else {
7159
+ import_react_hot_toast20.toast.error(res.error || "Uh oh! Something went wrong.");
7160
+ }
7161
+ } catch (error) {
7162
+ import_react_hot_toast20.toast.error("Uh oh! Something went wrong.");
7163
+ } finally {
7164
+ setIsSavingWebhook(false);
7165
+ }
7166
+ };
7167
+ const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
7168
+ const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
7169
+ return /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ import_react103.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col min-w-0 gap-1" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react103.default.createElement(
7170
+ "button",
7171
+ {
7172
+ onClick: () => window.dispatchEvent(new Event("open-sidebar")),
7173
+ className: "md:hidden flex shrink-0 items-center justify-center w-7 h-7 bg-white rounded-full text-black transition-all duration-300 outline-none hover:bg-stone-50",
7174
+ "aria-label": "Open Menu"
7175
+ },
7176
+ /* @__PURE__ */ import_react103.default.createElement(import_react104.HugeiconsIcon, { icon: import_core_free_icons41.SidebarLeft01Icon, size: 16 })
7177
+ ), /* @__PURE__ */ import_react103.default.createElement("h1", { className: "font-serif text-xl text-black truncate tracking-tight" }, "Developer Settings")), /* @__PURE__ */ import_react103.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react103.default.createElement("span", { className: "px-3 py-1 bg-neutral-50 text-neutral-500 rounded-full text-[10px] tracking-[0.2em] shrink-0 w-fit sm:mt-1" }, "Read Only Access")), /* @__PURE__ */ import_react103.default.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react103.default.createElement(
7178
+ TextInput,
7179
+ {
7180
+ label: "Public Key",
7181
+ value: publicKey || "No key generated yet",
7182
+ onChange: () => {
7183
+ },
7184
+ disabled: true
7185
+ }
7186
+ ), /* @__PURE__ */ import_react103.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react103.default.createElement(
7187
+ ThreeDActionButton,
7188
+ {
7189
+ onClick: () => {
7190
+ if (publicKey) setIsRollModalOpen(true);
7191
+ else handleGenerateKeys();
7192
+ },
7193
+ disabled: isGenerating || isReadOnly,
7194
+ isLoading: isGenerating,
7195
+ className: "w-fit"
7196
+ },
7197
+ publicKey ? "Roll API Keys" : "Generate Keys"
7198
+ ))), /* @__PURE__ */ import_react103.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react103.default.createElement(
7199
+ TextInput,
7200
+ {
7201
+ label: "Webhook URL",
7202
+ value: webhookUrl,
7203
+ onChange: handleWebhookChange,
7204
+ disabled: isReadOnly || isSavingWebhook,
7205
+ placeholder: "https://your-domain.com/webhook",
7206
+ type: "url"
7207
+ }
7208
+ ), /* @__PURE__ */ import_react103.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react103.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react103.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ import_react103.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react103.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ import_react103.default.createElement(
7209
+ "button",
7210
+ {
7211
+ type: "button",
7212
+ onClick: () => setWebhookUrl(initialWebhookUrl),
7213
+ className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
7214
+ },
7215
+ "Cancel"
7216
+ ), /* @__PURE__ */ import_react103.default.createElement(
7217
+ ThreeDActionButton,
7218
+ {
7219
+ type: "submit",
7220
+ disabled: isWebhookSaveDisabled,
7221
+ isLoading: isSavingWebhook,
7222
+ className: "min-w-32 w-full sm:w-auto"
7223
+ },
7224
+ "Save Webhook"
7225
+ ))))), /* @__PURE__ */ import_react103.default.createElement(
7226
+ ConfirmationDialog,
7227
+ {
7228
+ isOpen: isRollModalOpen && !isReadOnly,
7229
+ title: "Roll API Keys",
7230
+ message: "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.",
7231
+ confirmText: "Roll Keys",
7232
+ cancelText: "Cancel",
7233
+ isProcessing: isGenerating,
7234
+ isDestructive: true,
7235
+ onClose: () => !isGenerating && setIsRollModalOpen(false),
7236
+ onConfirm: handleGenerateKeys
7237
+ }
7238
+ ));
7239
+ };
7240
+
7241
+ // src/components/UniversalApplicationPage2.tsx
7242
+ var import_react105 = __toESM(require("react"));
7243
+ var import_react106 = require("@hugeicons/react");
7244
+ var import_core_free_icons42 = require("@hugeicons/core-free-icons");
7245
+ var UniversalApplicationPage2 = ({
7246
+ userRole = "MEMBER",
7247
+ applications,
7248
+ isLoading,
7249
+ currentPage,
7250
+ totalPages,
7251
+ onPageChange,
7252
+ searchQuery,
7253
+ onSearchChange,
7254
+ activeStatusFilter,
7255
+ onStatusFilterChange,
7256
+ onApplicationClick,
7257
+ onCreateApplication
7258
+ }) => {
7259
+ const canManage = userRole === "ADMIN" || userRole === "MANAGER" || userRole === "OWNER";
7260
+ const [showStatusModal, setShowStatusModal] = (0, import_react105.useState)(false);
7261
+ const [localSearchQuery, setLocalSearchQuery] = (0, import_react105.useState)(searchQuery);
7262
+ const typingTimer = (0, import_react105.useRef)(null);
7263
+ const handleSearchInput = (e) => {
7264
+ const val = e.target.value;
7265
+ setLocalSearchQuery(val);
7266
+ if (typingTimer.current) clearTimeout(typingTimer.current);
7267
+ typingTimer.current = setTimeout(() => {
7268
+ onSearchChange(val);
7269
+ }, 600);
7270
+ };
7271
+ const APPLICATION_STATUSES = [
7272
+ "ALL",
7273
+ "DRAFT",
7274
+ "COMPLETED",
7275
+ "PENDING",
7276
+ "REJECTED",
7277
+ "QUERIED",
7278
+ "AWAITING_PAYMENT"
7279
+ ];
7280
+ return /* @__PURE__ */ import_react105.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react105.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react105.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react105.default.createElement(
7281
+ "button",
7282
+ {
7283
+ onClick: () => window.dispatchEvent(new Event("open-sidebar")),
7284
+ className: "md:hidden flex shrink-0 items-center justify-center w-7 h-7 bg-white rounded-full text-black transition-all duration-300 outline-none hover:bg-stone-50",
7285
+ "aria-label": "Open Menu"
7286
+ },
7287
+ /* @__PURE__ */ import_react105.default.createElement(import_react106.HugeiconsIcon, { icon: import_core_free_icons42.SidebarLeft01Icon, size: 16 })
7288
+ ), /* @__PURE__ */ import_react105.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Applications Directory")), /* @__PURE__ */ import_react105.default.createElement("p", { className: "text-xs text-stone-500" }, "Search, filter, and track all your organizational applications.")), /* @__PURE__ */ import_react105.default.createElement("div", { className: "flex flex-row flex-nowrap mb-2 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ import_react105.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react105.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react105.default.createElement(import_react106.HugeiconsIcon, { icon: import_core_free_icons42.Search01Icon, size: 16, className: "text-stone-400" })), /* @__PURE__ */ import_react105.default.createElement(
7289
+ "input",
7290
+ {
7291
+ type: "text",
7292
+ placeholder: "Search applications...",
7293
+ value: localSearchQuery,
7294
+ onChange: handleSearchInput,
7295
+ className: "w-full pl-10 pr-4 py-2.5 bg-white rounded-full text-sm text-black placeholder-stone-400 outline-none transition-colors focus:border-[#d97757] border border-transparent shadow-[0_2px_10px_rgba(0,0,0,0.02)]"
7296
+ }
7297
+ )), /* @__PURE__ */ import_react105.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react105.default.createElement(
7298
+ "button",
7299
+ {
7300
+ onClick: () => setShowStatusModal(true),
7301
+ className: "flex items-center justify-center bg-white shadow-[0_2px_10px_rgba(0,0,0,0.02)] w-10 h-10 rounded-full text-stone-500 hover:text-black transition-colors outline-none relative"
7302
+ },
7303
+ /* @__PURE__ */ import_react105.default.createElement(import_react106.HugeiconsIcon, { icon: import_core_free_icons42.SearchList02Icon, size: 18 }),
7304
+ activeStatusFilter !== "ALL" && /* @__PURE__ */ import_react105.default.createElement("span", { className: "absolute top-2 right-2 w-2 h-2 bg-[#d97757] rounded-full border border-white" })
7305
+ ))), /* @__PURE__ */ import_react105.default.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ import_react105.default.createElement(
7306
+ UniversalApplicationsPage,
7307
+ {
7308
+ headerTitle: "Recent Filings",
7309
+ headerDescription: "",
7310
+ applications,
7311
+ isLoading,
7312
+ currentPage,
7313
+ totalPages,
7314
+ onPageChange,
7315
+ onApplicationClick,
7316
+ onCreateApplication: canManage ? onCreateApplication : void 0
7317
+ }
7318
+ )), /* @__PURE__ */ import_react105.default.createElement(
7319
+ ReusableOptions,
7320
+ {
7321
+ isOpen: showStatusModal,
7322
+ onClose: () => setShowStatusModal(false),
7323
+ title: "Filter by Status",
7324
+ options: APPLICATION_STATUSES,
7325
+ selectedOption: activeStatusFilter,
7326
+ onSelect: (status) => {
7327
+ onStatusFilterChange(status);
7328
+ setShowStatusModal(false);
7329
+ }
7330
+ }
7331
+ ));
7332
+ };
6329
7333
  // Annotate the CommonJS export names for ESM import in node:
6330
7334
  0 && (module.exports = {
6331
7335
  AppBento2,
@@ -6356,15 +7360,20 @@ var HomeHuddleCalendar = ({
6356
7360
  PipleAuth,
6357
7361
  PlatformFeatures,
6358
7362
  PortfolioHero,
7363
+ RootSidebar,
6359
7364
  TextInput,
6360
7365
  ThreeDActionButton,
6361
7366
  ThreeDButton,
7367
+ UniversalApplicationPage2,
7368
+ UniversalApplicationsPage,
6362
7369
  UniversalBuyCryptoPage,
6363
7370
  UniversalCardActionPage,
6364
7371
  UniversalCardPage,
6365
7372
  UniversalCreateHuddle,
7373
+ UniversalDeveloperSettings,
6366
7374
  UniversalErrorView,
6367
7375
  UniversalHome2,
7376
+ UniversalHome3,
6368
7377
  UniversalHomeView,
6369
7378
  UniversalHuddleDetails,
6370
7379
  UniversalHuddlesPage,
@@ -6376,6 +7385,7 @@ var HomeHuddleCalendar = ({
6376
7385
  UniversalRewardPage,
6377
7386
  UniversalSecurityPage,
6378
7387
  UniversalSettings,
7388
+ UniversalSettings2,
6379
7389
  UniversalSidebar,
6380
7390
  UniversalTransactionPage,
6381
7391
  UniversalVerificationPage,