@retinalabsllc/zairusjs 21.1.6 → 21.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +64 -2
- package/dist/index.d.ts +64 -2
- package/dist/index.js +219 -56
- package/dist/index.mjs +220 -56
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -6473,8 +6473,7 @@ import {
|
|
|
6473
6473
|
ArrowRight01Icon as ArrowRight01Icon17,
|
|
6474
6474
|
CancelCircleIcon as CancelCircleIcon14,
|
|
6475
6475
|
ArrowUpRight01Icon as ArrowUpRight01Icon4,
|
|
6476
|
-
Robot01Icon as Robot01Icon2
|
|
6477
|
-
SidebarLeft01Icon
|
|
6476
|
+
Robot01Icon as Robot01Icon2
|
|
6478
6477
|
} from "@hugeicons/core-free-icons";
|
|
6479
6478
|
var UniversalHome3 = ({
|
|
6480
6479
|
createApplicationAction,
|
|
@@ -6506,19 +6505,11 @@ var UniversalHome3 = ({
|
|
|
6506
6505
|
setIsResolving(false);
|
|
6507
6506
|
}
|
|
6508
6507
|
};
|
|
6509
|
-
return /* @__PURE__ */ React56.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center justify-between w-full pb-4" }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React56.createElement(
|
|
6510
|
-
"button",
|
|
6511
|
-
{
|
|
6512
|
-
onClick: () => window.dispatchEvent(new Event("open-sidebar")),
|
|
6513
|
-
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",
|
|
6514
|
-
"aria-label": "Open Menu"
|
|
6515
|
-
},
|
|
6516
|
-
/* @__PURE__ */ React56.createElement(HugeiconsIcon42, { icon: SidebarLeft01Icon, size: 16 })
|
|
6517
|
-
)), /* @__PURE__ */ React56.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ React56.createElement(
|
|
6508
|
+
return /* @__PURE__ */ React56.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center justify-between w-full pb-4" }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center gap-3" }), /* @__PURE__ */ React56.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ React56.createElement(
|
|
6518
6509
|
"button",
|
|
6519
6510
|
{
|
|
6520
6511
|
onClick: () => router.push("/app/ai"),
|
|
6521
|
-
className: "relative w-
|
|
6512
|
+
className: "relative w-9 h-9 flex items-center justify-center rounded-full bg-white outline-none hover:bg-stone-50 transition-colors"
|
|
6522
6513
|
},
|
|
6523
6514
|
/* @__PURE__ */ React56.createElement(HugeiconsIcon42, { icon: Robot01Icon2, size: 16, className: "text-black" })
|
|
6524
6515
|
), /* @__PURE__ */ React56.createElement(
|
|
@@ -6528,7 +6519,7 @@ var UniversalHome3 = ({
|
|
|
6528
6519
|
setShowNotifDialog(true);
|
|
6529
6520
|
setSelectedNotif(null);
|
|
6530
6521
|
},
|
|
6531
|
-
className: "relative w-
|
|
6522
|
+
className: "relative w-9 h-9 flex items-center justify-center rounded-full bg-white outline-none hover:bg-stone-50 transition-colors"
|
|
6532
6523
|
},
|
|
6533
6524
|
/* @__PURE__ */ React56.createElement(HugeiconsIcon42, { icon: Notification01Icon3, size: 16, className: "text-black" }),
|
|
6534
6525
|
hasUnreadNotifs && /* @__PURE__ */ React56.createElement("span", { className: "absolute top-2.5 right-2.5 w-2 h-2 bg-[#d97757] rounded-full border border-white" })
|
|
@@ -6542,7 +6533,7 @@ var UniversalHome3 = ({
|
|
|
6542
6533
|
/* @__PURE__ */ React56.createElement(
|
|
6543
6534
|
"img",
|
|
6544
6535
|
{
|
|
6545
|
-
src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/
|
|
6536
|
+
src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/create-file.avif",
|
|
6546
6537
|
alt: "New Application",
|
|
6547
6538
|
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"
|
|
6548
6539
|
}
|
|
@@ -6557,7 +6548,7 @@ var UniversalHome3 = ({
|
|
|
6557
6548
|
/* @__PURE__ */ React56.createElement(
|
|
6558
6549
|
"img",
|
|
6559
6550
|
{
|
|
6560
|
-
src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/
|
|
6551
|
+
src: "https://storage.googleapis.com/retina-cloud-v2/assets/images/search-file.avif",
|
|
6561
6552
|
alt: "Check Application",
|
|
6562
6553
|
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"
|
|
6563
6554
|
}
|
|
@@ -6631,6 +6622,7 @@ function RootSidebar({
|
|
|
6631
6622
|
currentPath,
|
|
6632
6623
|
isMobileOpen,
|
|
6633
6624
|
closeMobile,
|
|
6625
|
+
openMobile,
|
|
6634
6626
|
onNavClick,
|
|
6635
6627
|
avatarSrc,
|
|
6636
6628
|
title = "App",
|
|
@@ -6667,7 +6659,22 @@ function RootSidebar({
|
|
|
6667
6659
|
}
|
|
6668
6660
|
};
|
|
6669
6661
|
const finalAvatarSrc = avatarSrc || "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
6670
|
-
return /* @__PURE__ */ React57.createElement(React57.Fragment, null, /* @__PURE__ */ React57.createElement(
|
|
6662
|
+
return /* @__PURE__ */ React57.createElement(React57.Fragment, null, !isMobileOpen && /* @__PURE__ */ React57.createElement(
|
|
6663
|
+
"button",
|
|
6664
|
+
{
|
|
6665
|
+
onClick: openMobile,
|
|
6666
|
+
className: "md:hidden fixed left-0 top-1/2 -translate-y-1/2 z-50 bg-white border border-stone-200 border-l-0 shadow-[4px_0_24px_rgba(0,0,0,0.06)] rounded-r-xl py-6 px-1.5 flex items-center justify-center outline-none hover:bg-stone-50 transition-colors",
|
|
6667
|
+
"aria-label": "Open Menu"
|
|
6668
|
+
},
|
|
6669
|
+
/* @__PURE__ */ React57.createElement(
|
|
6670
|
+
"span",
|
|
6671
|
+
{
|
|
6672
|
+
className: "text-[10px] font-medium uppercase tracking-[0.2em] text-stone-500",
|
|
6673
|
+
style: { writingMode: "vertical-rl", transform: "rotate(180deg)" }
|
|
6674
|
+
},
|
|
6675
|
+
"Open Menu"
|
|
6676
|
+
)
|
|
6677
|
+
), /* @__PURE__ */ React57.createElement(
|
|
6671
6678
|
"div",
|
|
6672
6679
|
{
|
|
6673
6680
|
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"}`,
|
|
@@ -6797,12 +6804,8 @@ import {
|
|
|
6797
6804
|
ArrowLeft01Icon as ArrowLeft01Icon23,
|
|
6798
6805
|
ArrowRight01Icon as ArrowRight01Icon18,
|
|
6799
6806
|
Loading03Icon as Loading03Icon32,
|
|
6800
|
-
Search01Icon as Search01Icon9,
|
|
6801
|
-
SearchList02Icon as SearchList02Icon4,
|
|
6802
|
-
ListSettingIcon as ListSettingIcon4,
|
|
6803
6807
|
CircleLock02Icon as CircleLock02Icon5,
|
|
6804
|
-
CloudUploadIcon as CloudUploadIcon2
|
|
6805
|
-
SidebarLeft01Icon as SidebarLeft01Icon3
|
|
6808
|
+
CloudUploadIcon as CloudUploadIcon2
|
|
6806
6809
|
} from "@hugeicons/core-free-icons";
|
|
6807
6810
|
var MemberAvatar5 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
6808
6811
|
const [loaded, setLoaded] = useState42(false);
|
|
@@ -7108,15 +7111,7 @@ var UniversalSettings2 = ({
|
|
|
7108
7111
|
tabs.push({ id: "ORGANIZATION", label: "Organization" });
|
|
7109
7112
|
}
|
|
7110
7113
|
tabs.push({ id: "ACCOUNT", label: "Profile" });
|
|
7111
|
-
return /* @__PURE__ */ React58.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React58.createElement(ManagedToaster, null), /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ React58.createElement("div", { className: "flex items-center
|
|
7112
|
-
"button",
|
|
7113
|
-
{
|
|
7114
|
-
onClick: () => window.dispatchEvent(new Event("open-sidebar")),
|
|
7115
|
-
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",
|
|
7116
|
-
"aria-label": "Open Menu"
|
|
7117
|
-
},
|
|
7118
|
-
/* @__PURE__ */ React58.createElement(HugeiconsIcon44, { icon: SidebarLeft01Icon3, size: 16 })
|
|
7119
|
-
), /* @__PURE__ */ React58.createElement("h1", { className: "text-black text-xl tracking-tight" }, "System Settings")), /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-500" }, "Manage your workspace identity, team configurations, and AI billing parameters.")), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center mb-4 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React58.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) => {
|
|
7114
|
+
return /* @__PURE__ */ React58.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React58.createElement(ManagedToaster, null), /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ React58.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React58.createElement("h1", { className: "text-black text-xl tracking-tight" }, "System Settings")), /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-500" }, "Manage your workspace identity, team configurations, and AI billing parameters.")), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center mb-4 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React58.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) => {
|
|
7120
7115
|
const isActive = activeTab === tab.id;
|
|
7121
7116
|
return /* @__PURE__ */ React58.createElement(
|
|
7122
7117
|
"button",
|
|
@@ -7146,7 +7141,7 @@ var UniversalSettings2 = ({
|
|
|
7146
7141
|
onClose: () => setMemberToRemove(null),
|
|
7147
7142
|
onConfirm: handleConfirmRemove
|
|
7148
7143
|
}
|
|
7149
|
-
),
|
|
7144
|
+
), /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, activeExpandedMember ? /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col animate-in fade-in zoom-in-95 duration-300 w-full" }, /* @__PURE__ */ React58.createElement("div", { className: "mb-6 flex w-full items-center" }, /* @__PURE__ */ React58.createElement(
|
|
7150
7145
|
"button",
|
|
7151
7146
|
{
|
|
7152
7147
|
onClick: () => setExpandedId(null),
|
|
@@ -7166,7 +7161,7 @@ var UniversalSettings2 = ({
|
|
|
7166
7161
|
))))))) : /* @__PURE__ */ React58.createElement(React58.Fragment, null, /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React58.createElement("div", { className: "flex flex-row items-center justify-between gap-4" }, /* @__PURE__ */ React58.createElement("h2", { className: "text-black text-xl tracking-tight" }, isInviteMode ? "Add Member" : "Team Directory"), !isInviteMode && canManage && /* @__PURE__ */ React58.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__ */ React58.createElement("p", { className: "text-xs text-stone-500" }, "Manage members and access controls across your organization.")), /* @__PURE__ */ React58.createElement("div", { className: "w-full overflow-hidden" }, isInviteMode ? /* @__PURE__ */ React58.createElement("form", { onSubmit: handleInviteSubmit, className: "flex flex-col gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React58.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ React58.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ React58.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__ */ React58.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React58.createElement(ThreeDActionButton, { type: "submit", disabled: inviteEmail.length < 5 || isInviting, isLoading: isInviting, className: "w-full" }, "Send Invitation"), /* @__PURE__ */ React58.createElement("button", { type: "button", onClick: () => {
|
|
7167
7162
|
setIsInviteMode(false);
|
|
7168
7163
|
setInviteEmail("");
|
|
7169
|
-
}, 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__ */ React58.createElement(PageSpinner10, null) : /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col min-w-0 animate-in fade-in duration-300" }, /* @__PURE__ */ React58.createElement("div", null, members.length === 0 ? /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-400 py-6 text-center" }, "No members found") : members.map((member) => /* @__PURE__ */ React58.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__ */ React58.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React58.createElement(MemberAvatar5, { src: member.avatarUrl, status: member.status }), /* @__PURE__ */ React58.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5" }, /* @__PURE__ */ React58.createElement("p", { className: "text-sm text-black truncate" }, member.fullName), /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-500 capitalize truncate" }, member.role.toLowerCase())))))), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ React58.createElement("span", { className: "text-xs text-stone-400 tracking-[0.2em]" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React58.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__ */ React58.createElement(HugeiconsIcon44, { icon: ArrowLeft01Icon23, size: 14 })), /* @__PURE__ */ React58.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__ */ React58.createElement(HugeiconsIcon44, { icon: ArrowRight01Icon18, size: 14 })))))))), /* @__PURE__ */ React58.createElement(ReusableOptions, { isOpen:
|
|
7164
|
+
}, 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__ */ React58.createElement(PageSpinner10, null) : /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col min-w-0 animate-in fade-in duration-300" }, /* @__PURE__ */ React58.createElement("div", null, members.length === 0 ? /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-400 py-6 text-center" }, "No members found") : members.map((member) => /* @__PURE__ */ React58.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__ */ React58.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React58.createElement(MemberAvatar5, { src: member.avatarUrl, status: member.status }), /* @__PURE__ */ React58.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5" }, /* @__PURE__ */ React58.createElement("p", { className: "text-sm text-black truncate" }, member.fullName), /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-500 capitalize truncate" }, member.role.toLowerCase())))))), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ React58.createElement("span", { className: "text-xs text-stone-400 tracking-[0.2em]" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ React58.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React58.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__ */ React58.createElement(HugeiconsIcon44, { icon: ArrowLeft01Icon23, size: 14 })), /* @__PURE__ */ React58.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__ */ React58.createElement(HugeiconsIcon44, { icon: ArrowRight01Icon18, size: 14 })))))))), /* @__PURE__ */ React58.createElement(ReusableOptions, { isOpen: !!roleEditTarget, onClose: () => setRoleEditTarget(null), title: "Modify Access Role", options: ["ADMIN", "MANAGER", "MEMBER"], selectedOption: roleEditTarget?.role || "", onSelect: handleRoleUpdate })), activeTab === "ORGANIZATION" && isOrg && /* @__PURE__ */ React58.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React58.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React58.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React58.createElement("div", { className: "relative group cursor-pointer shrink-0", onClick: () => canManage && !isSavingOrg ? orgFileInputRef.current?.click() : void 0 }, /* @__PURE__ */ React58.createElement(OrgAvatar3, { src: orgAvatarUrl, sizeClass: "w-14 h-14" }), canManage && /* @__PURE__ */ React58.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__ */ React58.createElement(HugeiconsIcon44, { icon: Loading03Icon32, size: 12, className: "animate-spin" }) : /* @__PURE__ */ React58.createElement(HugeiconsIcon44, { icon: CloudUploadIcon2, size: 14 })), /* @__PURE__ */ React58.createElement("input", { type: "file", ref: orgFileInputRef, className: "hidden", accept: ".png, .jpg, .jpeg", onChange: (e) => handleFileSelect(e, "ORGANIZATION") })), /* @__PURE__ */ React58.createElement("div", null, /* @__PURE__ */ React58.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Workspace Details"), /* @__PURE__ */ React58.createElement("p", { className: "text-xs text-stone-500" }, "Manage your organizational identity and handles."))), !canManage && /* @__PURE__ */ React58.createElement("span", { className: "p-2 w-9 h-9 bg-stone-100 text-stone-400 rounded-full shrink-0" }, /* @__PURE__ */ React58.createElement(HugeiconsIcon44, { icon: CircleLock02Icon5, size: 18, className: "text-current" }))), /* @__PURE__ */ React58.createElement("form", { className: "flex flex-col gap-8 w-full max-w-5xl", onSubmit: handleSaveOrganization, autoComplete: "off" }, /* @__PURE__ */ React58.createElement(TextInput, { label: "Workspace Name", value: orgName, onChange: handleOrgNameChange, disabled: !canManage || isSavingOrg, placeholder: "Acme Corporation", maxLength: 50 }), /* @__PURE__ */ React58.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ React58.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Workspace Handle"), /* @__PURE__ */ React58.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__ */ React58.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__ */ React58.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ React58.createElement(InputSpinner4, null), !isCheckingSlug && canManage && orgSlug !== initialOrgSlug && orgSlug.length >= 3 && slugAvailable === false && /* @__PURE__ */ React58.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-[#d97757]/10" }, /* @__PURE__ */ React58.createElement("svg", { className: "w-2 h-2 text-[#d97757]", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React58.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__ */ React58.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ React58.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React58.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__ */ React58.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ React58.createElement(ThreeDActionButton, { type: "submit", disabled: isOrgSaveDisabled, isLoading: isSavingOrg, className: "min-w-32" }, "Save Changes"), hasOrgChanges && !isSavingOrg && canManage && /* @__PURE__ */ React58.createElement("button", { type: "button", onClick: () => {
|
|
7170
7165
|
setOrgName(initialOrgName || "");
|
|
7171
7166
|
setOrgSlug(initialOrgSlug || "");
|
|
7172
7167
|
setOrgAvatarUrl(initialOrgAvatarUrl || "");
|
|
@@ -7187,8 +7182,6 @@ var UniversalSettings2 = ({
|
|
|
7187
7182
|
// src/components/UniversalDeveloperSettings.tsx
|
|
7188
7183
|
import React59, { useState as useState43, useEffect as useEffect25 } from "react";
|
|
7189
7184
|
import { toast as toast19 } from "react-hot-toast";
|
|
7190
|
-
import { HugeiconsIcon as HugeiconsIcon45 } from "@hugeicons/react";
|
|
7191
|
-
import { SidebarLeft01Icon as SidebarLeft01Icon4 } from "@hugeicons/core-free-icons";
|
|
7192
7185
|
var UniversalDeveloperSettings = ({
|
|
7193
7186
|
initialPublicKey,
|
|
7194
7187
|
initialWebhookUrl,
|
|
@@ -7261,15 +7254,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
7261
7254
|
};
|
|
7262
7255
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
7263
7256
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
7264
|
-
return /* @__PURE__ */ React59.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__ */ React59.createElement(ManagedToaster, null), /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col min-w-0 gap-1" }, /* @__PURE__ */ React59.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React59.createElement(
|
|
7265
|
-
"button",
|
|
7266
|
-
{
|
|
7267
|
-
onClick: () => window.dispatchEvent(new Event("open-sidebar")),
|
|
7268
|
-
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",
|
|
7269
|
-
"aria-label": "Open Menu"
|
|
7270
|
-
},
|
|
7271
|
-
/* @__PURE__ */ React59.createElement(HugeiconsIcon45, { icon: SidebarLeft01Icon4, size: 16 })
|
|
7272
|
-
), /* @__PURE__ */ React59.createElement("h1", { className: "font-serif text-xl text-black truncate tracking-tight" }, "Developer Settings")), /* @__PURE__ */ React59.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ React59.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__ */ React59.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React59.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React59.createElement(
|
|
7257
|
+
return /* @__PURE__ */ React59.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__ */ React59.createElement(ManagedToaster, null), /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col min-w-0 gap-1" }, /* @__PURE__ */ React59.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React59.createElement("h1", { className: "font-serif text-xl text-black truncate tracking-tight" }, "Developer Settings")), /* @__PURE__ */ React59.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ React59.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__ */ React59.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ React59.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React59.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React59.createElement(
|
|
7273
7258
|
TextInput,
|
|
7274
7259
|
{
|
|
7275
7260
|
label: "Public Key",
|
|
@@ -7335,11 +7320,10 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
7335
7320
|
|
|
7336
7321
|
// src/components/UniversalApplicationPage2.tsx
|
|
7337
7322
|
import React60, { useState as useState44, useRef as useRef18 } from "react";
|
|
7338
|
-
import { HugeiconsIcon as
|
|
7323
|
+
import { HugeiconsIcon as HugeiconsIcon45 } from "@hugeicons/react";
|
|
7339
7324
|
import {
|
|
7340
7325
|
Search01Icon as Search01Icon10,
|
|
7341
|
-
SearchList02Icon as SearchList02Icon5
|
|
7342
|
-
SidebarLeft01Icon as SidebarLeft01Icon5
|
|
7326
|
+
SearchList02Icon as SearchList02Icon5
|
|
7343
7327
|
} from "@hugeicons/core-free-icons";
|
|
7344
7328
|
var UniversalApplicationPage2 = ({
|
|
7345
7329
|
userRole = "MEMBER",
|
|
@@ -7376,15 +7360,7 @@ var UniversalApplicationPage2 = ({
|
|
|
7376
7360
|
"QUERIED",
|
|
7377
7361
|
"AWAITING_PAYMENT"
|
|
7378
7362
|
];
|
|
7379
|
-
return /* @__PURE__ */ React60.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React60.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ React60.createElement("div", { className: "flex items-center gap-
|
|
7380
|
-
"button",
|
|
7381
|
-
{
|
|
7382
|
-
onClick: () => window.dispatchEvent(new Event("open-sidebar")),
|
|
7383
|
-
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",
|
|
7384
|
-
"aria-label": "Open Menu"
|
|
7385
|
-
},
|
|
7386
|
-
/* @__PURE__ */ React60.createElement(HugeiconsIcon46, { icon: SidebarLeft01Icon5, size: 16 })
|
|
7387
|
-
), /* @__PURE__ */ React60.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Applications Directory")), /* @__PURE__ */ React60.createElement("p", { className: "text-xs text-stone-500" }, "Search, filter, and track all your organizational applications.")), /* @__PURE__ */ React60.createElement("div", { className: "flex flex-row flex-nowrap mb-2 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ React60.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ React60.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React60.createElement(HugeiconsIcon46, { icon: Search01Icon10, size: 16, className: "text-stone-400" })), /* @__PURE__ */ React60.createElement(
|
|
7363
|
+
return /* @__PURE__ */ React60.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React60.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ React60.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React60.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Applications Directory")), /* @__PURE__ */ React60.createElement("p", { className: "text-xs text-stone-500" }, "Search, filter, and track all your organizational applications.")), /* @__PURE__ */ React60.createElement("div", { className: "flex flex-row flex-nowrap mb-2 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ React60.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ React60.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React60.createElement(HugeiconsIcon45, { icon: Search01Icon10, size: 16, className: "text-stone-400" })), /* @__PURE__ */ React60.createElement(
|
|
7388
7364
|
"input",
|
|
7389
7365
|
{
|
|
7390
7366
|
type: "text",
|
|
@@ -7399,7 +7375,7 @@ var UniversalApplicationPage2 = ({
|
|
|
7399
7375
|
onClick: () => setShowStatusModal(true),
|
|
7400
7376
|
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"
|
|
7401
7377
|
},
|
|
7402
|
-
/* @__PURE__ */ React60.createElement(
|
|
7378
|
+
/* @__PURE__ */ React60.createElement(HugeiconsIcon45, { icon: SearchList02Icon5, size: 18 }),
|
|
7403
7379
|
activeStatusFilter !== "ALL" && /* @__PURE__ */ React60.createElement("span", { className: "absolute top-2 right-2 w-2 h-2 bg-[#d97757] rounded-full border border-white" })
|
|
7404
7380
|
))), /* @__PURE__ */ React60.createElement("div", { className: "w-full mt-2" }, /* @__PURE__ */ React60.createElement(
|
|
7405
7381
|
UniversalApplicationsPage,
|
|
@@ -7429,6 +7405,192 @@ var UniversalApplicationPage2 = ({
|
|
|
7429
7405
|
}
|
|
7430
7406
|
));
|
|
7431
7407
|
};
|
|
7408
|
+
|
|
7409
|
+
// src/components/UniversalApplicationDetails.tsx
|
|
7410
|
+
import React61, { useState as useState45 } from "react";
|
|
7411
|
+
import { HugeiconsIcon as HugeiconsIcon46 } from "@hugeicons/react";
|
|
7412
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon24 } from "@hugeicons/core-free-icons";
|
|
7413
|
+
var formatType2 = (type) => type.split("_").map((w) => w[0] + w.slice(1).toLowerCase()).join(" ");
|
|
7414
|
+
var UniversalApplicationDetails = ({
|
|
7415
|
+
onBackHref,
|
|
7416
|
+
application,
|
|
7417
|
+
canDelete,
|
|
7418
|
+
onDeleteSubmit
|
|
7419
|
+
}) => {
|
|
7420
|
+
const [isDeleting, setIsDeleting] = useState45(false);
|
|
7421
|
+
const [confirmDialog, setConfirmDialog] = useState45(false);
|
|
7422
|
+
const isLockedStatus = ["COMPLETED", "PENDING", "REJECTED", "QUERIED"].includes(application.status);
|
|
7423
|
+
const deletePermitted = canDelete && !isLockedStatus;
|
|
7424
|
+
const handleDelete = async () => {
|
|
7425
|
+
setIsDeleting(true);
|
|
7426
|
+
try {
|
|
7427
|
+
await onDeleteSubmit();
|
|
7428
|
+
setConfirmDialog(false);
|
|
7429
|
+
} catch (error) {
|
|
7430
|
+
}
|
|
7431
|
+
setIsDeleting(false);
|
|
7432
|
+
};
|
|
7433
|
+
return /* @__PURE__ */ React61.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React61.createElement(ManagedToaster, null), /* @__PURE__ */ React61.createElement(
|
|
7434
|
+
ConfirmationDialog,
|
|
7435
|
+
{
|
|
7436
|
+
isOpen: confirmDialog,
|
|
7437
|
+
title: "Delete Application",
|
|
7438
|
+
message: "Are you sure you want to permanently delete this application and its assets? This action cannot be undone.",
|
|
7439
|
+
confirmText: "Delete Application",
|
|
7440
|
+
cancelText: "Cancel",
|
|
7441
|
+
isProcessing: isDeleting,
|
|
7442
|
+
isDestructive: true,
|
|
7443
|
+
onClose: () => setConfirmDialog(false),
|
|
7444
|
+
onConfirm: handleDelete
|
|
7445
|
+
}
|
|
7446
|
+
), /* @__PURE__ */ React61.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ React61.createElement("a", { href: onBackHref, className: "flex items-center gap-2 text-[#d97757] hover:text-[#d97757] transition-colors text-sm outline-none" }, /* @__PURE__ */ React61.createElement(HugeiconsIcon46, { icon: ArrowLeft01Icon24, size: 16 }), " Back")), /* @__PURE__ */ React61.createElement("div", { className: "mb-8 px-1 flex flex-col sm:flex-row sm:items-center justify-between gap-4" }, /* @__PURE__ */ React61.createElement("div", null, /* @__PURE__ */ React61.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Application Details"), /* @__PURE__ */ React61.createElement("p", { className: "text-xs text-stone-500" }, "Review your filing entity and access its workspace.")), /* @__PURE__ */ React61.createElement("div", { className: "px-4 py-1.5 bg-stone-100 text-stone-600 rounded-full text-xs self-start sm:self-auto uppercase tracking-widest " }, application.status)), /* @__PURE__ */ React61.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React61.createElement("div", { className: "flex flex-col gap-1 w-full" }, /* @__PURE__ */ React61.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Target Company"), /* @__PURE__ */ React61.createElement("span", { className: "text-sm text-black py-2 " }, application.name)), /* @__PURE__ */ React61.createElement("div", { className: "flex flex-col gap-1 w-full border-t border-stone-100 pt-6" }, /* @__PURE__ */ React61.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Filing Type"), /* @__PURE__ */ React61.createElement("span", { className: "text-sm text-black py-2" }, formatType2(application.type))), /* @__PURE__ */ React61.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 pt-6 mt-2 border-t border-stone-100" }, /* @__PURE__ */ React61.createElement("a", { href: `/app/applications/app/${application.id}`, className: "flex-1 w-full py-2.5 bg-[#d97757] text-white rounded-full text-center text-xs transition-colors hover:bg-[#d97757]/90" }, "Open Application"), /* @__PURE__ */ React61.createElement("a", { href: `/app/applications/assets/${application.id}`, className: "flex-1 w-full py-2.5 bg-transparent border border-stone-200 text-black rounded-full text-center text-xs transition-colors hover:bg-stone-50" }, "Application Assets"), deletePermitted && /* @__PURE__ */ React61.createElement("button", { onClick: () => setConfirmDialog(true), className: "flex-1 w-full py-2.5 bg-transparent border border-stone-200 text-black rounded-full text-center text-xs transition-colors hover:bg-stone-50" }, "Delete Application"))));
|
|
7447
|
+
};
|
|
7448
|
+
|
|
7449
|
+
// src/components/UniversalCreateApplication.tsx
|
|
7450
|
+
import React62, { useState as useState46, useRef as useRef19, useEffect as useEffect26 } from "react";
|
|
7451
|
+
import toast20 from "react-hot-toast";
|
|
7452
|
+
import { HugeiconsIcon as HugeiconsIcon47 } from "@hugeicons/react";
|
|
7453
|
+
import {
|
|
7454
|
+
ArrowLeft01Icon as ArrowLeft01Icon25,
|
|
7455
|
+
ArrowRight01Icon as ArrowRight01Icon19,
|
|
7456
|
+
Loading03Icon as Loading03Icon33,
|
|
7457
|
+
Search01Icon as Search01Icon11,
|
|
7458
|
+
CircleLock02Icon as CircleLock02Icon6,
|
|
7459
|
+
Tick02Icon as Tick02Icon4,
|
|
7460
|
+
Building03Icon,
|
|
7461
|
+
File02Icon
|
|
7462
|
+
} from "@hugeicons/core-free-icons";
|
|
7463
|
+
var MemberAvatar6 = ({ src, sizeClass = "w-10 h-10" }) => {
|
|
7464
|
+
const [loaded, setLoaded] = useState46(false);
|
|
7465
|
+
const [error, setError] = useState46(false);
|
|
7466
|
+
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
7467
|
+
return /* @__PURE__ */ React62.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ React62.createElement("div", { className: "w-full h-full rounded-lg bg-stone-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Loading03Icon33, className: "animate-spin text-stone-400 absolute", size: 14 }), /* @__PURE__ */ React62.createElement("img", { src: error || !src ? defaultAvatar : src, alt: "Avatar", className: `w-full h-full object-cover transition-opacity duration-300 ${loaded || error ? "opacity-100" : "opacity-0"}`, onLoad: () => setLoaded(true), onError: () => setError(true) })));
|
|
7468
|
+
};
|
|
7469
|
+
var UniversalCreateApplication = ({
|
|
7470
|
+
onBackHref,
|
|
7471
|
+
userRole = "MEMBER",
|
|
7472
|
+
applicationTypesMeta = [],
|
|
7473
|
+
members,
|
|
7474
|
+
isMembersLoading,
|
|
7475
|
+
membersCurrentPage,
|
|
7476
|
+
membersTotalPages,
|
|
7477
|
+
onMembersPageChange,
|
|
7478
|
+
membersSearchQuery,
|
|
7479
|
+
onMembersSearchChange,
|
|
7480
|
+
companies,
|
|
7481
|
+
isCompaniesLoading,
|
|
7482
|
+
companiesCurrentPage,
|
|
7483
|
+
companiesTotalPages,
|
|
7484
|
+
onCompaniesPageChange,
|
|
7485
|
+
companiesSearchQuery,
|
|
7486
|
+
onCompaniesSearchChange,
|
|
7487
|
+
onCreateSubmit
|
|
7488
|
+
}) => {
|
|
7489
|
+
const canManage = userRole === "ADMIN" || userRole === "MANAGER" || userRole === "OWNER";
|
|
7490
|
+
const [creationMode, setCreationMode] = useState46("EXISTING");
|
|
7491
|
+
const defaultTypeKey = applicationTypesMeta.length > 0 ? applicationTypesMeta[0].key : "";
|
|
7492
|
+
const [selectedTypeKey, setSelectedTypeKey] = useState46(defaultTypeKey);
|
|
7493
|
+
useEffect26(() => {
|
|
7494
|
+
if (!selectedTypeKey && applicationTypesMeta.length > 0) {
|
|
7495
|
+
setSelectedTypeKey(applicationTypesMeta[0].key);
|
|
7496
|
+
}
|
|
7497
|
+
}, [applicationTypesMeta, selectedTypeKey]);
|
|
7498
|
+
const [selectedCompanyId, setSelectedCompanyId] = useState46(null);
|
|
7499
|
+
const [newCompanyName, setNewCompanyName] = useState46("");
|
|
7500
|
+
const [isPrivate, setIsPrivate] = useState46(false);
|
|
7501
|
+
const [selectedParticipants, setSelectedParticipants] = useState46(/* @__PURE__ */ new Set());
|
|
7502
|
+
const [isSubmitting, setIsSubmitting] = useState46(false);
|
|
7503
|
+
const [showTypeModal, setShowTypeModal] = useState46(false);
|
|
7504
|
+
const [showMembersModal, setShowMembersModal] = useState46(false);
|
|
7505
|
+
const [showCompaniesModal, setShowCompaniesModal] = useState46(false);
|
|
7506
|
+
const [localMemSearch, setLocalMemSearch] = useState46(membersSearchQuery);
|
|
7507
|
+
const memTimer = useRef19(null);
|
|
7508
|
+
const handleMemSearch = (e) => {
|
|
7509
|
+
const val = e.target.value;
|
|
7510
|
+
setLocalMemSearch(val);
|
|
7511
|
+
if (memTimer.current) clearTimeout(memTimer.current);
|
|
7512
|
+
memTimer.current = setTimeout(() => onMembersSearchChange(val), 500);
|
|
7513
|
+
};
|
|
7514
|
+
const [localCompSearch, setLocalCompSearch] = useState46(companiesSearchQuery);
|
|
7515
|
+
const compTimer = useRef19(null);
|
|
7516
|
+
const handleCompSearch = (e) => {
|
|
7517
|
+
const val = e.target.value;
|
|
7518
|
+
setLocalCompSearch(val);
|
|
7519
|
+
if (compTimer.current) clearTimeout(compTimer.current);
|
|
7520
|
+
compTimer.current = setTimeout(() => onCompaniesSearchChange(val), 500);
|
|
7521
|
+
};
|
|
7522
|
+
const toggleParticipant = (userId) => {
|
|
7523
|
+
if (!canManage) return;
|
|
7524
|
+
const newSet = new Set(selectedParticipants);
|
|
7525
|
+
if (newSet.has(userId)) newSet.delete(userId);
|
|
7526
|
+
else newSet.add(userId);
|
|
7527
|
+
setSelectedParticipants(newSet);
|
|
7528
|
+
};
|
|
7529
|
+
const handleSubmit = async (e) => {
|
|
7530
|
+
e.preventDefault();
|
|
7531
|
+
if (!canManage) return;
|
|
7532
|
+
if (!selectedTypeKey) return toast20.error("Please select a valid application type.");
|
|
7533
|
+
if (creationMode === "EXISTING" && !selectedCompanyId) return toast20.error("Please select a company.");
|
|
7534
|
+
if (creationMode === "NEW" && newCompanyName.trim().length < 2) return toast20.error("Company name is required.");
|
|
7535
|
+
setIsSubmitting(true);
|
|
7536
|
+
try {
|
|
7537
|
+
await onCreateSubmit({
|
|
7538
|
+
creationMode,
|
|
7539
|
+
companyId: creationMode === "EXISTING" ? selectedCompanyId : void 0,
|
|
7540
|
+
newCompany: creationMode === "NEW" ? {
|
|
7541
|
+
name: newCompanyName.trim(),
|
|
7542
|
+
isPrivate,
|
|
7543
|
+
assignedUsers: isPrivate ? Array.from(selectedParticipants) : []
|
|
7544
|
+
} : void 0,
|
|
7545
|
+
type: selectedTypeKey
|
|
7546
|
+
});
|
|
7547
|
+
} catch (error) {
|
|
7548
|
+
toast20.error(error.message || "Failed to create application.");
|
|
7549
|
+
setIsSubmitting(false);
|
|
7550
|
+
}
|
|
7551
|
+
};
|
|
7552
|
+
const activeCompany = companies.find((c) => c.id === selectedCompanyId);
|
|
7553
|
+
const activeTypeObj = applicationTypesMeta.find((t) => t.key === selectedTypeKey) || applicationTypesMeta[0];
|
|
7554
|
+
const modeTabs = [
|
|
7555
|
+
{ id: "EXISTING", label: "Select Company" },
|
|
7556
|
+
{ id: "NEW", label: "New Company" }
|
|
7557
|
+
];
|
|
7558
|
+
return /* @__PURE__ */ React62.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React62.createElement(ManagedToaster, null), /* @__PURE__ */ React62.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ React62.createElement("a", { href: onBackHref, className: "flex items-center gap-2 text-[#d97757] hover:text-[#d97757] transition-colors text-sm outline-none" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: ArrowLeft01Icon25, size: 16 }), " Back")), /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col gap-1 mb-6 px-1" }, /* @__PURE__ */ React62.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Create Application"), /* @__PURE__ */ React62.createElement("p", { className: "text-xs text-stone-500" }, "Initiate a new registration or filing for a company.")), /* @__PURE__ */ React62.createElement("div", { className: "flex items-center mb-4 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React62.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, modeTabs.map((tab) => {
|
|
7559
|
+
const isActive = creationMode === tab.id;
|
|
7560
|
+
return /* @__PURE__ */ React62.createElement(
|
|
7561
|
+
"button",
|
|
7562
|
+
{
|
|
7563
|
+
key: tab.id,
|
|
7564
|
+
type: "button",
|
|
7565
|
+
onClick: () => setCreationMode(tab.id),
|
|
7566
|
+
disabled: isSubmitting,
|
|
7567
|
+
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"}`
|
|
7568
|
+
},
|
|
7569
|
+
tab.label
|
|
7570
|
+
);
|
|
7571
|
+
}))), /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ React62.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSubmit, autoComplete: "off" }, !canManage && /* @__PURE__ */ React62.createElement("div", { className: "flex items-start gap-3 p-4 bg-stone-50 rounded-xl" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: CircleLock02Icon6, size: 20, className: "text-stone-500 shrink-0 mt-0.5" }), /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React62.createElement("span", { className: "text-sm text-black tracking-tight" }, "Access Restricted"), /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-stone-500 mt-1 leading-relaxed" }, "You lack clearance to create applications."))), creationMode === "EXISTING" ? /* @__PURE__ */ React62.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ React62.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Target Company"), /* @__PURE__ */ React62.createElement("div", { onClick: () => canManage && !isSubmitting && setShowCompaniesModal(true), className: `flex items-center relative w-full border-b border-stone-200 transition-all duration-300 pb-3 pt-3 ${!canManage || isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black cursor-pointer"}` }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Building03Icon, size: 16, className: "text-stone-400 absolute left-0" }), /* @__PURE__ */ React62.createElement("span", { className: `w-full pl-8 text-sm truncate block ${activeCompany ? "text-black" : "text-stone-400"}` }, activeCompany ? activeCompany.name : "Select an existing company..."))) : /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(TextInput, { label: "Company Name", value: newCompanyName, onChange: (val) => setNewCompanyName(val), disabled: isSubmitting || !canManage, placeholder: "e.g. Acme Innovations Ltd.", maxLength: 80 }), /* @__PURE__ */ React62.createElement("div", { className: `flex items-center justify-between py-2 mt-2 ${!canManage ? "opacity-50 pointer-events-none" : ""}` }, /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React62.createElement("span", { className: "text-sm text-black tracking-tight" }, "Private Company"), /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-stone-500" }, "Only assigned members can view and access its applications.")), /* @__PURE__ */ React62.createElement("button", { type: "button", onClick: () => setIsPrivate(!isPrivate), disabled: !canManage || isSubmitting, className: `relative w-11 h-6 rounded-full transition-colors outline-none shrink-0 ${isPrivate ? "bg-[#d97757]" : "bg-stone-200"}` }, /* @__PURE__ */ React62.createElement("div", { className: `absolute top-1 left-1 bg-white w-4 h-4 rounded-full transition-transform ${isPrivate ? "translate-x-5" : "translate-x-0"}` }))), isPrivate && /* @__PURE__ */ React62.createElement("div", { className: `flex items-center justify-between animate-in fade-in zoom-in-95 duration-200 bg-stone-50 p-4 rounded-xl ${!canManage ? "opacity-50" : ""}` }, /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-black tracking-tight" }, "Assigned Members"), /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-[#d97757]" }, selectedParticipants.size, " added")), /* @__PURE__ */ React62.createElement("button", { type: "button", onClick: () => setShowMembersModal(true), disabled: !canManage || isSubmitting, className: "px-4 py-2 border border-stone-200 text-black text-xs tracking-wide rounded-full hover:bg-white transition-colors outline-none bg-transparent" }, "Manage Access"))), /* @__PURE__ */ React62.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ React62.createElement("label", { className: "text-xs text-stone-400 tracking-[0.2em] block" }, "Application Type"), /* @__PURE__ */ React62.createElement("div", { onClick: () => canManage && !isSubmitting && setShowTypeModal(true), className: `flex items-center relative w-full border-b border-stone-200 transition-all duration-300 pb-3 pt-3 ${!canManage || isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black cursor-pointer"}` }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: File02Icon, size: 16, className: "text-stone-400 absolute left-0" }), /* @__PURE__ */ React62.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, activeTypeObj?.label || "Select Type..."))), canManage && /* @__PURE__ */ React62.createElement("div", { className: "pt-6" }, /* @__PURE__ */ React62.createElement(ThreeDActionButton, { type: "submit", disabled: isSubmitting || !selectedTypeKey || creationMode === "EXISTING" && !selectedCompanyId || creationMode === "NEW" && newCompanyName.length < 2, isLoading: isSubmitting, className: "w-full sm:w-auto min-w-40" }, "Create Application")))), showTypeModal && canManage && /* @__PURE__ */ React62.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React62.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowTypeModal(false) }), /* @__PURE__ */ React62.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh]" }, /* @__PURE__ */ React62.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-stone-100" }, /* @__PURE__ */ React62.createElement("h3", { className: "text-sm text-black tracking-tight " }, "Application Type"), /* @__PURE__ */ React62.createElement("button", { onClick: () => setShowTypeModal(false), className: "text-[#d97757] outline-none text-sm" }, "Done")), /* @__PURE__ */ React62.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-3 space-y-2" }, applicationTypesMeta.map((item) => {
|
|
7572
|
+
const isSelected = selectedTypeKey === item.key;
|
|
7573
|
+
return /* @__PURE__ */ React62.createElement(
|
|
7574
|
+
"div",
|
|
7575
|
+
{
|
|
7576
|
+
key: item.key,
|
|
7577
|
+
onClick: () => {
|
|
7578
|
+
setSelectedTypeKey(item.key);
|
|
7579
|
+
setShowTypeModal(false);
|
|
7580
|
+
},
|
|
7581
|
+
className: `p-4 rounded-xl cursor-pointer transition-all border ${isSelected ? "bg-white border-[#d97757]" : "bg-stone-100 border-transparent hover:bg-stone-200/60"}`
|
|
7582
|
+
},
|
|
7583
|
+
/* @__PURE__ */ React62.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React62.createElement("h4", { className: "text-xs text-black" }, item.label), isSelected && /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Tick02Icon4, size: 16, className: "text-[#d97757] shrink-0" })),
|
|
7584
|
+
/* @__PURE__ */ React62.createElement("p", { className: "text-[11px] text-stone-500 mt-1 leading-relaxed whitespace-normal wrap-break-word" }, item.desc)
|
|
7585
|
+
);
|
|
7586
|
+
})))), showCompaniesModal && canManage && /* @__PURE__ */ React62.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React62.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowCompaniesModal(false) }), /* @__PURE__ */ React62.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh]" }, /* @__PURE__ */ React62.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React62.createElement("h3", { className: "text-sm text-black tracking-tight" }, "Select Company"), /* @__PURE__ */ React62.createElement("button", { onClick: () => setShowCompaniesModal(false), className: "text-[#d97757] outline-none text-sm" }, "Close")), /* @__PURE__ */ React62.createElement("div", { className: "p-4 shrink-0" }, /* @__PURE__ */ React62.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Search01Icon11, size: 16, className: "text-stone-400 absolute left-4 top-1/2 -translate-y-1/2 pointer-events-none" }), /* @__PURE__ */ React62.createElement("input", { type: "text", placeholder: "Search companies...", value: localCompSearch, onChange: handleCompSearch, className: "w-full pl-10 pr-4 py-2.5 bg-stone-100 rounded-full focus:border-[#d97757] border border-transparent text-sm text-black outline-none focus:bg-stone-200 transition-colors" }))), /* @__PURE__ */ React62.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, isCompaniesLoading ? /* @__PURE__ */ React62.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Loading03Icon33, size: 28, className: "animate-spin text-black" })) : companies.length === 0 ? /* @__PURE__ */ React62.createElement("div", { className: "p-8 text-center text-xs text-stone-400" }, "No companies available.") : companies.map((comp) => /* @__PURE__ */ React62.createElement("div", { key: comp.id, onClick: () => {
|
|
7587
|
+
setSelectedCompanyId(comp.id);
|
|
7588
|
+
setShowCompaniesModal(false);
|
|
7589
|
+
}, className: "flex items-center justify-between p-3 rounded-xl cursor-pointer hover:bg-stone-50 transition-colors" }, /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col min-w-0 flex-1 pl-2" }, /* @__PURE__ */ React62.createElement("span", { className: "text-sm text-black truncate" }, comp.name), comp.isPrivate && /* @__PURE__ */ React62.createElement("span", { className: "text-[10px] text-[#d97757] mt-0.5 tracking-widest uppercase" }, "Private")), selectedCompanyId === comp.id && /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Tick02Icon4, size: 16, className: "text-[#d97757] mr-2" })))), /* @__PURE__ */ React62.createElement("div", { className: "p-4 flex items-center justify-between shrink-0 bg-white" }, /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-stone-400 tracking-widest" }, "Page ", companiesCurrentPage, " of ", companiesTotalPages || 1), /* @__PURE__ */ React62.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ React62.createElement("button", { disabled: companiesCurrentPage <= 1 || isCompaniesLoading, onClick: () => onCompaniesPageChange(companiesCurrentPage - 1), 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" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: ArrowLeft01Icon25, size: 12 })), /* @__PURE__ */ React62.createElement("button", { disabled: companiesCurrentPage >= companiesTotalPages || isCompaniesLoading, onClick: () => onCompaniesPageChange(companiesCurrentPage + 1), 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" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: ArrowRight01Icon19, size: 12 })))))), showMembersModal && canManage && /* @__PURE__ */ React62.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React62.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowMembersModal(false) }), /* @__PURE__ */ React62.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh]" }, /* @__PURE__ */ React62.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React62.createElement("h3", { className: "text-sm text-black tracking-tight" }, "Assign Members"), /* @__PURE__ */ React62.createElement("button", { onClick: () => setShowMembersModal(false), className: "text-[#d97757] outline-none text-sm" }, "Done")), /* @__PURE__ */ React62.createElement("div", { className: "p-4 shrink-0" }, /* @__PURE__ */ React62.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Search01Icon11, size: 16, className: "text-stone-400 absolute left-4 top-1/2 -translate-y-1/2 pointer-events-none" }), /* @__PURE__ */ React62.createElement("input", { type: "text", placeholder: "Search team...", value: localMemSearch, onChange: handleMemSearch, className: "w-full pl-10 pr-4 py-2.5 bg-stone-100 rounded-full focus:border-[#d97757] border border-transparent text-sm text-black outline-none focus:bg-stone-200 transition-colors" }))), /* @__PURE__ */ React62.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, isMembersLoading ? /* @__PURE__ */ React62.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Loading03Icon33, size: 28, className: "animate-spin text-black" })) : members.length === 0 ? /* @__PURE__ */ React62.createElement("div", { className: "p-8 text-center text-xs text-stone-400" }, "No members found.") : members.map((member) => {
|
|
7590
|
+
const isChecked = selectedParticipants.has(member.userId);
|
|
7591
|
+
return /* @__PURE__ */ React62.createElement("div", { key: member.id, onClick: () => toggleParticipant(member.userId), className: "flex items-center justify-between p-3 rounded-xl cursor-pointer hover:bg-stone-50 transition-colors select-none" }, /* @__PURE__ */ React62.createElement("div", { className: "flex items-center gap-3 min-w-0 flex-1" }, /* @__PURE__ */ React62.createElement(MemberAvatar6, { src: member.avatarUrl, sizeClass: "w-9 h-9" }), /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ React62.createElement("span", { className: "text-sm text-black truncate" }, member.fullName), /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-stone-400 capitalize truncate" }, member.role.toLowerCase()))), /* @__PURE__ */ React62.createElement("div", { className: "shrink-0 pl-3" }, /* @__PURE__ */ React62.createElement("div", { className: `w-5 h-5 rounded-full flex items-center justify-center transition-colors ${isChecked ? "bg-[#d97757]" : "border border-stone-300 bg-white"}` }, isChecked && /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: Tick02Icon4, size: 14, className: "text-white" }))));
|
|
7592
|
+
})), /* @__PURE__ */ React62.createElement("div", { className: "p-4 flex items-center justify-between shrink-0 bg-white" }, /* @__PURE__ */ React62.createElement("span", { className: "text-xs text-stone-400 tracking-widest" }, "Page ", membersCurrentPage, " of ", membersTotalPages || 1), /* @__PURE__ */ React62.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ React62.createElement("button", { disabled: membersCurrentPage <= 1 || isMembersLoading, onClick: () => onMembersPageChange(membersCurrentPage - 1), 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" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: ArrowLeft01Icon25, size: 12 })), /* @__PURE__ */ React62.createElement("button", { disabled: membersCurrentPage >= membersTotalPages || isMembersLoading, onClick: () => onMembersPageChange(membersCurrentPage + 1), 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" }, /* @__PURE__ */ React62.createElement(HugeiconsIcon47, { icon: ArrowRight01Icon19, size: 12 })))))));
|
|
7593
|
+
};
|
|
7432
7594
|
export {
|
|
7433
7595
|
AppBento2,
|
|
7434
7596
|
CardInfoDialog,
|
|
@@ -7462,11 +7624,13 @@ export {
|
|
|
7462
7624
|
TextInput,
|
|
7463
7625
|
ThreeDActionButton,
|
|
7464
7626
|
ThreeDButton,
|
|
7627
|
+
UniversalApplicationDetails,
|
|
7465
7628
|
UniversalApplicationPage2,
|
|
7466
7629
|
UniversalApplicationsPage,
|
|
7467
7630
|
UniversalBuyCryptoPage,
|
|
7468
7631
|
UniversalCardActionPage,
|
|
7469
7632
|
UniversalCardPage,
|
|
7633
|
+
UniversalCreateApplication,
|
|
7470
7634
|
UniversalCreateHuddle,
|
|
7471
7635
|
UniversalDeveloperSettings,
|
|
7472
7636
|
UniversalErrorView,
|