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