@burdenoff/microfe-workspaces 2026.625.2 → 2026.625.4
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/pages/ActivityListPage.js +32 -48
- package/dist/pages/ActivityListPage.js.map +1 -1
- package/dist/pages/MembersListPage.js +196 -241
- package/dist/pages/MembersListPage.js.map +1 -1
- package/dist/pages/PendingInvitesPage.js +69 -78
- package/dist/pages/PendingInvitesPage.js.map +1 -1
- package/dist/pages/ProjectDetailPage.js +37 -52
- package/dist/pages/ProjectDetailPage.js.map +1 -1
- package/dist/pages/ProjectMembersPage.js +74 -87
- package/dist/pages/ProjectMembersPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.js +103 -118
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/WorkspaceDetailPage.js +74 -76
- package/dist/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/pages/WorkspacesListPage.js +167 -178
- package/dist/pages/WorkspacesListPage.js.map +1 -1
- package/dist/pages/dashboard/widgets/AgentsWidget.js +21 -22
- package/dist/pages/dashboard/widgets/AgentsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/ProjectsWidget.js +26 -27
- package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js +19 -23
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/SessionsWidget.js +30 -32
- package/dist/pages/dashboard/widgets/SessionsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +18 -20
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/VibesWidget.js +18 -19
- package/dist/pages/dashboard/widgets/VibesWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WelcomeWidget.js +14 -12
- package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js +20 -21
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,220 +8,220 @@ import { nativeConfirm as ee, nativeImpact as te } from "../utils/nativeBridge.j
|
|
|
8
8
|
import { useWorkspaceInvitations as ne, useWorkspaceMembers as re } from "../hooks/useWorkspaceMembers.js";
|
|
9
9
|
import { useRemoveUserFromWorkspace as ie, useResendInvitation as ae } from "../hooks/useMemberMutations.js";
|
|
10
10
|
import { useWorkspacePermissions as oe } from "../hooks/useWorkspacePermissions.js";
|
|
11
|
-
import { MemberListItem as
|
|
12
|
-
import { useEffect as
|
|
13
|
-
import { AlertCircle as
|
|
14
|
-
import { jsx as
|
|
15
|
-
import { Badge as
|
|
16
|
-
import { useNavigate as
|
|
17
|
-
import { useDebounce as
|
|
11
|
+
import { MemberListItem as o } from "../components/MemberListItem.js";
|
|
12
|
+
import { useEffect as s, useMemo as c, useState as l } from "react";
|
|
13
|
+
import { AlertCircle as se, RefreshCw as ce, Search as le, UserPlus as u, Users as ue } from "lucide-react";
|
|
14
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
15
|
+
import { Badge as p, Button as m, IllustratedEmptyState as h, Input as de, PageContainer as fe, Skeleton as g } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { useNavigate as pe, useParams as me, useSearchParams as he } from "react-router-dom";
|
|
17
|
+
import { useDebounce as ge } from "@burdenoff/fe-libs/shared/hooks";
|
|
18
18
|
import { PermissionButton as _ } from "@burdenoff/fe-libs/shared/components";
|
|
19
|
-
import { useI18n as
|
|
20
|
-
import { useActorProfiles as
|
|
19
|
+
import { useI18n as _e } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
20
|
+
import { useActorProfiles as ve } from "@burdenoff/fe-libs/shared";
|
|
21
21
|
//#region src/pages/MembersListPage.tsx
|
|
22
|
-
function
|
|
23
|
-
let { t:
|
|
22
|
+
function v() {
|
|
23
|
+
let { t: v } = _e(), { memberFilters: ye, setMemberFilters: y, selectedMemberIds: b, toggleMemberSelection: x, clearMemberSelection: S } = t(), C = pe(), { workspaceId: be } = e(), { basePath: w = "/workspaces" } = e(), { withCurrentSearch: T } = n(), { workspaceId: xe } = me(), E = xe || be;
|
|
24
24
|
a("workspaces.members", {
|
|
25
|
-
workspaceId:
|
|
25
|
+
workspaceId: E,
|
|
26
26
|
requireParams: !0
|
|
27
27
|
});
|
|
28
|
-
let [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}, [
|
|
32
|
-
let { data:
|
|
33
|
-
|
|
28
|
+
let [D, Se] = l(ye.search || ""), O = ge(D, 500);
|
|
29
|
+
s(() => {
|
|
30
|
+
y({ search: O });
|
|
31
|
+
}, [O, y]);
|
|
32
|
+
let { data: k, isLoading: Ce, error: A } = re(E || ""), { data: j, isLoading: we } = ne(E || "", "PENDING"), { mutate: M, isPending: N } = ae(), { mutate: Te, isPending: Ee } = ie(), [P, F] = l(null), [I, L] = l(/* @__PURE__ */ new Set()), De = (e) => {
|
|
33
|
+
F(e), M(e, {
|
|
34
34
|
onSuccess: () => {
|
|
35
|
-
|
|
35
|
+
F(null);
|
|
36
36
|
},
|
|
37
37
|
onError: (e) => {
|
|
38
|
-
console.error("Failed to resend invitation:", e),
|
|
38
|
+
console.error("Failed to resend invitation:", e), F(null);
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
-
},
|
|
41
|
+
}, R = c(() => k?.items || [], [k?.items]), z = c(() => j?.items || [], [j?.items]), B = Ce || we, V = R.length > 0, H = z.length > 0, { apiGatewayUrl: Oe, authToken: ke, organizationId: Ae } = e(), je = ve(c(() => R.map((e) => ({
|
|
42
42
|
actorId: e.userId,
|
|
43
43
|
actorType: "user"
|
|
44
|
-
})), [
|
|
45
|
-
apiGatewayUrl:
|
|
46
|
-
authToken:
|
|
47
|
-
orgId:
|
|
48
|
-
workspaceId:
|
|
49
|
-
}),
|
|
50
|
-
if (!
|
|
51
|
-
let t =
|
|
44
|
+
})), [R]), {
|
|
45
|
+
apiGatewayUrl: Oe,
|
|
46
|
+
authToken: ke,
|
|
47
|
+
orgId: Ae,
|
|
48
|
+
workspaceId: E
|
|
49
|
+
}), U = R.filter((e) => {
|
|
50
|
+
if (!O) return !0;
|
|
51
|
+
let t = O.toLowerCase(), n = je[e.userId];
|
|
52
52
|
if (n && (n.displayName.toLowerCase().includes(t) || n.email?.toLowerCase().includes(t))) return !0;
|
|
53
53
|
let r = e.context?.metadata, i = typeof r?.email == "string" ? r.email : "", a = typeof r?.displayName == "string" ? r.displayName : typeof r?.name == "string" ? r.name : "";
|
|
54
54
|
return i.toLowerCase().includes(t) || a.toLowerCase().includes(t) ? !0 : e.userId.toLowerCase().includes(t);
|
|
55
|
-
}),
|
|
56
|
-
|
|
57
|
-
let [
|
|
58
|
-
|
|
59
|
-
if (
|
|
60
|
-
let e = new URLSearchParams(
|
|
61
|
-
e.delete("invite"),
|
|
55
|
+
}), W = c(() => U.filter((e) => b.has(e.id)), [U, b]), G = c(() => z.filter((e) => I.has(e.id)), [z, I]), K = U.length > 0 && U.every((e) => b.has(e.id)), Me = U.some((e) => b.has(e.id)) && !K, q = z.length > 0 && z.every((e) => I.has(e.id)), Ne = z.some((e) => I.has(e.id)) && !q;
|
|
56
|
+
s(() => () => S(), [S]);
|
|
57
|
+
let [J, Y] = he();
|
|
58
|
+
s(() => {
|
|
59
|
+
if (J.get("invite") === "true" && E) {
|
|
60
|
+
let e = new URLSearchParams(J);
|
|
61
|
+
e.delete("invite"), Y(e, { replace: !0 }), C(T(`${w}/${E}/invite`), { replace: !0 });
|
|
62
62
|
}
|
|
63
63
|
}, [
|
|
64
|
+
J,
|
|
64
65
|
Y,
|
|
65
|
-
X,
|
|
66
|
-
D,
|
|
67
|
-
w,
|
|
68
66
|
E,
|
|
69
|
-
|
|
67
|
+
C,
|
|
68
|
+
T,
|
|
69
|
+
w
|
|
70
70
|
]);
|
|
71
|
-
let { canListMembers:
|
|
72
|
-
if (
|
|
71
|
+
let { canListMembers: Pe, canInviteMember: X, canRemoveMember: Z, isLoading: Fe } = oe();
|
|
72
|
+
if (Fe) return /* @__PURE__ */ f("div", {
|
|
73
73
|
className: "space-y-4 p-6",
|
|
74
|
-
children: [/* @__PURE__ */
|
|
74
|
+
children: [/* @__PURE__ */ d(g, { className: "h-10 w-1/3" }), /* @__PURE__ */ d(g, { className: "h-64" })]
|
|
75
75
|
});
|
|
76
|
-
if (!
|
|
76
|
+
if (!Pe && !X) return /* @__PURE__ */ d("div", {
|
|
77
77
|
className: "flex items-center justify-center min-h-[400px]",
|
|
78
|
-
children: /* @__PURE__ */
|
|
78
|
+
children: /* @__PURE__ */ f("div", {
|
|
79
79
|
className: "text-center space-y-2",
|
|
80
|
-
children: [/* @__PURE__ */
|
|
80
|
+
children: [/* @__PURE__ */ d("h2", {
|
|
81
81
|
className: "text-lg font-semibold",
|
|
82
|
-
children: i(
|
|
83
|
-
}), /* @__PURE__ */
|
|
82
|
+
children: i(v, "membersList.accessDenied", "Access Denied")
|
|
83
|
+
}), /* @__PURE__ */ d("p", {
|
|
84
84
|
className: "text-sm text-text-secondary",
|
|
85
|
-
children: i(
|
|
85
|
+
children: i(v, "membersList.noPermissionToViewMembers", "You don't have permission to view workspace members.")
|
|
86
86
|
})]
|
|
87
87
|
})
|
|
88
88
|
});
|
|
89
|
-
let
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
e !==
|
|
89
|
+
let Q = () => {
|
|
90
|
+
E && C(T(`${w}/${E}/invite`));
|
|
91
|
+
}, Ie = (e) => {
|
|
92
|
+
U.forEach((t) => {
|
|
93
|
+
e !== b.has(t.id) && x(t.id);
|
|
94
94
|
});
|
|
95
|
-
},
|
|
96
|
-
|
|
95
|
+
}, $ = (e, t) => {
|
|
96
|
+
L((n) => {
|
|
97
97
|
let r = new Set(n);
|
|
98
98
|
return t ? r.add(e) : r.delete(e), r;
|
|
99
99
|
});
|
|
100
|
-
},
|
|
101
|
-
|
|
100
|
+
}, Le = (e) => {
|
|
101
|
+
L((t) => {
|
|
102
102
|
let n = new Set(t);
|
|
103
|
-
return
|
|
103
|
+
return z.forEach((t) => {
|
|
104
104
|
e ? n.add(t.id) : n.delete(t.id);
|
|
105
105
|
}), n;
|
|
106
106
|
});
|
|
107
|
-
},
|
|
108
|
-
if (
|
|
107
|
+
}, Re = async () => {
|
|
108
|
+
if (W.length === 0) return;
|
|
109
109
|
te("medium");
|
|
110
|
-
let e = `${i(
|
|
110
|
+
let e = `${i(v, "membersList.bulkRemoveConfirmPrefix", "Remove")} ${W.length} ${W.length === 1 ? i(v, "membersList.bulkRemoveConfirmSingular", "selected member") : i(v, "membersList.bulkRemoveConfirmPlural", "selected members")} ${i(v, "membersList.bulkRemoveConfirmSuffix", "from this workspace?")}`, t = await ee({
|
|
111
111
|
title: "Remove members",
|
|
112
112
|
message: e,
|
|
113
113
|
okButtonTitle: "Remove",
|
|
114
114
|
cancelButtonTitle: "Cancel"
|
|
115
115
|
});
|
|
116
|
-
(t === null ? window.confirm(e) : t) && (
|
|
117
|
-
|
|
118
|
-
}),
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
116
|
+
(t === null ? window.confirm(e) : t) && (W.forEach((e) => {
|
|
117
|
+
Te(e.userId);
|
|
118
|
+
}), S());
|
|
119
|
+
}, ze = () => {
|
|
120
|
+
G.length !== 0 && G.forEach((e) => {
|
|
121
|
+
M(e.id, { onSuccess: () => {
|
|
122
|
+
L((t) => {
|
|
123
123
|
let n = new Set(t);
|
|
124
124
|
return n.delete(e.id), n;
|
|
125
125
|
});
|
|
126
126
|
} });
|
|
127
127
|
});
|
|
128
128
|
};
|
|
129
|
-
return /* @__PURE__ */
|
|
129
|
+
return /* @__PURE__ */ d(fe, {
|
|
130
130
|
padded: !1,
|
|
131
|
-
children: /* @__PURE__ */
|
|
131
|
+
children: /* @__PURE__ */ f("div", {
|
|
132
132
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
133
133
|
children: [
|
|
134
|
-
/* @__PURE__ */
|
|
134
|
+
/* @__PURE__ */ f("div", {
|
|
135
135
|
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",
|
|
136
|
-
children: [/* @__PURE__ */
|
|
136
|
+
children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
|
|
137
137
|
className: "text-2xl sm:text-3xl font-bold",
|
|
138
|
-
children: i(
|
|
139
|
-
}), /* @__PURE__ */
|
|
138
|
+
children: i(v, "membersList.pageTitle", "Members")
|
|
139
|
+
}), /* @__PURE__ */ d("p", {
|
|
140
140
|
className: "text-text-secondary text-sm sm:text-base",
|
|
141
|
-
children: i(
|
|
142
|
-
})] }), /* @__PURE__ */
|
|
141
|
+
children: i(v, "membersList.pageSubtitle", "Manage workspace members and invitations")
|
|
142
|
+
})] }), /* @__PURE__ */ d("div", {
|
|
143
143
|
className: "flex gap-2",
|
|
144
|
-
children: /* @__PURE__ */
|
|
144
|
+
children: /* @__PURE__ */ d(_, {
|
|
145
145
|
permission: r.MEMBER_CREATE,
|
|
146
146
|
deniedBehavior: "disable",
|
|
147
|
-
deniedTooltip: i(
|
|
148
|
-
children: /* @__PURE__ */
|
|
149
|
-
onClick:
|
|
150
|
-
disabled: !
|
|
151
|
-
children: [/* @__PURE__ */
|
|
147
|
+
deniedTooltip: i(v, "membersList.noPermissionToInvite", "You don't have permission to invite members"),
|
|
148
|
+
children: /* @__PURE__ */ f(m, {
|
|
149
|
+
onClick: Q,
|
|
150
|
+
disabled: !E,
|
|
151
|
+
children: [/* @__PURE__ */ d(u, { className: "size-4 sm:mr-2" }), /* @__PURE__ */ d("span", {
|
|
152
152
|
className: "hidden sm:inline",
|
|
153
|
-
children: i(
|
|
153
|
+
children: i(v, "membersList.inviteMember", "Invite Member")
|
|
154
154
|
})]
|
|
155
155
|
})
|
|
156
156
|
})
|
|
157
157
|
})]
|
|
158
158
|
}),
|
|
159
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ f("div", {
|
|
160
160
|
className: "flex flex-col sm:flex-row gap-3 sm:gap-4",
|
|
161
|
-
children: [/* @__PURE__ */
|
|
161
|
+
children: [/* @__PURE__ */ f("div", {
|
|
162
162
|
className: "relative flex-1",
|
|
163
|
-
children: [/* @__PURE__ */
|
|
164
|
-
placeholder: i(
|
|
165
|
-
value:
|
|
166
|
-
onChange: (e) =>
|
|
163
|
+
children: [/* @__PURE__ */ d(le, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-text-secondary" }), /* @__PURE__ */ d(de, {
|
|
164
|
+
placeholder: i(v, "membersList.searchPlaceholder", "Search members..."),
|
|
165
|
+
value: D,
|
|
166
|
+
onChange: (e) => Se(e.target.value),
|
|
167
167
|
className: "pl-9"
|
|
168
168
|
})]
|
|
169
|
-
}),
|
|
169
|
+
}), H && /* @__PURE__ */ d("div", {
|
|
170
170
|
className: "flex items-center gap-2",
|
|
171
|
-
children: /* @__PURE__ */ p
|
|
171
|
+
children: /* @__PURE__ */ f(p, {
|
|
172
172
|
variant: "secondary",
|
|
173
173
|
className: "text-sm",
|
|
174
174
|
children: [
|
|
175
|
-
|
|
175
|
+
z.length,
|
|
176
176
|
" ",
|
|
177
|
-
|
|
177
|
+
z.length === 1 ? i(v, "membersList.pendingInvitation", "Pending Invitation") : i(v, "membersList.pendingInvitations", "Pending Invitations")
|
|
178
178
|
]
|
|
179
179
|
})
|
|
180
180
|
})]
|
|
181
181
|
}),
|
|
182
|
-
|
|
182
|
+
U.length > 0 && /* @__PURE__ */ f("div", {
|
|
183
183
|
className: "flex flex-col gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
184
|
-
children: [/* @__PURE__ */
|
|
184
|
+
children: [/* @__PURE__ */ f("label", {
|
|
185
185
|
className: "flex items-center gap-2 text-sm text-text-primary",
|
|
186
|
-
children: [/* @__PURE__ */
|
|
186
|
+
children: [/* @__PURE__ */ d("input", {
|
|
187
187
|
type: "checkbox",
|
|
188
|
-
checked:
|
|
188
|
+
checked: K,
|
|
189
189
|
ref: (e) => {
|
|
190
|
-
e && (e.indeterminate =
|
|
190
|
+
e && (e.indeterminate = Me && !K);
|
|
191
191
|
},
|
|
192
|
-
onChange: (e) =>
|
|
193
|
-
"aria-label": i(
|
|
192
|
+
onChange: (e) => Ie(e.target.checked),
|
|
193
|
+
"aria-label": i(v, "membersList.selectAllMembersAriaLabel", "Select all workspace members"),
|
|
194
194
|
className: "size-4 rounded border-border-subtle text-primary"
|
|
195
|
-
}), /* @__PURE__ */
|
|
196
|
-
}), /* @__PURE__ */
|
|
195
|
+
}), /* @__PURE__ */ d("span", { children: i(v, "membersList.selectAllVisibleMembers", "Select all visible members") })]
|
|
196
|
+
}), /* @__PURE__ */ f("div", {
|
|
197
197
|
className: "flex flex-wrap items-center gap-2",
|
|
198
198
|
children: [
|
|
199
|
-
/* @__PURE__ */
|
|
199
|
+
/* @__PURE__ */ f("span", {
|
|
200
200
|
className: "text-sm text-text-secondary",
|
|
201
201
|
children: [
|
|
202
|
-
|
|
202
|
+
b.size,
|
|
203
203
|
" ",
|
|
204
|
-
i(
|
|
204
|
+
i(v, "membersList.selected", "selected")
|
|
205
205
|
]
|
|
206
206
|
}),
|
|
207
|
-
|
|
207
|
+
b.size > 0 && /* @__PURE__ */ d(m, {
|
|
208
208
|
variant: "ghost",
|
|
209
209
|
size: "sm",
|
|
210
|
-
onClick:
|
|
211
|
-
children: i(
|
|
210
|
+
onClick: S,
|
|
211
|
+
children: i(v, "membersList.clearSelection", "Clear selection")
|
|
212
212
|
}),
|
|
213
|
-
|
|
213
|
+
Z && /* @__PURE__ */ f(m, {
|
|
214
214
|
variant: "outline",
|
|
215
215
|
size: "sm",
|
|
216
|
-
onClick:
|
|
217
|
-
disabled:
|
|
216
|
+
onClick: Re,
|
|
217
|
+
disabled: W.length === 0 || Ee,
|
|
218
218
|
className: "text-status-error-text",
|
|
219
|
-
children: [i(
|
|
219
|
+
children: [i(v, "membersList.removeSelected", "Remove Selected"), W.length > 0 ? ` (${W.length})` : ""]
|
|
220
220
|
})
|
|
221
221
|
]
|
|
222
222
|
})]
|
|
223
223
|
}),
|
|
224
|
-
|
|
224
|
+
B && /* @__PURE__ */ d("div", {
|
|
225
225
|
className: "space-y-3",
|
|
226
226
|
children: [...[
|
|
227
227
|
,
|
|
@@ -229,217 +229,172 @@ function y() {
|
|
|
229
229
|
,
|
|
230
230
|
,
|
|
231
231
|
,
|
|
232
|
-
]].map((e, t) => /* @__PURE__ */
|
|
232
|
+
]].map((e, t) => /* @__PURE__ */ d(g, { className: "h-20 w-full" }, t))
|
|
233
233
|
}),
|
|
234
|
-
!
|
|
234
|
+
!B && A && /* @__PURE__ */ f("div", {
|
|
235
235
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
236
236
|
children: [
|
|
237
|
-
/* @__PURE__ */
|
|
237
|
+
/* @__PURE__ */ d("div", {
|
|
238
238
|
className: "rounded-full bg-status-error-bg/10 p-6 mb-4",
|
|
239
|
-
children: /* @__PURE__ */
|
|
239
|
+
children: /* @__PURE__ */ d(se, {
|
|
240
240
|
size: 48,
|
|
241
241
|
className: "text-status-error-text"
|
|
242
242
|
})
|
|
243
243
|
}),
|
|
244
|
-
/* @__PURE__ */
|
|
244
|
+
/* @__PURE__ */ d("h3", {
|
|
245
245
|
className: "text-lg font-semibold mb-2",
|
|
246
|
-
children: i(
|
|
246
|
+
children: i(v, "membersList.failedToLoad", "Failed to Load Members")
|
|
247
247
|
}),
|
|
248
|
-
/* @__PURE__ */
|
|
248
|
+
/* @__PURE__ */ d("p", {
|
|
249
249
|
className: "text-text-secondary max-w-sm",
|
|
250
|
-
children:
|
|
250
|
+
children: A instanceof Error ? A.message : i(v, "membersList.errorLoadingMembers", "An error occurred while loading members")
|
|
251
251
|
})
|
|
252
252
|
]
|
|
253
253
|
}),
|
|
254
|
-
!
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
className: "rounded-full bg-bg-sunken p-6 mb-4",
|
|
259
|
-
children: /* @__PURE__ */ f(d, {
|
|
260
|
-
size: 48,
|
|
261
|
-
className: "text-text-secondary"
|
|
262
|
-
})
|
|
263
|
-
}),
|
|
264
|
-
/* @__PURE__ */ f("h3", {
|
|
265
|
-
className: "text-lg font-semibold mb-2",
|
|
266
|
-
children: i(y, "membersList.noWorkspaceSelected", "No Workspace Selected")
|
|
267
|
-
}),
|
|
268
|
-
/* @__PURE__ */ f("p", {
|
|
269
|
-
className: "text-text-secondary max-w-sm",
|
|
270
|
-
children: i(y, "membersList.selectWorkspacePrompt", "Select a workspace to view and manage its members")
|
|
271
|
-
})
|
|
272
|
-
]
|
|
254
|
+
!B && !A && !E && /* @__PURE__ */ d(h, {
|
|
255
|
+
illustration: "empty-people",
|
|
256
|
+
title: i(v, "membersList.noWorkspaceSelected", "No Workspace Selected"),
|
|
257
|
+
description: i(v, "membersList.selectWorkspacePrompt", "Select a workspace to view and manage its members")
|
|
273
258
|
}),
|
|
274
|
-
!
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
className: "text-lg font-semibold mb-2",
|
|
286
|
-
children: i(y, "membersList.noMembersYet", "No Members Yet")
|
|
287
|
-
}),
|
|
288
|
-
/* @__PURE__ */ f("p", {
|
|
289
|
-
className: "text-text-secondary max-w-sm mb-4",
|
|
290
|
-
children: i(y, "membersList.noMembersPrompt", "Start building your team by inviting members to this workspace")
|
|
291
|
-
}),
|
|
292
|
-
/* @__PURE__ */ f(_, {
|
|
293
|
-
permission: r.MEMBER_CREATE,
|
|
294
|
-
deniedBehavior: "disable",
|
|
295
|
-
deniedTooltip: i(y, "membersList.noPermissionToInvite", "You don't have permission to invite members"),
|
|
296
|
-
children: /* @__PURE__ */ p(h, {
|
|
297
|
-
onClick: $,
|
|
298
|
-
children: [/* @__PURE__ */ f(u, { className: "mr-2 size-4" }), i(y, "membersList.inviteFirstMember", "Invite Your First Member")]
|
|
299
|
-
})
|
|
259
|
+
!B && !A && E && !V && /* @__PURE__ */ d(h, {
|
|
260
|
+
illustration: "empty-people",
|
|
261
|
+
title: i(v, "membersList.noMembersYet", "No Members Yet"),
|
|
262
|
+
description: i(v, "membersList.noMembersPrompt", "Start building your team by inviting members to this workspace"),
|
|
263
|
+
action: /* @__PURE__ */ d(_, {
|
|
264
|
+
permission: r.MEMBER_CREATE,
|
|
265
|
+
deniedBehavior: "disable",
|
|
266
|
+
deniedTooltip: i(v, "membersList.noPermissionToInvite", "You don't have permission to invite members"),
|
|
267
|
+
children: /* @__PURE__ */ f(m, {
|
|
268
|
+
onClick: Q,
|
|
269
|
+
children: [/* @__PURE__ */ d(u, { className: "mr-2 size-4" }), i(v, "membersList.inviteFirstMember", "Invite Your First Member")]
|
|
300
270
|
})
|
|
301
|
-
|
|
271
|
+
})
|
|
302
272
|
}),
|
|
303
|
-
!
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
className: "rounded-full bg-bg-sunken p-6 mb-4",
|
|
308
|
-
children: /* @__PURE__ */ f(l, {
|
|
309
|
-
size: 48,
|
|
310
|
-
className: "text-text-secondary"
|
|
311
|
-
})
|
|
312
|
-
}),
|
|
313
|
-
/* @__PURE__ */ f("h3", {
|
|
314
|
-
className: "text-lg font-semibold mb-2",
|
|
315
|
-
children: i(y, "membersList.noMembersFound", "No Members Found")
|
|
316
|
-
}),
|
|
317
|
-
/* @__PURE__ */ f("p", {
|
|
318
|
-
className: "text-text-secondary max-w-sm",
|
|
319
|
-
children: i(y, "membersList.noMembersFoundPrompt", "No members match your search criteria. Try adjusting your search.")
|
|
320
|
-
})
|
|
321
|
-
]
|
|
273
|
+
!B && !A && E && V && U.length === 0 && /* @__PURE__ */ d(h, {
|
|
274
|
+
illustration: "empty-search",
|
|
275
|
+
title: i(v, "membersList.noMembersFound", "No Members Found"),
|
|
276
|
+
description: i(v, "membersList.noMembersFoundPrompt", "No members match your search criteria. Try adjusting your search.")
|
|
322
277
|
}),
|
|
323
|
-
!
|
|
278
|
+
!B && U.length > 0 && /* @__PURE__ */ f("div", {
|
|
324
279
|
className: "space-y-3",
|
|
325
|
-
children: [/* @__PURE__ */
|
|
280
|
+
children: [/* @__PURE__ */ d("div", {
|
|
326
281
|
className: "flex items-center justify-between",
|
|
327
|
-
children: /* @__PURE__ */
|
|
282
|
+
children: /* @__PURE__ */ f("h2", {
|
|
328
283
|
className: "text-lg font-semibold",
|
|
329
284
|
children: [
|
|
330
|
-
i(
|
|
285
|
+
i(v, "membersList.activeMembers", "Active Members"),
|
|
331
286
|
" (",
|
|
332
|
-
|
|
287
|
+
U.length,
|
|
333
288
|
")"
|
|
334
289
|
]
|
|
335
290
|
})
|
|
336
|
-
}), /* @__PURE__ */
|
|
291
|
+
}), /* @__PURE__ */ d("div", {
|
|
337
292
|
className: "space-y-2",
|
|
338
|
-
children:
|
|
293
|
+
children: U.map((e) => /* @__PURE__ */ d(o, {
|
|
339
294
|
member: e,
|
|
340
|
-
selected:
|
|
295
|
+
selected: b.has(e.id),
|
|
341
296
|
onToggleSelect: (t) => {
|
|
342
|
-
t !==
|
|
297
|
+
t !== b.has(e.id) && x(e.id);
|
|
343
298
|
},
|
|
344
|
-
canRemove:
|
|
299
|
+
canRemove: Z
|
|
345
300
|
}, e.id))
|
|
346
301
|
})]
|
|
347
302
|
}),
|
|
348
|
-
!
|
|
303
|
+
!B && H && /* @__PURE__ */ f("div", {
|
|
349
304
|
className: "space-y-3",
|
|
350
305
|
children: [
|
|
351
|
-
/* @__PURE__ */
|
|
306
|
+
/* @__PURE__ */ d("h2", {
|
|
352
307
|
className: "text-lg font-semibold",
|
|
353
|
-
children: i(
|
|
308
|
+
children: i(v, "membersList.pendingInvitationsHeader", "Pending Invitations")
|
|
354
309
|
}),
|
|
355
|
-
/* @__PURE__ */
|
|
310
|
+
/* @__PURE__ */ f("div", {
|
|
356
311
|
className: "flex flex-col gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
357
|
-
children: [/* @__PURE__ */
|
|
312
|
+
children: [/* @__PURE__ */ f("label", {
|
|
358
313
|
className: "flex items-center gap-2 text-sm text-text-primary",
|
|
359
|
-
children: [/* @__PURE__ */
|
|
314
|
+
children: [/* @__PURE__ */ d("input", {
|
|
360
315
|
type: "checkbox",
|
|
361
|
-
checked:
|
|
316
|
+
checked: q,
|
|
362
317
|
ref: (e) => {
|
|
363
|
-
e && (e.indeterminate =
|
|
318
|
+
e && (e.indeterminate = Ne && !q);
|
|
364
319
|
},
|
|
365
|
-
onChange: (e) =>
|
|
366
|
-
"aria-label": i(
|
|
320
|
+
onChange: (e) => Le(e.target.checked),
|
|
321
|
+
"aria-label": i(v, "membersList.selectAllInvitationsAriaLabel", "Select all pending invitations"),
|
|
367
322
|
className: "size-4 rounded border-border-subtle text-primary"
|
|
368
|
-
}), /* @__PURE__ */
|
|
369
|
-
}), /* @__PURE__ */
|
|
323
|
+
}), /* @__PURE__ */ d("span", { children: i(v, "membersList.selectAllInvitations", "Select all invitations") })]
|
|
324
|
+
}), /* @__PURE__ */ f("div", {
|
|
370
325
|
className: "flex flex-wrap items-center gap-2",
|
|
371
326
|
children: [
|
|
372
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ f("span", {
|
|
373
328
|
className: "text-sm text-text-secondary",
|
|
374
329
|
children: [
|
|
375
|
-
|
|
330
|
+
I.size,
|
|
376
331
|
" ",
|
|
377
|
-
i(
|
|
332
|
+
i(v, "membersList.selected", "selected")
|
|
378
333
|
]
|
|
379
334
|
}),
|
|
380
|
-
|
|
335
|
+
I.size > 0 && /* @__PURE__ */ d(m, {
|
|
381
336
|
variant: "ghost",
|
|
382
337
|
size: "sm",
|
|
383
|
-
onClick: () =>
|
|
384
|
-
children: i(
|
|
338
|
+
onClick: () => L(/* @__PURE__ */ new Set()),
|
|
339
|
+
children: i(v, "membersList.clearSelection", "Clear selection")
|
|
385
340
|
}),
|
|
386
|
-
|
|
341
|
+
X && /* @__PURE__ */ f(m, {
|
|
387
342
|
variant: "outline",
|
|
388
343
|
size: "sm",
|
|
389
|
-
onClick:
|
|
390
|
-
disabled:
|
|
391
|
-
children: [i(
|
|
344
|
+
onClick: ze,
|
|
345
|
+
disabled: G.length === 0 || N,
|
|
346
|
+
children: [i(v, "membersList.resendSelected", "Resend Selected"), G.length > 0 ? ` (${G.length})` : ""]
|
|
392
347
|
})
|
|
393
348
|
]
|
|
394
349
|
})]
|
|
395
350
|
}),
|
|
396
|
-
/* @__PURE__ */
|
|
351
|
+
/* @__PURE__ */ d("div", {
|
|
397
352
|
className: "space-y-2",
|
|
398
|
-
children:
|
|
353
|
+
children: z.map((e) => /* @__PURE__ */ f("div", {
|
|
399
354
|
className: "flex items-center justify-between p-4 border rounded-lg bg-bg-surface",
|
|
400
|
-
children: [/* @__PURE__ */
|
|
355
|
+
children: [/* @__PURE__ */ f("div", {
|
|
401
356
|
className: "flex items-center gap-3",
|
|
402
357
|
children: [
|
|
403
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ d("input", {
|
|
404
359
|
type: "checkbox",
|
|
405
|
-
checked:
|
|
406
|
-
onChange: (t) =>
|
|
407
|
-
"aria-label": `${i(
|
|
360
|
+
checked: I.has(e.id),
|
|
361
|
+
onChange: (t) => $(e.id, t.target.checked),
|
|
362
|
+
"aria-label": `${i(v, "membersList.selectInvitationAriaLabel", "Select invitation")} ${e.email}`,
|
|
408
363
|
className: "size-4 rounded border-border-subtle text-primary"
|
|
409
364
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
365
|
+
/* @__PURE__ */ d("div", {
|
|
411
366
|
className: "size-10 rounded-full bg-status-warning/10 flex items-center justify-center transition-colors",
|
|
412
|
-
children: /* @__PURE__ */
|
|
367
|
+
children: /* @__PURE__ */ d(ue, { className: "size-5 text-status-warning" })
|
|
413
368
|
}),
|
|
414
|
-
/* @__PURE__ */
|
|
369
|
+
/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
|
|
415
370
|
className: "font-medium text-sm",
|
|
416
371
|
children: e.email
|
|
417
|
-
}), /* @__PURE__ */
|
|
372
|
+
}), /* @__PURE__ */ f("p", {
|
|
418
373
|
className: "text-xs text-text-secondary",
|
|
419
374
|
children: [
|
|
420
|
-
i(
|
|
375
|
+
i(v, "membersList.invited", "Invited"),
|
|
421
376
|
" ",
|
|
422
377
|
new Date(e.createdAt).toLocaleDateString()
|
|
423
378
|
]
|
|
424
379
|
})] })
|
|
425
380
|
]
|
|
426
|
-
}), /* @__PURE__ */
|
|
381
|
+
}), /* @__PURE__ */ f("div", {
|
|
427
382
|
className: "flex items-center gap-2",
|
|
428
|
-
children: [/* @__PURE__ */
|
|
383
|
+
children: [/* @__PURE__ */ d(_, {
|
|
429
384
|
permission: r.MEMBER_CREATE,
|
|
430
385
|
deniedBehavior: "disable",
|
|
431
|
-
deniedTooltip: i(
|
|
432
|
-
children: /* @__PURE__ */
|
|
386
|
+
deniedTooltip: i(v, "membersList.noPermissionToResend", "You don't have permission to resend invitations"),
|
|
387
|
+
children: /* @__PURE__ */ f(m, {
|
|
433
388
|
variant: "outline",
|
|
434
389
|
size: "sm",
|
|
435
|
-
onClick: () =>
|
|
436
|
-
disabled:
|
|
437
|
-
children: [/* @__PURE__ */
|
|
390
|
+
onClick: () => De(e.id),
|
|
391
|
+
disabled: N && P === e.id,
|
|
392
|
+
children: [/* @__PURE__ */ d(ce, { className: `size-4 mr-1 ${N && P === e.id ? "animate-spin" : ""}` }), N && P === e.id ? i(v, "membersList.sending", "Sending...") : i(v, "membersList.resend", "Resend")]
|
|
438
393
|
})
|
|
439
|
-
}), /* @__PURE__ */
|
|
394
|
+
}), /* @__PURE__ */ d(p, {
|
|
440
395
|
variant: "outline",
|
|
441
396
|
className: "bg-status-warning/10 text-status-warning border-status-warning/30 transition-colors",
|
|
442
|
-
children: i(
|
|
397
|
+
children: i(v, "membersList.pending", "Pending")
|
|
443
398
|
})]
|
|
444
399
|
})]
|
|
445
400
|
}, e.id))
|
|
@@ -451,6 +406,6 @@ function y() {
|
|
|
451
406
|
});
|
|
452
407
|
}
|
|
453
408
|
//#endregion
|
|
454
|
-
export {
|
|
409
|
+
export { v as MembersListPage };
|
|
455
410
|
|
|
456
411
|
//# sourceMappingURL=MembersListPage.js.map
|