@burdenoff/microfe-workspaces 2026.625.3 → 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.
Files changed (33) hide show
  1. package/dist/pages/ActivityListPage.js +32 -48
  2. package/dist/pages/ActivityListPage.js.map +1 -1
  3. package/dist/pages/MembersListPage.js +196 -241
  4. package/dist/pages/MembersListPage.js.map +1 -1
  5. package/dist/pages/PendingInvitesPage.js +69 -78
  6. package/dist/pages/PendingInvitesPage.js.map +1 -1
  7. package/dist/pages/ProjectDetailPage.js +37 -52
  8. package/dist/pages/ProjectDetailPage.js.map +1 -1
  9. package/dist/pages/ProjectMembersPage.js +73 -86
  10. package/dist/pages/ProjectMembersPage.js.map +1 -1
  11. package/dist/pages/ProjectsListPage.js +103 -118
  12. package/dist/pages/ProjectsListPage.js.map +1 -1
  13. package/dist/pages/WorkspaceDetailPage.js +74 -76
  14. package/dist/pages/WorkspaceDetailPage.js.map +1 -1
  15. package/dist/pages/WorkspacesListPage.js +167 -178
  16. package/dist/pages/WorkspacesListPage.js.map +1 -1
  17. package/dist/pages/dashboard/widgets/AgentsWidget.js +21 -22
  18. package/dist/pages/dashboard/widgets/AgentsWidget.js.map +1 -1
  19. package/dist/pages/dashboard/widgets/ProjectsWidget.js +26 -27
  20. package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -1
  21. package/dist/pages/dashboard/widgets/RecentActivityWidget.js +19 -23
  22. package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -1
  23. package/dist/pages/dashboard/widgets/SessionsWidget.js +30 -32
  24. package/dist/pages/dashboard/widgets/SessionsWidget.js.map +1 -1
  25. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +18 -20
  26. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -1
  27. package/dist/pages/dashboard/widgets/VibesWidget.js +18 -19
  28. package/dist/pages/dashboard/widgets/VibesWidget.js.map +1 -1
  29. package/dist/pages/dashboard/widgets/WelcomeWidget.js +14 -12
  30. package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
  31. package/dist/pages/dashboard/widgets/WorkspacesWidget.js +20 -21
  32. package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -1
  33. 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 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 l, UserPlus as u, Users as d } from "lucide-react";
14
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
15
- import { Badge as m, Button as h, Input as ue, PageContainer as de, Skeleton as g } from "@burdenoff/fe-libs/ui";
16
- import { useNavigate as fe, useParams as pe, useSearchParams as me } from "react-router-dom";
17
- import { useDebounce as he } from "@burdenoff/fe-libs/shared/hooks";
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 ge } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
- import { useActorProfiles as v } from "@burdenoff/fe-libs/shared";
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 y() {
23
- let { t: y } = ge(), { memberFilters: _e, setMemberFilters: b, selectedMemberIds: x, toggleMemberSelection: S, clearMemberSelection: C } = t(), w = fe(), { workspaceId: ve } = e(), { basePath: T = "/workspaces" } = e(), { withCurrentSearch: E } = n(), { workspaceId: ye } = pe(), D = ye || ve;
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: D,
25
+ workspaceId: E,
26
26
  requireParams: !0
27
27
  });
28
- let [O, be] = c(_e.search || ""), k = he(O, 500);
29
- o(() => {
30
- b({ search: k });
31
- }, [k, b]);
32
- let { data: A, isLoading: xe, error: j } = re(D || ""), { data: M, isLoading: Se } = ne(D || "", "PENDING"), { mutate: N, isPending: P } = ae(), { mutate: Ce, isPending: we } = ie(), [F, I] = c(null), [L, R] = c(/* @__PURE__ */ new Set()), Te = (e) => {
33
- I(e), N(e, {
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
- I(null);
35
+ F(null);
36
36
  },
37
37
  onError: (e) => {
38
- console.error("Failed to resend invitation:", e), I(null);
38
+ console.error("Failed to resend invitation:", e), F(null);
39
39
  }
40
40
  });
41
- }, z = s(() => A?.items || [], [A?.items]), B = s(() => M?.items || [], [M?.items]), V = xe || Se, H = z.length > 0, U = B.length > 0, { apiGatewayUrl: Ee, authToken: De, organizationId: Oe } = e(), ke = v(s(() => z.map((e) => ({
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
- })), [z]), {
45
- apiGatewayUrl: Ee,
46
- authToken: De,
47
- orgId: Oe,
48
- workspaceId: D
49
- }), W = z.filter((e) => {
50
- if (!k) return !0;
51
- let t = k.toLowerCase(), n = ke[e.userId];
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
- }), G = s(() => W.filter((e) => x.has(e.id)), [W, x]), K = s(() => B.filter((e) => L.has(e.id)), [B, L]), q = W.length > 0 && W.every((e) => x.has(e.id)), Ae = W.some((e) => x.has(e.id)) && !q, J = B.length > 0 && B.every((e) => L.has(e.id)), je = B.some((e) => L.has(e.id)) && !J;
56
- o(() => () => C(), [C]);
57
- let [Y, X] = me();
58
- o(() => {
59
- if (Y.get("invite") === "true" && D) {
60
- let e = new URLSearchParams(Y);
61
- e.delete("invite"), X(e, { replace: !0 }), w(E(`${T}/${D}/invite`), { replace: !0 });
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
- T
67
+ C,
68
+ T,
69
+ w
70
70
  ]);
71
- let { canListMembers: Me, canInviteMember: Z, canRemoveMember: Q, isLoading: Ne } = oe();
72
- if (Ne) return /* @__PURE__ */ p("div", {
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__ */ f(g, { className: "h-10 w-1/3" }), /* @__PURE__ */ f(g, { className: "h-64" })]
74
+ children: [/* @__PURE__ */ d(g, { className: "h-10 w-1/3" }), /* @__PURE__ */ d(g, { className: "h-64" })]
75
75
  });
76
- if (!Me && !Z) return /* @__PURE__ */ f("div", {
76
+ if (!Pe && !X) return /* @__PURE__ */ d("div", {
77
77
  className: "flex items-center justify-center min-h-[400px]",
78
- children: /* @__PURE__ */ p("div", {
78
+ children: /* @__PURE__ */ f("div", {
79
79
  className: "text-center space-y-2",
80
- children: [/* @__PURE__ */ f("h2", {
80
+ children: [/* @__PURE__ */ d("h2", {
81
81
  className: "text-lg font-semibold",
82
- children: i(y, "membersList.accessDenied", "Access Denied")
83
- }), /* @__PURE__ */ f("p", {
82
+ children: i(v, "membersList.accessDenied", "Access Denied")
83
+ }), /* @__PURE__ */ d("p", {
84
84
  className: "text-sm text-text-secondary",
85
- children: i(y, "membersList.noPermissionToViewMembers", "You don't have permission to view workspace members.")
85
+ children: i(v, "membersList.noPermissionToViewMembers", "You don't have permission to view workspace members.")
86
86
  })]
87
87
  })
88
88
  });
89
- let $ = () => {
90
- D && w(E(`${T}/${D}/invite`));
91
- }, Pe = (e) => {
92
- W.forEach((t) => {
93
- e !== x.has(t.id) && S(t.id);
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
- }, Fe = (e, t) => {
96
- R((n) => {
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
- }, Ie = (e) => {
101
- R((t) => {
100
+ }, Le = (e) => {
101
+ L((t) => {
102
102
  let n = new Set(t);
103
- return B.forEach((t) => {
103
+ return z.forEach((t) => {
104
104
  e ? n.add(t.id) : n.delete(t.id);
105
105
  }), n;
106
106
  });
107
- }, Le = async () => {
108
- if (G.length === 0) return;
107
+ }, Re = async () => {
108
+ if (W.length === 0) return;
109
109
  te("medium");
110
- let e = `${i(y, "membersList.bulkRemoveConfirmPrefix", "Remove")} ${G.length} ${G.length === 1 ? i(y, "membersList.bulkRemoveConfirmSingular", "selected member") : i(y, "membersList.bulkRemoveConfirmPlural", "selected members")} ${i(y, "membersList.bulkRemoveConfirmSuffix", "from this workspace?")}`, t = await ee({
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) && (G.forEach((e) => {
117
- Ce(e.userId);
118
- }), C());
119
- }, Re = () => {
120
- K.length !== 0 && K.forEach((e) => {
121
- N(e.id, { onSuccess: () => {
122
- R((t) => {
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__ */ f(de, {
129
+ return /* @__PURE__ */ d(fe, {
130
130
  padded: !1,
131
- children: /* @__PURE__ */ p("div", {
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__ */ p("div", {
134
+ /* @__PURE__ */ f("div", {
135
135
  className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",
136
- children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h1", {
136
+ children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
137
137
  className: "text-2xl sm:text-3xl font-bold",
138
- children: i(y, "membersList.pageTitle", "Members")
139
- }), /* @__PURE__ */ f("p", {
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(y, "membersList.pageSubtitle", "Manage workspace members and invitations")
142
- })] }), /* @__PURE__ */ f("div", {
141
+ children: i(v, "membersList.pageSubtitle", "Manage workspace members and invitations")
142
+ })] }), /* @__PURE__ */ d("div", {
143
143
  className: "flex gap-2",
144
- children: /* @__PURE__ */ f(_, {
144
+ children: /* @__PURE__ */ d(_, {
145
145
  permission: r.MEMBER_CREATE,
146
146
  deniedBehavior: "disable",
147
- deniedTooltip: i(y, "membersList.noPermissionToInvite", "You don't have permission to invite members"),
148
- children: /* @__PURE__ */ p(h, {
149
- onClick: $,
150
- disabled: !D,
151
- children: [/* @__PURE__ */ f(u, { className: "size-4 sm:mr-2" }), /* @__PURE__ */ f("span", {
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(y, "membersList.inviteMember", "Invite Member")
153
+ children: i(v, "membersList.inviteMember", "Invite Member")
154
154
  })]
155
155
  })
156
156
  })
157
157
  })]
158
158
  }),
159
- /* @__PURE__ */ p("div", {
159
+ /* @__PURE__ */ f("div", {
160
160
  className: "flex flex-col sm:flex-row gap-3 sm:gap-4",
161
- children: [/* @__PURE__ */ p("div", {
161
+ children: [/* @__PURE__ */ f("div", {
162
162
  className: "relative flex-1",
163
- children: [/* @__PURE__ */ f(l, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-text-secondary" }), /* @__PURE__ */ f(ue, {
164
- placeholder: i(y, "membersList.searchPlaceholder", "Search members..."),
165
- value: O,
166
- onChange: (e) => be(e.target.value),
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
- }), U && /* @__PURE__ */ f("div", {
169
+ }), H && /* @__PURE__ */ d("div", {
170
170
  className: "flex items-center gap-2",
171
- children: /* @__PURE__ */ p(m, {
171
+ children: /* @__PURE__ */ f(p, {
172
172
  variant: "secondary",
173
173
  className: "text-sm",
174
174
  children: [
175
- B.length,
175
+ z.length,
176
176
  " ",
177
- B.length === 1 ? i(y, "membersList.pendingInvitation", "Pending Invitation") : i(y, "membersList.pendingInvitations", "Pending Invitations")
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
- W.length > 0 && /* @__PURE__ */ p("div", {
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__ */ p("label", {
184
+ children: [/* @__PURE__ */ f("label", {
185
185
  className: "flex items-center gap-2 text-sm text-text-primary",
186
- children: [/* @__PURE__ */ f("input", {
186
+ children: [/* @__PURE__ */ d("input", {
187
187
  type: "checkbox",
188
- checked: q,
188
+ checked: K,
189
189
  ref: (e) => {
190
- e && (e.indeterminate = Ae && !q);
190
+ e && (e.indeterminate = Me && !K);
191
191
  },
192
- onChange: (e) => Pe(e.target.checked),
193
- "aria-label": i(y, "membersList.selectAllMembersAriaLabel", "Select all workspace members"),
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__ */ f("span", { children: i(y, "membersList.selectAllVisibleMembers", "Select all visible members") })]
196
- }), /* @__PURE__ */ p("div", {
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__ */ p("span", {
199
+ /* @__PURE__ */ f("span", {
200
200
  className: "text-sm text-text-secondary",
201
201
  children: [
202
- x.size,
202
+ b.size,
203
203
  " ",
204
- i(y, "membersList.selected", "selected")
204
+ i(v, "membersList.selected", "selected")
205
205
  ]
206
206
  }),
207
- x.size > 0 && /* @__PURE__ */ f(h, {
207
+ b.size > 0 && /* @__PURE__ */ d(m, {
208
208
  variant: "ghost",
209
209
  size: "sm",
210
- onClick: C,
211
- children: i(y, "membersList.clearSelection", "Clear selection")
210
+ onClick: S,
211
+ children: i(v, "membersList.clearSelection", "Clear selection")
212
212
  }),
213
- Q && /* @__PURE__ */ p(h, {
213
+ Z && /* @__PURE__ */ f(m, {
214
214
  variant: "outline",
215
215
  size: "sm",
216
- onClick: Le,
217
- disabled: G.length === 0 || we,
216
+ onClick: Re,
217
+ disabled: W.length === 0 || Ee,
218
218
  className: "text-status-error-text",
219
- children: [i(y, "membersList.removeSelected", "Remove Selected"), G.length > 0 ? ` (${G.length})` : ""]
219
+ children: [i(v, "membersList.removeSelected", "Remove Selected"), W.length > 0 ? ` (${W.length})` : ""]
220
220
  })
221
221
  ]
222
222
  })]
223
223
  }),
224
- V && /* @__PURE__ */ f("div", {
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__ */ f(g, { className: "h-20 w-full" }, t))
232
+ ]].map((e, t) => /* @__PURE__ */ d(g, { className: "h-20 w-full" }, t))
233
233
  }),
234
- !V && j && /* @__PURE__ */ p("div", {
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__ */ f("div", {
237
+ /* @__PURE__ */ d("div", {
238
238
  className: "rounded-full bg-status-error-bg/10 p-6 mb-4",
239
- children: /* @__PURE__ */ f(ce, {
239
+ children: /* @__PURE__ */ d(se, {
240
240
  size: 48,
241
241
  className: "text-status-error-text"
242
242
  })
243
243
  }),
244
- /* @__PURE__ */ f("h3", {
244
+ /* @__PURE__ */ d("h3", {
245
245
  className: "text-lg font-semibold mb-2",
246
- children: i(y, "membersList.failedToLoad", "Failed to Load Members")
246
+ children: i(v, "membersList.failedToLoad", "Failed to Load Members")
247
247
  }),
248
- /* @__PURE__ */ f("p", {
248
+ /* @__PURE__ */ d("p", {
249
249
  className: "text-text-secondary max-w-sm",
250
- children: j instanceof Error ? j.message : i(y, "membersList.errorLoadingMembers", "An error occurred while loading members")
250
+ children: A instanceof Error ? A.message : i(v, "membersList.errorLoadingMembers", "An error occurred while loading members")
251
251
  })
252
252
  ]
253
253
  }),
254
- !V && !j && !D && /* @__PURE__ */ p("div", {
255
- className: "flex flex-col items-center justify-center py-12 text-center",
256
- children: [
257
- /* @__PURE__ */ f("div", {
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
- !V && !j && D && !H && /* @__PURE__ */ p("div", {
275
- className: "flex flex-col items-center justify-center py-12 text-center",
276
- children: [
277
- /* @__PURE__ */ f("div", {
278
- className: "rounded-full bg-bg-sunken p-6 mb-4",
279
- children: /* @__PURE__ */ f(d, {
280
- size: 48,
281
- className: "text-text-secondary"
282
- })
283
- }),
284
- /* @__PURE__ */ f("h3", {
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
- !V && !j && D && H && W.length === 0 && /* @__PURE__ */ p("div", {
304
- className: "flex flex-col items-center justify-center py-12 text-center",
305
- children: [
306
- /* @__PURE__ */ f("div", {
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
- !V && W.length > 0 && /* @__PURE__ */ p("div", {
278
+ !B && U.length > 0 && /* @__PURE__ */ f("div", {
324
279
  className: "space-y-3",
325
- children: [/* @__PURE__ */ f("div", {
280
+ children: [/* @__PURE__ */ d("div", {
326
281
  className: "flex items-center justify-between",
327
- children: /* @__PURE__ */ p("h2", {
282
+ children: /* @__PURE__ */ f("h2", {
328
283
  className: "text-lg font-semibold",
329
284
  children: [
330
- i(y, "membersList.activeMembers", "Active Members"),
285
+ i(v, "membersList.activeMembers", "Active Members"),
331
286
  " (",
332
- W.length,
287
+ U.length,
333
288
  ")"
334
289
  ]
335
290
  })
336
- }), /* @__PURE__ */ f("div", {
291
+ }), /* @__PURE__ */ d("div", {
337
292
  className: "space-y-2",
338
- children: W.map((e) => /* @__PURE__ */ f(se, {
293
+ children: U.map((e) => /* @__PURE__ */ d(o, {
339
294
  member: e,
340
- selected: x.has(e.id),
295
+ selected: b.has(e.id),
341
296
  onToggleSelect: (t) => {
342
- t !== x.has(e.id) && S(e.id);
297
+ t !== b.has(e.id) && x(e.id);
343
298
  },
344
- canRemove: Q
299
+ canRemove: Z
345
300
  }, e.id))
346
301
  })]
347
302
  }),
348
- !V && U && /* @__PURE__ */ p("div", {
303
+ !B && H && /* @__PURE__ */ f("div", {
349
304
  className: "space-y-3",
350
305
  children: [
351
- /* @__PURE__ */ f("h2", {
306
+ /* @__PURE__ */ d("h2", {
352
307
  className: "text-lg font-semibold",
353
- children: i(y, "membersList.pendingInvitationsHeader", "Pending Invitations")
308
+ children: i(v, "membersList.pendingInvitationsHeader", "Pending Invitations")
354
309
  }),
355
- /* @__PURE__ */ p("div", {
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__ */ p("label", {
312
+ children: [/* @__PURE__ */ f("label", {
358
313
  className: "flex items-center gap-2 text-sm text-text-primary",
359
- children: [/* @__PURE__ */ f("input", {
314
+ children: [/* @__PURE__ */ d("input", {
360
315
  type: "checkbox",
361
- checked: J,
316
+ checked: q,
362
317
  ref: (e) => {
363
- e && (e.indeterminate = je && !J);
318
+ e && (e.indeterminate = Ne && !q);
364
319
  },
365
- onChange: (e) => Ie(e.target.checked),
366
- "aria-label": i(y, "membersList.selectAllInvitationsAriaLabel", "Select all pending invitations"),
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__ */ f("span", { children: i(y, "membersList.selectAllInvitations", "Select all invitations") })]
369
- }), /* @__PURE__ */ p("div", {
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__ */ p("span", {
327
+ /* @__PURE__ */ f("span", {
373
328
  className: "text-sm text-text-secondary",
374
329
  children: [
375
- L.size,
330
+ I.size,
376
331
  " ",
377
- i(y, "membersList.selected", "selected")
332
+ i(v, "membersList.selected", "selected")
378
333
  ]
379
334
  }),
380
- L.size > 0 && /* @__PURE__ */ f(h, {
335
+ I.size > 0 && /* @__PURE__ */ d(m, {
381
336
  variant: "ghost",
382
337
  size: "sm",
383
- onClick: () => R(/* @__PURE__ */ new Set()),
384
- children: i(y, "membersList.clearSelection", "Clear selection")
338
+ onClick: () => L(/* @__PURE__ */ new Set()),
339
+ children: i(v, "membersList.clearSelection", "Clear selection")
385
340
  }),
386
- Z && /* @__PURE__ */ p(h, {
341
+ X && /* @__PURE__ */ f(m, {
387
342
  variant: "outline",
388
343
  size: "sm",
389
- onClick: Re,
390
- disabled: K.length === 0 || P,
391
- children: [i(y, "membersList.resendSelected", "Resend Selected"), K.length > 0 ? ` (${K.length})` : ""]
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__ */ f("div", {
351
+ /* @__PURE__ */ d("div", {
397
352
  className: "space-y-2",
398
- children: B.map((e) => /* @__PURE__ */ p("div", {
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__ */ p("div", {
355
+ children: [/* @__PURE__ */ f("div", {
401
356
  className: "flex items-center gap-3",
402
357
  children: [
403
- /* @__PURE__ */ f("input", {
358
+ /* @__PURE__ */ d("input", {
404
359
  type: "checkbox",
405
- checked: L.has(e.id),
406
- onChange: (t) => Fe(e.id, t.target.checked),
407
- "aria-label": `${i(y, "membersList.selectInvitationAriaLabel", "Select invitation")} ${e.email}`,
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__ */ f("div", {
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__ */ f(d, { className: "size-5 text-status-warning" })
367
+ children: /* @__PURE__ */ d(ue, { className: "size-5 text-status-warning" })
413
368
  }),
414
- /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
369
+ /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
415
370
  className: "font-medium text-sm",
416
371
  children: e.email
417
- }), /* @__PURE__ */ p("p", {
372
+ }), /* @__PURE__ */ f("p", {
418
373
  className: "text-xs text-text-secondary",
419
374
  children: [
420
- i(y, "membersList.invited", "Invited"),
375
+ i(v, "membersList.invited", "Invited"),
421
376
  " ",
422
377
  new Date(e.createdAt).toLocaleDateString()
423
378
  ]
424
379
  })] })
425
380
  ]
426
- }), /* @__PURE__ */ p("div", {
381
+ }), /* @__PURE__ */ f("div", {
427
382
  className: "flex items-center gap-2",
428
- children: [/* @__PURE__ */ f(_, {
383
+ children: [/* @__PURE__ */ d(_, {
429
384
  permission: r.MEMBER_CREATE,
430
385
  deniedBehavior: "disable",
431
- deniedTooltip: i(y, "membersList.noPermissionToResend", "You don't have permission to resend invitations"),
432
- children: /* @__PURE__ */ p(h, {
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: () => Te(e.id),
436
- disabled: P && F === e.id,
437
- children: [/* @__PURE__ */ f(le, { className: `size-4 mr-1 ${P && F === e.id ? "animate-spin" : ""}` }), P && F === e.id ? i(y, "membersList.sending", "Sending...") : i(y, "membersList.resend", "Resend")]
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__ */ f(m, {
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(y, "membersList.pending", "Pending")
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 { y as MembersListPage };
409
+ export { v as MembersListPage };
455
410
 
456
411
  //# sourceMappingURL=MembersListPage.js.map