@retinalabsllc/zairusjs 16.1.95 → 16.2.1
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 +29 -3
- package/dist/index.d.ts +29 -3
- package/dist/index.js +501 -91
- package/dist/index.mjs +513 -88
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -64,6 +64,7 @@ __export(index_exports, {
|
|
|
64
64
|
UniversalBuyCryptoPage: () => UniversalBuyCryptoPage,
|
|
65
65
|
UniversalCardActionPage: () => UniversalCardActionPage,
|
|
66
66
|
UniversalCardPage: () => UniversalCardPage,
|
|
67
|
+
UniversalCreateHuddle: () => UniversalCreateHuddle,
|
|
67
68
|
UniversalErrorView: () => UniversalErrorView,
|
|
68
69
|
UniversalHome2: () => UniversalHome2,
|
|
69
70
|
UniversalHomeView: () => UniversalHomeView,
|
|
@@ -4521,7 +4522,7 @@ var import_core_free_icons27 = require("@hugeicons/core-free-icons");
|
|
|
4521
4522
|
var HuddleAvatar = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
4522
4523
|
const [loaded, setLoaded] = (0, import_react77.useState)(false);
|
|
4523
4524
|
const [error, setError] = (0, import_react77.useState)(false);
|
|
4524
|
-
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/
|
|
4525
|
+
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/default_a.avif";
|
|
4525
4526
|
const finalSrc = error || !src ? defaultAvatar : src;
|
|
4526
4527
|
const getStatusColor = () => {
|
|
4527
4528
|
switch (status?.toUpperCase()) {
|
|
@@ -4864,7 +4865,7 @@ var import_core_free_icons29 = require("@hugeicons/core-free-icons");
|
|
|
4864
4865
|
var OrgAvatar = ({ src, sizeClass = "w-10 h-10" }) => {
|
|
4865
4866
|
const [loaded, setLoaded] = (0, import_react81.useState)(false);
|
|
4866
4867
|
const [error, setError] = (0, import_react81.useState)(false);
|
|
4867
|
-
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/
|
|
4868
|
+
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/office_a.avif";
|
|
4868
4869
|
const finalSrc = error || !src ? defaultAvatar : src;
|
|
4869
4870
|
return /* @__PURE__ */ import_react81.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react81.default.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react81.default.createElement(import_react82.HugeiconsIcon, { icon: import_core_free_icons29.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ import_react81.default.createElement(
|
|
4870
4871
|
"img",
|
|
@@ -5075,13 +5076,59 @@ var UniversalHome2 = ({
|
|
|
5075
5076
|
};
|
|
5076
5077
|
|
|
5077
5078
|
// src/components/UniversalSettings.tsx
|
|
5078
|
-
var
|
|
5079
|
+
var import_react85 = __toESM(require("react"));
|
|
5079
5080
|
var import_react_hot_toast15 = __toESM(require("react-hot-toast"));
|
|
5081
|
+
var import_react86 = require("@hugeicons/react");
|
|
5082
|
+
var import_core_free_icons31 = require("@hugeicons/core-free-icons");
|
|
5083
|
+
|
|
5084
|
+
// src/components/ReusableOptions.tsx
|
|
5085
|
+
var import_react83 = __toESM(require("react"));
|
|
5080
5086
|
var import_react84 = require("@hugeicons/react");
|
|
5081
5087
|
var import_core_free_icons30 = require("@hugeicons/core-free-icons");
|
|
5088
|
+
var ReusableOptions = ({
|
|
5089
|
+
isOpen,
|
|
5090
|
+
onClose,
|
|
5091
|
+
title,
|
|
5092
|
+
options,
|
|
5093
|
+
selectedOption,
|
|
5094
|
+
onSelect,
|
|
5095
|
+
showSearch = false
|
|
5096
|
+
}) => {
|
|
5097
|
+
const [searchQuery, setSearchQuery] = (0, import_react83.useState)("");
|
|
5098
|
+
if (!isOpen) return null;
|
|
5099
|
+
const filteredOptions = options.filter(
|
|
5100
|
+
(opt) => opt.toLowerCase().includes(searchQuery.toLowerCase())
|
|
5101
|
+
);
|
|
5102
|
+
return /* @__PURE__ */ import_react83.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: onClose }), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react83.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, title), /* @__PURE__ */ import_react83.default.createElement("button", { onClick: onClose, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.CancelCircleIcon, size: 18 }))), showSearch && /* @__PURE__ */ import_react83.default.createElement("div", { className: "p-4 shrink-0 " }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react83.default.createElement(
|
|
5103
|
+
"input",
|
|
5104
|
+
{
|
|
5105
|
+
type: "text",
|
|
5106
|
+
placeholder: "Search...",
|
|
5107
|
+
value: searchQuery,
|
|
5108
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
5109
|
+
className: "w-full pl-10 pr-4 py-2.5 bg-neutral-100 rounded-full text-[13px] text-black placeholder-neutral-400 outline-none focus:bg-neutral-200 transition-colors"
|
|
5110
|
+
}
|
|
5111
|
+
))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, filteredOptions.length === 0 ? /* @__PURE__ */ import_react83.default.createElement("div", { className: "p-6 text-center text-[12px] text-neutral-400" }, "No options found.") : filteredOptions.map((opt) => {
|
|
5112
|
+
const isSelected = selectedOption === opt;
|
|
5113
|
+
return /* @__PURE__ */ import_react83.default.createElement(
|
|
5114
|
+
"button",
|
|
5115
|
+
{
|
|
5116
|
+
key: opt,
|
|
5117
|
+
onClick: () => {
|
|
5118
|
+
onSelect(opt);
|
|
5119
|
+
onClose();
|
|
5120
|
+
},
|
|
5121
|
+
className: `w-full text-left p-4 text-[13px] tracking-tight rounded-full transition-colors outline-none ${isSelected ? "text-[#068afe] bg-[#068afe]/10" : "text-neutral-600 hover:bg-neutral-50/50"}`
|
|
5122
|
+
},
|
|
5123
|
+
opt
|
|
5124
|
+
);
|
|
5125
|
+
}))));
|
|
5126
|
+
};
|
|
5127
|
+
|
|
5128
|
+
// src/components/UniversalSettings.tsx
|
|
5082
5129
|
var MemberAvatar2 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
5083
|
-
const [loaded, setLoaded] = (0,
|
|
5084
|
-
const [error, setError] = (0,
|
|
5130
|
+
const [loaded, setLoaded] = (0, import_react85.useState)(false);
|
|
5131
|
+
const [error, setError] = (0, import_react85.useState)(false);
|
|
5085
5132
|
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
5086
5133
|
const finalSrc = error || !src ? defaultAvatar : src;
|
|
5087
5134
|
const getStatusColor = () => {
|
|
@@ -5098,7 +5145,7 @@ var MemberAvatar2 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
|
5098
5145
|
return "bg-neutral-200";
|
|
5099
5146
|
}
|
|
5100
5147
|
};
|
|
5101
|
-
return /* @__PURE__ */
|
|
5148
|
+
return /* @__PURE__ */ import_react85.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ import_react85.default.createElement(
|
|
5102
5149
|
"img",
|
|
5103
5150
|
{
|
|
5104
5151
|
src: finalSrc,
|
|
@@ -5107,10 +5154,10 @@ var MemberAvatar2 = ({ src, status, sizeClass = "w-10 h-10" }) => {
|
|
|
5107
5154
|
onLoad: () => setLoaded(true),
|
|
5108
5155
|
onError: () => setError(true)
|
|
5109
5156
|
}
|
|
5110
|
-
)), /* @__PURE__ */
|
|
5157
|
+
)), /* @__PURE__ */ import_react85.default.createElement("div", { className: `absolute -bottom-1 -right-1 w-3.5 h-3.5 rounded-full border-2 border-white z-10 ${getStatusColor()}` }));
|
|
5111
5158
|
};
|
|
5112
|
-
var PageSpinner8 = () => /* @__PURE__ */
|
|
5113
|
-
var InputSpinner3 = () => /* @__PURE__ */
|
|
5159
|
+
var PageSpinner8 = () => /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
5160
|
+
var InputSpinner3 = () => /* @__PURE__ */ import_react85.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_react85.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react85.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" }));
|
|
5114
5161
|
var UniversalSettings = ({
|
|
5115
5162
|
accountType,
|
|
5116
5163
|
userRole,
|
|
@@ -5144,41 +5191,31 @@ var UniversalSettings = ({
|
|
|
5144
5191
|
const onBackHandler = onBack ?? (() => {
|
|
5145
5192
|
if (typeof window !== "undefined") window.history.back();
|
|
5146
5193
|
});
|
|
5147
|
-
const [activeTab, setActiveTab] = (0,
|
|
5148
|
-
(0,
|
|
5194
|
+
const [activeTab, setActiveTab] = (0, import_react85.useState)(accountType === "ORGANIZATION" ? "MEMBERS" : "ACCOUNT");
|
|
5195
|
+
(0, import_react85.useEffect)(() => {
|
|
5149
5196
|
if (accountType === "INDIVIDUAL" && activeTab === "MEMBERS") {
|
|
5150
5197
|
setActiveTab("ACCOUNT");
|
|
5151
5198
|
}
|
|
5152
5199
|
}, [accountType, activeTab]);
|
|
5153
|
-
const [expandedId, setExpandedId] = (0,
|
|
5154
|
-
const [memberToRemove, setMemberToRemove] = (0,
|
|
5155
|
-
const [isRemoving, setIsRemoving] = (0,
|
|
5156
|
-
const [isInviteMode, setIsInviteMode] = (0,
|
|
5157
|
-
const [inviteEmail, setInviteEmail] = (0,
|
|
5158
|
-
const [isInviting, setIsInviting] = (0,
|
|
5159
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
5160
|
-
const [isTyping, setIsTyping] = (0,
|
|
5161
|
-
const isFirstSearchMount = (0,
|
|
5162
|
-
const [isStatusModalOpen, setIsStatusModalOpen] = (0,
|
|
5163
|
-
const [isRoleModalOpen, setIsRoleModalOpen] = (0,
|
|
5164
|
-
const
|
|
5165
|
-
const
|
|
5166
|
-
const [
|
|
5167
|
-
const [
|
|
5168
|
-
const [
|
|
5169
|
-
const [slugAvailable, setSlugAvailable] = (0, import_react83.useState)(null);
|
|
5170
|
-
const [isSavingAccount, setIsSavingAccount] = (0, import_react83.useState)(false);
|
|
5200
|
+
const [expandedId, setExpandedId] = (0, import_react85.useState)(null);
|
|
5201
|
+
const [memberToRemove, setMemberToRemove] = (0, import_react85.useState)(null);
|
|
5202
|
+
const [isRemoving, setIsRemoving] = (0, import_react85.useState)(false);
|
|
5203
|
+
const [isInviteMode, setIsInviteMode] = (0, import_react85.useState)(false);
|
|
5204
|
+
const [inviteEmail, setInviteEmail] = (0, import_react85.useState)("");
|
|
5205
|
+
const [isInviting, setIsInviting] = (0, import_react85.useState)(false);
|
|
5206
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react85.useState)(membersSearchQuery);
|
|
5207
|
+
const [isTyping, setIsTyping] = (0, import_react85.useState)(false);
|
|
5208
|
+
const isFirstSearchMount = (0, import_react85.useRef)(true);
|
|
5209
|
+
const [isStatusModalOpen, setIsStatusModalOpen] = (0, import_react85.useState)(false);
|
|
5210
|
+
const [isRoleModalOpen, setIsRoleModalOpen] = (0, import_react85.useState)(false);
|
|
5211
|
+
const [displayName, setDisplayName] = (0, import_react85.useState)(initialDisplayName);
|
|
5212
|
+
const [slug, setSlug] = (0, import_react85.useState)(initialSlug);
|
|
5213
|
+
const [isCheckingSlug, setIsCheckingSlug] = (0, import_react85.useState)(false);
|
|
5214
|
+
const [slugAvailable, setSlugAvailable] = (0, import_react85.useState)(null);
|
|
5215
|
+
const [isSavingAccount, setIsSavingAccount] = (0, import_react85.useState)(false);
|
|
5171
5216
|
const isAccountReadOnly = accountType === "ORGANIZATION" && userRole !== "ADMIN" && userRole !== "MANAGER";
|
|
5172
5217
|
const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
|
|
5173
|
-
(0,
|
|
5174
|
-
function handleClickOutside(event) {
|
|
5175
|
-
if (statusDropdownRef.current && !statusDropdownRef.current.contains(event.target)) setIsStatusModalOpen(false);
|
|
5176
|
-
if (roleDropdownRef.current && !roleDropdownRef.current.contains(event.target)) setIsRoleModalOpen(false);
|
|
5177
|
-
}
|
|
5178
|
-
document.addEventListener("mousedown", handleClickOutside);
|
|
5179
|
-
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
5180
|
-
}, []);
|
|
5181
|
-
(0, import_react83.useEffect)(() => {
|
|
5218
|
+
(0, import_react85.useEffect)(() => {
|
|
5182
5219
|
if (activeTab !== "MEMBERS") return;
|
|
5183
5220
|
if (isFirstSearchMount.current) {
|
|
5184
5221
|
isFirstSearchMount.current = false;
|
|
@@ -5220,13 +5257,13 @@ var UniversalSettings = ({
|
|
|
5220
5257
|
}
|
|
5221
5258
|
};
|
|
5222
5259
|
const activeExpandedMember = expandedId ? members.find((m) => m.id === expandedId) : null;
|
|
5223
|
-
(0,
|
|
5260
|
+
(0, import_react85.useEffect)(() => {
|
|
5224
5261
|
setDisplayName(initialDisplayName || "");
|
|
5225
5262
|
setSlug(initialSlug || "");
|
|
5226
5263
|
}, [initialDisplayName, initialSlug]);
|
|
5227
5264
|
const handleDisplayNameChange = (val) => setDisplayName(val.replace(/[^a-zA-Z0-9\s-]/g, "").substring(0, 50));
|
|
5228
5265
|
const handleSlugChange = (val) => setSlug(val.toLowerCase().replace(/[^a-z0-9-]/g, "").replace(/-+/g, "-").substring(0, 50));
|
|
5229
|
-
(0,
|
|
5266
|
+
(0, import_react85.useEffect)(() => {
|
|
5230
5267
|
if (!slug || slug === initialSlug) {
|
|
5231
5268
|
setSlugAvailable(null);
|
|
5232
5269
|
setIsCheckingSlug(false);
|
|
@@ -5280,7 +5317,7 @@ var UniversalSettings = ({
|
|
|
5280
5317
|
};
|
|
5281
5318
|
const hasAccountChanges = displayName !== initialDisplayName || slug !== initialSlug;
|
|
5282
5319
|
const isAccountSaveDisabled = isSavingAccount || isAccountReadOnly || isCheckingSlug || !hasAccountChanges || displayName.length < 3 || slug.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
5283
|
-
return /* @__PURE__ */
|
|
5320
|
+
return /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react85.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-[#068afe] hover:text-[#068afe] transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react85.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "System Settings"), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your workspace identity, team configurations, and AI billing parameters.")), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-6 mb-6 overflow-x-auto custom-scrollbar px-1" }, accountType === "ORGANIZATION" && /* @__PURE__ */ import_react85.default.createElement(
|
|
5284
5321
|
"button",
|
|
5285
5322
|
{
|
|
5286
5323
|
onClick: () => {
|
|
@@ -5291,21 +5328,21 @@ var UniversalSettings = ({
|
|
|
5291
5328
|
className: `pb-3 text-[13px] 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"}`
|
|
5292
5329
|
},
|
|
5293
5330
|
"Members"
|
|
5294
|
-
), /* @__PURE__ */
|
|
5331
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5295
5332
|
"button",
|
|
5296
5333
|
{
|
|
5297
5334
|
onClick: () => setActiveTab("ACCOUNT"),
|
|
5298
5335
|
className: `pb-3 text-[13px] 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"}`
|
|
5299
5336
|
},
|
|
5300
5337
|
"Account Profile"
|
|
5301
|
-
), /* @__PURE__ */
|
|
5338
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5302
5339
|
"button",
|
|
5303
5340
|
{
|
|
5304
5341
|
onClick: () => setActiveTab("BILLING"),
|
|
5305
5342
|
className: `pb-3 text-[13px] tracking-wide outline-none transition-colors border-b-2 whitespace-nowrap ${activeTab === "BILLING" ? "border-black text-black" : "border-transparent text-neutral-500 hover:text-black"}`
|
|
5306
5343
|
},
|
|
5307
5344
|
"Billing"
|
|
5308
|
-
)), activeTab === "MEMBERS" && accountType === "ORGANIZATION" && /* @__PURE__ */
|
|
5345
|
+
)), activeTab === "MEMBERS" && accountType === "ORGANIZATION" && /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5309
5346
|
ConfirmationDialog,
|
|
5310
5347
|
{
|
|
5311
5348
|
isOpen: !!memberToRemove,
|
|
@@ -5318,7 +5355,7 @@ var UniversalSettings = ({
|
|
|
5318
5355
|
onClose: () => setMemberToRemove(null),
|
|
5319
5356
|
onConfirm: handleConfirmRemove
|
|
5320
5357
|
}
|
|
5321
|
-
), !isInviteMode && !activeExpandedMember && /* @__PURE__ */
|
|
5358
|
+
), !isInviteMode && !activeExpandedMember && /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-row flex-nowrap mb-4 items-center justify-between gap-4 w-full px-1" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react85.default.createElement(
|
|
5322
5359
|
"input",
|
|
5323
5360
|
{
|
|
5324
5361
|
type: "text",
|
|
@@ -5327,28 +5364,28 @@ var UniversalSettings = ({
|
|
|
5327
5364
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
5328
5365
|
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black placeholder-neutral-400 outline-none transition-colors focus:border-black"
|
|
5329
5366
|
}
|
|
5330
|
-
)), /* @__PURE__ */
|
|
5367
|
+
)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5331
5368
|
"button",
|
|
5332
5369
|
{
|
|
5333
5370
|
onClick: () => setIsStatusModalOpen(true),
|
|
5334
5371
|
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
5335
5372
|
},
|
|
5336
|
-
/* @__PURE__ */
|
|
5337
|
-
), /* @__PURE__ */
|
|
5373
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.SearchList02Icon, size: 16 })
|
|
5374
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5338
5375
|
"button",
|
|
5339
5376
|
{
|
|
5340
5377
|
onClick: () => setIsRoleModalOpen(true),
|
|
5341
5378
|
className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none"
|
|
5342
5379
|
},
|
|
5343
|
-
/* @__PURE__ */
|
|
5344
|
-
))), /* @__PURE__ */
|
|
5380
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.ListSettingIcon, size: 16 })
|
|
5381
|
+
))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, activeExpandedMember ? /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col animate-in fade-in zoom-in-95 duration-300 w-full" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-1 mb-8" }, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, "Member Profile"), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[12px] text-neutral-500" }, "View and manage this member's access privileges.")), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-4 mb-8" }, /* @__PURE__ */ import_react85.default.createElement(MemberAvatar2, { src: activeExpandedMember.avatarUrl, status: activeExpandedMember.status, sizeClass: "w-14 h-14" }), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-sm text-black tracking-tight truncate" }, activeExpandedMember.fullName), /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[12px] text-neutral-500 capitalize" }, activeExpandedMember.role.toLowerCase()))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col sm:flex-row gap-3 pt-6 " }, !isAccountReadOnly && /* @__PURE__ */ import_react85.default.createElement(
|
|
5345
5382
|
"button",
|
|
5346
5383
|
{
|
|
5347
5384
|
onClick: () => setMemberToRemove(activeExpandedMember),
|
|
5348
5385
|
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"
|
|
5349
5386
|
},
|
|
5350
5387
|
"Remove Access"
|
|
5351
|
-
), /* @__PURE__ */
|
|
5388
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5352
5389
|
"button",
|
|
5353
5390
|
{
|
|
5354
5391
|
onClick: () => setExpandedId(null),
|
|
@@ -5357,14 +5394,14 @@ var UniversalSettings = ({
|
|
|
5357
5394
|
"Close Profile"
|
|
5358
5395
|
))) : (
|
|
5359
5396
|
// Standard List & Invite Header
|
|
5360
|
-
/* @__PURE__ */
|
|
5397
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react85.default.Fragment, null, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-row items-center justify-between gap-4" }, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-black text-xl tracking-tight" }, isInviteMode ? "Add Member" : "Team Directory"), !isInviteMode && !isAccountReadOnly && /* @__PURE__ */ import_react85.default.createElement(
|
|
5361
5398
|
"button",
|
|
5362
5399
|
{
|
|
5363
5400
|
onClick: () => setIsInviteMode(true),
|
|
5364
5401
|
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"
|
|
5365
5402
|
},
|
|
5366
5403
|
"Invite Team"
|
|
5367
|
-
)), !isInviteMode && /* @__PURE__ */
|
|
5404
|
+
)), !isInviteMode && /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[12px] text-neutral-500" }, "Manage members and access controls across your organization.")), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-full overflow-hidden" }, isInviteMode ? /* @__PURE__ */ import_react85.default.createElement("form", { onSubmit: handleInviteSubmit, className: "flex flex-col gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react85.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Email Address"), /* @__PURE__ */ import_react85.default.createElement(
|
|
5368
5405
|
"input",
|
|
5369
5406
|
{
|
|
5370
5407
|
type: "email",
|
|
@@ -5375,7 +5412,7 @@ var UniversalSettings = ({
|
|
|
5375
5412
|
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",
|
|
5376
5413
|
placeholder: "name@company.com"
|
|
5377
5414
|
}
|
|
5378
|
-
)), /* @__PURE__ */
|
|
5415
|
+
)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5379
5416
|
ThreeDActionButton,
|
|
5380
5417
|
{
|
|
5381
5418
|
type: "submit",
|
|
@@ -5384,7 +5421,7 @@ var UniversalSettings = ({
|
|
|
5384
5421
|
className: "w-full"
|
|
5385
5422
|
},
|
|
5386
5423
|
"Send Invitation"
|
|
5387
|
-
), /* @__PURE__ */
|
|
5424
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5388
5425
|
"button",
|
|
5389
5426
|
{
|
|
5390
5427
|
type: "button",
|
|
@@ -5396,54 +5433,52 @@ var UniversalSettings = ({
|
|
|
5396
5433
|
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"
|
|
5397
5434
|
},
|
|
5398
5435
|
"Cancel"
|
|
5399
|
-
))) : isMembersLoading || isTyping ? /* @__PURE__ */
|
|
5436
|
+
))) : isMembersLoading || isTyping ? /* @__PURE__ */ import_react85.default.createElement(PageSpinner8, null) : /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col min-w-0 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement("div", null, members.length === 0 ? /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[12px] text-neutral-400 py-6 text-center" }, "No members found") : members.map((member) => /* @__PURE__ */ import_react85.default.createElement(
|
|
5400
5437
|
"div",
|
|
5401
5438
|
{
|
|
5402
5439
|
key: member.id,
|
|
5403
5440
|
onClick: () => setExpandedId(member.id),
|
|
5404
5441
|
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"
|
|
5405
5442
|
},
|
|
5406
|
-
/* @__PURE__ */
|
|
5407
|
-
))), /* @__PURE__ */
|
|
5443
|
+
/* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react85.default.createElement(MemberAvatar2, { src: member.avatarUrl, status: member.status }), /* @__PURE__ */ import_react85.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-0.5" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-black truncate" }, member.fullName), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[11px] text-neutral-500 capitalize truncate" }, member.role.toLowerCase())))
|
|
5444
|
+
))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2 " }, /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5408
5445
|
"button",
|
|
5409
5446
|
{
|
|
5410
5447
|
onClick: () => onMembersPageChange(membersCurrentPage - 1),
|
|
5411
5448
|
disabled: membersCurrentPage <= 1 || isMembersLoading,
|
|
5412
5449
|
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"
|
|
5413
5450
|
},
|
|
5414
|
-
/* @__PURE__ */
|
|
5415
|
-
), /* @__PURE__ */
|
|
5451
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.ArrowLeft01Icon, size: 14 })
|
|
5452
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5416
5453
|
"button",
|
|
5417
5454
|
{
|
|
5418
5455
|
onClick: () => onMembersPageChange(membersCurrentPage + 1),
|
|
5419
5456
|
disabled: membersCurrentPage >= membersTotalPages || isMembersLoading || membersTotalPages === 0,
|
|
5420
5457
|
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"
|
|
5421
5458
|
},
|
|
5422
|
-
/* @__PURE__ */
|
|
5459
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.ArrowRight01Icon, size: 14 })
|
|
5423
5460
|
))))))
|
|
5424
|
-
)),
|
|
5425
|
-
|
|
5426
|
-
{
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5433
|
-
}
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
/* @__PURE__ */ import_react83.default.createElement("span", { className: "truncate pr-2 capitalize" }, option.toLowerCase())
|
|
5446
|
-
))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "w-full flex mt-2" }, /* @__PURE__ */ import_react83.default.createElement("button", { onClick: () => setIsRoleModalOpen(false), className: "w-full py-4 text-[13px] text-[#068afe] hover:text-[#068afe] transition-colors outline-none" }, "Cancel"))))), activeTab === "ACCOUNT" && /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your workspace identifiers and structural configuration details.")), isAccountReadOnly && /* @__PURE__ */ import_react83.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react83.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSaveAccount, autoComplete: "off" }, /* @__PURE__ */ import_react83.default.createElement(
|
|
5461
|
+
)), /* @__PURE__ */ import_react85.default.createElement(
|
|
5462
|
+
ReusableOptions,
|
|
5463
|
+
{
|
|
5464
|
+
isOpen: isStatusModalOpen,
|
|
5465
|
+
onClose: () => setIsStatusModalOpen(false),
|
|
5466
|
+
title: "Status Filter",
|
|
5467
|
+
options: ["ALL", "ACTIVE", "BUSY", "OFFLINE", "AWAY"],
|
|
5468
|
+
selectedOption: activeStatusFilter,
|
|
5469
|
+
onSelect: (status) => onStatusFilterChange(status)
|
|
5470
|
+
}
|
|
5471
|
+
), /* @__PURE__ */ import_react85.default.createElement(
|
|
5472
|
+
ReusableOptions,
|
|
5473
|
+
{
|
|
5474
|
+
isOpen: isRoleModalOpen,
|
|
5475
|
+
onClose: () => setIsRoleModalOpen(false),
|
|
5476
|
+
title: "Role Filter",
|
|
5477
|
+
options: ["ALL", "ADMIN", "MANAGER", "MEMBER", "GUEST"],
|
|
5478
|
+
selectedOption: activeRoleFilter,
|
|
5479
|
+
onSelect: (role) => onRoleFilterChange(role)
|
|
5480
|
+
}
|
|
5481
|
+
)), activeTab === "ACCOUNT" && /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react85.default.createElement("div", null, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your workspace identifiers and structural configuration details.")), isAccountReadOnly && /* @__PURE__ */ import_react85.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react85.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSaveAccount, autoComplete: "off" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5447
5482
|
TextInput,
|
|
5448
5483
|
{
|
|
5449
5484
|
label: "Display Name",
|
|
@@ -5453,7 +5488,7 @@ var UniversalSettings = ({
|
|
|
5453
5488
|
placeholder: "Sovereign User",
|
|
5454
5489
|
maxLength: 50
|
|
5455
5490
|
}
|
|
5456
|
-
), accountType === "ORGANIZATION" && /* @__PURE__ */
|
|
5491
|
+
), accountType === "ORGANIZATION" && /* @__PURE__ */ import_react85.default.createElement("div", { className: "space-y-1.5 relative w-full" }, /* @__PURE__ */ import_react85.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Workspace Handle"), /* @__PURE__ */ import_react85.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_react85.default.createElement(
|
|
5457
5492
|
"input",
|
|
5458
5493
|
{
|
|
5459
5494
|
type: "text",
|
|
@@ -5465,7 +5500,7 @@ var UniversalSettings = ({
|
|
|
5465
5500
|
className: "w-full pr-10 pl-0 py-3 text-sm bg-transparent text-black outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
5466
5501
|
placeholder: "workspace-handle"
|
|
5467
5502
|
}
|
|
5468
|
-
), /* @__PURE__ */
|
|
5503
|
+
), /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react85.default.createElement(InputSpinner3, null), !isCheckingSlug && !isAccountReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react85.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ import_react85.default.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react85.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 && !isAccountReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === true && /* @__PURE__ */ import_react85.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react85.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react85.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_react85.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
5469
5504
|
ThreeDActionButton,
|
|
5470
5505
|
{
|
|
5471
5506
|
type: "submit",
|
|
@@ -5474,7 +5509,7 @@ var UniversalSettings = ({
|
|
|
5474
5509
|
className: "min-w-32"
|
|
5475
5510
|
},
|
|
5476
5511
|
"Save Changes"
|
|
5477
|
-
), hasAccountChanges && !isSavingAccount && !isAccountReadOnly && /* @__PURE__ */
|
|
5512
|
+
), hasAccountChanges && !isSavingAccount && !isAccountReadOnly && /* @__PURE__ */ import_react85.default.createElement(
|
|
5478
5513
|
"button",
|
|
5479
5514
|
{
|
|
5480
5515
|
type: "button",
|
|
@@ -5485,14 +5520,388 @@ var UniversalSettings = ({
|
|
|
5485
5520
|
className: "text-[11px] tracking-widest text-neutral-400 hover:text-black transition-colors outline-none"
|
|
5486
5521
|
},
|
|
5487
5522
|
"Cancel"
|
|
5488
|
-
))))), activeTab === "BILLING" && /* @__PURE__ */
|
|
5523
|
+
))))), activeTab === "BILLING" && /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-[#ffffff] rounded-3xl p-6 relative overflow-hidden flex flex-row items-center justify-between w-full mt-2" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "relative z-10 flex flex-col items-start" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[11px] text-black leading-tight mb-1" }, /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-black/60" }, "AI Credits Balance")), isBillingLoading ? /* @__PURE__ */ import_react85.default.createElement("div", { className: "h-8 w-32 bg-black/10 animate-pulse rounded mt-2" }) : /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-2 mt-1" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Coins01Icon, size: 24, className: "text-black" }), /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-2xl text-black tracking-tight" }, aiCredits))), /* @__PURE__ */ import_react85.default.createElement(
|
|
5489
5524
|
"button",
|
|
5490
5525
|
{
|
|
5491
5526
|
onClick: onTopUp,
|
|
5492
|
-
className: "
|
|
5527
|
+
className: "w-10 h-10 rounded-full border border-neutral-200 flex items-center justify-center text-black hover:bg-neutral-50 transition-colors outline-none shrink-0",
|
|
5528
|
+
"aria-label": "Top Up Credits"
|
|
5529
|
+
},
|
|
5530
|
+
/* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.PlusSignIcon, size: 16 })
|
|
5531
|
+
)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mt-4 px-1" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-relaxed max-w-lg" }, "AI credits are consumed when generating intelligent summaries, transcriptions, and automated huddle insights. Additional credits are billed dynamically to your primary payment method."))));
|
|
5532
|
+
};
|
|
5533
|
+
|
|
5534
|
+
// src/components/UniversalCreateHuddle.tsx
|
|
5535
|
+
var import_react89 = __toESM(require("react"));
|
|
5536
|
+
var import_react_hot_toast16 = __toESM(require("react-hot-toast"));
|
|
5537
|
+
var import_react90 = require("@hugeicons/react");
|
|
5538
|
+
var import_core_free_icons33 = require("@hugeicons/core-free-icons");
|
|
5539
|
+
|
|
5540
|
+
// src/components/CalendarPicker.tsx
|
|
5541
|
+
var import_react87 = __toESM(require("react"));
|
|
5542
|
+
var import_react88 = require("@hugeicons/react");
|
|
5543
|
+
var import_core_free_icons32 = require("@hugeicons/core-free-icons");
|
|
5544
|
+
var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
5545
|
+
var DAYS_OF_WEEK = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
|
|
5546
|
+
var CalendarPicker = ({
|
|
5547
|
+
isOpen,
|
|
5548
|
+
onClose,
|
|
5549
|
+
initialDate,
|
|
5550
|
+
defaultMode,
|
|
5551
|
+
onConfirm
|
|
5552
|
+
}) => {
|
|
5553
|
+
const [mode, setMode] = (0, import_react87.useState)(defaultMode);
|
|
5554
|
+
const today = /* @__PURE__ */ new Date();
|
|
5555
|
+
today.setHours(0, 0, 0, 0);
|
|
5556
|
+
const maxDate = new Date(today.getFullYear() + 1, 11, 31);
|
|
5557
|
+
maxDate.setHours(23, 59, 59, 999);
|
|
5558
|
+
const [viewMonth, setViewMonth] = (0, import_react87.useState)(initialDate.getMonth());
|
|
5559
|
+
const [viewYear, setViewYear] = (0, import_react87.useState)(initialDate.getFullYear());
|
|
5560
|
+
const [selectedDate, setSelectedDate] = (0, import_react87.useState)(new Date(initialDate.getFullYear(), initialDate.getMonth(), initialDate.getDate()));
|
|
5561
|
+
const [hour, setHour] = (0, import_react87.useState)(initialDate.getHours() % 12 || 12);
|
|
5562
|
+
const [minute, setMinute] = (0, import_react87.useState)(initialDate.getMinutes());
|
|
5563
|
+
const [ampm, setAmpm] = (0, import_react87.useState)(initialDate.getHours() >= 12 ? "PM" : "AM");
|
|
5564
|
+
(0, import_react87.useEffect)(() => {
|
|
5565
|
+
if (isOpen) {
|
|
5566
|
+
setMode(defaultMode);
|
|
5567
|
+
setViewMonth(initialDate.getMonth());
|
|
5568
|
+
setViewYear(initialDate.getFullYear());
|
|
5569
|
+
setSelectedDate(new Date(initialDate.getFullYear(), initialDate.getMonth(), initialDate.getDate()));
|
|
5570
|
+
setHour(initialDate.getHours() % 12 || 12);
|
|
5571
|
+
setMinute(initialDate.getMinutes());
|
|
5572
|
+
setAmpm(initialDate.getHours() >= 12 ? "PM" : "AM");
|
|
5573
|
+
}
|
|
5574
|
+
}, [isOpen, initialDate, defaultMode]);
|
|
5575
|
+
if (!isOpen) return null;
|
|
5576
|
+
const handlePrevMonth = () => {
|
|
5577
|
+
if (viewYear === today.getFullYear() && viewMonth === today.getMonth()) return;
|
|
5578
|
+
if (viewMonth === 0) {
|
|
5579
|
+
setViewMonth(11);
|
|
5580
|
+
setViewYear((y) => y - 1);
|
|
5581
|
+
} else {
|
|
5582
|
+
setViewMonth((m) => m - 1);
|
|
5583
|
+
}
|
|
5584
|
+
};
|
|
5585
|
+
const handleNextMonth = () => {
|
|
5586
|
+
if (viewYear === maxDate.getFullYear() && viewMonth === 11) return;
|
|
5587
|
+
if (viewMonth === 11) {
|
|
5588
|
+
setViewMonth(0);
|
|
5589
|
+
setViewYear((y) => y + 1);
|
|
5590
|
+
} else {
|
|
5591
|
+
setViewMonth((m) => m + 1);
|
|
5592
|
+
}
|
|
5593
|
+
};
|
|
5594
|
+
const isDateDisabled = (year, month, day) => {
|
|
5595
|
+
const d = new Date(year, month, day);
|
|
5596
|
+
return d < today || d > maxDate;
|
|
5597
|
+
};
|
|
5598
|
+
const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();
|
|
5599
|
+
const firstDayOffset = new Date(viewYear, viewMonth, 1).getDay();
|
|
5600
|
+
const adjustTime = (type, dir) => {
|
|
5601
|
+
if (type === "H") {
|
|
5602
|
+
setHour((h) => {
|
|
5603
|
+
let next = h + dir;
|
|
5604
|
+
if (next > 12) return 1;
|
|
5605
|
+
if (next < 1) return 12;
|
|
5606
|
+
return next;
|
|
5607
|
+
});
|
|
5608
|
+
}
|
|
5609
|
+
if (type === "M") {
|
|
5610
|
+
setMinute((m) => {
|
|
5611
|
+
let next = m + dir;
|
|
5612
|
+
if (next > 59) return 0;
|
|
5613
|
+
if (next < 0) return 59;
|
|
5614
|
+
return next;
|
|
5615
|
+
});
|
|
5616
|
+
}
|
|
5617
|
+
if (type === "A") {
|
|
5618
|
+
setAmpm((a) => a === "AM" ? "PM" : "AM");
|
|
5619
|
+
}
|
|
5620
|
+
};
|
|
5621
|
+
const handleSave = () => {
|
|
5622
|
+
const final = new Date(selectedDate);
|
|
5623
|
+
let h24 = hour;
|
|
5624
|
+
if (ampm === "PM" && hour < 12) h24 += 12;
|
|
5625
|
+
if (ampm === "AM" && hour === 12) h24 = 0;
|
|
5626
|
+
final.setHours(h24, minute, 0, 0);
|
|
5627
|
+
onConfirm(final);
|
|
5628
|
+
onClose();
|
|
5629
|
+
};
|
|
5630
|
+
return /* @__PURE__ */ import_react87.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: onClose }), /* @__PURE__ */ import_react87.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "p-4 pb-0 flex flex-col gap-4" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center justify-between shrink-0" }, /* @__PURE__ */ import_react87.default.createElement("h3", { className: "text-[15px] text-black tracking-tight " }, "Select Date & Time"), /* @__PURE__ */ import_react87.default.createElement("button", { onClick: onClose, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ import_react87.default.createElement(
|
|
5631
|
+
"button",
|
|
5632
|
+
{
|
|
5633
|
+
onClick: () => setMode("DATE"),
|
|
5634
|
+
className: `pb-2 text-[12px] tracking-wide outline-none border-b-2 transition-colors ${mode === "DATE" ? "border-[#068afe] text-[#068afe]" : "border-transparent text-neutral-500 hover:text-black"}`
|
|
5635
|
+
},
|
|
5636
|
+
"Date"
|
|
5637
|
+
), /* @__PURE__ */ import_react87.default.createElement(
|
|
5638
|
+
"button",
|
|
5639
|
+
{
|
|
5640
|
+
onClick: () => setMode("TIME"),
|
|
5641
|
+
className: `pb-2 text-[12px] tracking-wide outline-none border-b-2 transition-colors ${mode === "TIME" ? "border-[#068afe] text-[#068afe]" : "border-transparent text-neutral-500 hover:text-black"}`
|
|
5642
|
+
},
|
|
5643
|
+
"Time"
|
|
5644
|
+
))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "p-5" }, mode === "DATE" && /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col gap-4 animate-in fade-in duration-200" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center justify-between px-2" }, /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-[13px] text-black" }, MONTHS[viewMonth], " ", viewYear), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ import_react87.default.createElement(
|
|
5645
|
+
"button",
|
|
5646
|
+
{
|
|
5647
|
+
onClick: handlePrevMonth,
|
|
5648
|
+
disabled: viewYear === today.getFullYear() && viewMonth === today.getMonth(),
|
|
5649
|
+
className: "w-8 h-8 flex items-center justify-center rounded-full hover:bg-neutral-100 disabled:opacity-30 disabled:cursor-not-allowed outline-none transition-colors"
|
|
5650
|
+
},
|
|
5651
|
+
/* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowLeft01Icon, size: 16, className: "text-black" })
|
|
5652
|
+
), /* @__PURE__ */ import_react87.default.createElement(
|
|
5653
|
+
"button",
|
|
5654
|
+
{
|
|
5655
|
+
onClick: handleNextMonth,
|
|
5656
|
+
disabled: viewYear === maxDate.getFullYear() && viewMonth === 11,
|
|
5657
|
+
className: "w-8 h-8 flex items-center justify-center rounded-full hover:bg-neutral-100 disabled:opacity-30 disabled:cursor-not-allowed outline-none transition-colors"
|
|
5658
|
+
},
|
|
5659
|
+
/* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowRight01Icon, size: 16, className: "text-black" })
|
|
5660
|
+
))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "grid grid-cols-7 gap-1" }, DAYS_OF_WEEK.map((d) => /* @__PURE__ */ import_react87.default.createElement("div", { key: d, className: "text-center text-[10px] text-neutral-400 py-2" }, d)), Array.from({ length: firstDayOffset }).map((_, i) => /* @__PURE__ */ import_react87.default.createElement("div", { key: `empty-${i}` })), Array.from({ length: daysInMonth }).map((_, i) => {
|
|
5661
|
+
const day = i + 1;
|
|
5662
|
+
const isDisabled = isDateDisabled(viewYear, viewMonth, day);
|
|
5663
|
+
const isSelected = selectedDate.getFullYear() === viewYear && selectedDate.getMonth() === viewMonth && selectedDate.getDate() === day;
|
|
5664
|
+
return /* @__PURE__ */ import_react87.default.createElement(
|
|
5665
|
+
"button",
|
|
5666
|
+
{
|
|
5667
|
+
key: day,
|
|
5668
|
+
disabled: isDisabled,
|
|
5669
|
+
onClick: () => setSelectedDate(new Date(viewYear, viewMonth, day)),
|
|
5670
|
+
className: `h-9 w-9 rounded-full flex items-center justify-center text-[12px] transition-colors outline-none
|
|
5671
|
+
${isDisabled ? "text-neutral-300 cursor-not-allowed" : isSelected ? "bg-[#068afe] text-white" : "text-black hover:bg-neutral-100"}`
|
|
5672
|
+
},
|
|
5673
|
+
day
|
|
5674
|
+
);
|
|
5675
|
+
}))), mode === "TIME" && /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center justify-center gap-6 py-6 animate-in fade-in duration-200" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("H", 1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowUp01Icon, size: 20, className: "text-neutral-500" })), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-3xl text-black w-12 text-center" }, hour.toString().padStart(2, "0")), /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("H", -1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowDown01Icon, size: 20, className: "text-neutral-500" }))), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-3xl text-neutral-300 pb-2" }, ":"), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("M", 1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowUp01Icon, size: 20, className: "text-neutral-500" })), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-3xl text-black w-12 text-center" }, minute.toString().padStart(2, "0")), /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("M", -1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowDown01Icon, size: 20, className: "text-neutral-500" }))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col items-center gap-4 ml-2" }, /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("A", 1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowUp01Icon, size: 20, className: "text-neutral-500" })), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-xl text-[#068afe] w-12 text-center" }, ampm), /* @__PURE__ */ import_react87.default.createElement("button", { onClick: () => adjustTime("A", -1), className: "p-2 rounded-full hover:bg-neutral-100 outline-none" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.ArrowDown01Icon, size: 20, className: "text-neutral-500" }))))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "p-5 flex justify-end shrink-0" }, /* @__PURE__ */ import_react87.default.createElement(
|
|
5676
|
+
"button",
|
|
5677
|
+
{
|
|
5678
|
+
onClick: handleSave,
|
|
5679
|
+
className: "text-[#068afe] hover:text-[#0573d6] transition-colors outline-none text-[13px] tracking-wide"
|
|
5493
5680
|
},
|
|
5494
|
-
"
|
|
5495
|
-
))))
|
|
5681
|
+
"Done"
|
|
5682
|
+
))));
|
|
5683
|
+
};
|
|
5684
|
+
|
|
5685
|
+
// src/components/UniversalCreateHuddle.tsx
|
|
5686
|
+
var MemberAvatar3 = ({ src, sizeClass = "w-10 h-10" }) => {
|
|
5687
|
+
const [loaded, setLoaded] = (0, import_react89.useState)(false);
|
|
5688
|
+
const [error, setError] = (0, import_react89.useState)(false);
|
|
5689
|
+
const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
|
|
5690
|
+
return /* @__PURE__ */ import_react89.default.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ import_react89.default.createElement(
|
|
5691
|
+
"img",
|
|
5692
|
+
{
|
|
5693
|
+
src: error || !src ? defaultAvatar : src,
|
|
5694
|
+
alt: "Avatar",
|
|
5695
|
+
className: `w-full h-full object-cover transition-opacity duration-300 ${loaded || error ? "opacity-100" : "opacity-0"}`,
|
|
5696
|
+
onLoad: () => setLoaded(true),
|
|
5697
|
+
onError: () => setError(true)
|
|
5698
|
+
}
|
|
5699
|
+
)));
|
|
5700
|
+
};
|
|
5701
|
+
var STANDARD_TIMEZONES = [
|
|
5702
|
+
"UTC",
|
|
5703
|
+
"America/New_York",
|
|
5704
|
+
"America/Chicago",
|
|
5705
|
+
"America/Denver",
|
|
5706
|
+
"America/Los_Angeles",
|
|
5707
|
+
"Europe/London",
|
|
5708
|
+
"Europe/Paris",
|
|
5709
|
+
"Europe/Berlin",
|
|
5710
|
+
"Africa/Lagos",
|
|
5711
|
+
"Africa/Johannesburg",
|
|
5712
|
+
"Asia/Dubai",
|
|
5713
|
+
"Asia/Kolkata",
|
|
5714
|
+
"Asia/Singapore",
|
|
5715
|
+
"Asia/Tokyo",
|
|
5716
|
+
"Australia/Sydney"
|
|
5717
|
+
];
|
|
5718
|
+
var UniversalCreateHuddle = ({
|
|
5719
|
+
onBackHref,
|
|
5720
|
+
members,
|
|
5721
|
+
isMembersLoading,
|
|
5722
|
+
membersCurrentPage,
|
|
5723
|
+
membersTotalPages,
|
|
5724
|
+
onMembersPageChange,
|
|
5725
|
+
membersSearchQuery,
|
|
5726
|
+
onMembersSearchChange,
|
|
5727
|
+
onCreateSubmit
|
|
5728
|
+
}) => {
|
|
5729
|
+
const [huddleDate, setHuddleDate] = (0, import_react89.useState)(() => {
|
|
5730
|
+
const d = /* @__PURE__ */ new Date();
|
|
5731
|
+
d.setHours(d.getHours() + 1, 0, 0, 0);
|
|
5732
|
+
return d;
|
|
5733
|
+
});
|
|
5734
|
+
const [title, setTitle] = (0, import_react89.useState)("");
|
|
5735
|
+
const [isPrivate, setIsPrivate] = (0, import_react89.useState)(false);
|
|
5736
|
+
const [timezone, setTimezone] = (0, import_react89.useState)("UTC");
|
|
5737
|
+
(0, import_react89.useEffect)(() => {
|
|
5738
|
+
try {
|
|
5739
|
+
setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
5740
|
+
} catch (e) {
|
|
5741
|
+
}
|
|
5742
|
+
}, []);
|
|
5743
|
+
const [calendarMode, setCalendarMode] = (0, import_react89.useState)(null);
|
|
5744
|
+
const [showTimezoneModal, setShowTimezoneModal] = (0, import_react89.useState)(false);
|
|
5745
|
+
const [showMembersModal, setShowMembersModal] = (0, import_react89.useState)(false);
|
|
5746
|
+
const [selectedParticipants, setSelectedParticipants] = (0, import_react89.useState)(/* @__PURE__ */ new Set());
|
|
5747
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react89.useState)(false);
|
|
5748
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react89.useState)(membersSearchQuery);
|
|
5749
|
+
const [isTyping, setIsTyping] = (0, import_react89.useState)(false);
|
|
5750
|
+
const typingTimer = (0, import_react89.useRef)(null);
|
|
5751
|
+
const handleSearchInput = (e) => {
|
|
5752
|
+
const val = e.target.value;
|
|
5753
|
+
setLocalSearchQuery(val);
|
|
5754
|
+
setIsTyping(true);
|
|
5755
|
+
if (typingTimer.current) clearTimeout(typingTimer.current);
|
|
5756
|
+
typingTimer.current = setTimeout(() => {
|
|
5757
|
+
onMembersSearchChange(val);
|
|
5758
|
+
setTimeout(() => setIsTyping(false), 150);
|
|
5759
|
+
}, 600);
|
|
5760
|
+
};
|
|
5761
|
+
const toggleParticipant = (userId) => {
|
|
5762
|
+
const newSet = new Set(selectedParticipants);
|
|
5763
|
+
if (newSet.has(userId)) newSet.delete(userId);
|
|
5764
|
+
else newSet.add(userId);
|
|
5765
|
+
setSelectedParticipants(newSet);
|
|
5766
|
+
};
|
|
5767
|
+
const handleSubmit = async (e) => {
|
|
5768
|
+
e.preventDefault();
|
|
5769
|
+
const cleanTitle = title.trim();
|
|
5770
|
+
if (cleanTitle.length < 2) return import_react_hot_toast16.default.error("Please enter a valid huddle name.");
|
|
5771
|
+
if (isPrivate && selectedParticipants.size === 0) return import_react_hot_toast16.default.error("Private huddles require at least one participant.");
|
|
5772
|
+
setIsSubmitting(true);
|
|
5773
|
+
try {
|
|
5774
|
+
await onCreateSubmit({
|
|
5775
|
+
title: cleanTitle,
|
|
5776
|
+
huddleType: isPrivate ? "PRIVATE" : "PUBLIC",
|
|
5777
|
+
startTime: huddleDate.toISOString(),
|
|
5778
|
+
timezone,
|
|
5779
|
+
participantIds: isPrivate ? Array.from(selectedParticipants) : []
|
|
5780
|
+
});
|
|
5781
|
+
} catch (error) {
|
|
5782
|
+
import_react_hot_toast16.default.error(error.message || "Failed to schedule huddle.");
|
|
5783
|
+
setIsSubmitting(false);
|
|
5784
|
+
}
|
|
5785
|
+
};
|
|
5786
|
+
return /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react89.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react89.default.createElement("div", { className: "mb-6 flex w-full items-center px-1" }, /* @__PURE__ */ import_react89.default.createElement("a", { href: onBackHref, className: "flex items-center gap-2 text-[#068afe] hover:text-[#068afe] transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col gap-1 mb-8 px-1" }, /* @__PURE__ */ import_react89.default.createElement("h1", { className: "text-black text-xl tracking-tight" }, "Create Huddle"), /* @__PURE__ */ import_react89.default.createElement("p", { className: "text-xs text-neutral-500" }, "Schedule a new workspace huddle and manage participant access.")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col gap-8 animate-in rounded-2xl p-6 bg-white fade-in duration-300" }, /* @__PURE__ */ import_react89.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSubmit, autoComplete: "off" }, /* @__PURE__ */ import_react89.default.createElement(
|
|
5787
|
+
TextInput,
|
|
5788
|
+
{
|
|
5789
|
+
label: "Huddle Subject",
|
|
5790
|
+
value: title,
|
|
5791
|
+
onChange: (val) => setTitle(val.substring(0, 80)),
|
|
5792
|
+
disabled: isSubmitting,
|
|
5793
|
+
placeholder: "e.g. Q4 Engineering Sync",
|
|
5794
|
+
maxLength: 80
|
|
5795
|
+
}
|
|
5796
|
+
), /* @__PURE__ */ import_react89.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react89.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Date"), /* @__PURE__ */ import_react89.default.createElement(
|
|
5797
|
+
"div",
|
|
5798
|
+
{
|
|
5799
|
+
onClick: () => !isSubmitting && setCalendarMode("DATE"),
|
|
5800
|
+
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 cursor-pointer ${isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black"}`
|
|
5801
|
+
},
|
|
5802
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Calendar01Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
5803
|
+
/* @__PURE__ */ import_react89.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" }))
|
|
5804
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react89.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Time"), /* @__PURE__ */ import_react89.default.createElement(
|
|
5805
|
+
"div",
|
|
5806
|
+
{
|
|
5807
|
+
onClick: () => !isSubmitting && setCalendarMode("TIME"),
|
|
5808
|
+
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 cursor-pointer ${isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black"}`
|
|
5809
|
+
},
|
|
5810
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Clock01Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
5811
|
+
/* @__PURE__ */ import_react89.default.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, huddleDate.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }))
|
|
5812
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "space-y-1.5 w-full" }, /* @__PURE__ */ import_react89.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block" }, "Timezone"), /* @__PURE__ */ import_react89.default.createElement(
|
|
5813
|
+
"div",
|
|
5814
|
+
{
|
|
5815
|
+
onClick: () => !isSubmitting && setShowTimezoneModal(true),
|
|
5816
|
+
className: `flex items-center relative w-full border-b border-neutral-200 transition-all duration-300 pb-3 pt-3 cursor-pointer ${isSubmitting ? "opacity-50 pointer-events-none" : "hover:border-black"}`
|
|
5817
|
+
},
|
|
5818
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Globe02Icon, size: 16, className: "text-neutral-400 absolute left-0" }),
|
|
5819
|
+
/* @__PURE__ */ import_react89.default.createElement("span", { className: "w-full pl-8 text-sm text-black truncate block" }, timezone)
|
|
5820
|
+
))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-center justify-between py-2 border-t border-b border-neutral-100 mt-2" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[13px] text-black tracking-tight" }, "Private Huddle"), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[11px] text-neutral-500" }, "Only invited members can join.")), /* @__PURE__ */ import_react89.default.createElement(
|
|
5821
|
+
"button",
|
|
5822
|
+
{
|
|
5823
|
+
type: "button",
|
|
5824
|
+
onClick: () => setIsPrivate(!isPrivate),
|
|
5825
|
+
disabled: isSubmitting,
|
|
5826
|
+
className: `relative w-11 h-6 rounded-full transition-colors outline-none shrink-0 ${isPrivate ? "bg-[#068afe]" : "bg-neutral-200"}`
|
|
5827
|
+
},
|
|
5828
|
+
/* @__PURE__ */ import_react89.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"}` })
|
|
5829
|
+
)), isPrivate && /* @__PURE__ */ import_react89.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" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[12px] text-black tracking-tight" }, "Participants"), /* @__PURE__ */ import_react89.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_react89.default.createElement(
|
|
5830
|
+
"button",
|
|
5831
|
+
{
|
|
5832
|
+
type: "button",
|
|
5833
|
+
onClick: () => setShowMembersModal(true),
|
|
5834
|
+
disabled: isSubmitting,
|
|
5835
|
+
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"
|
|
5836
|
+
},
|
|
5837
|
+
"Manage Access"
|
|
5838
|
+
)), /* @__PURE__ */ import_react89.default.createElement("div", { className: "pt-6" }, /* @__PURE__ */ import_react89.default.createElement(
|
|
5839
|
+
ThreeDActionButton,
|
|
5840
|
+
{
|
|
5841
|
+
type: "submit",
|
|
5842
|
+
disabled: isSubmitting || title.trim().length < 2 || isPrivate && selectedParticipants.size === 0,
|
|
5843
|
+
isLoading: isSubmitting,
|
|
5844
|
+
className: "w-full sm:w-auto min-w-40"
|
|
5845
|
+
},
|
|
5846
|
+
"Schedule Huddle"
|
|
5847
|
+
)))), /* @__PURE__ */ import_react89.default.createElement(
|
|
5848
|
+
CalendarPicker,
|
|
5849
|
+
{
|
|
5850
|
+
isOpen: calendarMode !== null,
|
|
5851
|
+
onClose: () => setCalendarMode(null),
|
|
5852
|
+
initialDate: huddleDate,
|
|
5853
|
+
defaultMode: calendarMode || "DATE",
|
|
5854
|
+
onConfirm: (d) => setHuddleDate(d)
|
|
5855
|
+
}
|
|
5856
|
+
), /* @__PURE__ */ import_react89.default.createElement(
|
|
5857
|
+
ReusableOptions,
|
|
5858
|
+
{
|
|
5859
|
+
isOpen: showTimezoneModal,
|
|
5860
|
+
onClose: () => setShowTimezoneModal(false),
|
|
5861
|
+
title: "Select Timezone",
|
|
5862
|
+
options: STANDARD_TIMEZONES,
|
|
5863
|
+
selectedOption: timezone,
|
|
5864
|
+
onSelect: (tz) => setTimezone(tz),
|
|
5865
|
+
showSearch: true
|
|
5866
|
+
}
|
|
5867
|
+
), showMembersModal && /* @__PURE__ */ import_react89.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowMembersModal(false) }), /* @__PURE__ */ import_react89.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_react89.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react89.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Select Participants"), /* @__PURE__ */ import_react89.default.createElement("button", { onClick: () => setShowMembersModal(false), className: "text-[#068afe] hover:text-[#068afe] transition-colors outline-none text-[13px] " }, "Done")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "p-4 shrink-0 " }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react89.default.createElement(
|
|
5868
|
+
"input",
|
|
5869
|
+
{
|
|
5870
|
+
type: "text",
|
|
5871
|
+
placeholder: "Search team...",
|
|
5872
|
+
value: localSearchQuery,
|
|
5873
|
+
onChange: handleSearchInput,
|
|
5874
|
+
className: "w-full pl-10 pr-4 py-2.5 bg-neutral-100 rounded-full text-[13px] text-black placeholder-neutral-400 outline-none focus:bg-neutral-200 transition-colors"
|
|
5875
|
+
}
|
|
5876
|
+
))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2 relative" }, isMembersLoading || isTyping ? /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 28, className: "animate-spin text-black" })) : members.length === 0 ? /* @__PURE__ */ import_react89.default.createElement("div", { className: "p-8 text-center text-xs text-neutral-400" }, "No members found.") : members.map((member) => {
|
|
5877
|
+
const isChecked = selectedParticipants.has(member.userId);
|
|
5878
|
+
return /* @__PURE__ */ import_react89.default.createElement(
|
|
5879
|
+
"div",
|
|
5880
|
+
{
|
|
5881
|
+
key: member.id,
|
|
5882
|
+
onClick: () => toggleParticipant(member.userId),
|
|
5883
|
+
className: "flex items-center justify-between p-3 rounded-xl cursor-pointer hover:bg-neutral-50 transition-colors select-none"
|
|
5884
|
+
},
|
|
5885
|
+
/* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-center gap-3 min-w-0 flex-1" }, /* @__PURE__ */ import_react89.default.createElement(MemberAvatar3, { src: member.avatarUrl, sizeClass: "w-9 h-9" }), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[13px] text-black truncate" }, member.fullName), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[11px] text-neutral-400 capitalize truncate" }, member.role.toLowerCase()))),
|
|
5886
|
+
/* @__PURE__ */ import_react89.default.createElement("div", { className: "shrink-0 pl-3" }, /* @__PURE__ */ import_react89.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_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Tick02Icon, size: 14, className: "text-white" })))
|
|
5887
|
+
);
|
|
5888
|
+
})), /* @__PURE__ */ import_react89.default.createElement("div", { className: "p-4 flex items-center justify-between shrink-0 bg-white" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-widest" }, "Page ", membersCurrentPage, " of ", membersTotalPages === 0 ? 1 : membersTotalPages), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ import_react89.default.createElement(
|
|
5889
|
+
"button",
|
|
5890
|
+
{
|
|
5891
|
+
disabled: membersCurrentPage <= 1 || isMembersLoading,
|
|
5892
|
+
onClick: () => onMembersPageChange(membersCurrentPage - 1),
|
|
5893
|
+
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"
|
|
5894
|
+
},
|
|
5895
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 12 })
|
|
5896
|
+
), /* @__PURE__ */ import_react89.default.createElement(
|
|
5897
|
+
"button",
|
|
5898
|
+
{
|
|
5899
|
+
disabled: membersCurrentPage >= membersTotalPages || membersTotalPages === 0 || isMembersLoading,
|
|
5900
|
+
onClick: () => onMembersPageChange(membersCurrentPage + 1),
|
|
5901
|
+
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"
|
|
5902
|
+
},
|
|
5903
|
+
/* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowRight01Icon, size: 12 })
|
|
5904
|
+
))))));
|
|
5496
5905
|
};
|
|
5497
5906
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5498
5907
|
0 && (module.exports = {
|
|
@@ -5529,6 +5938,7 @@ var UniversalSettings = ({
|
|
|
5529
5938
|
UniversalBuyCryptoPage,
|
|
5530
5939
|
UniversalCardActionPage,
|
|
5531
5940
|
UniversalCardPage,
|
|
5941
|
+
UniversalCreateHuddle,
|
|
5532
5942
|
UniversalErrorView,
|
|
5533
5943
|
UniversalHome2,
|
|
5534
5944
|
UniversalHomeView,
|