@retinalabsllc/zairusjs 17.2.5 → 18.0.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 +38 -1
- package/dist/index.d.ts +38 -1
- package/dist/index.js +332 -82
- package/dist/index.mjs +347 -90
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -53,6 +53,7 @@ __export(index_exports, {
|
|
|
53
53
|
MedicalFeatureStatsBlock: () => MedicalFeatureStatsBlock,
|
|
54
54
|
MobileNav: () => MobileNav,
|
|
55
55
|
NumberInput: () => NumberInput,
|
|
56
|
+
OpenBidHome: () => OpenBidHome,
|
|
56
57
|
PageSpinner: () => PageSpinner,
|
|
57
58
|
PinDialerBottomSheet: () => PinDialerBottomSheet,
|
|
58
59
|
PipleAuth: () => PipleAuth,
|
|
@@ -5369,14 +5370,262 @@ var UniversalHome2 = ({
|
|
|
5369
5370
|
))))));
|
|
5370
5371
|
};
|
|
5371
5372
|
|
|
5372
|
-
// src/components/
|
|
5373
|
+
// src/components/OpenBidHome.tsx
|
|
5374
|
+
var import_react92 = __toESM(require("react"));
|
|
5375
|
+
var import_react93 = require("@hugeicons/react");
|
|
5376
|
+
var import_core_free_icons35 = require("@hugeicons/core-free-icons");
|
|
5377
|
+
|
|
5378
|
+
// src/components/OptionWithIcon.tsx
|
|
5373
5379
|
var import_react90 = __toESM(require("react"));
|
|
5374
|
-
var import_react_hot_toast15 = __toESM(require("react-hot-toast"));
|
|
5375
5380
|
var import_react91 = require("@hugeicons/react");
|
|
5376
5381
|
var import_core_free_icons34 = require("@hugeicons/core-free-icons");
|
|
5382
|
+
var OptionWithIcon = ({
|
|
5383
|
+
isOpen,
|
|
5384
|
+
onClose,
|
|
5385
|
+
title,
|
|
5386
|
+
options,
|
|
5387
|
+
selectedOption,
|
|
5388
|
+
onSelect,
|
|
5389
|
+
showSearch = false
|
|
5390
|
+
}) => {
|
|
5391
|
+
const [searchQuery, setSearchQuery] = (0, import_react90.useState)("");
|
|
5392
|
+
if (!isOpen) return null;
|
|
5393
|
+
const filteredOptions = options.filter(
|
|
5394
|
+
(opt) => opt.label.toLowerCase().includes(searchQuery.toLowerCase())
|
|
5395
|
+
);
|
|
5396
|
+
return /* @__PURE__ */ import_react90.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: onClose }), /* @__PURE__ */ import_react90.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]" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react90.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react90.default.createElement("button", { onClick: onClose, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons34.CancelCircleIcon, size: 18 }))), showSearch && /* @__PURE__ */ import_react90.default.createElement("div", { className: "p-4 shrink-0 " }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons34.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react90.default.createElement(
|
|
5397
|
+
"input",
|
|
5398
|
+
{
|
|
5399
|
+
type: "text",
|
|
5400
|
+
placeholder: "Search...",
|
|
5401
|
+
value: searchQuery,
|
|
5402
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
5403
|
+
className: "w-full pl-10 pr-4 py-2.5 bg-neutral-100 rounded-full text-[12px] text-black placeholder-neutral-400 outline-none focus:bg-neutral-200 transition-colors"
|
|
5404
|
+
}
|
|
5405
|
+
))), /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, filteredOptions.length === 0 ? /* @__PURE__ */ import_react90.default.createElement("div", { className: "p-6 text-center text-[12px] text-neutral-400" }, "No options found.") : filteredOptions.map((opt) => {
|
|
5406
|
+
const isSelected = selectedOption.label === opt.label;
|
|
5407
|
+
return /* @__PURE__ */ import_react90.default.createElement(
|
|
5408
|
+
"button",
|
|
5409
|
+
{
|
|
5410
|
+
key: opt.label,
|
|
5411
|
+
onClick: () => {
|
|
5412
|
+
onSelect(opt);
|
|
5413
|
+
onClose();
|
|
5414
|
+
},
|
|
5415
|
+
className: `w-full flex items-center gap-3 p-4 text-[12px] tracking-tight rounded-full transition-colors outline-none ${isSelected ? "text-[#068afe] bg-[#068afe]/10" : "text-neutral-600 hover:bg-neutral-50/50"}`
|
|
5416
|
+
},
|
|
5417
|
+
opt.icon && /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: opt.icon, size: 16, className: isSelected ? "text-[#068afe]" : "text-neutral-400" }),
|
|
5418
|
+
/* @__PURE__ */ import_react90.default.createElement("span", null, opt.label.charAt(0).toUpperCase() + opt.label.slice(1).toLowerCase())
|
|
5419
|
+
);
|
|
5420
|
+
}))));
|
|
5421
|
+
};
|
|
5422
|
+
|
|
5423
|
+
// src/components/OpenBidHome.tsx
|
|
5424
|
+
var CATEGORIES = [
|
|
5425
|
+
{ label: "Leaderboards & Attention", icon: import_core_free_icons35.StarIcon },
|
|
5426
|
+
{ label: "SEO & AI Visibility", icon: import_core_free_icons35.Search01Icon },
|
|
5427
|
+
{ label: "AI Agents & Infrastructure", icon: import_core_free_icons35.Link01Icon },
|
|
5428
|
+
{ label: "Marketing & Advertising", icon: import_core_free_icons35.StarIcon },
|
|
5429
|
+
{ label: "Developer Tools", icon: import_core_free_icons35.ListSettingIcon },
|
|
5430
|
+
{ label: "Crypto, Web3 & Investing", icon: import_core_free_icons35.StarIcon }
|
|
5431
|
+
];
|
|
5432
|
+
var SiteAvatar = ({ src, sizeClass = "w-9 h-9" }) => {
|
|
5433
|
+
const [loaded, setLoaded] = (0, import_react92.useState)(false);
|
|
5434
|
+
const [error, setError] = (0, import_react92.useState)(false);
|
|
5435
|
+
return /* @__PURE__ */ import_react92.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-full h-full flex items-center justify-center overflow-hidden" }, !loaded && !error && src && /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), error || !src ? /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.StarIcon, className: "text-neutral-300", size: 18 }) : /* @__PURE__ */ import_react92.default.createElement(
|
|
5436
|
+
"img",
|
|
5437
|
+
{
|
|
5438
|
+
src,
|
|
5439
|
+
alt: "Site icon",
|
|
5440
|
+
className: `w-full h-full object-cover transition-opacity duration-300 ${loaded ? "opacity-100" : "opacity-0"}`,
|
|
5441
|
+
onLoad: () => setLoaded(true),
|
|
5442
|
+
onError: () => setError(true)
|
|
5443
|
+
}
|
|
5444
|
+
)));
|
|
5445
|
+
};
|
|
5446
|
+
var AnimatedCounter = ({ value }) => {
|
|
5447
|
+
const [count, setCount] = (0, import_react92.useState)(0);
|
|
5448
|
+
(0, import_react92.useEffect)(() => {
|
|
5449
|
+
let startTimestamp = 0;
|
|
5450
|
+
const duration = 2e3;
|
|
5451
|
+
let animationFrameId;
|
|
5452
|
+
const step = (timestamp) => {
|
|
5453
|
+
if (!startTimestamp) startTimestamp = timestamp;
|
|
5454
|
+
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
|
|
5455
|
+
const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);
|
|
5456
|
+
setCount(Math.floor(easeProgress * value));
|
|
5457
|
+
if (progress < 1) {
|
|
5458
|
+
animationFrameId = window.requestAnimationFrame(step);
|
|
5459
|
+
}
|
|
5460
|
+
};
|
|
5461
|
+
animationFrameId = window.requestAnimationFrame(step);
|
|
5462
|
+
return () => window.cancelAnimationFrame(animationFrameId);
|
|
5463
|
+
}, [value]);
|
|
5464
|
+
return /* @__PURE__ */ import_react92.default.createElement(import_react92.default.Fragment, null, count.toLocaleString());
|
|
5465
|
+
};
|
|
5466
|
+
var SkeletonRow = () => /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-3 p-3 md:p-4 rounded-2xl mb-2" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-10 h-10 md:w-14 md:h-14 rounded-xl bg-neutral-200 animate-pulse shrink-0" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex-1 flex flex-col gap-3" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-4 bg-neutral-200 rounded w-1/3 animate-pulse" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-4 bg-neutral-200 rounded w-16 animate-pulse" })), /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-3 bg-neutral-200 rounded w-2/3 animate-pulse" })));
|
|
5467
|
+
function OpenBidHome({
|
|
5468
|
+
data,
|
|
5469
|
+
latestActivity,
|
|
5470
|
+
isLoading,
|
|
5471
|
+
currentPage,
|
|
5472
|
+
totalPages,
|
|
5473
|
+
totalItems,
|
|
5474
|
+
onPageChange,
|
|
5475
|
+
totalProcessedAmount,
|
|
5476
|
+
inputFaviconSrc,
|
|
5477
|
+
onIdentityChange,
|
|
5478
|
+
onOutbidSubmit,
|
|
5479
|
+
isSubmitting,
|
|
5480
|
+
onlineCount = 0,
|
|
5481
|
+
visitorCount = 0
|
|
5482
|
+
}) {
|
|
5483
|
+
const topRef = (0, import_react92.useRef)(null);
|
|
5484
|
+
const [bidAmount, setBidAmount] = (0, import_react92.useState)(3134);
|
|
5485
|
+
const [identity, setIdentity] = (0, import_react92.useState)("");
|
|
5486
|
+
const [selectedCategory, setSelectedCategory] = (0, import_react92.useState)(CATEGORIES[0]);
|
|
5487
|
+
const [isCategoryModalOpen, setIsCategoryModalOpen] = (0, import_react92.useState)(false);
|
|
5488
|
+
const [isActivityExpanded, setIsActivityExpanded] = (0, import_react92.useState)(false);
|
|
5489
|
+
const handleBidChange = (delta) => {
|
|
5490
|
+
setBidAmount((prev) => Math.max(5, prev + delta));
|
|
5491
|
+
};
|
|
5492
|
+
const handleClaimRankClick = (requiredAmount) => {
|
|
5493
|
+
setBidAmount(requiredAmount);
|
|
5494
|
+
topRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
5495
|
+
const input = document.getElementById("identity-input");
|
|
5496
|
+
if (input) input.focus();
|
|
5497
|
+
};
|
|
5498
|
+
const handleSubmit = (e) => {
|
|
5499
|
+
e.preventDefault();
|
|
5500
|
+
onOutbidSubmit(identity, bidAmount, selectedCategory.label);
|
|
5501
|
+
};
|
|
5502
|
+
const handleIdentityChange = (e) => {
|
|
5503
|
+
const val = e.target.value;
|
|
5504
|
+
setIdentity(val);
|
|
5505
|
+
onIdentityChange(val);
|
|
5506
|
+
};
|
|
5507
|
+
return /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-full max-w-4xl mx-auto flex flex-col px-4 pt-12 pb-24 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react92.default.createElement("header", { className: "mb-12 px-2 text-center", ref: topRef }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "inline-block max-w-full bg-white rounded-full px-4 py-2 text-xs text-neutral-500 transition-colors hover:text-black cursor-pointer leading-relaxed text-balance" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "inline-flex items-center gap-1.5 text-emerald-600 align-text-bottom whitespace-nowrap" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative flex h-2 w-2 shrink-0" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-emerald-500" })), /* @__PURE__ */ import_react92.default.createElement("span", null, onlineCount.toLocaleString(), " online")), /* @__PURE__ */ import_react92.default.createElement("span", { className: "mx-1.5" }, "\xB7"), /* @__PURE__ */ import_react92.default.createElement("span", null, visitorCount.toLocaleString(), " visitors since launch"), /* @__PURE__ */ import_react92.default.createElement("span", { className: "mx-1.5" }, "\xB7"), /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-black underline decoration-neutral-300 hover:decoration-black transition-colors whitespace-nowrap" }, "Live stats"))), /* @__PURE__ */ import_react92.default.createElement("section", { className: "flex flex-col items-center mb-16" }, /* @__PURE__ */ import_react92.default.createElement("h2", { className: "flex flex-wrap items-center justify-center gap-x-3 text-center text-3xl md:text-5xl tracking-tight text-black mb-3" }, /* @__PURE__ */ import_react92.default.createElement("span", null, "Claim #1 for"), /* @__PURE__ */ import_react92.default.createElement("span", { className: "inline-flex items-center gap-3 bg-neutral-100 rounded-full p-1.5 border border-neutral-200" }, /* @__PURE__ */ import_react92.default.createElement("button", { onClick: () => handleBidChange(-1), type: "button", className: "w-8 h-8 md:w-10 md:h-10 flex items-center justify-center rounded-full bg-white text-black hover:bg-neutral-50 transition-colors outline-none text-lg" }, "\u2212"), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center tracking-tight px-2 w-24 justify-center" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[#068afe] mr-0.5" }, "$"), /* @__PURE__ */ import_react92.default.createElement(
|
|
5508
|
+
"input",
|
|
5509
|
+
{
|
|
5510
|
+
type: "number",
|
|
5511
|
+
value: bidAmount,
|
|
5512
|
+
onChange: (e) => setBidAmount(Number(e.target.value)),
|
|
5513
|
+
className: "w-full bg-transparent p-0 outline-none text-center tabular-nums text-[#068afe] "
|
|
5514
|
+
}
|
|
5515
|
+
)), /* @__PURE__ */ import_react92.default.createElement("button", { onClick: () => handleBidChange(1), type: "button", className: "w-8 h-8 md:w-10 md:h-10 flex items-center justify-center rounded-full bg-white text-black hover:bg-neutral-50 transition-colors outline-none text-lg" }, "+"))), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-center text-sm text-neutral-500 max-w-md" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[#068afe]" }, "New spots start at $5."), " Paying less than the #1 price puts you on the board at whatever rank your bid secures."), /* @__PURE__ */ import_react92.default.createElement("form", { onSubmit: handleSubmit, className: "mt-8 flex flex-col md:flex-row items-stretch md:items-center gap-3 w-full max-w-3xl bg-white p-2 rounded-2xl md:rounded-full" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "relative flex-1 min-w-0" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-3 md:pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-7 h-7 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden" }, inputFaviconSrc ? /* @__PURE__ */ import_react92.default.createElement("img", { src: inputFaviconSrc, alt: "", className: "w-full h-full object-cover" }) : /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.Link01Icon, size: 14, className: "text-neutral-400" }))), /* @__PURE__ */ import_react92.default.createElement(
|
|
5516
|
+
"input",
|
|
5517
|
+
{
|
|
5518
|
+
id: "identity-input",
|
|
5519
|
+
type: "text",
|
|
5520
|
+
placeholder: "Your product URL or @handle",
|
|
5521
|
+
value: identity,
|
|
5522
|
+
onChange: handleIdentityChange,
|
|
5523
|
+
required: true,
|
|
5524
|
+
className: "w-full pl-12 md:pl-14 pr-4 h-12 bg-transparent text-sm text-black placeholder-neutral-400 outline-none transition-colors"
|
|
5525
|
+
}
|
|
5526
|
+
)), /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-px w-full md:h-8 md:w-px bg-neutral-200 hidden md:block" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "min-w-0 md:w-64 shrink-0" }, /* @__PURE__ */ import_react92.default.createElement(
|
|
5527
|
+
"button",
|
|
5528
|
+
{
|
|
5529
|
+
type: "button",
|
|
5530
|
+
onClick: () => setIsCategoryModalOpen(true),
|
|
5531
|
+
className: "flex items-center justify-between w-full gap-2 h-12 px-4 bg-transparent outline-none text-sm text-black hover:text-black"
|
|
5532
|
+
},
|
|
5533
|
+
/* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-2 truncate" }, selectedCategory.icon && /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: selectedCategory.icon, size: 16, className: "text-[#068afe] shrink-0" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "truncate" }, selectedCategory.label)),
|
|
5534
|
+
/* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.ListSettingIcon, size: 16, className: "text-neutral-400 shrink-0" })
|
|
5535
|
+
)), /* @__PURE__ */ import_react92.default.createElement(
|
|
5536
|
+
ThreeDActionButton,
|
|
5537
|
+
{
|
|
5538
|
+
type: "submit",
|
|
5539
|
+
isLoading: isSubmitting,
|
|
5540
|
+
disabled: !identity || isSubmitting,
|
|
5541
|
+
className: "h-12 px-8 min-w-30 w-full md:w-auto md:rounded-full"
|
|
5542
|
+
},
|
|
5543
|
+
"Place Bid"
|
|
5544
|
+
)), /* @__PURE__ */ import_react92.default.createElement("p", { className: "mt-4 text-xs text-neutral-400" }, "Already on the list? Enter the same URL to increase your bid.")), /* @__PURE__ */ import_react92.default.createElement("div", { className: "mb-6 relative" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex overflow-x-auto gap-2 pb-2 custom-scrollbar items-center" }, /* @__PURE__ */ import_react92.default.createElement("button", { className: "flex items-center gap-1.5 px-4 py-1.5 rounded-full border border-black bg-black text-white text-xs shrink-0 whitespace-nowrap transition-colors outline-none" }, "All"), CATEGORIES.map((cat) => /* @__PURE__ */ import_react92.default.createElement("button", { key: cat.label, className: "flex items-center gap-1.5 px-4 py-2 rounded-full bg-white text-black hover:bg-neutral-50 text-xs shrink-0 whitespace-nowrap transition-colors outline-none" }, cat.icon && /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: cat.icon, size: 14, className: "text-neutral-400" }), cat.label))), /* @__PURE__ */ import_react92.default.createElement("div", { className: "absolute inset-y-0 right-0 w-12 bg-linear-to-l from-neutral-100 to-transparent pointer-events-none" })), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col relative w-full" }, isLoading ? /* @__PURE__ */ import_react92.default.createElement(import_react92.default.Fragment, null, Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ import_react92.default.createElement(SkeletonRow, { key: `skel-${i}` }))) : data.length === 0 ? /* @__PURE__ */ import_react92.default.createElement("div", { className: "text-center py-12 text-sm text-neutral-500" }, "No data") : data.map((item, index) => {
|
|
5545
|
+
const requiredBid = item.amount + 1;
|
|
5546
|
+
const isRank1 = item.rank === 1;
|
|
5547
|
+
const isRank2 = item.rank === 2;
|
|
5548
|
+
const isRank3 = item.rank === 3;
|
|
5549
|
+
const showActivity = item.rank === 4 || data.length < 4 && index === data.length - 1;
|
|
5550
|
+
let cardClasses = "";
|
|
5551
|
+
let numClasses = "";
|
|
5552
|
+
if (isRank1) {
|
|
5553
|
+
cardClasses = "bg-[#068afe]/20 rounded-2xl md:px-4 px-3 py-2 md:py-3 my-1.5 md:my-3";
|
|
5554
|
+
numClasses = "bg-[#068afe] text-white";
|
|
5555
|
+
} else if (isRank2) {
|
|
5556
|
+
cardClasses = "bg-[#068afe]/10 rounded-2xl md:px-4 px-3 py-2 md:py-3 my-1.5 md:my-3";
|
|
5557
|
+
numClasses = "bg-[#068afe] text-white";
|
|
5558
|
+
} else if (isRank3) {
|
|
5559
|
+
cardClasses = "bg-[#068afe]/5 rounded-2xl md:px-4 px-3 py-2 md:py-3 my-1.5 md:my-3";
|
|
5560
|
+
numClasses = "bg-[#068afe] text-white";
|
|
5561
|
+
} else {
|
|
5562
|
+
cardClasses = "border-t border-neutral-200 bg-transparent px-3 md:px-4 py-3 md:py-4 rounded-none";
|
|
5563
|
+
numClasses = "text-neutral-400 bg-transparent";
|
|
5564
|
+
}
|
|
5565
|
+
return /* @__PURE__ */ import_react92.default.createElement(import_react92.default.Fragment, { key: item.id }, showActivity && /* @__PURE__ */ import_react92.default.createElement("div", { className: "my-6 md:my-8 bg-white rounded-2xl p-4 md:p-5 relative" }, /* @__PURE__ */ import_react92.default.createElement("h2", { className: "text-sm mb-3 flex items-center gap-2" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative flex h-2 w-2" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-[#068afe] opacity-75" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-[#068afe]" })), "Latest activity"), latestActivity.length === 0 ? /* @__PURE__ */ import_react92.default.createElement("div", { className: "text-center py-6 text-sm text-neutral-400" }, "No data") : /* @__PURE__ */ import_react92.default.createElement("div", { className: `relative ${!isActivityExpanded ? "max-h-18 md:max-h-22 overflow-hidden md:overflow-visible" : ""}` }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col md:grid md:grid-cols-5 md:gap-2" }, latestActivity.map((act, idx) => /* @__PURE__ */ import_react92.default.createElement("div", { key: act.id, className: `flex flex-row items-center gap-3 py-2 md:p-3 md:rounded-2xl md:bg-neutral-50 md:hover:bg-neutral-100 transition-colors ${idx !== 0 ? "border-t border-neutral-100 md:border-0" : ""}` }, /* @__PURE__ */ import_react92.default.createElement(SiteAvatar, { src: act.favicon, sizeClass: "w-7 h-7 shrink-0" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-xs text-black truncate" }, act.name), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-[10px] text-neutral-500 mt-0.5" }, "at #", act.rank, " \xB7 $", act.amount), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-[9px] text-neutral-400 mt-0.5" }, act.time))))), !isActivityExpanded && /* @__PURE__ */ import_react92.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-16 bg-linear-to-t from-white via-white/90 to-transparent pointer-events-none md:hidden flex items-end justify-center pb-1" }, /* @__PURE__ */ import_react92.default.createElement(
|
|
5566
|
+
"button",
|
|
5567
|
+
{
|
|
5568
|
+
onClick: () => setIsActivityExpanded(true),
|
|
5569
|
+
className: "pointer-events-auto px-4 py-1.5 bg-white border border-neutral-200 rounded-full text-[11px] outline-none"
|
|
5570
|
+
},
|
|
5571
|
+
"Show more"
|
|
5572
|
+
))), isActivityExpanded && latestActivity.length > 0 && /* @__PURE__ */ import_react92.default.createElement("div", { className: "mt-4 flex justify-center md:hidden" }, /* @__PURE__ */ import_react92.default.createElement(
|
|
5573
|
+
"button",
|
|
5574
|
+
{
|
|
5575
|
+
onClick: () => setIsActivityExpanded(false),
|
|
5576
|
+
className: "px-4 py-1.5 bg-white border border-neutral-200 rounded-full text-[11px] outline-none"
|
|
5577
|
+
},
|
|
5578
|
+
"Show less"
|
|
5579
|
+
))), /* @__PURE__ */ import_react92.default.createElement("div", { className: `group relative flex items-center justify-between transition-colors duration-300 ${cardClasses}` }, /* @__PURE__ */ import_react92.default.createElement("a", { href: item.url, target: "_blank", rel: "noopener noreferrer", className: "absolute inset-0 z-0 outline-none" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-3 md:gap-4 flex-1 min-w-0 z-10 pointer-events-none group-hover:text-[#068afe]" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col md:flex-row items-center gap-2 md:gap-3 shrink-0" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: `inline-flex items-center justify-center tabular-nums min-w-7 md:min-w-10 px-2 py-0.5 md:py-1 rounded-full text-[11px] md:text-xs ${numClasses}` }, "#", item.rank), /* @__PURE__ */ import_react92.default.createElement(SiteAvatar, { src: item.favicon })), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col min-w-0 flex-1 transition-opacity duration-300" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-baseline gap-2 mb-0.5" }, /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-black group-hover:text-[#068afe] text-sm truncate tracking-tight" }, item.name), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-[#068afe] text-[12px] shrink-0 tabular-nums" }, "$", item.amount.toLocaleString())), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-neutral-500 text-xs line-clamp-1 md:line-clamp-2 leading-relaxed" }, item.desc), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-2 mt-1.5 text-[10px] md:text-[11px] text-neutral-400 " }, /* @__PURE__ */ import_react92.default.createElement("span", null, item.time), /* @__PURE__ */ import_react92.default.createElement("span", { className: "flex items-center gap-1 text-black" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative flex h-1.5 w-1.5" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-[#068afe] opacity-75" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "relative inline-flex rounded-full h-1.5 w-1.5 bg-[#068afe]" })), item.clicks, " clicks")))), /* @__PURE__ */ import_react92.default.createElement("div", { className: "absolute left-1/2 -translate-x-1/2 top-0 -translate-y-1/2 z-20 opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity duration-200" }, /* @__PURE__ */ import_react92.default.createElement(
|
|
5580
|
+
"button",
|
|
5581
|
+
{
|
|
5582
|
+
onClick: (e) => {
|
|
5583
|
+
e.stopPropagation();
|
|
5584
|
+
handleClaimRankClick(requiredBid);
|
|
5585
|
+
},
|
|
5586
|
+
className: "px-3 py-0.5 bg-[#068afe] text-white text-[11px] md:text-xs whitespace-nowrap rounded-full outline-none pointer-events-auto hover:bg-[#0575d9] transition-colors"
|
|
5587
|
+
},
|
|
5588
|
+
"claim this rank for $",
|
|
5589
|
+
requiredBid
|
|
5590
|
+
))), item.rank === 10 && /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-3 py-6 px-4" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-0.5 flex-1 bg-[#068afe]/20 rounded-full" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-xs tracking-widest text-[#068afe] px-3 py-1 bg-[#068afe]/10 border border-[#068afe]/20 rounded-full" }, "Top 10"), /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-0.5 flex-1 bg-[#068afe]/20 rounded-full" })), item.rank === 20 && /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-3 py-6 px-4" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-0.5 flex-1 bg-[#068afe]/20 rounded-full" }), /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-xs tracking-widest text-[#068afe] px-3 py-1 bg-[#068afe]/10 border border-[#068afe]/20 rounded-full" }, "Top 20"), /* @__PURE__ */ import_react92.default.createElement("div", { className: "h-0.5 flex-1 bg-[#068afe]/20 rounded-full" })));
|
|
5591
|
+
})), !isLoading && data.length > 0 && /* @__PURE__ */ import_react92.default.createElement("div", { className: "mt-12 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react92.default.createElement(
|
|
5592
|
+
"button",
|
|
5593
|
+
{
|
|
5594
|
+
disabled: currentPage <= 1,
|
|
5595
|
+
onClick: () => onPageChange(currentPage - 1),
|
|
5596
|
+
className: "w-10 h-10 flex items-center justify-center rounded-full bg-white text-black hover:bg-neutral-50 disabled:text-neutral-300 disabled:bg-white outline-none transition-colors"
|
|
5597
|
+
},
|
|
5598
|
+
/* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.ArrowLeft01Icon, size: 16 })
|
|
5599
|
+
), /* @__PURE__ */ import_react92.default.createElement("span", { className: "w-10 h-10 flex items-center justify-center rounded-full bg-black text-white text-sm outline-none" }, currentPage), /* @__PURE__ */ import_react92.default.createElement(
|
|
5600
|
+
"button",
|
|
5601
|
+
{
|
|
5602
|
+
disabled: currentPage >= totalPages,
|
|
5603
|
+
onClick: () => onPageChange(currentPage + 1),
|
|
5604
|
+
className: "w-10 h-10 flex items-center justify-center rounded-full bg-white text-black hover:bg-neutral-50 disabled:text-neutral-300 disabled:bg-white outline-none transition-colors"
|
|
5605
|
+
},
|
|
5606
|
+
/* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons35.ArrowRight01Icon, size: 16 })
|
|
5607
|
+
)), /* @__PURE__ */ import_react92.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-widest mt-1" }, Math.min((currentPage - 1) * 50 + 1, totalItems), " - ", Math.min(currentPage * 50, totalItems), " of ", totalItems)), /* @__PURE__ */ import_react92.default.createElement("section", { className: "mt-8 flex flex-col items-center" }, /* @__PURE__ */ import_react92.default.createElement("p", { className: "mb-4 text-xs tracking-widest text-neutral-400" }), /* @__PURE__ */ import_react92.default.createElement("div", { className: "bg-white rounded-full px-10 py-3 flex items-baseline justify-center tracking-tighter text-4xl text-black" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[#068afe] mr-2" }, "$"), /* @__PURE__ */ import_react92.default.createElement(AnimatedCounter, { value: totalProcessedAmount })), /* @__PURE__ */ import_react92.default.createElement("p", { className: "mt-4 text-xs tracking-widest text-neutral-400" }, "Total Processed")), /* @__PURE__ */ import_react92.default.createElement(
|
|
5608
|
+
OptionWithIcon,
|
|
5609
|
+
{
|
|
5610
|
+
isOpen: isCategoryModalOpen,
|
|
5611
|
+
onClose: () => setIsCategoryModalOpen(false),
|
|
5612
|
+
title: "Select Category",
|
|
5613
|
+
options: CATEGORIES,
|
|
5614
|
+
selectedOption: selectedCategory,
|
|
5615
|
+
onSelect: (val) => setSelectedCategory(val),
|
|
5616
|
+
showSearch: true
|
|
5617
|
+
}
|
|
5618
|
+
));
|
|
5619
|
+
}
|
|
5620
|
+
|
|
5621
|
+
// src/components/UniversalSettings.tsx
|
|
5622
|
+
var import_react94 = __toESM(require("react"));
|
|
5623
|
+
var import_react_hot_toast15 = __toESM(require("react-hot-toast"));
|
|
5624
|
+
var import_react95 = require("@hugeicons/react");
|
|
5625
|
+
var import_core_free_icons36 = require("@hugeicons/core-free-icons");
|
|
5377
5626
|
var MemberAvatar3 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
5378
|
-
const [loaded, setLoaded] = (0,
|
|
5379
|
-
const [error, setError] = (0,
|
|
5627
|
+
const [loaded, setLoaded] = (0, import_react94.useState)(false);
|
|
5628
|
+
const [error, setError] = (0, import_react94.useState)(false);
|
|
5380
5629
|
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
5381
5630
|
const finalSrc = error || !src ? defaultAvatar : src;
|
|
5382
5631
|
const getStatusColor = () => {
|
|
@@ -5393,10 +5642,10 @@ var MemberAvatar3 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
|
5393
5642
|
return "bg-neutral-200";
|
|
5394
5643
|
}
|
|
5395
5644
|
};
|
|
5396
|
-
return /* @__PURE__ */
|
|
5645
|
+
return /* @__PURE__ */ import_react94.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ import_react94.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_react94.default.createElement("div", { className: `absolute -bottom-1 -right-1 w-3.5 h-3.5 rounded-full border-2 border-white z-10 ${getStatusColor()}` }));
|
|
5397
5646
|
};
|
|
5398
|
-
var PageSpinner8 = () => /* @__PURE__ */
|
|
5399
|
-
var InputSpinner3 = () => /* @__PURE__ */
|
|
5647
|
+
var PageSpinner8 = () => /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
5648
|
+
var InputSpinner3 = () => /* @__PURE__ */ import_react94.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react94.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react94.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" }));
|
|
5400
5649
|
var UniversalSettings = ({
|
|
5401
5650
|
accountType,
|
|
5402
5651
|
userRole,
|
|
@@ -5435,36 +5684,36 @@ var UniversalSettings = ({
|
|
|
5435
5684
|
});
|
|
5436
5685
|
const isOrg = accountType === "ORGANIZATION";
|
|
5437
5686
|
const canManage = userRole === "ADMIN" || userRole === "MANAGER" || userRole === "OWNER";
|
|
5438
|
-
const [activeTab, setActiveTab] = (0,
|
|
5439
|
-
const [expandedId, setExpandedId] = (0,
|
|
5440
|
-
const [memberToRemove, setMemberToRemove] = (0,
|
|
5441
|
-
const [isRemoving, setIsRemoving] = (0,
|
|
5442
|
-
const [isInviteMode, setIsInviteMode] = (0,
|
|
5443
|
-
const [inviteEmail, setInviteEmail] = (0,
|
|
5444
|
-
const [isInviting, setIsInviting] = (0,
|
|
5445
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
5446
|
-
const [isTyping, setIsTyping] = (0,
|
|
5447
|
-
const isFirstSearchMount = (0,
|
|
5448
|
-
const [isStatusModalOpen, setIsStatusModalOpen] = (0,
|
|
5449
|
-
const [isRoleModalOpen, setIsRoleModalOpen] = (0,
|
|
5450
|
-
const [roleEditTarget, setRoleEditTarget] = (0,
|
|
5451
|
-
const [isUpdatingRole, setIsUpdatingRole] = (0,
|
|
5452
|
-
const [orgName, setOrgName] = (0,
|
|
5453
|
-
const [orgSlug, setOrgSlug] = (0,
|
|
5454
|
-
const [firstName, setFirstName] = (0,
|
|
5455
|
-
const [lastName, setLastName] = (0,
|
|
5456
|
-
const [isCheckingSlug, setIsCheckingSlug] = (0,
|
|
5457
|
-
const [slugAvailable, setSlugAvailable] = (0,
|
|
5458
|
-
const [isSavingOrg, setIsSavingOrg] = (0,
|
|
5459
|
-
const [isSavingProfile, setIsSavingProfile] = (0,
|
|
5460
|
-
(0,
|
|
5687
|
+
const [activeTab, setActiveTab] = (0, import_react94.useState)(isOrg ? "MEMBERS" : "ACCOUNT");
|
|
5688
|
+
const [expandedId, setExpandedId] = (0, import_react94.useState)(null);
|
|
5689
|
+
const [memberToRemove, setMemberToRemove] = (0, import_react94.useState)(null);
|
|
5690
|
+
const [isRemoving, setIsRemoving] = (0, import_react94.useState)(false);
|
|
5691
|
+
const [isInviteMode, setIsInviteMode] = (0, import_react94.useState)(false);
|
|
5692
|
+
const [inviteEmail, setInviteEmail] = (0, import_react94.useState)("");
|
|
5693
|
+
const [isInviting, setIsInviting] = (0, import_react94.useState)(false);
|
|
5694
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react94.useState)(membersSearchQuery);
|
|
5695
|
+
const [isTyping, setIsTyping] = (0, import_react94.useState)(false);
|
|
5696
|
+
const isFirstSearchMount = (0, import_react94.useRef)(true);
|
|
5697
|
+
const [isStatusModalOpen, setIsStatusModalOpen] = (0, import_react94.useState)(false);
|
|
5698
|
+
const [isRoleModalOpen, setIsRoleModalOpen] = (0, import_react94.useState)(false);
|
|
5699
|
+
const [roleEditTarget, setRoleEditTarget] = (0, import_react94.useState)(null);
|
|
5700
|
+
const [isUpdatingRole, setIsUpdatingRole] = (0, import_react94.useState)(false);
|
|
5701
|
+
const [orgName, setOrgName] = (0, import_react94.useState)(initialOrgName);
|
|
5702
|
+
const [orgSlug, setOrgSlug] = (0, import_react94.useState)(initialOrgSlug);
|
|
5703
|
+
const [firstName, setFirstName] = (0, import_react94.useState)("");
|
|
5704
|
+
const [lastName, setLastName] = (0, import_react94.useState)("");
|
|
5705
|
+
const [isCheckingSlug, setIsCheckingSlug] = (0, import_react94.useState)(false);
|
|
5706
|
+
const [slugAvailable, setSlugAvailable] = (0, import_react94.useState)(null);
|
|
5707
|
+
const [isSavingOrg, setIsSavingOrg] = (0, import_react94.useState)(false);
|
|
5708
|
+
const [isSavingProfile, setIsSavingProfile] = (0, import_react94.useState)(false);
|
|
5709
|
+
(0, import_react94.useEffect)(() => {
|
|
5461
5710
|
setOrgName(initialOrgName || "");
|
|
5462
5711
|
setOrgSlug(initialOrgSlug || "");
|
|
5463
5712
|
const parts = (initialFullName || "").split(" ");
|
|
5464
5713
|
setFirstName(parts[0] || "");
|
|
5465
5714
|
setLastName(parts.slice(1).join(" ") || "");
|
|
5466
5715
|
}, [initialOrgName, initialOrgSlug, initialFullName]);
|
|
5467
|
-
(0,
|
|
5716
|
+
(0, import_react94.useEffect)(() => {
|
|
5468
5717
|
if (activeTab !== "MEMBERS") return;
|
|
5469
5718
|
if (isFirstSearchMount.current) {
|
|
5470
5719
|
isFirstSearchMount.current = false;
|
|
@@ -5521,7 +5770,7 @@ var UniversalSettings = ({
|
|
|
5521
5770
|
}
|
|
5522
5771
|
};
|
|
5523
5772
|
const activeExpandedMember = expandedId ? members.find((m) => m.id === expandedId) : null;
|
|
5524
|
-
(0,
|
|
5773
|
+
(0, import_react94.useEffect)(() => {
|
|
5525
5774
|
if (!isOrg || !orgSlug || orgSlug === initialOrgSlug) {
|
|
5526
5775
|
setSlugAvailable(null);
|
|
5527
5776
|
setIsCheckingSlug(false);
|
|
@@ -5581,11 +5830,11 @@ var UniversalSettings = ({
|
|
|
5581
5830
|
const isOrgSaveDisabled = isSavingOrg || !canManage || isCheckingSlug || !hasOrgChanges || orgName.length < 3 || orgSlug.length < 3 || orgSlug !== initialOrgSlug && slugAvailable === false;
|
|
5582
5831
|
const hasProfileChanges = `${firstName} ${lastName}`.trim() !== initialFullName;
|
|
5583
5832
|
const isProfileSaveDisabled = isSavingProfile || !hasProfileChanges || firstName.length < 2 || lastName.length < 2;
|
|
5584
|
-
return /* @__PURE__ */
|
|
5833
|
+
return /* @__PURE__ */ import_react94.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react94.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react94.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-[#068afe] hover:text-[#068afe] transition-colors text-[12px] outline-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react94.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "System Settings"), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your workspace identity, team configurations, and AI billing parameters.")), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-6 mb-6 overflow-x-auto custom-scrollbar px-1" }, isOrg && /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => {
|
|
5585
5834
|
setActiveTab("MEMBERS");
|
|
5586
5835
|
setExpandedId(null);
|
|
5587
5836
|
setIsInviteMode(false);
|
|
5588
|
-
}, className: `pb-3 text-[12px] tracking-wide outline-none transition-colors border-b-2 whitespace-nowrap ${activeTab === "MEMBERS" ? "border-black text-black" : "border-transparent text-neutral-500 hover:text-black"}` }, "Members"), isOrg && /* @__PURE__ */
|
|
5837
|
+
}, className: `pb-3 text-[12px] tracking-wide outline-none transition-colors border-b-2 whitespace-nowrap ${activeTab === "MEMBERS" ? "border-black text-black" : "border-transparent text-neutral-500 hover:text-black"}` }, "Members"), isOrg && /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setActiveTab("ORGANIZATION"), className: `pb-3 text-[12px] tracking-wide outline-none transition-colors border-b-2 whitespace-nowrap ${activeTab === "ORGANIZATION" ? "border-black text-black" : "border-transparent text-neutral-500 hover:text-black"}` }, "Organization"), /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setActiveTab("ACCOUNT"), className: `pb-3 text-[12px] tracking-wide outline-none transition-colors border-b-2 whitespace-nowrap ${activeTab === "ACCOUNT" ? "border-black text-black" : "border-transparent text-neutral-500 hover:text-black"}` }, "Profile")), activeTab === "MEMBERS" && isOrg && /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement(
|
|
5589
5838
|
ConfirmationDialog,
|
|
5590
5839
|
{
|
|
5591
5840
|
isOpen: !!memberToRemove,
|
|
@@ -5598,7 +5847,7 @@ var UniversalSettings = ({
|
|
|
5598
5847
|
onClose: () => setMemberToRemove(null),
|
|
5599
5848
|
onConfirm: handleConfirmRemove
|
|
5600
5849
|
}
|
|
5601
|
-
), !isInviteMode && !activeExpandedMember && /* @__PURE__ */
|
|
5850
|
+
), !isInviteMode && !activeExpandedMember && /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-row flex-nowrap mb-4 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react94.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-[12px] text-black placeholder-neutral-400 outline-none transition-colors focus:border-black" })), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setIsStatusModalOpen(true), className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.SearchList02Icon, size: 16 })), /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setIsRoleModalOpen(true), className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.ListSettingIcon, size: 16 })))), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, activeExpandedMember ? /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col animate-in fade-in zoom-in-95 duration-300 w-full" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-1 mb-8" }, /* @__PURE__ */ import_react94.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, "Member Profile"), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[12px] text-neutral-500" }, "View and manage this member's access privileges.")), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-4 mb-8" }, /* @__PURE__ */ import_react94.default.createElement(MemberAvatar3, { src: activeExpandedMember.avatarUrl, status: activeExpandedMember.status, sizeClass: "w-14 h-14" }), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react94.default.createElement("span", { className: "text-sm text-black tracking-tight truncate" }, activeExpandedMember.fullName), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-2 mt-0.5" }, /* @__PURE__ */ import_react94.default.createElement("span", { className: "text-[12px] text-neutral-500 capitalize" }, activeExpandedMember.role.toLowerCase()), canManage && !activeExpandedMember.isRootAdmin && (isUpdatingRole ? /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.Loading03Icon, size: 12, className: "animate-spin text-neutral-400 ml-1" }) : /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setRoleEditTarget(activeExpandedMember), className: "text-[11px] text-[#068afe] hover:underline outline-none" }, "Edit"))))), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col sm:flex-row gap-3 pt-6 " }, canManage && !activeExpandedMember.isRootAdmin && /* @__PURE__ */ import_react94.default.createElement(
|
|
5602
5851
|
"button",
|
|
5603
5852
|
{
|
|
5604
5853
|
onClick: () => setMemberToRemove(activeExpandedMember),
|
|
@@ -5606,25 +5855,25 @@ var UniversalSettings = ({
|
|
|
5606
5855
|
className: "w-full sm:flex-1 py-2.5 bg-white border border-rose-200 text-rose-600 hover:bg-rose-50 rounded-full text-[12px] tracking-wide transition-colors outline-none disabled:opacity-50"
|
|
5607
5856
|
},
|
|
5608
5857
|
"Remove Access"
|
|
5609
|
-
), /* @__PURE__ */
|
|
5858
|
+
), /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setExpandedId(null), disabled: isUpdatingRole, className: "w-full sm:flex-1 py-2.5 bg-white border border-neutral-200 text-black hover:bg-neutral-100 rounded-full text-[12px] tracking-wide transition-colors outline-none disabled:opacity-50" }, "Close Profile"))) : /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-row items-center justify-between gap-4" }, /* @__PURE__ */ import_react94.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, isInviteMode ? "Add Member" : "Team Directory"), !isInviteMode && canManage && /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => setIsInviteMode(true), className: "shrink-0 px-4 py-1.5 border border-neutral-200 text-black text-[12px] tracking-wide rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "Invite Team")), !isInviteMode && /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[12px] text-neutral-500" }, "Manage members and access controls across your organization.")), /* @__PURE__ */ import_react94.default.createElement("div", { className: "w-full overflow-hidden" }, isInviteMode ? /* @__PURE__ */ import_react94.default.createElement("form", { onSubmit: handleInviteSubmit, className: "flex flex-col gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react94.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ import_react94.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-neutral-200 text-black outline-none focus:border-black transition-all duration-300", placeholder: "name@company.com" })), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react94.default.createElement(ThreeDActionButton, { type: "submit", disabled: inviteEmail.length < 5 || isInviting, isLoading: isInviting, className: "w-full" }, "Send Invitation"), /* @__PURE__ */ import_react94.default.createElement("button", { type: "button", onClick: () => {
|
|
5610
5859
|
setIsInviteMode(false);
|
|
5611
5860
|
setInviteEmail("");
|
|
5612
|
-
}, disabled: isInviting, className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-xs tracking-wide" }, "Cancel"))) : isMembersLoading || isTyping ? /* @__PURE__ */
|
|
5861
|
+
}, disabled: isInviting, className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-xs tracking-wide" }, "Cancel"))) : isMembersLoading || isTyping ? /* @__PURE__ */ import_react94.default.createElement(PageSpinner8, null) : /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col min-w-0 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement("div", null, members.length === 0 ? /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[12px] text-neutral-400 py-6 text-center" }, "No members found") : members.map((member) => /* @__PURE__ */ import_react94.default.createElement("div", { key: member.id, onClick: () => setExpandedId(member.id), className: "flex items-center justify-between py-3 hover:bg-neutral-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react94.default.createElement(MemberAvatar3, { src: member.avatarUrl, status: member.status }), /* @__PURE__ */ import_react94.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5" }, /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[12px] text-black truncate" }, member.fullName), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[11px] text-neutral-500 capitalize truncate" }, member.role.toLowerCase())))))), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react94.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => onMembersPageChange(membersCurrentPage - 1), disabled: membersCurrentPage <= 1 || isMembersLoading, className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react94.default.createElement("button", { onClick: () => onMembersPageChange(membersCurrentPage + 1), disabled: membersCurrentPage >= membersTotalPages || isMembersLoading || membersTotalPages === 0, className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.ArrowRight01Icon, size: 14 })))))))), /* @__PURE__ */ import_react94.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_react94.default.createElement(ReusableOptions, { isOpen: isRoleModalOpen, onClose: () => setIsRoleModalOpen(false), title: "Role Filter", options: ["ALL", "ADMIN", "MANAGER", "MEMBER"], selectedOption: activeRoleFilter, onSelect: (role) => onRoleFilterChange(role) }), /* @__PURE__ */ import_react94.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_react94.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react94.default.createElement("div", null, /* @__PURE__ */ import_react94.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Workspace Details"), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your organizational identity and handles.")), !canManage && /* @__PURE__ */ import_react94.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react94.default.createElement("form", { className: "flex flex-col gap-8 w-full max-w-5xl", onSubmit: handleSaveOrganization, autoComplete: "off" }, /* @__PURE__ */ import_react94.default.createElement(TextInput, { label: "Workspace Name", value: orgName, onChange: handleOrgNameChange, disabled: !canManage || isSavingOrg, placeholder: "Acme Corporation", maxLength: 50 }), /* @__PURE__ */ import_react94.default.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ import_react94.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Workspace Handle"), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center relative w-full border-b border-neutral-200 focus-within:border-black transition-all duration-300 overflow-hidden" }, /* @__PURE__ */ import_react94.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_react94.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react94.default.createElement(InputSpinner3, null), !isCheckingSlug && canManage && orgSlug !== initialOrgSlug && orgSlug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react94.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ import_react94.default.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react94.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_react94.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react94.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react94.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_react94.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react94.default.createElement(ThreeDActionButton, { type: "submit", disabled: isOrgSaveDisabled, isLoading: isSavingOrg, className: "min-w-32" }, "Save Changes"), hasOrgChanges && !isSavingOrg && canManage && /* @__PURE__ */ import_react94.default.createElement("button", { type: "button", onClick: () => {
|
|
5613
5862
|
setOrgName(initialOrgName || "");
|
|
5614
5863
|
setOrgSlug(initialOrgSlug || "");
|
|
5615
|
-
}, className: "text-[11px] tracking-widest text-neutral-400 hover:text-black transition-colors outline-none" }, "Cancel")))), activeTab === "ACCOUNT" && /* @__PURE__ */
|
|
5864
|
+
}, className: "text-[11px] tracking-widest text-neutral-400 hover:text-black transition-colors outline-none" }, "Cancel")))), activeTab === "ACCOUNT" && /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col gap-8 rounded-2xl p-6 bg-white w-full" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react94.default.createElement("div", null, /* @__PURE__ */ import_react94.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Personal Identity"), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-xs text-neutral-500" }, "Update your system display name and contact email."))), /* @__PURE__ */ import_react94.default.createElement("form", { className: "flex flex-col gap-6 w-full max-w-5xl", onSubmit: handleSaveProfile, autoComplete: "off" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-6" }, /* @__PURE__ */ import_react94.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_react94.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_react94.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react94.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ import_react94.default.createElement("input", { type: "email", value: initialEmail, disabled: true, className: "w-full pb-3 pt-3 text-sm bg-transparent text-neutral-400 border-b border-neutral-200 outline-none cursor-not-allowed" })), /* @__PURE__ */ import_react94.default.createElement("div", { className: "pt-4 flex items-center gap-4" }, /* @__PURE__ */ import_react94.default.createElement(ThreeDActionButton, { type: "submit", disabled: isProfileSaveDisabled, isLoading: isSavingProfile, className: "min-w-32" }, "Update Identity")))), /* @__PURE__ */ import_react94.default.createElement("div", { className: "bg-white rounded-2xl p-6 w-full flex flex-col sm:flex-row sm:items-center justify-between gap-6 border border-neutral-100" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col items-start max-w-sm" }, /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-[0.2em] mb-2 uppercase" }, "AI Credits Balance"), isBillingLoading ? /* @__PURE__ */ import_react94.default.createElement("div", { className: "h-8 w-32 bg-neutral-100 animate-pulse rounded mt-1" }) : /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-2 mt-1" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.Coins01Icon, size: 28, className: "text-[#000000]" }), /* @__PURE__ */ import_react94.default.createElement("span", { className: "text-3xl text-black tracking-tight" }, aiCredits)), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[11px] text-neutral-500 mt-4 leading-relaxed" }, "AI credits are consumed when generating intelligent summaries, transcriptions, and automated huddle insights.")), /* @__PURE__ */ import_react94.default.createElement("button", { onClick: onTopUp, className: "w-12 h-12 rounded-full border border-neutral-200 flex items-center justify-center text-black hover:bg-neutral-50 transition-colors outline-none shrink-0", "aria-label": "Top Up Credits" }, /* @__PURE__ */ import_react94.default.createElement(import_react95.HugeiconsIcon, { icon: import_core_free_icons36.PlusSignIcon, size: 20 })))));
|
|
5616
5865
|
};
|
|
5617
5866
|
|
|
5618
5867
|
// src/components/UniversalCreateHuddle.tsx
|
|
5619
|
-
var
|
|
5868
|
+
var import_react96 = __toESM(require("react"));
|
|
5620
5869
|
var import_react_hot_toast16 = __toESM(require("react-hot-toast"));
|
|
5621
|
-
var
|
|
5622
|
-
var
|
|
5870
|
+
var import_react97 = require("@hugeicons/react");
|
|
5871
|
+
var import_core_free_icons37 = require("@hugeicons/core-free-icons");
|
|
5623
5872
|
var MemberAvatar4 = ({ src, sizeClass = "w-10 h-10" }) => {
|
|
5624
|
-
const [loaded, setLoaded] = (0,
|
|
5625
|
-
const [error, setError] = (0,
|
|
5873
|
+
const [loaded, setLoaded] = (0, import_react96.useState)(false);
|
|
5874
|
+
const [error, setError] = (0, import_react96.useState)(false);
|
|
5626
5875
|
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
5627
|
-
return /* @__PURE__ */
|
|
5876
|
+
return /* @__PURE__ */ import_react96.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ import_react96.default.createElement(
|
|
5628
5877
|
"img",
|
|
5629
5878
|
{
|
|
5630
5879
|
src: error || !src ? defaultAvatar : src,
|
|
@@ -5665,28 +5914,28 @@ var UniversalCreateHuddle = ({
|
|
|
5665
5914
|
onCreateSubmit
|
|
5666
5915
|
}) => {
|
|
5667
5916
|
const canManage = userRole === "ADMIN" || userRole === "MANAGER" || userRole === "OWNER";
|
|
5668
|
-
const [huddleDate, setHuddleDate] = (0,
|
|
5917
|
+
const [huddleDate, setHuddleDate] = (0, import_react96.useState)(() => {
|
|
5669
5918
|
const d = /* @__PURE__ */ new Date();
|
|
5670
5919
|
d.setHours(d.getHours() + 1, 0, 0, 0);
|
|
5671
5920
|
return d;
|
|
5672
5921
|
});
|
|
5673
|
-
const [title, setTitle] = (0,
|
|
5674
|
-
const [isPrivate, setIsPrivate] = (0,
|
|
5675
|
-
const [timezone, setTimezone] = (0,
|
|
5676
|
-
(0,
|
|
5922
|
+
const [title, setTitle] = (0, import_react96.useState)("");
|
|
5923
|
+
const [isPrivate, setIsPrivate] = (0, import_react96.useState)(false);
|
|
5924
|
+
const [timezone, setTimezone] = (0, import_react96.useState)("UTC");
|
|
5925
|
+
(0, import_react96.useEffect)(() => {
|
|
5677
5926
|
try {
|
|
5678
5927
|
setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
5679
5928
|
} catch (e) {
|
|
5680
5929
|
}
|
|
5681
5930
|
}, []);
|
|
5682
|
-
const [calendarMode, setCalendarMode] = (0,
|
|
5683
|
-
const [showTimezoneModal, setShowTimezoneModal] = (0,
|
|
5684
|
-
const [showMembersModal, setShowMembersModal] = (0,
|
|
5685
|
-
const [selectedParticipants, setSelectedParticipants] = (0,
|
|
5686
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
5687
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
5688
|
-
const [isTyping, setIsTyping] = (0,
|
|
5689
|
-
const typingTimer = (0,
|
|
5931
|
+
const [calendarMode, setCalendarMode] = (0, import_react96.useState)(null);
|
|
5932
|
+
const [showTimezoneModal, setShowTimezoneModal] = (0, import_react96.useState)(false);
|
|
5933
|
+
const [showMembersModal, setShowMembersModal] = (0, import_react96.useState)(false);
|
|
5934
|
+
const [selectedParticipants, setSelectedParticipants] = (0, import_react96.useState)(/* @__PURE__ */ new Set());
|
|
5935
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react96.useState)(false);
|
|
5936
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react96.useState)(membersSearchQuery);
|
|
5937
|
+
const [isTyping, setIsTyping] = (0, import_react96.useState)(false);
|
|
5938
|
+
const typingTimer = (0, import_react96.useRef)(null);
|
|
5690
5939
|
const handleSearchInput = (e) => {
|
|
5691
5940
|
const val = e.target.value;
|
|
5692
5941
|
setLocalSearchQuery(val);
|
|
@@ -5724,7 +5973,7 @@ var UniversalCreateHuddle = ({
|
|
|
5724
5973
|
setIsSubmitting(false);
|
|
5725
5974
|
}
|
|
5726
5975
|
};
|
|
5727
|
-
return /* @__PURE__ */
|
|
5976
|
+
return /* @__PURE__ */ import_react96.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react96.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react96.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react96.default.createElement("a", { href: onBackHref, className: "flex items-center gap-2 text-[#068afe] hover:text-[#068afe] transition-colors text-[12px] outline-none" }, /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react96.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Create Huddle"), /* @__PURE__ */ import_react96.default.createElement("p", { className: "text-xs text-neutral-500" }, "Schedule a new workspace huddle and manage participant access.")), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react96.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSubmit, autoComplete: "off" }, !canManage && /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex items-start gap-3 p-4 bg-neutral-50 rounded-xl" }, /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.CircleLock02Icon, size: 20, className: "text-neutral-500 shrink-0 mt-0.5" }), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[12px] text-black tracking-tight" }, "Access Restricted"), /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[12px] text-neutral-500 mt-1 leading-relaxed" }, "You do not have sufficient permissions to access this page. Contact organization admin or manager."))), /* @__PURE__ */ import_react96.default.createElement(
|
|
5728
5977
|
TextInput,
|
|
5729
5978
|
{
|
|
5730
5979
|
label: "Huddle Subject",
|
|
@@ -5734,31 +5983,31 @@ var UniversalCreateHuddle = ({
|
|
|
5734
5983
|
placeholder: "e.g. Q4 Engineering Sync",
|
|
5735
5984
|
maxLength: 80
|
|
5736
5985
|
}
|
|
5737
|
-
), /* @__PURE__ */
|
|
5986
|
+
), /* @__PURE__ */ import_react96.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react96.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Date"), /* @__PURE__ */ import_react96.default.createElement(
|
|
5738
5987
|
"div",
|
|
5739
5988
|
{
|
|
5740
5989
|
onClick: () => canManage && !isSubmitting && setCalendarMode("DATE"),
|
|
5741
5990
|
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 ${!canManage || isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black cursor-pointer"}`
|
|
5742
5991
|
},
|
|
5743
|
-
/* @__PURE__ */
|
|
5744
|
-
/* @__PURE__ */
|
|
5745
|
-
)), /* @__PURE__ */
|
|
5992
|
+
/* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Calendar01Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
5993
|
+
/* @__PURE__ */ import_react96.default.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, huddleDate.toLocaleDateString("en-GB", { day: "2-digit", month: "short", year: "numeric" }))
|
|
5994
|
+
)), /* @__PURE__ */ import_react96.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react96.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Time"), /* @__PURE__ */ import_react96.default.createElement(
|
|
5746
5995
|
"div",
|
|
5747
5996
|
{
|
|
5748
5997
|
onClick: () => canManage && !isSubmitting && setCalendarMode("TIME"),
|
|
5749
5998
|
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 ${!canManage || isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black cursor-pointer"}`
|
|
5750
5999
|
},
|
|
5751
|
-
/* @__PURE__ */
|
|
5752
|
-
/* @__PURE__ */
|
|
5753
|
-
)), /* @__PURE__ */
|
|
6000
|
+
/* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Clock01Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
6001
|
+
/* @__PURE__ */ import_react96.default.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, huddleDate.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }))
|
|
6002
|
+
)), /* @__PURE__ */ import_react96.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react96.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Timezone"), /* @__PURE__ */ import_react96.default.createElement(
|
|
5754
6003
|
"div",
|
|
5755
6004
|
{
|
|
5756
6005
|
onClick: () => canManage && !isSubmitting && setShowTimezoneModal(true),
|
|
5757
6006
|
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 ${!canManage || isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black cursor-pointer"}`
|
|
5758
6007
|
},
|
|
5759
|
-
/* @__PURE__ */
|
|
5760
|
-
/* @__PURE__ */
|
|
5761
|
-
))), /* @__PURE__ */
|
|
6008
|
+
/* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Globe02Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
6009
|
+
/* @__PURE__ */ import_react96.default.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, timezone)
|
|
6010
|
+
))), /* @__PURE__ */ import_react96.default.createElement("div", { className: `flex items-center justify-between py-2 mt-2 ${!canManage ? "opacity-50 pointer-events-none" : ""}` }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[12px] text-black tracking-tight" }, "Private Huddle"), /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[11px] text-neutral-500" }, "Only invited members can join.")), /* @__PURE__ */ import_react96.default.createElement(
|
|
5762
6011
|
"button",
|
|
5763
6012
|
{
|
|
5764
6013
|
type: "button",
|
|
@@ -5766,8 +6015,8 @@ var UniversalCreateHuddle = ({
|
|
|
5766
6015
|
disabled: !canManage || isSubmitting,
|
|
5767
6016
|
className: `relative w-11 h-6 rounded-full transition-colors outline-none shrink-0 ${isPrivate ? "bg-[#068afe]" : "bg-neutral-200"}`
|
|
5768
6017
|
},
|
|
5769
|
-
/* @__PURE__ */
|
|
5770
|
-
)), isPrivate && /* @__PURE__ */
|
|
6018
|
+
/* @__PURE__ */ import_react96.default.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"}` })
|
|
6019
|
+
)), isPrivate && /* @__PURE__ */ import_react96.default.createElement("div", { className: `flex items-center justify-between animate-in fade-in zoom-in-95 duration-200 bg-neutral-50 p-4 rounded-xl ${!canManage ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[12px] text-black tracking-tight" }, "Participants"), /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[11px] text-[#068afe] " }, selectedParticipants.size === 0 ? "0 added" : selectedParticipants.size >= 1e3 ? `${(selectedParticipants.size / 1e3).toFixed(1)}k+ added` : `${selectedParticipants.size} added`)), /* @__PURE__ */ import_react96.default.createElement(
|
|
5771
6020
|
"button",
|
|
5772
6021
|
{
|
|
5773
6022
|
type: "button",
|
|
@@ -5776,7 +6025,7 @@ var UniversalCreateHuddle = ({
|
|
|
5776
6025
|
className: "px-4 py-2 border border-neutral-200 text-black text-[11px] tracking-wide rounded-full hover:bg-white transition-colors outline-none bg-transparent disabled:cursor-not-allowed"
|
|
5777
6026
|
},
|
|
5778
6027
|
"Manage Access"
|
|
5779
|
-
)), canManage && /* @__PURE__ */
|
|
6028
|
+
)), canManage && /* @__PURE__ */ import_react96.default.createElement("div", { className: "pt-6" }, /* @__PURE__ */ import_react96.default.createElement(
|
|
5780
6029
|
ThreeDActionButton,
|
|
5781
6030
|
{
|
|
5782
6031
|
type: "submit",
|
|
@@ -5785,7 +6034,7 @@ var UniversalCreateHuddle = ({
|
|
|
5785
6034
|
className: "w-full sm:w-auto min-w-40"
|
|
5786
6035
|
},
|
|
5787
6036
|
"Schedule Huddle"
|
|
5788
|
-
)))), canManage && /* @__PURE__ */
|
|
6037
|
+
)))), canManage && /* @__PURE__ */ import_react96.default.createElement(import_react96.default.Fragment, null, /* @__PURE__ */ import_react96.default.createElement(
|
|
5789
6038
|
CalendarPicker,
|
|
5790
6039
|
{
|
|
5791
6040
|
isOpen: calendarMode !== null,
|
|
@@ -5794,7 +6043,7 @@ var UniversalCreateHuddle = ({
|
|
|
5794
6043
|
defaultMode: calendarMode || "DATE",
|
|
5795
6044
|
onConfirm: (d) => setHuddleDate(d)
|
|
5796
6045
|
}
|
|
5797
|
-
), /* @__PURE__ */
|
|
6046
|
+
), /* @__PURE__ */ import_react96.default.createElement(
|
|
5798
6047
|
ReusableOptions,
|
|
5799
6048
|
{
|
|
5800
6049
|
isOpen: showTimezoneModal,
|
|
@@ -5805,7 +6054,7 @@ var UniversalCreateHuddle = ({
|
|
|
5805
6054
|
onSelect: (tz) => setTimezone(tz),
|
|
5806
6055
|
showSearch: true
|
|
5807
6056
|
}
|
|
5808
|
-
)), showMembersModal && canManage && /* @__PURE__ */
|
|
6057
|
+
)), showMembersModal && canManage && /* @__PURE__ */ import_react96.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowMembersModal(false) }), /* @__PURE__ */ import_react96.default.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__ */ import_react96.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react96.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Select Participants"), /* @__PURE__ */ import_react96.default.createElement("button", { onClick: () => setShowMembersModal(false), className: "text-[#068afe] hover:text-[#068afe] transition-colors outline-none text-[12px] " }, "Done")), /* @__PURE__ */ import_react96.default.createElement("div", { className: "p-4 shrink-0 " }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ import_react96.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react96.default.createElement(
|
|
5809
6058
|
"input",
|
|
5810
6059
|
{
|
|
5811
6060
|
type: "text",
|
|
@@ -5814,34 +6063,34 @@ var UniversalCreateHuddle = ({
|
|
|
5814
6063
|
onChange: handleSearchInput,
|
|
5815
6064
|
className: "w-full pl-10 pr-4 py-2.5 bg-neutral-100 rounded-full text-[12px] text-black placeholder-neutral-400 outline-none focus:bg-neutral-200 transition-colors"
|
|
5816
6065
|
}
|
|
5817
|
-
))), /* @__PURE__ */
|
|
6066
|
+
))), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2 relative" }, isMembersLoading || isTyping ? /* @__PURE__ */ import_react96.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Loading03Icon, size: 28, className: "animate-spin text-black" })) : members.length === 0 ? /* @__PURE__ */ import_react96.default.createElement("div", { className: "p-8 text-center text-xs text-neutral-400" }, "No members found.") : members.map((member) => {
|
|
5818
6067
|
const isChecked = selectedParticipants.has(member.userId);
|
|
5819
|
-
return /* @__PURE__ */
|
|
6068
|
+
return /* @__PURE__ */ import_react96.default.createElement(
|
|
5820
6069
|
"div",
|
|
5821
6070
|
{
|
|
5822
6071
|
key: member.id,
|
|
5823
6072
|
onClick: () => toggleParticipant(member.userId),
|
|
5824
6073
|
className: "flex items-center justify-between p-3 rounded-xl cursor-pointer hover:bg-neutral-50 transition-colors select-none"
|
|
5825
6074
|
},
|
|
5826
|
-
/* @__PURE__ */
|
|
5827
|
-
/* @__PURE__ */
|
|
6075
|
+
/* @__PURE__ */ import_react96.default.createElement("div", { className: "flex items-center gap-3 min-w-0 flex-1" }, /* @__PURE__ */ import_react96.default.createElement(MemberAvatar4, { src: member.avatarUrl, sizeClass: "w-9 h-9" }), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[12px] text-black truncate" }, member.fullName), /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[11px] text-neutral-400 capitalize truncate" }, member.role.toLowerCase()))),
|
|
6076
|
+
/* @__PURE__ */ import_react96.default.createElement("div", { className: "shrink-0 pl-3" }, /* @__PURE__ */ import_react96.default.createElement("div", { className: `w-5 h-5 rounded-full flex items-center justify-center transition-colors ${isChecked ? "bg-[#068afe]" : "border border-neutral-300 bg-white"}` }, isChecked && /* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.Tick02Icon, size: 14, className: "text-white" })))
|
|
5828
6077
|
);
|
|
5829
|
-
})), /* @__PURE__ */
|
|
6078
|
+
})), /* @__PURE__ */ import_react96.default.createElement("div", { className: "p-4 flex items-center justify-between shrink-0 bg-white" }, /* @__PURE__ */ import_react96.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-widest" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ import_react96.default.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ import_react96.default.createElement(
|
|
5830
6079
|
"button",
|
|
5831
6080
|
{
|
|
5832
6081
|
disabled: membersCurrentPage <= 1 || isMembersLoading,
|
|
5833
6082
|
onClick: () => onMembersPageChange(membersCurrentPage - 1),
|
|
5834
6083
|
className: "w-7 h-7 flex items-center justify-center rounded-full bg-white border border-neutral-200 text-neutral-600 disabled:opacity-30 outline-none hover:bg-neutral-50 transition-colors"
|
|
5835
6084
|
},
|
|
5836
|
-
/* @__PURE__ */
|
|
5837
|
-
), /* @__PURE__ */
|
|
6085
|
+
/* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.ArrowLeft01Icon, size: 12 })
|
|
6086
|
+
), /* @__PURE__ */ import_react96.default.createElement(
|
|
5838
6087
|
"button",
|
|
5839
6088
|
{
|
|
5840
6089
|
disabled: membersCurrentPage >= membersTotalPages || membersTotalPages === 0 || isMembersLoading,
|
|
5841
6090
|
onClick: () => onMembersPageChange(membersCurrentPage + 1),
|
|
5842
6091
|
className: "w-7 h-7 flex items-center justify-center rounded-full bg-white border border-neutral-200 text-neutral-600 disabled:opacity-30 outline-none hover:bg-neutral-50 transition-colors"
|
|
5843
6092
|
},
|
|
5844
|
-
/* @__PURE__ */
|
|
6093
|
+
/* @__PURE__ */ import_react96.default.createElement(import_react97.HugeiconsIcon, { icon: import_core_free_icons37.ArrowRight01Icon, size: 12 })
|
|
5845
6094
|
))))));
|
|
5846
6095
|
};
|
|
5847
6096
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -5868,6 +6117,7 @@ var UniversalCreateHuddle = ({
|
|
|
5868
6117
|
MedicalFeatureStatsBlock,
|
|
5869
6118
|
MobileNav,
|
|
5870
6119
|
NumberInput,
|
|
6120
|
+
OpenBidHome,
|
|
5871
6121
|
PageSpinner,
|
|
5872
6122
|
PinDialerBottomSheet,
|
|
5873
6123
|
PipleAuth,
|